Progetto Accademico & Ingegneristico di Alessandro Mainardi (UniBo DISI)
→
Transcodifica deterministica e sicura tra i referti di laboratorio HL7 CDA Release 2 emessi dal Fascicolo Sanitario Elettronico e il database Apple HealthKit, senza che un singolo byte abbandoni il tuo dispositivo.
Un trattato esaustivo di 40 pagine redatto in formato LaTeX accademico, con analisi formale dello stato dell'arte (FSE 2.0, HL7 CDA R2, FHIR R4), modello di minaccia STRIDE, formalizzazione dell'Identity Firewall (D.M. 23/12/1976 + Jaro-Winkler), benchmark sperimentali su iPhone 15 Pro vs iPhone 13 e appendici ontologiche complete.
Sei pilastri architetturali garantiscono che l'elaborazione dei referti medici rimanga veloce, accurata e matematicamente impermeabile a fughe di dati.
Elaborazione a stati finiti con complessità di memoria costante \(\mathcal{O}(d_{\max})\). Neutralizza istantaneamente gli attacchi di espansione XML (Billion Laughs / XXE) e garantisce zero terminazioni da parte del demone Jetsam di iOS.
Previene l'inquinamento dei grafici di Apple Salute con i dati clinici dei familiari. Verifica la congruità aritmetica del Codice Fiscale (D.M. 23/12/1976) e applica la distanza di Jaro-Winkler (\(\tau = 0.88\)) su nominativi parziali.
Mappatura deterministica e normalizzazione dimensionale conforme a UCUM. Converte analiti ematochimici e parametri cardiometabolici in tipi quantitativi nativi HKQuantityTypeIdentifier.
Motore analitico per serie temporali longitudinali basato su regressione lineare OLS ed Exponential Moving Average (EMA). Applica i protocolli clinici ESC/ESH 2023 (ipertensione) e ADA 2024 (glicemia).
Pipeline di ripiego accelerata dal Neural Engine per la digitalizzazione di scansioni cartacee e referti bitmap. Adotta il paradigma Human-in-the-Loop con conferma visiva esplicita prima del commit.
Persistenza a riposo protetta da chiavi crittografiche hardware vincolate a Face ID / Touch ID nel Keychain di sistema. Database SwiftData con classe di protezione NSFileProtectionComplete.
Esplora interattivamente il catalogo delle corrispondenze ontologiche supportate nativamente dal motore RosettaHealth.
| Codice LOINC | Parametro Clinico | HealthKit Type | Unità UCUM | Fattore / Regola di Normalizzazione |
|---|---|---|---|---|
| 15074-8 | Glucosio Basale (Siero/Plasma) | .bloodGlucose |
mg/dL |
Pass-through; Gate: [10, 1500] mg/dL |
| 2345-7 | Glucosio (Moli/Volume) | .bloodGlucose |
mmol/L |
Conversione molare: \(\times 18.0182\) \(\to\) mg/dL |
| 2093-3 | Colesterolo Totale | .dietaryCholesterol |
mg/dL |
Gate fisiologico: [20, 1000] mg/dL |
| 2085-9 | Colesterolo HDL | .dietaryCholesterol |
mg/dL |
Gate fisiologico: [5, 300] mg/dL |
| 2571-8 | Trigliceridi | .dietaryFatTotal |
mg/dL |
Se mmol/L \(\to \times 88.57\) \(\to\) mg/dL |
| 8480-6 | Pressione Arteriosa Sistolica | .bloodPressureSystolic |
mm[Hg] |
Triage ESC/ESH 2023; Gate: [40, 350] mmHg |
| 8462-4 | Pressione Arteriosa Diastolica | .bloodPressureDiastolic |
mm[Hg] |
Triage ESC/ESH 2023; Gate: [20, 200] mmHg |
| 8867-4 | Frequenza Cardiaca | .heartRate |
/min |
Unità target: count/min; Gate: [10, 300] bpm |
| 2708-6 | Saturazione Ossigeno (\(SpO_2\)) | .oxygenSaturation |
% |
Se frazione \([0.1, 1.0] \to \times 100\); Gate: [50, 100]% |
| 8310-5 | Temperatura Corporea | .bodyTemperature |
Cel |
Se Fahrenheit \(\to (F - 32) \times \frac{5}{9}\) \(\to\) °C |
| 29463-7 | Massa Corporea (Peso) | .bodyMass |
kg |
Se libbre ([lb_av]) \(\to \times 0.453592\) \(\to\) kg |
| 39156-5 | Indice di Massa Corporea (BMI) | .bodyMassIndex |
kg/m2 |
Gate fisiologico: [5, 100] kg/m\(^2\) |
| 2951-2 | Sodio nel Siero | .dietarySodium |
mmol/L |
Normalizzazione stechiometrica: \(\times 22.99\) \(\to\) mg |
| 2823-3 | Potassio nel Siero | .dietaryPotassium |
mmol/L |
Normalizzazione stechiometrica: \(\times 39.10\) \(\to\) mg |
| 94122-8 | Massimo Consumo Ossigeno (\(VO_2\) max) | .vo2Max |
mL/kg/min |
Unità HealthKit nativa: mL/kg*min |
I dati sanitari sono irrevocabili. Caricarli su server cloud commerciali crea una superficie d'attacco inaccettabile per il cittadino.
Non essendoci alcun server backend o fornitore cloud intermedio, il trattamento ricade totalmente nell'esenzione per finalità personali e domestiche. L'utente è l'unico ed esclusivo custode dei propri referti.
RosettaHealth non richiede né effettua alcuna connessione socket HTTP/TCP esterna durante il parsing o l'analisi clinica: NetworkTraffic(d) = ∅ per ogni documento processato.
L'interfaccia include cancellazione fisica immediata: eliminando un'osservazione o un referto, il record viene rimosso fisicamente sia da SwiftData sia da HealthKit tramite deleteObject.