Qualidade e testes
A qualidade é aplicada em várias camadas, pois uma única validação no início não protege contra falhas de transformação, carga ou modelagem.
Camadas de proteção
| Ponto | Mecanismo |
|---|---|
| Producer | Pydantic, tipos, limites e padrões de conta |
| Kafka | Confirmação de entrega e producer idempotente |
| Silver | Schema Spark, validações acumuladas e saída de inválidos |
| Streaming | Watermark, deduplicação e checkpoints separados |
| PostgreSQL | PKs, FKs, CHECK, staging e transação |
| Loader | Manifesto de arquivos, reconciliação e lote mínimo esperado |
| dbt | 41 testes de domínio, unicidade, relacionamento e reconciliação |
| ML | Proibição de labels nas features e split temporal |
Testes Python
Os testes unitários cobrem checkpoint e retomada, publicação no console e Kafka, leitura incremental do PaySim, configurações, consultas analíticas, carga PostgreSQL e ciclo de execução do Isolation Forest. Os testes Spark cobrem parsing, validação, deduplicação, enriquecimentos e regras Silver.
A cobertura mínima obrigatória é 70%. A medição não inclui a composição visual do Streamlit nem os processos contínuos Bronze/Silver; esses pontos de entrada dependem do ambiente integrado. As consultas, transformações, validações e regras de negócio utilizadas por eles continuam dentro da métrica.
Na validação local atual, 52 testes unitários passam e atingem 71,84%. O CI instala Java 17 e também executa os 16 testes Spark.
Qualidade estática
Testes dbt
Os testes dbt são executados pelo dbt build da DAG. Entre as verificações estão:
- IDs únicos e não nulos.
- Valores monetários não negativos.
- Tipos, scores e níveis dentro do domínio.
- Relacionamentos entre fatos, dimensões e fontes.
- Reconciliação Silver × Gold e alertas × transações.
- Ausência de
is_fraud,is_flagged_fraudepredicted_fraudnas features.
Falha segura na DAG
Se a DAG publica 10 mil eventos e o loader encontra menos de 10 mil novos
registros, load_postgres falha antes de marcar arquivos. O Airflow repete a
tarefa quando o Silver terminar, impedindo Gold e ML com dados parciais.