Obiettivo
Creare un quality certificate unificato che aggreghi le validazioni di RAW, CLEAN e MART in un unico report JSON salvato a livello di run record.
Oggi ogni layer scrive il suo <layer>_validation.json separato. Non esiste un report che dica "dataset X anno Y è certificato con qualità Z".
Contesto
Dalla gap analysis di giugno 2026 (gap 4). I gap propedeutici 2 (type check) e 5 (PAQA score) sono già risolti in #399.
Il certificate va scritto in:
root/data/_runs/{dataset}/{year}/quality_certificate.json
(associato al run record, non a un layer specifico — non dentro _validate/ di un layer)
Area del toolkit
Criteri di completamento
Schema proposta
{
"dataset": "istat_elenco_comuni",
"year": 2026,
"certified": true,
"certified_at": "2026-06-24T18:00:00Z",
"checks": [
{"id": "clean.required_columns", "status": "pass"},
{"id": "clean.not_null", "status": "pass"},
{"id": "clean.min_rows", "status": "pass", "detail": "rows=7901 (min=1)"}
],
"layers": {
"raw": {"ok": true},
"clean": {"ok": true, "rows": 7901, "cols": 12},
"mart": {"ok": true, "tables": ["mart_a", "mart_b"]}
},
"quality_score": 92
}
Collegamenti
Obiettivo
Creare un quality certificate unificato che aggreghi le validazioni di RAW, CLEAN e MART in un unico report JSON salvato a livello di run record.
Oggi ogni layer scrive il suo
<layer>_validation.jsonseparato. Non esiste un report che dica "dataset X anno Y è certificato con qualità Z".Contesto
Dalla gap analysis di giugno 2026 (gap 4). I gap propedeutici 2 (type check) e 5 (PAQA score) sono già risolti in #399.
Il certificate va scritto in:
(associato al run record, non a un layer specifico — non dentro
_validate/di un layer)Area del toolkit
Criteri di completamento
run all/run fullche dopo le validazioni dei singoli layer legge i 3<layer>_validation.jsone producequality_certificate.jsonpytest -m corepassaSchema proposta
{ "dataset": "istat_elenco_comuni", "year": 2026, "certified": true, "certified_at": "2026-06-24T18:00:00Z", "checks": [ {"id": "clean.required_columns", "status": "pass"}, {"id": "clean.not_null", "status": "pass"}, {"id": "clean.min_rows", "status": "pass", "detail": "rows=7901 (min=1)"} ], "layers": { "raw": {"ok": true}, "clean": {"ok": true, "rows": 7901, "cols": 12}, "mart": {"ok": true, "tables": ["mart_a", "mart_b"]} }, "quality_score": 92 }Collegamenti
_local/tasks/2026-06-13-pipeline-quality-certificate.md