Responsabilidad Única
Lógica de negocio y reglas específicas de la aplicación de logística. NO incluye stack técnico, arquitectura, UI/UX, ni detalles de implementación.
Contexto de Negocio
Región de Operación
- •Ciudad: Fusagasugá, Cundinamarca, Colombia
- •Área de cobertura: Zona urbana y rural cercana
- •Coordenadas aproximadas: 4.3369° N, 74.3636° W
Modelo de Operación
- •Repartidores independientes con rutas diarias asignadas
- •Múltiples paquetes por ruta (sin límite)
- •Operación offline-first (conexión intermitente)
- •Confirmación en tiempo real cuando hay conexión
Gestión de Rutas
Estados de Ruta
- •Pending: Ruta asignada, no iniciada
- •Active: Ruta en progreso
- •Completed: Todos los paquetes entregados o gestionados
- •Cancelled: Ruta cancelada (excepcional)
Reglas de Negocio - Rutas
- •Una ruta puede tener N paquetes (sin límite superior)
- •Un repartidor solo puede tener 1 ruta activa a la vez
- •No se puede iniciar nueva ruta si hay una activa
- •La ruta se completa automáticamente cuando todos los paquetes están en estado final (delivered/failed/returned)
- •Fecha de ruta: Solo rutas del día actual pueden ser activadas
Flujo de Trabajo - Ruta
- •Repartidor ve rutas asignadas del día
- •Selecciona ruta y la activa (estado → Active)
- •Sistema muestra paquetes ordenados por prioridad/ubicación
- •Repartidor gestiona paquetes uno por uno
- •Al completar todos los paquetes, ruta → Completed
Gestión de Paquetes
Estados de Paquete
- •Pending: Paquete en bodega, no asignado
- •In Transit: Asignado a ruta activa
- •Out for Delivery: Repartidor en camino a dirección
- •Delivered: Entregado exitosamente
- •Failed: Intento fallido (cliente ausente, dirección incorrecta, etc.)
- •Returned: Devuelto a bodega
Reglas de Negocio - Paquetes
- •Tracking Number: Único, alfanumérico, 8-20 caracteres
- •Dirección: Obligatoria, debe ser validable en Fusagasugá
- •Teléfono: Obligatorio, formato colombiano (10 dígitos)
- •Peso: Opcional, en kilogramos
- •Notas: Opcional, máximo 500 caracteres
- •Foto de entrega: Obligatoria para estado Delivered
- •Firma/Nombre: Obligatorio para estado Delivered
- •Razón de fallo: Obligatoria para estado Failed
Transiciones de Estado Válidas
code
Pending → In Transit (al asignar a ruta) In Transit → Out for Delivery (repartidor en camino) Out for Delivery → Delivered (entrega exitosa) Out for Delivery → Failed (intento fallido) Failed → Out for Delivery (reintento) Failed → Returned (después de 3 intentos) In Transit → Returned (cancelación)
Validaciones de Negocio
- •No se puede marcar como Delivered sin foto
- •No se puede marcar como Failed sin razón
- •Máximo 3 intentos de entrega antes de Returned
- •No se puede modificar paquete en estado Delivered/Returned
Scanner Inteligente (QR/Barcode)
Propósito
Captura rápida de tracking numbers para agregar paquetes a ruta.
Formatos Soportados
- •QR Code: Tracking number codificado
- •Code 128: Estándar de logística
- •Code 39: Alternativa común
- •EAN-13: Para paquetes con código de barras comercial
Lógica de Negocio - Scanner
- •Abrir cámara en modo scanner
- •Detectar código automáticamente
- •Validar formato de tracking number
- •Buscar paquete en base de datos local
- •Si existe: Mostrar detalles y permitir agregar a ruta
- •Si no existe: Permitir entrada manual o crear nuevo paquete
Fallback Manual
- •Si código no escanea (dañado, borroso), permitir entrada manual
- •Validar formato mientras se escribe
- •Sugerir autocompletado si hay coincidencias parciales
Reglas de Validación
- •Tracking number debe ser único en el sistema
- •No se puede agregar mismo paquete dos veces a una ruta
- •Paquete debe estar en estado Pending o In Transit para agregarse
Confirmación de Entregas
Entrega Exitosa (Delivered)
Datos requeridos:
- •Foto de entrega: Captura de paquete en ubicación
- •Nombre de quien recibe: Texto libre, mínimo 3 caracteres
- •Firma digital: Opcional pero recomendada
- •Coordenadas GPS: Automáticas, para verificación
- •Timestamp: Automático
Flujo:
- •Repartidor llega a dirección
- •Presiona "Confirmar Entrega"
- •Toma foto del paquete
- •Ingresa nombre de quien recibe
- •Opcionalmente captura firma
- •Presiona botón "Hold to Confirm" (3 segundos)
- •Sistema guarda localmente y sincroniza cuando hay conexión
Entrega Fallida (Failed)
Datos requeridos:
- •Razón de fallo: Selección de lista predefinida
- •Foto de evidencia: Opcional pero recomendada
- •Notas adicionales: Opcional
- •Coordenadas GPS: Automáticas
- •Timestamp: Automático
Razones de Fallo Predefinidas:
- •Cliente ausente
- •Dirección incorrecta
- •Dirección incompleta
- •Cliente rechaza paquete
- •Zona insegura
- •Otro (requiere nota)
Flujo:
- •Repartidor intenta entrega
- •Presiona "Reportar Fallo"
- •Selecciona razón de fallo
- •Opcionalmente toma foto de evidencia
- •Opcionalmente agrega notas
- •Confirma fallo
- •Sistema incrementa contador de intentos
- •Si intentos < 3: Paquete vuelve a In Transit
- •Si intentos >= 3: Paquete → Returned
Botones de Seguridad (Safety Actions)
Hold to Confirm
Para acciones críticas e irreversibles:
- •Confirmar entrega
- •Marcar como fallida
- •Completar ruta
Comportamiento:
- •Presionar y mantener por 3 segundos
- •Mostrar progreso circular visual
- •Feedback háptico al inicio y al completar
- •Si se suelta antes de 3s, cancelar acción
Propósito
Prevenir confirmaciones accidentales que afecten métricas de negocio.
Priorización de Paquetes
Criterios de Ordenamiento
- •Prioridad manual: Si fue marcado como urgente
- •Intentos previos: Paquetes con intentos fallidos primero
- •Proximidad geográfica: Más cercano al punto actual
- •Hora de compromiso: Si tiene ventana de entrega específica
Reglas de Negocio
- •Paquetes urgentes siempre al inicio de la lista
- •Después de fallo, paquete sube en prioridad
- •Repartidor puede reordenar manualmente si es necesario
Notificaciones al Cliente (Futuro)
Eventos que Generan Notificación
- •Paquete asignado a ruta (In Transit)
- •Repartidor en camino (Out for Delivery)
- •Paquete entregado (Delivered)
- •Intento fallido (Failed)
Nota: Implementación futura, definir canales (SMS, WhatsApp, Push).
Métricas de Negocio
KPIs del Repartidor
- •Tasa de entrega exitosa: Delivered / Total paquetes
- •Promedio de intentos: Total intentos / Total paquetes
- •Paquetes por hora: Entregas / Horas trabajadas
- •Tiempo promedio por entrega: Desde Out for Delivery hasta Delivered
Reglas de Cálculo
- •Solo contar paquetes en estado final (Delivered/Returned)
- •Excluir paquetes cancelados de métricas
- •Actualizar métricas en tiempo real cuando hay conexión
Validaciones de Datos
Tracking Number
dart
bool isValidTrackingNumber(String value) {
// Alfanumérico, 8-20 caracteres, sin espacios
return RegExp(r'^[A-Z0-9]{8,20}$').hasMatch(value.toUpperCase());
}
Teléfono Colombia
dart
bool isValidColombianPhone(String value) {
// 10 dígitos, puede empezar con 3 (móvil) o no
return RegExp(r'^\d{10}$').hasMatch(value);
}
Dirección Fusagasugá
dart
bool isValidAddress(String value) {
// Mínimo 10 caracteres, debe contener número
return value.length >= 10 && RegExp(r'\d').hasMatch(value);
}
Reglas de Sincronización (Lógica de Negocio)
Prioridad de Sincronización
- •Alta: Confirmaciones de entrega (Delivered/Failed)
- •Media: Cambios de estado de paquetes
- •Baja: Actualización de datos de ruta
Conflictos
- •Mismo paquete editado offline y online: Última modificación gana
- •Ruta completada offline pero modificada online: Notificar al repartidor
- •Paquete eliminado online pero editado offline: Marcar como conflicto, requiere resolución manual
Ejemplo de Flujo Completo
Día del Repartidor
- •
Inicio de jornada:
- •Abrir app
- •Ver rutas asignadas del día
- •Seleccionar ruta y activarla
- •
Durante la ruta:
- •Ver lista de paquetes ordenados
- •Navegar al primer paquete
- •Intentar entrega
- •Si exitosa: Tomar foto, nombre, confirmar
- •Si fallida: Seleccionar razón, agregar notas
- •Repetir con siguiente paquete
- •
Fin de jornada:
- •Completar todos los paquetes
- •Ruta se marca como Completed automáticamente
- •Sincronizar datos cuando haya WiFi
- •Revisar métricas del día