Espelho do routines: NestJS 10 + Fastify + TypeORM, modulos catalog (override por UF), document (versoes + storage GCS), compliance (mesmo score do painel), alerts (regua de vencimento, envio e v1.2) e analise plugavel (KeywordAnalyzer -> OCR/LLM). 38 testes. Deploy aguarda banco 'documents' e secrets no hml2 — por isso o [skip ci] no bootstrap. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .gitea/workflows | ||
| k8s/hml | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| AI-HISTORY.md | ||
| CHANGELOG.md | ||
| cloudbuild.yaml | ||
| Dockerfile | ||
| jest.config.js | ||
| nest-cli.json | ||
| package.json | ||
| README.md | ||
| tsconfig.build.json | ||
| tsconfig.json | ||
| yarn.lock | ||
documents
Serviço de documentos e licenças dos postos: catálogo legal (parametrizável por UF), documentos
com trilha de versões, resumo de conformidade, análise de upload e régua de alertas de vencimento.
É o backend do menu Documentos do painel (clubpetro-frontend, REACT_APP_DOCUMENTS_API=true).
Espelho do serviço routines — NestJS 10 + Fastify + TypeORM/PostgreSQL, exceções
mapeadas com prefixo DOC, upload em bucket GCS privado com URL assinada.
Endpoints
| Método | Rota | O que faz |
|---|---|---|
| GET | /catalog?uf=SP |
Catálogo legal com variação estadual aplicada |
| GET | /documents?programId&storeId |
Documentos da loja (status derivado na leitura) |
| POST | /documents (multipart) |
Cria obrigação ou registra renovação (versão nova, trilha preservada) |
| POST | /documents/analyze (multipart) |
Sugere tipo/datas do arquivo (v1: keywords; v1.1: OCR/LLM) |
| POST | /documents/:id/protocol |
Registra o protocolo de renovação no órgão (status → em renovação) |
| PATCH | /documents/:id/details |
Responsável e observações |
| GET | /compliance/summary?programId&storeId |
Score 0–100 ponderado por criticidade + totais |
| GET | /compliance/upcoming?days=90 |
Vencimentos na janela, ordenados |
| GET | /alerts/preview |
O que a régua (lead/30/15/7/1/vencido) enviaria hoje |
| GET | /health |
Probe do Kubernetes |
Regras de negócio centrais em src/modules/common/utils/status.util.ts (status) e
src/modules/compliance/compliance.service.ts (score) — as mesmas do painel, agora com o backend
como fonte da verdade. O detalhe jurídico que o modelo carrega: renovação protocolada no prazo
mantém o documento operante (na LO da CETESB, protocolo ≥120 dias antes prorroga a validade).
Rodar local
cp .env.example .env # preencher SECRET_TOKEN
yarn && yarn start:dev # migrations rodam no boot (TYPEORM_MIGRATIONS_RUN=true)
yarn test # 38 testes, cobertura mínima 65/73/73/73
Deploy (lab)
k8s/hml/ uma vez à mão; depois branch → PR → merge → cd.yml (Cloud Build). Pré-requisitos
novos no ambiente: database documents na instância clubpetro-homologation e bucket privado
corepetro_store_documents.