Skip to main content
Odoo Community Association

Mexico - CFDI Generation

Beta License: LGPL-3 OCA/l10n-mexico Translate me on Weblate Try me on Runboat

This module provides the configuration used by electronic invoicing for Mexico:

  • Multi-PAC integration via satcfdi (Finkok, Diverza, Prodigia, Comercio Digital, SW Sapien, MYSuite, Facturama).

  • Local CSD management for CFDI sealing when the PAC uses stamp().

  • Facturama Multiemisor CSD upload on issuer registration (required before issue()).

  • Management of different series and CFDI issuers for the same company.

CFDI × PAC capability matrix

Flow

Finkok

Diverza

Prodigia

Com. Digital

SW Sapien

MYSuite

Facturama

Path

issue()

issue()

stamp()

stamp()

issue()

stamp()

issue() Multiemisor / Web

Ingreso (I)

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Egreso (E)

Conditional

Conditional

Conditional

Conditional

Conditional

Conditional

Conditional

Pago (P)

Conditional

Conditional

Conditional

Conditional

Conditional

Conditional

Conditional

Traslado / Carta Porte

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Pedimentos on concepts

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Full CCE complement

Conditional

Conditional

Conditional

Conditional

Conditional

Conditional

Conditional

Cancel (API)

Conditional

Yes

No

No

Yes

No

Yes

Cancel with acuse

Conditional

Unknown

No

No

Unknown

No

Conditional

Legend

  • Yes: supported end-to-end via this module + satcfdi for that PAC.

  • Conditional:

    • Egreso: requires a fully reconciled refund (amount_residual == 0).

    • Pago: auto-stamp only for reconciled inbound payments on PPD invoices; manual stamping needs valid payment CFDI data.

    • Finkok cancel: requires company FIEL via l10n_mx_sat (signer).

    • Facturama cancel acuse: may be empty; the module shows status/message when the PAC omits the acuse.

    • Full CCE: built by l10n_mx_cfdi_comex (Exportacion=02 + cce20.ComercioExterior). Stamp PACs (Prodigia, Comercio Digital, MYSuite) and XML-issue PACs (Finkok, Diverza, SW) can stamp sealed XML with CCE (live PAC acceptance not exhaustively retested here). Facturama Multiemisor does not support CCE; when CCE is present the module switches to FacturamaWeb (same user/password; account-profile CSD).

  • No:

    • Cancel API is not exposed in satcfdi for Prodigia, Comercio Digital, and MYSuite (supports_cancel=False).

  • Unknown: acuse availability depends on the PAC response (Diverza / SW Sapien).

  • Path: Finkok, Diverza, SW Sapien, and Facturama use issue(); Prodigia, Comercio Digital, and MYSuite use local CSD seal + stamp(). Facturama is Multiemisor by default (Registrar uploads the CSD); FacturamaWeb is used automatically for Comercio Exterior.

  • Pedimentos on concepts are not the full CCE complement; the Facturama adapter maps NumerosPedimento.

Table of contents

Installation

This module works with any PAC supported by the satcfdi library:

  • Finkok

  • Diverza

  • Prodigia

  • Comercio Digital

  • SW Sapien

  • MYSuite

  • Facturama

Install the Python dependency:

pip install "satcfdi>=26.7.3"

PAC comparison

Indicative public list prices as of about 2026-07 (MXN). Amounts and packages change without notice — always confirm with the vendor before contracting. OCA and the module authors have no commercial relationship with these PACs; logos are property of their respective owners and are used for identification only.

Providers

Finkok

Finkok — OnDemand: pay monthly for stamps issued. Public page states a minimum of about 500 stamps/month (not accumulable); unit rates via sales (historically cited about 150 MXN + IVA/month for the minimum block, then about 0.30 MXN + IVA per stamp — exact MXN rates were not listed on the public OnDemand page at verification time).

Diverza

Diverza (Timbre Fiscal) — Pyme about 999 MXN + IVA/year (550 CFDIs); Empresarial about 1,599 MXN + IVA/year (1,100 CFDIs). Larger plans via sales.

Prodigia

Prodigia (PADE) — No public list prices; packages by volume / contact sales. Stamps without expiry (per vendor marketing).

Comercio Digital

Comercio Digital — Example stamp packs (+ IVA), 2-year validity: 200=400; 500=850; 1,000=1,400; 5,000=4,500; 10,000=7,800; 50,000=30,000; 100,000=45,000 MXN.

SW Sapien

SW Sapien — Odoo-oriented stamp packs (public store, MXN; confirm IVA): 1,200=2,266; 5,000=5,530; 10,000=8,230; 20,000=9,930; 30,000=11,830; 60,000=18,130; 100,000=23,730. No expiry (per vendor).

MYSuite

MYSuite — Portal folio packs (WEB / PLUS / PREMIUM) for web billing; WS/API pricing is typically quote-based (confirm with sales).

Facturama

Facturama — API module about 1,650 MXN/year (incl. IVA), includes API Web + Multiemisor and 100 folios; additional API folios about 0.50 / 0.45 / 0.40 MXN (incl. IVA) by volume bands.

Module integration (stamp vs issue)

PAC

Path

Cancel in satcfdi

Credentials (summary)

