Pular para conteúdo

Bloco C — Documentos Fiscais (NF-e / NFC-e / Energia)

Finalidade

Escriturar entradas e saídas de documentos fiscais modelos 01, 1B, 04, 55 (NF-e), 06 (Energia), 66 (Gás), incluindo itens, impostos consolidados, informações complementares e ajustes de ICMS.


Registro C100 — Nota Fiscal (Modelos 01/1B/04/55)

Filtro de Documentos

move_ids = search([
    company_id, 
    l10n_br_numero_nota_fiscal > 0, 
    date >= date_ini, date <= date_fim,
    move_type in ['out_invoice','in_refund','out_refund','in_invoice'],
    l10n_br_tipo_documento in ['01','1B','04','55'],
    state != 'draft'
])

Validações Pré-Geração

Validação Condição Erro
Chave de acesso NF não cancelada sem chave ou chave ≠ 44 dígitos RedirectWarning: "Notas Fiscais sem Chave de Acesso"
Data Fatura sem invoice_date ou date RedirectWarning: "Notas Fiscais sem Data"

Campos do C100

Campo SPED Origem no Odoo Regra
IND_OPER 📄 TIPO_NF[move.move_type] 0=entrada, 1=saída
IND_EMIT 📄 Se CNPJ da empresa está na chave → '0', senão → '1' 🧮
COD_SIT 📄 Determinado por l10n_br_cstat_nf + state — ver tabela abaixo 🧮
COD_MOD 📄 move.l10n_br_tipo_documento ✅ Fatura → Tipo de Documento
CHV_NFE 📄 move.l10n_br_chave_nf ✅ Fatura → Chave NF
SER 📄 move.l10n_br_serie_nf ✅ Fatura → Série
NUM_DOC 📄 move.l10n_br_numero_nota_fiscal ✅ Fatura → Número
COD_PART 👤 partner.id 🔒 ID do parceiro
DT_DOC 📄 move.invoice_date ✅ Fatura → Data
DT_E_S 📄 max(move.date, move.invoice_date) 🧮
VL_DOC 📄 move.l10n_br_total_nfe 💰 Total NF-e
IND_PGTO 📄 payment_term.l10n_br_indicador ou '1' ✅ Cond. Pagamento → Indicador
VL_DESC 📄 move.l10n_br_desc_valor 💰
VL_MERC 📄 move.l10n_br_prod_valor 💰
IND_FRT 📄 incoterm.l10n_br_modalidade_frete ou '9' ✅ Fatura → Frete
VL_FRT 📄 move.l10n_br_frete 💰
VL_SEG 📄 move.l10n_br_seguro 💰
VL_OUT_DA 📄 move.l10n_br_despesas_acessorias 💰
VL_BC_ICMS 📄 move.l10n_br_icms_base 💰
VL_ICMS 📄 move.l10n_br_icms_valor 💰
VL_BC_ICMS_ST 📄 move.l10n_br_icmsst_base 💰
VL_ICMS_ST 📄 icmsst + substituto + retido + fcp_st 💰 Composição
VL_IPI 📄 move.l10n_br_ipi_valor 💰
VL_PIS 📄 move.l10n_br_pis_valor 💰
VL_COFINS 📄 move.l10n_br_cofins_valor 💰
VL_PIS_ST 📄 move.l10n_br_pis_ret_valor 💰
VL_COFINS_ST 📄 move.l10n_br_cofins_ret_valor 💰

Tabela de COD_SIT

Condição COD_SIT Significado
cstat_nf in [301,302,303] + emissão própria 04 Denegada
cstat_nf in [135,101] + cancel 02 Cancelada
cstat_nf in [100,135,690,501] + posted + finalidade 2 06 NF-e complementar
cstat_nf in [100,135,690,501] + posted 00 Regular
Emissão terceiros + CNPJ chave ≠ parceiro 08 Emissão terceiros
Emissão terceiros 00 Regular

Registro C101 — DIFAL/FCP Destino

Condição Gerado quando
Geração l10n_br_icms_dest_valor > 0 ou l10n_br_fcp_dest_valor > 0
Campo Origem
VL_FCP_UF_DEST 📄 move.l10n_br_fcp_dest_valor
VL_ICMS_UF_DEST 📄 move.l10n_br_icms_dest_valor
VL_ICMS_UF_REM 🔒 0.00

Registro C110 — Informação Complementar do Documento

Campo Origem Regra
COD_INF 🧮 Índice sequencial (1, 2, ...) Automático
TXT_COMPL 📄 move.l10n_br_informacao_fiscal — quebrado em chunks de 200 chars ✅ Fatura → Info Fiscal

Alternativa: Se não tem l10n_br_informacao_fiscal mas tem referencia_ids, concatena as chaves das NF referenciadas.


Registro C113 — Documento Fiscal Referenciado

Condição Para cada invoice_ref em move.referencia_ids
Campo Origem
IND_OPER 📄 TIPO_NF[move_ref.move_type]
IND_EMIT 🧮 CNPJ empresa na chave → 0, senão → 1
COD_PART 👤 move_ref.partner.id
COD_MOD 📄 move_ref.l10n_br_tipo_documento
SER / NUM_DOC / DT_DOC 📄 Dados da NF referenciada
CHV_DOCE 📄 Chave da NF referenciada

Registro C120 — Importação (DI)

Condição move.l10n_br_tipo_pedido_entrada == 'importacao'
Campo Origem
COD_DOC_IMP 🔒 '0'
NUM_DOC_IMP 📄 di_id.name (número da DI)
PIS_IMP 📋 sum(pis_valor) agrupado por DI
COFINS_IMP 📋 sum(cofins_valor) agrupado por DI

Registro C170 — Itens do Documento (Detalhamento)

