OdooWiki OCA HUB

Invoicing and accounting entries for Brazil

l10n_br_account folder_open OCA/l10n-brazil open_in_new
Localisation Licencia: AGPL-3

Visión General

El módulo l10n_br_account integra el motor fiscal brasileño (l10n_br_fiscal) al framework contable nativo de Odoo (módulo account). Integra la compleja lógica de la tributación y de los documentos fiscales de Brasil con las facturas y los asientos contables conforme a las normas de contabilidad brasileñas.

El módulo atiende desde la automatización en la emisión de notas para empresas del Simples Nacional hasta los escenarios contables más exigentes del régimen normal (Lucro Real/Presumido).

Arquitectura e Integración: Decorator Pattern (_inherits)

La arquitectura del módulo se basa en el mecanismo de herencia por composición _inherits de Odoo para crear una composición dinámica entre los modelos fiscales y contables:

  • account.move hereda de l10n_br_fiscal.document
  • account.move.line hereda de l10n_br_fiscal.document.line

Este enfoque, análogo al Decorator Pattern, ofrece las siguientes ventajas:

  • Gestión Unificada: Permite controlar el Documento Fiscal directamente desde la interfaz de la Factura de Odoo. Los campos fiscales (CFOP, NCM, valores de impuestos) se acceden y computan de forma transparente, como si fueran nativos de account.move.line.
  • Bajísima Redundancia de Datos: La herencia por composición evita la duplicación de cientos de campos fiscales en las tablas contables. La "fuente de la verdad" fiscal es siempre el registro en l10n_br_fiscal.document, garantizando una base de datos normalizada y consistente.
  • Modularidad y Mantenimiento: La lógica fiscal compleja permanece encapsulada en l10n_br_fiscal. Para asegurar la reactividad de los campos computados en la interfaz de la factura, el módulo utiliza un mixin especializado (l10n_br_account.decorator.mixin) que gestiona la herencia de métodos y campos dinámicos.

Principales Funcionalidades y Casos de Uso

Uso Simplificado: Cálculo de los impuestos y creación de los Documentos Fiscales

El módulo l10n_br_account es la pieza clave para automatizar la emisión de documentos fiscales a partir de cualquier flujo de negocio que genere una factura en Odoo, como:

  • Órdenes de Venta (sale.order)
  • Órdenes de Compra (purchase.order)
  • Movimientos de Stock (stock.picking)
  • Contratos (contract.contract), entre otros.

La Operación Fiscal preconfigurada orquesta el llenado automático de todos los datos necesarios, permitiendo la generación de NF-e, NFS-e y otros documentos con mínima intervención.

Uso Avanzado: Asientos contables correctos para las empresas del Régimen Normal

Para empresas en Lucro Real o Presumido, el l10n_br_account habilita una gestión contable y fiscal precisa y adherente a la legislación.

  • Asientos Contables de Impuestos: Conecta los impuestos fiscales (l10n_br_fiscal.tax) a los contables (account.tax), garantizando que la validación de una factura genere los asientos correctos para ICMS, IPI, PIS, COFINS, etc., en sus respectivas cuentas (costo, recuperable, gasto).
  • Operaciones Sin Impacto Financiero: Soporta operaciones como "Remessa para Industrialização", permitiendo la emisión del documento fiscal obligatorio y el asiento correcto de los impuestos, pero sin generar cuentas a pagar o a cobrar, manteniendo la integridad fiscal y contable.
  • Composición de Valores Financieros: Gestiona la correcta composición del valor financiero de las facturas. Por ejemplo, asegura que el valor del IPI, cuando no es recuperable, se sume a las cuentas a pagar del proveedor.
  • Importación de Documentos (XML): Facilita la importación de documentos de proveedores, creando simultáneamente el l10n_br_fiscal.document con los datos fiscales y la factura de proveedor (account.move) lista para validación y pago.

Alcance y Delimitación del Módulo

El nombre l10n_br_account deriva del módulo account, que extiende. Es importante notar que el módulo account de Odoo, en su esencia, está enfocado en la facturación, aunque contenga los conceptos fundamentales de planes de cuentas y asientos contables.

Para una contabilidad completa de una empresa en el régimen normal, incluso utilizando Odoo Enterprise, es necesaria la instalación de decenas de módulos adicionales de la OCA, provenientes de diversos repositorios de la OCA. El l10n_br_account, a pesar del nombre, no sustituye este ecosistema. Se concentra en el puente fiscal-contable. Funciones como conciliación avanzada (a través de módulos como account_reconcile), gestión de órdenes de pago, integración bancaria (CNAB) e importación de extractos son tratadas por decenas de otros módulos específicos de la OCA...

Por otro lado, es importante resaltar que los autores de este módulo poseen clientes del régimen normal con una contabilidad significativamente más completa que la ofrecida nativamente por Odoo Enterprise, basándose exclusivamente en módulos de código abierto de la OCA. Alcanzar tal nivel de sofisticación, sin embargo, exige años de experiencia en implementación y una elección estratégica de la versión de Odoo. Es importante evitar versiones muy recientes, para las cuales el ecosistema de módulos de la OCA aún no ha alcanzado la madurez y estabilidad necesarias tras el proceso de migración (una versión nueva de Odoo apenas tiene 500 módulos de la OCA migrados después de 6 meses, pero tiene casi 2000 después de un año y casi 3000 después de 3 años).

Vale la pena mencionar que asientos de Costo de la Mercancía Vendida (CMV) y otros asientos de contabilidad de stock IFRS/IAS2, son típicamente realizados a través de la combinación del módulo nativo stock_account, del l10n_br_stock_account (de este mismo repo) y de la activación del modo "anglo-saxon" en su plan de cuentas.

Detalles sobre el modelo de datos

Cardinalidad: Documentos Fiscales y Asientos Contables

La arquitectura soporta escenarios donde un único asiento financiero (account.move) agrupa múltiples documentos fiscales, como una factura única para pagar varios Conocimientos de Transporte (CT-e). Esta flexibilidad está garantizada por tres campos clave:

  • account.move.fiscal_document_id: El campo Many2one que implementa el _inherits. Representa el documento fiscal "principal" o en edición en la interfaz de la factura.
  • account.move.line.fiscal_document_line_id: El pilar de la arquitectura. Permite que cada línea de la factura apunte a una línea de un documento fiscal distinto. Es esto lo que posibilita agregar múltiples documentos en un único account.move.
  • account.move.fiscal_document_ids: Campo One2many computado que agrega todos los documentos fiscales vinculados a las líneas de la factura, ofreciendo una visión completa y consolidada cuando el asiento tiene más de un documento fiscal.

La flexibilidad del diseño es bidireccional. El sistema también gestiona nativamente escenarios donde un asiento contable (account.move) no posee ningún documento fiscal asociado. Esto es fundamental para operaciones puramente contables o no fiscales, como:

  • Asientos de nómina.
  • Operaciones financieras o contables en empresas de un grupo multinacional que no operan en Brasil.

Además, incluso dentro de una factura fiscalizada, la asociación es granular. Solo las líneas de producto (invoice_line_ids con display_type='product') están vinculadas a una l10n_br_fiscal.document.line. Líneas de impuestos, de cuentas a pagar/cobrar, o líneas de anotación/sección permanecen como asientos puramente contables, sin línea de documento fiscal específica.

Observación sobre la Normalización del Modelo de Datos

Idealmente, el modelo de datos tendría redundancia cero. Sin embargo, para simplificar la inyección de mixins fiscales —en especial el l10n_br_fiscal.document.line.mixin— y aprovechar la lógica nativa de Odoo, fue una decisión de diseño mantener la nomenclatura de un pequeño y controlado conjunto de campos, como partner_id, company_id, user_id, currency_id, product_id, quantity, price_unit y name.

Como consecuencia, existe una redundancia mínima y gestionada. Considerando los miles de campos necesarios para la diversidad de documentos fiscales brasileños, apenas cerca de cuatro campos del account.move y cuatro del account.move.line son efectivamente duplicados. Para garantizar la integridad, estos campos (apodados shadow fields) son cuidadosamente sincronizados en tiempo real, incluso durante la edición de nuevos registros en memoria (fase NewId), asegurando total consistencia entre la factura y el documento fiscal.

La Separación Estratégica de los Mixins Fiscales

En el caso del account.move, el objetivo era obtener los campos del l10n_br_fiscal.document sin duplicarlos (lo que el _inherits hace perfectamente), pero también necesitábamos sus métodos (como _compute_fiscal_tax_ids o _compute_tax_fields). Si usáramos _inherit en el mixin principal (l10n_br_fiscal.document.mixin), tendríamos los métodos, pero los campos serían duplicados, rompiendo el principio de normalización.

Por otro lado, modelos como sale.order y purchase.order no son una representación de un documento fiscal, sino precursores de él. Por lo tanto, pueden usar una herencia simple (_inherit) directamente en el mixin principal (l10n_br_fiscal.document.mixin), pues necesitan tanto los campos como los métodos para preparar los datos que serán posteriormente utilizados en la generación del documento fiscal.

Modelo UML Simplificado

Aviso Importante: Prerrequisitos y Complejidad

Para utilizar el l10n_br_account de forma eficaz, es necesario tener dominio profundo de dos ecosistemas complejos: el módulo account nativo de Odoo y el motor l10n_br_fiscal de este repositorio.

El account es el mayor y más intrincado módulo de Odoo, constituyendo por sí solo un ERP financiero completo, y no apenas un simple software de emisión de notas para microempresas. A su vez, el l10n_br_fiscal es el mayor módulo entre los más de 3000 disponibles en la OCA. Este módulo, l10n_br_account, está también entre los tres más complejos de la localización brasileña y exige un uso avanzado del ORM de Odoo para gestionar la dualidad documento fiscal/asiento contable.

La implementación exitosa de un ERP extranjero en Brasil es una tarea que demanda profesionales altamente calificados, con años de experiencia en programación backend (Python) e implantación de verdaderos sistemas ERP. Una implementación no se resume a descargar e instalar módulo (apenas 1% del trabajo); involucra análisis de procesos, configuración, migración de datos y personalizaciones, migración de módulos OCA a partir de otras versiones... Subestimar esta complejidad invariablemente lleva a proyectos problemáticos y costos elevados en el largo plazo.

Este aviso sirve para alinear expectativas y reforzar que el éxito de una implantación Odoo en Brasil depende de expertise técnica y funcional profunda. Infelizmente, este mercado atrae aventureros que subestiman esta complejidad o que venden proyectos creyendo que es posible tercerizar la ejecución sin gran compromiso con la entrega, explotando la falta de información del cliente. Este escenario caracteriza un "market for lemons", donde la asimetría de información hace difícil distinguir entre proveedores calificados y despreparados, impidiendo el desarrollo de un mercado de implementación maduro.

Agravando la situación, donde se esperaría una garantía criteriosa de calidad, el ecosistema corporativo "oficial" invierte fuertemente en propaganda para enmascarar esta realidad, promoviendo una visión donde la consultoría de implementación es tratada como una commodity. Este modelo, enfocado en comisiones por la venta de licencias (muchas veces innecesarias al utilizar el ecosistema de la OCA), alimenta un mercado paralelo notorio de "socios fantoches/carne de cañón" que compran certificaciones oficiales de empresas extranjeras para simular una competencia que no poseen. Cuidado con profesionales que ostentan certificaciones compradas para transferir la responsabilidad de la implementación sin el debido soporte o conocimiento real. ¡No se deje engañar por narrativas que simplifican la complejidad del proyecto para priorizar la venta de licencias!

Conclusión

El l10n_br_account posee un diseño robusto que unifica las complejas lógicas fiscal y contable de Brasil dentro de Odoo. Su arquitectura, proyectada por especialistas para especialistas, ofrece una plataforma flexible y confiable, capaz de sostener operaciones de alta complejidad y garantizar el cumplimiento fiscal y contable de las empresas que utilizan la localización brasileña de la OCA.

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

Integra los documentos fiscales brasileños con la facturación y la contabilidad de Odoo, de modo que las facturas puedan llevar operaciones fiscales, impuestos y el estado de los documentos electrónicos. Los usuarios pueden emitir, consultar, cancelar y corregir documentos fiscales directamente desde las facturas.

Este módulo conecta la facturación y la contabilidad estándar de Odoo con el motor fiscal brasileño. Cuando una compañía está en Brasil, las facturas (account.move) y las líneas de factura (account.move.line) se vinculan a documentos fiscales y líneas de documentos fiscales, de modo que los datos fiscales aparecen en el formulario y en las líneas de la factura.

En una factura, los usuarios pueden elegir una operación fiscal, que establece automáticamente el diario y el tipo de operación fiscal (entrada o salida). Se muestran el tipo, el número y el estado del documento fiscal, y los botones permiten a los usuarios enviar el documento, consultar su estado en SEFAZ, cancelarlo, corregirlo, invalidarlo o devolverlo a borrador. Un botón abre el documento fiscal relacionado, y otro importa líneas de un documento fiscal existente a una factura en borrador.

Las reglas de negocio incluyen: no se puede establecer un tipo de documento sin un documento fiscal; no se puede devolver a borrador una factura cuyo documento fue cancelado en SEFAZ; cancelar una factura también cancela su documento fiscal; y revertir una factura utiliza la operación fiscal de devolución de la operación original, generando un error si no hay ninguna configurada. Los términos de pago se recalculan para que la factura se mantenga equilibrada con los importes fiscales, y las líneas de términos de pago se numeran.

El módulo también añade campos fiscales al informe de análisis de facturas (operación, CFOP, valores de ICMS, tipo de documento) y vincula los impuestos de cuenta con los impuestos fiscales y los grupos de impuestos. Aparece en la aplicación Facturación, en los formularios y listas de facturas, y en las pantallas de configuración de operaciones fiscales e impuestos.

Modelos y campos (19)
  • ir.rule · amplía un modelo existente
  • account.tax · amplía un modelo existentefiscal_tax_ids (Fiscal Taxes)
  • res.company · amplía un modelo existente
  • account.move · modelo nuevofiscal_document_id (Fiscal Document), document_electronic (Electronic?), fiscal_document_ids (Fiscal Documents), fiscal_operation_type
  • account.journal · amplía un modelo existente
  • account.incoterms · amplía un modelo existente
  • account.move.line · modelo nuevoname, discount, quantity, price_unit, product_uom_id, document_type_id (Fiscal Document Type), payment_term_number, fiscal_document_line_id (Fiscal Document Line)
  • account.tax.group · amplía un modelo existentefiscal_tax_group_id (Fiscal Tax Group)
  • l10n_br_fiscal.tax · amplía un modelo existente
  • account.move.reversal · amplía un modelo existentejournal_id, force_fiscal_operation_id (Force Fiscal Operation), force_fiscal_operation_journal_id
  • account.chart.template · amplía un modelo existente
  • account.invoice.report · amplía un modelo existenteissuer, nbm_id (NBM), ncm_id (NCM), cest_id (CEST), cfop_id (CFOP), ii_value (II Value), ipi_value (IPI Value), pis_value (PIS Value), icms_value (Valor ICMS), fiscal_type, issqn_value, other_value, cofins_value (COFINS Value), icmsst_value (Valor ICMS ST), freight_value, icmsfcp_value (Valor Difal FCP), discount_value, insurance_value, service_type_id, document_type_id (Fiscal Document Type), document_serie_id, icms_origin_value (Valor Difal Origem), fiscal_operation_id (Operation), icms_destination_value (Valor Difal Destino), fiscal_operation_line_id (Operation Line)
  • l10n_br_fiscal.document · amplía un modelo existenteuser_id, move_ids (Invoices), company_id, move_count (Invoice count), partner_id, date_in_out, incoterm_id (Fiscal Inconterm), document_date, proxy_user_id (User (proxy)), fiscal_line_ids, proxy_company_id (Company (proxy)), proxy_partner_id (Partner (proxy)), partner_shipping_id, proxy_partner_shipping_id (Shipping Partner (proxy))
  • l10n_br_fiscal.operation · amplía un modelo existentejournal_id (Account Journal), deductible_taxes, fiscal_position_id (Fiscal Position)
  • l10n_br_fiscal.tax.group · amplía un modelo existente
  • l10n_br_fiscal.document.line · amplía un modelo existentename, uom_id, move_id (Invoice), quantity (Quantity), company_id (Company), product_id (Product), proxy_name (Name (proxy)), document_id (Fiscal Document (Account)), proxy_quantity (Quantity (proxy)), account_line_ids (Invoice Lines), proxy_company_id (Company (proxy)), proxy_partner_id (Partner (proxy)), proxy_price_unit (Unit Price (proxy)), proxy_product_id (Product (proxy))
  • l10n_br_fiscal.operation.line · amplía un modelo existentefiscal_position_id (Fiscal Position)
  • l10n_br_account.decorator.mixin · modelo nuevo
  • l10n_br_fiscal.document.import.wizard · amplía un modelo existentefirst_imported_move_id

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: 7 confirmadas, 2 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.0

Este módulo depende de dos módulos:

  • l10n_br_coa (que depende del módulo account)
  • l10n_br_fiscal

