尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Ferramenta de auditoria de estoque a partir de arquivos SPED EFD ICMS/IPI e XML de NF-e. Reconstitui o inventário, monta o Kardex item a item, aponta divergências com trilha até a linha do arquivo de origem e produz papel de trabalho. Reconstitui o estoque em qualquer data. Percorre os movimentos em ordem cronológica desde um saldo de abertura congelado, aplicando custo médio ponderado móvel. Saídas baixam pelo custo vigente — nunca pelo valor da nota de venda, que é preço e não custo.檢視完整 README ↗
Ferramenta de auditoria de estoque a partir de arquivos SPED EFD ICMS/IPI e XML de NF-e. Reconstitui o inventário, monta o Kardex item a item, aponta divergências com trilha até a linha do arquivo de origem e produz papel de trabalho.
Reconstitui o estoque em qualquer data. Percorre os movimentos em ordem cronológica desde um saldo de abertura congelado, aplicando custo médio ponderado móvel. Saídas baixam pelo custo vigente — nunca pelo valor da nota de venda, que é preço e não custo.
Reconstrói um mês isolado, do zero. Todo item partindo de zero, só com as notas do período: entrou, saiu, saldo no fim. Serve quando não há inventário confiável para ancorar — ou quando ele existe e é justamente o que se quer conferir. Saldo negativo aí é esperado, não achado, e a tela diz isso.
Monta a ficha de cada item. Um registro por movimento, com documento, contraparte, CFOP, entrada, saída e saldo corrido. Responde de onde veio o saldo, quem levou a mercadoria e em que momento o saldo furou.
Confronta as fontes. O EFD é o que a empresa declarou; o XML é o documento que ela emitiu. O sistema concilia os dois por chave de acesso, item a item, e concilia também a mesma nota escriturada por duas filiais do grupo.
Levanta achados com ciclo de vida. Cada achado tem identidade estável, severidade, responsável, prazo, resposta do cliente e desfecho. Reexecutar as regras concilia com o que já existe: cria os novos, mantém os que persistem, marca como resolvidos os que sumiram. Nunca apaga.
Emite papel de trabalho. Sumário, achados com motivo e prova, lista dos arquivos-fonte com SHA-256, metodologia e limitações. Imprime em PDF e exporta em CSV.
Guarda uma auditoria por trabalho. Cada cliente, cada exercício, é um trabalho isolado: importações, movimentos, achados e histórico. Começar outra auditoria não custa apagar a anterior — e prova apagada é prova que nunca existiu, se o cliente contestar um achado seis meses depois.
| Tipo | Severidade | O que aponta |
|---|---|---|
valoracao | crítico | Item inventariado por custo distante do documentado por nota |
nao_escriturada | crítico | NF-e autorizada e ausente da escrituração |
transferencia_divergente | crítico | Mesma nota com totais diferentes nas duas filiais |
saldo_negativo | alto / médio | Saldo abaixo de zero na data da posição |
terceiros | alto | Mercadoria própria em poder de terceiro |
cfop_aberto | alto | CFOP sem efeito definido — bloqueia o movimento |
sem_documento | alto | Nota escriturada sem o XML correspondente |
item_pendente | médio | Código do fornecedor ainda sem correspondência |
cobertura_item | informativo | Movimento sem detalhe por item na escrituração |
ressalva | informativo | Limitação assumida pelo auditor |
Na dúvida, não inventa. CFOP não classificado bloqueia o movimento; item que não casou vai para uma fila de resolução. Um Kardex com furo visível é auditável; um com número adivinhado, não.
A prova é imutável e atribuível. Nada é apagado. Toda linha guarda o arquivo de origem, seu hash SHA-256 e a linha física de onde veio.
A materialidade é decisão do auditor. Os limiares vivem no banco, em três níveis, e constam do papel de trabalho. Falha estrutural nunca é descartada por trivialidade — só achado de natureza monetária.
Reprodutível. Migrações versionadas com detecção de alteração, versão do motor registrada em cada importação e varredura, testes golden sobre arquivos reais.
git clone https://github.com/paulinho121/spedauditoria
cd spedauditoria
pip install "psycopg[binary,pool]"
cp .env.example .env # preencha DATABASE_URL
python -m auditoria migrar
python -m auditoria config diagnóstico da configuração
python -m auditoria migrar aplica migrações pendentes
python -m auditoria status o que está no banco
python -m auditoria conferir <arquivos> valida sem gravar
python -m auditoria importar <arquivos> importa EFD ou NF-e (idempotente)
python -m auditoria congelar <data> define o saldo de abertura
python -m auditoria materialidade [p e t] mostra ou define os limiares
python -m auditoria varrer [data] executa as regras e concilia achados
python -m auditoria achados [filtro] lista os achados em aberto
python -m auditoria ressalvas limitações assumidas
python -m auditoria trabalhos lista as auditorias e qual está em uso
python -m auditoria trabalho novo <nome> abre uma auditoria vazia e passa a usá-la
python -m auditoria trabalho usar <id> troca a auditoria em uso
python -m auditoria trabalho excluir <id> apaga uma auditoria e os dados dela
Painel web:
python app/server.py
Seis telas em http://localhost:8777 — dashboard, estoque por data, mês
isolado, importação, achados e papel de trabalho. O manual de uso está em
MANUAL.md.
python -m tests.test_sped
Os testes golden guardam apenas contagens, totais e hashes — nunca os dados fiscais. Para regerar após uma mudança intencional no parser:
python -m tests.test_sped --gerar
auditoria/ pacote principal
config.py carrega o .env
db.py Postgres via psycopg, com fallback pela Management API
auth.py sessão contra o Supabase Auth
sped.py parser de EFD — funções puras, sem I/O de banco
nfe.py parser de NF-e — XML com namespace
carga.py importação idempotente de EFD
carga_nfe.py importação de NF-e e geração de movimento
migra.py aplicador de migrações com detecção de alteração
cli.py linha de comando
migrations/ SQL numerado, aplicado uma vez, hash conferido
app/ painel local (servidor stdlib + HTML/CSS/JS sem dependências)
api/ função serverless do Vercel
tests/ testes do parser e golden files
O painel publicado importa arquivos enviados pelo navegador: cada um é gravado numa única chamada ao banco, dentro de uma transação. Varrer uma pasta continua exigindo o servidor local, porque depende do disco do auditor.
.env nunca vai para o repositório.HttpOnly; o JavaScript da página nunca o vê.service_role só existe no servidor e nunca chega ao navegador.127.0.0.1.C170, e nenhuma saída o traz mesmo em
perfil A: a escrituração de saída usa o analítico C190. O Kardex de saída
depende do XML. A importação avisa a cobertura encontrada.