Skip to content

About

Lê o relatório de fiscalização em PDF, gera as evidências de cada não conformidade e monta o e-mail de envio.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

DIN Automator

Ferramenta que lê o relatório de não conformidades exportado do sistema de fiscalização, recorta as fotos de cada NC, monta o PDF de evidência no padrão exigido pelo órgão regulador e prepara o e-mail de envio agrupado por disciplina.

Python Flask Licença Status

Problema

O relatório de não conformidades sai do sistema de fiscalização como um PDF único com centenas de blocos, cada um com suas fotos de antes e depois misturadas na página. Cada NC precisava virar um PDF separado, no layout do órgão regulador, nomeado segundo a disciplina, e depois ser enviada por e-mail ao executor certo. Feito à mão, era um dia inteiro de recortar imagem, digitar km e sentido e arrastar anexo, com erro de digitação chegando ao documento oficial.

Solução

  • Lê o PDF exportado e separa os blocos de NC, mesmo quando uma NC ocupa várias páginas, do cabeçalho até a linha de encerramento
  • Extrai rodovia, km inicial e final, sentido, data, classificação e tipo, e sugere o nome do arquivo no padrão usado pela equipe
  • Recupera todas as fotos do bloco com o rótulo original e sugere qual é o antes e qual é o depois pela posição na página
  • Permite corrigir o pareamento na tela antes de gerar, porque laudo torto existe e o automático sozinho erraria em silêncio
  • Gera o PDF de evidência com os pares empilhados, três por página, cabeçalho completo repetido em toda página
  • Agrupa os PDFs por disciplina através de palavras-chave configuráveis e monta um e-mail por disciplina no Outlook, com os anexos e a assinatura do usuário
  • Busca dados e fotos direto na API do sistema interno de fiscalização, quando a credencial está configurada, evitando a exportação manual
  • Tem uma versão online, em HTML e Supabase, para quem precisa acompanhar sem instalar nada

Demonstração

Painel de NCs Pareamento

E-mail no Outlook

As três imagens acima são placeholders. A lista dos prints que faltam está no fim deste arquivo.

Stack e decisões técnicas

Escolha Por que
Flask local mais navegador, no lugar da janela embutida A primeira versão usava pywebview, mas o WebView2 nem sempre existia na máquina corporativa e o empacotamento era frágil. O navegador do usuário já está lá e depurar nele é muito mais rápido
PyMuPDF para ler e reportlab para gerar Um extrai texto com coordenada e a imagem embutida, o outro dá controle de milímetro sobre o layout que o órgão exige
Pareamento manual antes de gerar O automático acerta a maioria, mas laudo com página fora de ordem existe. Como o PDF vira documento oficial, o erro silencioso custa mais caro que o clique a mais
Classificação por palavra-chave em JSON A lista de disciplinas muda por contrato. Em arquivo de configuração, muda sem tocar no código
Outlook via COM, com Display() antes do corpo Abrir o rascunho primeiro faz o Outlook carregar a assinatura do usuário, e o corpo é injetado acima dela. Ninguém envia sem revisar
Destinatários só em arquivo de configuração O core/email_config.json está no .gitignore. Nenhum endereço de pessoa ou empresa fica no código
Credenciais do sistema interno fora do código core/kweb_config.json está no .gitignore, com kweb_config.example.json versionado. O endereço do sistema também vem de lá ou de KWEB_BASE_URL
Sessão da API reaproveitada por 25 minutos A sessão do sistema expira em 30. Reautenticar a cada chamada derrubaria o ritmo de um lote inteiro
Marca em arquivo separado Nome, lote e logotipo saem de core/concessionarias.json. Trocar de contrato não é mexer em código

Resultados

Indicador Número
NCs processadas por lote [PREENCHER]
PDFs de evidência gerados [PREENCHER]
Tempo de tratamento de um lote, antes [PREENCHER]
Tempo de tratamento de um lote, depois [PREENCHER]
E-mails montados por ciclo [PREENCHER]

Como rodar

  1. pip install -r requirements.txt
  2. Copie core/kweb_config.example.json para core/kweb_config.json se for usar a integração com o sistema interno. Para o fluxo offline, não é necessário.
  3. python app.py. O navegador abre em http://localhost:5055. Importe dados-exemplo/KCOR-exemplo-ficticio.pdf para ver o fluxo completo.

Estrutura do projeto

din-automator/
├── app.py                  launcher: sobe o Flask e abre o navegador
├── server_v2.py            API atual (extração, pareamento, geração, e-mail)
├── server.py               API da versão anterior, ainda usada por web/index.html
├── build.spec              empacotamento com PyInstaller
├── core/
│   ├── gerador_v2.py       extrai as NCs do PDF e gera o relatório com pares
│   ├── gerador.py          layout do cabeçalho, mapa de tipos e versão 1
│   ├── kweb_client.py      integração com a API do sistema interno
│   ├── api_fotos.py        busca das fotos por NC
│   ├── parser.py           classificação por disciplina
│   ├── email_builder.py    corpo do e-mail por disciplina
│   ├── outlook_sender.py   cria o rascunho no Outlook via COM
│   └── *.example.json      modelos de configuração
├── config/                 regras de classificação por palavra-chave
├── web/                    interface do aplicativo local
├── online/                 versão web com Supabase
├── saida/                  destino dos PDFs gerados (vazia no repositório)
├── dados-exemplo/          KCOR fictício e um PDF de saída de exemplo
└── docs/
    ├── img/                capturas de tela
    └── historico/          a versão pywebview que veio antes

Prints que faltam

  1. docs/img/01-painel-ncs.png: painel com as NCs do KCOR de exemplo já extraídas, mostrando o status de cada uma.
  2. docs/img/02-pareamento-fotos.png: a tela de pareamento, com as fotos sugeridas como antes e depois.
  3. docs/img/03-email-outlook.png: o rascunho montado no Outlook, agrupado por disciplina. Cubra os destinatários antes de salvar o print.

Desenvolvido por Jonathan Vaz linkedin.com/in/jonathan-vaz-260764b3 · jvaz.eng.dev@gmail.com

About

Lê o relatório de fiscalização em PDF, gera as evidências de cada não conformidade e monta o e-mail de envio.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages