Saltearse al contenido

Decisiones técnicas clave (ADRs)

Cada ADR (Architecture Decision Record) documenta una decisión en formato Nygard: contexto, decisión, consecuencias. Aquí se destacan las 7 más relevantes para entender la solución. El listado completo de 36 ADRs está en Anexos.

Cada ADR tiene dos pestañas:

  • Resumen ejecutivo — para directivos y operaciones.
  • Detalle técnico — para IT y arquitectos.

ADR-038 — Zona como unidad operativa mínima

Qué se decidió: la zona (50-200m, ej. “Zona Norte”) es la unidad mínima de ubicación de un trailer. No hay slots ni cajones dentro de las zonas.

Por qué: el patio del cliente no tiene marcas físicas en el piso (es terraplén irregular), no se pueden poner postes con QR (riesgo de colisión con tractos), y el GPS comercial tiene precisión de ±15-30m — distingue zonas, no posiciones dentro de ellas.

Beneficio: modelo simple, captura rápida (dropdown de 10-20 zonas), sin infraestructura física requerida en el patio.

Trade-off aceptado: no se podrá consultar “qué trailer está en la fila 3, cajón 7” — sólo “qué trailers están en Zona Norte”. El cliente lo aceptó como reflejo fiel de su operación real.


ADR-039 — GPS como mecanismo de confirmación, no fuente de verdad

Qué se decidió: el personal de patio es la fuente de verdad de toda entrada, salida y movimiento. El GPS Samsara confirma lo que el personal ya capturó, no genera eventos por sí solo.

Por qué: el cliente clarificó que su cultura es “el personal captura todo, el GPS valida”. No quieren un sistema donde “el GPS decidió” sin intervención humana. Además, el GPS Samsara tiene ±15-30m de precisión — no es suficiente para confiar en él como única fuente.

Beneficio: cultura alineada con el cliente, trailers visitantes (~5% sin GPS) tienen flujo de primera clase (no excepción), anomalías más accionables.

Trade-off aceptado: menos automatización vs propuesta original; latencia mayor en detección de salidas fantasma (mitigado con anomalía UnexpectedManualGap).


ADR-040 — ShipmentDocument con QR como entrada primaria

Qué se decidió: el documento físico que trae el transportista (la “carta de instrucciones / hoja de salida”) se modela como entidad ShipmentDocument. El personal de patio escanea su QR como primer paso del registro de entrada — el sistema pre-llena ~90% de los campos.

Por qué: el propio cliente identificó este Quick Win. Hoy el personal de patio transcribe a mano lo que el QR ya contiene; reducir captura de ~20 campos a “scan + confirmar” baja el tiempo de 3 minutos a 30 segundos.

Beneficio: ~70-80% de reducción en tiempo de captura, sellos como entidad de primera clase, trailers visitantes tienen identificación estructurada.

Trade-off aceptado: nueva entidad agregada al modelo (CRUD adicional); si el TMS del cliente no emite QR todavía, el flujo degrada a captura manual (variante 2).


ADR-008 — Multi-yard nativo desde Sprint 1

Qué se decidió: el sistema soporta multiple yards desde el día uno, con permisos por yard. Un mismo usuario puede tener acceso a varios patios con roles diferenciados.

Por qué: el cliente ya opera multi-patio (Dulces Nombres + Saltillo) pero su sistema actual no diferencia permisos. Diseñar multi-yard desde el inicio evita re-arquitecturas costosas después.

Beneficio: sin retrabajo cuando el cliente agregue un nuevo patio; permisos granulares por yard desde el inicio.


ADR-001 — Result pattern obligatorio

Qué se decidió: los errores de negocio (validaciones, reglas, conflictos) no se lanzan como excepciones. Se retornan como objetos Result<T> con error tipado.

Beneficio: flujo de errores predecible y testeable; los logs no se contaminan con BusinessException; los controllers traducen Result a HTTP status code de forma uniforme.


ADR-002 — CQRS con MediatR y Pipeline Behaviors

Qué se decidió: comandos (escritura) y queries (lectura) están separados, ambos pasan por MediatR. Aspectos transversales (validación, audit, logging) son pipeline behaviors reutilizables.

Beneficio: cada handler tiene una sola responsabilidad; la validación/auditoría no se duplica; nuevos endpoints pasan por las mismas garantías sin código duplicado.


ADR-035 — data-testid obligatorio para selectores E2E

Qué se decidió: los componentes interactivos del frontend llevan atributo data-testid estable, usado por las pruebas end-to-end (Playwright).

Beneficio: las pruebas no se rompen cuando un diseñador cambia clases CSS o estructura HTML. Las pruebas describen qué hace el usuario, no qué tag hay.


Listado completo (36 ADRs)

Para el inventario completo en formato Nygard, ver Anexos → ADRs completos o descargar directamente el archivo architecture-decision-records.md.