Desarrollador ← Perspectivas

Conoce FSH: El Lenguaje que Hace los Perfiles FHIR Soportables

Si alguna vez abriste un StructureDefinition JSON de FHIR, probablemente tuviste una de estas dos reacciones:

  • "Vaya, esto es... verboso."
  • "Tiene que haber una forma mejor."

La hay. Se llama FHIR Shorthand (FSH).

A pesar de su nombre, FSH no es otro est谩ndar de interoperabilidad. No reemplaza a FHIR ni cambia c贸mo los sistemas intercambian datos. Es simplemente un lenguaje dise帽ado para que la autor铆a de artefactos FHIR sea agradable para humanos en lugar de para m谩quinas.

En lugar de editar miles de l铆neas de JSON, escribes definiciones concisas y legibles que describen tu intenci贸n. Un compilador llamado SUSHI luego traduce tus archivos FSH a los artefactos JSON de FHIR requeridos por el IG Publisher.

驴Por qu茅 se cre贸 FSH?

FHIR est谩 dise帽ado para computadoras. Las Gu铆as de Implementaci贸n las escriben humanos. Son audiencias muy diferentes.

Tomemos un requisito simple:

Cada paciente en mi pa铆s debe tener un identificador nacional.

Expresar eso como restricciones dentro de un StructureDefinition JSON se vuelve r谩pidamente dif铆cil de leer y mantener. Con FSH, la misma idea se convierte en algo mucho m谩s cercano a documentaci贸n que a programaci贸n:

FSH
Profile: MyPatient
Parent: Patient

* identifier 1..*
* identifier.system = "https://mycountry.gov/patient-id"

Te concentras en qu茅 quieres restringir, no en la mec谩nica del JSON subyacente.

驴Qu茅 puedes crear con FSH?

La mayor铆a asocia FSH con perfiles, pero puede definir casi cualquier artefacto involucrado en una Gu铆a de Implementaci贸n:

  • Perfiles
  • Extensiones
  • Modelos L贸gicos
  • Value Sets
  • Code Systems
  • Instancias
  • Invariantes
  • Mappings

Si est谩s construyendo una Gu铆a de Implementaci贸n, lo m谩s probable es que pases la mayor parte del tiempo escribiendo FSH en lugar de editar JSON directamente.

El ecosistema FSH

Una de las cosas que me confundi贸 al principio fue entender d贸nde encaja FSH en la cadena de herramientas FHIR. Es m谩s f谩cil pensarlo como un flujo de trabajo de autor铆a:

Especificaci贸n FHIR
Define los requisitos de tu proyecto
Crea artefactos FHIR en FSH
SUSHI
Artefactos FHIR JSON (Perfil, Extensi贸n, ValueSet, etc.)
HL7 IG Publisher
Sitio web de la Gu铆a de Implementaci贸n

FSH no es otro est谩ndar de interoperabilidad. Es simplemente el lenguaje que usas mientras escribes una Gu铆a de Implementaci贸n.

Tu primer perfil

Creemos el perfil m谩s peque帽o posible:

FSH
Profile: SimplePatient
Parent: Patient

* active = true

Eso es todo. Ejecutar SUSHI genera un StructureDefinition v谩lido que representa la misma restricci贸n como un perfil FHIR. SUSHI es el compilador de referencia que transforma FSH en los artefactos JSON consumidos por el resto de la cadena de publicaci贸n FHIR.

Agregando restricciones

El verdadero poder de FSH aparece a medida que tus perfiles crecen. En lugar de editar estructuras JSON anidadas, las restricciones se mantienen concisas y legibles.

Por ejemplo, puedes:

  • Cambiar cardinalidades
  • Fijar valores
  • Restringir tipos de datos
  • Vincular ValueSets
  • Definir slices
  • Crear invariantes
  • Referenciar extensiones

Cada una de estas cosas generalmente puede expresarse en una sola l铆nea en lugar de docenas de elementos JSON.

Creando extensiones

Los perfiles restringen recursos existentes. Las extensiones agregan informaci贸n que no forma parte de la especificaci贸n base de FHIR. Afortunadamente, la sintaxis es muy similar:

FSH
Extension: Nationality
Id: nationality

* value[x] only CodeableConcept

Una vez compilado, esto se convierte en un StructureDefinition FHIR normal que representa una Extensi贸n.

De FSH a JSON con SUSHI

Una vez que hayas escrito tus archivos .fsh, generar los artefactos FHIR es sencillo:

shell
sushi .

SUSHI lee el proyecto FSH, procesa cada definici贸n y produce los recursos FHIR correspondientes como JSON. Tambi茅n se integra naturalmente con el HL7 IG Publisher, que genera el sitio web final de la Gu铆a de Implementaci贸n.

Tambi茅n puedes inicializar un nuevo proyecto con:

shell
sushi init

Esto crea la estructura de proyecto recomendada, incluyendo el directorio input/fsh donde viven tus archivos FSH y el archivo de configuraci贸n necesario para la compilaci贸n.

Consejos desde la experiencia

En lugar de aprender primero todas las palabras clave de FSH, aprende el flujo de trabajo. Entiende estas cuatro piezas:

  1. Recursos FHIR
  2. Perfiles
  3. FSH
  4. SUSHI

Una vez que esos conceptos encajan, el lenguaje en s铆 es sorprendentemente peque帽o. Tambi茅n recomiendo:

  • Visual Studio Code con la extensi贸n FSH
  • Git para control de versiones
  • Un archivo .fsh por perfil o extensi贸n
  • Aliases desde el principio — te ahorrar谩n mucho tipeo
  • RuleSets cuando notes que repites las mismas restricciones en m煤ltiples perfiles

驴Qu茅 sigue?

En las pr贸ximas gu铆as veremos:

  • Construir un proyecto FSH completo
  • Perfilar Observations
  • Escribir extensiones reutilizables
  • ValueSets y bindings de terminolog铆a
  • Slicing sin perder la cordura
  • Publicar una Gu铆a de Implementaci贸n
FHIR define lo que intercambian las computadoras. FSH define lo que los desarrolladores realmente quieren escribir.

驴Tienes alguna pregunta?

Dinos c贸mo podemos ayudarte.

Empresa CaboLabs Health Informatics
Direcci贸n Juan Paullier 995, Montevideo, Uruguay
Tel茅fono +598 99 043 145