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.
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.
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).
Module notes: requestor + user; local seal + stamp() only; cancel
not exposed in satcfdi.
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.
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().
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.
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.
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().
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.
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.