Las organizaciones sanitarias gestionan con frecuencia estructuras jerárquicas complejas: redes hospitalarias regionales compuestas por instalaciones diversas que deben equilibrar recursos compartidos con autonomía organizativa. Además, muchos sistemas de salud específicos de cada clínica necesitan una arquitectura orientada a eventos para la sincronización de datos en tiempo real entre entidades interconectadas. Aidbox resuelve estos desafíos con dos funcionalidades potentes: Control de acceso jerárquico basado en organización (OrgBAC) y Subscriptions basadas en temas.
OrgBAC: Aislamiento jerárquico de datos
OrgBAC permite representar una jerarquía organizativa dentro del servidor FHIR Aidbox y proporciona endpoints de la API FHIR con aislamiento de datos automático.
Imagine una red sanitaria como la siguiente:
- MedCorp HQ (organización matriz con acceso completo a todos los datos de la red)City General Hospital (sucursal con acceso limitado restringido a sus propios datos organizativos)
- Riverside Clinic (sucursal con acceso limitado restringido a sus propios datos organizativos)
Para ilustrar esto, el bundle siguiente muestra cómo se crea cada organización en la jerarquía a través de la API REST:
POST /fhir
resourceType: Bundle
type: batch
entry:
- request:
method: PUT
url: Organization/med-corp
resource:
name: MedCorp HQ
resourceType: Organization
- request:
method: PUT
url: Organization/city-general-hospital
resource:
name: City General Hospital
resourceType: Organization
partOf:
reference: Organization/med-corp
- request:
method: PUT
url: Organization/riverside-clinic
resource:
name: Riverside Clinic
resourceType: Organization
partOf:
reference: Organization/med-corp
Cada una dispone de un endpoint dedicado:
/Organization/med-corp/fhirpara MedCorp HQ/Organization/city-general-hospital/fhirpara City General Hospital/Organization/riverside-clinic/fhirpara Riverside Clinic
Cualquier recurso creado a través del endpoint de una organización queda etiquetado automáticamente con su ID de organización, garantizando un aislamiento adecuado sin ninguna configuración adicional:
PUT /Organization/city-general-hospital/fhir/Patient/pt-123
name: [ { family: 'John' } ]
---
meta:
extension:
- url: https://aidbox.app/tenant-organization-id
valueReference:
reference: Organization/city-general-hospital
id: pt-123
resourceType: Patient
name:
- family: Smith
La lógica de acceso subyacente es sencilla y predecible:
- MedCorp HQ ve todo lo procedente de todas las sucursales (
GET /Organization/med-corp/fhir/Patient) - City General ve únicamente sus propios datos (
GET /Organization/city-general-hospital/fhir/Patient) - Riverside ve únicamente sus propios datos (
GET /Organization/riverside-clinic/fhir/Patient)
Para más información sobre las funcionalidades y la configuración de OrgBAC, consulte la documentación: Control de acceso jerárquico basado en organización (OrgBAC)
Subscriptions basadas en temas: Eventos en tiempo real
Las Subscriptions permiten la sincronización de datos en tiempo real mediante webhooks, Kafka y diversas colas de mensajes. A partir de Aidbox 2509, las subscriptions respetan automáticamente los límites organizativos. Cuando se crea una subscription a través de la API de una organización, esta hereda las reglas de filtrado jerárquico.
Esto garantiza:
- Flujo jerárquico: La subscription de MedCorp HQ captura eventos de todas las sucursales
- Temas delimitados: Las subscriptions de City General y Riverside solo reciben sus propios eventos
- Seguridad: Los eventos nunca se filtran entre organizaciones hermanas
Se requieren dos componentes clave para la configuración:
- AidboxSubscriptionTopic: define qué tipos de eventos deben desencadenar notificaciones. El ejemplo siguiente captura cada Observation final en toda la red de MedCorp:
POST /Organization/med-corp/fhir/AidboxSubscriptionTopic
{
"resourceType": "AidboxSubscriptionTopic",
"url": "http://aidbox.example/observation-feed",
"status": "active",
"trigger": [{
"resource": "Observation",
"fhirPathCriteria": "status = 'final'"
}]
}
AidboxTopicDestination: especifica dónde enviar las notificaciones. Cada organización tiene su propio destino creado a través de su endpoint dedicado. El bundle siguiente muestra cómo se crean estos destinos a través de la Consola REST.
POST /
resourceType: Bundle
type: batch
entry:
# MedCorp HQ destination - receives events from entire network
- request:
method: POST
url: /Organization/med-corp/fhir/AidboxTopicDestination
resource:
id: med-corp-observation-feed
resourceType: AidboxTopicDestination
meta:
profile: ["http://aidbox.app/StructureDefinition/aidboxtopicdestination-webhook-at-least-once"]
kind: webhook-at-least-once
topic: http://aidbox.example/observation-feed
parameter:
- name: endpoint
valueUrl: https://med-corp-hq.requestcatcher.com/test
# City General Hospital destination - receives only its events
- request:
method: POST
url: /Organization/city-general-hospital/fhir/AidboxTopicDestination
resource:
id: city-general-observation-feed
resourceType: AidboxTopicDestination
meta:
profile: ["http://aidbox.app/StructureDefinition/aidboxtopicdestination-webhook-at-least-once"]
kind: webhook-at-least-once
topic: http://aidbox.example/observation-feed
parameter:
- name: endpoint
valueUrl: https://city-general-hospital.requestcatcher.com/test
# Riverside Clinic destination - receives only its events
- request:
method: POST
url: /Organization/riverside-clinic/fhir/AidboxTopicDestination
resource:
id: riverside-observation-feed
resourceType: AidboxTopicDestination
meta:
profile: ["http://aidbox.app/StructureDefinition/aidboxtopicdestination-webhook-at-least-once"]
kind: webhook-at-least-once
topic: http://aidbox.example/observation-feed
parameter:
- name: endpoint
valueUrl: https://riverside-clinic.requestcatcher.com/test
Puede supervisar las solicitudes recibidas por cada organización mediante las siguientes URLs (ábralas antes de producir eventos):
- https://med-corp-hq.requestcatcher.com
- https://riverside-clinic.requestcatcher.com
- https://city-general-hospital.requestcatcher.com
El diagrama siguiente ilustra cómo fluyen los eventos a través del sistema. Las flechas verdes muestran el flujo de eventos de MedCorp HQ, mientras que las flechas amarillas muestran el flujo de eventos de City General Hospital:

Pruébelo usted mismo mediante la Consola REST
- Cree un paciente:
POST /Organization/city-general-hospital/fhir/Patient
id: pt-1
name: [{"family": "Smith"}]
Cree una observación:
POST /Organization/city-general-hospital/fhir/Observation
resourceType: Observation
status: final
code:
coding:
- system: http://loinc.org
code: 15074-8
display: Glucose [Moles/volume] in Blood
subject:
reference: Patient/pt-1
valueQuantity:
value: 6.3
unit: mmol/l
system: http://unitsofmeasure.org
code: mmol/L
Compruebe que http://med-corp-hq.requestcatcher.com y https://city-general-hospital.requestcatcher.com deben recibir los eventos de creación de la observación.
Conclusión
OrgBAC y las subscriptions basadas en temas juntas crean una base sólida para arquitecturas sanitarias multitenant. Esta combinación aporta valor inmediato:
- Supervisión jerárquica: Las organizaciones matrices monitorizan todas las sucursales mientras cada centro mantiene la autonomía de sus datos
- Aislamiento sin configuración: Los límites de datos se aplican automáticamente, sin necesidad de control de acceso manual
- Sincronización en tiempo real: Los eventos críticos fluyen de forma instantánea hacia paneles de control, facturación y sistemas de calidad
- Seguridad integrada: Los límites organizativos evitan la fuga de datos entre instalaciones hermanas
- Eficiencia para el desarrollador: Conformidad nativa con FHIR sin middleware personalizado ni infraestructura compleja
Tanto si está diseñando una red hospitalaria regional, gestionando múltiples clínicas o construyendo un sistema EHR multiconsultorio, Aidbox proporciona la base segura y escalable que su sistema de salud necesita.
Comience a utilizar una licencia gratuita para desarrolladores para implementar OrgBAC y las subscriptions basadas en temas en su organización, o explore la documentación para obtener guías de implementación detalladas.
Véase también: RBAC con Keycloak y SMART on FHIR V2.