Finkok

issue() (or stamp)

Yes (signer required)

user / password

Diverza

issue()

Yes

PAC RFC, client id, token

Prodigia

local seal + stamp()

No

user / password / contrato

Comercio Digital

local seal + stamp()

No

user / password

SW Sapien

issue()

Yes

token or user / password

MYSuite

local seal + stamp()

No

requestor + user

Facturama

issue() (Multiemisor)

Yes

user / password; CSD upload on Registrar

Prefer PACs that implement issue() when possible. Otherwise the module signs locally with the issuer CSD and calls stamp().

After installing, follow Configuration to create CFDI > PAC Settings, enter credentials, register issuer CSDs with Registrar, and (when needed) configure series and company FIEL for Finkok cancel.

Breaking migration from legacy Facturama API

  • Existing documents that only store a Facturama tracking_id without the stamped XML cannot be cancelled or recovered through satcfdi. Cancel them at the SAT / previous PAC, or attach the CFDI XML on the document first.

  • Re-register issuers after switching to the satcfdi Facturama adapter so the Multiemisor CSD is uploaded again.

  • Prodigia, Comercio Digital, and MYSuite do not expose cancel in satcfdi; the Cancel button stays hidden for those providers.

  • Prefer PACs that implement issue() when possible; otherwise the module signs locally with the issuer CSD and calls stamp().

Configuration

Follow these stages to connect Odoo to your PAC and prepare issuers for stamping. For provider pricing, signup links, and stamp vs issue notes, see Installation.

1. Create PAC Settings

  1. Go to CFDI > PAC Settings and create a record (or open an existing one).

  2. Set a name and choose the Provider (Finkok, Diverza, Prodigia, Comercio Digital, SW Sapien, MYSuite, or Facturama).

  3. Assign the companies that will use this PAC connection (multi-company).

2. Enter credentials

Fill in the Credentials group fields that apply to your provider (Settings users / system group):

Provider

Typical fields

Finkok

User, Password

Diverza

Password or PAC Token, PAC RFC, PAC Client ID

Prodigia

User, Password, PAC Contract

Comercio Digital

User, Password

SW Sapien

PAC Token, or User and Password

MYSuite

User, PAC Requestor, PAC Country (default MX)

Facturama

User, Password

Credential names and requirements can vary by PAC contract; confirm with the provider documentation if a field is unclear.

3. Select environment

Enable Sandbox Mode for the PAC test environment. Leave it disabled for production.

4. Configure CFDI issuer(s) and register the CSD

  1. Go to CFDI > Issuers and create an issuer linked to the PAC Settings record.

  2. Set RFC, fiscal name, ZIP, and tax regime.

  3. Upload the CSD certificate, private key, and key password.

  4. Click Registrar to validate the CSD locally (used for stamp() and for cancel where applicable).

Facturama Multiemisor

For Facturama, Registrar also uploads the issuer CSD to the PAC. That upload is required before issue(). Re-register issuers after switching to the satcfdi Facturama adapter so the Multiemisor CSD is uploaded again.

5. Configure series and folios

Go to CFDI > Series and define the series prefix and next folio when your company uses controlled series/folios.

6. Finkok cancel (company FIEL)

For cancellation with PACs that require a signer (for example Finkok), install l10n_mx_sat and configure the company FIEL.

7. Validate the connection

Confirm that the issuer shows as registered, then stamp a test CFDI in sandbox before switching to production. Prefer PACs that implement issue() when possible; otherwise the module signs locally with the issuer CSD and calls stamp().

Known issues / Roadmap

  • Improve PAC cancel/status/recover capability coverage

  • Add more PAC-specific credential validation in the UI

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed feedback.

Do not contact contributors directly about support or help with technical issues.

Credits

Authors

  • Auge TEC

  • Gray Matter Logic

Contributors

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

This module is part of the OCA/l10n-mexico project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odoo_addon_l10n_mx_cfdi-19.0.2.2.0-py3-none-any.whl (209.5 kB view details)

Uploaded Python 3

File details

Details for the file odoo_addon_l10n_mx_cfdi-19.0.2.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for odoo_addon_l10n_mx_cfdi-19.0.2.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8ed3a242b9fdc9dd5983eb6ca5baccabe224277449ed59b6cc6cd42e5e3eaec9
MD5 70901ea5c16a1acd2f5b720f5ce950e9
BLAKE2b-256 c53307c9f97de459f7d1ad7e78ba46bd9ee4ae375695a5fc61a14fb710a02972

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

19.0.2.2.0 This release

1 file

19.0.1.0.0.5

1 file

19.0.1.0.0.4

1 file

19.0.1.0.0.3

1 file

19.0.1.0.0.2

1 file

17.0.1.1.0.1

1 file

17.0.1.1.0

1 file

17.0.1.0.1

1 file

17.0.1.0.0.15

1 file

17.0.1.0.0.14

1 file

17.0.1.0.0.12

1 file

17.0.1.0.0.11

1 file

17.0.1.0.0.9

1 file

17.0.1.0.0.7

1 file

17.0.1.0.0.6

1 file

17.0.1.0.0.1

1 file

15.0.1.0.0.4

1 file

15.0.1.0.0.2

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page