TX2 Campos — Cadeia de Determinação Profunda¶
Objetivo¶
Para cada campo que aparece no TX2/JSON, este arquivo documenta a cadeia de determinação completa: de onde vem o valor, quais tabelas são consultadas, em que ordem, e como um usuário ou desenvolvedor pode alterar o resultado.
Legenda¶
| Ícone | Significado | Alterável por | Nível |
|---|---|---|---|
| 🏢 | Empresa (res.company) |
Administrador | Cadastro |
| 👤 | Parceiro (res.partner) |
Usuário | Cadastro |
| 📦 | Produto (product.template) |
Usuário | Cadastro |
| ⚙️ | Operação Fiscal (l10n_br_ciel_it_account.operacao) |
Funcional | Configuração |
| 📄 | Documento Fiscal (l10n_br_ciel_it_account.documento) |
Funcional | Configuração |
| 🗂️ | Tabela Fiscal (NCM/UF, ICMS/UF, Benefício, Enquadramento) | Funcional | Configuração |
| 🏦 | Cobrança Escritural | Funcional | Configuração |
| 🔧 | Parâmetro de Sistema (ir.config_parameter) |
Administrador | Sistema |
| 🧮 | Motor Fiscal (simulate_impostos) |
⚠️ Cascata | Automático |
| 🔒 | Fixo no Código | Desenvolvedor | Código |
ICMS — Cadeia de Determinação¶
CST ICMS (CST_N12 / CSOSN_N12a)¶
flowchart TD
A["Regime tributário"] -->|"Lucro = CST 00"| B["Default"]
A -->|"SN = CSOSN 101"| B
B --> C["Tabela NCM por UF"]
C -->|"Se encontra"| D["Sobrescreve CST"]
C -->|"Se não"| E["Mantém default"]
D --> F["NCM por Origem por UF"]
E --> F
F -->|"Se encontra"| G["Sobrescreve CST"]
F -->|"Se não"| H["Mantém anterior"]
G --> I["NCM por IE por UF"]
H --> I
I -->|"Se encontra"| J["Sobrescreve CST"]
I -->|"Se não"| K["Mantém anterior"]
J --> L["NCM por Cliente por UF"]
K --> L
L -->|"Se encontra"| M["Sobrescreve CST"]
L -->|"Se não"| N["Mantém anterior"]
M --> O["Operação Fiscal"]
N --> O
O -->|"Se l10n_br_icms_cst preenchido"| P["SOBRESCREVE TUDO"]
O -->|"Se vazio"| Q["Mantém anterior"]
| Prioridade | Tabela Odoo | Critérios de Busca | Onde Configurar |
|---|---|---|---|
| 1 | res.company |
l10n_br_regime_tributario |
Empresa → Regime |
| 2 | l10n_br_ciel_it_account.ncm.uf |
UF de + UF para + NCM | Localização BR → ICMS → NCM por UF |
| 3 | l10n_br_ciel_it_account.ncm.origem.uf |
UF de + UF para + NCM + Origem | Localização BR → ICMS → NCM por Origem por UF |
| 4 | l10n_br_ciel_it_account.ncm.ie.uf |
UF de + UF para + NCM + Origem + Ind. IE | Localização BR → ICMS → NCM por IE por UF |
| 5 | l10n_br_ciel_it_account.ncm.cliente.uf |
UF de + UF para + NCM + Parceiro | Localização BR → ICMS → NCM por Cliente por UF |
| 6 (final) | l10n_br_ciel_it_account.operacao |
Se l10n_br_icms_cst preenchido |
Operações Fiscais → CST ICMS |
Código-fonte:
sale_order.pylinhas 1022-1066
Alíquota ICMS (pICMS_N16)¶
| Prioridade | Tabela | Condição |
|---|---|---|
| 1 (base) | l10n_br_ciel_it_account.icms.uf |
UF de → UF para. Se ext (origem 1,2,3,8) → l10n_br_icms_ext_aliquota |
| 2 | l10n_br_ciel_it_account.ncm.uf (e derivados) |
Se l10n_br_icms_modalidade_base preenchido → usa alíquota do NCM/UF |
| 3 (final) | Operação Fiscal |
Se l10n_br_icms_aliquota preenchido e l10n_br_icms_modalidade_base preenchido |
Nota: A operação fiscal sobrescreve alíquota somente se também tem
l10n_br_icms_modalidade_basepreenchido. Caso contrário, usa alíquota da tabela ICMS UF mas com a CST da operação.
Base ICMS (vBC_N15)¶
base = l10n_br_total_nfe + desonerado - ICMSST - FCP_ST
Se consumidor NÃO final e contribuinte e NÃO uso:
base -= (IPI + IPI_outros + IPI_isento)
base *= (1 - redução_base/100)
Se operação.l10n_br_icms_remove_despesa_base:
base -= (frete + seguro + desp_acessorias)
Se operação.l10n_br_icms_zerar_base:
base = 0
Código de Benefício Fiscal (cBenef_I05f)¶
Tabela: l10n_br_ciel_it_account.icms.beneficio
Busca: company_id + (NCM ou vazio) + (Origem ou vazio) + CFOP + CST ICMS
Filtro adicional:
1º Registros com partner_ids incluindo o parceiro → retorna match por cliente
2º Registros sem partner_ids → retorna match genérico
Se múltiplos: limit=1 (primeiro encontrado)
| Campo do Model | Tipo | Descrição |
|---|---|---|
company_id |
Many2one | Empresa |
l10n_br_ncm_id |
Many2one | NCM (ou vazio = qualquer) |
l10n_br_origem |
Selection | Origem do produto (ou vazio = qualquer) |
l10n_br_cfop_id |
Many2one | CFOP (ou vazio = qualquer) |
l10n_br_icms_cst |
Selection | CST ICMS (obrigatório) |
l10n_br_codigo_beneficio |
Char | O código que vai no TX2 |
partner_ids |
Many2many | Parceiros específicos (se vazio = todos) |
Onde configurar: ✅ Localização BR → ICMS → Benefícios ICMS
IPI — Cadeia de Determinação¶
CST IPI (CST_O09)¶
| Prioridade | Fonte | Onde Configurar |
|---|---|---|
| 1 (base) | Default 99 |
❌ Fixo |
| 2 | product.l10n_br_ncm_id.l10n_br_ipi_cst |
NCM → CST IPI |
| 3 | l10n_br_cfop_id.l10n_br_ipi_cst |
CFOP → CST IPI |
| 4 (final) | operacao.l10n_br_ipi_cst |
Operação Fiscal → CST IPI |
Alíquota IPI (pIPI_O13)¶
Se CST = 50 (tributado): product.l10n_br_ncm_id.l10n_br_ipi_aliquota
Onde configurar: ✅ NCM → "Alíquota IPI (%)"
Enquadramento IPI (cEnq_O06)¶
Tabela: l10n_br_ciel_it_account.ipi.enquadramento
| Prioridade | Critério |
|---|---|
| 1 | NCM + CFOP + CST |
| 2 | (sem NCM) + CFOP + CST |
| 3 | (sem NCM) + (sem CFOP) + CST |
| 4 | (sem NCM) + (sem CFOP) + (sem CST) |
| Último fallback | product.l10n_br_ncm_id.l10n_br_ipi_enq |
Onde configurar: ✅ Localização BR → IPI → Enquadramentos
PIS — Cadeia de Determinação¶
CST PIS (CST_Q06)¶
| Prioridade | Fonte | Onde Configurar |
|---|---|---|
| 1 (base) | Default 99 |
❌ Fixo |
| 2 | Se empresa regime 3: CST 01 |
Automático por regime |
| 3 | product.l10n_br_ncm_id.l10n_br_pis_cst |
NCM → CST PIS |
| 4 | l10n_br_cfop_id.l10n_br_pis_cst |
CFOP → CST PIS |
| 5 (final) | operacao.l10n_br_pis_cst |
Operação Fiscal → CST PIS |
Alíquota PIS (pPIS_Q08)¶
| Prioridade | Fonte | Onde Configurar |
|---|---|---|
| 1 (base) | company_id.l10n_br_pis_aliquota |
✅ Empresa → "Alíquota PIS" |
| 2 | product.l10n_br_ncm_id.l10n_br_pis_aliquota (se NCM tem CST PIS e alíquota > 0) |
✅ NCM → "Alíquota PIS" |
| 3 (final) | operacao.l10n_br_pis_aliquota (se operação tem CST PIS e alíquota > 0) |
✅ Operação Fiscal → "Alíquota PIS" |
COFINS: Cadeia idêntica com campos
cofins_*em vez depis_*.
ISS — Cadeia de Determinação¶
Alíquota ISS¶
| Prioridade | Fonte | Onde Configurar |
|---|---|---|
| 1 (base) | False (sem ISS por padrão) |
— |
| 2 (final) | operacao.l10n_br_iss_aliquota (se > 0) |
✅ Operação Fiscal → "Alíquota ISS (%)" |
Nota: Diferente de ICMS/IPI/PIS, o ISS tem apenas uma fonte: a operação fiscal.
CFOP — Cadeia de Determinação¶
| Condição | CFOP utilizado |
|---|---|
| UF empresa = UF parceiro | operacao.l10n_br_intra_cfop_id |
| País empresa ≠ País parceiro | operacao.l10n_br_ext_cfop_id |
| Senão (interestadual) | operacao.l10n_br_inter_cfop_id |
Onde configurar: ✅ Operação Fiscal → CFOP Interno / CFOP Interestadual / CFOP Exterior
Operação Fiscal — Como é Determinada¶
A operação fiscal é o pivot central de toda a cadeia tributária. Ela é determinada pelo método
simulate_impostos()com busca por prioridade.
| Prioridade | Critérios de Busca |
|---|---|
| 1 (mais específico) | Empresa + Tipo Pedido + Produto + UF dest + Parceiro + Consumidor |
| 2 | Empresa + Tipo Pedido + Categoria + UF dest + Parceiro |
| 3 | Empresa + Tipo Pedido + UF dest + Parceiro |
| 4 | Empresa + Tipo Pedido + Categoria + UF dest |
| 5 | Empresa + Tipo Pedido + UF dest |
| 6 (mais genérico) | Empresa + Tipo Pedido |
Onde configurar: ✅ Localização BR → Operações Fiscais
Cobrança — Cadeia de Determinação¶
Registro de Cobrança (l10n_br_cobranca_id)¶
| Prioridade | Fonte | Onde Configurar |
|---|---|---|
| 1 | invoice.payment_provider_id.l10n_br_cobranca_id |
✅ Provedores de Pagamento → Cobrança |
| 2 | invoice.invoice_payment_term_id.l10n_br_cobranca_id |
✅ Condição de Pagamento → Cobrança |
| Hook | invoice._get_l10n_br_cobranca_id(cobranca) |
Herança customizada |
Nosso Número¶
| Situação | Comportamento |
|---|---|
Parcela sem l10n_br_cobranca_nossonumero |
Gera via l10n_br_nosso_numero_id.next_by_id() |
Parcela REJEITADO |
Gera novo nosso número e limpa dados anteriores |
| Parcela já tem nosso número | Usa o existente |
Campos da Fatura NÃO Determinados pelo Motor Fiscal¶
Estes campos vêm de edição manual na fatura ou de cópia do pedido de venda:
| Campo na Fatura | Usado como TX2 | Onde Preencher |
|---|---|---|
l10n_br_operacao_consumidor |
INDFINAL_B25A |
Fatura → "Consumidor Final" |
l10n_br_indicador_presenca |
INDPRES_B25B |
Fatura → "Indicador de Presença" |
l10n_br_data_saida |
DHSAIENT_B10 |
Fatura → "Data de Saída" |
l10n_br_data_retroativa |
Altera DHEMI_B09 |
Fatura → "Data Retroativa" |
l10n_br_serie_nf |
serie_B07 |
Fatura → "Série" |
l10n_br_informacao_complementar |
infCpl_Z03 |
Fatura → "Informação Complementar" |
l10n_br_informacao_fiscal |
infAdFisco_Z02 |
Fatura → "Informação Fiscal" |
l10n_br_motivo |
Justificativa cancelamento | Fatura → "Motivo" |
l10n_br_correcao |
Texto CCe | Fatura → "Correção" |
l10n_br_descricao_servico |
DiscriminacaoServico (se unificado) |
Fatura → "Descrição do Serviço" |
l10n_br_iss_municipio_id |
MunicipioIncidencia |
Fatura → "Município ISS" |
IBS/CBS — Campos da Reforma Tributária (NFS-e)¶
Adicionado em 06/04/2026 (commit
f2fe26d3). Campos condicionais — somente gerados se preenchidos.
| Campo TX2 NFS-e | Origem | Condição |
|---|---|---|
CodigoOperacao |
📦 product.l10n_br_codigo_operacao |
Se preenchido |
ClassificacaoTributariaIbsCbs |
📦 product.l10n_br_classtrib_ibs_cbs |
Se preenchido |
SituacaoTributariaIbsCbs |
📋 line.l10n_br_ibscbs_cst |
Se preenchido |
ClassifTributariaRegularIbsCbs |
📦 product.l10n_br_classtrib_ibs_cbs |
Se ibscbs_cst ≠ '000' (suspensão/benefício) |
Cadeia de determinação do CST IBS/CBS: Operação Fiscal → NCM (se
!l10n_br_ibscbs_substituir_ncm) → linha de faturaOnde configurar: - ✅ Operação Fiscal →
l10n_br_ibscbs_cst- ✅ NCM →l10n_br_ibscbs_cst- ✅ Produto →l10n_br_classtrib_ibs_cbs
Ver detalhamento completo em NFS-e TX2
Referências¶
- NF-e profundo: NF-e TX2 — mapeamento completo com blocos
- NFS-e profundo: NFS-e TX2 — variações por município
- Cobrança: Cobrança Escritural — boletos campo a campo
- Erros: TX2 Erros Comuns — 19 erros diagnósticos
- Alteração: Como Alterar TX2 — guia prático em 5 níveis
- Índice: Sumário Geral