Tutorial

FHIR con Node.js: APIs modernas para la salud

David Zambrano
9/28/2025
25 minutos
6 vistas
Node.js

Introducción práctica a FHIR con Node.js: APIs modernas para la salud

La interoperabilidad en sanidad ha evolucionado. Durante años, HL7 v2 fue el estándar dominante, pero con la llegada de FHIR (Fast Healthcare Interoperability Resources), los sistemas sanitarios empiezan a migrar hacia un modelo más moderno y centrado en APIs REST y JSON.

En este artículo explicaré qué es FHIR, cuáles son sus ventajas frente a HL7 v2, cómo están adoptándolo los hospitales y cómo podemos implementar un servidor y cliente FHIR sencillo con Node.js. Todo con ejemplos prácticos y técnicos.


¿Qué es FHIR?

FHIR (Fast Healthcare Interoperability Resources) es un estándar de interoperabilidad desarrollado por HL7 International.
Su objetivo es facilitar el intercambio de datos clínicos de forma moderna, usando tecnologías ampliamente conocidas en el desarrollo web.

Características clave:

  • Recursos (Resources): entidades normalizadas como Patient, Observation, Medication.
  • APIs RESTful: acceso mediante HTTP con métodos estándar (GET, POST, PUT, DELETE).
  • Formatos comunes: JSON y XML, fáciles de consumir por aplicaciones modernas.
  • Extensible: permite añadir campos personalizados sin romper la compatibilidad.

Ejemplo de recurso Patient en formato JSON:

{
  "resourceType": "Patient",
  "id": "123",
  "name": [{
    "use": "official",
    "family": "García",
    "given": ["María"]
  }],
  "gender": "female",
  "birthDate": "1985-05-10"
}

Ventajas de FHIR frente a HL7 v2

  • Legible y amigable: JSON es mucho más claro que mensajes planos con pipes.
  • Soporte nativo para la web: se integra fácilmente con apps móviles y web modernas.
  • Estándar de facto en nuevas implementaciones: cada vez más hospitales y startups lo adoptan.
  • Interoperabilidad global: soportado por organismos internacionales, aseguradoras y proveedores de software sanitario.

FHIR y Node.js: una pareja natural

Gracias a que FHIR se basa en HTTP y JSON, integrarlo con Node.js es directo.
Podemos:

  • Crear un servidor FHIR con Express.
  • Consumir recursos FHIR desde cualquier cliente REST.
  • Integrar datos FHIR en dashboards en tiempo real.
  • Conectar FHIR con bases de datos SQL o NoSQL.

Librerías útiles:

  • fhir-kit-client: cliente para consumir servidores FHIR.
  • express: framework para construir APIs REST.
  • mongoose: para mapear recursos FHIR en MongoDB.

Ejemplo práctico: servidor FHIR con Node.js y Express

Vamos a montar un servidor FHIR sencillo que gestione recursos Patient.

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.json());

// Memoria temporal para pacientes
let patients = [];

// Crear paciente (POST /Patient)
app.post('/Patient', (req, res) => {
  const patient = req.body;
  patient.id = patients.length + 1;
  patients.push(patient);
  res.status(201).json(patient);
});

// Obtener lista de pacientes (GET /Patient)
app.get('/Patient', (req, res) => {
  res.json(patients);
});

// Obtener paciente por ID (GET /Patient/:id)
app.get('/Patient/:id', (req, res) => {
  const patient = patients.find(p => p.id == req.params.id);
  if (!patient) return res.status(404).json({ error: "Paciente no encontrado" });
  res.json(patient);
});

app.listen(3000, () => {
  console.log("Servidor FHIR corriendo en http://localhost:3000");
});

Este servidor soporta:

  • Crear pacientes con POST.
  • Listar pacientes con GET.
  • Consultar un paciente por ID.

Ejemplo de creación vía curl:

curl -X POST http://localhost:3000/Patient   -H "Content-Type: application/json"   -d '{
    "resourceType": "Patient",
    "name": [{"family": "López", "given": ["Ana"]}],
    "gender": "female",
    "birthDate": "1990-01-01"
  }'

Ejemplo práctico: consumir un servidor FHIR con Node.js

Ahora, usando fhir-kit-client, podemos conectarnos a un servidor público FHIR.

const FhirClient = require('fhir-kit-client');

const client = new FhirClient({ baseUrl: 'https://hapi.fhir.org/baseR4' });

async function run() {
  const patient = await client.read({ resourceType: 'Patient', id: 'example' });
  console.log("Paciente FHIR:", patient);
}

run();

Esto conecta contra un servidor público de prueba y descarga un recurso Patient.


Buenas prácticas con FHIR

  • Cumple con las versiones: FHIR tiene R2, R3, R4 (la más usada) y R5 en desarrollo.
  • Seguridad: implementa autenticación OAuth2 / SMART on FHIR para datos reales.
  • Persistencia: usa bases de datos adecuadas para manejar recursos (MongoDB, PostgreSQL).
  • Validación: valida siempre los recursos contra los perfiles oficiales.

Conclusión

FHIR es el futuro de la interoperabilidad en salud. Mientras HL7 v2 sigue siendo necesario en muchos entornos, cada vez más hospitales, aseguradoras y startups migran hacia APIs modernas basadas en FHIR.

Con Node.js y librerías disponibles en npm, es sencillo crear servidores y clientes que trabajen con FHIR. Esto abre la puerta a aplicaciones de salud más ágiles, interoperables y conectadas con el ecosistema digital actual.