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.
99 lines
5.1 KiB
JSON
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?"
|
|
]
|
|
}
|