OdooWiki OCA HUB

Mexico - CFDI Generation

l10n_mx_cfdi folder_open OCA/l10n-mexico open_in_new
Accounting Licencia: LGPL-3

Este módulo proporciona la configuración utilizada por la facturación electrónica para México:

  • Integración multi-PAC mediante satcfdi (Finkok, Diverza, Prodigia, Comercio Digital, SW Sapien, MYSuite, Facturama).
  • Gestión local de CSD para el sellado de CFDI cuando el PAC utiliza stamp().
  • Carga de CSD Multiemisor de Facturama al registrar el emisor (requerido antes de issue()).
  • Gestión de diferentes series y emisores de CFDI para la misma compañía.

Matriz de capacidades CFDI × PAC

| Flujo | Finkok | Diverza | Prodigia | Com. Digital | SW Sapien | MYSuite | Facturama | |------|:------:|:-------:|:--------:|:------------:|:---------:|:-------:|:---------:| | Ruta | issue() | issue() | stamp() | stamp() | issue() | stamp() | issue() Multiemisor / Web | | Ingreso (I) | Sí | Sí | Sí | Sí | Sí | Sí | Sí | | Egreso (E) | Condicional | Condicional | Condicional | Condicional | Condicional | Condicional | Condicional | | Pago (P) | Condicional | Condicional | Condicional | Condicional | Condicional | Condicional | Condicional | | Traslado / Carta Porte | Sí | Sí | Sí | Sí | Sí | Sí | Sí | | Pedimentos en conceptos | Sí | Sí | Sí | Sí | Sí | Sí | Sí | | Complemento CCE completo | Condicional | Condicional | Condicional | Condicional | Condicional | Condicional | Condicional | | Cancelación (API) | Condicional | Sí | No | No | Sí | No | Sí | | Cancelación con acuse | Condicional | Desconocido | No | No | Desconocido | No | Condicional |

Leyenda

  • Sí: soportado de extremo a extremo mediante este módulo + satcfdi para ese PAC.
  • Condicional:
  • Egreso: requiere un reembolso totalmente conciliado (amount_residual == 0).
  • Pago: auto-sellado solo para pagos entrantes conciliados en facturas PPD; el sellado manual requiere datos válidos del CFDI de pago.
  • Cancelación Finkok: requiere FIEL de la compañía mediante l10n_mx_sat (firmante).
  • Acuse de cancelación Facturama: puede estar vacío; el módulo muestra el estado/mensaje cuando el PAC omite el acuse.
  • CCE completo: construido por l10n_mx_cfdi_comex (Exportacion=02 + cce20.ComercioExterior). Los PAC de sellado (Prodigia, Comercio Digital, MYSuite) y los PAC de emisión de XML (Finkok, Diverza, SW) pueden sellar XML sellado con CCE (la aceptación en vivo del PAC no se ha vuelto a probar exhaustivamente aquí). Facturama Multiemisor no soporta CCE; cuando CCE está presente, el módulo cambia a FacturamaWeb (mismo usuario/contraseña; CSD del perfil de la cuenta).
  • No:
  • La API de cancelación no está expuesta en satcfdi para Prodigia, Comercio Digital y MYSuite (supports_cancel=False).
  • Desconocido: la disponibilidad del acuse depende de la respuesta del PAC (Diverza / SW Sapien).
  • Ruta: Finkok, Diverza, SW Sapien y Facturama utilizan issue(); Prodigia, Comercio Digital y MYSuite utilizan sellado local con CSD + stamp(). Facturama es Multiemisor por defecto (Registrar carga el CSD); FacturamaWeb se utiliza automáticamente para Comercio Exterior.
  • Los pedimentos en conceptos no son el complemento CCE completo; el adaptador de Facturama mapea NumerosPedimento.

Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.

auto_awesome Qué hace este módulo

Generado por IA a partir del código · Odoo 19.0

Permite a las empresas mexicanas crear, timbrar, descargar y cancelar facturas electrónicas CFDI a través de varios proveedores PAC, y almacena en Odoo el XML, PDF, UUID y los datos de verificación del SAT resultantes.

Este módulo añade a Odoo un espacio de trabajo CFDI (factura electrónica mexicana) completo, independiente de las pantallas de facturación estándar.

