Sviluppo di un'Interfaccia Reattiva Web per il Protocollo di Sorveglianza TBC

Come trasformare le linee guida operative TBC in una interfaccia interattiva: gestione logica dei rami decisionali e validazione dei criteri di idoneità con JavaScript.


DISCLAIMER: LE INFORMAZIONI PRESENTI IN QUESTO ARTICOLO NON SONO LINEE GUIDA UFFICIALI E NON SOSTITUISCONO IL PARERE MEDICO!

Architettura del Sistema: Astro + Vanilla Logic

In questo ecosistema, Astro funge da scheletro statico per la interfaccia visiva (UI), mentre il comportamento dinamico (il “motore” clinico) è isolato in un blocco <script> che manipola il DOM, che è un po’ il “motore” delle pagine web, in modo reattivo. Questa scelta garantisce buone performance, portabilità e indipendenza da framework pesanti, con possibilità di avere uno strumento nei pochi kb di una pagina html leggibile su wualsiasi browser moderno. Questa versione semplifica l’architettura logica del software di sorveglianza TBC, eliminando la prosa accademica e focalizzandosi sui componenti funzionali. Il sistema opera come una macchina a stati finiti dove l’interfaccia reagisce agli input clinici in tempo reale.


1. Gestione Navigazione (State Switching)

Il programma non ricarica la pagina. Usa una funzione per nascondere il blocco attuale e mostrare il successivo. La funzione showStep manipola la visibilità delle sezioni tramite CSS.

function showStep(id) {
    // Nasconde tutti i passaggi
    document.querySelectorAll(".tbc-step")
            .forEach(s => s.classList.remove("active"));

    // Attiva lo step richiesto e resetta lo scroll
    document.getElementById(`step-${id}`).classList.add("active");
    window.scrollTo(0, 0);
}

2. Motore Decisionale Anamnestico

Prima del test, il software analizza le controindicazioni. Se l’utente ha fattori di interferenza (es. vaccino BCG), il sistema suggerisce il test IGRA (QuantiFERON) rispetto alla Mantoux (TST).

// Analisi dei fattori di rischio per scelta test
const checks = {
    bcg: getCheck("q-bcg"),
    immuno: getCheck("q-immuno"),
    prevPos: getCheck("q-prev-pos")
};

if (checks.bcg || checks.prevPos) {
    // Logica di prevenzione falsi positivi
    advice = "Metodo: Preferire IGRA (QuantiFERON).";
} else if (getCheck("q-recent-vac")) {
    // Gestione interferenza biologica
    warning = "Rischio Falso Negativo. Rimandare di 4 settimane.";
}

3. Calcolo Finestra Biologica (T1)

In caso di esposizione accidentale (contatto con paziente infetto), il protocollo prevede un re-test dopo la “finestra” di 12 settimane (84 giorni) se il primo test è negativo.

const t0Date = new Date(t0Input.value);
const t1Date = new Date(t0Date);

// Incremento automatico di 12 settimane medico-legali
t1Date.setDate(t0Date.getDate() + 84);

const scadenzaT1 = t1Date.toLocaleDateString("it-IT");

4. Gerarchia degli Esiti (Priorità Clinica)

L’algoritmo processa i dati seguendo una scala di gravità decrescente. La rilevazione di sintomi o RX positivo ha la priorità assoluta su qualsiasi altro dato.

PrioritàCondizioneAzione Software
1 (Massima)Sintomi + / RX +Blocco Idoneità (Sospetta TB attiva)
2IGRA + / TST > 10mmIdoneità con prescrizione (Infezione Latente)
3Test NegativiIdoneità Piena / Programmazione Follow-up
// Logica di filtraggio esiti
if (symptoms || rx === "pos") {
    esito = "NON IDONEO (Invio a specialista)";
} else if (igra === "pos" || tst >= 10) {
    esito = "IDONEO CON PRESCRIZIONE (Terapia preventiva)";
} else {
    esito = "IDONEO (Sorveglianza periodica)";
}

5. Configurazione Sorveglianza (DVR)

La periodicità dei controlli futuri viene iniettata nel verbale in base alla classe di rischio del reparto definita nel Documento di Valutazione dei Rischi.

// Mapping Rischio -> Periodicità
const protocolli = {
    "C": "Controllo biennale (Rischio Medio)",
    "D": "Controllo annuale (Rischio Alto)",
    "E": "Controllo semestrale (Cluster/Emergenza)"
};

let frequenza = protocolli[riskLevel] || "Solo Baseline";

Note Tecniche Finali

  • Performance: L’uso di Vanilla JS riduce il peso della pagina a pochi KB.
  • Sicurezza: La sezione “Terapia” viene mostrata nel DOM solo se i trigger di positività sono attivi (riduzione rumore visivo).
  • Standardizzazione: L’output finale genera una stringa pronta per il caricamento in cartella clinica informatizzata.

LO STRUMENTO DESCRITTO NON SOSTITUISCE IN ALCUN MODO LIL GIUDIZIO CLINICO

Questo articolo descrive una minima parte del codice utilizzato e vuole essere una semplice presentazione delle potenzialità dell’uso di strumenti informatici nell’implementazione di algoritmi decisionali in ambito sanitario.

In basso il link allo strumento interattivo descritto in questo tutorial e altri link a ulteriori articoli correlati in tema di TBC e prevenzione.


Algoritmo Decisionale per il Rischio TBC: Tool online


Bibliografia e Riferimenti

Riferimento Documentale: Accordo Conferenza Stato-Regioni 7 febbraio 2013 - Ministero della Salute, Direzione Generale della Prevenzione.