Traducción. Autoritativo: ../../diagrams/diagram-specs.md.
Hacer el onboarding del skill una vez contra el sitio de Softcrum para que todos los diagramas
hereden los tokens de marca; exportar SVG para Mintlify (/diagram-design:export --svg-only). Las
fuentes HTML viven en el repositorio. Una sección es un diagrama; los nombres de tipo calzan con el
catálogo del skill.
D1 · tipo: architecture — “Softcrum Suite — contexto ampliado (C4-1)”
Nodos: sistemas del tenant (POS/ecommerce/ERP) · Runtime API · Management API · Consola (tenant) · Softcrum Ops · superficies de member (portal/widget/mobile) · contextos core|loyalty|messaging|crm · Outbox → 6 consumidores · proveedores (Resend, FCM, Pusher, Upstash, Supabase, Vercel Queues). Acento focal: Runtime API + outbox. Anotación: “la consola y el portal consumen SOLO la API pública”.D2 · tipo: high-level — “Ingesta y efectos, end to end”
track 202 → cola → procesador (identidad, eventos, segmentos, reglas) → libro → outbox → carriles → proveedores → webhooks de estado → send_status_history. Focal: el procesador. Anotación: elcorrelation_id atraviesa toda la línea.
D3–D6 · tipo: er — uno por schema (core / loyalty / messaging / crm)
Entidades y FKs exactamente como en las tablas de las specs de módulo; marcar las tablas particionadas con el subtítulo “particionada/mensual”; catálogos paramétricos en tono apagado; acento en contacts (D3), ledger_transactions + point_lots (D4), sends + tablas de enrutamiento (D5), nota de la proyección del timeline (D6).D7 · tipo: sequence — “Pipeline de trackEvent (slice canónico #2)”
Actores: sistema del tenant · Runtime API · cola · procesador · dominio de loyalty · outbox · despachador de notificaciones · proveedor. Los mensajes siguen las capas 1–6 del slice; retornos punteados para el 202 y los webhooks del proveedor; nota sobre las compuertas de idempotencia entre cola y procesador.D8 · tipo: sequence — “Canje (padre/hijo, idempotente)”
POS →POST /redemptions (Idempotency-Key) → validación contra stacking_rules → hijos aplicados →
redeem en el libro (lotes FIFO) → 200 con efectos; marco alternativo: reintento con la misma clave
reproduce el resultado guardado; marco alternativo: rollback padre revert|keep.