Pular para conteúdo

EFD Contribuições — PIS/COFINS

Dados do Model

Atributo Valor
Model l10n_br_ciel_it_account.sped.contribuicao
Arquivo account_sped_contribuicao.py (2.021 linhas)
Método principal gerar_sped()
Periodicidade Mensal
Menu Faturamento → Relatórios → Relatórios Apuração Impostos → EFD Contribuições
Constraint UNIQUE (company_id, date_ini, date_fim)

Campos de Configuração do Registro

Campo Tipo Descrição Default
consolidar Boolean Consolida filiais no mesmo arquivo True
f600_usar_cr Boolean Considerar recebimento financeiro para F600 True

⚙️ Consolidação de Filiais: Quando consolidar = True, o sistema busca company_id + company_id.child_ids e gera blocos A/C/D/F separados por CNPJ (via registros A010/C010/D010/F010/0140), mas com um único bloco 0 e M.


Habilitação de Registros

def _registro_em_uso(self, registro):
    return registro in self.company_id.l10n_br_sped_contribuicao_registros.mapped('name')

⚙️ Onde configurar: Empresa → aba Localização BR → Registros SPED Contribuições


Ordem de Geração

A geração NÃO segue a ordem numérica dos blocos. A ordem real é:

A001 → A010/A100/A170 (por empresa) → A990
C001 → C010/C100/C170/C500 (por empresa) → C990
D001 → D010/D100/D101/D105 (por empresa) → D990
F001 → F010/F100/F600 (por empresa) → F990
I001 → I990  (vazio)
M001 → M200 → M600 → M990
P001 → P990  (vazio)
1001 → 1990
0000 → 0001 → 0100 → 0110 → 0111 → 0140/0150/0190/0200/0400/0450 (por empresa) → 0500 → 0990
9001 → 9900 → 9990

🔒 O Bloco 0 é gerado por último pois depende das listas de parceiros, produtos e CFOPs acumulados durante os blocos A/C/D/F.


Bloco 0 — Abertura e Cadastros

0000 — Abertura

Campo Origem Tipo Regra
COD_VER 🔒 '006' Fixo Versão do leiaute
TIPO_ESCRIT 🔒 '0' Fixo Original
IND_SIT_ESP 🔒 '' Fixo Sem situação especial
NUM_REC_ANTERIOR 🔒 '' Fixo
DT_INI / DT_FIN ⚙️ self.date_ini / self.date_fim Config Período informado
NOME 🏢 company.l10n_br_razao_social ou company.name Empresa Razão social
CNPJ 🏢 company.l10n_br_cnpj Empresa Formatado sem pontuação
UF 🏢 company.state_id.code Empresa
COD_MUN 🏢 company.l10n_br_municipio_id.codigo_ibge Empresa Código IBGE
SUFRAMA 🔒 "" Fixo
IND_NAT_PJ 🔒 '00' Fixo Sem natureza especial
IND_ATIV 🔒 '0' Fixo Industrial/equiparado

0100 — Contador

Mesma estrutura do SPED Fiscal. Dados do l10n_br_contador_partner_id.

Validação Erro
Sem contador RedirectWarning("Informar o contador da empresa") → redireciona para formulário da empresa

0110 — Regime de Apuração da Contribuição

Campo Origem Tipo Regra
COD_INC_TRIB 🏢 company.l10n_br_cod_inc_trib Config 1=Não-cumulativo, 2=Cumulativo, 3=Ambos
IND_APRO_CRED 🏢 company.l10n_br_ind_apro_cred Config Método de apropriação de crédito
COD_TIPO_CONT 🔒 '1' Fixo Tipo de contribuição
IND_REG_CUM 🔒 '' Fixo

📍 Onde configurar l10n_br_cod_inc_trib: Definições → Empresa → aba Localização BR → Incidência Tributária PIS/COFINS

Impacto do regime: - Cumulativo (l10n_br_incidencia_cumulativa == '2' e l10n_br_cod_inc_trib == '1'): Filtra apenas out_invoice e out_refund (sem entradas) - Não-cumulativo: Inclui out_invoice, in_refund, out_refund, in_invoice

0111 — Receita Bruta

Campo Valor Regra
Todos os campos 🔒 0.00 ⚠️ Fixo — não implementado dinamicamente

0140 — Estabelecimento (por filial)

