Sistema completo para coleta automatizada de documentos fiscais eletrônicos (NF-e e NFC-e), preparado para execução em ambientes Windows ou Linux.
- Backend: Python + SQLAlchemy + SQLite
- Painel: Streamlit rodando na porta 8501
- Coletas:
- NF-e via WebService
NFeDistribuicaoDFeutilizando certificado A1 (arquivo.pfx) - NFC-e via raspagem pública no portal da SEFAZ-GO
- NF-e via WebService
- Estrutura de pastas:
app/: código backend e serviçosweb/: painel Streamlitcerts/: certificados digitais A1 (CNPJ.pfx)data/xmls: armazenamento dos XMLs coletadosdata/html: armazenamento dos HTMLs da NFC-elogs/: registros de execução
⚠️ Importante: As chamadas reais para os serviços da SEFAZ estão comentadas. Para ativá-las basta remover os comentários indicados nos módulosapp/collectors/nfe_dfe.pyeapp/collectors/nfce_html.py.
- Python 3.11+ (com Python 3.13 no Windows utilize o
lxml 5.3.xincluído norequirements.txt, que já possui wheels oficiais) - Certificados A1 no formato
.pfxde cada empresa cadastrada - Dependências listadas em
requirements.txt
- Copie
.env.examplepara.enve ajuste as variáveis conforme necessário. - Instale as dependências utilizando um ambiente virtual:
python -m venv .venv source .venv/bin/activate # Linux/macOS .\.venv\Scripts\Activate.ps1 # Windows (PowerShell) python -m pip install --upgrade pip python -m pip install -r requirements.txt
💡 Windows 11: Com Python 3.13 certifique-se de atualizar o
pip(python -m pip install --upgrade pip) para baixar o wheel oficial dolxml 5.3.x. Caso utilize versões mais antigas dolxml, será necessário instalar o Microsoft C++ Build Tools. - Execute o painel Streamlit:
python -m streamlit run web/app.py --server.port 8501
- Para alterar a porta, defina a variável de ambiente antes de executar o comando e use a sintaxe correta do seu shell:
- PowerShell:
$env:PORTA=8502 ; python -m streamlit run web/app.py --server.port $env:PORTA - Prompt (cmd.exe):
set PORTA=8502 && python -m streamlit run web/app.py --server.port %PORTA%
- PowerShell:
- Ao informar a porta diretamente, utilize apenas o número (
8501) sem o prefixo$.
- Para alterar a porta, defina a variável de ambiente antes de executar o comando e use a sintaxe correta do seu shell:
- Acesse
http://localhost:8501(ou a porta configurada) e faça login com as credenciais definidas nas variáveisWEB_USEReWEB_PASS.
install.bat: instalação padrão (cria/atualiza.venve dependências).force_install.bat: reinstalação completa, removendo e recriando o ambiente virtual.start.bat: inicialização do painel Streamlit utilizando o ambiente configurado.verify.bat: verificação rápida do ambiente (versão do Python,pip checke compilação das pastasapp/eweb/).
- Utilize o painel para cadastrar cada empresa informando Nome, CNPJ, UF e Senha do certificado.
- Salve o arquivo
.pfxcorrespondente na pastacerts/com o nomeCNPJ.pfx(somente números).
- Selecione a empresa desejada no painel.
- Informe opcionalmente as chaves de NFC-e (uma por linha) para raspagem pública.
- Clique em 🔄 Coletar Agora para executar as rotinas de coleta.
- Os documentos são salvos nas pastas
data/xmls/<CNPJ>/edata/html/<CNPJ>/e registrados no banco SQLite.
O script install.sh configura o ambiente em servidores Linux (Ubuntu) criando um serviço systemd para o painel Streamlit. Revise o arquivo antes de executar para ajustar caminhos ou usuário do serviço.
O arquivo nginx.conf contém um exemplo de configuração para expor o painel com HTTPS usando um certificado gerenciado pelo Let's Encrypt no domínio fiscal.goianiacontabil.com.
update.sh: atualiza o código via Git e reinicia o serviço.uninstall.sh: remove o serviço systemd e opcionalmente o ambiente virtual.
- NF-e: Remova os comentários na função
coletar_nfe_distribuicaopara habilitar o uso dorequests_pkcs12/zeepe configure o endpoint apropriado da SEFAZ. - NFC-e: Habilite a requisição HTTP no módulo
coletar_nfce_publicaajustando a URL da consulta pública.
Certifique-se de que os certificados e permissões estão válidos e que a rede do servidor possui acesso aos domínios da SEFAZ.