OdooWiki OCA HUB

NF-e abstract models

l10n_br_nfe_spec folder_open OCA/l10n-brazil open_in_new
Accounting Licencia: LGPL-3

Este módulo es la base para la emisión de la Nota Fiscal Electrónica (NF-e modelo 55 y NFC-e modelo 65) en Odoo, proporcionando una estructura de datos completa y fiel al layout oficial 4.0 de SEFAZ.

Es importante entender que este módulo actúa como una biblioteca de modelos abstractos (mixins) y no realiza la emisión de la NF-e por sí solo. Su finalidad es ser la base para un módulo de implementación, como el l10n_br_nfe, que es responsable de mapear estos modelos en los documentos fiscales de Odoo (l10n_br_fiscal.document) y comunicarse con los web services de SEFAZ. Esta arquitectura, que separa la estructura de datos de la lógica de emisión, es la misma utilizada con éxito en los otros documentos fiscales electrónicos de la localización brasileña.

Estructura y Principales Conceptos de la NF-e

El módulo l10n_br_nfe_spec mapea con precisión la compleja estructura jerárquica de la NF-e. Los conceptos más importantes implementados son:

  • Identificación (ide): El encabezado de la nota, que contiene información como modelo, serie, número, fechas, finalidad y tipo de operación.
  • Emisor y Destinatario (emit, dest): Modelos detallados para los datos registrales completos del emisor y del receptor de la mercancía.
  • Ítems de la Nota (det): El corazón de la NF-e, un grupo repetible para cada producto o servicio, que contiene descripción, NCM, CFOP, cantidades y valores.
  • Impuestos (imposto): Dentro de cada ítem, hay una estructura compleja para el detalle de todos los tributos incidentes (ICMS, IPI, PIS, COFINS, etc.).
  • Totales (total): Contiene el grupo ICMSTot con la consolidación de todas las bases de cálculo y valores de impuestos de la nota.
  • Transporte (transp): Modelos para informar la modalidad del flete, los datos de la transportadora, del vehículo y de los volúmenes transportados.
  • Pago (pag): Estructura para detallar las formas de pago (detPag), incluyendo información de tarjetas, PIX y boletos.

Generación de Código Automatizada

La principal característica de este módulo es que el 100% de sus modelos de datos Odoo se generan automáticamente a partir de los esquemas XSD oficiales, publicados por el Portal da NF-e. Esta generación mediante xsdata-odoo garantiza la máxima fidelidad a los layouts fiscales y agilidad en la actualización a nuevas versiones.

Aunque los esquemas XSD oficiales de la NF-e se publican y mantienen en el Portal da SEFAZ, la arquitectura de este proyecto se apoya en la biblioteca nfelib para la tarea de serialización de los datos en XML. Para facilitar el proceso de desarrollo y garantizar la consistencia, la propia nfelib almacena en su repositorio una copia actualizada de estos esquemas oficiales.

Por lo tanto, la práctica recomendada para (re)generar los modelos de este módulo es utilizar un clon local del repositorio de nfelib como fuente para los archivos de esquema (.xsd), dirigiendo el comando de xsdata-odoo al directorio correspondiente.

Links:

  • GitHub - akretion/xsdata-odoo: Odoo abstract model generator from xsd schemas using xsdata
  • GitHub - akretion/nfelib

El comando utilizado para generar los modelos de la versión 4.0 de la NF-e fue:

Prefijo de los campos y versión

Con más de 800 campos fiscales solo en la NF-e, con una media docena de documentos fiscales complejos, con 3000 módulos OCA, existiría un riesgo real de conflicto con los nombres de campos provenientes de los esquemas. Además, tenemos varias versiones de la NFe, la 3.1, la 4.0 etc...

En esto se decidió que cada campo tiene un prefijo compuesto del nombre del schema y de algunos dígitos de la versión del esquema. En el caso nfe40_. La elección de 2 dígitos permite que una actualización menor del esquema use los mismos campos (y datos en la base de datos entonces) y que un simple update Odoo (--update=...) consiga resolver la migración. Mientras que para un cambio mayor como de 3.1 a 4.0, se asumiría usar nuevos campos y nuevas tablas (para los objetos no Odoo) y que la lib nfelib trabajaría con los campos de la versión mayor del documento fiscal considerado.

