Repository
OCA/l10n-mexico · module folder · Try on Runboat
Module version
Category
Accounting
Folder size
0.48 MB
License
LGPL-3
Application
No
Auto-installable
No
Website
https://github.com/OCA/l10n-mexico
Last tracking update
2026-08-15 05:29:24
Authors
Odoo Community Association (OCA), Alexis López Zubieta <alexis.lopez@augetec.com> (Auge TEC)
Maintainers
Odoo Community Association (OCA), Alexis López Zubieta <alexis.lopez@augetec.com> (Auge TEC)
Committers
Maxime Chambreuil, Weblate, OCA-git-bot, oca-ci
Odoo dependencies
Python dependencies
satcfdi
System dependencies
None
Required by
l10n_mx_cfdi_account_addenda_audi, l10n_mx_cfdi_account_addenda_ford, l10n_mx_cfdi_account_addenda_kuehne_nagel, l10n_mx_cfdi_account_addenda_mabe, l10n_mx_cfdi_account_addenda_volkswagen, l10n_mx_cfdi_account_addenda_whirlpool, l10n_mx_cfdi_comex, l10n_mx_cfdi_waybill
Description
This module provides electronic invoicing for Mexico:

- Generation of electronic invoices compliant with the CFDI 4.0 standard.
- Customization of fiscal documents according to user needs.
- Centralized management of electronic invoices within Odoo.
- Tracking and recording of issued and received fiscal documents.

Code Analysis

Views touched (20)
XML IDNameModelTypeStatus
account_view_account_invoice_filter_cfdi account.invoice.filter.cfdi account.move Inherits account.view_account_invoice_filter
account_view_out_invoice_tree_cfdi account.out.invoice.tree.cfdi account.move tree Inherits account.view_out_invoice_tree
certificate_cancel_wizard_form Cancelar CFDI l10n_mx_cfdi_account.document_cancel form New
cfdi_invoice_generic_create_form Crear CFDI al Público en General l10n_mx_cfdi_account.generic_invoice_create form New
download_cfdi_files_wizard_form Descargar CFDIs l10n_mx_cfdi_account.dl_cfdi_files_wizard form New
external_layout_bold external_layout_bold ir.ui.view qweb Inherits web.external_layout_bold
external_layout_boxed external_layout_boxed ir.ui.view qweb Inherits web.external_layout_boxed
external_layout_standard external_layout_standard ir.ui.view qweb Inherits web.external_layout_standard
external_layout_striped external_layout_striped ir.ui.view qweb Inherits web.external_layout_striped
report_invoice report_invoice ir.ui.view qweb Inherits account.report_invoice
report_invoice_document report_invoice_document ir.ui.view qweb Inherits account.report_invoice_document
report_invoice_with_payments report_invoice_with_payments ir.ui.view qweb Inherits account.report_invoice_with_payments
report_payment_receipt report_payment_receipt ir.ui.view qweb Inherits account.report_payment_receipt
report_payment_receipt_document_cfdi report_payment_receipt_document_cfdi ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.l10n.mx res.config.settings form Inherits l10n_mx.res_config_settings_view_form
view_account_payment_form_inherit Account Payment: Payment Form account.payment form Inherits account.view_account_payment_form
view_account_payment_register_form_inherit Account Move Payment: CFDI generation account.payment.register form Inherits account.view_account_payment_register_form
view_l10n_mx_edi_ir_ui_view_form_inherit l10n_mx_edi.view.form.inherit ir.ui.view form Inherits base.view_view_form
view_move_form account.move.view.form.inherit.cfdi.account account.move form Inherits account.view_move_form
view_partner_form_addenda res.partner.form.l10n_mx_cfdi_account.addenda res.partner form Inherits l10n_mx_cfdi.view_partner_form_inherit
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (14)

