Tabla de Contenidos

Estados de flujo de entrega en MachineDomain

Visión general

En MachineDomain, el dispositivo máquina ejecuta una máquina de estados (StateManager) que controla el flujo completo de cada entrega. Los estados son secuenciales y cada uno es responsable de un aspecto diferente del procesamiento de entregas.

Antes de que esa máquina de estados arranque, la app ahora resuelve una jornada operativa visible a partir de MinutaMenuDue + MachineEnrollmentShift. Esto deja la experiencia alineada con la Maquina #1: el operador elige una jornada del día y no una asignación técnica cruda.

Archivo principal:

Interfaz ''State''

Cada estado implementa la interfaz State:

interface State {
    val name: String
    suspend fun run(
        next: () -> Unit,
        retry: (String) -> Unit
    ): Unit
}

Estados de la máquina de entregas

Los estados se ejecutan en este orden:

1. ''WaitingForWeight''

2. ''CaptureImages''

3. ''CaptureFace''

4. ''ComparingWeights''

5. ''GenerateEmbedding''

6. ''VerifyInDatabase''

7. ''SaveDelivery''

8. ''WaitForWeightRemoved''

Flujo de control del ''StateManager''

Inicio
  ↓
[Selección de jornada operativa]
  ↓
[Estado 1] → [Estado 2] → ... → [Estado 8]
  ↓ (next)                      ↓ (next)
Avanza                        Reinicia desde Estado 1
  ↓ (retry)
Retrocede a Estado 1 + emite error

Comportamiento

Emisores asociados

Reintento y recuperación

Si en algún punto hay un error:

  1. Se invoca retry(reason).
  2. Se resetea currentIndex = 0.
  3. Se retira al usuario a WaitingForWeight.
  4. Se muestra el mensaje de error.
  5. El usuario puede reintentar.

Integración con base de datos

Nota sobre jornadas