Product Backlog - ISPC-WEB-2025/TodoStock-AppMovil GitHub Wiki

Product Backlog: Historias de Usuario (#US) y Tareas Técnicas (#TK)

📋 Resumen de Estimación General

  • Total Story Points (SP) Acumulados: 142 SP (Sprint 0: 5 SP | Sprint 1: 31 SP | Sprint 2: 106 SP)
  • Modelo de Branching: feature/[Nombre]-TK[Número]
  • Roles del Sistema: SuperAdministrador (Control total) / Administrador (Gestión operativa y productos) / Empleado (Consulta de stock y traslados)
  • Roadmap Interactivo (GitHub Pages): https://ispc-web-2025.github.io/TodoStock-Mobile-RoadMap/ (Username: CodeLab | Password: RoadMap-2026-Mobile)

🔐 Módulo 01: Autenticación, Sesiones y Navegación

#US01: Autenticación Segura y JWT (#55 / #31)

  • Responsables: Miguel Flores / Aylén Bartolino Luna
  • Prioridad: Alta | SP: 13 (Sprint 1: 5 SP | Sprint 2: 8 SP)

📖 Historia

Como usuario quiero iniciar sesión y acceder a un menú principal para navegar hacia el resto de la aplicación de acuerdo con mi rol asignado.

✅ Criterios de Aceptación

  1. Existe una pantalla de Login con validación de campos e inyección de token JWT (POST /api/usuarios/login/).
  2. Navegación fluida hacia MenuPrincipalActivity tras la autenticación exitosa.
  3. Cierre de sesión seguro con limpieza de tokens en SesionManager.
  4. Menú principal vertical accesible (#TK114 - PR #275) adaptado dinámicamente según el rol (is_superuser, es_admin, es_empleado).

🥒 Escenarios Gherkin

  • Escenario 1 (Login Exitoso con JWT):
    Dado que un usuario ingresa correo y contraseña válidos en LoginActivity,
    Cuando presiona "Ingresar",
    Entonces la API retorna HTTP 200 con tokens access y refresh, SesionManager los almacena encriptados y navega a MenuPrincipalActivity.
  • Escenario 2 (Intento de Login con Cuenta Pendiente):
    Dado que un usuario no aprobado intenta ingresar,
    Cuando presiona "Ingresar",
    Entonces la API responde HTTP 403 y la app muestra "Esta cuenta aún no ha sido aprobada por un Administrador".

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK01 Layout activity_login.xml con validaciones de campos 2 Sprint 1 feature/miguel_flores-TK01
#TK02 Layout activity_menu_principal.xml 2 Sprint 1 feature/miguel_flores-TK02
#TK03 Navegación por Intent desde Login hacia Menú 1 Sprint 1 feature/miguel_flores-TK03
#TK04 Contratos de Intent con extra rol_usuario 2 Sprint 1 feature/miguel_flores-TK04
#TK05 Retrofit: login contra API y guardado JWT 2 Sprint 2 feature/aylen_bartolino_luna-TK05-TK06
#TK06 AuthInterceptor HTTP para inyectar cabecera Bearer 1 Sprint 2 feature/aylen_bartolino_luna-TK05-TK06
#TK07 Botón "Cerrar sesión" con invalidación local 1 Sprint 2 feature/miguel_flores-TK48
#TK90 Configuración base de la app (ApiClient) 2 Sprint 2 feature/aylen_bartolino_luna-TK90
#TK91 SplashActivity: verificar sesión previa 1 Sprint 2 feature/aylen_bartolino_luna-TK90
#TK92 Corregir defecto visual de errores en Login (TC-L-01) 1 Sprint 2 feature/miguel_flores-revision-backlog
#TK112 AuthRepository + LoginViewModel para arquitectura 2 Sprint 2 feature/aylen_bartolino_luna-TK112
#TK114 Reorganización de Menú Principal vertical accesible 1 Sprint 2 feature/miguel_flores-TK114 (PR #275)

🏢 Módulo 02: Gestión de Sucursales

#US02: Selección e Integración de Sucursales (#56 / #32)

  • Responsable: Candelaria Barjollo
  • Prioridad: Alta | SP: 7 (Sprint 1: 5 SP | Sprint 2: 2 SP)

📖 Historia

Como usuario quiero elegir la sucursal con la que voy a trabajar para que las demás pantallas filtren la información según la sede seleccionada.

✅ Criterios de Aceptación

  1. Se muestra la lista dinámica de sucursales activas obtenida desde la API REST (GET /api/inventario/sucursales/).
  2. Al seleccionar una sucursal, su sucursal_id se propaga por Intent hacia GestionStockActivity y MovimientosActivity.

🥒 Escenarios Gherkin

  • Escenario 1 (Selección Efectiva de Sucursal):
    Dado que el usuario abre SeleccionSucursalActivity,
    Cuando selecciona una sucursal de la lista,
    Entonces el ID se almacena en SesionManager y se transmite a las pantallas dependientes.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK08 Paleta colors.xml y recursos visuales base 1 Sprint 1 feature/candelaria_barjollo-TK08
#TK09 Layout activity_seleccion_sucursal.xml 2 Sprint 1 feature/candelaria_barjollo-TK09
#TK10 Adapter con datos de sucursales (SucursalAdapter) 1 Sprint 1 feature/candelaria_barjollo-TK10
#TK11 Intent con sucursal_id hacia pantallas dependientes 1 Sprint 1 feature/candelaria_barjollo-TK11
#TK12 Conexión con GET /api/inventario/sucursales/ (SucursalDto) 2 Sprint 2 feature/candelaria_barjollo-TK12 (PR #185)

📦 Módulo 03: Inventario y Stock

#US03: Consulta de Stock y Alertas Visuales (#57 / #33)

  • Responsable: Virginia García
  • Prioridad: Alta | SP: 10 (Sprint 1: 5 SP | Sprint 2: 5 SP)

📖 Historia

Como Administrador o Empleado quiero ver la lista de productos con su cantidad de stock real en la sucursal elegida para conocer las existencias.

✅ Criterios de Aceptación

  1. GestionStockActivity recibe la sucursal elegida y consulta GET /api/inventario/productos/{id}/stock/.
  2. Los productos por debajo del umbral mínimo se destacan con un resalte visual rojo en StockAdapter.

🥒 Escenarios Gherkin

  • Escenario 1 (Resalte Visual de Stock Crítico):
    Dado que existen productos con cantidad menor al umbral mínimo,
    Cuando se renderizan las tarjetas en el RecyclerView,
    Entonces la cantidad se resalta en color rojo advirtiendo la necesidad de reposición.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK13 Layouts activity_gestion_stock.xml e item_stock.xml 2 Sprint 1 feature/virginia_garcia-TK13
#TK14 RecyclerView Adapter (StockAdapter) con tarjetas 2 Sprint 1 feature/virginia_garcia-TK14-TK15
#TK15 Recepción de sucursal_id por Intent y filtrado 1 Sprint 1 feature/virginia_garcia-TK14-TK15
#TK16 Conectar con GET /api/inventario/productos/{id}/stock/ 3 Sprint 2 feature/virginia_garcia-TK16 (PR #216, #220)
#TK17 Alerta visual de stock bajo umbral en StockAdapter 2 Sprint 2 feature/virginia_garcia-TK16 (PR #216, #220)

✉️ Módulo 04: Contacto y Soporte

#US04: Formulario de Contacto y Soporte Institucional (#58)

  • Responsable: Pedro González
  • Prioridad: Media | SP: 5 (Sprint 1: 3 SP | Sprint 2: 2 SP)

📖 Historia

Como usuario quiero ver una pantalla de contacto para comunicarme con soporte técnico si experimento problemas.

✅ Criterios de Aceptación

  1. Formulario ContactoActivity accesible desde el Menú Principal para todos los roles.
  2. Envío de consultas a la API (POST /api/contacto/) con confirmación visual Toast.

🥒 Escenarios Gherkin

  • Escenario 1 (Envío Exitoso de Incidencia):
    Dado que un usuario completa Nombre, Correo y Mensaje en ContactoActivity,
    Cuando presiona "Enviar",
    Entonces la API procesa la solicitud y muestra "Mensaje enviado con éxito".

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK18 Layout activity_contacto.xml 2 Sprint 1 feature/pedro_gonzalez-TK18
#TK19 Lógica de envío en ContactoActivity con Toast 1 Sprint 1 feature/pedro_gonzalez-TK19
#TK20 Selector de sucursal del formulario de contacto 1 Sprint 2 feature/pedro_gonzalez-TK42
#TK42 Endpoint de contacto y envío real (ContactoApiService) 1 Sprint 2 feature/pedro_gonzalez-TK42 (PR #192)

📝 Módulo 05: Alta de Productos

#US05: Carga de Productos en Catálogo (#59 / #35)

  • Responsable: Pedro González
  • Prioridad: Alta | SP: 7 (Sprint 1: 3 SP | Sprint 2: 4 SP)

📖 Historia

Como Administrador quiero cargar un nuevo producto para que esté disponible en el catálogo de ventas e inventario.

✅ Criterios de Aceptación

  1. Formulario CargaProductoActivity con selección de categoría desde desplegable dinámico (GET /api/inventario/categorias/ - #TK23).
  2. Alta realizada mediante POST /api/inventario/productos/ restringido únicamente al rol Administrador.

🥒 Escenarios Gherkin

  • Escenario 1 (Alta Exitosa con Categoría):
    Dado que un Administrador completa los datos y selecciona una categoría válida,
    Cuando presiona "Guardar Producto",
    Entonces la API crea el registro y se añade al catálogo.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK21 Layout activity_carga_producto.xml 2 Sprint 1 feature/pedro_gonzalez-TK21
#TK22 Validación visual de campos obligatorios vacíos 1 Sprint 1 feature/pedro_gonzalez-TK22
#TK23 Conexión con POST /api/inventario/productos/ (Categorías - PR #287) 2 Sprint 2 feature/pedro_gonzalez-TK93
#TK93 Corregir defecto visual de errores en Carga de Producto 2 Sprint 2 feature/pedro_gonzalez-TK93 (PR #197)

🔄 Módulo 06: Movimientos de Stock

#US06: Movimientos Atómicos entre Sucursales (#60 / #34)

  • Responsable: Aylén Bartolino Luna
  • Prioridad: Alta | SP: 7 (Sprint 1: 4 SP | Sprint 2: 3 SP)

📖 Historia

Como Empleado o Administrador quiero registrar un movimiento de stock entre dos sucursales para actualizar las existencias en ambas.

✅ Criterios de Aceptación

  1. Formulario MovimientosActivity con selectores de sucursal origen, destino, producto y cantidad.
  2. Transferencia atómica registrada vía POST /api/inventario/movimientos/ (descuento en origen e incremento en destino).
  3. Bloqueo si origen = destino o si cantidad <= 0.
  4. Pantalla puente MenuMovimientosActivity (#TK113 - PR #276) organizando los tipos de movimientos.

🥒 Escenarios Gherkin

  • Escenario 1 (Traslado Atómico Exitoso):
    Dado que el usuario selecciona origen "Centro", destino "Norte", producto y cantidad 5,
    Cuando presiona "Confirmar Traslado",
    Entonces la API procesa la operación dual de forma atómica y confirma el cambio.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK24 Layout activity_movimientos.xml 2 Sprint 1 feature/aylen_bartolino_luna-TK24
#TK25 Spinners de origen y destino con datos reales 1 Sprint 1 feature/aylen_bartolino_luna-TK25
#TK26 Validaciones locales (origen ≠ destino, cantidad > 0) 1 Sprint 1 feature/aylen_bartolino_luna-TK26
#TK27 Conexión con API atómica (MovimientoRequest) 3 Sprint 2 feature/aylen_bartolino_luna-TK27 (PR #185)
#TK113 Pantalla intermedia Hub de Movimientos de Stock 2 Sprint 2 feature/miguel_flores-TK113 (PR #276)

👤 Módulo 07: Registro de Usuarios

#US07: Registro de Nuevos Usuarios (#61)

  • Responsable: Aylén Bartolino Luna
  • Prioridad: Alta | SP: 6 (Sprint 2: 6 SP)

📖 Historia

Como visitante quiero registrarme con mis datos personales (Nombre, Email, DNI, Fecha de Nacimiento y Contraseña) para solicitar mi cuenta en la aplicación.

✅ Criterios de Aceptación

  1. Con datos válidos (DNI formato numérico, email válido, edad mayor a 18 años, contraseña fuerte de mínimo 9 caracteres con letras, números y especial) y términos aceptados, se crea la cuenta en estado pendiente (is_active = false) y redirige a Login con aviso.
  2. La cuenta pendiente no tiene rol asignado y no puede iniciar sesión hasta que un Administrador la apruebe e inscriba su rol.
  3. Si el email o DNI ya existen, el sistema rechaza la solicitud mostrando error HTTP 409 Conflict sin duplicar usuarios.
  4. Si la contraseña no cumple la política de fortaleza, se rechaza indicando los requisitos faltantes.
  5. Los Términos y Condiciones pueden leerse desde la pantalla de Registro; si no se acepta la casilla, el botón "Registrarme" no envía datos.

🥒 Escenarios Gherkin

  • Escenario 1 (Registro Exitoso Mayor de Edad):
    Dado que un visitante ingresa Nombre, Email único, DNI válido, Fecha de Nacimiento con edad >= 18 años, contraseña robusta y marca la casilla de términos,
    Cuando presiona "Registrarme",
    Entonces la API crea la cuenta en estado pendiente, muestra un Toast de confirmación y redirige a LoginActivity.
  • Escenario 2 (Intento de Registro Menor de Edad):
    Dado que un usuario ingresa una fecha de nacimiento correspondiente a una edad menor a 18 años,
    Cuando presiona "Registrarme",
    Entonces la app bloquea el envío, resalta el campo de fecha en rojo y muestra "Debes ser mayor de 18 años para registrarte".
  • Escenario 3 (Términos no aceptados):
    Dado que un usuario completa todos sus datos pero no marca la casilla de aceptación de términos,
    Cuando presiona "Registrarme",
    Entonces la solicitud no se envía a la API y se marca la casilla con mensaje de error obligatorio.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK34 RegistroActivity: layout, máscara de fecha, validación +18 y API 4 Sprint 2 feature/aylen_bartolino_luna-TK34-TK47 (PR #173, #174, #223)
#TK35 Verificación de contrato POST /api/usuarios/registro/ en Postman 1 Sprint 2 feature/aylen_bartolino_luna-TK34-mensajes
#TK47 Política de contraseñas robustas en cliente (Validadores.java) y servidor 1 Sprint 2 feature/aylen_bartolino_luna-TK34-mensajes

👑 Módulo 08: Administración de Usuarios y Jerarquía de Roles

#US08: Control y Gestión de Usuarios por Administrador y SuperAdmin (#62)

  • Responsables: Miguel Flores / Candelaria Barjollo / Pedro González
  • Prioridad: Alta | SP: 7 (Sprint 2: 7 SP)

📖 Historia

Como Administrador quiero cargar, aprobar, listar, editar y dar de baja usuarios para controlar quién accede a la plataforma y con qué nivel de permisos.

✅ Criterios de Aceptación

  1. Visualización: Un Administrador logueado ve la lista completa de usuarios con nombre, email, rol e insignias Activo/Inactivo en UsuariosActivosFragment.
  2. Blindaje Jerárquico (ADR-0008):
    • SuperAdmin (is_superuser=True): Control total; aprueba, edita y da de baja a cualquier Administrador o Empleado. La cuenta raíz no se puede desactivar ni degradar.
    • Administrador Estándar (rol=ADMINISTRADOR): Solo administra cuentas de rol EMPLEADO. Acciones sobre otros Administradores o SuperAdmin se bloquean en UI y la API responde HTTP 403 Forbidden.
  3. Aprobación de Pendientes (TK109): CargarUsuarioFragment lista solicitudes pendientes (is_active = false). Al aprobar, es obligatorio asignar rol (EMPLEADO o ADMINISTRADOR).
  4. Modificación y Baja (TK37): Diálogo modal dialog_editar_usuario.xml para actualizar datos o procesar baja lógica (is_active = false).

🥒 Escenarios Gherkin

  • Escenario 1 (Aprobación de Solicitud Pendiente por Admin):
    Dado que un Administrador accede a solicitudes pendientes en CargarUsuarioFragment,
    Cuando selecciona una cuenta, asigna el rol EMPLEADO y confirma la aprobación,
    Entonces la API actualiza is_active = true, guarda el rol y la cuenta queda habilitada para iniciar sesión.
  • Escenario 2 (Intento de Modificación de Administrador por Admin Estándar):
    Dado que un Administrador Estándar intenta modificar el rol de otro Administrador o SuperAdmin,
    Cuando presiona "Editar",
    Entonces la interfaz deshabilita la opción y cualquier petición forzada a la API retorna HTTP 403 Forbidden.
  • Escenario 3 (Baja Lógica de Usuario):
    Dado que un Administrador abre el diálogo modal de edición sobre un Empleado y presiona "Dar de baja",
    Cuando confirma la acción,
    Entonces el servidor ejecuta is_active = false, inscribe el evento en LogAuditoria y el usuario ya no puede iniciar sesión.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK36 API de usuarios (listar, editar, baja) restringido por jerarquía (ADR-0008) 2 Sprint 2 Backend API
#TK37 UsuariosActivosFragment: listado, edición de rol y baja con diálogo modal 2 Sprint 2 feature/pedro_gonzalez-TK37 (PR #300)
#TK48 Autorización por perfiles y menú dinámico según is_superuser/es_empleado 2 Sprint 2 feature/miguel_flores-TK48 (PR #160)
#TK109 CargarUsuarioFragment: revisión y aprobación obligatoria con rol 1 Sprint 2 Backend / App (PR #290)

✏️ Módulo 09: Edición y Borrado de Productos

#US09: Edición y Eliminación de Productos en Catálogo (#63)

  • Responsable: Virginia García / Pedro González
  • Prioridad: Media | SP: 4 (Sprint 2: 4 SP)

📖 Historia

Como Administrador quiero consultar, editar y eliminar productos para mantener el catálogo actualizado sin datos obsoletos.

✅ Criterios de Aceptación

  1. Catálogo completo de productos accesible con barra de búsqueda en tiempo real.
  2. Al seleccionar "Editar" sobre un artículo, CargaProductoActivity se abre en modo edición precargando Nombre, Descripción, Categoría y Precio via EXTRA_ID_PRODUCTO y guardando cambios via PATCH /api/inventario/productos/{id}/.
  3. Si se ingresa un código SKU que ya pertenece a otro producto, la API rechaza la actualización con error HTTP 400.
  4. Al confirmar la eliminación, el producto se inhabilita lógicamente (activo = False - ADR-0010), dejando de aparecer en búsquedas y nuevos movimientos de stock.

🥒 Escenarios Gherkin

  • Escenario 1 (Edición Exitosa de Producto):
    Dado que un Administrador modifica el precio y la categoría de un producto precargado en CargaProductoActivity,
    Cuando presiona "Guardar Cambios",
    Entonces la API ejecuta PATCH, actualiza la base de datos y la lista de stock refleja los nuevos valores.
  • Escenario 2 (Eliminación / Baja Lógica):
    Dado que un Administrador pulsa el botón de eliminación sobre un producto en catálogo y confirma en el diálogo,
    Cuando se envía la solicitud,
    Entonces el servidor establece activo = False (ADR-0010) y el artículo deja de estar disponible para movimientos.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK38 API de productos: edición parcial PATCH y baja lógica (activo = False - ADR-0010) 2 Sprint 2 Backend API
#TK39 Listado de productos con búsqueda, edición dual (CargaProductoActivity) y baja lógica 2 Sprint 2 feature/virginia_garcia-TK39 (PR #296)

🎨 Módulo 10: Ayuda y Adaptabilidad

#US10 & #RNF-UX: Ayuda, Instructivo Visual y Adaptabilidad (#64 / #65)

  • Responsables: Virginia García / Miguel Flores
  • Prioridad: Media | SP: 4 (Sprint 2: 4 SP)

📖 Historia

Como usuario quiero ver una pantalla de ayuda con un instructivo y reproductor de video tutorial, e interfaz adaptable para aprender a usar la app en cualquier orientación y dispositivo.

✅ Criterios de Aceptación

  1. Desde el Menú Principal se abre AyudaActivity con accesos a "Cómo usar TodoStock", "Términos" e "Información de la App".
  2. ComoUsarActivity reproduce el video tutorial (como_usar_todostock.mp4) mediante VideoView y MediaController, centrado sin barras negras.
  3. Al rotar el dispositivo a posición Apaisada (Landscape) o en Tablet, la Activity preserva la posición exacta del video y el estado del formulario sin perder datos (onSaveInstanceState - #TK41).
  4. InfoAppActivity muestra dinámicamente la versión compilada leyendo BuildConfig.VERSION_NAME.
  5. Todos los controles multimedia e íconos poseen etiquetas contentDescription para TalkBack.

🥒 Escenarios Gherkin

  • Escenario 1 (Reproducción de Video Tutorial al Rotar):
    Dado que un usuario está reproduciendo el video tutorial en ComoUsarActivity en el segundo 15,
    Cuando rota la pantalla de posición Vertical a Apaisada (Landscape),
    Entonces la Activity se recrea, ajusta el video sin barras negras y continúa reproduciendo desde el segundo 15 sin reiniciar.
  • Escenario 2 (Consulta de Versión en InfoApp):
    Dado que un usuario abre InfoAppActivity,
    Cuando se renderiza la pantalla,
    Entonces el texto de versión se pobla automáticamente desde BuildConfig.VERSION_NAME.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK40 AyudaActivity, ComoUsarActivity (video adaptativo) e InfoAppActivity (BuildConfig) 2 Sprint 2 feature/virginia_garcia-TK40 (PR #301)
#TK41 Adaptabilidad apaisada/tablet en 11 layouts XML con ScrollView y onSaveInstanceState 2 Sprint 2 feature/miguel_flores-TK41 (PR #294)

⚖️ Módulo 11: Legislación, Privacidad y Arrepentimiento

#US11: Cumplimiento Normativo y Botón de Arrepentimiento (#67)

  • Responsable: Aylén Bartolino Luna / Octavio Arnaudo
  • Prioridad: Media | SP: 5 (Sprint 2: 5 SP)

📖 Historia

Como usuario quiero conocer y controlar el uso de mis datos personales para ejercer mis derechos de privacidad y arrepentimiento bajo la Ley 25.326.

✅ Criterios de Aceptación

  1. TerminosActivity permite leer las políticas de privacidad y protección de datos personales antes y después del registro.
  2. Al registrarse, el sistema almacena la fecha y versión de aceptación de términos junto a la cuenta.
  3. El Menú Principal cuenta con la opción "Darme de baja" (BajaDeCuenta): al confirmar, la cuenta se desactiva (is_active = false), se revocan los tokens JWT y se inscribe el evento en LogAuditoria (ADR-0009).
  4. Un usuario dado de baja no puede volver a iniciar sesión (la API responde HTTP 403 "Esta cuenta no está activa").

🥒 Escenarios Gherkin

  • Escenario 1 (Solicitud de Baja Voluntaria de Cuenta):
    Dado que un usuario autenticado selecciona "Darme de baja" desde el menú y confirma en el diálogo,
    Cuando se envía la petición POST /api/usuarios/desactivar/,
    Entonces el servidor desactiva la cuenta, destruye la sesión en SesionManager, redirige a LoginActivity e inscribe la baja en LogAuditoria.
  • Escenario 2 (Intento de Reingreso de Cuenta Desactivada):
    Dado que un usuario dada de baja intenta iniciar sesión con sus credenciales anteriores,
    Cuando presiona "Ingresar",
    Entonces el servidor responde HTTP 403 y la app muestra "Esta cuenta no está activa".

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK52 Legislación en la app: TerminosActivity y opción 'Darme de baja' (BajaDeCuenta) 3 Sprint 2 feature/aylen_bartolino_luna-TK52 (PR #180, #195)
#TK105 Sección de legislación en la Wiki y verificación de cumplimiento normativo (Ley 25.326) 2 Sprint 2 feature/octavio_arnaudo-TK105 (PR #217)

👤 Módulo 12: Perfil Propio de Usuario

#US12: Ver y Editar Perfil Propio (#70)

  • Responsable: Candelaria Barjollo
  • Prioridad: Alta | SP: 4 (Sprint 2: 4 SP)

📖 Historia

Como usuario (Administrador o Empleado) quiero ver y modificar mis datos personales para mantener mi perfil actualizado.

✅ Criterios de Aceptación

  1. PerfilActivity muestra el Nombre, Email, DNI, Fecha de Nacimiento y Rol asignado del usuario logueado.
  2. EditarPerfilActivity permite modificar Nombre, Email y DNI enviando una solicitud PATCH /api/usuarios/me/.
  3. Al confirmar la edición, los cambios persisten en el servidor y se actualizan automáticamente en SesionManager.

🥒 Escenarios Gherkin

  • Escenario 1 (Modificación Exitosa de Datos de Perfil):
    Dado que un usuario modifica su Nombre o DNI en EditarPerfilActivity,
    Cuando presiona "Guardar Cambios",
    Entonces la API ejecuta PATCH /api/usuarios/me/, retorna HTTP 200 OK, actualiza la sesión local y refleja los nuevos datos en PerfilActivity.

🛠️ Tareas Técnicas

Tarea Descripción SP Sprint Rama
#TK94 PerfilApiService y DTOs (PerfilResponse, PerfilUpdateRequest) 2 Sprint 2 feature/candelaria_barjollo-TK94-TK95 (PR #180)
#TK95 PerfilActivity y EditarPerfilActivity: ver y modificar mis datos 2 Sprint 2 feature/candelaria_barjollo-TK94-TK95 (PR #180)

🛡️ Módulo 13: Hardening de Ciberseguridad

#RNF-SEG: Seguridad, Protección de Sesiones y Auditoría (#68)

  • Responsables: Aylén Bartolino Luna / Pedro González
  • Prioridad: Alta | SP: 14 (Sprint 2: 14 SP)
Tarea Descripción SP Sprint Rama
#TK45 Secreción de credenciales, eliminación de claves hardcodeadas y uso de .env 1 Sprint 2 Config / .env
#TK46 Configuración de CORS, ALLOWED_HOSTS y límite de intentos de login 1 Sprint 2 Backend Settings
#TK49 Control de sesiones: access token corto, refresh token con rotación en SesionManager 2 Sprint 2 SesionManager.java
#TK50 TLS: redirección HTTPS y network_security_config en Android 1 Sprint 2 network_security_config.xml
#TK51 Auditoría de seguridad: registro de eventos en la tabla LogAuditoria 2 Sprint 2 LogAuditoria
#TK53 Sistema de Gestión de Riesgos y revisión del plan de seguridad 1 Sprint 2 Ciberseguridad
#TK54 Video corto sobre arquitectura JWT, autenticación y autorización 1 Sprint 2 Video Demo
#TK55..59 Casos de prueba de seguridad (TC-SEG-01 al TC-SEG-05, TC-SEG-06) 5 Sprint 2 Planilla Pruebas

🧪 Módulo 14: Pruebas Automatizadas y Accesibilidad

#ENABLER-QA: Suite de Testing Unitario, Integración y Accesibilidad

  • Responsables: Aylén Bartolino Luna / Equipo
  • Prioridad: Alta | SP: 21 (Sprint 2: 21 SP)
Tarea Descripción SP Sprint Rama
#TK60 [AUT-UNIT-01] Tests unitarios de validadores en ValidadoresTest.java (patrón AAA) 3 Sprint 2 feature/aylen_bartolino_luna-TK60, TK60-AAA (PR #213, #226)
#TK61 [AUT-UNIT-02] Tests unitarios de stock bajo y mappers en StockItemTest.java 2 Sprint 2 feature/virginia_garcia-TK61 (PR #277)
#TK62 [AUT-UNIT-03] Tests unitarios de LoginViewModel y repositorio simulado (LoginViewModelTest.java) 2 Sprint 2 feature/pedro_gonzalez-TK62 (PR #293)
#TK64 [AUT-NET-01] Tests de integración de red con MockWebServer (ParseoRespuestasTest.java) 2 Sprint 2 test/candelaria_barjollo-TK64 (PR #292)
#TK65 [AUT-NET-02] Tests de integración de red con MockWebServer simulando errores HTTP 500 (AuthRepositoryTest.java) 2 Sprint 2 test/candelaria_barjollo-TK65 (PR #295, PR #297)
#TK70 [AUT-UI-01] Pruebas de UI automatizadas con Espresso (LoginFlujoTest.java) y Page Objects 2 Sprint 2 feature/miguel_flores-TK70 (PR #299)
#TK68 [AUT-API-02] Suite Postman de integración de catálogo e infraestructura PostmanConfig.java 2 Sprint 2 feature/miguel_flores-TK68 (PR #298)
#TK80..89 Plan de Pruebas, ejecución de casos de prueba y planilla de trazabilidad 10 Sprint 2 Testing-y-Calidad
#TK96 Informe de Accesibilidad y auditoría visual de la app 1 Sprint 2 Accesibilidad
#TK110 Casos de prueba de API y reporte de bugs del endpoint de registro 1 Sprint 2 Reporte Bugs

📚 Módulo 15: Documentación, Proceso y Gestión

#MGMT / #RELEASE: Gestión Ágil, Wiki, Release y Entregables

  • Responsables: Octavio Arnaudo / Miguel Flores / Aylén Bartolino Luna
  • Prioridad: Alta | SP: 23 (Sprint 0: 3 SP | Sprint 1: 5 SP | Sprint 2: 15 SP)
Tarea Descripción SP Sprint Rama
#TK28 Setup del repo, estrategia GitFlow, Kanban y Wiki 2 Sprint 0 main / develop
#TK29 Vincular documentación IEEE830 desde la Wiki del proyecto 1 Sprint 0 feature/octavio_arnaudo-TK29
#TK30 Consolidar plan de pruebas y los 12 test cases en la Wiki 2 Sprint 1 feature/octavio_arnaudo-TK30
#TK31 Redactar borrador del plan de ciberseguridad y arquitectura JWT 2 Sprint 1 feature/octavio_arnaudo-TK30
#TK32 Cargar Anexo II del IEEE830 con capturas de pantalla de la app 1 Sprint 1 feature/octavio_arnaudo-TK30
#TK33 GitHub Action para notificaciones de merges a develop 1 Sprint 1 feature/miguel_flores-TK33
#TK43 Deploy del backend en Alwaysdata y baseUrl de release 1 Sprint 2 Backend Deployment
#TK44 APK release en main e instrucciones de instalación 1 Sprint 2 Release APK
#TK97 Grabar y editar el video demo grupal (máx. 3 minutos) 2 Sprint 2 Video Demo
#TK98 Milestone Sprint 2, etiquetas e Issues en GitHub 2 Sprint 2 GitHub Milestones
#TK99 Gestión de reporte y seguimiento de bugs 1 Sprint 2 GitHub Issues
#TK100 Registro de las 4 ceremonias del Sprint 2 en la Wiki 2 Sprint 2 feature/octavio_arnaudo_TK106
#TK101 IEEE830 actualizado con los requerimientos del Sprint 2 1 Sprint 2 feature/octavio_arnaudo_TK106
#TK102 Diagrama de navegabilidad y Anexo II con capturas nuevas 2 Sprint 2 feature/octavio_arnaudo_TK106
#TK103 Wiki: avances individuales, de equipo y enlaces externos 1 Sprint 2 Wiki Home
#TK104 Product Backlog de la Wiki alineado con el backlog general 1 Sprint 2 Product-Backlog
#TK106 README del repositorio actualizado 1 Sprint 2 feature/octavio_arnaudo_TK106
#TK107 Guion y coordinación del video demo grupal 1 Sprint 2 Guion
#TK108 Commit en main con el backlog y plantillas de Issues/PR 1 Sprint 2 Repositorio
#TK111 Guía de Aclaraciones para Evaluación Docente 1 Sprint 2 GUÍA-DOCENTE
#TK113 Pantallas intermedias Hub de Stock (MenuStockActivity) y Movimientos (MenuMovimientosActivity) 2 Sprint 2 feature/miguel_flores-TK113 (PR #276)
#TK114 Reorganización del Menú Principal con distribución vertical limpia y sin numeración 1 Sprint 2 feature/miguel_flores-TK114 (PR #275)

📊 16. Métricas Ágiles, Velocidad de Sprint y Trazabilidad Completa de Issues/PRs

📈 16.1 Resumen de Velocidad de Desarrollo y Puntos de Historia (SP)

  • Sprint 0 (Setup & Arquitectura Base): 5 SP (100% completado).
  • Sprint 1 (Layouts, Navegación e Inyección Mock): 31 SP (100% completado).
  • Sprint 2 (Integración API REST, JWT, Perfiles, Legales y Unit Tests): 106 SP (100% completado).
  • Puntos Acumulados Totales Entregados: 142 Story Points.

🔀 16.2 Mapeo de Pull Requests Fusionados por Historia de Usuario

Cruce auditado del Product Backlog contra los 91 Pull Requests:

Historia / Módulo Descripción Funcional SP Integrante Principal Pull Request Fusionado
#US01 Autenticación JWT y Menú Principal 13 Miguel Flores / Aylén Bartolino PR #49, PR #50, PR #157, PR #160, PR #162, PR #275
#US02 Selección de Sucursal 7 Candelaria Barjollo PR #17, PR #27, PR #29, PR #185
#US03 Consulta de Stock e Inventario 10 Virginia García PR #25, PR #216, PR #220
#US04 Contacto y Soporte Institucional 5 Pedro González PR #39, PR #41, PR #192
#US05 Carga y Alta de Productos (Admin) 7 Pedro González PR #37, PR #197, PR #287
#US06 Movimientos Atómicos de Stock 7 Aylén Bartolino Luna PR #10, PR #11, PR #13, PR #18, PR #185, PR #276
#US07 Registro de Usuarios con Validaciones 6 Aylén Bartolino Luna PR #171, PR #173, PR #223
#US08 Gestión de Usuarios y Permisos RBAC 7 Miguel Flores / Candelaria / Pedro PR #160 (ADR-0008), PR #180, PR #290, PR #300
#US09 Edición y Eliminación de Productos 4 Pedro González / Virginia García PR #197, PR #216, PR #296 (ADR-0010)
#US10 Instructivo de Ayuda y Adaptabilidad 4 Miguel Flores / Virginia García PR #217, PR #294, PR #301
#US11 Términos, Condiciones y Baja de Cuenta 5 Aylén Bartolino / Octavio Arnaudo PR #180, PR #195, PR #217
#US12 Perfil Propio y Edición de Datos 4 Candelaria Barjollo PR #180
#ENABLER-QA Testing Unitario (AAA), Red y UI 21 Aylén / Virginia / Miguel / Cande PR #213, #226, #277, #292, #293, #295, #297, #298, #299
#MGMT Documentación Wiki, IEEE830, README y APK 23 Octavio Arnaudo / Equipo CodeLab PR #47, PR #48, PR #161, PR #229, PR #231, PR #249

Volver al Home