Campo Origem
COD_EST 🏢 company.l10n_br_cnpj (formatado)
NOME 🏢 company.l10n_br_razao_social ou company.name
CNPJ 🏢 company.l10n_br_cnpj
UF / IE / COD_MUN / IM 🏢 Dados da empresa/filial

0150 — Participantes

Validação Erro
IE com mais de 14 caracteres RedirectWarning("Clientes com problema de IE")
Parceiro BR sem código IBGE do município RedirectWarning("Clientes com problema de Municipio")

0190 — UoM / 0200 — Produtos / 0400 — CFOP / 0500 — Contas

Mesma lógica do SPED Fiscal com mesmas validações (RedirectWarning para UoM sem código SEFAZ, categorias sem tipo, produtos sem default_code).


Bloco A — Serviços (NFS-e / RPS / NDS)

A100 — Documento Fiscal de Serviço

Filtro de documentos: l10n_br_tipo_documento in ['NFS','NFSE','NDS']

Regras de Exclusão

Regra Condição Referência
Entrada sem crédito PIS IND_OPER == 0 e nenhuma linha com pis_cst in PIS_CST_CREDITO FAQ RFB Cap. XXVII
Saída sem financeiro IND_OPER == 1 e l10n_br_tipo_pedido in TIPO_PEDIDO_SAIDA_NO_PAYMENT FAQ SPED RFB
Lucro presumido + entrada não-devolução IND_OPER == 0 e move_type != 'out_refund' e incidencia_cumulativa == '2' Regra fiscal

Campos do A100

Campo Origem Tipo
IND_OPER 📄 TIPO_NF[move_type] 🧮 0=entrada, 1=saída
IND_EMIT 🧮 '1' se entrada, '0' se saída Calculado
COD_PART 👤 partner.id Parceiro
COD_SIT 📄 '02' se cancel + saída, senão '00' 🧮
SER 📄 move.l10n_br_serie_nf Fatura
NUM_DOC 📄 move.l10n_br_numero_nota_fiscal Fatura
CHV_NFSE 📄 move.l10n_br_chave_nf Fatura
DT_DOC 📄 move.invoice_date Fatura
DT_EXE_SERV 📄 max(move.date, move.invoice_date) 🧮
VL_DOC 📄 move.l10n_br_total_nfe 💰
IND_PGTO 📄 move.invoice_payment_term_id.l10n_br_indicador ou '1' Config
VL_DESC 📄 move.l10n_br_desc_valor 💰
VL_BC_PIS 📄 sum(lines.l10n_br_pis_base) 💰
VL_PIS 📄 move.l10n_br_pis_valor 💰
VL_BC_COFINS 📄 sum(lines.l10n_br_cofins_base) 💰
VL_COFINS 📄 move.l10n_br_cofins_valor 💰
VL_PIS_RET 📄 move.l10n_br_pis_ret_valor 💰
VL_COFINS_RET 📄 move.l10n_br_cofins_ret_valor 💰
VL_ISS 📄 move.l10n_br_iss_valor 💰

A170 — Itens do Serviço

Regra adicional para entradas: Só gera linhas com l10n_br_pis_cst in ['50','66','70','75','98','99']

Campo Origem Tipo
NUM_ITEM 🧮 Sequência (nItem+1) Calculado
COD_ITEM 📦 product.default_code Produto
DESCR_COMPL 📋 line.l10n_br_informacao_adicional Linha
VL_ITEM 📋 line.l10n_br_prod_valor 💰
VL_DESC 📋 line.l10n_br_desc_valor 💰
NAT_BC_CRED 📋 line.l10n_br_nat_bc_cred ou product.l10n_br_nat_bc_cred ou '13' (se entrada) 🧮 Fallback cascata
IND_ORIG_CRED 🧮 '1' se CFOP importação (3101/3102/3126/3127), senão '0' (somente entradas) Calculado
CST_PIS / VL_BC_PIS / ALIQ_PIS / VL_PIS 📋 Dados PIS da linha 💰
CST_COFINS / VL_BC_COFINS / ALIQ_COFINS / VL_COFINS 📋 Dados COFINS da linha 💰
COD_CTA 🏦 line.account_id.code Conta contábil

Bloco C — Mercadorias (NF-e)

C010 — Identificação do Estabelecimento

Campo Origem Regra
CNPJ 🏢 company.l10n_br_cnpj Formatado
IND_ESCRI 🔒 '2' Fixo — Consolidado por item

C100 — Documento Fiscal NF-e

