Artículo
· 15 hr atrás Lectura de 4 min

Creación de una extensión primitiva en un recurso FHIR

Una extensión "extiende" o mejora un recurso FHIR o un elemento de datos de forma personalizada. La extensión puede añadirse a la raíz de un recurso, como “Patient.ethnicity” en el perfil US Core, y también pueden añadirse a elementos individuales como HumanName, Address o Identifier.

¿Sabíais que también podéis añadir una extensión a un tipo de dato primitivo?

Los elementos primitivos normalmente almacenan un solo elemento y son el componente más básico en FHIR. Por ejemplo: "Keren", false, 1234, 12/08/2024, etc.

Por ejemplo, los recursos del paciente podrían verse así:

Los elementos gender, birthDate o family son elementos primitivos, basados en tipos de datos primitivos.

¿Cómo añadiríais una extensión a la propiedad birthDate o a la propiedad deceased?

Necesitaréis crear un segundo atributo con el mismo nombre, pero con un guion bajo como prefijo, por lo que la extensión primitiva para la propiedad birthDate será _birthDate.

El guion bajo le indica a FHIR que estás accediendo al Elemento base subyacente del tipo de dato primitivo.

Todos los elementos en FHIR heredan o descienden del elemento base. Este contiene dos atributos: extension e id.

En el ejemplo de abajo, añadí una extensión de “Época del año” a la propiedad birthDate y una extensión de “Está vivo” a la propiedad deceasedBoolean.

Hay varias formas de crear un recurso FHIR, aquí tenéis un ejemplo de cómo añadir una extensión primitiva en cada una de ellas.

  1. Usando un objeto dinámico para construir el recurso FHIR

Si creáis el recurso FHIR utilizando un objeto dinámico, podéis acceder directamente a la nueva extensión primitiva:

    set resource = {}

    set resource.resourceType     = "Patient"
    do resource.%Set("active",1,"boolean")
    set resource.gender           = "female"
    set resource.birthDate        = "1984-12-24"
    set resource."_birthDate"     = {}
    set resource."_birthDate".id  = "123456"
    set resource."_birthDate".extension = []

    set extension               = {}
    set extension.url            = "http://example.org/fhir/StructureDefinition/Holiday"
    set extension.valueString   = "Christmas"
    do resource."_birthDate".extension.%Push(extension)
    write resource.toJson()

y este será el resultado:

  1. Usando las clases HS.FHIR.DTL.VR4.Model.*

Aunque no se recomienda, podéis usar las clases HS.FHIR.DTL.VR4.Model.*, ya que tendríais una lista de primitiveExtension en cada nivel. Deberéis añadir vuestras extensiones primitivas allí, y luego simplemente referenciar vuestra propiedad al índice de esa extensión.

Aquí tenéis un ejemplo usando el Data Transformation Builder:

y así es como se haría lo mismo en código:

 // Create a new patient resource
 set resource=##class(HS.FHIR.DTL.vR4.Model.Resource.Patient).%New()

 set resource.active=1
 set resource.gender="female"
 // cretate a new extension
 set extension=##class(HS.FHIR.DTL.vR4.Model.Base.Extension).%New()
 set extension.url="http://example.org/fhir/StructureDefinition/Holiday"
 set extension.valueString="Christmas"
 // Add the extension to the primitive extension list
 do resource.primitiveExtension.Insert(extension)

 // point the property to the extention index (#1 in this example)
 set resource.birthDate=$listbuild("1984-12-24",1)
 write resource.ToJSON().Read()

Básicamente, el valor de la propiedad es una función $listbuild que recibe varios parámetros:

set resource.property = $listbuild("valor original de la propiedad",<índice de la extensión primitiva>,...)

  • El primer parámetro es el valor para la propiedad original; si deseáis omitir completamente la propiedad original, simplemente enviad una cadena vacía en lugar de un valor.
  • El segundo parámetro es el número de índice de la extensión primitiva requerida desde la lista de extensiones primitivas.
  • Si deseáis añadir varias extensiones primitivas a la misma propiedad, simplemente agregadlas también (después de haberlas añadido a la lista de extensiones primitivas, por supuesto):
set resource.birthDate=$listbuild("1984-12-24",1,3,4,7)
  1. Usando las clases del FHIR Object Model (desde la versión 2024.2)

Si estáis trabajando en Iris for Health versión 2024.2 o superior, quizás queráis hacer lo mismo usando las nuevas clases del FHIR Object Model. En esas clases, las extensiones primitivas ya están definidas para cada propiedad que las tenga. Así que, en nuestro caso, existe una propiedad birthDate y también una propiedad _birthDate.

Podéis usar las estructuras predefinidas para añadir una extensión primitiva:

    #dim patient as HS.FHIRModel.R4.Patient
    #dim extension as HS.FHIRModel.R4.Extension

    set patient=##class(HS.FHIRModel.R4.Patient).%New()
    set patient.gender="female"
    set patient.active=1
    set patient.birthDate="1984-12-24"
    // create a new element
    set element=##class(HS.FHIRModel.R4.Element).%New()
    do element.IncludeExtension()

    // create a new extension
    set extension=element.extension.MakeEntry()
    set extension.url="http://example.org/fhir/StructureDefinition/Holiday"
    set extension.valueString="Christmas"
    // add the extension to the element
    do element.extension.add(extension)
    
    // add the element to the resource
    set patient."_birthDate"=element
    
    write patient.toString()

De cualquier forma en la que queráis trabajar, ¡ahora podéis crear una extensión primitiva como unos profesionales!

Mirad los ejemplos en el Open Exchange para las 3 formas:

https://openexchange.intersystems.com/package/FHIR-Primitive-Extension

Comentarios (0)1
Inicie sesión o regístrese para continuar