"""Catálogos de referencia del dominio (Incoterms y actores/participantes).

Se centralizan aquí para administrarlos en un solo lugar y validarlos desde el
levantamiento de requerimientos (R-T-10) y modelar los participantes del proceso
(R-T-01), incluyendo la autoridad aduanera.
"""

# Incoterms 2020 (R-T-10)
INCOTERMS: list[dict] = [
    {"code": "EXW", "name": "Ex Works — En fábrica"},
    {"code": "FCA", "name": "Free Carrier — Franco transportista"},
    {"code": "FAS", "name": "Free Alongside Ship — Franco al costado del buque"},
    {"code": "FOB", "name": "Free On Board — Franco a bordo"},
    {"code": "CFR", "name": "Cost and Freight — Costo y flete"},
    {"code": "CIF", "name": "Cost, Insurance and Freight — Costo, seguro y flete"},
    {"code": "CPT", "name": "Carriage Paid To — Transporte pagado hasta"},
    {"code": "CIP", "name": "Carriage and Insurance Paid To — Transporte y seguro pagados hasta"},
    {"code": "DAP", "name": "Delivered At Place — Entregado en lugar"},
    {"code": "DPU", "name": "Delivered At Place Unloaded — Entregado en lugar descargado"},
    {"code": "DDP", "name": "Delivered Duty Paid — Entregado con derechos pagados"},
]

INCOTERM_CODES: set[str] = {i["code"] for i in INCOTERMS}

# Roles/actores del proceso (R-T-01). Los actores externos se administran como
# proveedores (crm.suppliers) vía su clasificación; el cliente/prospecto como cuenta.
PARTICIPANT_ROLES: list[dict] = [
    {"code": "exportador", "label": "Exportador", "source": "account"},
    {"code": "importador", "label": "Importador", "source": "account"},
    {"code": "agente_carga", "label": "Agente de carga", "source": "supplier"},
    {"code": "agente_aduanal", "label": "Agente aduanal", "source": "supplier"},
    {"code": "naviera", "label": "Naviera", "source": "supplier"},
    {"code": "aerolinea", "label": "Aerolínea", "source": "supplier"},
    {"code": "transportista_terrestre", "label": "Transportista terrestre", "source": "supplier"},
    {"code": "agente_corresponsal", "label": "Agente corresponsal", "source": "supplier"},
    {"code": "autoridad_aduanera", "label": "Autoridad aduanera", "source": "supplier"},
]
