Diez decisiones de arquitectura para los cuatro escenarios de calidad del reto 2: dos de seguridad (ASR-1, ASR-2) y dos de disponibilidad (ASR-3, ASR-4). Todas están en estado Propuesta: solo el equipo las pasa a Aceptada. Los productos concretos (Java, Spring, PostgreSQL, RabbitMQ, Redis) y los números de configuración no vienen del enunciado; van marcados [SUPUESTO] y tienen su fila en la sección 1.3.
0. Índice
| ADR | Título | Estado | Confianza | Iteración | ASRs | Diagramas |
|---|---|---|---|---|---|---|
| ADR-001 | Servicios que se comunican por eventos a través de un bróker durable, con el estado en una base transaccional | Propuesta | Media | 1 | ASR-1, ASR-2, ASR-3, ASR-4 | DG-CMP-001, DG-CMP-002, DG-DEP-001 |
| ADR-002 | Coordinador de la cadena que orquesta las etapas y guarda el estado de cada pedido por etapa | Propuesta | Alta | 2 | ASR-3, ASR-4 | DG-CMP-002, DG-STM-001, DG-CLS-001 |
| ADR-003 | Etapas consecutivas en el orden facturación, descargue de inventario y validación de despacho | Propuesta | Media | 2 | ASR-3, ASR-4 | DG-SEQ-013 |
| ADR-004 | Plazo vencido por pedido y etapa, encontrado por un barrido periódico, con sondeo de salud como apoyo | Propuesta | Baja | 2 | ASR-3 | DG-CMP-002, DG-SEQ-014, DG-STM-001, DG-DEP-001 |
| ADR-005 | Idempotencia por pedido y etapa con clave única en la misma transacción del efecto | Propuesta | Alta | 2 | ASR-4 | DG-SEQ-015, DG-CLS-001 |
| ADR-006 | Un solo intento de reanudación de la etapa pendiente y escalamiento a una persona | Propuesta | Media | 2 | ASR-4 | DG-CMP-002, DG-SEQ-015, DG-STM-001 |
| ADR-007 | Huella del dispositivo como parte de la identidad del vendedor, verificada después de abrir la sesión | Propuesta | Media | 3 | ASR-1 | DG-CMP-001, DG-SEQ-016 |
| ADR-008 | Detección de la escritura indebida por un evento que sale en la misma transacción de la escritura | Propuesta | Media | 3 | ASR-2 | DG-CMP-001, DG-SEQ-017 |
| ADR-009 | Revocación de la sesión en la puerta de entrada, con una lista de revocación consultada en cada petición | Propuesta | Media | 3 | ASR-2 | DG-CMP-001, DG-SEQ-017, DG-STM-002, DG-DEP-001 |
| ADR-010 | Reversión de la escritura indebida por compensación, dentro de una reacción ordenada de menor a mayor costo | Propuesta | Media | 3 | ASR-2 | DG-SEQ-017, DG-CLS-002 |
1. Insumos
1.1 Contexto
CCP es una comercializadora de productos de consumo masivo que opera en cinco países, con unas treinta bodegas grandes. El sistema nuevo es greenfield y opera 7x24x365. Funcionales primarios: el vendedor consulta inventario exacto y toma pedidos en la tienda; el tendero pide por su cuenta; cada pedido confirmado recorre facturación, descargue de inventario y validación de despacho antes de pasar a logística. Actores: vendedor (con dispositivo suministrado por CCP), tendero (con dispositivo propio), área de seguridad, responsable del pedido escalado. Sistema externo: logística. Restricciones clave: sin ventana de mantenimiento (R-1), dispositivo suministrado al vendedor (R-2), inventario exacto en tiempo real (R-4), implementar y medir, no solo diseñar (R-12). Las dos exigencias comparten un rasgo: la falla no se anuncia. El atacante entra con credenciales correctas, y la etapa detenida no señala error.
1.2 ASRs
| ASR | Atributo | Fuente | Estímulo | Artefacto | Ambiente | Respuesta | Medida | Prioridad | Impacto |
|---|---|---|---|---|---|---|---|---|---|
| ASR-1 | Seguridad | Tercero con las credenciales correctas de un vendedor y un dispositivo distinto al suministrado | Abre sesión con éxito y empieza a operar; arribo esporádico | La sesión del vendedor y el dispositivo suministrado como parte de su identidad | A: operación normal, carga [PREGUNTA], sin fallas |
Marca la sesión como abierta desde un dispositivo no reconocido y avisa al área de seguridad con vendedor, dispositivo y hora | Aviso en ≤ 2 s desde la apertura de la sesión, con ≤ 1 falsa alarma por cada 100 cambios legítimos de dispositivo (supuesto de la ficha), en Ambiente A | Muy alta | Medio |
| ASR-2 | Seguridad | El mecanismo de detección de accesos indebidos, a partir de una escritura ya ejecutada | Un actor autenticado con permiso solo de consulta registró o modificó un pedido, o descargó inventario, con la sesión aún abierta | El registro del pedido, el descargue de inventario y la sesión del actor | A | Bloquea al actor, cierra su sesión, revierte la escritura y avisa a seguridad | Bloqueo, cierre y reversión en ≤ 5 s desde la detección; escrituras posteriores del actor = 0; efecto residual 60 s después = 0, en Ambiente A | Alta | Medio |
| ASR-3 | Disponibilidad | La cadena de tres etapas que sigue al pedido | Una etapa no responde ni señala error y el pedido espera sin pasar a logística | Facturación, descargue de inventario y validación de despacho | A | Identifica el pedido detenido, la etapa y el tiempo transcurrido, y lo señala como fallo de la cadena | Señal en ≤ 30 s desde que la etapa dejó de avanzar, con ≤ 1 falsa alarma por hora, en Ambiente A | Alta | Alto |
| ASR-4 | Disponibilidad | La recuperación, a partir de la señal de ASR-3 | Pedido señalado como detenido, con una o dos etapas completadas y una pendiente | La cadena del pedido y sus efectos ya producidos | A | Reanuda desde la etapa que falló sin repetir las completadas; si ese intento no completa, entrega el pedido a una persona con el estado exacto | Reanudada o entregada a una persona en ≤ 5 s desde la señal; duplicados de factura, descargue u orden de despacho = 0; pedidos sin destino = 0, en Ambiente A | Muy alta | Alto |
Presupuesto conjunto: ASR-3 + ASR-4 suman 35 s entre que la cadena se detiene y queda reanudada o en manos de una persona.
1.3 Restricciones, concerns y supuestos
| ID | Tipo | Descripción | Origen |
|---|---|---|---|
| R-1 | restricción | Operación 7x24x365; no hay ventana de mantenimiento ni noche común a los cinco países | enunciado |
| R-2 | restricción | CCP le suministra el dispositivo móvil a cada vendedor | enunciado |
| R-4 | restricción | La consulta de inventario entrega la cifra exacta del momento | enunciado |
| R-5 | restricción | Al formalizar un pedido, las cantidades quedan reservadas | enunciado |
| R-7 | restricción | La información de cada tendero solo la conoce quien está autorizado | enunciado |
| R-9 | restricción | La suplantación de vendedores y tenderos no puede permitirse | enunciado |
| R-11 | restricción | El vendedor opera un dispositivo suministrado; el tendero, el suyo | enunciado |
| R-12 | restricción | Hay que implementar las decisiones y medir que los ASR se cumplen | enunciado |
| S-1 | supuesto | El proceso espera a que las tres etapas terminen antes de continuar | usuario |
| S-2 | supuesto | El cierre de las tres etapas habilita a logística | usuario |
| S-3 | supuesto | El alcance cubre solo fallas de software; las de infraestructura quedan fuera | usuario |
| C-01 | concern | El diagrama BPMN del proceso de ventas mezcla hipótesis de solución (heartbeat, cola de dos reintentos, réplica de lectura, JDBC, gestor de sesión, logs) con hechos del negocio; ninguna de esas hipótesis es restricción | usuario (constraints.md) |
| C-02 | concern | Cada condición que el diseño se imponga necesita un experimento que la produzca (consecuencia de R-12) | usuario (constraints.md) |
| C-03 | concern | El tiempo que el tendero espera antes de ver su pedido en preparación acota todo lo que la cadena tarda; hoy es [PREGUNTA] |
usuario (architecture.md) |
| SUP-01 | supuesto | Pila: Java 21 y Spring Boot 3, PostgreSQL por JDBC, RabbitMQ como bróker y Redis para la lista de revocación. El único indicio en los insumos es el acceso por JDBC del BPMN | [SUPUESTO] (propuesta de DG-CMP v3) |
| SUP-02 | supuesto | El barrido de plazos corre cada 5 s | [SUPUESTO] |
| SUP-03 | supuesto | El plazo de cada etapa es ≤ 25 s y mayor que la duración p99,9 de esa etapa en operación normal (el valor que solo el 0,1 % de las ejecuciones supera) | [SUPUESTO] |
| SUP-04 | supuesto | El intento de reanudación se da por fallido si la etapa no confirma en 3 s | [SUPUESTO] |
| SUP-05 | supuesto | El token de sesión vive 15 min | [SUPUESTO] |
| SUP-06 | supuesto | La validación de despacho necesita la factura emitida y el inventario descargado, en el orden que usan el glosario y la página de stakeholders | [SUPUESTO] |
2. Catálogo de elementos
| EL | Nombre | Tipo UML | Estereotipo | Responsabilidad | Estado que posee | Eclosión | Introducido por |
|---|---|---|---|---|---|---|---|
| EL-01 | Vendedor | actor | «external» | Abre sesión desde el dispositivo suministrado, consulta y crea pedidos | ninguno | exento («external») | contexto |
| EL-02 | Tendero | actor | «external» | Crea pedidos por su cuenta desde su dispositivo | ninguno | exento («external») | contexto |
| EL-03 | App móvil | component | «component» | Cara visible para vendedor y tendero; calcula la huella del dispositivo | token de sesión en el dispositivo | obligatoria (diferida en DG-CMP v3) | contexto, ADR-007 |
| EL-04 | Puerta de entrada de la API | component | «component» «tactic:autorizar-en-borde» | Recibe toda petición, verifica el token y consulta la lista de revocación | ninguno (stateless) | obligatoria | ADR-009 |
| EL-05 | Gestor de sesión | component | «component» | Autentica, emite tokens, bloquea actores y responde los permisos vigentes | usuarios, permisos, sesiones, actores bloqueados | obligatoria | ADR-001, ADR-007, ADR-009 |
| EL-06 | Verificador de dispositivo | component | «component» «tactic:detectar-intrusiones» | Compara la huella de cada sesión de vendedor con la registrada y avisa si no coincide | dispositivos registrados por vendedor | obligatoria | ADR-007 |
| EL-07 | Pedidos | component | «component» | Registra pedidos y los compensa si la escritura fue indebida | pedidos, bitácora y outbox propios | obligatoria | ADR-001, ADR-008, ADR-010 |
| EL-08 | Inventario | component | «component» | Existencias exactas, reservas, descargue idempotente y su compensación | existencias, reservas, etapas procesadas | obligatoria | ADR-001, ADR-005, ADR-008, ADR-010 |
| EL-09 | Bitácora de escrituras | datastore | «database» «tactic:bitacora-escrituras» | Guarda cada escritura con actor, permiso usado y estado anterior, en la misma transacción | escrituras con su estado anterior | exento (tabla dentro de EL-07 y EL-08) | ADR-008 |
| EL-10 | Detector de escrituras indebidas | component | «component» «tactic:detectar-escritura» | Contrasta cada escritura publicada con los permisos vigentes del actor | ninguno (stateless) | obligatoria | ADR-008 |
| EL-11 | Reacción ante acceso indebido | component | «component» «tactic:compensacion» | Revoca, bloquea, compensa y avisa, en ese orden, dentro de 5 s | reacciones con sus marcas de tiempo | obligatoria | ADR-009, ADR-010 |
| EL-12 | Lista de revocación | datastore | «COTS» | Guarda sesiones y actores revocados mientras viva su token | claves de revocación con vencimiento | exento («COTS») | ADR-009 |
| EL-13 | Notificador a seguridad | component | «component» «tactic:informar» | Entrega al área de seguridad los avisos de ASR-1 y ASR-2 | avisos entregados | obligatoria | ADR-007 |
| EL-14 | Área de seguridad | actor | «external» | Recibe los avisos y decide qué hacer con ellos | ninguno | exento («external») | contexto |
| EL-15 | Bróker de mensajes | queue | «queue» «COTS» | Transporta eventos y comandos de forma durable entre componentes | mensajes pendientes de consumo | exento («COTS») | ADR-001 |
| EL-16 | Coordinador de la cadena | component | «component» «tactic:orquestacion» | Lleva cada pedido por sus tres etapas en orden y reanuda la pendiente una vez | estado por pedido y etapa | obligatoria | ADR-002, ADR-003, ADR-006 |
| EL-17 | Monitor de la cadena | component | «component» «tactic:monitor» | Barre los plazos vencidos, sondea la salud de las etapas y señala cada pedido detenido una sola vez | señales emitidas | obligatoria | ADR-004 |
| EL-18 | Facturación | component | «component» «tactic:idempotencia» | Emite la factura o el documento de cobro diferido, una sola vez por pedido | facturas, etapas procesadas | obligatoria | ADR-005 |
| EL-19 | Validación de despacho | component | «component» «tactic:idempotencia» | Valida el pedido y emite la orden de despacho, una sola vez por pedido | órdenes de despacho, etapas procesadas | obligatoria | ADR-005 |
| EL-20 | Bandeja de pedidos escalados | component | «component» | Guarda el pedido escalado con su etapa pendiente y su motivo, y se lo muestra a una persona | pedidos escalados | obligatoria (diferida en DG-CMP v3) | ADR-006 |
| EL-21 | Responsable del pedido escalado | actor | «external» | Termina o cancela a mano el pedido escalado | ninguno | exento («external») | contexto |
| EL-22 | Logística | component | «external» | Recibe el pedido con las tres etapas cerradas | fuera del alcance | exento («external») | contexto |
| EL-23 | Base transaccional | datastore | «database» «COTS» | Persiste pedidos, inventario, bitácora y estado de la cadena con transacciones locales | todo el estado durable | exento («COTS») | ADR-001 |
| EL-24 | Cola de reintentos | queue | «queue» «COTS» | Lleva al Coordinador el pedido señalado; su destino de mensajes fallidos es la Bandeja | pedidos señalados pendientes | exento («COTS») | ADR-006 |
3. Catálogo de conectores
| CN | Desde | Hacia | Tipo | Protocolo o estereotipo | Introducido por |
|---|---|---|---|---|---|
| CN-01 | EL-01 | EL-03 | síncrono | interacción de usuario | contexto |
| CN-02 | EL-02 | EL-03 | síncrono | interacción de usuario | contexto |
| CN-03 | EL-03 | EL-04 | síncrono | «HTTPS» con token y huella | ADR-009 |
| CN-04 | EL-04 | EL-05 | síncrono | «HTTPS» abrir sesión | ADR-009 |
| CN-05 | EL-04 | EL-12 | síncrono | «consulta» ¿sesión o actor revocado? en cada petición | ADR-009 |
| CN-06 | EL-04 | EL-07 | síncrono | «HTTPS» crear pedido | ADR-009 |
| CN-07 | EL-04 | EL-08 | síncrono | «HTTPS» consultar y descargar | ADR-009 |
| CN-08 | EL-05 | EL-15 | asíncrono | «pub/sub» sesion.abierta | ADR-007 |
| CN-09 | EL-15 | EL-06 | asíncrono | «pub/sub» sesion.abierta | ADR-007 |
| CN-10 | EL-06 | EL-15 | asíncrono | «pub/sub» alerta.seguridad | ADR-007 |
| CN-11 | EL-15 | EL-13 | asíncrono | «pub/sub» alerta.seguridad | ADR-007 |
| CN-12 | EL-13 | EL-14 | asíncrono | canal del aviso [PREGUNTA] |
ADR-007 |
| CN-13 | EL-07 | EL-09 | síncrono | «JDBC» misma transacción que la escritura | ADR-008 |
| CN-14 | EL-08 | EL-09 | síncrono | «JDBC» misma transacción que la escritura | ADR-008 |
| CN-15 | EL-07 | EL-15 | asíncrono | «outbox» escritura.realizada tras el commit | ADR-008 |
| CN-16 | EL-08 | EL-15 | asíncrono | «outbox» escritura.realizada tras el commit | ADR-008 |
| CN-17 | EL-15 | EL-10 | asíncrono | «pub/sub» escritura.realizada | ADR-008 |
| CN-18 | EL-10 | EL-05 | síncrono | «HTTPS» permisosVigentes(actor) | ADR-008 |
| CN-19 | EL-10 | EL-11 | síncrono | «HTTPS» reaccionar(escritura) | ADR-008 |
| CN-20 | EL-11 | EL-12 | síncrono | «escritura» revocar sesión y actor | ADR-009 |
| CN-21 | EL-11 | EL-05 | síncrono | «HTTPS» bloquear(actor) | ADR-010 |
| CN-22 | EL-11 | EL-07 | síncrono | «HTTPS» compensar(idEscritura) | ADR-010 |
| CN-23 | EL-11 | EL-08 | síncrono | «HTTPS» compensar(idEscritura) | ADR-010 |
| CN-24 | EL-11 | EL-15 | asíncrono | «pub/sub» alerta.seguridad | ADR-010 |
| CN-25 | EL-07 | EL-16 | síncrono | «HTTPS» iniciar(idPedido) | ADR-002 |
| CN-26 | EL-16 | EL-15 | asíncrono | «comando» etapa.ejecutar, una etapa a la vez | ADR-002, ADR-003 |
| CN-27 | EL-15 | EL-18 | asíncrono | «comando» etapa.ejecutar | ADR-002 |
| CN-28 | EL-15 | EL-08 | asíncrono | «comando» etapa.ejecutar | ADR-002 |
| CN-29 | EL-15 | EL-19 | asíncrono | «comando» etapa.ejecutar | ADR-002 |
| CN-30 | EL-18 | EL-15 | asíncrono | «pub/sub» etapa.completada | ADR-002 |
| CN-31 | EL-19 | EL-15 | asíncrono | «pub/sub» etapa.completada | ADR-002 |
| CN-32 | EL-15 | EL-16 | asíncrono | «pub/sub» etapa.completada | ADR-002 |
| CN-33 | EL-17 | EL-16 | síncrono | «HTTPS» vencidas(ahora), cada 5 s [SUPUESTO] | ADR-004 |
| CN-34 | EL-17 | EL-18 | síncrono | «ping-echo» sondeo de salud cada 5 s [SUPUESTO] | ADR-004 |
| CN-35 | EL-17 | EL-19 | síncrono | «ping-echo» sondeo de salud cada 5 s [SUPUESTO] | ADR-004 |
| CN-36 | EL-17 | EL-24 | asíncrono | «encolar» pedido señalado | ADR-006 |
| CN-37 | EL-24 | EL-16 | asíncrono | «desencolar» reanudar(idPedido, etapa) | ADR-006 |
| CN-38 | EL-16 | EL-20 | asíncrono | «pub/sub» cadena.escalada | ADR-006 |
| CN-39 | EL-20 | EL-21 | síncrono | consulta de la bandeja | ADR-006 |
| CN-40 | EL-16 | EL-22 | asíncrono | «pub/sub» pedido.listo | ADR-002 |
| CN-41 | EL-16 | EL-23 | síncrono | «JDBC» estado por pedido y etapa | ADR-002 |
| CN-42 | EL-08 | EL-23 | síncrono | «JDBC» existencias y etapa procesada en la misma transacción | ADR-001, ADR-005 |
| CN-43 | EL-18 | EL-23 | síncrono | «JDBC» factura y etapa procesada en la misma transacción | ADR-005 |
4. ADRs
ADR-001: Servicios que se comunican por eventos a través de un bróker durable, con el estado en una base transaccional
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 1 · Confianza: Media — el estilo es conocido, pero la pila concreta es un supuesto (SUP-01) y la carga está sin cifrar
Contexto
Los cuatro ASR piden reaccionar a algo que ocurrió en otro componente, sin frenar la operación que lo produjo. ASR-1 exige avisar en ≤ 2 s desde la apertura de una sesión, y ASR-2 exige reaccionar en ≤ 5 s a una escritura ya ejecutada. ASR-3 exige notar en ≤ 30 s una etapa que dejó de avanzar sin error, y ASR-4 exige reanudarla en ≤ 5 s sin duplicar efectos.
El BPMN dibuja un proceso síncrono de punta a punta (C-01), y S-1 dice que el proceso espera a las tres etapas. R-1 descarta cualquier revisión por lotes. R-4 exige inventario exacto, así que el dato no puede vivir en copias atrasadas. R-12 obliga a construir y medir lo que se decida.
¿Qué estructura global deja que cada control observe lo que pasó en otro componente sin ponerse en su camino?
Decisión
Construiremos el sistema como servicios que se comunican por eventos a través de un bróker de mensajes durable. El bróker es un intermediario que guarda cada mensaje hasta que su consumidor lo procesa. Cada servicio guardará su estado en una base transaccional con transacciones locales. Adoptamos este estilo porque es el único de los evaluados que cumple tres cosas a la vez. Verifica la sesión fuera del inicio de sesión (ASR-1), captura cada escritura sin frenarla (ASR-2) y conserva el trabajo pendiente de una etapa caída (ASR-3, ASR-4).
Consecuencias
- (+) ASR-1 y ASR-2: el Verificador y el Detector consumen eventos; el inicio de sesión y la escritura no esperan su veredicto.
- (+) ASR-3 y ASR-4: si una etapa cae, su comando espera en el bróker y el estado del pedido queda en la base.
- (+) R-4: el inventario se lee y se escribe en la misma base transaccional, sin réplica atrasada.
- (−) Latencia: cada evento suma un salto por el bróker, y ese salto consume parte de los 2 s de ASR-1 y de los 5 s de ASR-2.
- (−) Operación: el bróker es una pieza más que vigilar, y si cae detiene los cuatro caminos a la vez (R-001a).
- (−) Desarrollo: un evento publicado sin su escritura, o al revés, rompe ASR-2; la decisión obliga a un patrón de publicación transaccional (ADR-008).
- (±) La pila concreta (SUP-01) queda como supuesto hasta que el equipo la confirme.
Anexo de trazabilidad
Y-statement: En el contexto de un sistema greenfield que opera 7x24x365, frente a ASR-1, ASR-2, ASR-3 y ASR-4, decidimos servicios comunicados por eventos a través de un bróker durable y descartamos el monolito síncrono y los servicios con llamadas síncronas para lograr que cada control observe sin frenar la operación, aceptando un salto más por evento y el bróker como pieza común.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-1 | Seguridad | Aviso ≤ 2 s | contribuye | primario |
| ASR-2 | Seguridad | Reacción ≤ 5 s desde la detección | contribuye | primario |
| ASR-3 | Disponibilidad | Señal ≤ 30 s | contribuye | primario |
| ASR-4 | Disponibilidad | Reanudación ≤ 5 s, 0 duplicados | contribuye | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Usar intermediarios (bróker de mensajes) | Modificabilidad · reducir acoplamiento, al servicio de disponibilidad | EL-15 | «tactic:intermediario-mensajes» |
| Transacciones (locales por servicio) | Disponibilidad · prevenir | EL-23 | «tactic:transaccion-local» |
A3. Alternativas Drivers: ASR-1 (Muy alta), ASR-2 (Alta), ASR-3 (Alta), ASR-4 (Muy alta), R-1, R-4, R-12 — fijados antes de evaluar.
| Criterio | Opción A: Servicios con eventos y bróker durable (elegida) | Opción B: Monolito modular síncrono, como el BPMN | Opción C: Servicios con llamadas síncronas REST | |—|—|—|—| | ASR-1 aviso ≤ 2 s | + verificación fuera del login | − la verificación va dentro del login o en un hilo que muere con él | − la verificación bloquea el login | | ASR-2 reacción ≤ 5 s | + toda escritura publica un evento | + la escritura se ve en proceso, pero el control frena cada escritura | − cada escritura llama al detector antes de responder | | ASR-3 señal ≤ 30 s | + estado del pedido en la base, observable desde afuera | − el pedido detenido es un hilo bloqueado, invisible desde afuera | − la llamada colgada solo se ve en el llamador | | ASR-4 reanudación ≤ 5 s | + el comando pendiente sobrevive en el bróker | − la reanudación exige reconstruir el hilo perdido | − sin memoria de la llamada perdida | | R-4 inventario exacto | + base transaccional sin réplicas | ++ una sola transacción local | + base transaccional | | R-12 implementar y medir | − más piezas que montar | ++ un solo desplegable | + piezas conocidas | Descartes: B — gana en simplicidad, pero una etapa detenida queda como un hilo bloqueado que nada observa, y eso deja sin punto de medida a ASR-3. C — acopla en el tiempo cada control al camino que vigila, y la falla de un servicio se propaga al que lo llama.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| TO-001a | Trade-off | El bróker entre componentes: disponibilidad ▲ (ASR-3, ASR-4 conservan el pendiente), latencia de los controles ▼ (ASR-1, ASR-2) | El salto por el bróker es de milisegundos frente a los presupuestos de 2 s y 5 s |
| R-001a | Riesgo | El bróker es un punto común: si cae, se detienen los cuatro caminos | S-3 deja fuera la falla de infraestructura; la caída del bróker por software queda abierta |
| NR-001a | No-riesgo | La lectura de inventario es exacta porque no hay réplica | R-4 se mide contra la base primaria |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Prueba de carga | Latencia del salto por el bróker, de la publicación al consumo, con carga de Ambiente A | ≤ 2 s de extremo a extremo en ASR-1 y ≤ 5 s en ASR-2 |
| Inyección de fallas | Detener el consumidor de una etapa con pedidos en curso y reiniciarlo | 0 pedidos sin destino (ASR-4) |
A6. Relaciones: reemplaza: — · refina: — · depende-de: — · conflicto-con: —
A7. Evidencia visual: DG-CMP-001, DG-CMP-002, DG-DEP-001 (detalle en la sección 6)
ADR-002: Coordinador de la cadena que orquesta las etapas y guarda el estado de cada pedido por etapa
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 2 · Confianza: Alta — orquestación con estado persistido es un patrón conocido para flujos de pocas etapas con dueño único
Contexto
ASR-3 exige señalar en ≤ 30 s el pedido cuya etapa dejó de avanzar, con la etapa y el tiempo transcurrido. ASR-4 exige reanudar desde la etapa que falló, sin repetir las completadas, y entregar a una persona el estado exacto si el intento no completa. Las dos medidas dependen de una respuesta que hoy nadie guarda: en qué etapa está cada pedido y desde cuándo.
ADR-001 dejó la comunicación en eventos. El BPMN dibuja la cadena sin dueño, con un heartbeat que vigila las etapas desde afuera (C-01). S-2 dice que el cierre de las tres etapas habilita a logística.
¿Dónde vive el estado de cada pedido en su cadena, y quién decide cuál es la siguiente etapa?
Decisión
Usaremos un Coordinador de la cadena que orquesta las tres etapas: les envía el comando, recibe su confirmación y habilita a logística cuando las tres cierran. Guardará una fila por pedido y etapa con su estado, su intento y su marca de tiempo. Elegimos orquestar porque ASR-3 necesita un solo lugar donde leer qué pedido lleva cuánto tiempo en qué etapa, y ASR-4 necesita ese mismo lugar para saber desde dónde reanudar.
Consecuencias
- (+) ASR-3: el Monitor lee de una sola tabla qué etapas pasaron su plazo.
- (+) ASR-4: el Coordinador sabe qué etapas están completadas y reanuda solo la pendiente; el escalamiento lleva el estado exacto (HU-14).
- (+) Logística recibe el pedido una sola vez, cuando las tres filas están completadas (S-2).
- (−) El Coordinador es un punto central: si cae, ninguna cadena avanza hasta que vuelva (R-002a).
- (−) Rendimiento: cada etapa de cada pedido suma una fila y dos actualizaciones en la base.
- (±) La orquestación se elige para esta cadena. Los caminos de seguridad siguen por eventos sin coordinador (ADR-007, ADR-008).
Anexo de trazabilidad
Y-statement: En el contexto de la cadena de tres etapas que sigue al pedido, frente a ASR-3 y ASR-4, decidimos un Coordinador que orquesta y guarda el estado por pedido y etapa, y descartamos la coreografía y la llamada síncrona encadenada, para lograr un único lugar desde donde detectar y reanudar, aceptando un punto central y dos escrituras más por etapa.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-3 | Disponibilidad | Señal ≤ 30 s con etapa y tiempo | contribuye | primario |
| ASR-4 | Disponibilidad | Reanudación ≤ 5 s desde la etapa que falló | contribuye | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Orquestación | Integración · gestionar la interacción | EL-16 | «tactic:orquestacion» |
| Log de transacciones (estado por pedido y etapa) | Disponibilidad · recuperar | EL-16, EL-23 | «tactic:estado-por-etapa» |
A3. Alternativas Drivers: ASR-3 (Alta), ASR-4 (Muy alta), S-2 — fijados antes de evaluar.
| Criterio | Opción A: Coordinador que orquesta con estado persistido (elegida) | Opción B: Coreografía, cada etapa reacciona al evento de la anterior | Opción C: Llamada síncrona encadenada con timeout, como el BPMN | |—|—|—|—| | ASR-3 señal ≤ 30 s con etapa | ++ una tabla con etapa y marca de tiempo | − el estado queda repartido entre tres servicios; detectar exige reconstruirlo | − el timeout solo lo ve el hilo que llama | | ASR-4 reanudar desde la etapa | + se sabe qué está completo | − nadie es dueño de reenviar el evento perdido | −− el hilo que caducó no guarda qué hizo | | S-2 cierre habilita a logística | + unión explícita de las tres filas | − alguien tiene que unir las tres confirmaciones | + el llamador une | | ASR-4 pedidos sin destino si cae una pieza | − si cae el Coordinador, ninguna cadena avanza hasta que vuelva | + no hay pieza central cuya caída detenga todas las cadenas | − si cae el llamador, se pierde la cadena | Descartes: B — evita el punto central, pero sin dueño del flujo el pedido detenido no tiene quién lo note ni quién lo reanude. C — pierde el estado cuando el hilo caduca, que es justo el caso de ASR-4.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| R-002a | Riesgo | Si el Coordinador cae, ninguna cadena avanza y la reanudación programada se pierde | Una sola instancia; el Monitor recoge en su siguiente barrido la etapa vencida (ADR-004) |
| NR-002a | No-riesgo | El estado sobrevive a la caída del Coordinador | El estado vive en la base, no en memoria (ADR-001) |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Inyección de fallas | Detener el Coordinador con diez pedidos en curso y reiniciarlo | 0 pedidos sin destino; cada pedido retoma desde su etapa pendiente |
A6. Relaciones: reemplaza: — · refina: ADR-001 · depende-de: ADR-001 · conflicto-con: —
A7. Evidencia visual: DG-CMP-002, DG-STM-001, DG-CLS-001 (detalle en la sección 6)
ADR-003: Etapas consecutivas en el orden facturación, descargue de inventario y validación de despacho
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 2 · Confianza: Media — depende de SUP-06 y del tiempo que espera el tendero, que está sin cifrar
Contexto
El BPMN dibuja las tres etapas en paralelo tras el pago, con una unión antes de la distribución, y la versión 3 de los diagramas de componentes lo copió. La página de restricciones advierte que el paralelismo es una hipótesis de diseño, no un hecho del negocio (C-01). El glosario y la página de stakeholders las nombran en orden: primera, segunda y tercera.
ASR-4 describe su estímulo como un pedido con «una o dos etapas ya completadas y una pendiente», y exige entregar a una persona el estado exacto. ASR-3 exige ≤ 1 falsa alarma por hora. ADR-002 dejó un Coordinador capaz de ordenar las etapas de cualquier forma.
¿Las tres etapas corren en paralelo o una tras otra?
Decisión
Adoptaremos etapas consecutivas: el Coordinador envía la facturación, luego el descargue de inventario y luego la validación de despacho, cada una al confirmarse la anterior. Lo hacemos porque así hay una sola etapa pendiente por pedido, que es el caso que describe ASR-4. Además, la validación de despacho no queda autorizando un pedido sin factura ni descargue (SUP-06).
Consecuencias
- (+) ASR-4: a lo sumo una etapa pendiente; la reanudación y el escalamiento nombran una sola etapa.
- (+) ASR-3: un solo plazo corriendo por pedido; menos plazos simultáneos que puedan disparar una falsa alarma.
- (+) Cancelar un pedido escalado compensa como mucho dos etapas, en orden inverso.
- (−) La cadena tarda la suma de las tres etapas, no la más lenta. Contra el tiempo que espera el tendero, que es
[PREGUNTA], esa suma puede no caber. - (−) Contradice el BPMN y DG-CMP-002 v3: hay que corregir el diagrama y avisar al equipo.
- (±) Si el negocio confirma que las etapas son independientes, se reabre la opción paralela en un ADR que reemplace a este.
Anexo de trazabilidad
Y-statement: En el contexto de una cadena orquestada de tres etapas, frente a ASR-3 y ASR-4, decidimos correrlas en orden y descartamos el paralelo con unión del BPMN para lograr una sola etapa pendiente por pedido, aceptando que la cadena dure la suma de las tres.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-4 | Disponibilidad | Reanudación ≤ 5 s con estado exacto | contribuye | primario |
| ASR-3 | Disponibilidad | ≤ 1 falsa alarma por hora | contribuye | afectado |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Protocolo de comportamiento (orden de las etapas) | Integración · cerrar distancia | EL-16 | «tactic:etapas-consecutivas» |
A3. Alternativas Drivers: ASR-4 (Muy alta), ASR-3 (Alta), S-1, SUP-06, C-03 — fijados antes de evaluar.
| Criterio | Opción A: Etapas consecutivas (elegida) | Opción B: Etapas en paralelo con unión, como el BPMN | |—|—|—| | ASR-4 una etapa pendiente, estado exacto | ++ nunca hay dos pendientes | − dos etapas pueden quedar pendientes a la vez | | ASR-3 ≤ 1 falsa alarma/h | + un plazo corriendo por pedido | − tres plazos corriendo por pedido | | S-1 esperar a las tres | + la última cierra la cadena | + la unión cierra la cadena | | SUP-06 dependencia entre etapas | + despacho valida con factura y descargue hechos | −− despacho valida sin saber si hubo factura | | C-03 duración total frente a la espera del tendero | − suma de las tres | ++ la más lenta | Descartes: B — gana en duración total, pero deja estados con dos etapas pendientes que ASR-4 no contempla y valida despachos sin factura si SUP-06 es cierto.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| S-003a | Sensibilidad | La duración total de la cadena depende de la suma de las tres etapas | Duración normal de cada etapa [PREGUNTA] |
| R-003a | Riesgo | La suma supera el tiempo que el tendero espera antes de ver su pedido en preparación | Ese tiempo es [PREGUNTA] |
| NR-003a | No-riesgo | El orden no cambia el cumplimiento de ASR-3 ni de ASR-4, porque los plazos corren por etapa | SUP-03 |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Experimento | Duración de la cadena completa en serie con carga de Ambiente A, antes de aceptar | Menor que el tiempo de espera del tendero [PREGUNTA]; ≤ 35 s de presupuesto conjunto si ocurre una detención |
| Revisión | Confirmar con el equipo y el negocio el orden y la dependencia de SUP-06 | 1 revisión con acta |
A6. Relaciones: reemplaza: — · refina: ADR-002 · depende-de: ADR-002 · conflicto-con: —
A7. Evidencia visual: DG-SEQ-013 (detalle en la sección 6)
ADR-004: Plazo vencido por pedido y etapa, encontrado por un barrido periódico, con sondeo de salud como apoyo
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 2 · Confianza: Baja — la medida de falsas alarmas depende de la duración normal de cada etapa, que nadie ha medido
Contexto
ASR-3 exige señalar en ≤ 30 s el pedido cuya etapa dejó de avanzar sin señalar error, con ≤ 1 falsa alarma por hora (Ambiente A). La falla es de omisión: la etapa sigue viva y responde, pero el pedido no avanza.
El BPMN propone un heartbeat con la pregunta «¿Is alive?» sobre cada etapa. Un latido detecta que el componente no está; no detecta que un pedido se quedó quieto dentro de un componente vivo (C-01). ADR-002 dejó en la base el estado por pedido y etapa, con su marca de tiempo. R-1 descarta esperar al cierre del día.
¿Cómo se nota, dentro de 30 s, que un pedido concreto dejó de avanzar en una etapa que sigue viva?
Decisión
Adoptaremos un plazo vencido por pedido y etapa: al enviar cada etapa, el Coordinador anota el instante límite. Un Monitor de la cadena barrerá cada 5 s [SUPUESTO] las etapas en curso con el plazo vencido y señalará cada pedido una sola vez. Un sondeo de salud de las etapas solo adelantará la señal cuando una etapa entera caiga. Lo hacemos porque el plazo por pedido es la única de las opciones que detecta la omisión que describe ASR-3.
Consecuencias
- (+) ASR-3: la demora máxima es el plazo de la etapa más un barrido. Con plazo ≤ 25 s [SUPUESTO] cabe en 30 s.
- (+) ASR-3: el sondeo adelanta la señal cuando una etapa entera cae, sin ser la única fuente.
- (−) ASR-3: un plazo corto dispara falsas alarmas y uno largo incumple los 30 s. El plazo hay que calibrarlo contra datos que no existen (TO-004a).
- (−) El Monitor es un punto único de falla: si cae, nadie detecta nada (R-004a).
- (−) Operación: una consulta indexada cada 5 s y un sondeo por etapa, permanentes.
Anexo de trazabilidad
Y-statement: En el contexto de una cadena con estado por pedido y etapa, frente a ASR-3, decidimos un plazo por pedido y etapa revisado por barrido, con sondeo de salud de apoyo, y descartamos el latido solo y el temporizador en memoria para lograr detectar la omisión en ≤ 30 s, aceptando un plazo que hay que calibrar y un Monitor como punto único.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-3 | Disponibilidad | Señal ≤ 30 s, ≤ 1 falsa alarma por hora | satisface | primario |
| ASR-4 | Disponibilidad | Presupuesto conjunto de 35 s | contribuye | afectado |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Excepción / timeout (plazo vencido) | Disponibilidad · detectar | EL-16, EL-17 | «tactic:timeout» |
| Monitor | Disponibilidad · detectar | EL-17 | «tactic:monitor» |
| Ping / echo (sondeo de salud, apoyo) | Disponibilidad · detectar | EL-17, EL-18, EL-19 | «tactic:ping-echo» |
A3. Alternativas Drivers: ASR-3 (Alta), R-1 — fijados antes de evaluar.
| Criterio | Opción A: Plazo por pedido y barrido, con sondeo de apoyo (elegida) | Opción B: Heartbeat solo, como el BPMN | Opción C: Temporizador en memoria del Coordinador, uno por pedido | |—|—|—|—| | ASR-3 detecta la omisión ≤ 30 s | + plazo + barrido ≤ 30 s | KO la etapa viva responde al latido; el pedido quieto no se ve | + dispara al segundo exacto | | ASR-3 ≤ 1 falsa alarma/h | − depende de calibrar el plazo | + pocas falsas alarmas: solo mira caídas | − mismo plazo que calibrar | | R-1 corre mientras atiende | + barrido continuo | + sondeo continuo | + en línea | | ASR-3 señal aunque caiga el Coordinador | + el plazo está en la base | 0 no aplica | −− los temporizadores mueren con el proceso | Descartes: B — KO: no cumple ASR-3, porque detecta la etapa caída y no el pedido detenido (hallazgo H-1 de DG-CMP v3). C — detecta igual de bien mientras el Coordinador vive, pero pierde todos los plazos si cae.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| S-004a | Sensibilidad | La demora de la señal es el plazo más el periodo del barrido | SUP-02, SUP-03 |
| TO-004a | Trade-off | El plazo de cada etapa: detección ▲ si baja (≤ 30 s), falsas alarmas ▼ si baja (≤ 1 por hora) | SUP-03: la duración p99,9 de cada etapa cabe por debajo de 25 s |
| R-004a | Riesgo | El Monitor es punto único de falla de ASR-3 | Una sola instancia; dos instancias con candado en la base es [PREGUNTA] |
| NR-004a | No-riesgo | Un pedido no se señala dos veces por el mismo intento | Clave única de la señal por pedido, etapa e intento |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Experimento | Medir la duración de cada etapa en operación normal durante una hora, antes de aceptar, para fijar el plazo | p99,9 de cada etapa < 25 s |
| Inyección de fallas | Bloquear la validación de despacho, confirmar diez pedidos y medir el tiempo hasta cada señal | ≤ 30 s en los diez |
| Fitness function | Una hora sin bloqueo y contar las señales | ≤ 1 falsa alarma por hora |
A6. Relaciones: reemplaza: — · refina: ADR-002 · depende-de: ADR-002 · conflicto-con: —
A7. Evidencia visual: DG-CMP-002, DG-SEQ-014, DG-STM-001, DG-DEP-001 (detalle en la sección 6)
ADR-005: Idempotencia por pedido y etapa con clave única en la misma transacción del efecto
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 2 · Confianza: Alta — la clave única en la misma transacción es un mecanismo estándar y verificable con una prueba
Contexto
ASR-4 exige cero facturas, descargues u órdenes de despacho duplicados cuando la cadena se reanuda. HU-15 pide lo mismo desde logística. Una etapa puede producir su efecto y fallar antes de confirmarlo: el Coordinador de ADR-002 ve la etapa pendiente, pero la factura ya existe.
El BPMN reintenta desde Método/pago, al comienzo de la cadena, lo que repetiría las etapas ya hechas (hallazgo H-2 de DG-CMP v3). ADR-001 dejó a cada servicio con su propia base transaccional.
¿Cómo garantiza cada etapa que un comando repetido no produzca su efecto dos veces?
Decisión
Haremos idempotente cada etapa, es decir, que repetir la misma orden no produzca un segundo efecto. Cada etapa guardará una fila con clave única por pedido y etapa, en la misma transacción local que produce la factura, el descargue o la orden de despacho. Si la fila ya existe, la etapa no repite el efecto y vuelve a confirmar. Lo hacemos porque es la única opción evaluada que cubre el caso del efecto hecho pero no confirmado.
Consecuencias
- (+) ASR-4: el reintento de ADR-006 y la terminación a mano de HU-14 no duplican efectos.
- (+) HU-15: logística recibe una sola factura, un solo descargue y una sola orden.
- (−) Desarrollo: las tres etapas cargan la misma disciplina; una etapa nueva que la olvide rompe ASR-4 sin que nada lo avise (R-005a).
- (−) Almacenamiento: una fila más por pedido y etapa, que crece con cada pedido.
Anexo de trazabilidad
Y-statement: En el contexto de etapas que pueden producir su efecto y caer antes de confirmarlo, frente a ASR-4, decidimos una clave única por pedido y etapa en la transacción del efecto y descartamos la consulta previa al Coordinador y la transacción distribuida para lograr cero duplicados, aceptando una disciplina que cada etapa debe cumplir.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-4 | Disponibilidad | Duplicados = 0 | satisface | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Transacciones (idempotencia por clave única) | Disponibilidad · prevenir | EL-18, EL-08, EL-19 | «tactic:idempotencia» |
A3. Alternativas Drivers: ASR-4 (Muy alta), R-12 — fijados antes de evaluar.
| Criterio | Opción A: Clave única en la transacción del efecto (elegida) | Opción B: Consultar al Coordinador antes de reenviar | Opción C: Transacción distribuida entre Coordinador y etapa | |—|—|—|—| | ASR-4 duplicados = 0 | ++ la base rechaza el segundo efecto | KO el Coordinador no sabe del efecto hecho sin confirmar | + atómico entre los dos | | ASR-4 reanudación ≤ 5 s | + una consulta indexada | + una consulta | − el protocolo de dos fases bloquea si una parte no responde | | R-12 implementar y medir | + se prueba con un reenvío | + sencillo | −− exige un coordinador de transacciones | Descartes: B — KO: no cumple duplicados = 0 en el caso del efecto producido y no confirmado. C — cumple la atomicidad, pero bloquea la cadena cuando una parte no responde, que es el escenario de ASR-3.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| R-005a | Riesgo | Una etapa que no guarde la fila en la misma transacción duplica sin aviso | Revisión de cada etapa nueva |
| NR-005a | No-riesgo | La facturación y su fila son atómicas | La factura se emite en la base propia, no en un sistema externo [PREGUNTA] |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Inyección de fallas | Matar cada etapa justo después del commit y antes de confirmar; reenviar el comando | 0 facturas, descargues u órdenes duplicados |
| Fitness function | Auditoría diaria de pedidos con más de un efecto por etapa | 0 duplicados |
A6. Relaciones: reemplaza: — · refina: ADR-002 · depende-de: ADR-001 · conflicto-con: —
A7. Evidencia visual: DG-SEQ-015, DG-CLS-001 (detalle en la sección 6)
ADR-006: Un solo intento de reanudación de la etapa pendiente y escalamiento a una persona
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 2 · Confianza: Media — el plazo de 3 s del intento es un supuesto y cabe justo en los 5 s
Contexto
ASR-4 exige que, en ≤ 5 s desde la señal de ASR-3, la cadena esté reanudada o en manos de una persona con el estado exacto. Ningún pedido señalado puede quedarse sin llegar a logística ni a una persona.
El BPMN dibuja una cola con dos reintentos que vuelve a Método/pago (C-01). Dos reintentos con espera creciente no caben en 5 s, y el BPMN no tiene camino hacia una persona (hallazgos H-3 y H-4 de DG-CMP v3). ADR-005 dejó las etapas idempotentes, así que reenviar la etapa pendiente no duplica.
¿Cuántas veces se reintenta la etapa pendiente, y qué pasa cuando el intento no alcanza?
Decisión
Haremos un solo intento de reanudación: el Coordinador reenvía solo la etapa pendiente y espera 3 s [SUPUESTO] su confirmación. Si no llega, publica el pedido escalado con la etapa pendiente y el motivo, y la Bandeja de pedidos escalados se lo muestra a una persona. Lo hacemos porque un intento más el escalamiento es lo que cabe en 5 s. Además, el escalamiento cierra el caso del pedido sin destino.
Consecuencias
- (+) ASR-4: intento de 3 s más publicación caben en 5 s; cero pedidos sin destino.
- (+) HU-14: el responsable recibe la etapa pendiente y el motivo, sin reconstruir qué pasó.
- (−) Las detenciones transitorias que se resolverían con un segundo intento llegan a una persona. Esa carga manual no tiene cifra (R-006a).
- (−) Contradice el BPMN, que dibuja dos reintentos: hay que confirmarlo con el equipo.
- (±) El área a la que pertenece el responsable del pedido escalado sigue abierta.
Anexo de trazabilidad
Y-statement: En el contexto de una cadena con etapas idempotentes, frente a ASR-4, decidimos un solo intento de la etapa pendiente seguido de escalamiento, y descartamos los dos reintentos con espera creciente del BPMN y el escalamiento inmediato, para lograr reanudar o entregar en ≤ 5 s, aceptando más pedidos en manos de personas.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-4 | Disponibilidad | ≤ 5 s desde la señal; 0 pedidos sin destino | satisface | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Reintento (un intento, sin espera creciente) | Disponibilidad · recuperar | EL-16, EL-24 | «tactic:reintento-unico» |
| Degradación con gracia (entrega a una persona) | Disponibilidad · recuperar | EL-16, EL-20 | «tactic:escalamiento» |
A3. Alternativas Drivers: ASR-4 (Muy alta), ASR-3 (Alta, por el presupuesto conjunto de 35 s) — fijados antes de evaluar.
| Criterio | Opción A: Un intento y escalamiento (elegida) | Opción B: Dos reintentos con espera creciente, como el BPMN | Opción C: Escalamiento inmediato, sin intento | |—|—|—|—| | ASR-4 ≤ 5 s | + 3 s de intento más la publicación | KO dos intentos con espera no caben en 5 s | ++ inmediato | | ASR-4 reanuda antes de escalar | + un intento | + dos intentos | −− ninguno: contradice la respuesta del ASR | | ASR-4 pedidos sin destino = 0 | + escalamiento explícito | − el BPMN no tiene camino a una persona | + escalamiento explícito | | ASR-3 presupuesto de 35 s | + 30 + 5 | − excede | ++ 30 + casi 0 | Descartes: B — KO: no cumple los 5 s de ASR-4, y vuelve a Método/pago. C — cumple el tiempo con holgura, pero no intenta reanudar, que es la primera mitad de la respuesta de ASR-4.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| S-006a | Sensibilidad | El cumplimiento de 5 s depende del plazo del intento | SUP-04 |
| R-006a | Riesgo | Muchas detenciones transitorias saturan a quien atiende la bandeja | Frecuencia de detenciones [PREGUNTA] |
| NR-006a | No-riesgo | Un intento que el Coordinador no alcanza a procesar llega igual a la bandeja | La cola de reintentos envía sus mensajes fallidos a la bandeja |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Inyección de fallas | Liberar el bloqueo tras la señal y medir el tiempo hasta que la cadena avanza | ≤ 5 s desde la señal |
| Inyección de fallas | Mantener el bloqueo y medir el tiempo hasta la bandeja | ≤ 5 s desde la señal; 0 pedidos sin destino |
A6. Relaciones: reemplaza: — · refina: ADR-002 · depende-de: ADR-004, ADR-005 · conflicto-con: —
A7. Evidencia visual: DG-CMP-002, DG-SEQ-015, DG-STM-001 (detalle en la sección 6)
ADR-007: Huella del dispositivo como parte de la identidad del vendedor, verificada después de abrir la sesión
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 3 · Confianza: Media — no se sabe qué identificadores expone el equipo ni cuántos cambios legítimos ocurren por mes
Contexto
ASR-1 exige avisar al área de seguridad en ≤ 2 s cuando una sesión de vendedor, abierta con credenciales correctas, la opera un dispositivo que no es el suministrado. Admite ≤ 1 falsa alarma por cada 100 cambios legítimos de dispositivo. R-2 da algo contra qué comparar: CCP entrega el dispositivo. R-11 deja al tendero sin ese punto de comparación.
El atacante no falla el inicio de sesión: el sistema ve una sesión válida. La reacción queda en manos del área de seguridad; el sistema llega hasta el aviso. ADR-001 dejó la apertura de sesión como un evento.
¿Dónde se compara el dispositivo con el registrado, sin bloquear al vendedor legítimo?
Decisión
Incluiremos la huella del dispositivo en la identidad del vendedor: un resumen de identificadores del equipo, que la app calcula al abrir sesión. Un Verificador de dispositivo consumirá cada apertura de sesión y comparará la huella con la registrada. Si no coinciden, avisará al área de seguridad con vendedor, dispositivo y hora. Un camino de registro previo evitará que el cambio legítimo de equipo dispare el aviso. Verificamos después de abrir la sesión, porque ASR-1 pide detectar y avisar, no impedir, y así el inicio de sesión no espera la comparación.
Consecuencias
- (+) ASR-1: comparación indexada por vendedor, fuera del inicio de sesión; cabe en 2 s.
- (+) El área de seguridad recibe identidad, dispositivo y hora, que es lo que espera.
- (−) El tercero opera durante los segundos que tarda el aviso, y hasta que seguridad actúe.
- (−) Operación: cada cambio legítimo de equipo tiene que registrarse antes de usarse, o dispara el aviso. Quién lo registra está abierto.
- (−) R-9: el tendero queda sin protección equivalente (R-007a).
Anexo de trazabilidad
Y-statement: En el contexto de vendedores que operan un dispositivo suministrado, frente a ASR-1, decidimos una huella del dispositivo verificada por evento después de abrir la sesión y descartamos la verificación dentro del inicio de sesión y la revisión por lotes para lograr el aviso en ≤ 2 s sin bloquear al vendedor legítimo, aceptando que el tercero opere hasta que seguridad actúe.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-1 | Seguridad | Aviso ≤ 2 s; ≤ 1 falsa alarma por 100 cambios legítimos | satisface | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Identificar y autenticar actores (dispositivo incluido) | Seguridad · resistir | EL-03, EL-05 | «tactic:autenticar-dispositivo» |
| Detectar intrusiones | Seguridad · detectar | EL-06 | «tactic:detectar-intrusiones» |
| Informar | Seguridad · reaccionar | EL-13 | «tactic:informar» |
A3. Alternativas Drivers: ASR-1 (Muy alta), R-1, R-2 — fijados antes de evaluar. STRIDE: S.
| Criterio | Opción A: Verificación por evento tras abrir la sesión (elegida) | Opción B: Verificación dentro del inicio de sesión | Opción C: Revisión por lotes de las sesiones del día | |—|—|—|—| | ASR-1 aviso ≤ 2 s | + evento más consulta indexada | ++ el aviso sale antes de abrir | KO horas, no segundos | | ASR-1 falsas alarmas | + el vendedor legítimo sigue operando mientras se aclara | − la falsa alarma bloquea a un vendedor legítimo | + mismo registro | | R-1 sin ventana por lotes | + continuo | + continuo | KO exige ventana | | R-2 dispositivo suministrado | + lo usa | + lo usa | + lo usa | Descartes: B — cumple con holgura, pero convierte cada falsa alarma en un vendedor bloqueado en la tienda y pone la comparación en el camino crítico del inicio de sesión. C — KO: no cumple los 2 s de ASR-1 y choca con R-1.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| S-007a | Sensibilidad | Las falsas alarmas dependen de qué tan estable sea la huella ante una actualización del sistema operativo | Identificadores del equipo [PREGUNTA] |
| R-007a | Riesgo | La suplantación del tendero no tiene señal equivalente | R-11; fuera del alcance |
| R-007b | Riesgo | Un atacante que copie la huella pasa la comparación | La huella se calcula en el dispositivo; sin gestión de dispositivos [PREGUNTA] |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Experimento | Abrir sesión con la credencial de un vendedor desde un dispositivo de prueba no registrado | Aviso ≤ 2 s desde la apertura |
| Experimento | Registrar y usar 100 cambios legítimos de dispositivo | ≤ 1 falsa alarma |
A6. Relaciones: reemplaza: — · refina: ADR-001 · depende-de: ADR-001 · conflicto-con: —
A7. Evidencia visual: DG-CMP-001, DG-SEQ-016 (detalle en la sección 6)
ADR-008: Detección de la escritura indebida por un evento que sale en la misma transacción de la escritura
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 3 · Confianza: Media — no se sabe qué rol del negocio es el actor de solo consulta ni cuántas escrituras por segundo hay que evaluar
Contexto
ASR-2 parte de una escritura ya ejecutada por un actor cuyo permiso solo cubría consultar, y exige reaccionar en ≤ 5 s desde su detección. La reacción depende de que la detección exista y de que ninguna escritura se le escape. R-7 exige que la información del tendero solo la conozca quien está autorizado.
ADR-001 dejó la comunicación por eventos, con el riesgo de que un evento salga sin su escritura o una escritura sin su evento. El token que trae el actor puede decir un permiso que ya no tiene. Revisar un registro al cierre del día choca con R-1.
¿Cómo se entera el sistema, pocos segundos después, de que una escritura la hizo alguien sin permiso para escribir?
Decisión
Cada escritura en Pedidos e Inventario guardará, en su misma transacción, una fila en la bitácora de escrituras y otra en un outbox. El outbox es una tabla de eventos pendientes de publicar. La fila de bitácora lleva el actor, el permiso usado y el estado anterior. Un relevo publicará el evento después del commit. Un Detector de escrituras indebidas consumirá cada evento y lo comparará con los permisos vigentes del actor, no con los del token. Lo hacemos porque garantiza que ninguna escritura quede sin evento y que la decisión use el permiso actual.
Consecuencias
- (+) ASR-2: cada escritura produce su evento; ninguna se escapa del Detector.
- (+) ASR-2: la bitácora conserva el estado anterior que la compensación de ADR-010 necesita.
- (−) Rendimiento: cada escritura suma dos filas en su transacción.
- (−) El Detector consulta los permisos vigentes una vez por escritura; si el Gestor de sesión no responde, la detección se retrasa (R-008a).
- (±) La detección no impide la escritura: el control preventivo de permisos sigue existiendo, y ASR-2 cubre el caso en que ese control falló.
Anexo de trazabilidad
Y-statement: En el contexto de escrituras que pueden ejecutarse sin permiso, frente a ASR-2, decidimos una bitácora y un outbox en la misma transacción, con detección contra los permisos vigentes, y descartamos el sondeo periódico de la bitácora y la evaluación síncrona antes de responder para lograr que ninguna escritura se escape, aceptando dos filas más por escritura.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-2 | Seguridad | Reacción ≤ 5 s desde la detección; efecto residual = 0 | contribuye | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Detectar intrusiones (escritura contra permiso vigente) | Seguridad · detectar | EL-10 | «tactic:detectar-escritura» |
| Registro de auditoría | Seguridad · recuperar | EL-09, EL-07, EL-08 | «tactic:bitacora-escrituras» |
A3. Alternativas Drivers: ASR-2 (Alta), R-1, R-7 — fijados antes de evaluar. STRIDE: E.
| Criterio | Opción A: Bitácora y outbox en la transacción, detector por evento (elegida) | Opción B: Sondeo periódico de la bitácora | Opción C: Evaluación síncrona antes de responder la escritura | |—|—|—|—| | ASR-2 ninguna escritura se escapa | ++ evento atómico con la escritura | + la bitácora es completa | + evalúa todas | | ASR-2 reacción ≤ 5 s | + evento en milisegundos | − demora = periodo del sondeo | ++ inmediata | | R-1 sin ventana | + continuo | + continuo con sondeo corto | + en línea | | ASR-2 sin control síncrono en cada escritura (ficha) | − dos filas más en la transacción | + una fila | −− una consulta de permisos en el camino de cada escritura | Descartes: B — cumple si el sondeo es corto, pero cada segundo del periodo sale de los 5 s y la carga sube con la frecuencia. C — detecta antes, pero convierte la detección en un control preventivo en el camino de cada escritura. La ficha de ASR-2 lo descarta: con ese umbral, el bloqueo iría síncrono en cada escritura.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| S-008a | Sensibilidad | El instante de detección depende del retraso del relevo del outbox | El relevo publica en milisegundos tras el commit |
| R-008a | Riesgo | Si el Gestor de sesión no responde, las escrituras esperan en la cola sin evaluar | Una caché de permisos de pocos segundos es [PREGUNTA] |
| NR-008a | No-riesgo | Un permiso recién quitado se ve en la escritura siguiente | El Detector no guarda caché de permisos |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Experimento | Ejecutar una escritura con credencial de solo consulta y medir hasta la detección y la reacción | Reacción ≤ 5 s desde la detección |
| Inyección de fallas | Matar el servicio entre el commit y la publicación | 0 escrituras sin evento tras reiniciar |
A6. Relaciones: reemplaza: — · refina: ADR-001 · depende-de: ADR-001 · conflicto-con: —
A7. Evidencia visual: DG-CMP-001, DG-SEQ-017 (detalle en la sección 6)
ADR-009: Revocación de la sesión en la puerta de entrada, con una lista de revocación consultada en cada petición
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 3 · Confianza: Media — el equipo no ha decidido qué hacer si la lista de revocación no responde
Contexto
ASR-2 exige cerrar la sesión viva del actor en ≤ 5 s desde la detección, con cero escrituras posteriores. Un token firmado se verifica sin consultar a nadie, así que sigue sirviendo hasta que vence, 15 min [SUPUESTO]. Bloquear al actor en el Gestor de sesión impide un inicio de sesión nuevo, pero no corta la sesión que ya tiene.
R-1 exige operar 7x24x365, así que lo que se ponga en el camino de cada petición también tiene que estar siempre disponible. ADR-008 dejó la detección; falta dónde se hace efectivo el corte.
¿En qué punto se corta una sesión que ya tiene un token válido, para que su siguiente petición no pase?
Decisión
Pondremos una Puerta de entrada de la API delante de todos los servicios. Verificará el token de cada petición y consultará una lista de revocación compartida, en memoria, con la sesión y el actor revocados. La Reacción ante acceso indebido anotará ahí la sesión y el actor. La petición siguiente recibirá un rechazo aunque el token siga vigente. Lo hacemos porque es la única opción evaluada que corta la sesión viva en milisegundos sin acortar la vida del token para todos.
Consecuencias
- (+) ASR-2: la escritura siguiente del actor revocado no llega al servicio; cero escrituras posteriores.
- (+) Un solo punto de corte para todos los servicios; no depende de que cada uno recuerde revisar.
- (−) Latencia: una consulta a memoria compartida por cada petición.
- (−) R-1: si la lista no responde, rechazar todo protege ASR-2 y deja el sistema sin servicio; dejar pasar protege R-1 y abre la puerta a ASR-2 (TO-009a).
- (−) Operación: la Puerta de entrada y la lista quedan en el camino de toda petición.
Anexo de trazabilidad
Y-statement: En el contexto de sesiones con tokens que se verifican sin consultar a nadie, frente a ASR-2, decidimos una Puerta de entrada que consulta una lista de revocación en cada petición y descartamos los tokens de vida corta y la consulta de la sesión al Gestor en cada petición para lograr cortar la sesión viva en milisegundos, aceptando una consulta por petición y una pieza más en el camino crítico.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-2 | Seguridad | Cierre ≤ 5 s; escrituras posteriores = 0 | satisface | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Revocar acceso | Seguridad · reaccionar | EL-04, EL-12, EL-11 | «tactic:revocar-acceso» |
| Autenticar y autorizar en el borde | Seguridad · resistir | EL-04 | «tactic:autorizar-en-borde» |
A3. Alternativas Drivers: ASR-2 (Alta), R-1 — fijados antes de evaluar. STRIDE: E.
| Criterio | Opción A: Puerta de entrada con lista de revocación (elegida) | Opción B: Tokens de vida corta, sin lista | Opción C: El Gestor de sesión valida cada petición | |—|—|—|—| | ASR-2 cierre ≤ 5 s | ++ la petición siguiente se rechaza | KO el token sirve hasta que vence, salvo que viva ≤ 5 s | ++ la sesión se consulta en cada petición | | ASR-2 escrituras posteriores = 0 | + | − posibles durante la vida del token | + | | R-1 disponibilidad | − la lista queda en el camino de cada petición | ++ nada nuevo en el camino | −− el Gestor queda en el camino de cada petición, con más carga que una consulta a memoria | Descartes: B — KO: no cumple ASR-2 salvo con tokens de ≤ 5 s, que obligan a renovarlos sin parar. C — cumple ASR-2, pero pone un servicio con lógica y base en el camino de cada petición, con más riesgo para R-1 que una consulta a memoria.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| TO-009a | Trade-off | Comportamiento si la lista no responde: rechazar protege ASR-2 y degrada R-1; dejar pasar hace lo contrario | La preferencia del equipo es [PREGUNTA] |
| S-009a | Sensibilidad | Las claves de revocación deben vivir al menos lo que vive el token | SUP-05 |
| NR-009a | No-riesgo | La revocación alcanza a todos los servicios | Toda petición de la app pasa por la Puerta de entrada |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Experimento | Revocar una sesión activa y medir el tiempo hasta el primer rechazo | ≤ 5 s desde la detección; 0 escrituras posteriores |
| Inyección de fallas | Detener la lista de revocación con tráfico de Ambiente A | Comportamiento según la opción que fije el equipo en TO-009a |
A6. Relaciones: reemplaza: — · refina: — · depende-de: ADR-008 · conflicto-con: —
A7. Evidencia visual: DG-CMP-001, DG-SEQ-017, DG-STM-002, DG-DEP-001 (detalle en la sección 6)
ADR-010: Reversión de la escritura indebida por compensación, dentro de una reacción ordenada de menor a mayor costo
Estado: Propuesta · Fecha: 2026-09-26 · Iteración ADD: 3 · Confianza: Media — la compensación de un pedido cuya cadena ya arrancó no está resuelta
Contexto
ASR-2 exige revertir la escritura indebida en ≤ 5 s desde la detección y que, 60 s después de la reacción, su efecto sea cero. Entre la escritura indebida y la reversión, otros vendedores pueden haber descargado el mismo inventario: restaurar el valor anterior borraría sus cambios. R-4 exige que la cifra de inventario siga exacta.
ADR-008 dejó en la bitácora el estado anterior de cada escritura, y ADR-009 dejó el corte de la sesión. ADR-002 hace que un pedido indebido arranque su cadena de tres etapas.
¿Cómo se deshace la escritura indebida sin borrar lo que otros escribieron después?
Decisión
Revertiremos por compensación: una operación inversa que deshace el efecto de la escritura indebida sin tocar lo que vino después. Si fue un descargue, devolvemos la cantidad; si fue un pedido, lo anulamos. La Reacción ejecutará cuatro pasos en orden de menor a mayor costo: revocar la sesión, bloquear al actor, compensar la escritura y avisar a seguridad. Si la compensación falla, el aviso saldrá con la reversión pendiente. Lo hacemos porque es la única opción evaluada que deshace sin borrar escrituras legítimas (R-4).
Consecuencias
- (+) ASR-2: revocar primero corta las escrituras siguientes en milisegundos, antes del paso más lento.
- (+) ASR-2 y R-4: la compensación suma o resta, así que conserva los cambios legítimos posteriores.
- (−) Desarrollo: cada escritura necesita su operación inversa, y un pedido cuya cadena ya arrancó exige compensar también sus etapas (R-010a).
- (−) Si Pedidos o Inventario no responden, la reversión queda pendiente y el efecto residual puede pasar de 60 s.
Anexo de trazabilidad
Y-statement: En el contexto de escrituras indebidas que conviven con escrituras legítimas posteriores, frente a ASR-2, decidimos una compensación dentro de una reacción ordenada y descartamos restaurar la imagen anterior y retener las escrituras hasta aprobarlas para lograr revertir sin borrar lo ajeno, aceptando una operación inversa por cada escritura.
A1. ASRs atendidos
| ASR | Atributo | Medida | Efecto esperado | Rol |
|---|---|---|---|---|
| ASR-2 | Seguridad | Reversión ≤ 5 s; efecto residual a los 60 s = 0 | satisface | primario |
A2. Tácticas
| Táctica (curso) | Familia | Elemento(s) | Estereotipo en diagrama |
|---|---|---|---|
| Rollback por compensación | Disponibilidad · recuperar, al servicio de seguridad | EL-11, EL-07, EL-08 | «tactic:compensacion» |
| Revocar, bloquear e informar (reacción ordenada) | Seguridad · reaccionar | EL-11, EL-05 | «tactic:bloquear-actor» |
A3. Alternativas Drivers: ASR-2 (Alta), R-4 — fijados antes de evaluar. STRIDE: E.
| Criterio | Opción A: Compensación semántica (elegida) | Opción B: Restaurar la imagen anterior de la fila | Opción C: Retener la escritura hasta que el Detector la apruebe | |—|—|—|—| | ASR-2 reversión ≤ 5 s | + una operación inversa | ++ una escritura | ++ no hay nada que revertir | | ASR-2 efecto residual = 0 | + | −− borra los cambios legítimos posteriores | ++ | | R-4 inventario exacto | + la cifra suma y resta | KO pisa descargues ajenos | −− el inventario no refleja escrituras en espera | Descartes: B — KO: viola R-4, porque restaurar el valor anterior borra los descargues legítimos que llegaron después. C — gana en reversión, pero cambia el negocio: ninguna escritura queda firme hasta aprobarse, y la cifra deja de ser la del momento.
A4. Sensibilidad, trade-offs y riesgos
| ID | Tipo | Descripción | Supuesto del que depende |
|---|---|---|---|
| R-010a | Riesgo | Un pedido indebido cuya cadena ya emitió factura o descargue exige compensar también esas etapas | ADR-002 y ADR-003: a lo sumo dos etapas por compensar |
| S-010a | Sensibilidad | El tiempo de reversión depende de que Pedidos e Inventario respondan | S-3 deja fuera la caída por infraestructura |
| NR-010a | No-riesgo | La misma escritura no se compensa dos veces | La Reacción registra cada reacción con clave de escritura |
A5. Confirmación
| Tipo | Qué se prueba | Umbral |
|---|---|---|
| Experimento | Escritura con credencial de solo consulta seguida de un descargue legítimo del mismo producto | Reversión ≤ 5 s; el descargue legítimo se conserva |
| Fitness function | Revisar el estado 60 s después de cada reacción | Efecto residual = 0 |
A6. Relaciones: reemplaza: — · refina: — · depende-de: ADR-008, ADR-009, ADR-002 · conflicto-con: —
A7. Evidencia visual: DG-SEQ-017, DG-CLS-002 (detalle en la sección 6)
5. Matriz ASR × ADR
| ASR | Prioridad | ADR-001 | ADR-002 | ADR-003 | ADR-004 | ADR-005 | ADR-006 | ADR-007 | ADR-008 | ADR-009 | ADR-010 | Hueco |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ASR-1 | Muy alta | C | — | — | — | — | — | S | — | — | — | — |
| ASR-2 | Alta | C | — | — | — | — | — | — | C | S | S | — |
| ASR-3 | Alta | C | C | C | S | — | — | — | — | — | — | — |
| ASR-4 | Muy alta | C | C | C | C | S | S | — | — | — | — | — |
6. Plan de diagramas
| DG | Tipo | Pregunta que responde | ASR | ADR | Elementos | Conectores | Táctica visible | Precio a anotar | Medida visible | Camino de fallo | Vista R&W |
|---|---|---|---|---|---|---|---|---|---|---|---|
| DG-CMP-001 | componentes | ¿Qué componentes detectan la suplantación y la escritura indebida, y por dónde se hablan? | ASR-1, ASR-2 | ADR-001, ADR-007, ADR-008, ADR-009, ADR-010 | EL-03, EL-04, EL-05, EL-06, EL-07, EL-08, EL-09, EL-10, EL-11, EL-12, EL-13, EL-15 | CN-03, CN-05, CN-08, CN-09, CN-10, CN-13, CN-15, CN-17, CN-18, CN-19, CN-20, CN-22 | «tactic:intermediario-mensajes», «tactic:autenticar-dispositivo», «tactic:detectar-intrusiones», «tactic:informar», «tactic:detectar-escritura», «tactic:bitacora-escrituras», «tactic:revocar-acceso», «tactic:autorizar-en-borde», «tactic:compensacion» | Consulta a la lista en cada petición; dos filas más por escritura; salto por el bróker | ≤ 2 s (ASR-1); ≤ 5 s (ASR-2) | no aplica | funcional |
| DG-CMP-002 | componentes | ¿Qué componentes llevan, vigilan y reanudan la cadena del pedido? | ASR-3, ASR-4 | ADR-001, ADR-002, ADR-004, ADR-006 | EL-07, EL-15, EL-16, EL-17, EL-18, EL-08, EL-19, EL-20, EL-22, EL-24, EL-23 | CN-25, CN-26, CN-32, CN-33, CN-34, CN-36, CN-37, CN-38, CN-40, CN-41 | «tactic:intermediario-mensajes», «tactic:transaccion-local», «tactic:orquestacion», «tactic:estado-por-etapa», «tactic:timeout», «tactic:monitor», «tactic:ping-echo», «tactic:reintento-unico», «tactic:escalamiento» | Coordinador y Monitor como puntos centrales; bróker común | ≤ 30 s (ASR-3); ≤ 5 s (ASR-4) | no aplica | funcional |
| DG-DEP-001 | despliegue | ¿Dónde corre cada servicio y qué piezas quedan como instancia única? | ASR-2, ASR-3 | ADR-001, ADR-004, ADR-009 | EL-04, EL-12, EL-15, EL-16, EL-17, EL-23 | CN-05, CN-33, CN-41 | «tactic:intermediario-mensajes», «tactic:monitor», «tactic:revocar-acceso» | Monitor, bróker y lista de revocación como instancia única (R-001a, R-004a, TO-009a) | 1 instancia por pieza marcada | no aplica | despliegue |
| DG-STM-001 | estados | ¿Por qué estados pasa cada etapa de un pedido y qué dispara cada transición? | ASR-3, ASR-4 | ADR-002, ADR-004, ADR-006 | EL-16, EL-17 | CN-33, CN-37 | «tactic:estado-por-etapa», «tactic:timeout», «tactic:reintento-unico», «tactic:escalamiento» | Dos escrituras por etapa; plazo por calibrar (TO-004a) | plazo ≤ 25 s [SUPUESTO]; intento 3 s [SUPUESTO] | sí — EN_CURSO con plazo vencido → reintento → ESCALADA | información |
| DG-CLS-001 | clases | ¿Qué datos guardan el estado de la cadena, las señales y las etapas procesadas? | ASR-3, ASR-4 | ADR-002, ADR-005 | EL-16, EL-17, EL-18, EL-23 | CN-41, CN-43 | «tactic:estado-por-etapa», «tactic:idempotencia» | Una fila por pedido y etapa en cada tabla | clave única (idPedido, etapa) | no aplica | información |
| DG-SEQ-013 | secuencia | ¿Cómo recorre un pedido del tendero las tres etapas en orden hasta logística, y qué pasa si una se detiene? | ASR-3, ASR-4 | ADR-003 | EL-02, EL-03, EL-07, EL-16, EL-15, EL-18, EL-08, EL-19, EL-22 | CN-02, CN-25, CN-26, CN-27, CN-28, CN-29, CN-32, CN-40 | «tactic:etapas-consecutivas» | La cadena dura la suma de las tres etapas (S-003a) | duración total vs. espera del tendero [PREGUNTA] |
sí — validación de despacho no responde; el pedido queda EN_CURSO | concurrencia |
| DG-SEQ-014 | secuencia | ¿Cómo se nota en ≤ 30 s un pedido detenido en una etapa que sigue viva? | ASR-3 | ADR-004 | EL-16, EL-17, EL-19, EL-24 | CN-33, CN-35, CN-36 | «tactic:timeout», «tactic:monitor», «tactic:ping-echo» | El sondeo responde aunque el pedido esté quieto; el plazo hay que calibrarlo | señal ≤ 30 s = plazo ≤ 25 s + barrido 5 s [SUPUESTO] | sí — validación de despacho viva pero sin avanzar | concurrencia |
| DG-SEQ-015 | secuencia | ¿Cómo se reanuda la etapa pendiente en ≤ 5 s sin duplicar, y cuándo va a una persona? | ASR-4 | ADR-005, ADR-006 | EL-24, EL-16, EL-15, EL-18, EL-23, EL-20, EL-21 | CN-37, CN-26, CN-27, CN-43, CN-30, CN-38, CN-39 | «tactic:idempotencia», «tactic:reintento-unico», «tactic:escalamiento» | Transitorios que llegan a una persona (R-006a) | ≤ 5 s desde la señal; 0 duplicados | sí — efecto hecho sin confirmar; intento sin respuesta en 3 s → bandeja | concurrencia |
| DG-SEQ-016 | secuencia | ¿Cómo llega en ≤ 2 s el aviso de una sesión abierta desde un dispositivo no suministrado? | ASR-1 | ADR-007 | EL-01, EL-03, EL-04, EL-05, EL-15, EL-06, EL-13, EL-14 | CN-01, CN-03, CN-04, CN-08, CN-09, CN-10, CN-11, CN-12 | «tactic:autenticar-dispositivo», «tactic:detectar-intrusiones», «tactic:informar» | El tercero opera hasta que seguridad actúa; cambio legítimo exige registro previo | aviso ≤ 2 s desde la apertura | sí — huella no coincide; también el cambio legítimo ya registrado que no avisa | concurrencia |
| DG-SEQ-017 | secuencia | ¿Cómo se detecta la escritura indebida y se bloquea, cierra y revierte en ≤ 5 s? | ASR-2 | ADR-008, ADR-009, ADR-010 | EL-04, EL-08, EL-09, EL-15, EL-10, EL-05, EL-11, EL-12, EL-13 | CN-07, CN-14, CN-16, CN-17, CN-18, CN-19, CN-20, CN-21, CN-23, CN-24, CN-05 | «tactic:detectar-escritura», «tactic:bitacora-escrituras», «tactic:revocar-acceso», «tactic:autorizar-en-borde», «tactic:compensacion», «tactic:bloquear-actor» | Consulta a la lista en cada petición; reversión pendiente si Inventario no responde | ≤ 5 s desde la detección; 0 escrituras posteriores; efecto a los 60 s = 0 | sí — escritura indebida; segunda escritura rechazada; compensación que falla | concurrencia |
| DG-STM-002 | estados | ¿Por qué estados pasan la sesión y el actor desde la detección hasta el bloqueo? | ASR-2 | ADR-009 | EL-04, EL-05, EL-12 | CN-05, CN-20 | «tactic:revocar-acceso», «tactic:autorizar-en-borde» | La lista caída obliga a elegir entre rechazar o dejar pasar (TO-009a) | revocación ≤ 5 s desde la detección | sí — lista de revocación sin respuesta | información |
| DG-CLS-002 | clases | ¿Qué guarda la bitácora para poder compensar, y cómo se registra cada reacción? | ASR-2 | ADR-010 | EL-07, EL-08, EL-09, EL-11 | CN-13, CN-14 | «tactic:compensacion», «tactic:bloquear-actor» | Una operación inversa por tipo de escritura | marcas de tiempo de detección, revocación, bloqueo y reversión | no aplica | información |
7. Abierto
Preguntas:
- ¿Cuántos pedidos y consultas por minuto hay en operación normal, sumando los cinco países? Sin la cifra, las pruebas de A5 no replican el Ambiente A.
- ¿Cuánto espera el tendero antes de ver su pedido en preparación? Acota la duración total de la cadena en serie (ADR-003) y el presupuesto de 35 s.
- ¿Cuál es la duración p99,9 de cada etapa en operación normal? Sin ella no se fija el plazo de ADR-004. Es el experimento previo a aceptar ese ADR.
- ¿La validación de despacho necesita la factura y el descargue hechos (SUP-06)? Si no, ADR-003 se reabre.
- ¿Qué hace la Puerta de entrada si la lista de revocación no responde: rechazar o dejar pasar (TO-009a)?
- ¿Qué rol del negocio es el actor de solo consulta? ¿A qué área pertenece el responsable del pedido escalado?
- ¿Qué identificadores expone el dispositivo suministrado, y CCP lo administra con alguna herramienta de gestión? ¿Quién registra un cambio legítimo de equipo?
- ¿Se corren dos instancias del Monitor con un candado en la base (R-004a)?
- ¿La factura se emite en la base propia o en un sistema externo (NR-005a)?
- ¿Por qué canal llega el aviso al área de seguridad (CN-12)?
Supuestos: SUP-01 pila Java 21, Spring Boot 3, PostgreSQL, RabbitMQ y Redis. SUP-02 barrido cada 5 s. SUP-03 plazo por etapa ≤ 25 s y mayor que su p99,9. SUP-04 intento de reanudación de 3 s. SUP-05 token de 15 min. SUP-06 orden de dependencia entre etapas.
Riesgos abiertos: R-001a bróker como punto común de los cuatro caminos. R-002a Coordinador como punto central. R-003a duración en serie frente a la espera del tendero. R-004a Monitor como punto único de falla de ASR-3. R-006a carga manual por detenciones transitorias. R-007a tendero sin señal equivalente. R-007b huella copiable. R-008a detección retrasada si el Gestor de sesión no responde. R-010a pedido indebido con la cadena ya en curso.
Fuera de alcance: Seguridad — la suplantación del tendero (R-11), la divulgación entre vendedores (R-6) y la manipulación y el repudio de STRIDE. Disponibilidad — las fallas de infraestructura (S-3); la redundancia del bróker, de la base y de la lista de revocación es decisión de infraestructura. Desempeño — fue el atributo del reto 1.
Cambios que estas decisiones piden a los diagramas v3: ADR-003 contradice DG-CMP-002 y DG-CST-009 de DG-CMP-componentes-reto2.md, que dibujan las etapas en paralelo; si el equipo acepta ADR-003, esos dos diagramas cambian. Las líneas «Diagramas afectados» de las cajas blancas v3 son: ADR-001 → DG-CMP-001, DG-CMP-002 · ADR-002 → DG-CST-009 · ADR-004 → DG-CST-010, DG-SEQ-010, DG-SEQ-012 · ADR-005 y ADR-006 → DG-SEQ-009, DG-CST-011, DG-SEQ-011, DG-CST-012, DG-CST-005 · ADR-007 → DG-CST-002, DG-SEQ-002, DG-CST-003, DG-SEQ-003, DG-CST-008, DG-SEQ-008 · ADR-008 → DG-CST-004, DG-SEQ-004, DG-CST-006, DG-SEQ-006 · ADR-009 → DG-CST-001, DG-SEQ-001 · ADR-010 → DG-CST-005, DG-SEQ-005, DG-CST-007, DG-SEQ-007.
Lint: 0 errores, 12 avisos, todos justificados. W12 (10 avisos): el lint solo reconoce restricciones con dos dígitos (R-01), y este proyecto numera R-1, S-1 y SUP-06; los diez criterios sí nombran su driver. W08 (2 avisos): DG-CMP-001 y DG-CMP-002 tienen 12 y 11 elementos porque cada uno cubre dos ASR que comparten componentes; partirlos duplicaría Pedidos, Inventario y el bróker, y la versión 3 ya los dibujó así.