ECD — Bloco 0 (Abertura e Identificação)¶
Finalidade do Bloco¶
O Bloco 0 contém os dados de identificação da empresa, do período e de inscrições cadastrais. É obrigatoriamente o primeiro bloco serializado no arquivo SPED ECD. Ele informa à Receita Federal quem é o contribuinte, qual o período escriturado, onde está localizado e sob qual regime contábil a escrituração foi feita.
Registro 0000 — Abertura do Arquivo Digital e Identificação do Empresário¶
Finalidade¶
Identificação completa do contribuinte, período da escrituração e parâmetros gerais. Este registro é único por arquivo e é tratado de forma especial: ele é gravado diretamente no objeto _arq._registro_abertura (não via _blocos['0'].add()), porque o ArquivoDigital o serializa como a primeira linha absoluta do arquivo texto.
Quando é gerado¶
Sempre que o registro 0000 estiver habilitado em company.l10n_br_sped_ecd_registros.
Método e localização¶
- Método:
enviar_registro_0000()— linha 220 deaccount_sped_ecd.py - Classe do registro:
Registro0000emsped/ecd/registros.py(linha 11) - Destino:
_arq._registro_abertura(não no bloco — é o cabeçalho global)
Formatação especial¶
O CNPJ passa por _format_cnpj_cpf() que remove ., / e -.
def _format_cnpj_cpf(cnpj_cpf):
if cnpj_cpf:
return cnpj_cpf.replace("/","").replace("-","").replace(".","")
else:
return ""
Por exemplo,
12.345.678/0001-90vira12345678000190.
Campos do registro — detalhamento completo¶
| # | Campo SPED | Tipo | Valor no código | Origem | Significado legal | Configurável? | Como alterar |
|---|---|---|---|---|---|---|---|
| 1 | REG |
Fixo | 0000 |
CampoFixo | Identificador do registro | ❌ | — |
| 2 | LECD |
Fixo | LECD |
CampoFixo | Identificação do tipo de escrituração (Leiaute ECD) | ❌ | — |
| 3 | DT_INI |
Data | self.date_ini |
⚙️ Wizard | Data de início do período de escrituração. Formato interno: DDMMAAAA | ✅ | Campo "Data Inicial" no formulário |
| 4 | DT_FIN |
Data | self.date_fim |
⚙️ Wizard | Data de fim do período de escrituração | ✅ | Campo "Data Final" no formulário |
| 5 | NOME |
Alfanum. | company.name |
🏢 Empresa | Razão social do contribuinte tal como registrado no cadastro da empresa no Odoo | ✅ | Configurações → Empresa → Nome |
| 6 | CNPJ |
Alfanum. | company.l10n_br_cnpj |
🏢 Empresa | CNPJ sem formatação. Se o campo estiver vazio, gera string vazia — o PVA rejeitará | ✅ | Empresa → CNPJ |
| 7 | UF |
Alfanum. | company.state_id.code |
🏢 Empresa | Sigla do estado (ex: SP, RJ, MG) |
✅ | Empresa → Estado |
| 8 | IE |
Alfanum. | company.l10n_br_ie |
🏢 Empresa | Inscrição Estadual. Se a empresa for isenta, pode conter ISENTO |
✅ | Empresa → Inscrição Estadual |
| 9 | COD_MUN |
Alfanum. | company.l10n_br_municipio_id.codigo_ibge |
🏢 Empresa | Código IBGE do município (7 dígitos). Depende de o município ter sido cadastrado com código IBGE | ✅ | Empresa → Município → Código IBGE |
| 10 | IM |
Alfanum. | company.l10n_br_im or '' |
🏢 Empresa | Inscrição Municipal. Se vazio, gravo string vazia — o campo é opcional no leiaute SPED | ✅ | Empresa → Inscrição Municipal |
| 11 | IND_SIT_ESP |
Alfanum. | '' (vazio) |
🔒 Fixo | Indicador de situação especial. Valores possíveis: 0=abertura, 1=cisão, 2=fusão, 3=incorporação, 4=encerramento, 5=transformação. Vazio = sem situação especial |
❌ | Requer desenvolvimento |
| 12 | IND_SIT_INI_PER |
Alfanum. | '0' |
🔒 Fixo | Indicador de início do período. 0=abertura normal, 1=início de obrigatoriedade, 2=resultado de cisão/fusão/incorporação |
❌ | Requer desenvolvimento |
| 13 | IND_NIRE |
Alfanum. | '1' |
🔒 Fixo | Indicador de NIRE. 0=NIRE em ato societário registrado, 1=sem NIRE. O sistema grava '1' mesmo que l10n_br_nire esteja preenchido — ponto de atenção |
❌ | Requer desenvolvimento |
| 14 | IND_FIN_ESC |
Alfanum. | '0' |
🔒 Fixo | Finalidade da escrituração. 0=original, 1=substituta. O sistema sempre gera como original |
❌ | Requer desenvolvimento |
| 15 | COD_HASH_SUB |
Alfanum. | '' |
🔒 Fixo | Hash da escrituração substituída. Vazio porque IND_FIN_ESC = '0' (original) |
❌ | — |
| 16 | IND_GRANDE_PORTE |
Alfanum. | '0' |
🔒 Fixo | 0=empresa NÃO é de grande porte, 1=empresa de grande porte (Lei 11.638/2007). Sempre fixo como '0' |
❌ | Requer desenvolvimento |
| 17 | TIP_ECD |
Alfanum. | '0' |
🔒 Fixo | Tipo de ECD. 0=ECD de empresa não participante de SCP, 1=ECD de empresa participante de SCP como sócia ostensiva, 2=ECD de SCP |
❌ | Requer desenvolvimento |
| 18 | COD_SCP |
Alfanum. | '' |
🔒 Fixo | CNPJ da SCP. Vazio porque TIP_ECD = '0' |
❌ | — |
| 19 | IDENT_MF |
Alfanum. | 'N' |
🔒 Fixo | Identificação de moeda funcional. S=sim, N=não. Sempre 'N' |
❌ | Requer desenvolvimento |
| 20 | IND_ESC_CONS |
Alfanum. | 'N' |
🔒 Fixo | Indicador de escrituração consolidada. S=consolidada, N=individual. Sempre 'N' (individual) |
❌ | Requer desenvolvimento |
| 21 | IND_CENTRALIZADA |
Alfanum. | '0' |
🔒 Fixo | Indicador de centralização. 0=escrituração centralizada na matriz, 1=filial |
❌ | Requer desenvolvimento |
| 22 | IND_MUDANC_PC |
Alfanum. | '0' |
🔒 Fixo | Indicador de mudança de plano de contas. 0=sem mudança, 1=com mudança, 2=com mudança e extinção |
❌ | Requer desenvolvimento |
| 23 | COD_PLAN_REF |
Alfanum. | self.cod_plan_ref |
⚙️ Wizard | Código do plano de contas referencial da RFB (1 a 10) | ✅ | Aba Parâmetros → Plano Referencial |
Observações sobre campos fixos¶
Por que tantos campos fixos? O sistema atende ao cenário padrão de uma empresa no Lucro Presumido ou Real, com escrituração individual, centralizada na matriz, sem situação especial, sem SCP e sem moeda funcional. Cenários como cisão, fusão, incorporação, SCP, grande porte ou escrituração consolidada exigiriam desenvolvimento para tornar esses campos parametrizáveis.
Ponto de atenção — IND_NIRE: O campo é fixo como
'1'(sem NIRE), mesmo quandocompany.l10n_br_nireestá preenchido. Na prática, isso pode gerar inconsistência — se a empresa tem NIRE registrado, o valor deveria ser'0'.
Problemas comuns e diagnóstico¶
| Problema | Causa raiz | Verificação | Solução |
|---|---|---|---|
| CNPJ vazio no SPED | l10n_br_cnpj não preenchido |
Empresa → CNPJ | Preencher CNPJ |
| UF vazia | state_id não vinculado |
Empresa → Endereço → Estado | Vincular estado |
| COD_MUN vazio | Município sem codigo_ibge |
Empresa → Município → verificar se tem código IBGE | Cadastrar código IBGE no município |
| IE vazia | l10n_br_ie não preenchido |
Empresa → Inscrição Estadual | Preencher IE ou ISENTO |
| PVA rejeita COD_PLAN_REF | Valor incorreto para o regime | Verificar regime tributário real | Trocar para código correto na aba Parâmetros |
Referência técnica¶
- Arquivo:
account_sped_ecd.py, métodoenviar_registro_0000(), linhas 220–251 - Classe:
Registro0000emsped/ecd/registros.py, linhas 11–40
Registro 0001 — Abertura do Bloco 0¶
Finalidade¶
Indicador obrigatório de presença de dados no bloco. Se IND_DAD = '0', significa que o bloco contém dados. Se '1', o bloco está vazio.
Quando é gerado¶
Sempre que habilitado. Grava diretamente no _blocos['0'].registro_abertura — não cria um novo registro, mas preenche o objeto de abertura do bloco.
Campos¶
| # | Campo | Valor | Significado legal |
|---|---|---|---|
| 1 | REG |
0001 |
Identificador do registro |
| 2 | IND_DAD |
'0' |
🔒 Fixo — o bloco sempre contém dados. 0=com dados, 1=sem dados |
Referência técnica¶
enviar_registro_0001()— linha 253- Destino:
_arq._blocos['0'].registro_abertura.IND_DAD
Registro 0007 — Outras Inscrições Cadastrais (Inscrição Estadual)¶
Finalidade¶
Registro complementar para vincular a entidade à inscrição estadual. Pode haver múltiplos 0007 (um por estado onde a empresa tem IE), mas o sistema gera apenas um — o da UF principal da empresa.
Quando é gerado¶
Sempre que habilitado. Cria um novo registro via _blocos['0'].add().
Campos — detalhamento¶
| # | Campo SPED | Valor | Origem | Significado legal | Configurável? |
|---|---|---|---|---|---|
| 1 | REG |
0007 |
Fixo | Identificador | ❌ |
| 2 | COD_ENT_REF |
company.state_id.code |
🏢 Empresa | Sigla da UF da inscrição (ex: SP). Na tabela do SPED, corresponde ao órgão da entidade referenciada |
✅ Empresa → Estado |
| 3 | COD_INSCR |
company.l10n_br_ie |
🏢 Empresa | Número da inscrição estadual | ✅ Empresa → IE |
Limitações conhecidas¶
- Empresas com múltiplas inscrições estaduais (multi-UF) terão apenas a IE principal. Para gerar múltiplas, seria necessário desenvolvimento.
Referência técnica¶
enviar_registro_0007()— linha 260- Classe:
Registro0007emsped/ecd/registros.py, linha 53
Registro 0990 — Encerramento do Bloco 0¶
Finalidade¶
Registro obrigatório com a contagem total de linhas do Bloco 0. Inclui todos os registros 0001, 0007, 0990 e o próprio 0990.
Quando é gerado¶
Sempre que habilitado.
Cálculo da contagem¶
QTD_LIN_0 = len(_arq._blocos['0'].registros) + 1
# +1 porque o próprio registro 0990 conta como linha
Campos¶
| # | Campo | Valor | Significado |
|---|---|---|---|
| 1 | REG |
0990 |
Identificador |
| 2 | QTD_LIN_0 |
Calculado | Quantidade de registros no Bloco 0, incluindo o próprio 0990 |
Referência técnica¶
enviar_registro_0990()— linha 272- Destino:
_arq._blocos['0'].registro_encerramento.QTD_LIN_0
Registros Definidos na Biblioteca mas Não Implementados¶
| Registro | Classe Python | Finalidade legal | Status no código | Campos definidos |
|---|---|---|---|---|
| 0020 | Registro0020 |
Escrituração contábil descentralizada — identifica filiais que possuem escrituração própria | ❌ Nunca chamado no fluxo gerar_sped() |
IND_DEC, CNPJ, UF, IE, COD_MUN, IM, NIRE |
| 0150 | Registro0150 |
Tabela de cadastro de participantes — pessoas físicas ou jurídicas referenciadas nos lançamentos (ex: fornecedores, clientes) | ❌ Nunca chamado | COD_PART, NOME, COD_PAIS, CNPJ, CPF, NIT, UF, IE, IE_ST, COD_MUN, IM, SUFRAMA |
| 0180 | Registro0180 |
Identificação do relacionamento com o participante — tipo e período do vínculo | ❌ Nunca chamado | COD_REL, DT_INI_REL, DT_FIN_REL |
Consequência prática: O campo
COD_PARTno registro I250 é sempre gravado como vazio (''). Se futuramente for necessário vincular participantes aos lançamentos contábeis, será preciso implementar os registros 0150/0180.