Vessel Operations

Diagrama de Flujo de Operaciones

Desde la preparación hasta el reporte final.


sequenceDiagram
    participant P as Preparación
    participant U as Usuario/Operador
    participant App as Aplicación VIN Tracker
    participant DB as Firebase Firestore
    participant E as Escáner (Netum)

    %% --- Fase 1: Preparación ---
    P->>U: Capacitación sobre la app y dispositivos
    P->>P: Configurar credenciales de Firebase en la App
    P->>U: Entregar tablet/dispositivo con la app
    P->>U: Entregar escáner Netum C750 emparejado

    %% --- Fase 2: Inicio de Operación ---
    U->>App: Abre la aplicación en el dispositivo
    App->>DB: Solicita lista de operaciones existentes
    DB-->>App: Envía lista de operaciones
    App->>U: Muestra la interfaz principal

    U->>App: Clic en "New Operation"
    U->>App: Rellena "Vessel Name", "Voyage No."
    U->>App: Selecciona tipo (Import/Export)
    U->>App: Adjunta archivo de manifiesto (Excel)
    U->>App: Clic en "Start Operation"

    App->>DB: Crea un nuevo documento de operación
    DB-->>App: Confirma creación
    App->>U: Muestra panel de operación activa

    %% --- Fase 3: Proceso de Escaneo (Unidad Manifestada) ---
    U->>E: Escanea VIN de un vehículo
    E->>App: "Escribe" el VIN en el campo de búsqueda + Enter
    App->>App: Busca el VIN en el manifiesto activo
    Note right of App: El VIN existe y está "Pending"

    App->>DB: Actualiza el estado del VIN a "Loaded/Discharged"
    DB->>DB: Guarda el timestamp y usuario
    DB-->>App: Propaga el cambio a todos los dispositivos
    App->>U: Actualiza la fila del VIN en la tabla (cambia color y estado)
    App->>U: Limpia y reenfoca el campo de búsqueda

    %% --- Fase 4: Proceso de Escaneo (Excepciones) ---
    U->>E: Escanea VIN de un vehículo
    E->>App: "Escribe" el VIN + Enter
    App->>App: Busca el VIN en el manifiesto activo
    
    alt VIN No Encontrado
        Note right of App: El VIN no existe
        App->>U: Muestra Pop-up: "¿Agregar como No Manifestado o Retorno?"
        U->>App: Selecciona "No Manifestado"
        App->>DB: Añade el nuevo VIN a la operación con estado "Unmanifested"
        DB-->>App: Propaga el cambio
        App->>U: Muestra el nuevo VIN en la tabla
    
    else VIN ya Procesado
        Note right of App: El VIN ya está "Loaded/Discharged"
        App->>U: Muestra Pop-up: "VIN ya procesado"
        U->>App: Clic en "Aceptar"
        App->>U: Limpia y reenfoca campo de búsqueda

    else VIN es un Retorno
        Note right of App: El VIN tiene estado "Return"
        App->>DB: Elimina el VIN de la operación
        DB-->>App: Propaga el cambio
        App->>U: Elimina el VIN de la tabla, notifica "Retorno completado"
    end

    %% --- Fase 5: Acciones Manuales ---
    U->>App: Clic en el menú "Actions" de un VIN "Unmanifested"
    U->>App: Selecciona "Match"
    App->>U: Abre diálogo con lista de VINs pendientes y buscador
    U->>App: Busca y selecciona el VIN correcto
    U->>App: Clic en "Match VIN"
    App->>DB: Transfiere datos del no manifestado al VIN correcto y borra el no manifestado
    DB-->>App: Propaga el cambio
    App->>U: Actualiza la tabla

    %% --- Fase 6: Finalización de Operación ---
    U->>App: Clic en el botón "Finish Operation"
    App->>U: Muestra diálogo de confirmación
    U->>App: Clic en "Accept"
    App->>DB: Actualiza el estado de la operación a "Finished" y guarda el "endTime"
    DB-->>App: Propaga el cambio
    App->>U: Muestra estado "Finished"

    U->>App: Clic en "Export Report"
    App->>U: Genera y descarga archivo Excel con el resumen de la operación