Paramètres de recherche intégrés de FHIR
La spécification FHIR définit une interface HTTP pour des données médicales complexes, incluant des informations « simples » sur les patients comme l'historique de leurs déclarations, approbations, observations, et ainsi de suite. Ces données sont représentées sous forme d'un ensemble de ressources hiérarchiques connectées (objets JSON) pouvant contenir : des éléments facultatifs, des objets, des tableaux, des éléments polymorphes (pouvant avoir plus d'un type de données, comme les types de données algébriques), ainsi que des extensions (des éléments propres à FHIR, que j'expliquerai plus loin).
L'un des problèmes : comment interroger et rechercher de telles données? Par exemple, nous devons trouver tous les patients ayant une profession particulière. Comment formuler de telles requêtes dans une URL? Écrire des requêtes complexes comme FHIRPath ou JSONPath directement dans une URL n'est pas lisible.
Paramètres de recherche intégrés de FHIR
La réponse de FHIR à ce problème est le Search Parameter. Pour simplifier, nous pouvons les considérer comme des alias pour des requêtes FHIRPath. Voici quelques exemples pour la ressource Patient — ce sont des paramètres de recherche intégrés :
active
Pour trouver les dossiers de patients actifs. Dans une URL, cela ressemblera à GET /fhir/Patient?active=true. C'est un peu plus simple que le FHIRPath réel :
FHIRPath: `Patient.active`.
email
Cet exemple est un peu plus complexe, car le courriel peut se trouver à différents endroits selon les ressources.
FHIRPath :
Patient.telecom.where(system='email')
| Person.telecom.where(system='email')
| Practitioner.telecom.where(system='email')
| PractitionerRole.contact.telecom.where(system='email')
| RelatedPerson.telecom.where(system='email')
Ce que nous observons ici :
-
Il peut s'appliquer à plusieurs types de ressources.
-
L'information sur le courriel se trouve à différents endroits selon les ressources (généralement dans l'objet
telecom, mais elle peut aussi se trouver à l'intérieur decontact). -
En général, toutes les informations de contact sont regroupées dans un seul tableau ; nous devons donc filtrer uniquement les informations de type « courriel » à l'aide de l'expression
where(...).
Au-delà des paramètres de recherche intégrés
Les paramètres de recherche intégrés ne seraient pas très utiles si nous ne pouvions couvrir que les cas standards.
Parfois, nous devons stocker des informations « personnalisées », comme des renseignements sur la profession d'un patient, qui ne font pas partie de la ressource Patient, mais qui peuvent être significatifs pour certaines applications. Dans ce cas, nous pouvons associer ces informations en tant qu'extension de la ressource, de la manière suivante, tel qu'illustré dans Extension Element :
{
"resourceType": "Patient",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-citizenship",
"extension": [
{
"url": "code",
"valueCodeableConcept": {
"coding": [
{
"system": "urn:iso:std:iso:3166",
"code": "DE"
}
]
}
},
{
"url": "period",
"valuePeriod": {
"start": "2009-03-14"
}
}
]
}
]
}
Pour rechercher de tels objets, nous pouvons définir des paramètres de recherche personnalisés comme suit :
{
"resourceType": "SearchParameter",
"id": "patient-citizenship",
"url": "http://example.org/fhir/SearchParameter/patient-citizenship",
"version": "1.0.0",
"name": "citizenship",
"status": "active",
"description": "Search patients by citizenship",
"code": "citizenship",
"base": [
"Patient"
],
"type": "string",
"expression": "Patient.extension.where(url='http://hl7.org/fhir/StructureDefinition/patient-citizenship').value.as(string)"
}
Et nous pouvons l'utiliser dans une URL comme suit : GET /fhir/Patient?citizenship=GB
En conclusion, les Search Parameters de FHIR, combinés à FHIRPath, constituent des outils puissants et extensibles pour rechercher des données médicales complexes. Vous pouvez trouver des informations sur la façon de les utiliser dans Aidbox, ainsi que d'autres exemples, dans la documentation.
Voir aussi : Resolve FHIR SearchParameters Conflicting et New Resource Browser.