El Tratamiento Específico de los Impuestos ICMS e ICMSSN

Un desafío particular en la generación de los modelos de la NF-e es la forma en que el ICMS está estructurado en el XSD oficial. El esquema define un grupo de tags para cada CST de ICMS (ej: ICMS00, ICMS10, ICMS40, etc.), muchos de los cuales contienen campos con nombres idénticos (como vBC, pICMS, vICMS).

Si todos estos grupos se generaran e inyectaran en el mismo modelo Odoo, ocurrirían colisiones de nombres de campos. Para resolver esto, el comando de generación utiliza el parámetro XSDATA_SKIP para ignorar explícitamente esas clases de impuesto individuales.

Este enfoque es el ideal, pues la localización brasileña de Odoo, a través del módulo l10n_br_fiscal, ya posee un sistema robusto y genérico para cálculo y representación de impuestos. Por lo tanto, el mapeo de los campos de impuestos al XML es una tarea que exige una lógica más elaborada, siendo delegada al módulo de implementación (l10n_br_nfe), que es el lugar apropiado para tales reglas de negocio.

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 18.0

Proporciona la estructura de datos técnica (modelos abstractos) que refleja el diseño oficial brasileño de NF-e/NFC-e 4.0, incluidos los nuevos campos de impuestos IBS, CBS e Imposto Seletivo. No emite facturas por sí mismo; es la base utilizada por el módulo real de emisión de NF-e.

Este módulo es una librería de modelos de datos abstractos, no una pantalla con la que los usuarios trabajen directamente. No contiene menús, ni botones, ni informes; solo define los campos y sus agrupaciones que coinciden con el layout oficial de la NF-e 4.0 de la SEFAZ.

Lo que cubre, como se muestra en el código:

  • Campos de la reforma fiscal para IBS (estatal y municipal) y CBS, incluidos base, tasas, valores, reducciones, diferimiento, crédito presunto, reversión de crédito y transferencias.
  • Grupos de tributación monofásica (ad rem y ad valorem) para IBS y CBS, incluidos retención e importes retenidos previamente, además de diferencias de mezcla de biocombustibles.
  • Campos de Imposto Seletivo: código de situación tributaria, código de clasificación, base, tasas, unidad, cantidad y valor calculado.
  • Grupos de totales para IBS/CBS y para Imposto Seletivo.
  • Regímenes especiales: áreas incentivadas (ALC/ZFM) con tasa de CBS cero, compras gubernamentales, tributación regular y referencias de pago a documentos fiscales anteriores.

Un modelo abstracto compartido spec.mixin.nfe añade un campo de moneda brasileña (brl_currency_id) calculado como BRL, utilizado por campos monetarios como las tasas ad rem. Dado que el módulo no tiene dependencias ni menús, instalarlo por sí solo no cambia nada visible en Odoo; solo resulta útil cuando un módulo de implementación real de NF-e mapea estos modelos sobre documentos fiscales.

Lo necesitan otros módulos

Modelos y campos (30)
  • nfe.40.di · modelo nuevonfe40_CPF (CPF do adquirente ou do encomendante), nfe40_adi (Adições (NT 2011/004)), nfe40_dDI (Data de registro da DI/DSI/DA), nfe40_nDI (Número do Documento de Importação), nfe40_CNPJ (CNPJ do adquirente ou do encomendante), nfe40_vAFRMM (Valor Adicional ao frete para renovação), nfe40_dDesemb (Data do desembaraço aduaneiro), nfe40_UFDesemb (UF onde ocorreu o desembaraço aduaneiro), nfe40_DI_prod_id, nfe40_UFTerceiro (Sigla da UF do adquirente), nfe40_xLocDesemb (Local do desembaraço aduaneiro), nfe40_cExportador (Código do exportador), nfe40_tpViaTransp (Via), nfe40_tpIntermedio (Forma de Importação quanto)
  • nfe.40.ii · modelo nuevonfe40_vBC (Base da BC do Imposto de Importação), nfe40_vII (Valor do Imposto de Importação), nfe40_vIOF (Valor), nfe40_vDespAdu (Valor das despesas aduaneiras)
  • nfe.40.adi · modelo nuevonfe40_nDraw (Número do ato concessório de Drawback), nfe40_nAdicao (Número da Adição), nfe40_vDescDI (Valor do desconto do item), nfe40_nSeqAdic (Número seqüencial do item), nfe40_adi_DI_id, nfe40_cFabricante (Código do fabricante estrangeiro)
  • nfe.40.det · modelo nuevonfe40_prod (Dados dos produtos e serviços da NF-e), nfe40_nItem (Número do item do NF), nfe40_vItem (Valor total do Item), nfe40_imposto (Tributos incidentes nos produtos), nfe40_obsItem (Grupo de observações de uso livre), nfe40_infAdProd (Informações adicionais do produto), nfe40_impostoDevol (impostoDevol), nfe40_det_infNFe_id, nfe40_DFeReferenciado (Referenciamento de item de outros DFe)
  • nfe.40.dup · modelo nuevonfe40_nDup (Número da duplicata), nfe40_vDup (Valor da duplicata), nfe40_dVenc (Data de vencimento da duplicata), nfe40_dup_cobr_id
  • nfe.40.fat · modelo nuevonfe40_nFat (Número da fatura), nfe40_vLiq (Valor líquido da fatura), nfe40_vDesc (Valor do desconto da fatura), nfe40_vOrig (Valor original da fatura)
  • nfe.40.ide · modelo nuevonfe40_cDV (Digito Verificador da Chave de Acesso), nfe40_cNF (Código numérico que compõe a Chave), nfe40_cUF (Código da UF do emitente), nfe40_mod (Código do modelo do Documento Fiscal), nfe40_nNF (Número do Documento Fiscal), nfe40_tpNF (Tipo do Documento Fiscal), nfe40_NFref (Grupo de infromações da NF referenciada), nfe40_dhEmi (Data e Hora de emissão), nfe40_natOp (Descrição da Natureza da Operação), nfe40_serie (Série do Documento Fiscal), nfe40_tpAmb (Identificação do Ambiente), nfe40_tpImp (Formato de impressão do DANFE), nfe40_xJust (Justificativa da entrada), nfe40_cIndOp (Código indicador do local da operação), nfe40_cMunFG (Código do Município de Ocorrência), nfe40_dhCont (data e hora de entrada), nfe40_finNFe (Finalidade da emissão da NF-e), nfe40_idDest (Identificador de Local de destino), nfe40_tpEmis (Forma de emissão da NF-e), nfe40_indPres (Indicador de presença do comprador), nfe40_procEmi (Processo de emissão utilizado), nfe40_verProc (versão do aplicativo utilizado), nfe40_dhSaiEnt (Data e Hora da saída ou de entrada), nfe40_indFinal (Indica operação com consumidor final), nfe40_cMunFGIBS (município de ocorrência do fato gerador), nfe40_gCompraGov (Grupo de Compras Governamentais), nfe40_tpNFDebito (Tipo de Nota de Débito), nfe40_indIntermed (Indicador de intermediador/marketplace), nfe40_tpNFCredito (Tipo de Nota de Crédito), nfe40_dPrevEntrega (Data da previsão de entrega)
  • nfe.40.ipi · modelo nuevonfe40_vIPIDevol (Valor do IPI devolvido)
  • nfe.40.med · modelo nuevonfe40_vPMC (Preço Máximo ao Consumidor), nfe40_cProdANVISA (Utilizar o número do registro ANVISA), nfe40_xMotivoIsencao (Obs)
  • nfe.40.pag · modelo nuevonfe40_detPag (Grupo de detalhamento da forma), nfe40_vTroco (Valor do Troco)
  • nfe.40.pis · modelo nuevonfe40_PISNT (PISNT), nfe40_PISAliq (Código de Situação Tributária do PIS), nfe40_PISOutr (PISOutr), nfe40_PISQtde (PISQtde)
  • nfe.40.tis · modelo nuevonfe40_pIS (Alíquota do Imposto Seletivo), nfe40_vIS (Valor do Imposto Seletivo calculado), nfe40_CSTIS (Código Situação Tributária), nfe40_qTrib (Quantidade com abse), nfe40_uTrib (Unidade), nfe40_vBCIS (Valor do BC), nfe40_adRemIS (Alíquota do Imposto Seletivo (adRemIS)), nfe40_cClassTribIS (cClassTribIS)
  • nfe.40.vol · modelo nuevonfe40_esp (Espécie dos volumes transportados), nfe40_nVol (Numeração dos volumes transportados), nfe40_qVol (Quantidade de volumes transportados), nfe40_marca (Marca dos volumes transportados), nfe40_pesoB (Peso bruto (em kg)), nfe40_pesoL (Peso líquido (em kg)), nfe40_lacres (lacres), nfe40_vol_transp_id
  • nfe.40.arma · modelo nuevonfe40_descr (Descrição completa da arma), nfe40_nCano (Número de série do cano), nfe40_nSerie (Número de série da arma), nfe40_tpArma (Indicador do tipo de arma de fogo), nfe40_arma_prod_id
  • nfe.40.cana · modelo nuevonfe40_ref (Mês e Ano de Referência), nfe40_vFor (Valor dos fornecimentos), nfe40_deduc (Deduções - Taxas e Contribuições), nfe40_safra (Identificação da safra), nfe40_forDia (Fornecimentos diários), nfe40_qTotAnt (Total Anterior), nfe40_qTotGer (Total Geral), nfe40_qTotMes (Total do mês), nfe40_vLiqFor (Valor Líquido dos fornecimentos), nfe40_vTotDed (Valor Total das Deduções)
  • nfe.40.card · modelo nuevonfe40_CNPJ (CNPJ da instituição de pagamento), nfe40_cAut (Número de autorização da operação), nfe40_tBand (Bandeira da operadora de cartão), nfe40_CNPJReceb (CNPJ do beneficiário do pagamento), nfe40_idTermPag (Identificador do terminal de pagamento), nfe40_tpIntegra (Tipo de Integração do processo)
  • nfe.40.cide · modelo nuevonfe40_vCIDE (Valor do CIDE), nfe40_qBCProd (BC do CIDE), nfe40_vAliqProd (Alíquota do CIDE (em reais))
  • nfe.40.cobr · modelo nuevonfe40_dup (Dados das duplicatas NT 2011/004), nfe40_fat (Dados da fatura)
  • nfe.40.comb · modelo nuevonfe40_CIDE (CIDE Combustíveis), nfe40_pBio (Percentual do índice de mistura), nfe40_pGLP (Percentual do GLP derivado do petróleo), nfe40_pGNi (Percentual), nfe40_pGNn (Percentual de gás natural nacional), nfe40_CODIF (Código de autorização / registro), nfe40_qTemp (Quantidade de combustível), nfe40_vPart (Valor de partida), nfe40_UFCons (Sigla da UF de Consumo), nfe40_descANP (Descrição do Produto conforme ANP), nfe40_cProdANP (Código de produto da ANP), nfe40_origComb (Grupo indicador da origem do combustível), nfe40_encerrante (Informações do grupo de 'encerrante')
  • nfe.40.dest · modelo nuevonfe40_IE (Inscrição Estadual), nfe40_IM (Inscrição Municipal do tomador), nfe40_CPF (Número do CPF), nfe40_CNPJ (Número do CNPJ), nfe40_ISUF (Inscrição na SUFRAMA), nfe40_email (e-mail do destinatário), nfe40_xNome (Razão Social ou nome do destinatário), nfe40_enderDest (Dados do endereço), nfe40_indIEDest (Indicador da IE do destinatário), nfe40_idEstrangeiro (Identificador do destinatário)
  • nfe.40.emit · modelo nuevonfe40_IE (Inscrição Estadual do Emitente), nfe40_IM (Inscrição Municipal), nfe40_CPF (Número do CPF do emitente), nfe40_CRT (Código de Regime Tributário), nfe40_CNAE (CNAE Fiscal), nfe40_CNPJ (Número do CNPJ do emitente), nfe40_IEST (Inscricao Estadual), nfe40_xFant (Nome fantasia), nfe40_xNome (Razão Social ou Nome do emitente), nfe40_ISUFEmit (Inscrição do emitente na Suframa), nfe40_enderEmit (Endereço do emitente)
  • nfe.40.icms · modelo nuevonfe40_ICMSST (Grupo de informação), nfe40_ICMSPart (Partilha do ICMS entre a UF de origem)
  • nfe.40.prod · modelo nuevonfe40_DI (Declaração de Importação), nfe40_NCM (Código NCM (8 posições)), nfe40_NVE (Nomenclatura de Valor aduaneio), nfe40_med (grupo do detalhamento de Medicamentos), nfe40_CEST (Codigo especificador), nfe40_CFOP (Cfop), nfe40_arma (Armamentos), nfe40_cEAN (GTIN), nfe40_comb (Informar apenas para operações), nfe40_nFCI (Número de controle da FCI), nfe40_qCom (Quantidade Comercial do produto), nfe40_uCom (Unidade comercial), nfe40_vSeg (Valor Total do Seguro), nfe40_xPed (pedido de compra), nfe40_cProd (Código do produto ou serviço), nfe40_gCred (Grupo de informações sobre), nfe40_qTrib (Quantidade Tributável), nfe40_uTrib (Unidade Tributável), nfe40_vDesc (Valor do Desconto), nfe40_vProd (Valor bruto do produto ou serviço), nfe40_xProd (Descrição do produto ou serviço), nfe40_EXTIPI (Código EX TIPI (3 posições)), nfe40_cBarra (Codigo de barras diferente), nfe40_cBenef (cBenef), nfe40_indTot (Este campo deverá ser preenchido), nfe40_rastro (rastro), nfe40_vFrete (Valor Total do Frete), nfe40_vOutro (Outras despesas acessórias), nfe40_vUnCom (Valor unitário de comercialização), nfe40_CNPJFab (CNPJ do Fabricante da Mercadoria)
  • nfe.40.tdif · modelo nuevonfe40_pDif (Percentual do diferimento), nfe40_vDif (Valor do diferimento)
  • nfe.40.tipi · modelo nuevonfe40_cEnq (Código de Enquadramento Legal do IPI), nfe40_IPINT (IPINT), nfe40_cSelo (Código do selo de controle do IPI), nfe40_qSelo (Quantidade de selo de controle do IPI), nfe40_IPITrib (IPITrib), nfe40_CNPJProd (CNPJ do produtor da mercadoria)
  • nfe.40.tnfe · modelo nuevonfe40_infNFe (Informações da Nota Fiscal eletrônica), nfe40_infNFeSupl (Informações suplementares Nota Fiscal), nfe40_NFe_TEnviNFe_id
  • nfe.40.tred · modelo nuevonfe40_pRedAliq (Percentual de redução de aliquota), nfe40_pAliqEfet (Aliquota Efetiva que será aplicada)
  • nfe.40.deduc · modelo nuevonfe40_vDed (valor da dedução), nfe40_xDed (Descrição da Dedução), nfe40_deduc_cana_id
  • nfe.40.gcred · modelo nuevonfe40_gCred_prod_id, nfe40_cCredPresumido (Código de Benefício Fiscal), nfe40_pCredPresumido (Percentual do Crédito Presumido), nfe40_vCredPresumido (Valor do Crédito Presumido)
  • nfe.40.gmono · modelo nuevonfe40_vCBSMono (Valor total da CBS monofásica), nfe40_vIBSMono (Valor total do IBS monofásico), nfe40_vCBSMonoRet (Valor (vCBSMonoRet)), nfe40_vIBSMonoRet (Valor), nfe40_vCBSMonoReten (Valor total da CBS monofásica sujeita), nfe40_vIBSMonoReten (Valor total do IBS monofásico sujeito)

Texto generado por IA (DeepSeek) al leer el código de la versión 18.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 18.0

Confirmado el 2026-11-03 en la rama 18.0 de OCA/l10n-brazil.

terminal Instalación y uso

Sin información verificada

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.

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.