Estensioni FHIR

Questa pagina spiega in che modo l'API Cloud Healthcare supporta le estensioni FHIR.

Panoramica

FHIR consente estensioni definite dall'utente per risorse e tipi di dati. La L'API Cloud Healthcare supporta l'archiviazione e il recupero di queste estensioni.

Valori estensione

Un elemento estensione è una coppia chiave-valore. La chiave, archiviata in url indica l'URL canonico di una definizione di estensione che definisce i contenuti e il significato dell'estensione. Il campo value è un elemento di scelta che possono contenere molti tipi di dati FHIR diversi.

Questo meccanismo è lo stesso in tutte le versioni di FHIR, tranne per il fatto che le versioni precedenti hanno meno tipi di dati disponibili. I tipi di dati disponibili per disponibili nello standard FHIR (DSTU2, STU3 R4).

L'esempio seguente mostra una risorsa Patient con due estensioni, colore dei capelli e cittadinanza, nell'elemento principale:

{
  "resourceType": "Patient",
  "active": true,
  "gender": "male",
  "extension": [
    {
      "url": "http://example.com/fhir/StructureDefinition/hair-color",
      "valueString": "brown"
    },
    {
      "url": "http://example.com/fhir/StructureDefinition/patient-citizenship",
      "valueCodeableConcept": {
        "coding" : [{
          "system" : "urn:iso:std:iso:3166",
          "code" : "US"
        }]
      }
    }
  ]
}

Anche i tipi di dati complessi e gli elementi con campi secondari possono avere estensioni. Ad esempio, questo Patient contiene un'estensione del campo identifier, che è un tipo di dati complesso, e un'estensione del campo communication, che ha altri campi secondari:

{
  "resourceType": "Patient",
  "active": true,
  "gender": "male",
  "identifier": [
    "system": "MRN",
    "value": "AB1234",
    "extension": [
      {
        "url": "http://example.com/fhir/StructureDefinition/last-verified",
        "valueDateTime": "2021-01-01T00:00:00Z"
      }
    ]
  ],
  "communication": [
    {
      "language": {
        "coding": [{
          "system": "urn:iso:std:iso:639",
          "code": "EN"
        }]
      },
      "extension": [
        {
          "url": "http://example.com/fhir/StructureDefinition/fluency-level",
          "valueInteger": 7
        }
      ]
    }
  ]
}

Ogni elemento dell'estensione può avere un solo campo del valore. Per definire un che contenga un array di valori, devi definire più estensioni con lo stesso url.

Non puoi definire estensioni sull'elemento principale per i seguenti tipi di risorse:

  • Binary
  • Bundle
  • Parameters

Estensioni complesse

Le estensioni possono contenere estensioni per definire una struttura nidificata. Il nome url dell'estensione secondaria è relativo all'estensione esterna. Ogni estensione l'elemento deve avere un elemento value o un'estensione figlio nidificata, ma non entrambi.

L'esempio seguente mostra una risorsa Patient che contiene un complesso Estensione patient-citizenship con estensioni secondarie code e period:

{
  "resourceType": "Patient",
  "extension": [
    {
      "url": "http://hl7.org/fhir/StructureDefinition/patient-citizenship",
      "extension": [
        {
          "url": "code",
          "valueCodeableConcept": {
            "coding": [{
              "system": "urn:iso:std:iso:3166",
              "code": "CA"
            }]
           }
        },
        {
          "url": "period",
          "valuePeriod": {
            "start": "2010-01-01"
          }
        }
      ]
      }
  ]
}

Estensioni sui tipi primitivi

I tipi di dati primitivi in FHIR possono anche avere estensioni. Se rappresentati in formato JSON, le estensioni sono rappresentate in una proprietà JSON aggiuntiva con _ è anteposto al nome dell'elemento primitivo, come definito nel Rappresentazione JSON FHIR.

L'esempio seguente, in formato JSON, mostra una risorsa Patient con un estensione nel campo birthDate:

{
  "resourceType": "Patient",
  "active": true,
  "gender": "male",
  "birthDate": "1970-01-01",
  "_birthDate": {
    "extension": [
      {
        "url": "http://example.com/fhir/StructureDefinition/date-type",
        "valueString": "A"
      }
    ]
  }
}

Se l'elemento primitivo viene ripetuto, la proprietà con _ viene gestita anche come un array, con valori nulli per allineare i valori dell'estensione ai relativi le primitive corrispondenti.

L'esempio seguente mostra una risorsa Patient con un'estensione attivata il secondo valore di name.given, ma nessuna estensione sul primo valore:

{
  "resourceType": "Patient",
  "name": {
    "given": [
      "ABC",
      "DEF"
    ],
    "_given": [
      null,
      {
        "extension": [
          {
            "url": "http://hl7.org/fhir/StructureDefinition/display",
            "valueString": "XYZ"
          }
        ]
      }
    ]
  }
}

Definizione di un'estensione con un StructureDefinition

Ai fini dell'interoperabilità, il nome e il significato di un'estensione possono essere definite con una risorsa StructureDefinition che può essere pubblicata oppure distribuiti in modo da permettere ai consumatori dei dati di interpretarli. Questa opzione è facoltativa quando si utilizzano le estensioni nell'API Cloud Healthcare.

L'identità di questa definizione è indicata dall'URL canonico nell'"URL" . Per tutti i dati scambiati tra le organizzazioni, è consigliabile utilizzare un URL che i consumatori di dati possono seguire per ottenere il StructureDefinition. L'API Cloud Healthcare non convalidare questo URL o tentare di risolverlo.

I contenuti di una risorsa StructureDefinition possono essere complessi e spesso sono definiti mediante strumenti per la creazione di profili FHIR.

Estensioni di modifica

Estensioni di modifica sono simili alle estensioni, ma vengono archiviate nel campo modifierExtension. Un'estensione del modificatore è un dato aggiuntivo che non può essere ignorato perché potrebbe invalidare l'interpretazione dell'elemento che lo contiene.

Ad esempio, un'estensione modificatore potrebbe indicare che il paziente non si soffre di questa condizione specificata o che non deve essere prescritto un farmaco.

L'API Cloud Healthcare archivia e recupera le estensioni dei modificatori, ma non tenta di interpretarne il significato. Si consiglia di sostenere le domande di partecipazione l'azione adeguata quando si imbattono in un'estensione modificatore che non capire, magari mostrando un avviso o rifiutando completamente la risorsa. Gli utenti che implementano i prodotti dovrebbero evitare di usare estensioni di modifica, ove possibile.