Qué pueden hacer los usuarios: - Registrar emisores de CFDI con su RFC, nombre fiscal, logotipo y archivos de certificado digital (CSD), y activarlos para el timbrado. - Configurar uno o varios servicios PAC (proveedor de certificación) con credenciales, modo sandbox y timbres disponibles, y ver si cada proveedor admite la emisión y la cancelación. - Gestionar series de CFDI (secuencias de numeración) y registrar compras de timbres (recargas) con cantidad, precio y total. - Crear documentos CFDI de tipo Income, Expense, Payment o Transfer, con serie y folio asignados automáticamente desde la serie cuando se dejan vacíos. - Publicar (timbrar) un documento, lo que lo envía al PAC, almacena el UUID, XML, PDF, firmas, números de certificado, fecha de firma, códigos de impuesto y una URL de verificación del SAT con código QR. - Cancelar un documento con un motivo de cancelación, opcionalmente un UUID de sustitución, y almacenar el acuse de cancelación. - Consultar el estado actual de un CFDI ante el SAT a través del PAC. - Vincular documentos entre sí con un tipo de relación (documentos relacionados).

Dónde aparece: un menú CFDI con Documents, Issued CFDIs, Issuers, Series y PAC Settings. Los productos incorporan campos para el código de producto/servicio del SAT y la unidad de medida; los contactos incorporan régimen fiscal, uso del CFDI, método de pago y forma de pago.

Reglas de negocio: una compañía puede activar la creación automática de CFDI al publicar; los documentos deben estar en borrador para publicarse; se bloquean las combinaciones duplicadas de serie/folio; se rechaza la cancelación cuando el PAC no la admite o cuando falta el XML timbrado.

Depende de

Lo necesitan otros módulos

Menús que añade

DocumentsCFDI EmitidosIssuersCFDISeriesPAC Settings
Modelos y campos (9)
  • res.company · amplía un modelo existentel10n_mx_cfdi_auto (Create CFDI on post), l10n_mx_cfdi_enabled (Enable CFDI)
  • res.partner · amplía un modelo existentetax_regime (Fiscal Regime), cfdi_use_id (CFDI Usage), payment_form_id (Payment Form), payment_method_id (Payment Method)
  • product.template · amplía un modelo existentel10n_mx_cfdi_product_code_id (Código de Producto), l10n_mx_cfdi_product_measurement_unit_id (Unidad de Medida)
  • l10n_mx_cfdi.issuer · modelo nuevokey_file, logo_url (URL del logo), company_id, partner_id, registered, service_id, fiscal_name, key_password (Password), certificate_file
  • l10n_mx_cfdi.series · modelo nuevocode
  • l10n_mx_cfdi.document · modelo nuevoname (Nombre), type, uuid (UUID), folio, serie, state (Estado), version, pdf_file (Archivo PDF), xml_file (Archivo XML), issuer_id (Emisor), tax_codes (Código de impuesto), company_id, standalone (Independiente), cert_number (Número de certificado), receiver_id (Receptor), tracking_id (ID del documento en el API), pac_provider (PAC Provider), pdf_filename (Nombre del archivo PDF), signing_date (Fecha de timbrado), xml_filename (Nombre del archivo XML), sat_signature (Firma del SAT), cert_data_json, cfdi_signature (Firma del CFDI), files_in_cache, is_global_note (Nota global), original_string (Cadena original), rfc_prov_certif (RFC del proveedor de certificación), sat_cert_number (Número de certificado del SAT), issuing_datetime (Fecha de emisión), verification_url (URL de verificación)
  • l10n_mx_cfdi.cfdi_service · modelo nuevoname, user, pac_rfc (PAC RFC), password, provider, pac_token (PAC Token), company_ids (Companies), pac_country (PAC Country), pac_contrato (PAC Contract), sandbox_mode, pac_client_id (PAC Client ID), pac_requestor (PAC Requestor), supports_issue, supports_cancel, stamps_available (Stamps available)
  • l10n_mx_cfdi.document_relation · modelo nuevosource_id, target_id, relation_type_id
  • l10n_mx_cfdi.cfdi_service.topup · modelo nuevototal (Precio Total), partner_id (Contacto), service_id (Servicio), topup_date (Fecha de Adquisición), currency_id (Moneda), stamp_price (Precio por Folio), stamp_number (Cantidad de Folios)

Texto generado por IA (DeepSeek) al leer el código de la versión 19.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. El módulo es muy grande y solo se ha leído una parte del código. Ver el código en GitHub

Disponibilidad por versión

Revisado: 2026-11-03
Confirmado (verificado en repositorio y rama) Estimado (sin verificar) Sin información

