En esta página, se explica cómo la API de Cloud Healthcare admite las extensiones de FHIR.
Descripción general
FHIR permite las extensiones definidas por el usuario en recursos y tipos de datos. La API de Cloud Healthcare admite el almacenamiento y la recuperación de estas extensiones.
Valores de extensiones
Un elemento de extensión es un par clave-valor. La clave, almacenada en el campo url
, indica la URL canónica de una definición de extensión que define el contenido y el significado de la extensión. El campo value
es un elemento opcional que puede contener muchos tipos de datos FHIR diferentes.
Este mecanismo es el mismo en todas las versiones de FHIR, excepto que las versiones anteriores tienen menos tipos de datos disponibles. Los tipos de datos disponibles para las extensiones se pueden encontrar en el recurso estándar de FHIR (DSTU2, STU3, R4). .
En el siguiente ejemplo, se muestra un recurso Patient
con dos extensiones, color de cabello y ciudadanía, en el elemento raíz:
{
"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"
}]
}
}
]
}
Los tipos de datos complejos y los elementos con campos secundarios también pueden tener extensiones. Por ejemplo, este Patient
contiene una extensión en el campo identifier
, que es un tipo de datos complejo, y una extensión en el campo communication
que tiene otros campos secundarios:
{
"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
}
]
}
]
}
Cada elemento de extensión solo puede tener un único campo de valor. Para definir una extensión que contenga un arreglo de valores, debes definir varios elementos de extensión con el mismo url
.
No puedes definir extensiones en el elemento raíz para los siguientes tipos de recursos:
Binary
Bundle
Parameters
Extensiones complejas
Las extensiones pueden contener extensiones que definan una estructura anidada. El nombre url
de la extensión secundaria está relacionado con la extensión externa. Cada elemento de la extensión debe tener un elemento de valor o una extensión secundaria anidada, pero no ambos.
En el siguiente ejemplo, se muestra un recurso Patient
que contiene una extensión patient-citizenship
compleja con las extensiones secundarias code
y 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"
}
}
]
}
]
}
Extensiones en tipos de datos básicos
Los tipos de datos básicos en FHIR también pueden tener extensiones. Cuando se representan en formato JSON, las extensiones se representan en una propiedad JSON adicional con lo siguiente: _
antepuesto al nombre del elemento básico, como se define en Representación JSON de FHIR.
En el siguiente ejemplo, en formato JSON, se muestra un recurso Patient
con una extensión en el campo birthDate
:
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"birthDate": "1970-01-01",
"_birthDate": {
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/date-type",
"valueString": "A"
}
]
}
}
Si el elemento básico se repite, la propiedad con _
también se maneja como un array, con valores nulos que se usan para alinear los valores de la extensión con sus primitivos correspondientes.
En el siguiente ejemplo, se muestra un recurso Patient
con una extensión en el segundo valor de name.given
, pero sin extensión en el primer valor:
{
"resourceType": "Patient",
"name": {
"given": [
"ABC",
"DEF"
],
"_given": [
null,
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/display",
"valueString": "XYZ"
}
]
}
]
}
}
Define una extensión con un StructureDefinition
Para interoperabilidad, el nombre y el significado de una extensión se pueden definir con un recurso StructureDefinition
que se pueda publicar o distribuir para permitir que los consumidores de los datos lo interpreten. Esto es opcional cuando se usan extensiones en la API de Cloud Healthcare.
La identidad de esta definición se indica mediante la URL canónica en el campo “url”. Para los datos que se intercambian entre organizaciones, se recomienda utilizar una URL que los consumidores de datos puedan seguir para obtener el StructureDefinition
. La API de Cloud Healthcare no valida esta URL ni intenta resolverla.
El contenido de un recurso StructureDefinition
puede ser complejo y, a menudo, se define mediante herramientas para crear perfiles de FHIR.
Extensiones de modificador
Las extensiones de modificadores son similares a las extensiones, pero se almacenan en el campo modifierExtension
. Una extensión modificadora son datos adicionales que no se pueden ignorar, ya que podrían invalidar la interpretación del elemento que lo contiene.
Por ejemplo, una extensión modificadora podría indicar que el paciente no tiene la condición especificada o que un fármaco no se debe prescribir.
La API de Cloud Healthcare almacena y recupera las extensiones modificables, pero no intenta interpretar su significado. Se recomienda a las aplicaciones tomar las medidas adecuadas cuando se encuentran con una extensión modificadora que no entienden, posiblemente mediante la visualización de una advertencia o el rechazo completo del recurso. Los implementadores deben evitar el uso de extensiones modificadores siempre que sea posible.