Distribuzione dati codificati (DDC)
Recupero informazioni relative a L1, L2, L3, Practitioner AFAM e ASAN
Occupazione posti letto
Lo scopo del caso d’uso è ottenere dati aggiornati sull’occupazione dei posti letto delle strutture socio-sanitarie di diversa tipologia, ad esempio: RSA, RSD, ecc., presenti in Regione Lombardia.
Il seguente elenco definisce il principale contenuto informativo che sarà disponibile per questo caso d’uso.
Attributo | Definizione | Risorsa FHIR |
---|---|---|
L1 | Codice L1 identificativo della struttura | Organization |
L2 | Codice L2 identificativo della struttura (codice CUDES) | Organization |
Categoria | Identifica la categoria relativa ai posti letto | Observation |
Numero di letti occupati | Numero di posti letto occupati nella struttura | Observation |
DataOra Aggiornamento | Data e ora di aggiornamento della misura di occupazione | Observation |
Diagramma UML
La risorsa FHIR cardine di questo caso d’uso è “Observation” che rappresenta, in generale, una qualsiasi misura o asserzione fatta su un paziente, un dispositivo o qualsiasi altro soggetto. L’Observation è referenziata alla risorsa Organization che esprime il soggetto, ossia la struttura, a cui si applica la misura.
Richiesta
Per interrogare un applicativo tramite interfaccia FHIR si utilizza il metodo GET che permette di recuperare una specifica risorsa, indicando il relativo URI, oppure utilizzare il metodo GET combinando una serie di parametri condizionali. Il formato di una ricerca di una risorsa mediante il metodo GET è il seguente:
GET {BASE_URL}/TipoRisorsa?Parametro1=ValoreParametro1&Parametro2=ValoreParametro2&…
Dove BASE_URL è l’endpoint dell’applicativo che espone il servizio, TipoRisorsa è il nome della risorsa FHIR esposta e le coppie Parametro-ValoreParametro esprimono condizioni di ricerca specifiche.
Nella tabella sottostante sono riportati alcuni dei parametri di ricerca che possono essere utilizzati per determinare il comportamento della risposta applicativa. Si noti che tali parametri possono essere combinati tra loro con operatori logici (ad esempio & esprime AND logico).
Parametro | Descrizione parametro |
---|---|
_include | indica che le risorse oggetto devono essere incluse nei risultati di ricerca |
_lastUpdated | utile per selezionare le risorse in base alla data di ultimo aggiornamento. Possibile specificare se risorse restituite devono avere una data di ultimo aggiornamento superiore/inferiore alla data definita dal parametro |
_profile | utile per selezionare le risorse in base al URL del profilo specificato nell’elemento meta |
performer:Organization.identifier | permette di ricercare tutte le Observation per una specifica Organization |
Nel caso in esame si ha l’obiettivo di recuperare il numero di posti letto occupati dalle strutture socio-sanitarie, quindi bisognerà effettuare una GET avente Observation come tipo di risorsa, in quanto è la risorsa che contiene l’informazione relativa al numero di posti letto occupati per una particolare struttura. Nella risposta del server si vuole ottenere anche un riferimento alla struttura sanitaria a cui il dato fa riferimento quindi è possibile utilizzare il parametro di ricerca _include. Il valore del parametro include presenta due parti separate dal carattere “:”, il primo valore indica il nome della risorsa di partenza da cui proviene il join (in questo caso Observation), mentre il secondo valore è il nome del parametro di ricerca che deve essere di tipo reference (in questo caso performer indica un riferimento ad una Organization di tipo L2).
Risposta
Quando il server risponde ad una HTTP Request, elabora la chiamata a seconda del metodo utilizzato e restituisce al client una HTTP Response che contiene un:
- Body: corpo della risposta in formato JSON che contiene l’informazione richiesta dal client a seguito della richiesta;
- Codice di stato HTTP: restituito dal server in modo da informare il client sul risultato della richiesta (ad esempio 200: indica che la risorsa è stata trovata e il messaggio è stato elaborato con successo);
- Headers: forniscono informazioni extra sulla risposta.
Risposta esito positivo
GET /Observation?_include=Observation:performer&Parametro1=ValoreParametro1&…
Il risultato della precedente GET è un Bundle che contiene tutte le Observation insieme alle Organization L2 referenziate mediante il parametro performer contenuto nella risorsa Observation. Tutte le Organization verranno messe in coda alla fine di tutte le Observation. Il risultato della GET sarà una risorsa di tipo Bundle contenente informazioni relative alle risorse Observation ed Organization.
Stuttura del Bundle
Percorso JSON | Formato | Descrizione |
---|---|---|
Bundle.resourceType | string | “Bundle” |
Bundle.id | string | Identificativo univoco del bundle restituito |
Bundle.type | string | “searchset” |
Bundle.timestamp | dateTime | Timestamp in formato FHIR: YYYY-MM-DDThh:mm:ssZ |
Bundle.total | integer | numero di risorse di tipo match restituite |
Bundle.link.relation | string | “self” |
Bundle.link.url | string | URL della chiamata ricevuta |
Bundle.entry.fullUrl | string | URL della risorsa sul sistema sorgente |
Bundle.entry[i].resource[i] | FHIRResource | Elemento JSON della risorsa restituita |
Bundle.entry[i].search.mode | string | Assume valori: - "match" se la risorsa restituita è quella richiesta - "include" se la risorsa è restituita perchè referenziata da una risorsa di tipo match |
Stuttura di Observation
Nella tabella sottostante si riportano le principali caratteristiche degli attributi della risorsa Observation che aderisce al profilo FHIR “RLObservationPLO”. Maggiori informazioni sul profilo (quali ad esempio cardinalità, formato, ecc…) sono disponibili sul sito di Simplifier.
Percorso JSON | Formato | Descrizione |
---|---|---|
Observation.resourceType | string | “Observation” |
Observation.id | string | Identificativo univoco della observation restituita |
Observation.meta.versionId | string | versione della risorsa |
Observation.meta.profile | string | URL del profilo Observation |
Observation.meta.lastUpdated | string | data ultimo aggiornamento in formato FHIR: YYYY-MM-DDThh:mm:ssZ |
Observation.identifier.system | string | URL del sistema di identificazione utilizzato per l’Observation |
Observation.identifier.value | string | Contiene il valore dell’identificativo in formato: codiceL1-codiceL2 |
Observation.code.coding.system | string | URL del sistema di codifica del tipo di Observation |
Observation.code.coding.code | string | codifica del tipo di Observation |
Observation.code.coding.display | string | descrizione del tipo di Observation |
Observation.status | string | “final” |
Observation.performer.reference | string | reference organization L2 |
Observation.performer.display | string | descrizione organization L2 |
Observation.effectiveDateTime | dateTime | data dell’osservazione in formato FHIR: YYYY-MM-DDThh:mm:ssZ |
Observation.component.code.coding.system | string | URL codifica tipologia posti letto |
Observation.component.code.coding.code | string | Codice identificativo del tipo di posto letto |
Observation.component.code.coding.display | string | descrizione della tipologia dei posti letto |
Observation.component.valueInteger | integer | numero di posti letto occupati |
Observation.search.mode | string | “match” |
In aggiunta, grazie all’utilizzo del parametro di ricerca _include, la risposta conterrà anche le informazioni relative all’Organization referenziata dal parametro performer in Observation. In particolare non tutte le informazioni contenute nella risorsa FHIR Organization sono obbligatorie ma è importante che ci siano le informazioni descritte nel paragrafo che segue.
Struttura di Organization
Nella tabella sottostante si riportano le principali caratteristiche degli attributi della risorsa Organization che aderisce al profilo FHIR “RLOrganizationL2”. Maggiori informazioni sul profilo (quali ad esempio cardinalità, formato, ecc…) sono disponibili sul sito di Simplifier.
Percorso JSON | Formato | Descrizione |
---|---|---|
Organization.resourceType | string | “Organization” |
Organization.id | string | identificativo univoco della organization restituita |
Organization.meta.profile | string | URL del profilo Observation L2 |
Organization.identifier.system | string | URL del sistema di identificazione utilizzato per l’Organization |
Organization.identifier.value | string | codice ministeriale del presidio |
Organization.type.coding.system | string | URL del sistema di codifica della tipologia di struttura |
Organization.type.coding.code | string | codice del tipo di struttura L2 |
Organization.name | string | denominazione del presidio |
Organization.search.mode | string | “include” |
Di seguito un esempio di Bundle di risposta con esito positivo:
{ "resourceType": "Bundle", "id": "esempio-bundle-PLO-esitopositivo", "type": "searchset", "timestamp": "2022-07-12T07:15:56Z", "total": 1, "link": [ { "relation": "self", "url": "http://localhost:52773/csp/healthshare/nprifhirserver/fhir/r4/Observation?_include=Observation:performer" } ], "entry": [ { "fullUrl": "http://localhost:52773/csp/healthshare/nprifhirserver/fhir/r4/Observation/77533", "resource": { "resourceType": "Observation", "id": "77533", "meta": { "versionId": "1", "profile": [ "https://fhir.siss.regione.lombardia.it/StructureDefinition/RLObservationPLOsti" ], "lastUpdated": "2022-07-12T07:15:20Z" }, "identifier": [ { "system": "https://fhir.siss.regione.lombardia.it/Id/RLObservation", "value": "030717-03007800" } ], "code": { "coding": [ { "system": "https://fhir.siss.regione.lombardia.it/CodeSystem/RLOrganizationMeasures", "code": "01", "display": "Occupazione posti letto" } ] }, "status": "final", "performer": { "reference": "Organization/11984", "display": "03007800" }, "effectiveDateTime": "2022-01-23T15:30:10+01:00", "component": [ { "code": { "coding": [ { "system": "http://www.hl7.it/fhir/base/CodeSystem-minsan-hsp.html", "code": "3", "display": "Alzheimer" } ] }, "valueInteger": 64 }, { "code": { "coding": [ { "system": "http://www.hl7.it/fhir/base/CodeSystem-minsan-hsp.html", "code": "5", "display": "Ordinario" } ] }, "valueInteger": 10 } ] }, "search": { "mode": "match" } }, { "fullUrl": "http://localhost:52773/csp/healthshare/nprifhirserver/fhir/r4/Organization/11984", "resource": { "resourceType": "Organization", "id": "11984", "meta": { "profile": [ "https://fhir.siss.regione.lombardia.it/StructureDefinition/RLOrganizationL2" ] }, "identifier": [ { "system": "http://www.hl7.it/fhir/base/CodeSystem-minsan-hsp.html", "value": "03007800" } ], "type": [ { "coding": [ { "system": "http://www.hl7.it/fhir/base/CodeSystem-minsan-hsp-1.html", "code": "RIC" } ] } ], "name": "Presidio Ospedaliero di Vimercate" }, "search": { "mode": "include" } } ] }
Risposta esito positivo senza risultati
Nel caso in cui in seguito ad una interrogazione FHIR, l’applicativo risponda con zero risultati, la risposta è comunque di esito positivo in quanto il codice di stato è HTTP 200.
Struttura del Bundle
Percorso JSON | Formato | Descrizione |
---|---|---|
Bundle.resourceType | string | “Bundle” |
Bundle.id | string | Identificativo univoco del bundle restituito |
Bundle.type | string | “searchset” |
Bundle.timestamp | dateTime | Timestamp in formato FHIR: YYYY-MM-DDThh:mm:ssZ |
Bundle.total | integer | numero di risorse di tipo match restituite (“0”) |
Bundle.link.relation | string | “self” |
Bundle.link.url | string | URL della chiamata ricevuta |
Di seguito un esempio di Bundle di risposta con esito positivo con zero risultati.
{ "resourceType": "Bundle", "id": "dbb16aa8-02b9-11ed-ac24-02001700b287", "type": "searchset", "timestamp": "2022-07-13T14:41:19Z", "total": 0, "link": [ { "relation": "self", "url": "http://localhost:52773/csp/healthshare/nprifhirserver/fhir/r4/Observation?_include=Observation:performer" } ] }
Risposta esito negativo
Nel caso in cui la risposta ottenuta dall’applicativo del IS è negativa e l’errore è a livello di Web Service, essa conterrà i codici di stato propri del protocollo HTTP; ad esempio:
- 404 Not Found, se la risorsa web non è stata trovata;
- 410 Gone, se la risorsa è stata eliminata;
- Ecc.
Nel caso in cui l’applicativo abbia errori sull’interfaccia FHIR (ad. esempio un parametro non è riconosciuto), verrà restituita come risposta un JSON contente la risorsa Bundle al cui interno è presente la risorsa OperationOutcome.
Struttura di OperationOutcome
Percorso JSON | Formato | Descrizione |
---|---|---|
OperationOutcome.resourceType | string | “OperationOutcome” |
OperationOutcome.id | string | Identificativo della risorsa |
OperationOutcome.Issue.severity | string | Severità dell’errore |
OperationOutcome.Issue.code | string | Codice dell’errore |
OperationOutcome.Issue.diagnostics | string | Riferimento dell’errore |
OperationOutcome.Issue.details.text | string | Dettagli dell’errore |
Di seguito un esempio di risposta negativa a seguito di un parametro di ricerca non riconosciuto.
{ "resourceType": "Bundle", "id": "f8cd72d2-0460-11ed-aa12-02001700b287", "type": "searchset", "timestamp": "2022-05-15T17:10:05Z", "total": 0, "link": [ { "relation": "self", "url": "http://localhost:8080/fhirserver/fhir/r4/Observation" } ], "entry": [ { "resource": { "resourceType": "OperationOutcome", "id": "1", "issue": [{ "severity": "error", "code": "invalid", "diagnostics": "ParameterNotSupported", "details": { "text": "Unrecognized parameter '_id1'. 123456" } } ] } "search": { "mode": "outcome" } } ] }
Recupero informazioni di dominio del gestore
Nel caso in esame si ha l’obiettivo di recuperare le informazioni di dominio del gestore dalla risorsa FHIR RLHealthcareServiceRSAInfoBase. Per far ciò bisognerà effettuare una GET avente come tipo di risorsa HealthcareService in quanto è la risorsa che descrive i servizi offerti e le informazioni caratteristiche di una specifica RSA.
Nella risposta del server si vuole ottenere tutte le informazioni contenute nella risorsa HealthcareService relative ad una specifica RSA, quindi è possibile utilizzare il parametro di ricerca organization che permette di specificare l’Organization che fornisce il servizio sanitario di cui si vogliono ottenere le informazioni.
Il valore di questo parametro sarà il codice CUDES ovvero il codice dell’Organization L2 di riferimento. Questo codice sarà univoco per ogni RSA in quanto un codice Organization L2 identifica una specifica struttura sanitaria e quindi di conseguenza identifica univocamente una RSA.
GET /HealthcareService?organization=codiceCUDES
È previsto che il server FHIR effettui una richiesta periodica per ottenere queste informazioni. La frequenza di configurazione della richiesta può essere schedulata settimanalmente o mensilmente in quanto le informazioni richieste non sono soggette a cambi frequenti.