Estado de confirmación: 3 confirmadas, 6 sin información de 9 versiones.

Fuentes · Odoo 15.0

Confirmado el 2026-11-03 en la rama 15.0 de OCA/l10n-mexico.

terminal Instalación y uso

Documentación de OCA · Odoo 19.0

Este módulo funciona con cualquier PAC soportado por la librería satcfdi:

  • Finkok
  • Diverza
  • Prodigia
  • Comercio Digital
  • SW Sapien
  • MYSuite
  • Facturama

Instala la dependencia de Python:

pip install "satcfdi>=26.7.3"

Comparativa de PAC

Precios de lista públicos indicativos a fecha aproximada de 2026-07 (MXN). Los importes y paquetes cambian sin previo aviso — confirma siempre con el proveedor antes de contratar. OCA y los autores del módulo no tienen relación comercial con estos PAC; los logotipos son propiedad de sus respectivos titulares y se utilizan únicamente a efectos de identificación.

Proveedores

Finkok — OnDemand: pago mensual por timbres emitidos. La página pública indica un mínimo de unos 500 timbres/mes (no acumulables); tarifas unitarias a través de ventas (históricamente se citaba alrededor de 150 MXN + IVA/mes por el bloque mínimo, y luego alrededor de 0.30 MXN + IVA por timbre — las tarifas exactas en MXN no aparecían en la página pública de OnDemand en el momento de la verificación).

  • Contratación / información: https://finkok.com/ · https://finkok.com/ondemand.html
  • Notas del módulo: usuario/contraseña; soporta issue(); la cancelación requiere un firmante (FIEL de la empresa mediante l10n_mx_sat).

Diverza (Timbre Fiscal) — Pyme alrededor de 999 MXN + IVA/año (550 CFDI); Empresarial alrededor de 1,599 MXN + IVA/año (1,100 CFDI). Planes mayores a través de ventas.

  • Contratación / información: https://portaldvz20.diverza.com/cfdi/timbre-fiscal/ · https://www.diverza.com/
  • Notas del módulo: RFC del PAC, client id y token; soporta issue().

Prodigia (PADE) — Sin precios de lista públicos; paquetes por volumen / contactar con ventas. Timbres sin caducidad (según el marketing del proveedor).

  • Contratación / información: https://www.prodigia.com.mx/soluciones/timbrado · https://facturacion.pade.mx/
  • Notas del módulo: usuario/contraseña/contrato; solo sello local + stamp() (supports_issue=False); cancelación no expuesta en satcfdi.

Comercio Digital — Ejemplo de paquetes de timbres (+ IVA), validez de 2 años: 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.

  • Contratación / información: https://www.comercio-digital.mx/comprar.html
  • Notas del módulo: usuario/contraseña; solo sello local + stamp(); cancelación no expuesta en satcfdi.

