Clasificaciones fiscales
En primer lugar, este módulo trae una variedad de registros fiscales para productos, socios o empresas. A la hora de emitir documentos fiscales como NF-e, NFS-e etc... incluso las empresas del régimen simplificado o MEI necesitan varios de estos registros. Y las empresas del régimen normal los necesitan para calcular los impuestos o emitir documentos fiscales.
Productos:
- tipo fiscal
- NCM (con enlaces con los impuestos)
- género fiscal
- CEST
- NBM
- NBS
- tipo de servicio
- unidades fiscales
Socios:
- CNAE
- perfil fiscal
Concepto de documento fiscal
Odoo nativo no tiene el concepto de documento fiscal. El concepto más parecido sería el account.move e incluso hasta la versión 10.0 la localización extendía el invoice para soportar las NF-e y NFS-e solamente. En aquella época no era razonable que consideraras hacer el SPED en Odoo, el propio core de Odoo no tenía madurez para eso, así que era válido el enfoque empírico de ir soportando más casos de NFe dentro del invoice Odoo solamente.
Sin embargo, en la v12, maduramos el framework XML/SOAP de forma que se vuelve razonable soportar varios documentos fiscales (NF-e, NFS-e, MDF-e, CT-e, EFD-Reinf, e-Social, GNRE, BP-e...) con la calidad OCA dentro de Odoo. También, aunque complejo, el core de Odoo finalmente tiene soporte suficiente para las operaciones de una empresa que haría el SPED.
Con esto se vuelve interesante tener el concepto de documento fiscal l10n_br_fiscal.document independiente del invoice Odoo para soportar todos los documentos fiscales realmente, de forma modular. Otro motivo para tener el concepto de documento fiscal fuera del módulo account es que cuando analizas el código de este módulo l10n_br_fiscal, casi nada de él podría hacerse mediante el módulo account de Odoo. Entonces tener este módulo l10n_br_fiscal que no depende del módulo account también es una forma de modularizar la localización para facilitar su mantenimiento, especialmente cuando se trata de migrar y que el módulo puede haber cambiado bastante como fue el caso entre la v8.0 y la v9.0 o la v12.0 y v13.0 por ejemplo. También facilita la gobernanza del proyecto posibilitando que personas sean responsables de diferentes partes. El módulo l10n_br_fiscal fue principalmente extraído del módulo l10n_br_l10n_br_account_product de las v7.0 a las v.10.0.
Este módulo l10n_br_fiscal es agnóstico de cualquier tecnología XML o SOAP. Contiene solo lo que hay en común entre los documentos fiscales, pero estos últimos se implementan en otros módulos. Para un determinado documento fiscal como la Nf-e, tienes entonces por ejemplo:
- nfelib: un paquete de data bindings puro Python (que no depende de Odoo). En general usamos un generador de código para generar esos bindings a partir de los esquemas XSD de la hacienda.
- l10n_br_nfe_spec: un módulo de mixins Odoo gestionados también a partir de los XSD. Esos mixins son solo las estructuras de datos de las especificaciones antes de ser inyectados en objetos Odoo existentes (como res.partner o l10n_br_fiscal.document) o incluso convertidos en concretos en caso de que no existan objetos en Odoo o en la OCA para ellos ya.
- l10n_br_nfe: un módulo Odoo que se encarga de inyectar esos mappings fiscales en los objetos Odoo y que implementa la lógica como los wizards para la transmisión.
La transmisión se realiza usando una lib de transmisión como erpbrasil.doc (basada en Python Zeep). Importante: en el caso de la NFS-e, la ausencia de estándar nacional hoy y la simplicidad del modelo (comparado con la NFe) hace que se haya decidido no usar un módulo de mixins fiscales Odoo gestionados, el mapping con la lib de binding se hace manualmente, familia de NFS-e por familia.
Además, la mayoría del código del l10n_br_fiscal.document y de sus líneas l10n_br_fiscal.document.line está en realidad hecho dentro de mixins 10n_br_fiscal.document.mixin y 10n_br_fiscal.document.line.mixin respectivamente. Esos mixins pueden así ser inyectados en otros objetos Odoo que preceden a los documentos fiscales y pueden almacenar entonces el mismo tipo de información: sale.order, purchase.order, stock.picking... Esto es bien visible en los módulos que extienden este módulo:
Sin embargo, el caso del invoice Odoo en el módulo l10n_br_account es diferente aún. Pues ya se tiene la tabla independiente del documento fiscal cuya gran mayoría de las decenas e incluso cientos de campos fiscales (en el caso de muchos tipos de documentos fiscales) no son redundantes con los del invoice Odoo. Si inyectáramos esos mixins dentro del invoice, ahí sí esos cientos de campos serían duplicados entre el invoice y el documento fiscal. Por eso, el sistema que se adoptó en el módulo l10n_br_account es que un invoice Odoo pasa a tener un _inherits = "l10n_br_fiscal.document" de forma que se pilota el documento fiscal a través del invoice, ofreciendo el mismo tipo de integración como antes. El mismo tipo de mecanismo ocurre con la línea del documento fiscal.
Siendo así, ya por los _inherits, el invoice Odoo y sus líneas ya van a traer todos los campos fiscales como si fueran de sus respectivas tablas sin duplicarlos en la base de datos. Si además inyectáramos los mixins 10n_br_fiscal.document.mixin y 10n_br_fiscal.document.line.mixin en el invoice e invoice.line, esos campos fiscales aparecerían también en las tablas account_move y account_move_line de forma redundante con los campos traídos por los _inherits. Para no tener ese problema, los métodos fiscales comunes (sin los campos) fueron además extraídos en los mixins: 10n_br_fiscal.document.mixin.methods y 10n_br_fiscal.document.line.mixin.methods que son inyectados en los objetos account_move y account_move_line respectivamente dentro del módulo l10n_br_account.
Impuestos brasileños
El módulo l10n_br_fiscal lidia con los principales impuestos brasileños como:
- ICMS del Simples Nacional
- ICMS del Régimen normal
- IPI
- PIS
- COFINS
- ISSQN
- IRPJ
- II
- CSLL
- INSS
El módulo l10n_br_fiscal también lidia con:
- ST
- retenciones
Es notorio que el cálculo de los impuestos en Brasil es muy especial y muy laborioso. Generalmente es el motivo por el cual los ERPs internacionales no tienen gran cuota de mercado brasileño.
Hasta la versión 10.0, intentamos usar y extender el objeto Odoo account.tax. Akretion incluso creó el proyecto OCA/account-fiscal-rule para determinar las alícuotas de cada impuesto de acuerdo con los parámetros de la operación fiscal. Sin embargo, terminábamos usando casi nada del account.fiscal.position nativo en la parte fiscal y, por el contrario, eso nos obligaba a tener un registro account.tax para cada alícuota y nos obligaba a mantener cientos de tasas y decenas de miles de reglas para seleccionar la "posición fiscal" Odoo que aplicaría las tasas correctas. Y todavía tenías que gestionar esas decenas de miles de reglas para una determinada empresa del régimen normal. Conclusión: era inviable en los proyectos menores intentar encajar en la lógica de Odoo para calcular los impuestos brasileños.
Con esto creamos en este módulo los modelos de tasas que representan exactamente el funcionamiento de los impuestos brasileños. Además de los cálculos, esos modelos también nos sirven para cargar las tablas de los impuestos. Y más adelante, en el módulo l10n_br_account, enlazamos los objetos nativos account.tax a las alícuotas de los impuestos brasileños.
Claro que esos modelos de los impuestos atienden a las empresas del régimen normal, pero es bueno recordar que incluso las empresas del régimen simplificado necesitan esos modelos para realizar las operaciones con ST (Substituição Tributária)...
Operaciones fiscales
>
En Odoo nativo, el concepto más parecido a la operación fiscal es el account.fiscal.position. Y hasta la versión 10.0, era lo que usábamos. Sin embargo, la posición fiscal de Odoo no resuelve mucho nuestros problemas pues:
- en Brasil se tiene una operación fiscal por línea de documento fiscal
- la posición fiscal de Odoo desconoce la lógica de la parametrización fiscal brasileña
- ya que traemos el registro de los impuestos en el módulo l10n_br_fiscal fuera del módulo account (sin depender de él), no tenemos aún el objeto account.fiscal.position en este módulo.
Con todo, optamos por crear un objeto l10n_br_fiscal.operation que hace exactamente lo que necesitamos para Brasil. Más adelante, en el módulo l10n_br_account se realiza la integración entre la posición fiscal de Odoo y esa operación fiscal.
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.0Proporciona los datos maestros fiscales brasileños y el motor de impuestos: clasificaciones fiscales para productos y contactos, reglas de impuestos y una estructura base para los documentos fiscales brasileños (NF-e, NFS-e, etc.).
Este módulo añade los datos de referencia fiscales brasileños y los bloques de construcción utilizados para calcular impuestos y emitir documentos fiscales.
- Datos maestros fiscales: NCM, NBM, NBS, CEST, CFOP, CST, CNAE, tipos de servicio, géneros de producto, naturalezas legales, grupos de impuestos, definiciones de impuestos, desgravación de ICMS, sellos y directrices de IPI, bases y créditos de PIS/COFINS, tablas de impuestos simplificadas, operaciones fiscales y sus líneas.
- Los productos y las empresas obtienen campos fiscales (tipo fiscal, NCM, CEST, género, tipo de servicio, unidades fiscales; CNAE y perfil fiscal en las empresas).
- Los registros de CFOP derivan automáticamente su destino y su indicador de importación a partir del código, y deben ser únicos.
- Los registros de CEST pueden vincular automáticamente los NCM introducidos en ellos.
- Los registros de NCM y NBS pueden obtener porcentajes de impuestos estimados del servicio IBPT (botón y tarea programada), almacenando los resultados como estimaciones de impuestos.
- Los comentarios fiscales son plantillas de texto reutilizables que se pueden renderizar en datos adicionales de los documentos.
- Un modelo genérico de documento fiscal con líneas, documentos relacionados, series y numeración: comprueba números duplicados, bloquea la eliminación de documentos abiertos/autorizados/cancelados y ofrece las acciones de confirmar, volver a borrador, cancelar y crear devolución.
- Los registros de datos fiscales solo pueden ser archivados o desarchivados por usuarios del grupo de gestor fiscal.
La mayoría de las pantallas están en los menús fiscales brasileños, con la configuración en la configuración de la empresa.
Depende de
Lo necesitan otros módulos
Menús que añade
Modelos y campos (30)
- uom.uom · amplía un modelo existentecode, description
- res.company · amplía un modelo existenteripi (RIPI), ibpt_api (Use IBPT API), ibpt_token, tax_ipi_id (Default IPI), is_industry, tax_csll_id (Default CSLL), tax_icms_id (Default ICMS), tax_inss_id (Default INSS), tax_irpj_id (Default IRPJ), cnae_main_id (Main CNAE), piscofins_id (PIS/COFINS), tax_issqn_id (Default ISSQN), accountant_id (Accountant), coefficient_r, industry_type, tax_framework, tax_pis_wh_id (Default PIS RET), annual_revenue, delivery_costs, payroll_amount (Last Period Payroll Amount), tax_csll_wh_id (Default CSLL RET), tax_inss_wh_id (Default INSS RET), tax_irpj_wh_id (Default IRPJ RET), legal_nature_id (Legal Nature), tax_issqn_wh_id (Default ISSQN RET), document_type_id (Default Document Type), ibpt_update_days (IBPT Token Updates), processador_edoc (Processador documentos eletrônicos), tax_cofins_wh_id (Default COFINS RET), accounting_office
- res.partner · amplía un modelo existentevat, city_id, state_id, ind_final (Final Consumption Operation), is_company, rntrc_code (RNTRC Code), ind_ie_dest (Contribuinte do ICMS), cnae_main_id (Main CNAE), tax_framework, l10n_br_ie_code, l10n_br_im_code, legal_nature_id (Legal Nature), is_public_entity (Public Entity), fiscal_profile_id (Fiscal Partner Profile), cnae_secondary_ids (Secondary CNAEs), nif_motive_absence (NIF motive absence), public_entity_type (Tipo de Entidade Governamental)
- product.product · modelo nuevo
- product.template · modelo nuevonbm_id (NBM), nbs_id (NBS), ncm_id (NCM), uoe_id (Export UoM), uot_id (Tax UoM), cest_id (CEST), uoe_factor (Export UoM Factor), uot_factor (Tax UoM Factor), fiscal_type, icms_origin (ICMS Origin), fiscal_genre_id (Fiscal Product Genre), service_type_id (Service Type LC 166), fiscal_genre_code (Fiscal Product Genre Code), tax_icms_or_issqn (ICMS or ISSQN Tax), ipi_control_seal_id (IPI Control Seal), city_taxation_code_ids (City Taxation Code), ipi_guideline_class_id (IPI Guideline Class), operation_indicator_id, national_taxation_code_id (National Taxation Code)
- res.country.state · amplía un modelo existentetax_definition_ids (Tax Definitions)
- l10n_br_fiscal.cst · modelo nuevocode, cst_type (Type), tax_domain (Tax Domain), tax_group_id (Fiscal Tax Group)
- l10n_br_fiscal.nbm · modelo nuevocode, ncms (NCM), ncm_ids (NCMs), code_unmasked, product_tmpl_ids, tax_definition_ids (Tax Definition)
- l10n_br_fiscal.nbs · modelo nuevocode, code_unmasked, product_tmpl_ids, tax_estimate_ids
- l10n_br_fiscal.ncm · modelo nuevocode, uoe_id (Export UoM), uot_id (Tax UoM), nbm_ids (NBMs), cest_ids (CESTs), exception, tax_ii_id (Tax II), tax_ipi_id (Tax IPI), code_unmasked, piscofins_ids (PIS/COFINS), product_tmpl_ids, tax_estimate_ids, tax_definition_ids (Tax Definition)
- l10n_br_fiscal.tax · modelo nuevoname, uot_id (Tax UoM), sequence, cst_in_id (CST In), tax_scope, cst_out_id (CST Out), tax_domain (Tax Domain), currency_id (Currency), icmsst_value (PFC Value), tax_group_id (Fiscal Tax Group), value_amount (Value), tax_base_type, cst_tax_domain (CST Tax Domain), icms_base_type, percent_amount (Percent), compute_sequence, icmsst_base_type (ICMS ST Base Type), percent_reduction, icmsst_mva_percent (MVA Percent), percent_debit_credit (Percent Debit/Credit), withholding_min_value (Minimum Withholding Value)
- l10n_br_fiscal.cest · modelo nuevocode, item, ncms (NCM), ncm_ids (NCMs), segment, code_unmasked, product_tmpl_ids, tax_definition_ids (Tax Definition)
- l10n_br_fiscal.cfop · modelo nuevocode, ind_cte (Used in CTe), ind_nfe (Used in NFe), ind_comb (Fuel?), ind_anula (Revocation?), ind_devol (Return?), ind_remes (Shipment?), ind_retor (Regress?), is_icmsst (ICMS ST?), is_import (Is Import?), type_move, ind_transp (Transport?), small_name, stock_move (Stock Moves?), assent_move (Assent Move?), destination, type_in_out (Type), account_move (Account Move?), finance_move (Finance Moves?), ind_comunica (Communication?), cfop_return_id (Return CFOP), cfop_inverse_id (Inverse CFOP), tax_definition_ids (Tax Definition)
- l10n_br_fiscal.cnae · modelo nuevocode, version, child_ids (Children CNAEs), parent_id (Parent CNAE), internal_type
- res.config.settings · amplía un modelo existenteibpt_api (Use IBPT API), ibpt_token (IBPT Token), delivery_costs, document_type_id (Default Document Type), ibpt_update_days (IBPT Update), module_l10n_br_cte (CT-e), module_l10n_br_nfe (NF-e/NFC-e), module_l10n_br_mdfe (MDF-e), module_l10n_br_nfse (NFS-e)
- l10n_br_fiscal.comment · modelo nuevoname, object, comment, date_end (Final Date), sequence, object_id (Reference), date_begin (Initial Date), comment_type, test_comment
- l10n_br_fiscal.document · modelo nuevoname, state (State), user_id (User), company_id (Company), partner_id (Partner), state_edoc (Situação e-doc), currency_id (Currency), date_in_out (Date IN/OUT), edoc_purpose (Finalidade), state_fiscal (Situação Fiscal), document_date, document_type (Document Type Code), fiscal_line_ids (Document Lines), partner_cnpj_cpf (CNPJ), processador_edoc, imported_document (Imported), partner_legal_name (Legal Name), public_entity_type (Tipo de Entidade Governamental), document_electronic (Electronic?), fiscal_operation_id (Fiscal Operation), partner_shipping_id (Shipping Address), document_related_ids (Fiscal Document Related), fiscal_operation_type, edoc_refund_debit_type (Tipo de Nota de Débito), fiscal_additional_data, edoc_refund_credit_type (Tipo de Nota de Crédito), partner_l10n_br_ie_code (State Tax Number), customer_additional_data, company_l10n_br_ie_code_st (Company ST State Tax Number)
- l10n_br_fiscal.operation · modelo nuevocode, name, color (Color Index), state, line_ids (Operation Line), company_id (Company), comment_ids (Comment), fiscal_type, edoc_purpose (Finalidade), kanban_dashboard, document_type_ids (Operation Document Types), default_price_unit (Default Price Unit?), fiscal_operation_type (Type), return_fiscal_operation_id (Return Operation), inverse_fiscal_operation_id (Inverse Operation)
- l10n_br_fiscal.tax.group · modelo nuevoname, cst_ids (CSTs), tax_ids (Taxes), sequence, tax_scope, partner_id (WH Partner), tax_domain, wh_due_day (Due Day), tax_include (Tax Included in Price), tax_withholding, compute_sequence, base_without_icms (Remove ICMS value from Base), base_with_additional_values (Add the value of freight, insurance and others to the Base)
- l10n_br_fiscal.icms.relief · modelo nuevo
- l10n_br_fiscal.legal.nature · modelo nuevocode
- l10n_br_fiscal.service.type · modelo nuevochild_ids (Service Type Child), parent_id (Parent Service Type), internal_type, product_tmpl_ids, withholding_at_place (Tax Retention at place of provision), withholding_possible (Subject to withholding tax)
- l10n_br_fiscal.tax.estimate · modelo nuevokey, nbs_id (NBS), ncm_id (NCM), origin (Source), version, state_id (State), company_id (Company), create_date, state_taxes (Impostos Estaduais Nacional), municipal_taxes (Impostos Municipais Nacional), federal_taxes_import (Impostos Federais Importado), federal_taxes_national (Impostos Federais Nacional)
- l10n_br_fiscal.data.abstract · modelo nuevocode, name, active, date_end (End Date), date_start (Start Date), code_unmasked (Unmasked Code)
- l10n_br_fiscal.document.line · modelo nuevoname, uom_id (UOM), quantity, company_id (Company), partner_id, price_unit, document_id (Document), edoc_purpose, tax_framework, delivery_costs, additional_data, force_compute_delivery_costs_by_total
- l10n_br_fiscal.document.type · modelo nuevocode, name, type (Document Type), sufix, prefix, electronic (Is Electronic?), document_serie_ids (Document Series)
- l10n_br_fiscal.product.genre · modelo nuevoproduct_tmpl_ids
- l10n_br_fiscal.product.mixin · modelo nuevo
- l10n_br_fiscal.document.mixin · modelo nuevoissuer, ind_pres (Buyer Presence), ind_final (Final Consumption Operation), company_id (Company), partner_id, comment_ids (Comments), currency_id (Currency), document_key (Key), total_weight, amount_ii_base (II Base), delivery_costs, document_serie (Serie Number), operation_name, amount_cbs_base (CBS Base), amount_ibs_base (IBS Base), amount_ii_value (II Value), amount_ipi_base (IPI Base), amount_pis_base (PIS Base), document_number (Fiscal Document Number), key_check_digit (Document Key Check Digit), key_random_code (Document Key Random Code), amount_cbs_value (CBS Value), amount_csll_base (CSLL Base), amount_ibs_value (IBS Value), amount_icms_base (ICMS Base), amount_inss_base (INSS Base), amount_ipi_value (IPI Value), amount_irpj_base (IRPJ Base), amount_pis_value (PIS Value), document_type_id (Fiscal Document Type)
- l10n_br_fiscal.document.serie · modelo nuevocode, name, active, company_id (Company), fiscal_type (Type), document_type_id (Fiscal Document), internal_sequence_id (Sequence), invalidate_number_id (Invalidate Number Range), sequence_number_next
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-03Estado de confirmación: 8 confirmadas, 1 sin información de 9 versiones.
Fuentes · Odoo 17.0
Confirmado el 2026-11-03 en la rama 17.0 de OCA/l10n-brazil.
terminal Instalación y uso
Documentación de OCA · Odoo 19.0Instalación
Fuente · Odoo 19.0Para instalar el módulo l10n_br_fiscal, necesita instalar primero los paquetes Python
- erpbrasil.base
- erpbrasil.assinatura
Configuración
Fuente · Odoo 19.0Para una buena configuración fiscal, tienes que revisar bien:
- en Ajustes: las operaciones fiscales que vas a usar, las líneas de operación fiscal y las definiciones de los impuestos en esas líneas.
- la configuración fiscal de tu empresa (pestaña fiscal)
- la configuración fiscal de los clientes y proveedores (pestaña fiscal) y de los productos (pestaña fiscal).
Puedes crear documentos fiscales directamente desde el menú fiscal, pero en principio vas a pilotar la creación de documentos fiscales a partir de los invoices Odoo, usando módulos adicionales como l10n_br_account, l10n_br_sale, l10n_br_purchase...
Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
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.