Ir al contenido

Qué hace y para quién

Desarrolladores internos de EMA construyendo productos FHIR-native multi-país y multi-tenant: emaclinic, emalab, emavault, emawell. No es un producto cliente-facing — es plumbing del ecosistema.

Si cada producto hablara con Aidbox a mano, repetiríamos 5 veces los mismos errores. Las cosas que cuesta hacer bien:

  1. Multi-tenancy. Cada tenant tiene su Aidbox client OAuth2 y su URL /Organization/{id}/fhir/*. Hacerlo a mano se olvida en endpoints nuevos.
  2. Meta inyectado correctamente. Cada recurso debe tener meta.profile (canonical sin versión) y meta.tag (urn:ema:tenant, urn:ema:ig-version). Si un producto se olvida, Aidbox no valida y los reportes regulatorios quedan rotos.
  3. Multi-país sin redeployar. El canonical base del IG cambia cuando Vault publica un país nuevo. Si está hardcoded en el producto, hay que rebuildear y redeployar todo.
  4. Validadores nacionales. RUN, CURP, RFC, DNI son re-implementados mal cada vez que un producto los necesita.
  5. Tipado FHIR. 35 recursos R4 a mano es trabajo, y mantener tipos sincronizados con el spec no es trivial.
  • Tenant scoping automático. Pasás el tenant una vez al crear el cliente, todas las requests salen scope-adas.
  • Meta auto-inyectada. create() y update() agregan meta.profile y meta.tag antes del write. Idempotente, no duplica.
  • ProfileResolver runtime. Cuando Vault publica un país nuevo o cambia un canonical, los productos lo reflejan en menos de 5 minutos sin redeployar.
  • Tipos correctos. 35 recursos FHIR R4 con ResourceTypeMap que infiere el tipo de retorno automático.
  • Validadores listos. validateRun, validateCurp, validateRfc, validateDni con checksum real.
  • Helpers que usás todo el día. ref(), transaction(), search() cubren los patrones repetitivos.
  • Zero-dep en runtime. El SDK no carga librerías; sólo fetch nativo. Funciona en Workers, Deno, Bun, Node 18+.

Diferencia con escribir fetch a Aidbox a mano

Sección titulada «Diferencia con escribir fetch a Aidbox a mano»

No es un thin wrapper. El SDK encapsula decisiones de dominio EMA:

Fetch a manoEMA FHIR SDK
Tenant scopingmanual en cada URLautomático
Meta inyectadomanual y propenso a olvidoautomático e idempotente
Multi-paíshardcoded o config estáticaruntime via Supabase
Tiposany o tipos parciales35 recursos + ResourceTypeMap
Búsquedastring concatbuilder fluent
Authpropiostrategies pluggables
Validadores IDreescrito por productocentralizados
$translatemanualopt-in con un flag

¿Es solo un cliente HTTP o agrega lógica de dominio?

Sección titulada «¿Es solo un cliente HTTP o agrega lógica de dominio?»

Agrega lógica de dominio. Bundles decisiones FHIR de EMA: profile sin versión (ADR-0002), tag system urn:ema:tenant (ADR-0001), profile resolution multi-país (Wave 1 ProfileResolver), $translate opt-in append-only (Wave 1).

Por eso es un producto interno con su propio versionado, ADRs y CHANGELOG, no un script de utilidad.