Skip to main content
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: el correlation_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.

D9 · tipo: swimlane — “Blast en carriles duales”

Carriles: consola · carril de marketing · carril transaccional · proveedor (límite compartido) · OTP de otro tenant. Mostrar al worker de marketing cediendo cuando la profundidad transaccional supera el umbral; token buckets en el carril del proveedor. Anotación: “los límites del proveedor se comparten entre TODOS los tenants”.

D10 · tipo: flowchart — “Cascada de resolveChannels”

Cadena de decisión de los niveles 0→3 → compuertas del destinatario (consentimiento → supresión → preferencias → quiet hours y caps [marketing]) → encolar por canal; cada “no” sale a “no enviado + razón registrada”.

D11 · tipo: state — “Ciclo de vida de send_status”

queued→sent→delivered→opened→clicked; ramas bounced/complained/failed; bounced y complained escriben supresiones automáticamente (acento).

D12 · tipo: state — “Ciclo de vida del canje”

requested→validated→applied→(rolled_back: revert|keep)→final; estados hijos anidados; auto-bucle de replay idempotente sobre requested. Agosto: enmienda + estándares + ADRs · Septiembre: TS-001..TS-004, features de F1a · Octubre: endurecimiento de F1a con el design partner, runbooks, aumento de límite de Resend · 1 de noviembre: G1-Engage · 1 de diciembre: plena vigencia de la Ley 21.719 (paquete legal aprobado por abogado antes del lanzamiento comercial, marzo 2027).