Amadeus — Sprints 15-21 + backlog diferido
Decisión 2026-05-25: los sprints viven aquí (en el hub) en lugar de Jira. Cada ticket carga su ID del hub (
#NNN) para que Sergio pueda decir “haz el #214” sin importar elAM-XXoriginal. El cross-reference AM-XX se preserva para trazabilidad con el backlog original (amadeus-backlog.md).Cómo trabajar: Sergio decide cuándo arrancar un sprint. Al arrancar, los tickets del sprint pasan a la sección “Tareas pendientes” / “En progreso” de
amadeus.mdy siguen el flujo normal del hub. Al cerrar, marcar[x]aquí con fecha + commit/PR + nota corta.Estimaciones (orden de magnitud, no horas): S = 1-3 h · M = 0.5-2 d · L = 2-5 d · XL = semana+.
Sprint 15 — Quick wins + bug fixes (~2 días, 9× S)
- #209 📅 sin-fecha — (AM-52, S) Indicador “cargando” al subir consumo — loading state en
Pages/Consumos/Create.vuedurante el submit. - #210 📅 sin-fecha — (AM-53, S) Mensaje flash móvil tapado — z-index del toast en
Layout.vue:14-21lo deja atrás de elementos del topbar; subir elz-index. - #211 📅 sin-fecha — (AM-66, S) Nota por consumo para justificación de compras — campo
notatext enconsumos+ form field + display en detalle. - #212 📅 sin-fecha — (AM-89, S) Fecha manual en depósitos — campo
fechaen form (hoy es auto al server time). - #213 📅 sin-fecha — (AM-94, S) Subtotal e IVA en consumos — agregar
subtotal+ivacalculados/capturados; mostrar desglose. - #214 📅 sin-fecha — (AM-95, S) Entrada/salida siempre con servicio o lugar — validar al inicio que
sitio_idrequerido enMovimientoInventario(probablemente ya está, verificar). - #215 📅 sin-fecha — (AM-130, S) Select buscable en filtro de productos — usar
SearchableSelectInput.vue(ya existe) en la lista de movimientos de inventario. - #216 📅 sin-fecha — (AM-133, S) Buscar movimientos por número de serie — filtro en
MovimientosInventarioController::indexusandonumero_serieeninventarios(disponible desde 2025-11-19). - #217 📅 sin-fecha — (AM-138, S) Cancelar órdenes sin viáticos ni depósitos — botón condicional en detalle de orden; endpoint
POST /ordenes/{id}/cancelarcon validación.
Sprint 16 — Reportes y visualizaciones (~1 semana, 4× M)
- #218 📅 sin-fecha — (AM-69, M) Correo diario de saldos con viáticos — job + Mailable + schedule en
Kernel.php(SMTP ya configurado desde 2026-05-19). - #219 📅 sin-fecha — (AM-93, M) Consumos por usuario/fecha/categoría sumarizados — reporte agregado con filtros.
- #220 📅 sin-fecha — (AM-131, M) Vista detalle de producto (
Pages/Productos/Show.vue) con dos tablas: inventarios por sitio + historial de movimientos. - #221 📅 sin-fecha — (AM-100, M) Múltiples fotos en consumos — storage multi-file + UI gallery.
Nota operativa: #221 podría moverse al Sprint 21 si quieres mantener “todas las fotos” agrupadas con #230 (fotos de unidad).
Sprint 17 — Roles persistidos + notif scheduled (~1.5 semanas, L + S+)
- #222 📅 sin-fecha — (AM-55, L) Layer de roles persistidos (Opción A aprobada 2026-05-20) — schema nuevo (
roles,rol_permiso, FK opcionalusuarios.rol_id), refactor de policies para resolver vía rol con override per-usuario, Nova UI para gestionar roles. Tests. - #223 📅 sin-fecha — (AM-72, S+) Push + email scheduled job a las 16:00 (Opción C aprobada 2026-05-20, NO SMS pagado) — scheduled job que dispara push a técnicos pidiendo captura de viáticos; fallback a email si no marcan leído en X horas. Reusa VAPID + Gmail Workspace. Costo recurrente $0.
Precondición: Sprint 17 debe ir antes que Sprint 18 (EPIC-NOTAS) para no migrar policies dos veces.
Sprint 18 — EPIC-NOTAS (~1-2 semanas, M-L)
- #224 📅 sin-fecha — (consolida AM-65/AM-73/AM-90/AM-99/AM-136) Modelo
Notapolimórfico + foto opcional + listener al crear viaje. 5 tickets del backlog colapsados a un solo epic.- Tabla
notas(id,notable_type,notable_id,autor_id,contenidotext,notificar_al_abrirbool, timestamps). - Tabla
nota_fotos(id,nota_id,path, timestamps). - MorphMap:
Viaje,Sitio,MovimientoInventario(¿Orden si es modelo separado? — confirmar). - Trait
HasNotasen cada modelo notable. - Componente Vue
<NotasInline notable-type=... notable-id=... :allow-create-photo=true>reusable. - Listener al crear
Viaje: buscar notas enSitioconnotificar_al_abrir=truey disparar push+email al equipo asignado. - Nova resource
Notacon polymorphic field. - Validación previa antes de codificar: confirmar uso real con técnicos (¿van a escribir notas en celular o llamar por radio?). Si la 2, la inversión no vale.
- Tabla
Sprint 19 — UX y mobile (~1 semana, 3× M)
- #225 📅 sin-fecha — (AM-129, M) Paginación estandarizada — componente
Paginador.vuereusable + audit de páginas que hoy paginan distinto. - #226 📅 sin-fecha — (AM-137, M) Form de creación de viajes en móvil — mobile UX de
FormaViaje.vue. Reusar patrones del rediseño móvil de/notificaciones(2026-05-20). - #227 📅 sin-fecha — (AM-142, S-M) Mejorar estilo de info de materiales/productos ⚠️ aclarar al inicio del sprint qué pantalla específicamente; sin contexto no se puede tasar bien.
Sprint 20 — Datos del módulo de inventarios (~1 semana, 2× M + S)
- #228 📅 sin-fecha — (AM-119, M) Inventarios pertenezcan a sitio O usuario —
inventarios.usuario_idnullable + check constraint OR (uno de los dos, no ambos null ni ambos non-null). Originalmente en Sprint 11 de Jira. - #229 📅 sin-fecha — (AM-120, S) Verificar cobertura de cambio de estatus → inventario.
InventarioService::aplicarEntradaya cubreentregado. Al inicio del sprint verificar que también cubrarechazadoycancelado— si ya están cubiertos, cerrar sin trabajo. - #230 📅 sin-fecha — (AM-59, M) Fotos de estado de unidad en salida y llegada — tabla
viaje_fotos+ storage + UI camera. Originalmente en Sprint 11 de Jira.
Sprint 21 — Features de viaje (~1 semana, 2× M + slot libre)
- #231 📅 sin-fecha — (AM-135, M) Viajar sin unidad (avión/camión) con detalles de vuelo/camión — tipo de transporte alternativo + campos.
- #232 📅 sin-fecha — (AM-145, M) Actualizar órdenes y notificar cambios — extender listener actual (dispara en
created) aupdatedcon diff. ReusarNotificarViajeCreadoService. - Slot libre para overflow del Sprint 16 (típicamente #221 fotos consumos) o adelantar de backlog.
Backlog diferido (fuera de sprint, requiere precondición)
- #233 📅 sin-fecha — (AM-49, L) Traducciones a español end-to-end. Sprint dedicado cuando Sergio decida alcance: end-to-end o página por página.
- #234 📅 sin-fecha — (AM-57, L) BD de equipos en sitios con identificadores. Tabla
inventariosya tieneequipo_id+numero_serie+sitio_id; falta aclarar “hacia dónde están apuntados” (topología de red / enlace lógico entre equipos). Pide aclaración antes de tasar. - #235 📅 sin-fecha — (AM-139, L) Múltiples destinos + cuadrillas + vehículos por viaje (Fase 2 de N vehículos). Después de validar Fase 1 en prod (smoke #050).
- #236 📅 sin-fecha — (AM-140) Editar productos de viaje recién creado. Editor en
FormaViaje.vue:214-245bajoviaje_link_enabled. Solo accionable al activar capa 2 (INVENTARIO_VIAJE_LINK=trueen.env). - #237 📅 sin-fecha — (AM-144, M) Visualizar existencia de productos al hacer viaje/traslado. Display de stock en
SelectorProductosMovimiento.vue. Caso del traslado puede hacerse antes; caso del viaje depende de capa 2. - #238 📅 sin-fecha — (AM-143, S-M) Checklist entrega: “presione OK” sin botón + mensaje falso. En pausa hasta que Sergio reproduzca el caso real con screenshot (botón SÍ existe en
Checklist.vue:104-120; mensaje aparece cuandoanyBad=truecon default ok=false). Necesita screenshot para distinguir fix A/B/C.
Notas operativas
- Capa 2 (
INVENTARIO_VIAJE_LINK) queda intencionalmente fuera de toda asignación — su activación sigue siendo decisión independiente de Sergio editando.env. Cuando la actives, #236 y #237 (parcial) entran al próximo sprint disponible. - #229 puede cerrarse sin trabajo si ya cubre todos los estatus.
- #221 podría moverse al Sprint 21 si conviene mantener “todas las fotos” agrupadas con #230.
- Sprint 17 antes que Sprint 18 — para no migrar policies dos veces (EPIC-NOTAS necesitará autorización por rol/permiso).
Bitácora
2026-05-25 — sprints documentados en el hub
- Migrado el plan de sprints desde la sección “Asignación a sprints” de
amadeus-backlog.mda este archivo dedicado. - Cada ticket recibió ID estable del hub (#209-#238). Cross-reference AM-XX preservado por trazabilidad con el CSV original.
- Razón del cambio (decisión Sergio): trabajar los sprints aquí en lugar de Jira para mantener un solo lugar de verdad de pendientes y respetar el flujo normal del hub.
- Próximo paso natural: Sergio decide cuándo arrancar Sprint 15 (9× S, ~2 días, sin dependencias).