Amadeus — Análisis del backlog Jira
CSV importado de C:\Users\sevao\Downloads\Jira.csv (51 tasks, todas en To Do, prioridad Medium). Analizado contra el estado actual del código (HEAD 008118c) y las decisiones documentadas en amadeus.md.
Objetivo: que Sergio decida una por una si hacer, descartar, rescoperar o deferir. Nada se ejecuta automáticamente.
Leyenda de columnas
- Estado vs lo que ya existe en el código / decisiones recientes:
DONE— ya está implementado y funcional.PARTIAL— implementado a medias o un alcance distinto.STALE— contradice una decisión más reciente o depende de algo que ya se descartó.OK— pendiente válido sin overlap con el código actual.AMBIGUO— title de una palabra o muy vago; necesita aclaración.BUG— reporte de bug verificable.DUP— duplicado o subsumido por otro item del backlog.
- Dificultad estimada (orden de magnitud, no horas):
S— small, 1-3 h (UI tweak, validation, copy fix, una migración trivial).M— medium, 0.5-2 días (feature contenida, varios archivos, un endpoint).L— large, 2-5 días (feature mayor, schema + UI + policy, integración externa).XL— extra large, semana+ (módulo nuevo o reescritura).
- Capa (cuando aplica):
C1— depende de permisos (capa 1 de inventarios). Hoy ON solo para Selene.C2— depende del flagINVENTARIO_VIAJE_LINK(capa 2). Hoy OFF.
Tabla de análisis
| Key | Resumen | Estado | Dificultad | Notas |
|---|---|---|---|---|
| [x] AM-9 | ”Cliente” | DESCARTADO | — | (2026-05-20) Descartado. Epic de una palabra abandonado 2023; sin contexto recuperable. |
| [x] AM-10 | ”API” | DESCARTADO | — | (2026-05-20) Descartado. Epic de una palabra abandonado 2023. |
| [x] AM-46 | Hacer interfaz para poder ver inventarios | DONE | — | (2026-05-20) Cerrado. Módulo /inventarios desplegado, gated por permisos. |
| [x] AM-47 | Interfaz de entrada y salida de inventario | DONE | — | (2026-05-20) Cerrado. MovimientosInventario con flujo preparar/entregar/revisar. |
| AM-49 | Poner traducciones a español | BACKLOG | L | Sprint: diferido. Pendiente decisión: end-to-end o página por página. |
| AM-52 | Indicador de cargando cuando se sube un consumo | SPRINT 15 | S | Loading state en Pages/Consumos/Create.vue. |
| AM-53 | Mensaje flash en móvil se ve atrás de todo | SPRINT 15 | S | Z-index de Toastify en Layout.vue:14-21. |
| AM-55 | Diferentes roles de usuarios | SPRINT 17 (Opción A) | L | Layer de roles persistidos: schema nuevo (roles, rol_permiso, FK opcional en usuarios), refactor de policies, Nova UI, tests. Permitir override per-usuario. |
| AM-57 | Base de datos de equipos en sitios con identificadores | BACKLOG | L | Sprint: diferido. Tabla inventarios ya tiene equipo_id+numero_serie+sitio_id. Falta aclarar “hacia dónde están apuntados” (topología de red / enlace lógico entre equipos). |
| [x] AM-58 | Términos y condiciones de materiales | DESCARTADO | — | (2026-05-20) Descartado. Ambigüedad bloqueante; si surge contexto, abrir ticket nuevo con descripción concreta. |
| AM-59 | Fotos de estado de unidad en salida y llegada | SPRINT 20 | M | Tabla viaje_fotos + storage + UI camera. |
| [~] AM-65 | Notas por viaje entre departamentos | CONSOLIDADO | — | (2026-05-20) Consolidado en epic EPIC-NOTAS (modelo Nota polimórfico con foto opcional). |
| AM-66 | Notas por consumo para justificación de compras | SPRINT 15 | S | Campo nota text en consumos + form field. |
| AM-69 | Correo diario de saldos con viáticos | SPRINT 16 | M | Job + Mailable + schedule en Kernel.php. SMTP ya configurado. |
| [x] AM-71 | ”Viaticos” | DESCARTADO | — | (2026-05-20) Descartado. Epic de una palabra; cubierto por tickets más concretos. |
| AM-72 | SMS a técnicos a las 4pm pidiendo viáticos | SPRINT 17 (Opción C) | S+ | Push + email fallback (NO SMS pagado). Scheduled job 16:00 dispara push; si no marcan leído en X horas, dispara email. Reusa VAPID + Gmail Workspace. Costo recurrente: $0. |
| [~] AM-73 | Técnicos creen notas para órdenes | CONSOLIDADO | — | (2026-05-20) Consolidado en epic EPIC-NOTAS (notable_type=Orden o Viaje, autor_id=técnico). |
| [x] AM-84 | Notificaciones a celular | DONE | — | (2026-05-20) Cerrado. Push notifications activas desde 2025-11 + email viaje creado deployado 2026-05-19. |
| [x] AM-85 | ”Aplicación” | DESCARTADO | — | (2026-05-20) Descartado. Epic de una palabra sin contexto. |
| AM-89 | Fecha manual al hacer depósitos | SPRINT 15 | S | Campo fecha en form de depósito, hoy probablemente auto. |
| [~] AM-90 | Anotaciones por sitio + notif al abrir orden | CONSOLIDADO | — | (2026-05-20) Consolidado en epic EPIC-NOTAS (notable_type=Sitio, notificar_al_abrir=true). |
| [x] AM-91 | ”Sitios” | DESCARTADO | — | (2026-05-20) Descartado. Epic de una palabra; tickets concretos sobre sitios ya existen. |
| AM-93 | Visualizar consumos por usuario/fecha/categoría sumarizados | SPRINT 16 | M | Reporte agregado. |
| AM-94 | Subtotal e IVA en consumos | SPRINT 15 | S | Campos adicionales en form + cálculo. |
| AM-95 | Entradas/Salidas siempre con servicio/lugar | SPRINT 15 | S | Validación en MovimientoInventario (probablemente ya tiene sitio_id required; verificar al inicio). |
| AM-96 | Inventario en sitio que lo hagan ellos mismos | TRACKED EN amadeus.md | — | Esto es la capa 1. Hoy ON solo para Selene (piloto). Asignación al resto rastreada en amadeus.md como pendiente “post-piloto”. No requiere sprint propio. |
| [x] AM-97 | Crear sitio → generar inventarios por producto | DESCARTADO | — | (2026-05-20) Descartado. Contradice decisión 2026-05-19 (Producto::boot::created removido a favor de firstOrCreate bajo demanda). |
| [x] AM-98 | ”Inventarios” | DESCARTADO | — | (2026-05-20) Descartado. Epic de una palabra; el módulo de inventarios ya existe con tickets concretos. |
| [~] AM-99 | Pendientes por sitio + notif al abrir orden nueva | CONSOLIDADO | — | (2026-05-20) Consolidado en epic EPIC-NOTAS (notable_type=Sitio, notificar_al_abrir=true; “pendiente” puede ser un tag/categoría futura). |
| AM-100 | Varias fotos en consumos | SPRINT 16 | M | Storage multi-file + UI gallery. |
| [x] AM-107 | Modificar formato/estilo de vista detalles (Sprint 11) | DESCARTADO | — | (2026-05-20) Descartado. Ambigüedad: “detalles de qué” sin sustantivo. |
| AM-119 | Inventarios pertenezcan a sitio O a usuario | SPRINT 20 | M | Hoy inventarios.sitio_id. Necesita usuario_id nullable + check constraint OR (uno de los dos). Cambio de schema. Originalmente en Sprint 11. |
| AM-120 | Al cambiar estatus de movimiento, modificar inventario | SPRINT 20 (verif.) | S | InventarioService::aplicarEntrada ya actualiza al marcar entregado. Al inicio del sprint, verificar cobertura de rechazado/cancelado — si están cubiertos, cerrar sin trabajo. Originalmente Sprint 11. |
| AM-129 | Paginación estandarizada | SPRINT 19 | M | Componente Paginador.vue reutilizable + audit de páginas. Originalmente Sprint 14. |
| AM-130 | Select buscable en filtro de productos | SPRINT 15 | S | SearchableSelectInput.vue ya existe; usarlo en lista de movimientos. Originalmente Sprint 14. |
| AM-131 | Vista de detalle de producto con inventario+historial | SPRINT 16 | M | Pages/Productos/Show.vue con dos tablas (inventarios por sitio + movimientos). |
| [x] AM-132 | Eliminar página de reporte de movimientos | DESCARTADO | — | (2026-05-20) Descartado. Sergio había anotado porque existían 2 lugares para ver reportes; eso ya se consolidó. La página actual queda. |
| AM-133 | Buscar movimientos por número de serie | SPRINT 15 | S | Con numero_serie en inventarios desde 2025-11-19, filtro en MovimientosInventarioController::index. |
| [x] AM-134 | Más de un vehículo por orden | DONE | — | (2026-05-20) Cerrado. “Orden” = viaje confirmado por Sergio. Fase 1 deployada (commit e0ed6ad): pivot equipo_vehiculo, 188 equipos backfilled. |
| AM-135 | Sin unidad, viajar en avión/camión con detalles | SPRINT 21 | M | Tipo de transporte alternativo + campos. |
| [~] AM-136 | Notas por técnico (estatus sitio/mantenimiento) + foto | CONSOLIDADO | — | (2026-05-20) Consolidado en epic EPIC-NOTAS (notable_type=Sitio, autor_id=técnico, foto opcional vía nota_fotos). |
| AM-137 | Mejorar vista de creación de viajes para celular | SPRINT 19 | M | Mobile UX de FormaViaje.vue. Reusar patrones del rediseño móvil de /notificaciones. |
| AM-138 | Cancelar órdenes sin viáticos ni depósitos | SPRINT 15 | S | Validación + endpoint + UI button condicional. |
| AM-139 | Múltiples destinos en un viaje, separar cuadrillas/vehículos | BACKLOG | L | Sprint: diferido. Fase 2 explícita de N vehículos, después de validar Fase 1 en prod. |
| AM-140 | No se pueden editar productos de viaje recién creado | BACKLOG (C2) | — | Sprint: diferido. Editor en FormaViaje.vue:214-245 bajo viaje_link_enabled. Solo accionable al activar capa 2. |
| [x] AM-141 | Usuario sin permiso de inventario no debe ver reporte | DONE | — | (2026-05-20) Cerrado. MovimientosInventarioController::reportes:152 ya hace Gate::authorize('viewAny'). Sergio decide en AM-132 si la página queda o se elimina. |
| AM-142 | Mejorar estilo de info de materiales/productos | SPRINT 19 (⚠️) | S-M | Aclarar al inicio del sprint qué pantalla específicamente. Sin contexto no se puede tasar bien. |
| AM-143 | Checklist entrega: “presione OK” sin botón + mensaje falso | BACKLOG (REPRO) | S-M | Sprint: diferido. En pausa hasta que Sergio reproduzca el caso real (botón SÍ existe en Checklist.vue:104-120; mensaje aparece cuando anyBad=true con default ok=false). Necesita screenshot para distinguir fix A/B/C. |
| AM-144 | Visualizar existencia de productos al hacer viaje/traslado | BACKLOG (C2 parcial) | M | Sprint: diferido. Display de stock en SelectorProductosMovimiento.vue. El caso del viaje depende de capa 2; el caso del traslado puede hacerse antes. |
| AM-145 | Actualizar órdenes y notificar cambios | SPRINT 21 | M | Extender listener actual (dispara en created) a updated con diff. Reutiliza service NotificarViajeCreadoService. |
| [x] AM-146 | Marcar usuarios para notif por orden | DESCARTADO | — | (2026-05-20) Descartado. El flag global recibir_notif_viajes + asignación al equipo cubren los casos reales; watching per-orden es over-engineering para ~20 usuarios internos. |
Resúmenes por bucket
Cerrar (ya están hechos — 5 ítems)
- AM-46, AM-47, AM-84, AM-134.
- AM-141 cerrar si se elige NO eliminar la página (AM-132).
Probablemente descartar (8 ítems)
- AM-9, AM-10, AM-71, AM-85, AM-91, AM-98 — epics de una palabra abandonados.
- AM-97 — contradice decisión reciente.
- AM-58, AM-107, AM-142 — ambigüedad bloquea estimación.
Quick wins (S, sin dependencias — 8 ítems)
- AM-52, AM-53, AM-66, AM-89, AM-94, AM-95, AM-130, AM-133, AM-138.
- Sugerencia: bloque “quick wins” en una sola sesión, todos pequeños, podrían entrar en 1 día.
Decisiones de producto antes de hacer (5 ítems)
- AM-55 (¿layer de roles encima de permisos?).
- AM-72 (SMS vs push interno, costo).
- AM-132 vs AM-141 (eliminar reporte o protegerlo — ambos no).
- AM-146 (¿watching por orden?).
- AM-143 (reproducir el caso real antes de tocar).
Features medianos (M — 13 ítems)
AM-59, AM-65, AM-69, AM-90, AM-93, AM-99, AM-100, AM-119, AM-129, AM-131, AM-135, AM-136, AM-137, AM-144, AM-145.
Features grandes (L+ — 3 ítems)
- AM-49 traducciones (decidir antes: end-to-end o gradual).
- AM-139 multi-destino (Fase 2 explícita; ya tiene plan).
- AM-57 base de datos de equipos (pedir contexto antes de tasar).
Depende de capa 2 (defer — 2 ítems)
- AM-140, AM-144 (parcialmente).
Consolidar (overlap entre ellas)
- AM-65 + AM-73 + AM-90 + AM-99 + AM-136 — todas son variantes de “notas por entidad con/sin notif”. Recomendado: un solo modelo
Notapolimórfico connotificar=bool, una UI, varios entry points. Si Sergio acepta, sustituye 5 tickets por 1 epic de M-L.
Cómo trabajar este doc
Sergio decide ítem por ítem. Marcadores:
[x]el ticket queda resuelto (sea por done, descarte, rescope, o consolidación).[ ]sigue abierto.[~]consolidado con otro — indicar cuál.- Anotar en
Notaslo que se decidió y porqué (append, no sobreescribir).
Cuando un ticket se va a trabajar, se mueve a projects/amadeus.md sección “En progreso” y se sigue el flujo normal del hub.
Asignación a sprints (aprobada 2026-05-20)
29 tickets abiertos distribuidos en 7 sprints (15-21) + backlog diferido. Suponiendo que el próximo sprint en Jira sea el 15; si la numeración real es otra, renombrar pero mantener orden.
Sprint 15 — Quick wins + bug fixes (~2 días, 9× S)
- AM-52 indicador cargando consumos
- AM-53 mensaje flash móvil
- AM-66 notas por consumo (justificación compras)
- AM-89 fecha manual en depósitos
- AM-94 subtotal e IVA en consumos
- AM-95 entradas/salidas con servicio/lugar
- AM-130 select buscable en filtro productos
- AM-133 buscar movimientos por número de serie
- AM-138 cancelar órdenes sin viáticos ni depósitos
Sprint 16 — Reportes y visualizaciones (~1 semana, 4× M)
- AM-69 correo diario de saldos con viáticos
- AM-93 consumos por usuario/fecha/categoría sumarizado
- AM-131 vista detalle de producto con inventario+historial
- AM-100 múltiples fotos en consumos
Sprint 17 — Roles + notif scheduled (~1.5 semanas)
- AM-55 layer de roles persistidos (L) — refactor de policies + Nova
- AM-72 push+email scheduled job 16:00 (S+) — reusa VAPID + Gmail Workspace
Sprint 17 debe ir antes que sprint 18 para evitar migrar policies dos veces (notas necesitarán autorización por rol/permiso).
Sprint 18 — EPIC-NOTAS (~1-2 semanas, M-L)
- EPIC-NOTAS modelo
Notapolimórfico +nota_fotosopcional + UI inline + listener al crear viaje - Cubre AM-65, AM-73, AM-90, AM-99, AM-136
Precondición: validar uso real con técnicos antes de codificar.
Sprint 19 — UX y mobile (~1 semana, 3× M)
- AM-129 paginación estandarizada en todas las páginas
- AM-137 form de creación de viajes en móvil
- AM-142 estilo de info de materiales/productos ⚠️ aclarar qué pantalla antes de empezar
Sprint 20 — Datos del módulo de inventarios (~1 semana, 2× M + S)
- AM-119 inventarios pertenezcan a sitio O usuario (schema change + check OR)
- AM-120 verificar que cambio de estatus cubre
rechazado/canceladoademás deentregado(puede ser S si ya está implementado) - AM-59 fotos de estado de unidad en salida/llegada
Sprint 21 — Features de viaje (~1 semana, 3× M)
- AM-135 viajar sin unidad (avión/camión) con detalles del vuelo/camión
- AM-145 actualizar órdenes y notificar cambios (extiende listener viaje creado a
updatedcon diff) - (slot libre para overflow del sprint 16 o adelantar de backlog)
Backlog diferido (fuera de sprint, requiere precondición)
- AM-49 traducciones a español (L, sprint dedicado cuando se decida alcance: end-to-end vs página por página)
- AM-57 BD equipos en sitios con identificadores (L, pide aclaración sobre “hacia dónde están apuntados”)
- AM-139 Fase 2 N vehículos: múltiples destinos/cuadrillas/vehículos por viaje (L, después de validar Fase 1 en prod)
- AM-140 editar productos en viaje recién creado (depende de capa 2 activada)
- AM-144 existencia de productos al hacer viaje (parcialmente depende de capa 2)
- AM-143 checklist sin botón OK + mensaje falso (en pausa hasta reproducir caso real)
Notas operativas de la asignación
- Capa 2 (
INVENTARIO_VIAJE_LINK) queda intencionalmente fuera de toda asignación — su activación sigue siendo decisión independiente de Sergio. Cuando la actives, AM-140 y AM-144 (parcial) entran al próximo sprint disponible. - AM-120 puede cerrarse sin trabajo si
InventarioService::aplicarEntradaya cubre todos los estatus. Verificar al inicio del sprint 20. - AM-100 podría moverse al sprint 21 si quieres mantener “todas las fotos” agrupadas con AM-59.
Epics derivados de la consolidación
EPIC-NOTAS — Modelo Nota polimórfico con foto opcional
Origen: consolidación de AM-65, AM-73, AM-90, AM-99, AM-136 (5 tickets que pedían el mismo patrón sobre entidades distintas).
Scope:
- Tabla
notas:id,notable_type,notable_id,autor_id(FK usuarios),contenidotext,notificar_al_abrirbool, timestamps. - Tabla
nota_fotos:id,nota_id(FK),path, timestamps. Soporta multi-foto por nota. - MorphMap en
AppServiceProvider: registrarViaje,Sitio,MovimientoInventario(¿Orden si es modelo separado?). - Trait
HasNotasen cada modelo notable:morphMany(Nota::class, 'notable'). - Modelo
NotaconbelongsTo Usuario as autor,morphTo notable,hasMany NotaFoto. - UI inline reusable: componente Vue
<NotasInline notable-type=... notable-id=... :allow-create-photo="true">con lista + form + drag&drop foto. - Listener: al crear Viaje (y posiblemente al crear MovimientoInventario), buscar notas en
Sitiocorrespondiente connotificar_al_abrir=truey disparar push+email al equipo asignado. - Nova: resource
Notacon polymorphic field para gestión admin.
Dificultad: M-L (1-2 semanas).
Dependencias:
- Modelo
Orden— confirmar si existe como entidad propia o si “orden” en AM-73 = viaje. - Storage para fotos: reutilizar el mismo path que ya usan otras fotos del proyecto.
Validación previa antes de codificar:
- Confirmar uso real: ¿el técnico va a tomar el teléfono y escribir una nota, o va a llamar por radio? Si la respuesta es la 2, la inversión no vale.
- Decidir si las fotos son obligatorias para algún tipo de nota o siempre opcionales.
Bitácora de decisiones
2026-05-20 — análisis inicial
- 51 tickets de Jira importados y categorizados.
- Sin acciones automáticas — pendiente que Sergio revise una por una.
2026-05-20 — sesión de decisiones (Sergio)
- Cerrados (5): AM-46, AM-47, AM-84, AM-134, AM-141. Confirmados como DONE.
- Descartados (12): AM-9, AM-10, AM-58, AM-71, AM-85, AM-91, AM-97, AM-98, AM-107 (epics de 1 palabra + stale + ambiguos) + AM-132 (consolidación previa de reportes) + AM-146 (over-engineering vs flag global existente).
- Decisiones de producto:
- AM-55 → Opción A: layer de roles persistidos encima de permisos granulares. Pendiente ejecutar (L).
- AM-72 → Opción C: push + email fallback, NO SMS pagado. Pendiente ejecutar (S+).
- AM-143 → Opción D: reproducir caso real antes de decidir fix.
- Consolidación: AM-65, AM-73, AM-90, AM-99, AM-136 → epic EPIC-NOTAS (modelo polimórfico + foto opcional). 5 tickets reducidos a 1 epic M-L.
Pendiente: priorizar el resto de tickets abiertos (29 ítems).
2026-05-20 — priorización aprobada
- 29 tickets distribuidos en 7 sprints (15-21) + backlog diferido.
- Sprint 15 = quick wins (9× S, ~2 días).
- Sprint 16 = reportes y visualizaciones (4× M).
- Sprint 17 = roles persistidos + notif scheduled (la más invasiva, debe ir antes que EPIC-NOTAS).
- Sprint 18 = EPIC-NOTAS (consolidación 5→1).
- Sprint 19-21 = UX/mobile + datos inventarios + features viaje.
- Backlog diferido: AM-49 (traducciones), AM-57 (BD equipos), AM-139 (Fase 2), AM-140/144 (dep. capa 2), AM-143 (repro).
- Cada ticket en la tabla principal lleva ahora etiqueta
SPRINT NoBACKLOG.