Imported from Orlandho/proyecto-app-movil-UPN-2026-2 (
AGENTS.md). Install upstream withnpx skills add Orlandho/proyecto-app-movil-UPN-2026-2. Copyright stays with the author.
AGENTS.md - Contexto de Integración FoodJet y Requerimientos Técnicos del Sistema Móvil
Contexto de Integración del Ecosistema FoodJet
Este repositorio (Orlandho/proyecto-app-movil-UPN-2026-2) constituye el cliente móvil oficial Android (Kotlin) del sistema FoodJet, cuyo repositorio central de backend y aplicación web es Orlandho/Pagina-Foodjet.
La aplicación móvil está diseñada para operar de forma complementaria y coordinada con la plataforma web, garantizando una experiencia omnicanal fluida para clientes y administradores.
1. Consumo del Backend de FoodJet
La aplicación móvil Kotlin debe consumir la API REST del backend de FoodJet (Node.js con Express, Prisma ORM y base de datos relacional PostgreSQL):
- Base URL: Configurada en
RetrofitClient(http://10.0.2.2:3000/api/para emulador Android de desarrollo,http://localhost:3000/api/mediante adb reverse proxy en dispositivo físico, o la URL de producción/túnel Cloudflarehttps://foodjet.asen.pe/api/). - Autenticación y Seguridad: El backend gestiona sesiones mediante tokens JWT. La app móvil almacena el token en
SessionDataStorey lo adjunta automáticamente en cada petición medianteAuthInterceptor(Authorization: Bearer <token>). - Servicios de Red y Endpoints: Definidos en la interfaz suspendida
FoodJetApiService:- Autenticación:
POST /api/auth/login,POST /api/auth/register,GET /api/auth/me. - Catálogo de Productos:
GET /api/products. - Pedidos:
GET /api/orders/my-orders,POST /api/orders(con cálculo de subtotal, IGV y descuentos). - Direcciones:
GET /api/addresses,POST /api/addresses. - Calificaciones:
POST /api/reviews.
- Autenticación:
- Caché y Persistencia Local: Sincronización offline-first combinando Retrofit con la base de datos Room
FoodJetDatabasepara navegación ininterrumpida aun sin conectividad.
2. Paridad Visual y Paleta Cromática del Frontend Web
La aplicación móvil implementa Material Design 3 con Jetpack Compose y debe reflejar con máxima fidelidad la identidad visual, componentes y paleta cromática del frontend web de FoodJet (Pagina-Foodjet/frontend/styles.css):
- Paleta Cromática de Marca (definida en
Color.kt):FoodJetPrimary:#F5AF69(Naranja apetitoso insignia de FoodJet).FoodJetPrimaryDark:#F39D4A(Variante de énfasis y pulsación).FoodJetPrimaryLight:#FEF3E8(Contenedores suaves y fondos de tarjetas seleccionadas).FoodJetDark:#1A1A1A(Textos de alta jerarquía y títulos principales).FoodJetGray:#6C757D(Subtítulos, etiquetas secundarias y metadatos).FoodJetLightGray:#F8F9FA(Fondos de pantalla limpios y superficies neutras).FoodJetBorder:#DEE2E6(Bordes sutiles de separadores y tarjetas).
- Colores Funcionales y de Estado:
- Éxito:
#28A745(Confirmación de pedido, cupones válidos). - Advertencia:
#FFC107(Estados en preparación, advertencias). - Peligro / Error:
#DC3545(Errores de validación, productos agotados). - Información:
#0DCAF0(Insignias de envío rápido, tips).
- Éxito:
- Componentes Visuales Homólogos:
FoodJetTopBar: Barra superior con saludo personalizado, selector de dirección y buscador interactivo.FoodJetBottomBar: Navegación principal modular con tabs para Inicio, Favoritos, Carrito y Mis Pedidos.HeroCarousel: Carrusel visual superior con banners promocionales y cupones de descuento.ProductCard: Tarjetas de alimentos con imagen asíncrona (Coil), descripción, precio formateado en soles (S/), badge de descuento y botón de compra rápida.FilterSection: Barra horizontal de filtros rápidos por categoría (Hamburguesas, Pizzas, Bebidas, etc.).CartSheet: Modal deslizable con resumen de productos seleccionados, cantidades modificables y desglose de pago.TrackingScreen: Vista de seguimiento con línea de tiempo interactiva que refleja los estados del pedido en tiempo real homólogos a la vista web.
Guía de Arquitectura y Delimitación de Carpetas para el Agente Jules
Para asegurar modificaciones precisas, limpias y libres de efectos secundarios, el agente autónomo Jules debe regirse por la siguiente delimitación de responsabilidades dentro del módulo app.
- Archivo Fuente Mermaid:
mermaid diagramas/07_orquestacion_agente_jules_sincronizacion.mmd - Vector SVG de Alta Resolución:
mermaid diagramas/07_orquestacion_agente_jules_sincronizacion.svg
flowchart TD
subgraph EventoExterno ["Disparador Externo"]
WebRepo["Repositorio Orlandho/Pagina-Foodjet"] -- "repository_dispatch\n(tipo: foodjet-updated)" --> GHWorkflow[".github/workflows/receive-foodjet-sync.yml"]
end
subgraph OrquestacionJules ["Orquestación Jules"]
GHWorkflow --> GHIssue["Creación de Issue GitHub\n(Etiqueta: jules)"]
GHWorkflow -.-> DirectAPI["Invocación API\n(JULES_API_KEY)"]
GHIssue --> JulesSession["Sesión de Trabajo de Jules\n(Lectura de AGENTS.md)"]
end
subgraph ModuloAppKotlin ["Módulo app (Áreas Permitidas para Jules)"]
JulesSession --> UIViews["Vistas y UI Jetpack Compose\n(ui/screens/ & ui/components/)"]
JulesSession --> UIViewModels["Lógica de Estado MVVM\n(ui/viewmodel/)"]
JulesSession --> UINetwork["Servicios de Red y Repositorios\n(data/remote/ & data/repository/)"]
end
subgraph Protegido ["Zona Protegida (PROHIBIDO MODIFICAR)"]
GradleBase["Estructura Gradle Base\n(build.gradle.kts, libs.versions.toml)"]
end
JulesSession -. "Restricción Estricta" .-> GradleBase
1. Carpetas de Modificación Permitidas para Jules
El agente Jules debe enfocar sus intervenciones exclusivamente en las siguientes rutas según la naturaleza del cambio:
-
Capa Visual y Experiencia de Usuario (UI):
app/src/main/java/com/example/foodjeetapp/ui/screens/: Pantallas completas de la aplicación (HomeScreen.kt,CheckoutScreen.kt,CartSheet.kt,FavoritesScreen.kt,OrderHistoryScreen.kt,TrackingScreen.kt,AdminDashboardScreen.kt,Modals.kt).app/src/main/java/com/example/foodjeetapp/ui/components/: Componentes composables reutilizables (ProductCard.kt,HeroCarousel.kt,FilterSection.kt,FoodJetTopBar.kt,FoodJetBottomBar.kt,FeatureBadgesRow.kt,StarRatingBar.kt).app/src/main/java/com/example/foodjeetapp/ui/theme/: Definición de tema (Color.kt,Theme.kt,Type.kt).
-
Capa de Lógica de Negocio y Presentación (ViewModels):
app/src/main/java/com/example/foodjeetapp/ui/viewmodel/: Clases ViewModel responsables de exponer el estado inmutableStateFlowhacia las vistas (HomeViewModel.kt,CartViewModel.kt,OrderViewModel.kt,AuthViewModel.kt).
-
Capa de Servicios de Red, DTOs y Repositorios:
app/src/main/java/com/example/foodjeetapp/data/remote/api/: Definición de contratos Retrofit (FoodJetApiService.kt).app/src/main/java/com/example/foodjeetapp/data/remote/dto/: Clases de transferencia de datos inmutables (ProductDtos.kt,OrderDtos.kt,AuthDtos.kt,AddressDtos.kt,ReviewDtos.kt).app/src/main/java/com/example/foodjeetapp/data/remote/interceptor/: Interceptores de red (AuthInterceptor.kt).app/src/main/java/com/example/foodjeetapp/data/remote/RetrofitClient.kt: Cliente OkHttp y Retrofit.app/src/main/java/com/example/foodjeetapp/data/repository/: Implementaciones de repositorio como única fuente de verdad (ProductRepository.kt,OrderRepository.kt,UserRepository.kt).app/src/main/java/com/example/foodjeetapp/data/model/: Modelos de dominio de la aplicación (FoodJetModels.kt).
-
Capa de Persistencia Local (Referencia):
app/src/main/java/com/example/foodjeetapp/data/local/: Base de datos Room (FoodJetDatabase.kt), DAO (dao/ProductDao.kt), entidades (entity/ProductEntity.kt) y almacenamiento de preferencias (SessionDataStore.kt).
2. REGLA ESTRICTA: Preservación de la Estructura Gradle Base
El agente Jules tiene ESTRICTAMENTE PROHIBIDO MODIFICAR los archivos de infraestructura y configuración del sistema de compilación Gradle:
build.gradle.kts(raíz del proyecto)settings.gradle.ktsgradle.propertiesgradle/libs.versions.tomlapp/build.gradle.kts
Justificación técnica: La versión del Android Gradle Plugin (AGP 8.9), la versión de Kotlin (2.1), la toolchain de JVM (Java 21) y el compilador de Compose (libs.plugins.kotlin.compose) están estrictamente alineados y validados para compatibilidad con la suite de pruebas móviles. Cualquier modificación no supervisada en las versiones o plugins puede romper la integración continua. Toda tarea de alineación debe resolverse mediante código fuente Kotlin y Jetpack Compose dentro de los paquetes habilitados.
Orquestación del Agente Jules y Flujo de Eventos Externos
Protocolo de Comunicación
- Evento Disparador:
repository_dispatch - Tipo de Evento:
foodjet-updated - Repositorio Origen (Emisor):
Orlandho/Pagina-Foodjet - Repositorio Destino (Receptor):
Orlandho/proyecto-app-movil-UPN-2026-2 - Flujo Receptor:
.github/workflows/receive-foodjet-sync.yml - Mecanismo de Despacho:
- Al recibir el evento
foodjet-updated, el flujo crea automáticamente un Issue en GitHub asignado al agente Jules mediante la etiquetajulesusando GitHub CLI. - Si el secreto
JULES_API_KEYestá configurado en el repositorio, se genera además un análisis preliminar y plan de trabajo directo mediante la API de Jules/Gemini, adjuntándolo como comentario en el issue. - El agente Jules toma el issue, examina los commits y diferencias recientes en
Orlandho/Pagina-Foodjet, implementa los ajustes requeridos en las vistas, ViewModels o servicios de red de la app Kotlin, y somete los cambios a través de un Pull Request para revisión.
- Al recibir el evento
Auditoría en Sandbox Virtual de Google Jules y Status Checks Vinculantes
Para garantizar que ningún cambio sea integrado a la rama main sin superar una evaluación rigurosa tanto determinista como agéntica, el repositorio implementa una arquitectura híbrida de 5 Status Checks Obligatorios respaldados por el Ruleset de GitHub (id: 22495789):
- Archivo Fuente Mermaid:
mermaid diagramas/09_arquitectura_integracion_google_jules_sandbox.mmd - Vector SVG de Alta Resolución:
mermaid diagramas/09_arquitectura_integracion_google_jules_sandbox.svg
flowchart TD
PR["Pull Request hacia 'main'"] --> FastCI["Capa 1: CI Rápido (Actions - 60s)\n1. Estático | 2. Unitario | 3. Funcional | 4. Regresión"]
PR --> JulesAudit["Capa 2: Sandbox de Jules (jules.google.com)\n5. Veredicto de Auditoría en Sandbox de Jules"]
FastCI & JulesAudit --> RulesetCheck{"¿Los 5 Status Checks\nestán en verde (SUCCESS)?"}
RulesetCheck -- "Sí" --> MergeAllowed["Fusión Permitida (Squash & Merge)"]
RulesetCheck -- "No" --> MergeBlocked["Fusión Bloqueada (HTTP 405 Method Not Allowed)"]
1. Los 5 Status Checks Requeridos en GitHub
Análisis Estático de App Móvil con Jules: Compilación Kotlin y escaneo de vulnerabilidades OWASP Mobile.Pruebas Unitarias y Cobertura de Ramas Móvil con Jules: Ejecución de JUnit en la JVM con reportes XML.Pruebas Funcionales y Contratos Móviles con Jules: Verificación de contratos Retrofit, cálculo de IGV 18% y costos fijos de envío.Pruebas de Regresión y Estabilidad Móvil con Jules: Estabilidad de modelos de dominio y compatibilidad hacia atrás.Veredicto de Auditoría en Sandbox de Jules: Evaluación autónoma ejecutada por el agente Jules en su contenedor en la nube (jules.google.com/session).
2. Flujo de Despacho y Procesamiento del Veredicto
- Despachador (
.github/workflows/jules-sandbox-audit.yml):- Al abrirse o actualizarse un PR, marca
Veredicto de Auditoría en Sandbox de Julesen estadoPENDING (🟡). - Crea un Issue en GitHub con la etiqueta
julesy metadatos estructurados ocultos (PR_NUMBER,COMMIT_SHA,BRANCH). - La GitHub App de Google Jules detecta el Issue y abre una sesión en su máquina virtual en la nube.
- Al abrirse o actualizarse un PR, marca
- Procesador de Veredicto (
.github/workflows/jules-verdict-listener.yml):- Escucha comentarios en el Issue de auditoría emitidos por Jules.
- Al detectar
VEREDICTO: APROBADO, actualiza el Status Check aSUCCESS (🟢)y notifica al PR. - Al detectar
VEREDICTO: RECHAZADO, actualiza aFAILURE (🔴)con el reporte de hallazgos y correcciones necesarias.
3. Tolerancia a Fallos, Timeouts y Monitoreo Asíncrono
- Watchdog de Sondeo Seguro: El despachador ejecuta un ciclo de sondeo de hasta 10 minutos.
- Detección de Fallos Asíncronos: Si Jules no responde en 10 minutos (por repositorios no autorizados en "Configure repo", límite de cuota diaria de 100 sesiones alcanzado, o caídas de conectividad):
- Registra un reporte diagnóstico completo en los logs de GitHub Actions.
- Marca el check como
FAILURE (🔴)para mantener el PR protegido. - Publica en el PR una guía de remediación paso a paso con los enlaces directos a
jules.google.com/session.
- Reintento Manual sin Nuevos Commits: Basta con agregar la etiqueta
reintentar-julesal PR o ejecutar el workflow medianteworkflow_dispatch.
Misión de la Inteligencia Artificial y Requerimientos Semanales
La inteligencia artificial actuará como desarrollador móvil senior encargado de codificar, refactorizar y verificar cada componente técnico de la aplicación. Su responsabilidad consiste en cumplir rigurosamente los siguientes requerimientos técnicos organizados cronológicamente por semanas y estructurados en tres categorías fundamentales: Capa Visual y Experiencia de Usuario, Lógica de Negocio y Servicios de Arquitectura, y Persistencia, Infraestructura y Configuración. Debe marcar con una equis cada casilla completada de forma verificable en el código fuente.
Semana 1: Ecosistema Android y Configuración Base
Capa Visual y Experiencia de Usuario
- REQ-SEM01-VIS-01: Diseñar los primeros esquemas de interfaz para pantallas móviles considerando principios de usabilidad y diseño limpio.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM01-LOG-01: Establecer las directrices técnicas de optimización en el uso de CPU y memoria desde la concepción del software para garantizar un consumo responsable de recursos según el Objetivo de Desarrollo Sostenible 12.
Persistencia, Infraestructura y Configuración
- REQ-SEM01-INF-01: Configurar el proyecto inicial en Android Studio con soporte para Kotlin moderno y compatibilidad con dispositivos móviles Android.
- REQ-SEM01-INF-02: Configurar Gradle Kotlin DSL y estructurar el árbol de paquetes respetando la separación de responsabilidades del sistema.
Semana 2: Entorno de Desarrollo y Fundamentos Declarativos
Capa Visual y Experiencia de Usuario
- REQ-SEM02-VIS-01: Crear los primeros componentes composables con Jetpack Compose verificando su correcta renderización visual y previsualización.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM02-LOG-01: Implementar el punto de entrada de la interfaz mediante ComponentActivity y la invocación del método setContent.
Persistencia, Infraestructura y Configuración
- REQ-SEM02-INF-01: Configurar el catálogo de versiones centralizado mediante el archivo libs.versions.toml para dependencias y complementos.
- REQ-SEM02-INF-02: Habilitar las banderas de compilación para Jetpack Compose en el archivo build.gradle.kts del módulo principal.
Semana 3: Interfaz de Usuario con Material Design 3
Capa Visual y Experiencia de Usuario
- REQ-SEM03-VIS-01: Implementar el sistema de diseño Material Design 3 configurando esquemas de color dinámicos para modo claro y modo oscuro.
- REQ-SEM03-VIS-02: Diseñar la tipografía, formas y componentes visuales modulares como tarjetas, botones elevados y barras de navegación superior e inferior.
- REQ-SEM03-VIS-03: Implementar Compose Navigation mediante NavHost y composables para la navegación modular entre pantallas con paso de argumentos.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM03-LOG-01: Gestionar estados inmutables dentro de la interfaz gráfica mediante remember y mutableStateOf para evitar recomposiciones innecesarias.
Persistencia, Infraestructura y Configuración
- REQ-SEM03-INF-01: Configurar temas y estilos centralizados en el paquete de diseño de la aplicación para reutilización global en la interfaz.
Semana 4: Ciclo de Vida, Intents y Validaciones
Capa Visual y Experiencia de Usuario
- REQ-SEM04-VIS-01: Diseñar interfaces de formularios con validación visual reactiva mostrando mensajes de error dinámicos bajo campos de texto y control de habilitación de botones.
- REQ-SEM04-VIS-02: Aplicar directrices técnicas de accesibilidad móvil asegurando descripciones de contenido para lectores de pantalla y áreas táctiles mínimas reglamentarias.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM04-LOG-01: Administrar adecuadamente los eventos del ciclo de vida de componentes y actividades de Android para prevenir fugas de memoria.
- REQ-SEM04-LOG-02: Implementar Intents explícitos para navegación interna e Intents implícitos para interactuar con aplicaciones del sistema como cámara o navegador web.
- REQ-SEM04-LOG-03: Implementar validación lógica reactiva evaluando campos obligatorios, estructuras de correo electrónico, números y límites de caracteres.
Persistencia, Infraestructura y Configuración
- REQ-SEM04-INF-01: Declarar permisos básicos en el archivo AndroidManifest.xml y gestionar solicitudes dinámicas de permisos en tiempo de ejecución.
- REQ-SEM04-INF-02: Implementar medidas de eficiencia energética reduciendo la ejecución de tareas redundantes en segundo plano.
Semana 5: Persistencia Local con DataStore y Room
Capa Visual y Experiencia de Usuario
- REQ-SEM05-VIS-01: Construir pantallas de listado y formularios de captura vinculados a la visualización de datos almacenados localmente.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM05-LOG-01: Implementar interfaces Data Access Object con métodos para inserción, consulta, actualización y eliminación de registros.
- REQ-SEM05-LOG-02: Exponer consultas reactivas desde el Data Access Object utilizando flujos observables mediante el tipo Flow de corrutinas de Kotlin.
Persistencia, Infraestructura y Configuración
- REQ-SEM05-INF-01: Implementar Jetpack DataStore Preferences para la persistencia asíncrona de configuraciones y preferencias del usuario.
- REQ-SEM05-INF-02: Implementar la base de datos relacional local con Room ORM sobre el motor SQLite con entidades, llaves primarias autogeneradas e índices.
- REQ-SEM05-INF-03: Configurar migraciones de base de datos automáticas y controladas para prevenir la pérdida de datos ante cambios en las tablas.
Semana 6: Arquitectura MVVM y Evaluación T1
Capa Visual y Experiencia de Usuario
- REQ-SEM06-VIS-01: Vincular las pantallas de Jetpack Compose al estado inmutable expuesto por el ViewModel mediante collectAsStateWithLifecycle.
- REQ-SEM06-VIS-02: Renderizar de forma condicional vistas de carga, vistas de contenido, vistas de error con botón de reintento y vistas para datos vacíos.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM06-LOG-01: Implementar formalmente el patrón arquitectónico Model View ViewModel separando la interfaz de la lógica de negocio y del acceso a datos.
- REQ-SEM06-LOG-02: Implementar clases ViewModel que extiendan de Android ViewModel para retener estado ante cambios de configuración del dispositivo como giros de pantalla.
- REQ-SEM06-LOG-03: Implementar el patrón Repository como mediador y única fuente de verdad entre la capa de datos local y la interfaz.
- REQ-SEM06-LOG-04: Modelar el estado de la pantalla mediante clases selladas de Kotlin y exponerlo usando StateFlow y SharedFlow para eventos únicos.
Persistencia, Infraestructura y Configuración
- REQ-SEM06-INF-01: Ejecutar pruebas técnicas de verificación sobre la persistencia local en Room y la estabilidad del flujo MVVM para el hito evaluativo T1.
Semana 7: Fundamentos de Servicios Web y Contratos REST
Capa Visual y Experiencia de Usuario
- REQ-SEM07-VIS-01: Diseñar componentes visuales preparados para el consumo y despliegue de catálogos de datos remotos.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM07-LOG-01: Diseñar el contrato de la API REST especificando rutas de endpoints, métodos HTTP, cabeceras y estructuras de carga útil.
- REQ-SEM07-LOG-02: Definir clases de datos inmutables fuertemente tipadas para serialización y deserialización sin pérdida de precisión.
- REQ-SEM07-LOG-03: Aplicar políticas de consumo responsable de datos de red reduciendo campos innecesarios en las peticiones.
Persistencia, Infraestructura y Configuración
- REQ-SEM07-INF-01: Configurar biblioteca de serialización JSON como Kotlinx Serialization o Gson en el entorno de compilación.
Semana 8: Consumo de APIs REST con Retrofit y Corrutinas
Capa Visual y Experiencia de Usuario
- REQ-SEM08-VIS-01: Diseñar componentes visuales de retroalimentación de red con indicadores de progreso, barras de estado y avisos de pérdida de conectividad.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM08-LOG-01: Integrar el cliente HTTP Retrofit versión 2 configurado con el motor OkHttp para llamadas a servicios web.
- REQ-SEM08-LOG-02: Diseñar la interfaz de servicio de Retrofit con métodos GET, POST, PUT y DELETE vinculados a funciones de suspensión de corrutinas.
- REQ-SEM08-LOG-03: Ejecutar llamadas de red en segundo plano utilizando el despachador de entrada y salida Dispatchers.IO.
- REQ-SEM08-LOG-04: Implementar manejo estructurado de respuestas capturando códigos de éxito doscientos, errores de cliente cuatrocientos y errores de servidor quinientos.
Persistencia, Infraestructura y Configuración
- REQ-SEM08-INF-01: Implementar interceptores de OkHttp para registro controlado de peticiones, inyección de encabezados de autorización y tiempos de espera.
- REQ-SEM08-INF-02: Diseñar mecanismo de almacenamiento en caché local combinando Room y Retrofit para permitir lectura de datos esenciales sin conexión a internet.
Semana 9: Integración de la Suite Firebase
Capa Visual y Experiencia de Usuario
- REQ-SEM09-VIS-01: Construir pantallas de autenticación para inicio de sesión, registro de nuevos usuarios y recuperación de credenciales.
- REQ-SEM09-VIS-02: Diseñar selectores visuales de archivos e imágenes con barras de progreso de carga y descarga en la interfaz.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM09-LOG-01: Implementar Firebase Authentication para registro de cuentas, validación segura de accesos y persistencia de tokens de sesión.
- REQ-SEM09-LOG-02: Implementar Cloud Firestore para base de datos documental en tiempo real con sincronización bidireccional de colecciones y documentos.
- REQ-SEM09-LOG-03: Implementar Firebase Storage para la carga, resguardo y descarga segura de archivos binarios e imágenes del proyecto.
Persistencia, Infraestructura y Configuración
- REQ-SEM09-INF-01: Configurar el archivo google-services.json y los complementos de compilación de Firebase en el proyecto.
- REQ-SEM09-INF-02: Definir reglas de seguridad en Firebase para autenticación previa y restricción de lectura y escritura por identificador de usuario.
Semana 10: Geolocalización y Mapas con Evaluación T2
Capa Visual y Experiencia de Usuario
- REQ-SEM10-VIS-01: Renderizar mapas interactivos de Google Maps con marcadores personalizados, áreas circulares y ventanas de información en Compose.
- REQ-SEM10-VIS-02: Diseñar controles táctiles sobre el mapa para centrado de cámara, acercamiento y visualización de rutas sobre el terreno.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM10-LOG-01: Implementar el cliente FusedLocationProviderClient para obtener coordenadas de latitud y longitud del dispositivo en tiempo real con precisión equilibrada.
- REQ-SEM10-LOG-02: Solicitar y validar dinámicamente en tiempo de ejecución los permisos ACCESS_FINE_LOCATION y ACCESS_COARSE_LOCATION con explicaciones contextuales.
- REQ-SEM10-LOG-03: Implementar algoritmos de cálculo de distancias geográficas y trazado de trayectorias entre múltiples puntos.
Persistencia, Infraestructura y Configuración
- REQ-SEM10-INF-01: Configurar la clave de acceso de Google Maps SDK en local.properties y enlazarla de manera segura a través de BuildConfig.
- REQ-SEM10-INF-02: Consolidar la integración técnica de servicios web REST, Firebase y geolocalización para la entrega del hito evaluativo T2.
Semana 11: Integración de Módulos, Pruebas y Transición a Flutter
Capa Visual y Experiencia de Usuario
- REQ-SEM11-VIS-01: Integrar todas las vistas de la aplicación en una experiencia unificada con navegación fluida y sin bloqueos de la interfaz.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM11-LOG-01: Unificar la interacción entre almacenamiento Room, cliente Retrofit, base documental Firestore y geolocalización.
- REQ-SEM11-LOG-02: Prevenir fugas de memoria cancelando corrutinas activas y desuscribiendo flujos cuando los componentes visuales se destruyan.
- REQ-SEM11-LOG-03: Implementar políticas de compresión de imágenes antes de su transferencia hacia la red para reducir el consumo de datos y batería.
Persistencia, Infraestructura y Configuración
- REQ-SEM11-INF-01: Implementar registro controlado de errores y excepciones sin registrar información sensible del usuario.
- REQ-SEM11-INF-02: Configurar el entorno base del proyecto Flutter con lenguaje Dart y modo de seguridad de nulos estricto.
Semana 12: Desarrollo Multiplataforma con Widgets de Flutter
Capa Visual y Experiencia de Usuario
- REQ-SEM12-VIS-01: Construir interfaces declarativas modulares en Flutter combinando adecuadamente StatelessWidget y StatefulWidget.
- REQ-SEM12-VIS-02: Aplicar componentes y temas de Material Design en Flutter coherentes con los estilos definidos en la versión nativa.
- REQ-SEM12-VIS-03: Diseñar componentes personalizados reutilizables respetando el árbol de widgets y optimizando el redibujado de la pantalla.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM12-LOG-01: Implementar el sistema de navegación declarativa entre pantallas pasando parámetros fuertemente tipados en Flutter.
- REQ-SEM12-LOG-02: Administrar el ciclo de vida de los widgets mediante los métodos initState, didUpdateWidget y dispose.
Persistencia, Infraestructura y Configuración
- REQ-SEM12-INF-01: Configurar el archivo pubspec.yaml gestionando dependencias y activos visuales para el entorno Flutter.
Semana 13: Persistencia y Servicios Web en Flutter y Evaluación T3
Capa Visual y Experiencia de Usuario
- REQ-SEM13-VIS-01: Implementar vistas asíncronas con widgets FutureBuilder o StreamBuilder para reflejar estados de carga, datos obtenidos o errores de conexión.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM13-LOG-01: Consumir servicios web REST externos utilizando el paquete http de Dart decodificando respuestas JSON y gestionando excepciones.
- REQ-SEM13-LOG-02: Implementar la lógica de manipulación de registros locales con métodos de inserción, actualización, consulta y borrado en Dart.
Persistencia, Infraestructura y Configuración
- REQ-SEM13-INF-01: Implementar persistencia de datos local en Flutter utilizando la biblioteca sqflite con sentencias relacionales estructuradas sobre SQLite.
- REQ-SEM13-INF-02: Preparar la evidencia técnica del producto funcional integrado al cien por ciento para la entrega de práctica de campo y evaluación T3.
Semana 14: Preparación para Distribución y Empaquetado
Capa Visual y Experiencia de Usuario
- REQ-SEM14-VIS-01: Configurar el icono adaptable de la aplicación con capas independientes de fondo y primer plano cumpliendo normativas de diseño de tiendas.
- REQ-SEM14-VIS-02: Preparar capturas de pantalla de la interfaz gráfica optimizadas para teléfonos y tabletas requeridas por la plataforma de distribución.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM14-LOG-01: Configurar el esquema de versionamiento semántico con versionCode incremental y versionName descriptivo en los archivos de compilación.
Persistencia, Infraestructura y Configuración
- REQ-SEM14-INF-01: Generar y custodiar el almacén de llaves criptográficas keystore para la firma digital de la versión de producción.
- REQ-SEM14-INF-02: Configurar el bloque signingConfigs en Gradle para aplicar la firma digital automatizada en la variante de compilación release.
- REQ-SEM14-INF-03: Habilitar optimización de código, reducción de recursos y ofuscación mediante R8 y reglas de ProGuard.
- REQ-SEM14-INF-04: Generar el archivo binario Android App Bundle con extensión aab mediante la tarea bundleRelease de Gradle.
Semana 15: Publicación Controlada y Monitoreo
Capa Visual y Experiencia de Usuario
- REQ-SEM15-VIS-01: Diseñar pantallas y cuadros de diálogo de consentimiento informado sobre términos de uso y políticas de privacidad dentro de la aplicación.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM15-LOG-01: Implementar mecanismos de telemetría y captura de registros de fallos para la mejora continua del sistema en producción.
Persistencia, Infraestructura y Configuración
- REQ-SEM15-INF-01: Configurar la consola Google Play Console estructurando la ficha de tienda y cumpliendo los cuestionarios de contenido y privacidad.
- REQ-SEM15-INF-02: Crear el lanzamiento en la pista de pruebas internas o cerradas con usuarios evaluadores designados.
- REQ-SEM15-INF-03: Redactar notas de versión técnicas y descriptivas que acompañen el despliegue del paquete aab.
Semana 16: Evaluación Final y Sustentación Técnica
Capa Visual y Experiencia de Usuario
- REQ-SEM16-VIS-01: Verificar la fluidez de las animaciones, transiciones de pantalla y respuesta táctil en tiempo real en dispositivos físicos.
Lógica de Negocio y Servicios de Arquitectura
- REQ-SEM16-LOG-01: Ejecutar una auditoría exhaustiva del código fuente verificando limpieza, tipado estricto, resiliencia ante errores y cumplimiento de patrones de diseño.
- REQ-SEM16-LOG-02: Demostrar en vivo el funcionamiento integrado de persistencia local, consumo de servicios web REST, Firebase, geolocalización y módulos Flutter.
Persistencia, Infraestructura y Configuración
- REQ-SEM16-INF-01: Confirmar el cumplimiento del cien por ciento de las casillas técnicas del presente documento para la defensa y sustentación de la Evaluación Final.