Filtro: l10n_br_tipo_documento in ['01','1B','04','55']

Mesmas validações de chave de acesso (44 dígitos) e mesmas regras de exclusão do Bloco A.

Método de validação Erro
Chave NF inválida RedirectWarning("Notas Fiscais sem Chave de Acesso")
NF sem data RedirectWarning("Notas Fiscais sem Data")

C170 — Itens (Detalhado)

Mesma estrutura do A170, adaptada para NF-e. Inclui campos adicionais:

Campo extra Origem
CFOP 📋 line.l10n_br_cfop_id.codigo_cfop
VL_BC_ICMS / ALIQ_ICMS / VL_ICMS 📋 Dados ICMS da linha
VL_BC_ICMS_ST / VL_ICMS_ST 📋 Dados ST

C500 — Energia/Comunicação (modelos 06,28,29)

Mesma lógica do C100 para documentos de energia elétrica e comunicação.


Bloco D — Transporte (CT-e)

D100 — Documentos de Transporte

Filtro: l10n_br_tipo_documento in ['07','08','8B','09','10','11','26','27','57','63','67']

Campo Origem
IND_OPER 📄 TIPO_NF[move_type]
IND_EMIT 🧮 '0' se CNPJ da empresa está na chave, senão '1'
COD_SIT 🧮 '04' se cstat=302, '02' se cstat=135+cancel, '06' se finalidade=2, senão '00'
COD_MOD 📄 move.l10n_br_tipo_documento
CHV_CTE 📄 move.l10n_br_chave_nf
VL_DOC 📄 move.l10n_br_total_nfe
IND_FRT 📄 move.invoice_incoterm_id.l10n_br_modalidade_frete ou '9'
VL_SERV 📄 move.l10n_br_prod_valor
VL_BC_ICMS / VL_ICMS 📄 Dados ICMS
COD_CTA 🏦 move.invoice_line_ids[0].account_id.code

D101 — PIS sobre CT-e (agrupado por CST)

Campo Origem
IND_NAT_FRT 🔒 '2'
VL_ITEM 📋 sum(lines_cst.l10n_br_total_nfe)
CST_PIS 📋 CST agrupado
NAT_BC_CRED 📋 line.l10n_br_nat_bc_cred ou '13'
VL_BC_PIS 📋 sum(lines_cst.l10n_br_pis_base)
ALIQ_PIS 📋 Primeira linha do grupo
VL_PIS 📋 sum(lines_cst.l10n_br_pis_valor)
COD_CTA 🧮 Conta PIS via tax_ids → repartition_lines → account

D105 — COFINS sobre CT-e

Mesma estrutura do D101, substituindo PIS por COFINS.


Bloco F — Outras Operações

F100 — Documentos sem Modelo Fiscal

Filtro: l10n_br_tipo_documento in ['ND','NDS','FAT']

Mesmas regras de exclusão dos blocos A e C.

Campo Origem
IND_OPER 📄 TIPO_NF[move_type]
COD_PART 👤 partner.id
COD_ITEM 📦 product.default_code
DT_OPER 📄 move.date
VL_OPER 📋 line.l10n_br_total_nfe
CST_PIS / VL_BC_PIS / ALIQ_PIS / VL_PIS 📋 Dados PIS
CST_COFINS / VL_BC_COFINS / ALIQ_COFINS / VL_COFINS 📋 Dados COFINS
NAT_BC_CRED 📋 line.l10n_br_nat_bc_cred ou '13' (entrada)
IND_ORIG_CRED 🧮 Baseado em CFOP importação
COD_CTA 🏦 line.account_id.code

F600 — Retenção na Fonte (PIS/COFINS)

Filtro base: l10n_br_tipo_documento in ['NFS','NFSE','NDS'] e saídas (out_invoice)

⚙️ Dois modos de operação controlados por f600_usar_cr:

Modo 1: Recebimento Financeiro (f600_usar_cr = True) — DEFAULT

Busca pagamentos recebidos (account.payment) no período e vincula às faturas originais:

Campo Origem Regra
IND_NAT_RET 👤 '03' se partner.l10n_br_orgao_publico != '4', senão '01' Órgão público
DT_RET 📄 payment.date Data do pagamento
VL_BC_RET 🧮 sum(move_ids.l10n_br_total_nfe) × fator Proporcional
VL_RET 🧮 sum(ALL_ret) × fator PIS+COFINS+INSS+IRPJ+CSLL+ISS
IND_NAT_REC 🏢 '0' se cod_inc_trib == '1', senão '1' Regime
CNPJ 👤 partner.l10n_br_cnpj Parceiro
VL_RET_PIS 📄 sum(move_ids.l10n_br_pis_ret_valor) × fator Proporcional
VL_RET_COFINS 📄 sum(move_ids.l10n_br_cofins_ret_valor) × fator Proporcional
IND_DEC 🔒 '0' Fixo

Cálculo do fator de proporcionalidade:

total_ret = sum(pis_ret + cofins_ret + inss_ret + irpj_ret + csll_ret + iss_ret)
total_liq = sum(total_nfe) - total_ret
fator = min(payment.amount / total_liq, 1.00)  # máximo 100%

Regras de exclusão F600: - Se sum(pis_ret_valor + cofins_ret_valor) == 0 → pula (sem retenção PIS/COFINS) - Se fator <= 0 → pula

Modo 2: Competência (f600_usar_cr = False)

Busca diretamente as faturas com retenção no período, sem considerar pagamentos.


Bloco M — Apuração PIS/COFINS

M200 — Consolidação PIS

Campo Origem Regra
VL_TOT_CONT_NC_PER 🔒 0.00 ⚠️ Não calculado dinamicamente
VL_TOT_CRED_DESC 🔒 0.00 ⚠️
VL_RET_NC 🧮 sum(F600.VL_RET_PIS) se cod_inc_trib == '1' (NC), senão 0 Retenções F600
VL_RET_CUM 🧮 sum(F600.VL_RET_PIS) se cod_inc_trib != '1' (CUM), senão 0 Retenções F600
Demais campos 🔒 0.00 ⚠️

⚠️ Nota importante: A apuração efetiva dos valores de PIS no M200 está zerada. O sistema gera a estrutura mas os valores de débito/crédito dependem do processamento pelo PVA.

M600 — Consolidação COFINS

Mesma lógica do M200, substituindo PIS por COFINS:

Campo Origem Regra
VL_RET_NC 🧮 sum(F600.VL_RET_COFINS) se NC
VL_RET_CUM 🧮 sum(F600.VL_RET_COFINS) se CUM

M100 / M500 — Créditos PIS / COFINS (detalhado)

⚠️ Status: Estes registros estão comentados na chamada principal (gerar_sped). A lógica existe mas não é executada por padrão.

Campo Origem Regra
COD_CRED 🔒 '101' ⚠️ TODO — Tabela 4.3.6
IND_CRED_ORI 📄 TIPO_NF[move_type]
VL_BC_PIS 📋 line.l10n_br_pis_base
VL_CRED 🧮 base × aliquota Calculado

M610 — Contribuição COFINS Detalhada

Campo Valor Status
COD_CONT '01' ⚠️ TODO
VL_REC_BRT / VL_BC_CONT 0.00 ⚠️ TODO

Dependências de Configuração

Configuração Onde Efeito
l10n_br_cod_inc_trib 🏢 Empresa → Incidência Tributária Determina regime
l10n_br_incidencia_cumulativa 🏢 Empresa Filtra tipos de fatura
l10n_br_ind_apro_cred 🏢 Empresa Método de apropriação de crédito
l10n_br_pis_cst / l10n_br_cofins_cst 📋 Linha de fatura CST de PIS/COFINS
l10n_br_nat_bc_cred 📋 Linha / 📦 Produto Natureza da base de crédito
l10n_br_indicador ⚙️ Condição de pagamento Indicador de pagamento (A100)
l10n_br_orgao_publico 👤 Parceiro Tipo de retenção (F600)

Diagnósticos Comuns

Sintoma Causa Provável Solução
Bloco A vazio l10n_br_tipo_documento != 'NFS'/'NFSE'/'NDS' Verificar tipo do documento
Bloco F vazio Sem documentos ND/NDS/FAT no período Verificar tipo do documento
F600 vazio Sem retenções PIS/COFINS ou sem pagamentos conciliados Verificar retenções e pagamentos
M200 todo zerado Comportamento normal — apuração via PVA Exportar e processar no PVA
Entradas não aparecem (Lucro Presumido) Regra fiscal: só entradas de devolução Correto para lucro presumido
NAT_BC_CRED vazio Campo não preenchido na linha nem no produto Preencher l10n_br_nat_bc_cred

Referências