SW Sapien — Paquetes de timbres orientados a Odoo (tienda pública, MXN; confirmar 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. Sin caducidad (según el proveedor).

  • Contratación / información: https://tienda.sw.com.mx/shop/category/timbres-1 · https://sw.com.mx/ · https://info.sw.com.mx/sw-smarter-odoo
  • Notas del módulo: token o usuario/contraseña; soporta issue().

MYSuite — Paquetes de folios del portal (WEB / PLUS / PREMIUM) para facturación web; el precio de WS/API normalmente se basa en presupuesto (confirmar con ventas).

  • Compra / información: https://comprar.mysuitemex.com/ · https://www.mysuitemex.com/ · https://www.portal.mysuitemex.com/
  • Notas del módulo: requestor + usuario; solo sello local + stamp(); cancelación no expuesta en satcfdi.

Facturama — Módulo API alrededor de 1,650 MXN/año (IVA incl.), incluye API Web + Multiemisor y 100 folios; folios API adicionales alrededor de 0.50 / 0.45 / 0.40 MXN (IVA incl.) por tramos de volumen.

  • Contratación / información: https://facturama.mx/planes-facturacion · https://facturama.mx/api-facturacion-electronica
  • Notas del módulo: usuario/contraseña; ruta Multiemisor utilizada por este módulo — Registrar sube el CSD del emisor al PAC antes de issue(); soporta issue().

Integración del módulo (timbrar vs emitir)

| PAC | Ruta | Cancelación en satcfdi | Credenciales (resumen) | |-----|------|-------------------|------------------------| | Finkok | issue() (o timbrar) | Sí (requiere firmante) | usuario / contraseña | | Diverza | issue() | Sí | RFC del PAC, client id, token | | Prodigia | sello local + stamp() | No | usuario / contraseña / contrato | | Comercio Digital | sello local + stamp() | No | usuario / contraseña | | SW Sapien | issue() | Sí | token o usuario / contraseña | | MYSuite | sello local + stamp() | No | requestor + usuario | | Facturama | issue() (Multiemisor) | Sí | usuario / contraseña; subida de CSD en Registrar |

Prefiere los PAC que implementen issue() cuando sea posible. En caso contrario, el módulo firma localmente con el CSD del emisor y llama a stamp().

Tras la instalación, sigue Configuración para crear CFDI > PAC Settings, introduce las credenciales, registra los CSD de los emisores con Registrar y (cuando sea necesario) configura las series y la FIEL de la empresa para la cancelación de Finkok.

Migración disruptiva desde la API legacy de Facturama

  • Los documentos existentes que solo almacenan un tracking_id de Facturama sin el XML timbrado no se pueden cancelar ni recuperar a través de satcfdi. Cancélalos en el SAT / PAC anterior, o adjunta primero el XML del CFDI en el documento.
  • Vuelve a registrar los emisores tras cambiar al adaptador de Facturama de satcfdi para que el CSD de Multiemisor se suba de nuevo.
  • Prodigia, Comercio Digital y MYSuite no exponen la cancelación en satcfdi; el botón Cancelar permanece oculto para esos proveedores.
  • Prefiere los PAC que implementen issue() cuando sea posible; en caso contrario, el módulo firma localmente con el CSD del emisor y llama a stamp().

Sigue estas etapas para conectar Odoo a tu PAC y preparar a los emisores para el timbrado. Para consultar los precios de los proveedores, los enlaces de registro y las notas sobre timbrado vs emisión, consulta Installation.

  • Crear PAC Settings
  • Ve a CFDI > PAC Settings y crea un registro (o abre uno existente).
  • Establece un nombre y elige el Provider (Finkok, Diverza, Prodigia, Comercio Digital, SW Sapien, MYSuite o Facturama).
  • Asigna las compañías que usarán esta conexión PAC (multicompañía).
  • Introducir credenciales

Rellena los campos del grupo Credentials que apliquen a tu proveedor (usuarios de Settings / grupo system):

| Provider | Campos típicos | |----------|----------------| | Finkok | User, Password | | Diverza | Password o PAC Token, PAC RFC, PAC Client ID | | Prodigia | User, Password, PAC Contract | | Comercio Digital | User, Password | | SW Sapien | PAC Token, o User y Password | | MYSuite | User, PAC Requestor, PAC Country (por defecto MX) | | Facturama | User, Password |

Los nombres y requisitos de las credenciales pueden variar según el contrato con el PAC; confirma con la documentación del proveedor si algún campo no está claro.

  • Seleccionar entorno

Activa Sandbox Mode para el entorno de pruebas del PAC. Déjalo desactivado para producción.

  • Configurar el/los emisor(es) de CFDI y registrar el CSD
  • Ve a CFDI > Issuers y crea un emisor vinculado al registro de PAC Settings.
  • Establece RFC, nombre fiscal, ZIP y régimen fiscal.
  • Sube el certificado CSD, la clave privada y la contraseña de la clave.
  • Haz clic en Registrar para validar el CSD localmente (se usa para stamp() y para la cancelación cuando corresponda).

Facturama Multiemisor

Para Facturama, Registrar también sube el CSD del emisor al PAC. Esa carga es obligatoria antes de issue(). Vuelve a registrar los emisores después de cambiar al adaptador Facturama de satcfdi para que el CSD de Multiemisor se suba de nuevo.

  • Configurar series y folios

Ve a CFDI > Series y define el prefijo de la serie y el siguiente folio cuando tu compañía use series/folios controlados.

  • Cancelación con Finkok (FIEL de la compañía)

Para la cancelación con PACs que requieren un firmante (por ejemplo, Finkok), instala l10n_mx_sat y configura la FIEL de la compañía.

  • Validar la conexión

Confirma que el emisor aparece como registrado y luego timbra un CFDI de prueba en sandbox antes de pasar a producción. Cuando sea posible, prefiere los PACs que implementen issue(); de lo contrario, el módulo firma localmente con el CSD del emisor y llama a stamp().

Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Uso.

info

Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.