---
{
  "title": "Cómo diseñar una API FHIR multi-tenant para un sistema EHR existente",
  "description": "Explore formas de reducir los costes de diseño utilizando una API FHIR multi-tenant con soporte SMART on FHIR y cumpla con la 21st Century Cures Act para sistemas EHR de forma ágil.",
  "date": "2024-07-08",
  "author": "Vlad Ganshin",
  "reading-time": "7 min read",
  "tags": [
    "System Design",
    "Infrastructure",
    "Compliance"
  ],
  "seo-tags": [
    "multitenancy",
    "fhir",
    "aidbox"
  ]
}
---

> For the complete documentation index, see [llms.txt](https://www.health-samurai.io/llms.txt).
> Use it to discover all available pages before guessing URLs.

---
La tendencia FHIR sigue dominando en 2024. [Las normas de la ONC](https://www.health-samurai.io/aidbox/resources/standardized-api-for-ehr-cheatsheet) suponen un reto considerable para los proveedores, ya que necesitan ofrecer una API HL7® FHIR con soporte SMART on FHIR para cada cliente.

Muchos proveedores de EHR aún tienen dudas sobre cómo reducir la carga de gestionar tantos [servidores FHIR](https://www.health-samurai.io/fhir-server). La respuesta es sencilla: la multitenencia es siempre la solución correcta.
En este artículo encontrará respuesta a las siguientes preguntas:
- ¿Qué es la multitenencia? ¿Cuáles son sus ventajas?
- ¿Cómo se construye una API FHIR [multi-tenant](/blog/managing-multi-clinic-data-and-real-time-synchronization-with-orgbac-and-subscriptions)?
- ¿Cómo se integra una API FHIR en su solución EHR existente?

![](image-1.avif)

## ¿Qué es la multitenencia?
La multitenencia es una ventaja clave de los sistemas ERP SaaS. En pocas palabras, es una forma de proporcionar recursos compartidos a varios clientes (tenants), donde cada cliente dispone de su propio entorno dedicado.

**Los tenants están aislados entre sí**, lo que significa que los datos de uno no serán visibles para otro en ningún caso. Los usuarios pueden acceder a sus propios datos sin vulnerar la privacidad ni los datos de otros tenants.

Esto la convierte en una opción atractiva para las empresas que necesitan compartir recursos entre varios usuarios, pero también deben mantener la privacidad y la seguridad de los datos individuales.

No obstante, al hablar de multitenencia, también debe tenerse en cuenta el aislamiento físico. El grado de aislamiento físico es flexible y puede ir desde una separación física completa hasta un espacio de alojamiento compartido en el que cada tenant dispone de su propio espacio único en la plataforma.

El grado de aislamiento físico entre los distintos tenants viene determinado por la tecnología subyacente, pero en general debe proporcionar un **aislamiento lógico completo** para garantizar que los datos de cada tenant permanezcan seguros ([**Gartner**](https://www.gartner.com/en/information-technology/glossary/multitenancy)).

[![](image-2.avif)](https://www.health-samurai.io/docs/aidbox/modules-1/security-and-access-control/security/multitenancy)

## ¿Qué ventajas ofrece la multitenencia?
Veamos ahora las ventajas de la multitenencia para los proveedores de EHR y otros servicios de plataforma:
- **Reducción de los costes operativos:** Del mismo modo que compartir un vehículo resulta más económico, compartir recursos en la nube también lo es. Así, obtiene muchos [servidores FHIR](https://www.health-samurai.io/fhir-server) al precio de uno.
- **Escalabilidad sencilla:** Los clientes tienen la opción de añadir o eliminar recursos. Esta adaptabilidad es ideal para empresas con un crecimiento rápido pero impredecible.
- **Seguridad de los datos:** Aunque el modelo de tenant único es más seguro, la multitenencia es más eficaz a la hora de identificar amenazas y aislar los recursos de cada tenant.

Dicho esto, ninguna solución es perfecta. Desde el punto de vista del host, la multitenencia es más compleja que el modelo de tenant único. No nos quedamos en la teoría, ¡siga leyendo!

> Comience con el [servidor FHIR](https://www.health-samurai.io/aidbox) de Aidbox para el almacenamiento de datos, integraciones, análisis sanitarios y mucho más, o [contrate a nuestro equipo](https://www.health-samurai.io/services) para cubrir sus necesidades de desarrollo de software.

## ¿Qué ocurre con FHIR?
FHIR no admite la multitenencia a nivel de especificación. De hecho, no es necesario que lo haga. Sin embargo, muchos [servidores FHIR](https://www.health-samurai.io/fhir-server) como [**Aidbox**](https://www.health-samurai.io/aidbox) combinan lo mejor de dos mundos: FHIR y la arquitectura multi-tenant. [*Obtenga más información sobre la multitenencia en la documentación de Aidbox*](https://www.health-samurai.io/docs/aidbox/modules-1/security-and-access-control/security/multitenancy).

La multitenencia es una cuestión de decisiones arquitectónicas internas. FHIR expone la FHIR_BASE_URL para poner la funcionalidad a disposición de terceros. Cada uno de sus clientes debe recibir su propia FHIR_BASE_URL. Lo explicaremos con más detalle a continuación.

![](image-3.avif)

## Implementación de la multitenencia
A continuación exploraremos algunas técnicas que pueden ayudarle a construir una solución altamente compartida. Además, permite migrar a un nivel inferior de multitenencia bajo demanda en caso de que algunos clientes necesiten recursos más dedicados. Para implementarla, debemos seguir algunos pasos clave:
- Definir los tenants de forma explícita;
- Marcar los datos con un ID de tenant para que pertenezcan a un tenant específico;
- Incorporar el ID de tenant en la FHIR_BASE_URL;
- Incorporar el ID de tenant en la AUTH_SERVER_BASE_URL.

Al finalizar el proceso, su cliente tendrá plena confianza en su aislamiento total a nivel de datos y API, lo cual estará plenamente justificado.

## Definir los tenants de forma explícita
Definir los tenants de forma explícita es fundamental por dos razones importantes:
- Inevitablemente querrá saber qué tenants tiene en su sistema;
- Con el tiempo, querrá realizar personalizaciones para ellos.

Los recursos de tenant explícitos son un buen lugar para rastrearlos e introducir configuraciones personalizadas específicas. Puede considerar la introducción de recursos adicionales:

> id: my-clinic resource
Type: Tenant 
name: My Clinic

![](image-4.avif)

## Los datos pertenecen al tenant
Esta es la razón por la que optamos por la multitenencia en primer lugar. Le sugiero que convierta el tenant en una propiedad explícita de cada recurso. Esto abrirá un gran espacio donde podrá almacenar datos, y también le permitirá llevar a cabo migraciones y evolucionar su infraestructura para satisfacer los requisitos de rendimiento a medida que crezcan.

La tenencia es una metapropiedad, así que tomemos [**Aidbox**](https://www.health-samurai.io/fhir-api) como ejemplo y veamos cómo la almacenamos bajo el campo meta en los recursos FHIR.

> # Aidbox format
meta:
tenant:
id: my-clinic
resourceType: Tenant

> # FHIR format
meta:
extension:
- url: <https://aidbox.app/tenant-id>
valueReference
reference: Tenant/my-clinic

Esta es una representación externa. En cuanto a la representación interna, podemos empezar con un enfoque sencillo desde el punto de vista de la infraestructura. Podemos almacenar los datos en una sola base de datos y una sola tabla por tipo de recurso.

La única restricción importante que veo es que tendrá que implementar el **filtrado por tenant a nivel de aplicación**, lo cual es un coste bastante razonable para mantener su infraestructura lo más simple posible.

En caso de que un tenant requiera más recursos, genere una carga elevada y afecte a otros tenants, siempre podrá migrar sus datos a otra base de datos y ejecutar una instancia dedicada de la misma aplicación para ese tenant.

[![](image-5.avif)](https://www.health-samurai.io/articles/aidbox-hipaa-book-technical-safeguards)

## La URL base de FHIR debe contener el ID de tenant
Cuando todos sus clientes disponen de una API FHIR dedicada, debe proporcionarles una FHIR_BASE_URL diferente sobre la que se ejecutará su servidor FHIR virtual. Hay dos formas de hacerlo:
- Puede incluir el ID de tenant en el nombre de dominio, como my-clinic.aidbox.app/fhir-api;
- El ID de tenant puede aparecer en la ruta de la URL, por ejemplo, aidbox.app/tenant/my-clinic/fhir-api.

Ambas opciones son válidas, aunque la primera resulta más precisa y limpia.

Si tiene acceso completo a su dominio y puede reservar subdominios para sus tenants, puede considerar incluir el ID de tenant en el nombre de dominio. Su aplicación también debe ser capaz de trabajar con diferentes dominios en la misma instancia, y generalmente así lo hace.

Incluir el ID de tenant en la ruta de la URL también es una opción válida. No requiere sacrificar tantos nombres de dominio, incluso si no tiene acceso a ellos. La [**API FHIR**](https://www.health-samurai.io/docs/aidbox/api-1/fhir-api) implementa el estilo REST, y la [**API REST**](https://www.health-samurai.io/docs/aidbox/api-1/api) no espera ninguna sesión entre solicitudes, lo que significa que no hay cookies de navegador.

### La autenticación debe pertenecer al tenant
Ahora disponemos de una API FHIR dedicada para cada cliente, y los datos en el almacenamiento también pertenecen a los tenants. El toque final es **dedicar el servidor de autenticación**. ¿Por qué? Puede preguntarse si es posible tener un único servidor de autenticación. Creo que no, y aquí le explico por qué.

Supongamos que un usuario tiene una cuenta en dos tenants diferentes. ¿Qué ocurre entonces? ¿Puede este usuario estar conectado simultáneamente a ambos tenants? Técnicamente, sí. Google es un buen ejemplo. Puede utilizar los servicios de Google y cambiar entre cuentas en un par de clics. Pero, ¿es esta la experiencia de usuario (UX) que busca? Creo que no. Hay dos razones para ello:
- Sus usuarios deberán seleccionar su cuenta cada vez que trabajen con cualquiera de sus tenants, aunque solo tengan una cuenta (no puede estar seguro de si tienen otras cuentas y tendrá que preguntarles cada vez que deseen interactuar con su API FHIR);
- Al saber que usted tiene diferentes tenants, sus usuarios podrían teóricamente interactuar con filtraciones externas. Nuestro objetivo es el aislamiento total desde el lado del usuario.

Pero esto no termina aquí, ya que el servidor de autenticación también debe ser multi-tenant. Esto puede lograrse siguiendo el mismo método que utilizamos para separar las API FHIR por tenants: una AUTH_BASE_URL dedicada. No importa si el ID de tenant aparece en el nombre de dominio o en la ruta de la URL. Lo único que importa es que los tenants puedan estar conectados simultáneamente a todos sus servidores de autenticación e interactuar con sus [servidores FHIR](https://www.health-samurai.io/fhir-server) como entidades independientes.

### Conclusión
Hay **cuatro pasos sencillos** para lograr la multitenencia:
- Defina su tenant de forma explícita y como elemento de primera clase;
- Guarde un enlace al tenant en cada recurso;
- Incorpore el ID de tenant en una URL base de FHIR;
- Haga que su servidor de autenticación también sea multi-tenant.

Una vez aplicados estos cuatro sencillos pasos, podrá crear un [servidor FHIR](https://www.health-samurai.io/fhir-server) sin costes de infraestructura adicionales, ya que solo necesita crear un recurso Tenant y un [servidor FHIR](https://www.health-samurai.io/fhir-server) virtual, lo que significa que el servidor de autenticación ya estará desplegado para él.

Si alguno de sus tenants supera su asignación, puede fácilmente **dedicar un nivel superior de aislamiento**. Simplemente necesita:
- desplegar la misma aplicación en otro servidor;
- migrar los datos del tenant;
- redirigir las solicitudes a la nueva aplicación.

### Actualización: Control de acceso jerárquico basado en organización mejorado
Recientemente hemos mejorado el sistema añadiendo un control de acceso jerárquico basado en organización. Esta nueva funcionalidad permite una gestión del acceso a los datos más flexible y precisa, basada en la jerarquía organizativa. Los administradores ahora pueden establecer permisos de acceso en distintos niveles organizativos, garantizando que los usuarios solo vean los datos que están autorizados a consultar. Esta mejora incrementa significativamente la seguridad y la capacidad de gestión del sistema, especialmente en organizaciones grandes con estructuras complejas. Puede encontrar información detallada sobre la nueva funcionalidad en la [documentación de Aidbox](https://www.health-samurai.io/docs/aidbox/modules-1/security-and-access-control/multitenancy/organization-based-hierarchical-access-control).

Para explorar la implementación de una API FHIR multi-tenant en su sistema EHR, considere utilizar la [versión gratuita de Aidbox](https://www.health-samurai.io/aidbox#run). Proporciona un entorno robusto para probar y desarrollar estas capacidades, ofreciendo todas las herramientas necesarias sin limitaciones de funcionalidades.

*Autor: Vlad Ganshin, Ingeniero de Software en Health Samurai*

**Si busca una API FHIR multi-tenant que le lleve al 2024 y más allá, pruebe**[ **el módulo de API FHIR Aidbox certificado por la ONC**](https://www.health-samurai.io/fhir-api) **hoy mismo.**
[![](image-6.avif)](https://www.health-samurai.io/fhir-api)

Véase también: [Por qué necesita un servidor FHIR independiente](/blog/why-you-need-independent-fhir-server-side-by-side-with-your-ehr-system).