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 buscacompany_id + company_id.child_idse 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/COFINSImpacto do regime: - Cumulativo (
l10n_br_incidencia_cumulativa == '2'el10n_br_cod_inc_trib == '1'): Filtra apenasout_invoiceeout_refund(sem entradas) - Não-cumulativo: Incluiout_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) - Sefator <= 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¶
- Índice SPED
- Visão Geral
- EFD ICMS/IPI — Compartilha mesmos blocos 0/C
- DCTF — Recebe PIS/COFINS