4. Mapa de dominios y servicios REST
4. Diseño de Dominios y Agregados
4.1 Identity Access
- Agregado:
OperatorSession(invariantes: credenciales válidas, token vigente 24h). EntidadesOperator,RoleProfile. Value ObjectsCredentials,JwtClaims. - Reglas: debe existir perfil activo retornado por legacy (
O_PERFIL). Se propaga eventoSessionCreatedpara auditoría. - Consistencia: ACID; repositorio transaccional.
4.2 Catalog Management
- Agregados:
Origin,Route,Zone. Value ObjectsGeoCoordinate,ProfileCode. - Invariantes: ruta no puede activarse sin zona habilitada y catálogo SIRLA actualizado < 24h.
- Eventos:
CatalogUpdated(trigger SIRLA sync). Consistencia eventual con caches (Redis) + versionado.
4.3 Trip Query
- Agregados de lectura:
TripView,TripTankView,TripStopView(materialized views). - Invariantes: reportes sólo exponen viajes
PUBLICADOS; se actualizan vía eventosTripCheckpointRegisteredyTicketIssued. - Consistencia: eventual mediante proyecciones (Outbox → Kafka → consumidores).
4.4 Trip Execution
- Agregados:
Trip,Checkpoint,TankMeasurement,Checkin. - Reglas: cada checkpoint requiere firma base64 y coordenadas válidas; mediciones exigen densidad y temperatura;
Checkinvalida evento y transferencia. - Eventos dominio:
TripCheckpointRegistered,TripTankMeasured,TripCheckinRecorded. - Consistencia: ACID + outbox; idempotencia con
Idempotency-Key. - Saga: orquesta con Ticketing/Quality (ver sección 8).
4.5 Dispatch Control
- Agregados:
DispatchOrder,Assignment. - Reglas: sincronización requiere existencia de viaje, validación de operador y transporte. Mantiene
DispatchSyncJobpara reintentos. - Eventos:
DispatchSynced,DispatchSyncFailed. - Consistencia: eventual; se aplica patrón ACL para consumir BPEL legado hasta su retiro.
4.6 Ticketing
- Agregados:
Ticket,TicketSeal,TransferDetail. - Invariantes: sellos deben validarse (
Quality), ticket único porcontrolInterno+evento. GeneraTicketIssued,TicketCancelled. - Consistencia: ACID; idempotencia en generación.
4.7 Weighbridge
- Agregado:
WeighEvent(entrada, salida, diferencia). Value ObjectWeight. - Invariantes:
Ent_PesoySal_Pesono negativos; calculadeltay marcaEstatusActualizacion. - Eventos:
WeighbridgeMeasurementCaptured.
4.8 Remittance
- Agregado:
RemittedVolume. - Reglas: litros totales = suma remisiones > 0; datos AS/400.
- Eventos:
RemittanceQueried(auditoría).
4.9 Quality Assurance
- Agregados:
SealInspection,VehicleValidation. - Reglas: sellos sin captura requieren justificación; vehículos combinan tractor+dolly+pipa únicos.
- Eventos:
VehicleValidated,SealAnomalyDetected.
5. Catálogo de Servicios REST
| Contexto | Endpoint | Método | Descripción | Idempotente | Paginación | Filtros |
|---|---|---|---|---|---|---|
| identity | /sessions | POST | Autentica operadores y crea sesión. | No | No | - |
| reference-data | /origins/_search | POST | Consulta orígenes disponibles. | No | Sí | limit, offset, sort |
| reference-data | /profiles/{perfil}/origins | GET | Obtiene orígenes por perfil. | No | No | - |
| reference-data | /routes/_search | POST | Consulta rutas y zonas asignadas. | No | No | - |
| trip-query | /trips/_search | POST | Busca viajes por operador, estatus y fecha. | No | Sí | limit, offset, sort |
| trip-query | /trips/_search-by-type | POST | Consulta viajes por tipo/configuración. | No | Sí | limit, offset, sort |
| trip-query | /trips/{idViaje} | GET | Recupera detalle resumido de viaje. | No | No | - |
| trip-query | /trips/{idViaje}/tanks | GET | Consulta tanques asociados a viaje. | No | No | idSocio |
| trip-query | /trips/{controlInterno}/stops | GET | Consulta paradas y detalle de viaje. | No | No | - |
| trip-execution | /trips/{controlInterno}/checkpoints | POST | Registra checkpoint y firma del responsable. | Sí | No | - |
| trip-execution | /trips/{rowId}/tanks | POST | Captura resultados de muestreo de tanques. | Sí | No | - |
| trip-execution | /checkins | POST | Registra check-in en nodos o ranchos. | Sí | No | - |
| dispatch | /orders/_search | POST | Consulta despachos programados. | No | Sí | limit, offset, sort |
| dispatch | /orders/{controlInterno}/sync | POST | Sincroniza información de recolección vs despacho. | Sí | No | - |
| dispatch | /orders/status | POST | Actualiza estatus masivo de despachos. | Sí | No | - |
| ticketing | /tickets | POST | Genera ticket de recolección. | Sí | No | - |
| ticketing | /tickets/transfers/_search | POST | Consulta tickets de transferencia. | No | Sí | limit, offset, sort |
| weighbridge | /measurements/_search | POST | Consulta datos de báscula. | No | No | - |
| remittance | /remissions/_search | POST | Consulta litros remisionados. | No | No | - |
| quality | /seals/evaluations | POST | Evalúa sellos buenos/malos. | No | No | - |
| quality | /seals/_search | POST | Consulta bitácora de sellos. | No | Sí | limit, offset, sort |
| quality | /vehicles/validate | POST | Valida combinación de vehículo y accesorios. | No | No | - |