New fields (16)
  • cfdi_data_in_attachments Boolean
    compute='_compute_cfdi_data_in_attachments' string='CFDI data in attachments'
  • cfdi_document_id Many2one → l10n_mx_cfdi.document
    compute='_compute_cfdi_document_id' copy=False readonly=True store=True string='CFDI' args: 'l10n_mx_cfdi.document'
  • cfdi_document_name Char
    readonly=True related='cfdi_document_id.name' store=True string='Folio CFDI'
  • cfdi_document_relation_type Many2one → l10n_mx_catalogs.c_tipo_relacion
    copy=False help='SAT catalog c_TipoRelacion for CfdiRelacionados.' string='Relation Type' args: 'l10n_mx_catalogs.c_tipo_relacion'
  • cfdi_document_relations Many2many → l10n_mx_cfdi.document
    column1='move_id' column2='cfdi_document_id' copy=False help='Existing CFDIs to relate when issuing this invoice CFDI (e.g. substitution after cancellation).' relation='account_move_cfdi_document_relations' string='Related CFDIs' args: 'l10n_mx_cfdi.document'
  • cfdi_document_state Selection
    readonly=True related='cfdi_document_id.state' string='CFDI Status'
  • cfdi_posted Boolean
    compute='_compute_cfdi_posted' store=True string='CFDI Posted'
  • cfdi_required Boolean
    default=False string='Requiere CFDI'
  • cfdi_use_id Many2one → l10n_mx_catalogs.c_uso_cfdi
    string='Uso de CFDI' args: 'l10n_mx_catalogs.c_uso_cfdi'
  • issuer_id Many2one → l10n_mx_cfdi.issuer
    domain=[('registered', '=', True)] string='Emisor' args: 'l10n_mx_cfdi.issuer'
  • l10n_mx_cfdi_auto Boolean
    readonly=True related='company_id.l10n_mx_cfdi_auto' string='CFDI Automatico'
  • l10n_mx_cfdi_enabled Boolean
    readonly=True related='company_id.l10n_mx_cfdi_enabled' string='CFDI Habilitado'
  • payment_form_id Many2one → l10n_mx_catalogs.c_forma_pago
    string='Forma de pago' args: 'l10n_mx_catalogs.c_forma_pago'
  • payment_method_id Many2one → l10n_mx_catalogs.c_metodo_pago
    string='Método de pago' args: 'l10n_mx_catalogs.c_metodo_pago'
  • receiver_id Many2one → res.partner
    readonly=True string='Receptor' args: 'res.partner'
  • related_cert_ids Many2many → l10n_mx_cfdi.document
    copy=False readonly=True string='Documentos' args: 'l10n_mx_cfdi.document'
