Skip to content

🚀 [v0.4.0-beta.0] Rastreabilidade Total & SSoT Hardening#12

Merged
LAMP-LUCAS merged 16 commits into
mainfrom
develop
May 25, 2026
Merged

🚀 [v0.4.0-beta.0] Rastreabilidade Total & SSoT Hardening#12
LAMP-LUCAS merged 16 commits into
mainfrom
develop

Conversation

@LAMP-LUCAS
Copy link
Copy Markdown
Owner

🚀 [v0.4.0-beta.0] Rastreabilidade Total & SSoT Hardening

Este Pull Request unifica dois grandes ciclos de desenvolvimento do Toolkit AutoSINAPI: a implementação da Rastreabilidade de Dados (Audit Logging & UPSERT) e o Enriquecimento SSoT (Famílias, Mistura de Mão de Obra e Smart Discovery).

✨ O que há de novo?

1. Rastreabilidade & Confiabilidade (feat/traceability)

  • Audit Logs: Implementada a tabela sinapi_audit_log. Toda execução do pipeline agora gera um registro único (run_id), contendo a versão do SINAPI, quantidade de registros afetados e as tabelas atualizadas.
  • Colunas de Controle: As colunas created_at, updated_at, sinapi_versao e etl_run_id foram adicionadas nativamente a todas as tabelas do modelo de dados.
  • Políticas UPSERT Seguras: O carregamento do banco de dados agora suporta UPSERT nativo (Insert ou Update) com base em colunas de Primary Key definidas dinamicamente, eliminando duplicações em cargas parciais.
  • Resolução de Placeholders: O sistema agora detecta insumos e composições filhos que estão presentes nas composições "pai", mas ausentes no catálogo oficial, criando placeholders seguros (INSUMO_DESCONHECIDO_XXXX) para manter a integridade referencial.

2. Enriquecimento de Dados (feat/etl-evolution-ssot-hardening)

  • Tabelas de Inteligência: Inclusão nativa do processamento e persistência das planilhas de "Famílias" (insumos_familias, coeficientes_familia_mensal) e "Mão de Obra" (composicoes_mix_mao_de_obra).
  • Smart Discovery (Auto-Input): O Downloader e o PipelineETL agora conseguem localizar de forma inteligente arquivos ZIP do SINAPI que o usuário coloque manualmente na raiz da pasta downloads/, ignorando arquivos PDF irrelevantes.
  • Campos Adicionais: A tabela de custos agora extrai e consolida o percentual_mo (Percentual de Mão de Obra).

🛠️ Correções e Melhorias Internas (Chore/Fix)

  • Consolidação de Mocks: Suíte de testes refatorada para isolar dependências (banco de dados real vs Mocks), garantindo que pytest valide com precisão a estrutura sem quebrar por dependências locais. 100% de aprovação (35/35 testes).
  • Semântica: Correção de formatação de logs (ex: conversão estrita do Mês para Int, prevenindo ValueError).
  • Limpeza de Passivo: Remoção de arquivos mortos (test_migration.py) delegando as migrações para a stack da API.

⚠️ Notas de Migração para Consumidores (Breaking Changes / Actions Required)

  • Schema do Banco: Consumidores do banco de dados precisarão reconstruir ou migrar as tabelas se estiverem usando as versões antigas (pré v0.3.0), pois as Primary Keys das tabelas de custos e composições agora incluem a coluna de rastreabilidade para manutenções e versões.
  • Módulo Independente: O AutoSINAPI agora é focado exclusivamente no ETL. Autenticações, Gateways (Kong) e rotas (FastAPI) foram extraídos e devem ser consumidos via o repositório irmão autoSINAPI_API.

✅ Checklist de Validação

  • Testes Unitários e de Integração rodados localmente via Docker (pytest)
  • Cobertura de Testes: 100% Pass (35/35)
  • Verificação de Chaves/Secrets (Nenhuma credencial commitada)
  • Múltiplos ambientes testados

LAMP-LUCAS added 14 commits May 21, 2026 01:49
- database.py: UPSERT on append, audit logging, version/run_id propagation
- etl_pipeline.py: DELETE by period (not TRUNCATE), extract SINAPI version
- Remove embedded .git from AutoSINAPI/ (was preventing tracking)
- Update .gitignore to not ignore AutoSINAPI/ toolkit
New test files:
- test_migration.py: Validates Alembic 002 migration (traceability columns)
- test_traceability_db.py: UPSERT, audit log, version propagation
- test_traceability_etl.py: ETL traceability (DELETE by period, version extraction)
- test_traceability_api.py: API traceability (audit endpoint, schemas)
- test_sandbox_integration.py: E2E integration with mock SINAPI data

Updated test files:
- test_database.py: Added UPSERT behavior, traceability propagation tests
- test_pipeline.py: Added sinapi_versao extraction, DELETE by period tests
- test_file_input.py: (already existed, staged)

Features tested:
- Migration 002 creates traceability columns + audit log table
- _append_data() now does UPSERT (not just INSERT IGNORE)
- sinapi_versao and etl_run_id propagated through ETL
- DELETE by period replaces TRUNCATE for structure tables
- New /audit/{tipo}/{codigo} API endpoint
- TraceabilityMixin in Pydantic schemas
- Create api/sandbox_utils.py for sandbox mode (AUTOSINAPI_SANDBOX)
- Update config.py to support mode='sandbox' with sandbox_ table prefix
- Update database.py: always propagate sinapi_versao/etl_run_id
- Fix test_migration.py: correct assertions for Alembic 002 migration
- Fix test_database.py: use call.args[0] for TextClause content checks
- Fix test_pipeline.py: use _execute_phase_1_acquisition mock, accent namin
- Fix test_traceability_etl.py: same pattern fixes
- Fix test_traceability_api.py: use app.dependency_overrides for DB mock
- Skip integration tests requiring real PostgreSQL
- 50 total: 37 ETL + 13 API tests passing, 2 skipped
- etl_pipeline.py: Phase 0 checks config.DB_TABLE_INSUMOS (not hardcoded)
- config.py: add DB_TABLE_AUDIT_LOG for sandbox prefix support
- database.py: use config table names for audit log DDL and queries
- database.py: drop/create audit log with config table name
- Fix etl_pipeline.py: use config table names for Phase 0 check
- Fix database.py: use config DB_TABLE_AUDIT_LOG, add uuid import
- Fix database.py: change etl_run_id to VARCHAR(36) type
- Fix database.py: add DISTINCT ON dedup for UPSERT queries
- Fix etl_pipeline.py: add column existence checks in placeholder gen
- Fix etl_pipeline.py: revert structure tables to TRUNCATE (no data_referencia)
- Add run_sandbox.py for sandbox ETL execution
- Migration 002 applied to real DB
- Sandbox ETL populated 2025-07: 1,160,750 records
- Traceability fields verified: sinapi_versao, etl_run_id
…integrity

- Refactor Trends endpoint to support agrupar_por (classificacao, grupo, item) and codigos filter.
- Update UI to allow switching trend dimensions and individual item analysis.
- Fix Processor to correctly extract Grupo column from 'Analítico' Excel sheet.
- Harden ETL pipeline to protect classifications during placeholder merging.
- Ensure etl_run_id and sinapi_versao are propagated to all 10 DB tables.
- Standardize metadata with UPPER(TRIM()) in trend analysis.
- Update documentation in READMEs and history records.
@LAMP-LUCAS LAMP-LUCAS marked this pull request as ready for review May 25, 2026 04:13
@LAMP-LUCAS LAMP-LUCAS merged commit 0b00e3c into main May 25, 2026
6 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant