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:

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

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.