Condição Gerado somente quando IND_EMIT == '1' (emissão terceiros)
Campo SPED Origem no Odoo Regra
NUM_ITEM 📋 Sequência (1, 2, ...) 🧮
COD_ITEM 📦 product.default_code ✅ Produto → Ref. Interna
DESCR_COMPL 📋 line.l10n_br_informacao_adicional ✅ Linha → Info Adicional
QTD 📋 line.quantity
UNID 📦 product.uom_id.l10n_br_codigo_sefaz
VL_ITEM 📋 line.l10n_br_prod_valor 💰
VL_DESC 📋 line.l10n_br_desc_valor 💰
IND_MOV ⚙️ '0' se operação com estoque, '1' se sem ✅ Operação → Movimento Estoque
CST_ICMS 📋 (origem ou '0') + icms_cst 💰
CFOP 📋 cfop.codigo_cfop
VL_BC_ICMS / ALIQ_ICMS / VL_ICMS 📋 Campos ICMS da linha 💰
VL_BC_ICMS_ST / ALIQ_ST / VL_ICMS_ST 📋 ICMS-ST da linha (composição) 💰
CST_IPI / VL_BC_IPI / ALIQ_IPI / VL_IPI 📋 Campos IPI da linha 💰
CST_PIS / VL_BC_PIS / ALIQ_PIS / VL_PIS 📋 Campos PIS da linha 💰
CST_COFINS / VL_BC_COFINS / ALIQ_COFINS / VL_COFINS 📋 Campos COFINS da linha 💰
COD_CTA 🏦 line.account_id.code ✅ Conta contábil

Registro C190 — Consolidado por CST/CFOP/Alíquota

Agrupa as linhas por (origem, icms_cst, cfop, icms_aliquota).

Campo Origem Regra
CST_ICMS 📋 (origem ou '0') + icms_cst 💰 Agrupado
CFOP 📋 cfop.codigo_cfop
ALIQ_ICMS 📋 l10n_br_icms_aliquota 💰
VL_OPR 📋 sum(l10n_br_total_nfe) 🧮
VL_BC_ICMS 📋 sum(icms_base) 🧮
VL_ICMS 📋 sum(icms_valor) 🧮
VL_BC_ICMS_ST / VL_ICMS_ST / VL_IPI 📋 Somas agrupadas 🧮
VL_RED_BC 📋 Cálculo reverso: base / (1 - redução/100) - base 🧮

Efeito colateral: O C190 alimenta e110_vl_tot_debitos (saídas) e e110_vl_tot_creditos (entradas) para a apuração E110.

Efeito colateral ICMS-ST: Alimenta os models sped.fiscal.uf.icmsst (E210) por UF, classificando por CFOP: - CFOPs 1410,1411,...,2662e210_vl_devol_st - CFOPs 1603,2603e210_vl_ressarc_st - Demais → e210_vl_out_cred_st (entrada) ou e210_vl_retencao_st (saída)


Registro C195 — Observações do Documento

Fonte Condição
Mensagens fiscais move.invoice_line_ids.l10n_br_mensagem_fiscal_ids
Info fiscal move.l10n_br_informacao_fiscal (se sem mensagens)
Ajustes ICMS Se c197_gerar_apuracao_ajustes_icms ativo

Registro C197 — Ajuste de Documento (Benefício / Ajuste ICMS)

Modo 1 — Código de Benefício

Condição line.l10n_br_codigo_beneficio preenchido e UF ≠ SC
Campo Origem
COD_AJ 📋 line.l10n_br_codigo_beneficio
COD_ITEM 📦 product.default_code
VL_BC_ICMS 📋 line.l10n_br_icms_base ou icmsst_base
ALIQ_ICMS 📋 line.l10n_br_icms_aliquota
VL_ICMS 📋 line.l10n_br_icms_valor ou icmsst_valor
VL_OUTROS 📋 line.l10n_br_icms_valor_outros

Modo 2 — Ajustes de Apuração ICMS

Condição l10n_br_icms_ajuste_ids da linha preenchido
Campo Origem
COD_AJ ⚙️ icms_ajuste.l10n_br_codigo
DESCR_COMPL_AJ ⚙️ icms_ajuste.l10n_br_descricao

Efeito: Se l10n_br_transf_credito → acumula em c197_vl_tot_transf_creditos + e110_vl_aj_debitos Se l10n_br_transf_debito → acumula em c197_vl_tot_transf_debitos Senão → e110_vl_aj_creditos


Registro C500 — Energia Elétrica / Gás (Modelos 06/66)

Estrutura similar ao C100, com campos adicionais:

Campo Extra Origem
COD_GRUPO_TENSAO 📦 product.l10n_br_grupo_tensao
COD_CONS 📦 product.l10n_br_consumo_energia_gas
TP_LIGACAO 📦 product.l10n_br_tipo_ligacao
IND_DEST 👤 partner.l10n_br_indicador_ie
COD_CTA 🏦 journal.default_account_id.code
VL_FORN 📄 move.l10n_br_total_nfe
COD_MUN_DEST 📄 move.l10n_br_municipio_fim_id.codigo_ibge

Registro C140/C141 — Fatura / Parcelas

Campo Origem
IND_TIT 📄 Mapeado via payment_provider.l10n_br_meio (1400, 0201, 1602, 1703)
NUM_TIT 📄 payment_line.l10n_br_cobranca_nossonumero concatenados
QTD_PARC 📄 len(payment_line_ids)
VL_TIT 📄 sum(parcela.balance)

C141 — Parcelas

Campo Origem
NUM_PARC 📄 parcela.l10n_br_cobranca_parcela
DT_VCTO 📄 parcela.date_maturity
VL_PARC 📄 parcela.balance

Referências