Extensions FHIR

Cette page explique comment l'API Cloud Healthcare est compatible avec les extensions FHIR.

Aperçu

FHIR permet d'ajouter des extensions définies par l'utilisateur aux ressources et aux types de données. L'API Cloud Healthcare permet de stocker et de récupérer ces extensions.

Valeurs d'extension

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 de FHIR, à l'exception des versions antérieures, qui disposent de 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 extension contenant un tableau de valeurs, vous devez définir plusieurs éléments d'extension 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 élément d'extension doit comporter un élément de valeur ou 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 les 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 le champ "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éfini à l'aide d'outils d'écriture de profils FHIR.

Extensions de modificateur

Les extensions de modificateur 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 implémentateurs doivent éviter d'utiliser des extensions de modificateur.