Extensiones de FHIR

En esta página se explica cómo admite la API Cloud Healthcare las extensiones de FHIR.

Información general

FHIR permite extensiones definidas por el usuario en recursos y tipos de datos. La API Cloud Healthcare admite el almacenamiento y la recuperación de estas extensiones.

Valores de extensión

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 de opción 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 consultar en el estándar FHIR (DSTU2, STU3 y R4).

En el siguiente ejemplo se muestra un recurso Patient con dos extensiones (color de pelo y nacionalidad) 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 campo de valor. Para definir una extensión que contenga una matriz de valores, debe definir varios elementos de extensión con el mismo url.

No puede definir extensiones en el elemento raíz de los siguientes tipos de recursos:

  • Binary
  • Bundle
  • Parameters

Extensiones complejas

Las extensiones pueden contener extensiones para definir una estructura anidada. El nombre url de la extensión secundaria es relativo a la extensión externa. Cada elemento de 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 primitivos

Los tipos de datos primitivos de FHIR también pueden tener extensiones. Cuando se representan en formato JSON, las extensiones se representan en una propiedad JSON adicional con _ delante del nombre del elemento primitivo, tal como se define en la 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 primitivo se repite, la propiedad con _ también se trata como una matriz, con valores nulos que se usan para alinear los valores de extensión con sus primitivas correspondientes.

En el siguiente ejemplo se muestra un recurso Patient con una extensión en el segundo valor de name.given, pero no en el primero:

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

Definir una extensión con un StructureDefinition

Para que se pueda usar de forma conjunta, el nombre y el significado de una extensión se pueden definir con un recurso StructureDefinition que se puede publicar o distribuir para que los consumidores de los datos puedan interpretarlos. Este paso es opcional cuando se usan extensiones en la API Cloud Healthcare.

La identidad de esta definición se indica mediante la URL canónica en el campo "url". Para cualquier dato que se intercambie entre organizaciones, se recomienda usar una URL que los consumidores de datos puedan seguir para obtener el StructureDefinition. La API Cloud Healthcare no valida esta URL ni intenta resolverla.

El contenido de un recurso StructureDefinition puede ser complejo y, a menudo, se define con herramientas para crear perfiles de FHIR.

Extensiones de modificadores

Las extensiones de modificador son similares a las extensiones, pero se almacenan en el campo modifierExtension. Una extensión de modificador es información adicional que no se puede ignorar porque podría invalidar la interpretación del elemento que la contiene.

Por ejemplo, una extensión de modificador podría indicar que el paciente no tiene la afección especificada o que no se debe recetar un medicamento.

La API de Cloud Healthcare almacena y obtiene extensiones de modificadores, pero no intenta interpretar su significado. Se recomienda que las aplicaciones tomen las medidas oportunas cuando se encuentren con una extensión de modificador que no entiendan, como mostrar una advertencia o rechazar el recurso por completo. Los implementadores deben evitar el uso de extensiones de modificador siempre que sea posible.