Recibo duplicado ou CNPJ trocado no reembolso? O motor pega antes de você aprovar.
A pilha de recibos do mês esconde duplicata, CNPJ trocado e comprovante sem nota fiscal, coisas que a conferência a olho deixa passar. O Validador lê XML, PDF ou foto, roda uma bateria de checks determinísticos e devolve uma planilha colorida por bandeira: verde para revisar rápido, âmbar para checar com calma, vermelho para resolver antes de aprovar.
OK recibo-01-taxi-valido.xml: verde
!! recibo-02-hospedagem-cnpj-invalido.xml: vermelho [CNPJ_INVALIDO]
?? recibo-03-comprovante-app-sem-nota.pdf: ambar [NAO_VERIFICAVEL] saída real do motor, num arquivo de teste do repositório.
61
testes automatizados no motor
4
dependências para instalar (openpyxl, pydantic, defusedxml, pdfplumber)
3
formatos de entrada: XML, PDF e foto
A pilha de recibos do mês é xml de nota fiscal, PDF de comprovante e foto de recibo de aplicativo, tudo misturado. Ninguém confere duplicata, dígito verificador de CNPJ ou chave de acesso um recibo por vez antes de aprovar o pagamento.
E a brecha clássica mora exatamente aí: o mesmo recibo reenviado num mês seguinte, ou um CNPJ digitado errado que ninguém valida por cálculo.
Como funciona
- 1 Lê. Lê cada recibo do lote (XML, PDF ou foto), extrai a chave de acesso ou o QR quando existe, e tira o hash do arquivo.
- 2 Deduplica. Deduplica por assinatura fiscal (mesma chave, ou mesmo valor mais data mais CNPJ) e por hash de arquivo, contra o próprio lote e contra o histórico de lotes já pagos, quando você fornece um.
- 3 Pinta. Roda a bateria de checks determinísticos e devolve o status de cada recibo, verde, âmbar ou vermelho, com o motivo de cada bandeira.
As duas formas de resolver isso
Recibo duplicado entre lotes
- Conferir a pilha na mão
- passa batido até alguém notar
- Validador de Reembolso (nós)
- vira bandeira DUPLICATA, na hora
CNPJ ou chave de acesso
- Conferir a pilha na mão
- ninguém confere o dígito verificador
- Validador de Reembolso (nós)
- confere por cálculo e pinta vermelho se não fechar
Comprovante sem nota fiscal
- Conferir a pilha na mão
- aprova ou rejeita no olho
- Validador de Reembolso (nós)
- vira âmbar, marcado para você decidir
Custo
- Conferir a pilha na mão
- o tempo de quem confere um a um
- Validador de Reembolso (nós)
- grátis e aberto
O dado é seu
O recibo fica com você.
No terminal, no Claude Code ou no Cowork, o motor lê os recibos no seu computador e o Claude só vê o resumo que ele imprime (quantos verdes, âmbar e vermelhos), nunca o recibo individual nem o conteúdo do arquivo de detalhe. Anexar o recibo numa conversa comum do Claude, na web ou no app, é outra coisa: aí o arquivo sobe para a nuvem da Anthropic.
O que vem
- O motor em Python, com os módulos da bateria de checks (chave de acesso, CNPJ, QR, duplicata e o resto).
- O exemplo com recibos fictícios, um de cada resultado (verde, âmbar, vermelho), com o gabarito esperado.
- O SKILL.md, para o Claude chamar o motor quando alguém manda a pilha de recibos.
- Os testes, com os recibos sintéticos que eles usam.
A prova que eu tenho hoje
A prova hoje é de bancada: o motor foi validado fora do monorepo contra o exemplo de recibos fictícios, um verde, um âmbar e um vermelho, e bateu certinho com o gabarito. Ainda não tenho relato de uso com recibos reais de reembolso de outra empresa.
Onde isso ainda não chega.
- Não decide o pagamento: o motor sinaliza, quem aprova é o controller, humano no circuito.
- Não prova autorização na SEFAZ: valida só o que dá para validar por cálculo (chave de acesso, CNPJ, QR, duplicata), não consulta o fisco.
- Não detecta recibo feito por inteligência artificial: isso não é um resultado do produto.
- Recibo sem elemento fiscal (foto de recibo simples, print de app, PDF escaneado sem texto nativo) vira âmbar, nunca verde: é degradação segura, não bug.
É para você?
É para você se
- Quem aprova reembolso de funcionário e recebe a pilha de recibos do mês inteira de uma vez.
- Quem já foi pego de surpresa por um recibo duplicado ou um CNPJ digitado errado.
Não é para você se
- Quem precisa de aprovação automática, sem revisão humana no meio do caminho.
- Quem quer confirmar o recibo direto na SEFAZ, não só por cálculo local.
Antes de instalar: o que você precisa
- Python 3.12 ou mais no computador.
- Para usar como skill: Claude Code, ou o Cowork do Claude Desktop (plano pago). Direto no terminal funciona sem Claude nenhum.
- Os recibos do mês, em XML, PDF ou foto, numa pasta só.
Grátis e aberta quando sair da fila.
Validador de Reembolso está na fila de abertura e vai sair grátis, com o código aberto. Avisamos você quando sair.
- O motor em Python, com os módulos da bateria de checks (chave de acesso, CNPJ, QR, duplicata e o resto).
- O exemplo com recibos fictícios, um de cada resultado (verde, âmbar, vermelho), com o gabarito esperado.
- O SKILL.md, para o Claude chamar o motor quando alguém manda a pilha de recibos.
- Os testes, com os recibos sintéticos que eles usam.
Recebe no seu e-mail
Sem spam. Descadastro em 1 clique.
Perguntas frequentes
O recibo sai da minha máquina?
No terminal, no Claude Code ou no Cowork, não: o motor lê o arquivo aí e o Claude só vê o resumo que ele imprime. Anexar o recibo numa conversa comum do Claude, na web ou no app, é diferente: o arquivo sobe para a nuvem da Anthropic.
Ele decide se o reembolso pode ser pago?
Não. Ele sinaliza as bandeiras (duplicata, CNPJ inválido, chave incoerente, comprovante sem elemento fiscal) e quem aprova o pagamento é a pessoa.
Detecta recibo feito por inteligência artificial?
Não. Isso não é um resultado deste produto: o metadado de editor de imagem entra só como um sinal fraco entre vários.
E um comprovante sem nota fiscal, tipo corrida de aplicativo?
Vira âmbar: não é fraude, é "não dá para verificar por cálculo". A pessoa decide com o bom senso de sempre.