Pular para conteúdo

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.py linhas 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_base preenchido. 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 de pis_*.


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 fatura

Onde 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