Antes de seguir esta guía, es fundamental que usted:

  • Tenga configurada su empresa con el país "Brasil". La mayoría de los campos fiscales solo aparecerán en este contexto.
  • Tenga configurado el régimen fiscal de su empresa.
  • Tenga configurado un Plan de Cuentas, idealmente derivado del plan base del módulo l10n_br_coa.
  • Esté familiarizado con el proceso de facturación estándar de Odoo a través del módulo account.
  • Comprenda los conceptos básicos del módulo l10n_br_fiscal, especialmente qué son las Operaciones Fiscales (l10n_br_fiscal.operation) y cómo el sistema selecciona y calcula los impuestos con base en ellas.

Paso a Paso: Creando una Factura Fiscal

El proceso se inicia a partir de la factura estándar de Odoo, ahora "decorada" con los campos fiscales necesarios.

  • Navegue hasta Facturación Acceda al menú Faturamento > Clientes > Faturas.
  • Cree una Nueva Factura Haga clic en el botón Criar.
  • Seleccione el Cliente En el campo Cliente, seleccione un partner configurado para Brasil. El registro del cliente debe contener la información fiscal correcta (CNPJ/CPF, perfil fiscal, dirección, etc.). En los datos de demostración, AMD do Brasil es un excelente ejemplo.
  • Complete los Datos Fiscales de la Cabecera Con la instalación del módulo, nuevos campos fiscales aparecerán en la cabecera de la factura.
  • Tipo de Documento: Seleccione el modelo del documento fiscal. Para una NF-e, por ejemplo, elija 55 - Nota Fiscal Eletrônica.
  • Operación Fiscal: Este es un campo clave. Define la naturaleza de la transacción. Seleccione una operación compatible, como Venda de Mercadoria.
  • Añada las Líneas de la Factura En la pestaña Linhas da Fatura, haga clic en Adicionar uma linha.
  • Seleccione un producto. Usando los datos de demostración, puede elegir el producto [E-COM08] Storage Box.
  • Observe que, al seleccionar el producto, los campos fiscales de la línea, como Operação Fiscal da Linha y Impostos, se rellenan automáticamente en base a las reglas de la Operación Fiscal principal. Los impuestos se calculan y se muestran en tiempo real.

Visualizando y Editando los Detalles Fiscales de la Línea

La cuadrícula de líneas de la factura ofrece una visión simplificada. Para acceder a todos los detalles fiscales de una línea o para editar manualmente algún campo (como un NCM o CST específico para esa operación), puede usar el modo de edición en pop-up.

  • Haga clic en el icono de "abrir registro externo" (un cuadrado con una flecha), situado a la izquierda de la línea del producto en la cuadrícula editable.
  • Se abrirá una ventana pop-up, mostrando el formulario completo de la línea. En él, encontrará la pestaña Impostos, que contiene el desglose completo de los cálculos para cada tributo (ICMS, IPI, PIS, COFINS, etc.).

Verificando los Asientos Contables

Tras completar la factura, puede (y debe) inspeccionar los asientos contables que se generarán.

  • Acceda a la pestaña Lançamentos Contábeis.
  • En esta pestaña, verá todas las cuentas que se moverán, incluyendo las líneas específicas para cada impuesto (débito de impuestos a recuperar, crédito de impuestos a ingresar, etc.), reflejando el resultado de los cálculos del motor fiscal.

> Nota Importante: Para usuarios de la versión Community de Odoo, la pestaña Lançamentos Contábeis puede estar oculta por defecto. La instalación del módulo account_usability (disponible en el repositorio OCA/account-financial-tools) es muy recomendable para hacerla visible y facilitar el análisis contable.

Tras la verificación, puede Confirmar la factura para generar los asientos contables y continuar con la transmisión del documento fiscal, en caso de ser un documento electrónico.

Accediendo a la Vista Fiscal Detallada

En la esquina superior derecha del formulario de la factura, encontrará un smart button llamado Detalle Fiscal.

Hacer clic en este botón permite navegar directamente a la pantalla del l10n_br_fiscal.document, que ofrece una visión completa y enfocada en los aspectos puramente fiscales. En esta pantalla, es posible consultar detalles en profundidad, gestionar el ciclo de vida del documento (cancelación, carta de corrección) y, para documentos electrónicos, seguir todo el historial de comunicación y el estado de transmisión ante la SEFAZ.

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

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.