Skip to content

z9sb/SEFAZ-ES-ST

Repository files navigation

SEFAZ ES ST

Ferramenta para calcular o ICMS-ST (substituição tributária) devido ao Espírito Santo a partir de XMLs de NF-e (modelo 55), com base na MVA ajustada da Portaria 16-R/2019 da SEFAZ ES. Gera um arquivo Excel por empresa destinatária e um Resumo.xlsx consolidado.

Instalação

python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt

Para extrair arquivos .rar, é necessário um extrator externo instalado no Windows (unrar ou WinRAR). Arquivos .zip funcionam nativamente. Sem o extrator de .rar, a ferramenta registra o erro no log e continua processando os demais arquivos.

Uso

O aplicativo agora é um app web local em Streamlit:

python run.py

Isso inicia o servidor Streamlit e abre o navegador. As abas:

  1. Processar — informe a pasta de XML e a pasta de saída, marque "Extrair .zip/.rar" e "Gerar resumo consolidado" conforme desejar e clique em Processar. A barra de progresso acompanha o processamento; ao final, a tela mostra a fonte da portaria usada (cache, site ou fallback) e as falhas por arquivo (se houver).
  2. Resultados — tabela-resumo (Empresa, CNPJ, Qtd. notas, Total ICMS-ST), gráfico de barras de ICMS-ST por empresa, drill-down por empresa e Exportar Excel.
  3. Histórico — lista de execuções anteriores (gravadas no banco), com opção de reabrir uma execução na tela e re-exportar o Excel sem reprocessar.

Extração de .rar requer o utilitário unrar/WinRAR instalado (os .zip usam a stdlib). As empresas monitoradas são lidas de config/empresas.csv.

Banco de dados

O histórico é persistido em SQLite (data/sefaz_st.db, criado em runtime e ignorado pelo Git). Cada execução grava o resumo, as empresas, as notas, os itens e as falhas.

Fonte da portaria (robustez)

A tabela MVA é resolvida na ordem cache → site → fallback embutido (data/portaria_fallback.html, snapshot validado). Se o site estiver fora do ar, o cálculo ainda roda usando o fallback, e a tela sinaliza claramente a fonte e a data usadas (o fallback pode estar desatualizado em relação ao site).

Nota sobre e-mail

A busca automática por e-mail (IMAP) não faz parte desta versão (planejada para uma fase futura); por ora a entrada de XML é manual pela aba Processar.

Configuração

Tudo é editável sem mexer no código, em config/:

  • config/config.toml — URL/cache da portaria, pastas padrão, CFOPs excluídos, opções.
  • config/empresas.csvCNPJ;Nome das empresas destinatárias monitoradas.
  • config/aliquotas_icms.csvUF;Aliquota interestadual.

Testes

pytest -v

Os testes de caracterização travam a lógica fiscal: a saída numérica é comparada com os valores "golden" capturados do código original.

Próximos passos (fora do escopo atual)

  • Busca de XML por e-mail (IMAP) — havia um email.py no projeto original, reservado para fase futura.
  • CLI e agendamento automático.

Correção de cálculo em relação à versão antiga

A versão anterior do programa subestimava o ICMS-ST devido a um problema na leitura da tabela MVA da portaria. O HTML da Portaria 16-R/2019 usa quebras de linha \r\r\n (CRLF duplo); o código antigo não normalizava essas quebras antes de passar o texto para o scraper, de modo que apenas ~35 das 368 entradas da tabela MVA eram encontradas. Como resultado, a maioria dos produtos sujeitos à substituição tributária era erroneamente tratada como não sujeita.

A versão nova normaliza os fins-de-linha antes do parser e recupera todas as 368 entradas da tabela MVA. Isso faz com que o cálculo abranja os produtos que realmente constam da portaria como sujeitos à ST — o que é o comportamento correto. Os totais calculados pela versão nova foram validados manualmente contra a portaria para todas as empresas do conjunto de testes.

Recomendação: antes de usar em produção, o contador responsável deve conferir uma amostra das notas calculadas com o novo programa para confirmar que os valores estão de acordo com a portaria vigente.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors