O SPED (Sistema Público de Escrituração Digital) é o coração da conformidade fiscal das empresas brasileiras. Gerar, validar e transmitir os arquivos SPED manualmente é trabalhoso e sujeito a erros. Com Python, é possível automatizar grande parte desse processo. Este guia mostra como.
O que é o SPED e quais obrigações ele cobre
O SPED é um projeto do governo federal que unifica a escrituração fiscal e contábil das empresas num formato digital padronizado. As principais obrigações:
- SPED Contábil (ECD): Escrituração Contábil Digital — substitui os livros contábeis físicos
- EFD-ICMS/IPI: Escrituração Fiscal Digital para ICMS e IPI — para empresas do Lucro Real/Presumido com operações estaduais
- EFD-Contribuições: apuração de PIS e COFINS
- ECF: Escrituração Contábil Fiscal — apuração do IRPJ e CSLL
- EFD-Reinf + e-Social: obrigações trabalhistas e previdenciárias
Formato dos arquivos SPED
Os arquivos SPED são textos simples com registros separados pelo caractere “|” (pipe). Exemplo de registro da EFD-ICMS:
|0000|020|0|01012026|30062026|EMPRESA TESTE LTDA|12.345.678/0001-00|SP|...| |0150|001|FORNECEDOR XYZ LTDA|03|98765432000100|...| |C100|1|0|001|55|00|001234|10012026|...|10000.00|...| |C170|001|PRODUTO A|50|UN|200.00|...|
Cada registro começa com o código do bloco (0, A, B, C, D, E, G, H, I, K…) e depois o código do registro.
Lendo e analisando arquivos SPED com Python
import pandas as pd
def ler_sped(caminho, registro):
"""Extrai todos os registros de um tipo específico do SPED."""
linhas = []
with open(caminho, 'r', encoding='latin-1') as f:
for linha in f:
campos = linha.strip().split('|')
if len(campos) > 1 and campos[1] == registro:
linhas.append(campos)
return linhas
# Extrai todos os registros C100 (documentos fiscais de entradas e saídas)
registros_c100 = ler_sped('EFD_ICMS_2026_01.txt', 'C100')
# Colunas do registro C100 (simplificado)
colunas_c100 = [
'pipe1', 'reg', 'ind_oper', 'ind_emit', 'cod_part',
'cod_mod', 'cod_sit', 'serie', 'num_doc', 'chv_nfe',
'dt_doc', 'dt_e_s', 'vl_doc', 'ind_pgto', 'vl_desc',
'vl_abat_nt', 'vl_merc', 'ind_frt', 'vl_frt', 'vl_seg',
'vl_out_da', 'vl_bc_icms', 'vl_icms', 'vl_bc_icms_st',
'vl_icms_st', 'vl_ipi', 'vl_pis', 'vl_cofins',
'vl_pio', 'cod_inf', 'vl_tot_det', 'pipe2'
]
df = pd.DataFrame(registros_c100, columns=colunas_c100[:len(registros_c100[0])] if registros_c100 else [])
# Converte valores numéricos
if not df.empty:
df['vl_doc'] = pd.to_numeric(df['vl_doc'].str.replace(',', '.'), errors='coerce')
df['vl_icms'] = pd.to_numeric(df['vl_icms'].str.replace(',', '.'), errors='coerce')
# Separa entradas e saídas
entradas = df[df['ind_oper'] == '0']
saidas = df[df['ind_oper'] == '1']
print(f"Documentos de entrada: {len(entradas)} | Total: R$ {entradas['vl_doc'].sum():,.2f}")
print(f"Documentos de saída: {len(saidas)} | Total: R$ {saidas['vl_doc'].sum():,.2f}")
print(f"ICMS total a recolher: R$ {saidas['vl_icms'].sum() - entradas['vl_icms'].sum():,.2f}")
Validando arquivos SPED com Python
Antes de transmitir, todo arquivo SPED deve ser validado no PVA (Programa Validador e Assinador) da Receita Federal. Mas você pode fazer validações básicas por script antes:
def validar_sped_basico(caminho):
"""Validações básicas antes de passar pelo PVA."""
erros = []
with open(caminho, 'r', encoding='latin-1') as f:
linhas = f.readlines()
# Verifica registro de abertura
if not linhas[0].startswith('|0000|'):
erros.append("Arquivo não começa com registro 0000")
# Verifica registro de encerramento
if not linhas[-1].startswith('|9999|'):
erros.append("Arquivo não termina com registro 9999")
# Verifica se todos os registros têm pipe inicial e final
for i, linha in enumerate(linhas, 1):
linha = linha.strip()
if not (linha.startswith('|') and linha.endswith('|')):
erros.append(f"Linha {i}: formato inválido (sem pipes inicial/final)")
if erros:
print("Erros encontrados:")
for e in erros:
print(f" - {e}")
else:
print(f"Arquivo válido: {len(linhas)} registros")
return len(erros) == 0
validar_sped_basico('EFD_ICMS_2026_01.txt')
Automação completa: do ERP ao arquivo SPED
Um pipeline completo de automação:
- Exporta os dados do ERP via API ou exportação em CSV/Excel
- Script Python transforma os dados no formato SPED correspondente
- Validação automática dos campos obrigatórios e regras de negócio
- Geração do arquivo .txt no layout SPED
- Assinatura via PVA (ainda manual) ou via API de terceiros
- Transmissão pela plataforma e-CAC da Receita Federal
Bibliotecas especializadas
- python-sped: biblioteca open source para leitura e escrita de arquivos SPED EFD
- sped-python: outra biblioteca com suporte a múltiplos leiautes
- nfephp-org/sped-efd: em PHP, a mais completa para EFD-ICMS/IPI
A automação fiscal com Python não substitui o conhecimento tributário — ela amplifica a capacidade do profissional que entende as regras de negócio. O ideal é a parceria entre contador (que conhece as regras) e desenvolvedor (que implementa a automação).
Tem um projeto em mente?
Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.