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:
MachineDomain/src/main/java/co/ada/domain/state/StateManager.kt
Cada estado implementa la interfaz State:
interface State { val name: String suspend fun run( next: () -> Unit, retry: (String) -> Unit ): Unit }
name: identificador del estado.run(): ejecuta la lógica del estado.next(): avanza al siguiente estado.retry(): retrocede y emite un mensaje de error.Los estados se ejecutan en este orden:
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
next(), el StateManager avanza al siguiente.retry(reason), retrocede a Estado 1 y emite mensaje de error.StateNameEmitter: emite el nombre del estado actual para la UI.StateMessageEmitter: emite mensajes de error o información.StateContextEmitter: almacena contexto compartido entre estados.Si en algún punto hay un error:
retry(reason).currentIndex = 0.WaitingForWeight.MachineData/database.db almacena entregas, beneficiarios, asignaciones técnicas (MachineEnrollmentShift) y jornadas operativas del día (MinutaMenuDue).MachineEnrollmentShift sigue siendo la referencia interna para guardar entregas, beneficiarios y actividad.OperationalShift es una proyección en memoria usada por la UI.