Ir al contenido

Próximos pasos

Consolida los pendientes de docs/product/master-plan.md, docs/features/{milk-run,nominas,future-features}.md y docs/infrastructure/{waf,cicd}.md (todos eliminados tras esta consolidación). Ver ESTADO_ACTUAL.md para qué ya existe.

Billing — gaps verificados contra código (2026-07-13)

Sección titulada «Billing — gaps verificados contra código (2026-07-13)»

El doc anterior (master-plan.md) marcaba casi todo como “✅ COMPLETADO”. Al verificar contra el código real, esto no es cierto para varios ítems — quedan como pendientes reales:

  1. trips/create NO tiene idempotencia activa. lambdas/trips/create/handler.py::_check_idempotency existe pero siempre retorna None, con el comentario "Idempotency guard removed post-RDS migration" — es decir, se implementó, se quitó durante la migración a DynamoDB, y nunca se reimplementó. Doble click o reintento de red sigue creando dos viajes (y dos facturas en producción). Reimplementar usando la tabla de idempotencia (PK=TRIP_CREATE#{key}, TTL 24h, ConditionExpression=attribute_not_exists(PK)).
  2. TrialBanner no existe. No hay ningún componente en el frontend que muestre “te quedan X días de prueba” o el aviso de trial expirado — a pesar de que el doc anterior lo marcaba como completado.
  3. useBillingGuard no se usa en ninguna página. El hook existe (src/hooks/useBillingGuard.ts) pero no está aplicado en los botones de crear/editar de Trips, Drivers, Units, Clients, Routes, Locations — los botones de escritura no se deshabilitan aunque el team esté bloqueado.
  4. check_subscription_active() falta en varios lambdas de escritura, verificado por grep: drivers/update-status, vehicles/update-status, route-points/create, route-points/update, route-points/delete, trips/delete, invitations/create, routes/delete.
  5. No verificado en esta pasada (requiere revisión aparte): step de plan en CreateTeamWizard, card de bienvenida en Home.tsx, refresh post-checkout en Subscription.tsx.
  1. deploy.yml (CI/CD, ambos repos) invoca una Lambda de migraciones que ya no existe. Los tres stages (apply-dev, apply-qa, apply-prod) llaman aws lambda invoke --function-name lade-{env}-migrations, pero el sistema migró de RDS/Postgres a DynamoDB single-table y esa lambda fue removida (ver comentario en infra/main.tf: “DB Migrations Lambda removed — migrated from RDS/Postgres to DynamoDB single-table design”). El pipeline de deploy fallará en ese paso tal como está hoy. Quitar el step o reemplazarlo por un no-op.
  2. WAF (geo-restricción CloudFront + API Gateway) no está implementado. Propuesta completa en el git log/memoria de esta consolidación: dos módulos Terraform independientes (lade-app/infra/modules/waf scope CLOUDFRONT, lade-infra/modules/waf scope REGIONAL), geo-restricción a MX/US + rate limiting opcional. Sin empezar.
  3. docs/features/future-features.md proponía migrar de Google Maps a AWS Location Service (por costo — Maps $0.04-0.05/1000 requests vs. Google). Esta sesión (2026-07-13) fue en la dirección contraria: se invirtió en Google Routes API (cálculo de distancia/duración/casetas, cacheado en la Ruta). Antes de considerar la migración a AWS Location, evaluar si el patrón de caché ya implementado (una sola llamada por creación/edición de ruta, nunca por vista) resuelve el problema de costo que motivaba la propuesta — probablemente sí, dado el volumen esperado de esta app. Si se revisita esta migración, el detalle completo (arquitectura, Terraform, LocationPicker, fórmula de costo de combustible) está en el historial de este documento antes de la consolidación.
  1. Fase 5 de lade-infra/docs/architecture/architecture-plan.md: Powertools (Logger/Tracer/Metrics) en el resto de lambdas fuera de trips/*, y limpieza final. Ver lade-infra/docs/PROXIMOS_PASOS.md.
  1. Milk Run / Backhaul (docs/features/milk-run.md, propuesta 2026-02-22): encadenar viajes para evitar que el vehículo regrese vacío. Modelo TripChain + ChainId/LegOrder en Trip. 3 fases: (1) cadenas manuales, (2) sugerencias automáticas de backhaul, (3) división de costos y analítica. Estimado Fase 1: ~2 sprints. Decisiones pendientes: reparto de costo automático vs. manual, radio de búsqueda configurable, respeto a horas de descanso (NOM-087), soporte multi-vehículo/transbordo.
  2. Nóminas (docs/features/nominas.md): módulo completo de nómina con CFDI de nómina 1.2, cálculo de ISR/IMSS, incidencias, dispersión bancaria. El sidebar y las rutas ya existen como placeholders (redirigen a Home) — cero backend. 5 fases propuestas, empezando por CRUD de empleados + períodos + cálculo manual sin timbrado.
  3. Cajas (inventario) y Almacenaje (reservas) (docs/features/future-features.md): páginas Cajas.tsx/Almacenaje.tsx existen pero son placeholders de 23 líneas — sin backend (boxes/*, reservations/* lambdas no existen).
  4. Servicios futuros (tier 1-3 en future-features.md): Maniobras, Cross-docking, Custodia, Mantenimiento, Cotizaciones, Contratos, Combustible, Incidentes, Carta Porte 3.1 standalone, Dashboard KPIs avanzado, Reportes.
  5. Integración de IA/Agentes/MCPs (future-features.md): optimización de rutas, cotización inteligente, predicción de mantenimiento, asistente Carta Porte, chatbot operativo, OCR de documentos, alertas inteligentes, análisis de rentabilidad. Todas en etapa de propuesta, priorizadas Q1-Q4 2026 en el doc original (fechas probablemente desactualizadas dado que ya es julio 2026 — revisar prioridades antes de retomar).
  1. Confirmar si refreshToken (guardado en tokenStorage, lade-app/src/core/api/client.ts) se usa realmente en algún flujo de refresco de sesión, o es código muerto. auth&refreshtoken.md proponía una lambda auth/refresh dedicada que nunca se construyó — Cognito probablemente maneja el refresh de otra forma (SDK del cliente), pero no se verificó a fondo en esta pasada.

/Lade/md/ ya se revisó (2026-07-13, ver ESTADO_ACTUAL.md). El repo /Lade/lade-landing/ sigue fuera de esta auditoría por decisión explícita del usuario — no se tocó ni se asumió nada sobre su vigencia.