Mexico foreign trade invoicing compliance
This module adds Mexican foreign trade (COMEX) compliance on top of CFDI invoicing.
Features
- Pedimento management linked to inventory lots (import path)
- Tariff code (fracción arancelaria) on products
- Import details on invoice lines for Mexican companies
- Pedimento numbers in CFDI concept InformacionAduanera / NumerosPedimento
- Pedimento propagation from landed costs to lots
- Complemento Comercio Exterior 2.0 on customer invoices: Exportacion=02 plus satcfdi cce20.ComercioExterior (Emisor/Receptor/ Destinatario domicilios, mercancías, TipoCambioUSD, TotalUSD)
- Reuses the standard invoice Incoterm field (invoice_incoterm_id / account.incoterms) for SAT c_INCOTERM; no duplicate Incoterm field
PAC notes
- Stamp / XML-issue PACs can stamp sealed CFDIs that include CCE.
- Facturama Multiemisor cannot map CCE; l10n_mx_cfdi switches to FacturamaWeb when the complement is present.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Adds Mexican foreign trade (COMEX) compliance to Odoo: manage customs pedimentos, link them to lots and landed costs, set tariff codes on products, and issue CFDI invoices with the Comercio Exterior 2.0 complement.
This module helps Mexican companies that export or import goods comply with SAT foreign trade rules. It adds a new "Pedimentos" menu under Inventory > Operations where you register customs declarations (pedimento number, customs office, date). Each pedimento number must follow the official format (e.g. 15 48 3009 0001234) and cannot be duplicated.
On products you can set a Tariff Code (fracción arancelaria) from the SAT catalog. On inventory lots you can assign a pedimento, and when you validate a landed cost that has a pedimento, it is automatically copied to the lots of the related receipts.
On customer invoices and credit notes a new "COMEX / CCE" tab appears. Tick "Comercio Exterior (CCE)" to enable the complement; Odoo then requires a pedimento key, an Incoterm, a USD exchange rate, at least one product line with a USD value, and a tariff code on each product. It also checks that issuer and receptor addresses are complete. Invoice lines gain extra columns for customs quantity, unit, unit value and USD value. The total in USD is computed automatically from the lines. When the complement is enabled, the invoice is stamped with Exportacion=02 and the Comercio Exterior 2.0 data. For invoices without CCE, pedimento numbers linked through lots are added to the CFDI concept as InformacionAduanera.
Depends on
Menus it adds
Models and fields (6)
- stock.lot · extends an existing modell10n_mx_cfdi_pedimento_id (Pedimento)
- account.move · extends an existing modell10n_mx_cfdi_cce_enabled (Comercio Exterior (CCE)), l10n_mx_cfdi_cce_total_usd (Total USD), l10n_mx_cfdi_cce_observaciones (Observaciones CCE), l10n_mx_cfdi_cce_clave_pedimento (Clave de pedimento), l10n_mx_cfdi_cce_destinatario_id (Destinatario CCE), l10n_mx_cfdi_cce_motivo_traslado (Motivo de traslado), l10n_mx_cfdi_cce_tipo_cambio_usd (Tipo cambio USD), l10n_mx_cfdi_cce_certificado_origen (Certificado de origen), l10n_mx_cfdi_cce_num_certificado_origen (Número certificado de origen), l10n_mx_cfdi_cce_numero_exportador_confiable (Número exportador confiable)
- product.template · extends an existing modell10n_mx_cfdi_tariff_code (Tariff Code)
- account.move.line · extends an existing modell10n_mx_cfdi_pedimento_ids (Pedimentos), l10n_mx_cfid_import_details (Import details), l10n_mx_cfdi_cce_unidad_aduana (Unidad aduana), l10n_mx_cfdi_cce_valor_dolares (Valor dólares), l10n_mx_cfdi_cce_cantidad_aduana (Cantidad aduana), l10n_mx_cfdi_cce_no_identificacion (No identificación CCE), l10n_mx_cfid_import_details_required (Import details required), l10n_mx_cfdi_cce_valor_unitario_aduana (Valor unitario aduana)
- stock.landed.cost · extends an existing modell10n_mx_cfdi_pedimento_id (Pedimento)
- l10n_mx_cfdi.pedimento · new modeldate (Fecha), name (Nombre), number (Número de Pedimento), lot_ids (Lotes), customs_id (Aduana)
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 1 confirmed, 8 with no information of 9 versions.
Sources · Odoo 19.0
Confirmed on 2026-11-03 in branch 19.0 of OCA/l10n-mexico.
terminal Installation and usage
OCA documentation · Odoo 19.0Installation
Source · Odoo 19.0Install the module from the Apps menu after its dependencies are installed (l10n_mx_cfdi_account, l10n_mx_catalogs_comex, and stock/sale stack).
Configuration
Source · Odoo 19.0Install l10n_mx_catalogs_comex and l10n_mx_cfdi_account before this module.
Configure tariff codes on product templates and create pedimentos from Inventory > Operations > Pedimentos.
For CCE exports, keep partner addresses complete and use the standard invoice Incoterm field. Prefer Banxico USD rates for Tipo cambio USD.
SAT catalog imports for c_INCOTERM, c_ClavePedimento, and c_UnidadAduana are not shipped as full data tables yet; codes are entered as Char fields (Incoterm reuses account.incoterms.code). See ROADMAP.
Usage
Source · Odoo 19.0Import pedimentos
Assign a pedimento to a landed cost before validation to copy it to the related lots. When invoicing products received with pedimentos, import details are appended to invoice lines and pedimento numbers are sent in the CFDI concepts (independent of CCE export).
Export — Comercio Exterior 2.0
- Set the product Tariff Code (fracción arancelaria).
- Ensure issuer and customer partners have street, ZIP, country, and state (SAT domicilio fields).
- On the invoice Other Info tab, set Incoterm (standard Odoo field).
- On the COMEX / CCE tab, enable Comercio Exterior (CCE) and fill:
- Clave de pedimento (default
A1) - Tipo cambio USD (MXN per 1 USD)
- Optional certificado de origen / observaciones / destinatario
- On invoice lines (optional columns), set Valor dólares and customs quantity / unit / unit value as needed.
- Generate the CFDI as usual. The builder sets
Exportacion=02and attaches the CCE complement.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.