Files
ThothII/tools/replay/phase-summary-fixture.json
marcopan 4042d0b44d feat(replay): fixtures + augment script for v2 artifact-gate viewers
Add cte-plan-fixture.json, cte-result-fixture.json, and
phase-summary-fixture.json — realistic Italian-language payloads for the
cardiology DWH replay session, conforming exactly to contracts.md (A/B/C).

Add augment-review-gates.mjs (pattern of augment-schema-linking.mjs): finds
the F6 cte_plan gate, first CTE 1 cte_result gate, and Fase 5 phase-summary
gate by title regex and swaps in the v2 artifact.data, so CtePlanViewer,
CteResultViewer, and PhaseSummaryViewer render in the offline replay.
Idempotent; exits 1 if an expected gate is missing.

Document the augment scripts and re-extract note in tools/replay/README.md.
2026-07-07 01:19:44 +02:00

99 lines
5.1 KiB
JSON

{
"schema_version": 2,
"phase": { "id": "F5", "num": 5, "name": "sintesi" },
"summary": "Sintesi completa per il Blocco 3: ablazione transcatetere e impianto ICD sono ancorati rispettivamente a `fact_studio_elettrofisiologico_endocavitario_ablazione` e `fact_impianto_defibrillatore_impiantabile`, incrociati su `cod_paz` (entrambe FK a `dim_patient`). Escluse sostituzioni e controlli, fuori perimetro della domanda.",
"checks": [
{ "label": "Copertura tabelle promosse", "status": "ok", "detail": "Tutte le tabelle usate sono nel perimetro promosso in F4." },
{ "label": "Finestre temporali coerenti", "status": "ok", "detail": "Ablazione in [2011-07-03, 2026-07-03]; impianto dopo l'ablazione e <= ablazione + 10 anni." },
{ "label": "Chiavi di join verificate", "status": "ok", "detail": "cod_paz presente e non nullo in entrambe le fact table candidate." },
{ "label": "Ambiguità residue", "status": "warn", "detail": "Pazienti con più ablazioni: da chiarire in F6 se contare la prima o l'ultima coppia qualificante." }
],
"sections": [
{
"title": "Criteri di selezione",
"items": [
{
"label": "Ablazione transcatetere",
"table": "fact_studio_elettrofisiologico_endocavitario_ablazione",
"column": "ablazione_transcatetere",
"value": "IS TRUE",
"kind": "filter",
"description": "Indicazione di ablazione transcatetere derivata dal text analysis sul campo conclusioni (sovrascrive il flag Cardioref).",
"rationale": "Isola le sole procedure transcatetere richieste dalla domanda."
},
{
"label": "Finestra ablazione",
"table": "fact_studio_elettrofisiologico_endocavitario_ablazione",
"column": "data_ablazione",
"value": "[2011-07-03, 2026-07-03]",
"kind": "filter",
"description": "Data di esecuzione della procedura di ablazione.",
"rationale": "Finestra degli «ultimi 15 anni» calcolata rispetto alla data corrente della domanda."
},
{
"label": "Impianto successivo all'ablazione",
"table": "fact_impianto_defibrillatore_impiantabile",
"column": "data_impianto",
"value": "> data_ablazione E <= data_ablazione + 10 anni",
"kind": "filter",
"description": "Data di esecuzione dell'impianto del defibrillatore.",
"rationale": "Vincolo «entro 10 anni» richiesto dalla domanda."
},
{
"label": "Join paziente",
"table": "dim_patient",
"column": "cod_paz",
"value": "cross-fact join",
"kind": "join",
"description": "Codice identificativo del paziente nel sistema sorgente Cardioref.",
"rationale": "Chiave comune tra le due fact table (entrambe FK a dim_patient)."
}
]
}
],
"tables": [
{
"name": "fact_studio_elettrofisiologico_endocavitario_ablazione",
"role": "promoted",
"description": "Fatto clinico derivato da cr_seeablazione relativo a eventi, procedure o rilevazioni del paziente. Esclude record riclassificati come cardioversione o chiusura auricola.",
"columns": [
{ "name": "cod_paz", "description": "Codice paziente (FK a dim_patient)." },
{ "name": "num", "description": "Numero progressivo dell'episodio clinico per il paziente." },
{ "name": "ablazione_transcatetere", "description": "Indicazione di ablazione transcatetere derivata dal text analysis sul campo conclusioni.", "value_filter": "IS TRUE" }
]
},
{
"name": "fact_impianto_defibrillatore_impiantabile",
"role": "promoted",
"description": "Fact table degli impianti di defibrillatori (ICD). Esclude record riclassificati come CRT-P/CRT-D/S-ICD dal classificatore CIED.",
"columns": [
{ "name": "cod_paz", "description": "Codice paziente (FK a dim_patient)." },
{ "name": "num", "description": "Numero progressivo dell'episodio clinico per il paziente." }
]
},
{
"name": "dim_patient",
"role": "promoted",
"description": "Dimensione paziente derivata dall'anagrafica Cardioref normalizzata nello schema di integrazione. Popolata solo con pazienti che hanno almeno un record in una tabella flaggata is_activity_table:true in integration-map.yaml (gate di attivita clinica del reparto di aritmologia).",
"columns": [
{ "name": "cod_paz", "description": "Codice identificativo del paziente nel sistema sorgente Cardioref." }
]
},
{
"name": "fact_sostituzione_impianto_defibrillatore_impiantabile",
"role": "excluded",
"description": "Fact table delle sostituzioni/revisioni ICD. Esclude record riclassificati come CRT-P/CRT-D/S-ICD dal classificatore CIED.",
"columns": []
},
{
"name": "fact_controllo_defibrillatore_impiantabile",
"role": "excluded",
"description": "Fact table dei controlli periodici dei dispositivi ICD.",
"columns": []
}
],
"open_questions": [
"Se un paziente ha più ablazioni transcatetere seguite da impianto, contare la prima o l'ultima coppia qualificante?"
]
}