Saltar a contenido

Gap mvp

Documento histórico

Este documento se conserva solo para trazabilidad. Consulte el índice maestro para la fuente vigente.

# Pantallas implementadas vs lo que falta para MVP

Documento histórico — auditoría 2026-06-07

Este archivo es el registro histórico del gap entre la documentación y la APK, capturado en la auditoría del 2026-06-07. Para conocer el estado actual vigente de la APK, consultar estado-actual.md.

Detalle pantalla por pantalla de lo que ya está maquetado en la APK, contrastado con lo que pide la documentación funcional.

Leyenda: ✅ hecho, ⚠️ parcial, ❌ falta, 🔒 no aplica (Fase 2+)


Flujo 1: Registro / Login

✅ Welcome (Bienvenida)

Elemento Doc App Notas
Logo ⚠️ Drawable no existe; IslaTextLogo podría usarse mientras
Tagline "Tu puente logístico hacia Cuba" (implícito)
Botón "Iniciar Sesión" navega a Login
Botón "Crear Cuenta" navega a Register
Copyright "© 2026 ISLABOX."

✅ Login

Elemento Doc App Notas
Email placeholder "ejemplo@correo.com"
Contraseña con toggle visibilidad (estándar)
"¿Olvidaste tu contraseña?" (estándar) navega a ForgotPassword
"¿No tienes cuenta? Regístrate" (estándar) navega a Register
Validación de email sin validación
Validación de contraseña sin requisitos (longitud, caracteres)
Reintento con rate limit Sí (5/min) no aplica sin backend
Navegación al hacer click (navega) ⚠️ navega a Main sin validar credenciales

⚠️ Register (Registro)

Elemento Doc App Notas
Nombre y apellidos dos IslaTextField lado a lado
Email
Teléfono con código de país Solo +1 (EE.UU.) — correcto por diseño según la Regla de origen del usuario.
Contraseña con toggle visibilidad
Repetir contraseña (estándar) con error inline si no coinciden
Validación de match passwordsMatch
Validación de formato email
Validación de requisitos contraseña
Checkbox de términos (estándar) no está
Handler de envío vacío (TODO)

✅ ForgotPassword

Elemento Doc App Notas
Email
Botón "Enviar código" (estándar) navega a VerificationCode(email)
Link "Volver al Login" (estándar)

✅ VerificationCode (OTP)

Elemento Doc App Notas
Input OTP de 6 dígitos OtpInputField custom (BasicTextField + 6 boxes)
Email visible "enviado a {email}"
Botón "Verificar" (estándar) habilitado cuando código tiene 6 chars
Reenviar con timer (estándar) 45s countdown
Validación del código (estándar) no valida, navega siempre

✅ Success

Elemento Doc App Notas
Imagen de éxito ⚠️ Drawable no existe; usa el de IslaTextLogo o crear el success
Título configurable (genérico) default "¡Éxito!"
Subtítulo configurable (genérico)
Botón de acción (genérico) configurable

Flujo 2: Dashboard (Inicio)

⚠️ Dashboard

Elemento Doc App Notas
Saludo "Bienvenido, {nombre}" GreetingSection
Identificador del casillero (CP-XXX) pero hardcoded CP-001042-7
Punto verde de "activo" decorativo
Dirección completa copiable ⚠️ LockerAddressSection tiene la dirección pero no muestra botón de copiar todo
Copiar por campos ⚠️ cada campo tiene su propio IconButton(ContentCopy)
Selector Amazon/Shein/Temu (implícito) segmented control en la sección de dirección
4 secciones de paquetes Solo 3: En Tránsito, En Almacén, Entregados. Falta "Compras en camino al almacén"
Banner "¿Compraste algo nuevo?" (implícito) ReportActionBanner
Acceso a tutoriales no hay link directo a Amazon/Shein/Temu desde el dashboard
Botón de notificaciones pero NotificationsScreen solo tiene empty state
Sección "Requiere tu atención" no existe
Acceso al historial completo de notificaciones solo navega a empty state

❌ Notificaciones

Elemento Doc App Notas
Lista de notificaciones empty state
Indicador de no leídas el badge rojo en la campana es decorativo, no funcional
Tipos de notificaciones 18+ eventos
Push: días de almacenaje por vencer
Push: cargos por almacenaje
Push: aduana
Push: cargos adicionales

Flujo 3: Reportes (Prealertas)

⚠️ Reportes (Mis reportes)

Elemento Doc App Notas
Lista de prealertas ReportesScreen con 4 ejemplos
Cada item: tienda badge con tienda
Cada item: estado badge con estado
Cada item: tracking (o "Sin tracking aún") "Sin tracking aún" implementado
Cada item: número de orden
Cada item: fecha de compra
FAB para nuevo reporte (estándar) navega a ReporteForm
Estado vacío (estándar) "No tienes reportes pendientes"
Estado "Reportada"
Estado "Esperando tracking" como "Esperando tracking"
Estado "Tracking recibido"
Estado "Esperando llegada al almacén"
Estado "Requiere corrección"
Estado "Vinculada a paquete" no hay ejemplo
Estado "Cancelada" no hay ejemplo
Click → detalle (estándar) navega a ReporteDetalle (raíz)

⚠️ Formulario de reporte

Campo Doc App Notas
Tienda (Amazon, SHEIN, Temu) IslaTextField libre (no es dropdown)
Nº de orden
Fecha de compra ⚠️ TextField libre con placeholder "DD/MM/AAAA", no es DatePicker
Tracking (opcional)
Categoría (dropdown) ExposedDropdownMenuBox con 8 categorías
Descripción
Cantidad KeyboardType.Number
Valor pagado (USD) KeyboardType.Decimal
Enlace del producto (opcional)
Instrucciones especiales (opcional) multilinea
¿Desea consolidar? (Sí/No) 2 RadioButton
Servicios adicionales (Inspección, Prueba, Reempaque) 3 Checkbox
Foto/captura de orden (opcional) ⚠️ CaptureUploadSection no abre cámara ni galería
Remitente (EE.UU.) ⚠️ RemitenteSelector no permite elegir (asume único)
Destinatario (Cuba) ⚠️ DestinatarioSelector no abre lista de contactos
Validación de campos requeridos ⚠️ solo deshabilita el botón si están vacíos; no muestra errores inline
Validación de tracking (formato) Sí (5+ alfanum)
Validación de valor > 0

✅ ReporteDetalle (raíz)

Sección Doc App Notas
Header con tienda y categoría
Card de tracking y orden
Información en almacén (fecha, embalaje, peso, dimensiones) pero valores "Pendiente" si vacíos
Timeline de estados con default si vacío
Almacenaje (días, gratis, costo) StorageInfoCard
Fotos del paquete ⚠️ 3 placeholders "PhotoLibrary" (no hay fotos reales)
Detalles de compra (fecha, valor, descripción, cantidad)
Información de entrega (remitente, destinatario, consolidar)
Instrucciones especiales Card destacado si existe
Acciones disponibles según estado ActionButtonsGroup con when por estado

Acciones implementadas: - "En almacén": Solicitar inspección, Solicitar reempaque, Solicitar devolución, Agregar a consolidación, Enviar solo - "En servicio adicional": Ver estado del servicio, Esperar resultado - "Listo para consolidar": Agregar a consolidación - "Consolidado": Ver consolidación - "Incidencia": Ver motivo, Resolver problema - Otros: "No se requieren acciones para este estado"

⚠️ Los onClick de cada acción son vacíos (onClick = { /* TODO */ }).


Flujo 4: Paquetes

⚠️ Paquetes (Mis paquetes)

Elemento Doc App Notas
Lista de paquetes recibidos PaquetesScreen con 3 ejemplos
Foto del paquete ⚠️ placeholder si no hay fotos
Tienda
Estado "En almacén", "Listo para enviar", "En tránsito"
Tracking
Fecha de recepción
Días en almacén con color rojo si > 5
Fecha límite sin recargo
Click → detalle (estándar) navega a ReporteDetalle (mismo componente)

❌ Sección "En tránsito"

La doc pide 4 secciones en el dashboard (en camino, en almacén, envíos, entregados). La app solo tiene 3 en PackageSummarySection. Falta desglose entre "en almacén" y "envíos".

❌ Sección "Entregados"

Existe en PackageSummarySection.delivered: Int pero no tiene su propia pantalla de lista.

❌ Detalle de envío (distinto a detalle de paquete)

La doc define shipments con estados específicos: despachado_desde_almacen, en_transito_a_cuba, en_aduana, liberado_de_aduana, en_reparto, entregado. La app no tiene pantalla dedicada para esto.


Flujo 5: Guía

⚠️ Guía (Centro de ayuda)

Elemento Doc App Notas
Título "Guía"
Subtítulo "Todo lo que necesitas saber sobre IslaBox"
Badge "CENTRO DE AYUDA" (estándar)
Featured card "Empieza aquí" (estándar) 3 pasos: Compra, Reporta, Recibe
Lista de guías 6 items
"Cómo enviar con IslaBox" ⚠️ onClick = { /* TODO */ }
"Usa tu dirección en EE. UU." ⚠️ onClick = { /* TODO */ }
"Artículos permitidos" ⚠️ onClick = { /* TODO */ }
"Tiempos de entrega" ⚠️ onClick = { /* TODO */ }
"Información de aduana" ⚠️ onClick = { /* TODO */ }
"Preguntas frecuentes" ⚠️ onClick = { /* TODO */ }

❌ Tutoriales por marketplace

Elemento Doc App
Tutorial Amazon
Tutorial SHEIN
Tutorial Temu
Capturas de pantalla de los campos
Ejemplo: Línea 2 = ISLABOX CP-001042-8
Errores frecuentes específicos
Validación final antes de comprar

❌ Módulo informativo de aduana

Fuente normativa

El contenido de este módulo viene definido en docs/datos/aduana.md (sección "Módulo informativo de aduana") y se alimenta de la docs/datos/aduana-normativa-cuba.md (Res. 175/2022).

Elemento Doc App
Qué entra como envío no comercial
Límites por valor/peso
Exenciones aplicables
Categorías frecuentes
Cómo se calcula
Artículos restringidos
Fecha de actualización
Fuente normativa
Glosario

Flujo 6: Perfil

⚠️ Perfil

Elemento Doc App Notas
Avatar con iniciales (estándar) "KV" hardcoded
Nombre hardcoded "Kleudy Victor Torno Peña"
Email hardcoded "kleudy@example.com"
Identificador del casillero con dot verde + texto
Sección "CUENTA" 3 items
Item "Mi Información" (estándar) ⚠️ sin onClick
Item "Direcciones" (estándar) ⚠️ sin onClick (debería llevar a lista de direcciones)
Item "Métodos de Pago" (estándar) ⚠️ sin onClick (debería llevar a gestión de pagos)
Sección "PREFERENCIAS" 3 items
Item "Notificaciones" (estándar) ⚠️ sin onClick
Item "Ayuda y Soporte" (estándar) ⚠️ sin onClick
Item "Privacidad" (estándar) ⚠️ sin onClick
Botón "Cerrar Sesión" (estándar) ⚠️ onClick = { /* Logout logic */ } vacío
Versión "Versión 1.0.0 - IslaBox"

❌ Mi Información (detalle)

No existe. Debería mostrar: nombre, email, teléfono, dirección, fecha de registro, KYC status, etc. con opción a editar.

❌ Direcciones (CRUD)

No existe. Debería: - Listar direcciones del casillero (puede ser 1 sola en MVP) - Listar destinatarios en Cuba (múltiples) - Crear/editar destinatario (nombre, CI, teléfono, dirección, provincia, municipio)

❌ Métodos de Pago

No existe. La doc define payments + payment_methods (no explícito pero implícito). Debería: - Mostrar historial de pagos - Permitir registrar método de pago (tarjeta, etc.) - Mostrar pagos pendientes

❌ Notificaciones (preferencias)

No existe como sub-pantalla. Debería permitir: - Activar/desactivar push - Activar/desactivar email - Categorías de notificaciones

❌ Ayuda y Soporte

No existe. Debería incluir: - FAQ - Contacto (WhatsApp, email) - Términos y condiciones - Política de privacidad

❌ Privacidad

No existe. Debería mostrar: - Política de privacidad - Gestión de datos personales - Cerrar cuenta


Flujo 7: KYC (Verificación de identidad)

❌ KYC completo (6 pasos según doc)

Paso Doc App
Bienvenida al proceso
Tipo de documento (Pasaporte, CI, Licencia)
Foto del documento (frente)
Foto del documento (reverso)
Selfie con documento
Datos de residencia (dirección, provincia, municipio)
Envío a revisión

❌ Estados de KYC

Estado Doc App
sin_iniciar
borrador
enviado
en_revision
aprobado
rechazado
requiere_mas_informacion
vencido (10 años)
bloqueado_manual

❌ Bloqueo suave (en doc, no implementado)

La doc dice:

"El usuario puede navegar por la app aunque no tenga KYC aprobado. El bloqueo ocurre solo cuando intenta crear un envío, confirmar una consolidación para despacho, pagar un envío internacional, aplicar crédito o usar tarjetas promocionales."

Como no hay consolidación, pagos ni crédito, no aplica todavía. Pero cuando se agreguen, hay que recordar este bloqueo.


Flujo 8: Cotización y Pago — estado al 2026-06-07

Alcance MVP visual (sin backend): QuoteScreen, PaymentScreen e InvoiceScreen ya existen (T-404). Falta conectarlas desde ReporteDetalle con datos coherentes del paquete (T-422) y desde la consolidación (T-406). El pago real, la pasarela Stripe y el lock de Redis son para Fase 2.

⚠️ Cotización (parcial)

Elemento Doc App Notas
Detalle de cotización con desglose QuoteScreen existe (T-404)
Items de la cotización QuoteItemRow con descripción, cantidad, total
Subtotal, impuestos, descuento, total Implementado en QuoteScreen
Banner de expiración "Esta cotización expira el: ..."
Botón "Aceptar y Pagar" Navega a PaymentScreen
Lista de cotizaciones pendientes No hay pantalla de lista
9 conceptos de costo ⚠️ Solo 2 items mockeados en FakeDataSource.quotes
Tiempo de validez (7 días) Quote.expiresAt

⚠️ Pago (parcial)

Elemento Doc App Notas
Pantalla de pago PaymentScreen existe (T-404)
Pantalla de factura InvoiceScreen existe (T-404)
Selección de método de pago ⚠️ Depende de implementación interna
Confirmación de pago Navega a InvoiceScreen
payment_method_mix (real + crédito + tarjeta) Modelos creados (T-111)
Lock en Redis ❌ (no aplica) Sin backend

❌ Cotización ligada al envío real (CRÍTICO)

Elemento Doc App Notas
ReporteDetalle navega a Quote con id real onPayClick("QUO-001") hardcodeado. T-422

Flujo 9: Consolidación — estado al 2026-06-07

Alcance MVP visual (sin backend): ConsolidationListScreen y ConsolidationDetailScreen ya existen (T-110, solo lectura). Falta ConsolidationCreateScreen + ConsolidationSummaryScreen para crear y persistir en FakeDataSource (T-406). Sin lock distribuido, sin cálculo contra servidor de la agencia aliada.

⚠️ Listar consolidaciones (parcial)

Elemento Doc App Notas
Pantalla de lista ConsolidationListScreen existe
Card con descripción, peso, # paquetes, status Implementado
Navegación a detalle (estándar) onConsolidationClick navega a ConsolidationDetailScreen
FAB "Nueva consolidación" siempre visible (estándar) T-406
Empty state con CTA "Crear primera" (estándar) ⚠️ Solo dice "No tienes consolidaciones activas" sin CTA

⚠️ Detalle de consolidación (parcial)

