Saltar a contenido

ADR-0001 · Backend NestJS como middleware ante SAP Service Layer

  • Estado: aceptado
  • Decisores: equipo OMS
  • Fecha de la decisión: no registrada (ADR retroactivo, decisión de origen del proyecto)

Contexto y problema

El OMS reemplaza el flujo de ventas sobre el cliente SAP B1 con un dashboard web propio. SAP expone el Service Layer (OData/HTTPS), así que técnicamente el frontend podría consumirlo directo. Pero el Service Layer autentica por sesión de base de datos, no distingue roles de negocio del OMS (vendedor, cajero, logística), y exponerlo al browser implica publicar el ERP completo a la red. Además hay funcionalidad que SAP no cubre: búsqueda instantánea, pagos electrónicos, notificaciones, impresión.

Opciones consideradas

  1. Backend propio (NestJS) como middleware entre el frontend y SAP — elegida
  2. Frontend consumiendo el Service Layer directamente
  3. Integración a nivel de base de datos / DI-API de SAP

Decisión

Todo el tráfico del OMS pasa por un backend NestJS que autentica con SSO/JWT propio (roles, salesPersonCode, sucursal), traduce operaciones de negocio a llamadas Service Layer a través de un cliente único (common/sap-client/), y orquesta las integraciones no-SAP. Si mañana alguien pregunta "¿por qué no pegarle directo al Service Layer?": porque el control de acceso, el caching, la observabilidad y las integraciones necesitan un punto central que SAP no ofrece, y exponer el ERP al browser es inaceptable en seguridad.

Consecuencias

Positivas

  • SAP nunca queda expuesto fuera de la red interna; el OMS decide qué se puede hacer y quién.
  • Punto único para caché (Redis), correlación de errores y sesiones SAP.
  • Las integraciones (Algolia, Bancard, Firebase, PrintNode) viven en un solo lugar.

Negativas / deuda asumida

  • Doble salto de red: cada operación paga la latencia backend + Service Layer.
  • Hay que mantener DTOs e interfaces espejo de las entidades SAP.
  • La gestión de sesiones Service Layer (expiración, renovación por usuario) es responsabilidad nuestra.