---
{
  "title": "Gestión de datos multiconsultorio y sincronización en tiempo real con OrgBAC y Subscriptions",
  "description": "Gestionar múltiples clínicas es complejo: cada centro necesita autonomía, pero la red sigue requiriendo supervisión y flujo de datos en tiempo real. OrgBAC y Subscriptions en Aidbox lo simplifican con aislamiento automático y entrega instantánea de eventos.",
  "date": "2025-12-09",
  "author": "Aleksandr Penskoi",
  "reading-time": "7 minutes",
  "tags": [
    "System Design",
    "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.

---
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)](https://www.health-samurai.io/docs/aidbox/access-control/authorization/scoped-api/organization-based-hierarchical-access-control) y [Subscriptions basadas en temas](https://www.health-samurai.io/docs/aidbox/modules/topic-based-subscriptions/aidbox-topic-based-subscriptions).

## OrgBAC: Aislamiento jerárquico de datos

OrgBAC permite representar una jerarquía organizativa dentro del [servidor FHIR Aidbox](https://www.health-samurai.io/fhir-server) 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:


```javascript
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/fhir` para MedCorp HQ
- `/Organization/city-general-hospital/fhir` para City General Hospital
- `/Organization/riverside-clinic/fhir` para 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:


```javascript
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)](https://www.health-samurai.io/docs/aidbox/access-control/authorization/scoped-api/organization-based-hierarchical-access-control)

## 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](https://www.health-samurai.io/docs/aidbox/overview/release-notes#september-2025-stable-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:


```javascript
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.


```javascript
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://med-corp-hq.requestcatcher.com/)
- [https://riverside-clinic.requestcatcher.com](https://riverside-clinic.requestcatcher.com/)
- [https://city-general-hospital.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:
![](image-1.avif)

### Pruébelo usted mismo mediante la Consola REST

- Cree un paciente:


```javascript
POST /Organization/city-general-hospital/fhir/Patient

id: pt-1
name: [{"family": "Smith"}]
```


  - 
Cree una observación:


```javascript
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](/blog/topic-based-subscriptions-top-5-use-cases-for-digital-health) 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](https://www.health-samurai.io/docs/aidbox/getting-started) para implementar OrgBAC y las subscriptions basadas en temas en su organización, o [explore la documentación](https://www.health-samurai.io/docs) para obtener guías de implementación detalladas.

Véase también: [RBAC con Keycloak y SMART on FHIR V2](/blog/implementing-role-based-access-control-for-fhir-resources-with-keycloak-and-smart-on-fhir-v2).