Saltar a contenido

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)

  1. Cada cambio de estado crea un package_event (inmutable)
  2. No se puede consolidar sin KYC aprobado
  3. No se puede despachar sin pago confirmado
  4. No se puede eliminar un destinatario con envíos activos
  5. El almacenaje aplica cargo automático diario tras vencer el período gratis
  6. Los identificadores siguen algoritmo Mod-10 para validación

Referencias