Elemento Doc App Notas
Pantalla de detalle ConsolidationDetailScreen existe
Header con descripción, ID, fecha
Card de resumen (estado, peso, valor, # paquetes, tracking master)
Status badge Coloreado por status
Lista de paquetes incluidos Click navega a ReporteDetalle
Sección de notas Si notes != null
Botón "Pagar" No navega a QuoteScreen con id real. T-406

❌ Crear consolidación (CRÍTICO — bloquea el flujo)

Elemento Doc App Notas
Lista de paquetes a consolidar T-406: ConsolidationCreateScreen
Selección múltiple con checkbox T-406
Definir destinatario T-406
Cálculo de peso y costo T-406 + constantes en AppSettings
Selector de vía (Barco $2.40 / Avión $3.35) T-406
Validación KYC aprobado T-406 (visual, sin backend)
Generación de Quote con vigencia 7 días T-406 (mockeada, persiste en FakeDataSource)
Cambio de paquetes → recálculo T-406

❌ Punto de entrada desde ReporteDetalle

Elemento Doc App Notas
Botón "Agregar a consolidación" // TODO (T-428)

✅ Estados de consolidación (cubierto)

8 estados en doc, 8 implementados en ConsolidationStatus enum (T-105).


Flujo 10: Servicios adicionales — estado al 2026-06-07

Alcance MVP visual (sin backend): ServiceRequestsListScreen (T-501), RequestInspectionScreen (T-502) y RequestReturnScreen (T-503) ya existen. Falta RequestRepackScreen (T-428) y conectar los handlers de "Agregar a consolidación" / "Solicitar reempaque" en ReporteDetalle.

✅ Ver mis servicios solicitados

T-501: ServiceRequestsListScreen con filtros ServiceType y ServiceStatus por FilterChip.

⚠️ Inspección visual (solicitar)

Elemento Doc App Notas
Solicitar desde ReporteDetalle RequestInspectionScreen (T-502)
Ver estado del servicio Tarea nueva
Ver evidencia (fotos/videos) Tarea nueva
Aprobar costo de inspección Tarea nueva

❌ Reempaque (solicitar)

Elemento Doc App Notas
Solicitar T-428: falta RequestRepackScreen
Ver estado

⚠️ Devolución (solicitar)

Elemento Doc App Notas
Solicitar RequestReturnScreen (T-503)
10 estados de devolución ⚠️ ServiceStatus tiene 10 valores pero no son específicos de devolución
Ver estado
Costo de envío de retorno

Flujo 11: Envíos (después de pagar)

❌ Mis envíos (lista)

Elemento Doc App
Lista de envíos en curso
Filtros por estado ⚠️
Tarjeta de envío con timeline ⚠️

❌ Detalle de envío

Elemento Doc App
Tracking visual del envío ⚠️
Estado actual
Información de aduana
Costo final (no estimado)
Fecha de entrega ⚠️
Costo de aduana
Reportar incidencia

❌ Estados de envío

16 estados en doc, 0 en app.


Flujo 12: Incidencias

❌ Centro de incidencias

Elemento Doc App
Lista de incidencias activas
Tipos (11 tipos en doc)
Abrir nueva incidencia
Responder a solicitud del operador

❌ Detalle de incidencia

Elemento Doc App
Motivo
Qué necesita el usuario
Acción "Resolver"

Flujo 13: Almacenaje (dentro del detalle de paquete)

✅ Ya implementado en StorageInfoCard y ReporteDetalleScreen

Elemento Doc App
Fecha de recepción
Días en almacén
Días gratis disponibles ⚠️
Costo por día extra ⚠️
Total acumulado
Notificaciones (días por vencer, cargos aplicados)

Flujo 14: Direcciones

❌ Lista de direcciones

No existe como pantalla propia (solo accesible desde Perfil > Direcciones que no tiene onClick).

❌ CRUD de destinatarios

No existe.


Flujo 15: Crecimiento (Fase 2) — 🔒

Funcionalidad Doc App
Código de referido por usuario 🔒
Pantalla de red de referidos 🔒
Crédito acumulado y vencimiento 🔒
Pantalla de crédito y tarjetas 🔒
Niveles 1/2/3 dinámicos 🔒
Pool de referidos 🔒
Tarjetas promocionales 🔒

🔒 No es parte del MVP operativo. La base de datos se prepara desde el día 1 según la doc, pero la UI no es visible hasta Fase 2.


Resumen del gap

Categoría Total doc En app %
Pantallas principales 17 7 41%
Flujos completos 15 3 20%
Acciones con lógica 100+ ~5 5%

Pantallas que SÍ existen (7)

  1. ✅ Welcome
  2. ✅ Login
  3. ⚠️ Register (sin handler)
  4. ✅ ForgotPassword
  5. ✅ VerificationCode
  6. ✅ Success
  7. ✅ Dashboard
  8. ⚠️ Reportes (lista + form, falta detalle de destinatario)
  9. ⚠️ Paquetes
  10. ⚠️ ReporteDetalle (sin acciones funcionales)
  11. ⚠️ Guía (sin tutoriales)
  12. ⚠️ Perfil (sin sub-pantallas)
  13. ⚠️ Notificaciones (solo empty state)

Pantallas que FALTAN (28)

Auth (1)

  • ❌ Splash / Onboarding

KYC (7)

  • ❌ KycWelcome
  • ❌ KycDocumentType
  • ❌ KycDocumentFront
  • ❌ KycDocumentBack
  • ❌ KycSelfie
  • ❌ KycResidence
  • ❌ KycReview

Destinatarios (3)

  • ❌ RecipientsList
  • ❌ RecipientForm (crear/editar)
  • ❌ AddressList (direcciones del casillero)

Tutoriales (4)

  • ❌ TutorialAmazon
  • ❌ TutorialShein
  • ❌ TutorialTemu
  • ❌ AduanaInfo (módulo informativo)

Cotización y Pago (3)

  • ❌ QuoteList
  • ❌ QuoteDetail
  • ❌ PaymentCheckout

Consolidación (2)

  • ❌ ConsolidationNew
  • ❌ ConsolidationDetail

Envíos (2)

  • ❌ ShipmentList
  • ❌ ShipmentDetail

Servicios (4)

  • ❌ ServiceRequestList
  • ❌ InspectionRequest
  • ❌ RepackRequest
  • ❌ ReturnRequest

Incidencias (2)

  • ❌ IncidentList
  • ❌ IncidentDetail

Otros (2)

  • ❌ EditProfile
  • ❌ Settings / Preferences