Public methods (11)
  • action_generate_cfdi(self)
  • action_load_from_attachment(self)
  • action_post(self)
    Override the action_post method to create the CFDI
  • button_draft(self)
  • create_invoice_cfdi(self)
    Create the CFDI
  • create_refund_cfdi(self)
    Create CFDI of type 'E' (Egreso). Manual CFDI relations on the refund (PR #77 style) take precedence. Otherwise, related income CFDIs are inferred from reconciliations with TipoRelacion 01 (credit note).
  • default_get(self, field_names)
    @api.model
  • gater_invoice_cfdi_item_data(self, line)
    Gather the data for a CFDI item. :param line: The invoice line :return: The CFDI item data
  • gather_invoice_cfdi_items_data(self)
    Gather the data for the CFDI items
  • prepare_invoice_cfdi_total_taxes(self)
  • validate_invoice_items_for_cfdi_generation(self)

New fields (3)
  • cfdi_discount Monetary
    compute='_compute_cfdi_fields' store=True
  • cfdi_price_unit Monetary
    compute='_compute_cfdi_fields' store=True
  • cfdi_subtotal Monetary
    compute='_compute_cfdi_fields' store=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • create(self, vals_list)
    Create Payments and Credit Note CFDI if required
  • unlink(self)
    Cancel related Payments CFDI if any

New fields (7)
  • cfdi_document_id Many2one → l10n_mx_cfdi.document
    compute='_compute_cfdi_document_id' copy=False readonly=True store=True string='CFDI' args: 'l10n_mx_cfdi.document'
  • cfdi_document_state Selection
    readonly=True related='cfdi_document_id.state' string='CFDI Status'
  • cfdi_use_id Many2one → l10n_mx_catalogs.c_uso_cfdi
    string='Uso de CFDI' args: 'l10n_mx_catalogs.c_uso_cfdi'
  • l10n_mx_cfdi_auto Boolean
    readonly=True related='company_id.l10n_mx_cfdi_auto' string='CFDI Automatico'
  • l10n_mx_cfdi_enabled Boolean
    readonly=True related='company_id.l10n_mx_cfdi_enabled' string='CFDI Habilitado'
  • payment_form_id Many2one → l10n_mx_catalogs.c_forma_pago
    string='Forma de pago' args: 'l10n_mx_catalogs.c_forma_pago'
  • related_cert_ids Many2many → l10n_mx_cfdi.document
    copy=False readonly=True string='Documentos' args: 'l10n_mx_cfdi.document'
Public methods (4)
  • action_generate_cfdi(self)
  • cancel_payment_cfdi(self)
  • create_payment_cfdi(self)
    Create payment-type ('P') CFDI matching invoice payments if needed.
  • prepare_payment_cfdi(self)

New fields (1)
  • payment_form_id Many2one → l10n_mx_catalogs.c_forma_pago
    required=True string='Forma de Pago' args: 'l10n_mx_catalogs.c_forma_pago'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • extract_is_retention(self)
  • extract_l10n_mx_tax_code(self)

New fields (1)
  • l10n_mx_edi_addenda_flag Boolean
    default=False help='If True, the view is an addenda for the Mexican EDI invoicing.' string='Is an addenda?'
Public methods (0)

No public methods.

New fields (2)
  • related_invoice_id Many2one → account.move
    readonly=True string='Factura relacionada' args: 'account.move'
  • related_payment_id Many2one → account.payment
    readonly=True string='Pago relacionado' args: 'account.payment'
Public methods (3)
  • action_check_status(self)
  • create(self, vals_list)
  • download_files_if_needed(self)

New fields (3)
  • cfdi_document_ids Many2many → l10n_mx_cfdi.document
    relation='l10n_mx_cfdi_download_cfdi_files_wizard_rel' required=True string='CFDI Documents' args: 'l10n_mx_cfdi.document'
  • invoice_ids Many2many → account.move
    required=True string='Facturas' args: 'account.move'
  • zip_file Many2one → ir.attachment
    ondelete='cascade' readonly=True args: 'ir.attachment'
Public methods (2)
  • action_download_zip(self)
  • default_get(self, field_names)
    @api.model

New fields (7)
  • cancel_reason_id Many2one → l10n_mx_catalogs.c_motivo_cancelacion
    required=True string='Razón' args: 'l10n_mx_catalogs.c_motivo_cancelacion'
  • certificate_ids Many2many → l10n_mx_cfdi.document
    required=True string='Certificados' args: 'l10n_mx_cfdi.document'
  • related_invoices Many2many → account.move
    string='Facturas Relacionadas' args: 'account.move'
  • replacement_certificate_id Many2one → l10n_mx_cfdi.document
    string='Reemplazo' args: 'l10n_mx_cfdi.document'
  • requires_replacement Boolean
    compute='_compute_requires_replacement' store=False
  • simulate_operation Boolean
    default=False groups='base.group_system' help='Simulate the cancel operation without sending the request to the SAT'
  • single_cancel Boolean
    default=True
Public methods (2)
  • cancel_certificate(self)
  • default_get(self, field_names)
    @api.model

New fields (10)
  • cfdi_use_id Many2one → l10n_mx_catalogs.c_uso_cfdi
    readonly=True required=True string='Uso de CFDI' args: 'l10n_mx_catalogs.c_uso_cfdi'
  • date Date
    default=fields.Date.context_today required=True string='Fecha'
  • fiscal_regime_id Many2one → l10n_mx_catalogs.c_regimen_fiscal
    compute='_compute_fiscal_regime_id' readonly=True required=True string='Régimen Fiscal' args: 'l10n_mx_catalogs.c_regimen_fiscal'
  • issuer_id Many2one → l10n_mx_cfdi.issuer
    domain=[('registered', '=', True)] required=True string='Emisor' args: 'l10n_mx_cfdi.issuer'
  • meses_id Many2one → l10n_mx_catalogs.c_meses
    required=True string='Mes' args: 'l10n_mx_catalogs.c_meses'
  • move_ids Many2many → account.move
    required=True string='Facturas' args: 'account.move'
  • payment_form_id Many2one → l10n_mx_catalogs.c_forma_pago
    string='Forma de Pago' args: 'l10n_mx_catalogs.c_forma_pago'
  • payment_method_id Many2one → l10n_mx_catalogs.c_metodo_pago
    readonly=True string='Metodo de Pago' args: 'l10n_mx_catalogs.c_metodo_pago'
  • periodicity_id Many2one → l10n_mx_catalogs.c_periodicidad
    required=True string='Periodicity' args: 'l10n_mx_catalogs.c_periodicidad'
  • year Text
    required=True string='Año'
Public methods (2)
  • create_cfdi(self)
    Emit CFDI 'Al Público en General'
  • default_get(self, field_names)
    @api.model

New fields (1)
  • l10n_mx_cfdi_auto Boolean
    help='Enable to automatically sign CFDI when validating invoices.' readonly=False related='company_id.l10n_mx_cfdi_auto' args: 'Create CFDI on post'
Public methods (0)

No public methods.

New fields (4)
  • l10n_mx_edi_addenda Many2one → ir.ui.view
    comodel_name='ir.ui.view' domain=[('l10n_mx_edi_addenda_flag', '=', True)] help='A view representing the addenda' string='Addenda'
  • l10n_mx_edi_addenda_doc Html
    help='How should be done the addenda for this customer (try to put human readable information here to help the invoice people to fill properly the fields in the invoice)' string='Addenda Documentation'
  • l10n_mx_edi_addenda_is_readonly Boolean
    compute='_compute_l10n_mx_edi_addenda_is_readonly'
  • l10n_mx_edi_addenda_name Char
    related='l10n_mx_edi_addenda.name'
Public methods (0)

No public methods.

Loading…