Documento histórico
Este documento se conserva solo para trazabilidad. Consulte el índice maestro para la fuente vigente.
Documento histórico — no usar como fuente de decisiones actuales
Reemplazado por la versión canónica del 2026-07-11. Conservar solo como trazabilidad histórica.
Diagrama de actividad — Flujo completo del paquete¶
Diagrama UML de actividad que muestra el ciclo de vida completo de un paquete desde la compra hasta la entrega al destinatario en Cuba.
Diagrama¶
flowchart TD
Start([Usuario compra en tienda online]) --> A1[Usa dirección del casillero + identificador]
A1 --> A2[Tienda genera orden y tracking]
A2 --> B1[¿Usuario reporta la compra?]
B1 -- Sí --> B2[Crear prealerta]
B2 --> B3[Estado: reportada / reportada_sin_tracking]
B3 --> B4[¿Llega paquete al almacén?]
B1 -- No --> B4
B4 -- Sí --> C1[Operador recibe paquete]
C1 --> C2{¿Identificador válido?}
C2 -- Sí --> C3[Estado: recibido_identificado]
C2 -- No --> C4[Estado: recibido_sin_identificar]
C4 --> C5[Cola de conciliación]
C5 --> C6{¿Se identifica?}
C6 -- Sí --> C3
C6 -- No --> C7[Estado: retenido_por_incidencia]
C3 --> C8[Estado: en_almacen]
C7 --> Stop([Proceso bloqueado])
C8 --> D1{¿Usuario decide?}
D1 -- "Enviar individual" --> D2[Cotizar]
D1 -- "Consolidar" --> D3[Agregar a consolidación]
D1 -- "Inspeccionar" --> D4[Crear service_request]
D1 -- "Devolver" --> D5[Crear service_request]
D1 -- "Esperar" --> D6[Permanece en almacén]
D3 --> D7[Cotizar consolidación]
D2 --> D7
D7 --> E1[Estado: cotizado]
E1 --> E2{¿KYC aprobado?}
E2 -- No --> E3[Bloqueo: completar KYC]
E3 --> E2
E2 -- Sí --> E4[Estado: pendiente_pago]
E4 --> E5[Usuario paga o registra pago]
E5 --> E6[Estado: pagado]
E6 --> E7[Estado: en_preparacion]
E7 --> F1[Operador prepara]
F1 --> F2[Operador despacha]
F2 --> F3[Asigna master_guide + carrier]
F3 --> F4[Estado: despachado_desde_almacen]
F4 --> F5[Estado: en_transito_a_cuba]
F5 --> F6[Estado: en_aduana]
F6 --> F7[Estado: liberado_de_aduana]
F7 --> F8[Estado: en_reparto]
F8 --> F9{¿Entregado?}
F9 -- Sí --> F10[Estado: entregado]
F9 -- No --> F11[Estado: incidencia]
F11 --> F8
F10 --> Stop2([Notificación al usuario + cierre])
D4 --> D8[Estado: en_servicio_adicional]
D8 --> D9[Operador ejecuta]
D9 --> D10[Estado: listo_para_consolidar]
D10 --> D1
D5 --> D11[Estado: devuelto_a_tienda]
D11 --> Stop3([Proceso cerrado])
D6 --> D12[Job diario verifica días en almacén]
D12 --> D13{¿Vence período gratis?}
D13 -- Sí --> D14[Aplicar cargo por día extra]
D14 --> D12
D13 -- No --> D12
classDef terminal fill:#f96,stroke:#333,color:#fff
classDef decision fill:#ff9,stroke:#333
classDef state fill:#bbf,stroke:#333
classDef system fill:#bfb,stroke:#333
class Start,Stop,Stop2,Stop3 terminal
class B1,C2,C6,D1,E2,E9,F9,D13 decision
class B3,C3,C4,C8,C7,E1,E4,E6,E7,F4,F5,F6,F7,F8,F10,F11,D8,D10,D11 state
class D12,D14 system
Swimlanes (separación por actor)¶
flowchart LR
subgraph U["👤 Usuario"]
U1[Reporta compra]
U2[Recibe notificaciones]
U3[Decide qué hacer]
U4[Paga envío]
U5[Recibe paquete]
end
subgraph OP["👨💼 Operador"]
OP1[Recibe paquete físico]
OP2[Concilia si hace falta]
OP3[Revisa KYC]
OP4[Prepara envío]
OP5[Despacha]
OP6[Actualiza estados]
end
subgraph S["⚙️ Sistema"]
S1[Genera identificador]
S2[Asocia prealerta]
S3[Calcula cotización]
S4[Gestiona pago]
S5[Emite notificaciones]
S6[Job diario almacenaje]
end
subgraph AG["🚚 Agencia aliada"]
AG1[Recibe envío en Cuba]
AG2[Pasa aduana]
AG3[Entrega a domicilio]
end
U1 --> S2
OP1 --> S2
S2 --> U2
U3 --> S3
S3 --> U4
U4 --> S4
S4 --> OP4
OP4 --> OP5
OP5 --> S5
OP5 --> AG1
AG1 --> AG2
AG2 --> AG3
AG3 --> U5
AG3 --> S5
S6 -.-> OP1
OP3 --> U2
S1 --> OP1
Estados del paquete (resumen)¶
| Estado | Descripción | Cuándo se asigna | Quién |
|---|---|---|---|
prealertado |
Hay prealerta, paquete en camino | Al crear la prealerta | Sistema |
en_camino_al_almacen |
En tránsito hacia el almacén | Confirmación del transportista | Operador |
recibido_sin_identificar |
Llegó pero no identificado | Recepción sin identificador | Operador |
recibido_identificado |
Llegó y asociado a usuario | Recepción con identificador | Operador |
pendiente_conciliacion |
No se pudo asociar | Después de búsqueda | Operador |
en_almacen |
Almacenado, esperando instrucciones | Por defecto tras identificación | Sistema |
esperando_instrucciones |
Sin acción definida | Explícito | Usuario |
en_servicio_adicional |
Servicio activo | Solicitud de servicio | Usuario/Operador |
listo_para_consolidar |
Puede consolidarse | Tras decisión | Sistema |
reservado_para_consolidacion |
En consolidación | Al consolidar | Sistema |
consolidado |
Agrupado | Confirmación | Sistema |
en_transito |
En camino a Cuba | Despacho | Operador |
entregado |
Recibido por destinatario | Confirmación | Operador/Agencia |
retenido_por_incidencia |
Problema requiere acción | Detección | Sistema/Operador |
devuelto_a_tienda |
Retorno al vendedor | Solicitud de devolución | Operador |
descartado_o_cerrado |
Cierre operativo | Decisión | Operador |
Decisiones clave (decisión/diamond nodes)¶
| Decisión | Camino Sí | Camino No |
|---|---|---|
| ¿Usuario reporta la compra? | Crear prealerta | Esperar llegada sin prealerta |
| ¿Identificador válido? | recibido_identificado | recibido_sin_identificar |
| ¿Se concilia? | recibido_identificado | retenido_por_incidencia |
| ¿KYC aprobado? | Continuar pago | Bloqueo KYC |
| ¿Vence período gratis? | Aplicar cargo | Continuar gratis |
| ¿Entregado? | Cierre | Incidencia → reintento |
Eventos críticos (transiciones que disparan notificaciones)¶
| Transición | Notificación |
|---|---|
→ recibido_identificado |
Push "Tu paquete ha llegado" |
→ en_almacen |
Banner en dashboard |
→ consolidado |
Push "Paquete consolidado" |
→ cotizado |
Banner "Pago pendiente" |
→ pagado |
Push "Pago confirmado" |
→ despachado_desde_almacen |
Push "En camino a Cuba. Guía: X" |
→ en_aduana |
Push "En proceso de aduana" |
→ en_reparto |
Push "Próximo a recibir" |
→ entregado |
Push "¡Entregado!" |
→ retenido_por_incidencia |
Push + email + banner en dashboard |
| 5 días antes de vencer almacenaje | Push "Vence en 5 días" |
| 3 días antes | Push "Vence en 3 días" |
| 1 día antes | Push "Vence mañana" |
| Día de vencimiento | Push "Vencido" + cargo aplicado |
Reglas del modelo (resumen)¶
- Cada cambio de estado crea un
package_event(inmutable) - No se puede consolidar sin KYC aprobado
- No se puede despachar sin pago confirmado
- No se puede eliminar un destinatario con envíos activos
- El almacenaje aplica cargo automático diario tras vencer el período gratis
- Los identificadores siguen algoritmo Mod-10 para validación