This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
Todo mês, postos de combustível e sistemas de automação comercial no Brasil precisam atualizar a transparência de tributos (Lei 12.741/2012): quanto de ICMS, PIS/COFINS e CIDE está embutido no litro de cada combustível, em cada estado. A fonte é o PDF "Carga tributária estadual" da Fecombustíveis — e o trabalho era abrir o PDF, copiar valor por valor para 27 UFs e 6 combustíveis e montar o XML TransparenciaTributos à mão.
Construí um site estático (GitHub Pages) que faz isso sozinho:
- Busca do PDF – um workflow do GitHub Actions procura o PDF novo a cada 12 horas e salva no repositório.
- Leitura com IA – o PDF é enviado a um modelo de IA, que devolve os valores por combustível e por UF.
- Comparação – os valores são comparados com o XML do mês anterior; o que mudou fica em amarelo, e contas que não fecham (PMPF × alíquota ≠ ICMS) ficam com borda vermelha.
- Geração – para cada combustível que mudou, a vigência antiga é encerrada no dia anterior e um bloco novo é criado. Dá para baixar o XML e uma planilha Excel.
Também há uma página pública, tributos.html, com as tabelas por estado (Gasolina C, Gasolina Premium, Diesel S-500, Diesel S-10, Etanol hidratado e GNV) que se atualiza sozinha quando entra o XML do mês.
E o "Touch Grass"? O objetivo aqui é tirar uma pessoa de uma tarefa repetitiva de tela: o que levava horas de digitação e conferência todo mês virou alguns minutos de revisão. A tela passa a ser a parte mais curta do processo — o resto do dia fica livre.
Para quem é: desenvolvedores de sistemas de PDV/NF-e para postos, contadores e donos de posto que precisam manter a carga tributária correta no cupom.
Demo
- Gerador do XML: https://imextecnologia.github.io/tributacao/
- Tributos por estado: https://imextecnologia.github.io/tributacao/tributos.html
Code
imextecnologia
/
tributacao
tributacao
Transparência de Tributos – Combustíveis
Site estático (GitHub Pages) que gera todo mês o XML TransparenciaTributos a partir do PDF
"Carga tributária estadual" da Fecombustíveis.
Site: https://imextecnologia.github.io/tributacao/ · Tributos por estado: https://imextecnologia.github.io/tributacao/tributos.html
Como funciona
-
Busca do PDF – a cada 12 horas um workflow procura o PDF novo na página da Fecombustíveis e salva em
pdf/. - Leitura com IA – o site envia o PDF ao Google Gemini, que devolve os valores por combustível e UF.
-
Comparação – os valores são comparados com o XML do mês anterior (em
xml/) e o que mudou fica destacado. - Geração – para cada combustível que mudou, o bloco antigo termina no dia anterior (ex.: 30/09/2026) e é criado um bloco novo (ex.: 01/10/2026 até 01/01/2050). Combustíveis sem mudança ficam como estão Também é possível baixar uma planilha Excel com os valores.
Tudo roda no navegador; não há servidor próprio.
Uso
…How I Built It
- 100% no navegador, sem servidor próprio: HTML + JavaScript puro, publicado no GitHub Pages.
-
IA para ler o PDF: o site envia o PDF e recebe JSON estruturado por UF/combustível. Hoje uso a API do Google com fallback entre modelos (
gemini-flash-latest→gemini-flash-lite-latest→gemini-2.5-flash→gemini-2.5-flash-lite). - Validação determinística depois da IA: a IA não tem a palavra final. O site recalcula PMPF × alíquota e PMPF × 9,25% (PIS/COFINS no GNV) e marca qualquer divergência para revisão humana. Os valores podem ser corrigidos direto na tabela.
-
Economia de chamadas: se o XML do mês já existe em
xml/, ele é carregado direto; o resultado da IA fica salvo no navegador, então recarregar a página não chama a IA de novo. -
GitHub Actions:
-
buscar-pdf.ymlroda às 00:00 e 12:00 UTC, lê a página da Fecombustíveis, baixa o PDF novo, atualiza opainel.jsoncom o quadro oficial de tributação (%) e publica o site; -
pages.ymlgera a lista de arquivos, embute CSS/tema/logo e publica a cada push namain.
-
- Mapeamento por código ANP (ex.: Gasolina C = 320102001/320102002; Diesel S-10 = 820101033/820101034). Produtos não mapeados são mantidos no XML sem alteração.
- Plano B sem IA: "Preencher a partir do XML (edição manual)" para quando a API estiver indisponível.
Why Does Open Innovation Matter?
O projeto inteiro é aberto e não depende de nenhum servidor meu: o código está no GitHub, o site é estático e roda no navegador, os dados de entrada são públicos (PDF da Fecombustíveis) e o histórico de PDFs e XMLs fica versionado no próprio repositório — qualquer posto ou software house pode fazer um fork e usar.
Sendo transparente: a extração hoje usa um modelo fechado via API. Como toda a lógica de prompt, validação e geração do XML é independente do modelo (o site já troca de modelo automaticamente), o próximo passo é trocar por um modelo open-weight (por exemplo Gemma) — o que permitiria rodar a extração localmente, sem enviar nada a terceiros e sem custo nem limite de cota. A validação determinística (as contas que precisam fechar) é justamente o que torna seguro trocar de modelo: se um modelo menor errar, o erro aparece em vermelho na tela.
Prize Categories
- Best Use of GitHub Copilot — o projeto é automatizado com GitHub Actions (busca do PDF a cada 12h, atualização do quadro de tributação e publicação no Pages).
Top comments (0)