Cette page explique comment l'API Cloud Healthcare est compatible avec les extensions FHIR.
Aperçu
FHIR permet des extensions définies par l'utilisateur sur les ressources et les types de données. L'API Cloud Healthcare permet de stocker et de récupérer ces extensions.
Valeurs des extensions
Un élément d'extension est une paire clé-valeur. La clé, stockée dans le champ url
, indique l'URL canonique d'une définition d'extension qui définit le contenu et la signification de l'extension. Le champ value
est un élément de choix pouvant contenir de nombreux types de données FHIR différents.
Ce mécanisme est le même pour toutes les versions FHIR, sauf que précédemment versions ont moins de types de données disponibles. Les types de données disponibles pour les extensions sont disponibles dans la norme FHIR (DSTU2, STU3, R4).
L'exemple suivant montre une ressource Patient
avec deux extensions (couleur de cheveux et citoyenneté) sur l'élément racine :
{
"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"
}]
}
}
]
}
Les types de données complexes et les éléments comportant des champs enfants peuvent également comporter des extensions. Par exemple, ce Patient
contient une extension sur le champ identifier
, qui est un type de données complexe, et une extension sur le champ communication
, qui comporte d'autres champs enfants :
{
"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
}
]
}
]
}
Chaque élément d'extension ne peut comporter qu'un seul champ de valeur. Pour définir une
qui contient un tableau de valeurs, vous devez définir plusieurs extensions
éléments avec le même url
.
Vous ne pouvez pas définir d'extensions sur l'élément racine pour les types de ressources suivants :
Binary
Bundle
Parameters
Extensions complexes
Les extensions peuvent contenir des extensions pour définir une structure imbriquée. Le nom url
de l'extension enfant est associé à l'extension externe. Chaque extension
doit comporter soit un élément "value", soit une extension enfant imbriquée, mais pas
les deux.
L'exemple suivant montre une ressource Patient
contenant une extension patient-citizenship
complexe avec des extensions enfants code
et 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"
}
}
]
}
]
}
Extensions sur des types primitifs
Les types de données primitifs dans FHIR peuvent également comporter des extensions. Lorsqu'elles sont représentées au format JSON, les extensions sont représentées dans une propriété JSON supplémentaire avec la propriété _
ajouté au début du nom de l'élément primitif, tel que défini dans la Représentation JSON FHIR.
L'exemple suivant, au format JSON, montre une ressource Patient
avec une extension sur le champ birthDate
:
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"birthDate": "1970-01-01",
"_birthDate": {
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/date-type",
"valueString": "A"
}
]
}
}
Si l'élément primitif est répété, la propriété avec _
est également gérée comme un tableau, en utilisant des valeurs nulles pour aligner les valeurs de l'extension avec l'élément primitif correspondant.
L'exemple suivant montre une ressource Patient
avec une extension sur la deuxième valeur de name.given
, mais aucune extension sur la première valeur :
{
"resourceType": "Patient",
"name": {
"given": [
"ABC",
"DEF"
],
"_given": [
null,
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/display",
"valueString": "XYZ"
}
]
}
]
}
}
Définir une extension avec une ressource StructureDefinition
À des fins d'interopérabilité, le nom et la signification d'une extension peuvent être définis avec une ressource StructureDefinition
pouvant être publiée ou distribuée pour permettre aux consommateurs des données de les interpréter. Cette option est facultative lorsque vous utilisez des extensions dans l'API Cloud Healthcare.
L'identité de cette définition est indiquée par l'URL canonique.
dans l'URL . Pour toutes les données échangées entre organisations, il est recommandé d'utiliser une URL que les consommateurs de données peuvent suivre pour obtenir la StructureDefinition
. L'API Cloud Healthcare ne valide pas cette URL et ne tente pas de la résoudre.
Le contenu d'une ressource StructureDefinition
peut être complexe et est souvent
définies à l'aide d'outils de création de profils FHIR.
Extensions de modificateur
Extensions de modification
sont semblables aux extensions, mais sont stockées dans le champ modifierExtension
. Une extension de modificateur correspond à des données supplémentaires qui ne peuvent pas être ignorées, car elles peuvent invalider l'interprétation de l'élément qui la contient.
Par exemple, une extension de modificateur peut indiquer que le patient n'a pas la maladie spécifiée ou qu'un médicament ne doit pas être prescrit.
L'API Cloud Healthcare stocke et récupère les extensions de modificateur, mais ne tente pas d'interpréter leur signification. Les applications sont invitées à prendre les mesures appropriées lorsqu'elles rencontrent une extension de modificateur qu'elles ne comprennent pas, éventuellement en affichant un avertissement ou en refusant entièrement la ressource. Dans la mesure du possible, les responsables de l'implémentation doivent éviter d'utiliser des extensions de modification.