IEEE830 - ISPC-WEB-2025/TodoStock-AppMovil GitHub Wiki

Especificación de Requisitos de Software (SRS)

Proyecto: TodoStock - CodeLab

Estándar: IEEE Std 830-1998
Versión: 2.0 | Fecha: 14 de Octubre de 2026
Estado: Documento en Producción


Control de Documento

Revisión Fecha Autor / Rol Descripción de Cambios
0.1 2026-05-01 Equipo de Producto Borrador inicial de objetivos.
0.5 2026-06-10 Base de Datos Desglose de requisitos de backend (Django).
1.0 2026-09-13 Interfaz de Usuario Integración del MVP Sprint 1 en Android (Java) y Angular.
1.5 2026-09-30 Equipo de Producto / QA Cierre y congelamiento del Incremento Sprint 2. Integración de API REST, JWT, perfiles de usuario, legislación y testing.
2.0 2026-10-14 Equipo de Producto / QA Entrega Final y consolidación SRS IEEE 830-1998 completa cubriendo historias #US01 a #US12, RNFs, enablers de QA, tareas técnicas (#TK01 a #TK112) y matriz de trazabilidad.

Índice de Contenidos

  1. Introducción
    1. Propósito
    2. Alcance
    3. Definiciones, Acrónimos y Abreviaturas
    4. Referencias
    5. Resumen
  2. Descripción General
    1. Perspectiva del Producto
    2. Funciones del Producto
    3. Clases y Características de Usuario
    4. Entorno Operativo
    5. Restricciones de Diseño e Implementación
    6. Documentación de Usuario
    7. Suposiciones y Dependencias
  3. Requisitos Específicos
    1. Requisitos de Interfaz Externa
    2. Requisitos Funcionales (Módulos #US01 a #US12)
    3. Requisitos de Rendimiento
    4. Restricciones de Diseño
    5. Atributos del Sistema y Requisitos No Funcionales (RNF-SEG, ENABLER-QA)
    6. Requisitos de Base de Datos
  4. Verificación y Trazabilidad de Requisitos
    1. Matriz Base de Casos de Prueba y Métodos
    2. Auditoría vs Implementación en Repositorio (Issues/PRs)
      1. Matriz Extendida de Cumplimiento Funcional
      2. Evaluación Auditada de Requisitos No Funcionales
  5. Anexos y Tareas Transversales
    1. Glosario de Códigos de Error

1. Introducción

1.1 Propósito

Este documento tiene como objetivo definir de manera exhaustiva los requisitos para el sistema TodoStock, una solución integral de gestión de inventarios. Este documento sirve como base para el desarrollo, pruebas y despliegue del ecosistema, asegurando que todos los componentes (Móvil, Web y Backend) funcionen armónicamente.

1.2 Alcance

TodoStock es una plataforma multipropósito que incluye:

  • Backend (Django REST Framework): El motor central que gestiona la persistencia de datos, lógica de negocio, autenticación JWT y procesamiento de movimientos.
  • Frontend Web (Angular): Una Single Page Application (SPA) para administración centralizada, gestión de usuarios, sucursales y reportes.
  • App Móvil (Android Java): Una aplicación nativa diseñada para el personal de depósito y ventas en campo, con soporte para gestión de inventario y modo offline.

Fuera del Alcance:

  • Procesamiento de pagos directos con tarjetas de crédito (se delega a pasarelas externas).
  • Gestión de nómina de empleados (RH).

1.3 Definiciones, Acrónimos y Abreviaturas

  • SRS: Software Requirements Specification.
  • JWT: JSON Web Token (Estándar para autenticación segura).
  • ORM: Object-Relational Mapping (Django Models).
  • SPA: Single Page Application (Arquitectura de Angular).
  • Retrofit: Librería de Android para comunicación con APIs REST.
  • CORS: Cross-Origin Resource Sharing.
  • ACID: Atomicity, Consistency, Isolation, Durability (Propiedades de transacciones de BD).

1.4 Referencias

  1. Estándar IEEE 830-1998.
  2. Documentación oficial de Django REST Framework.
  3. Guía de diseño de Angular (v17+).
  4. Principios de arquitectura limpia de Android.
  5. Wiki del proyecto TodoStock (GitHub).

1.5 Resumen

El sistema se divide en tres subsistemas principales que interactúan a través de protocolos seguros HTTPS. La lógica de negocio está centralizada en el backend, mientras que el frontend y la app móvil actúan como clientes ricos que proporcionan una experiencia de usuario optimizada para sus respectivos entornos.


2. Descripción General

2.1 Perspectiva del Producto

TodoStock se concibe como un ecosistema distribuido. No es solo una aplicación, sino una red de herramientas sincronizadas.

Note

Diagrama de Arquitectura de Sistemas Muestra la interacción entre la BD MySQL, el servidor Django, los clientes Angular y la App Android.

graph TD
    subgraph Clientes ["Capa de Presentación (Clientes)"]
        A["📱 App Móvil (Android Java)<br/>Retrofit + SesionManager"]
        B["💻 App Web (Angular SPA)<br/>Standalone Components + Signals"]
    end

    subgraph Backend ["Capa de Aplicación (Backend)"]
        C["🌐 Proxy Inverso (Nginx)"]
        D["🐍 Backend Server (Django REST Framework)<br/>JWT Auth + Serializers + ORM"]
    end

    subgraph Persistencia ["Capa de Datos"]
        E[("🛢️ Base de Datos<br/>MySQL")]
    end

    A -->|"HTTPS / JSON (Bearer JWT)"| C
    B -->|"HTTPS / JSON (Bearer JWT)"| C
    C -->|"Reverse Proxy / WSGI"| D
    D -->|"Django ORM (Consultas ACID)"| E
Loading

2.2 Funciones del Producto

El sistema permite realizar las siguientes acciones críticas:

2.2.1 Gestión de Identidad (Auth Module)

  • Registro de usuarios con roles específicos (Administrador, Empleado).
  • Inicio de sesión seguro con emisión de tokens JWT (token_access, token_refresh).
  • Protección de rutas basada en guards (Angular) e interceptores (AuthInterceptor en Android).

2.2.2 Control de Inventario (Inventario Module)

  • Catalogación de productos con SKU únicos.
  • Gestión de stock segmentado por sucursales.
  • Definición de stocks mínimos globales y por sucursal para alertas visuales.

2.2.3 Operaciones y Movimientos (Logística)

  • Registro de Entradas y Salidas.
  • Traslados atómicos entre sucursales con validación de stock origen.

2.3 Clases y Características de Usuario

Clase de Usuario Nivel Técnico Responsabilidades
Administrador Alto Gestión total del sistema, ABM de usuarios, asignación de roles (Administrador y Empleado), ABM completo de productos (alta, edición, eliminación), configuración de sucursales, gestión de permisos y auditoría de seguridad.
Empleado (Operativo / Vendedor / Depósito) Medio (Dispositivos Móviles) Operaciones diarias de inventario, consulta de catálogo y existencia de stock, registro de movimientos entre sucursales, recepción y salida de mercadería, y carga asistida de productos.

2.4 Entorno Operativo

  • Servidor: Python 3.10+, Django 6.0, MySQL. Despliegue en Alwaysdata / Docker / Nginx.
  • Web: Navegadores modernos (Chrome, Firefox, Safari) compatibles con Angular 17+.
  • Móvil: Dispositivos Android 7.0 (Nougat) o superior (API 24+).

2.5 Restricciones de Diseño e Implementación

  • Lenguaje: Backend en Python, Frontend en TypeScript, Móvil en Java nativo.
  • Seguridad: Gestión centralizada de sesión con SesionManager (SharedPreferences) en Android para tokens JWT.
  • Comunicación: Formato JSON estricto en todas las APIs REST.

2.6 Documentación de Usuario

Se proporcionará:

  • Wiki técnica en el repositorio de GitHub.
  • Manual de usuario e instructivos en la sección de Ayuda de la app.
  • Guía de Aclaraciones Docente (GUÍA-DOCENTE.md).

3. Requisitos Específicos

3.1 Requisitos de Interfaz Externa

3.1.1 Interfaces de Usuario (UI)

  • Web: Diseño responsivo con TailwindCSS / Angular Material.
  • Móvil: Interfaz optimizada en Java / Material Design 3 con Activities y layouts XML.

3.1.2 Interfaces de Software (SI)

  • El backend expone endpoints bajo /api/.
  • Comunicación vía Retrofit HTTP Client en Android con AuthInterceptor.

3.2 Requisitos Funcionales (#US01 a #US12)

3.2.1 Módulo 01: Autenticación, Sesiones y Navegación (FR-AUTH / #US01)

  • FR-AUTH-01: El sistema permitirá el login mediante email y contraseña validando credenciales contra la API (POST /api/usuarios/login/).
  • FR-AUTH-02: Los tokens JWT tendrán tiempo de expiración corto con renovaciones mediante refresh token (POST /api/usuarios/token/refresh/).
  • FR-AUTH-03: En Android, la sesión se administra en SesionManager (SharedPreferences) inyectando el token Bearer en AuthInterceptor. Si la sesión expira o es inválida, el usuario es redirigido automáticamente a LoginActivity.
  • FR-AUTH-04: SplashActivity evalúa el estado de la sesión guardada y decide el destino (MenuPrincipalActivity o LoginActivity).

[US01] Autenticación y Menú Principal

  • ID: US01 | Prioridad: Alta (Bloqueante) | Story Points: 8 (Sprint 1: 5 SP | Sprint 2: 3 SP)
  • Responsable: Miguel Flores / Aylén Bartolino Luna
  • Narrativa: Como usuario quiero iniciar sesión y acceder a un menú principal para navegar hacia el resto de la app según mi rol.
  • Criterios de Aceptación: Transición fluida Login → Menú Principal, menú condicional según el rol (Administrador o Empleado), validaciones de campos y cierre de sesión efectivo.
  • Endpoints: POST /api/usuarios/login/, POST /api/usuarios/token/refresh/

Tareas Técnicas Asociadas (#US01):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK01 Diseñar el layout activity_login.xml con validación de inputs en tiempo real. Miguel Flores Sprint 1 2 Alta activity_login.xml
TK02 Diseñar el layout activity_menu_principal.xml (hub) con accesos a módulos. Miguel Flores Sprint 1 2 Alta activity_menu_principal.xml
TK03 Navegación mediante Intent desde Login hacia MenuPrincipalActivity. Miguel Flores Sprint 1 1 Alta LoginActivity.java
TK04 Contrato de Intent desde menú a Activities hijas con rol_usuario. Miguel Flores Sprint 1 2 Alta MenuPrincipalActivity.java
TK05 Retrofit: login contra la API y guardado del JWT en SesionManager. Aylén Bartolino Sprint 2 2 Alta AuthRepository.java / SesionManager.java
TK06 Interceptor HTTP para inyectar cabecera Authorization: Bearer <token>. Aylén Bartolino Sprint 2 1 Media AuthInterceptor.java
TK07 Botón "Cerrar sesión" con limpieza de tokens y retorno a Login. Miguel Flores Sprint 2 1 Media MenuPrincipalActivity.java
TK90 Configuración base de la app para consumir la API (ApiClient). Aylén Bartolino Sprint 2 2 Alta ApiClient.java
TK91 SplashActivity: decidir destino según sesión guardada. Aylén Bartolino Sprint 2 1 Media SplashActivity.java
TK92 Corregir defecto visual de errores en Login (TC-L-01). Miguel Flores Sprint 2 1 Media LoginActivity.java
TK112 AuthRepository + LoginViewModel para arquitectura de Login. Aylén Bartolino Sprint 2 2 Alta LoginViewModel.java

3.2.2 Módulo 02: Selección de Sucursales (FR-SUC / #US02)

  • FR-SUC-01: El sistema obtendrá la lista de sucursales activas desde la API (GET /api/inventario/sucursales/).
  • FR-SUC-02: Al seleccionar una sucursal, la app almacena y transmite el sucursal_id por Intent para filtrar los productos e inventarios.

[US02] Selección de Sucursal

  • ID: US02 | Prioridad: Alta | Story Points: 7 (Sprint 1: 5 SP | Sprint 2: 2 SP)
  • Responsable: Candelaria Barjollo
  • Narrativa: Como usuario quiero elegir la sucursal con la que voy a trabajar para que las demás pantallas muestren su información.
  • Criterios de Aceptación: Lista en SeleccionSucursalActivity poblada con SucursalAdapter, selección persistente y transmisión del sucursal_id.
  • Endpoints: GET /api/inventario/sucursales/

Tareas Técnicas Asociadas (#US02):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK08 Paleta de colores colors.xml y recursos visuales base. Candelaria Barjollo Sprint 1 1 Alta colors.xml
TK09 Layout activity_seleccion_sucursal.xml con RecyclerView/Spinner. Candelaria Barjollo Sprint 1 2 Alta activity_seleccion_sucursal.xml
TK10 Adapter con datos de sucursales (SucursalAdapter). Candelaria Barjollo Sprint 1 1 Media SucursalAdapter.java
TK11 Navegación por Intent pasando sucursal_id seleccionado. Candelaria Barjollo Sprint 1 1 Alta SeleccionSucursalActivity.java
TK12 Conexión con GET /api/inventario/sucursales/ con SucursalDto. Candelaria Barjollo Sprint 2 2 Alta SucursalDto.java

3.2.3 Módulo 03: Consulta e Inventario de Stock (FR-STK / #US03)

  • FR-STK-01: Visualización de stock de productos por sucursal (GET /api/inventario/productos/{id}/stock/ o por query sucursal_id).
  • FR-STK-02: Resaltado visual automático en StockAdapter cuando la cantidad de un ítem sea menor o igual al umbral mínimo (cantidad_stock <= stock_min).

[US03] Gestión e Inventario de Stock

  • ID: US03 | Prioridad: Alta | Story Points: 10 (Sprint 1: 5 SP | Sprint 2: 5 SP)
  • Responsable: Virginia Garcia
  • Narrativa: Como Administrador o Empleado quiero ver una lista de productos con su cantidad de stock de la sucursal elegida para conocer la situación del inventario.
  • Criterios de Aceptación: Lista reactiva en GestionStockActivity, filtrado por sucursal_id y alerta visual destacada en rojo ante stock bajo umbral.
  • Endpoints: GET /api/inventario/productos/{id}/stock/

Tareas Técnicas Asociadas (#US03):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK13 Layouts activity_gestion_stock.xml e item_stock.xml. Virginia Garcia Sprint 1 2 Alta activity_gestion_stock.xml
TK14 StockAdapter con mapeo de productos y existencias. Virginia Garcia Sprint 1 2 Alta StockAdapter.java
TK15 Recepción de sucursal_id por Intent y filtrado de la lista. Virginia Garcia Sprint 1 1 Media GestionStockActivity.java
TK16 Conexión con InventarioApiService para consulta de stock real. Virginia Garcia Sprint 2 3 Alta InventarioApiService.java
TK17 Implementación de alerta visual de stock bajo el umbral en StockAdapter. Virginia Garcia Sprint 2 2 Media StockAdapter.java

3.2.4 Módulo 04: Contacto y Soporte Institucional (FR-CONT / #US04)

  • FR-CONT-01: Envío de mensajes de soporte e incidencias desde ContactoActivity conectando con POST /api/contacto/.
  • FR-CONT-02: Selector de sucursal en formulario de contacto poblado con datos de sucursales reales.

[US04] Contacto y Soporte

  • ID: US04 | Prioridad: Media | Story Points: 5 (Sprint 1: 3 SP | Sprint 2: 2 SP)
  • Responsable: Pedro Gonzalez
  • Narrativa: Como usuario quiero ver una pantalla de contacto para comunicarme con soporte si lo necesito.
  • Criterios de Aceptación: Formulario con nombre, email, sucursal, mensaje, validaciones de campos vacíos y confirmación por Toast/API.
  • Endpoints: POST /api/contacto/

Tareas Técnicas Asociadas (#US04):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK18 Layout activity_contacto.xml. Pedro Gonzalez Sprint 1 2 Media activity_contacto.xml
TK19 Lógica de envío en ContactoActivity con confirmación por Toast. Pedro Gonzalez Sprint 1 1 Media ContactoActivity.java
TK20 Selector de sucursal del formulario de contacto con datos reales. Pedro Gonzalez Sprint 2 1 Media ContactoActivity.java
TK42 Endpoint de contacto y envío real (ContactoApiService, ContactoRequest). Pedro Gonzalez Sprint 2 1 Media ContactoApiService.java

3.2.5 Módulo 05: Alta de Productos en Catálogo (FR-PROD / #US05)

  • FR-PROD-01: Creación de nuevos productos en catálogo (POST /api/inventario/productos/). Acción reservada a usuarios con rol Administrador.
  • FR-PROD-02: Validaciones de código SKU único, precios mayores a cero y campos obligatorios.

[US05] Carga de Productos

  • ID: US05 | Prioridad: Alta | Story Points: 7 (Sprint 1: 3 SP | Sprint 2: 4 SP)
  • Responsable: Pedro Gonzalez
  • Narrativa: Como Administrador quiero cargar un nuevo producto para que esté disponible en el catálogo.
  • Criterios de Aceptación: Formulario en CargaProductoActivity, validaciones de entradas y persistencia en servidor mediante POST.
  • Endpoints: POST /api/inventario/productos/

Tareas Técnicas Asociadas (#US05):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK21 Layout activity_carga_producto.xml (formulario de alta). Pedro Gonzalez Sprint 1 2 Media activity_carga_producto.xml
TK22 Validación visual de campos obligatorios vacíos antes de enviar. Pedro Gonzalez Sprint 1 1 Media CargaProductoActivity.java
TK23 Conexión con POST /api/inventario/productos/ (solo Administrador). Pedro Gonzalez Sprint 2 2 Alta CargaProductoActivity.java
TK93 Corregir defecto visual de errores en Carga de Producto (TC-CP-01). Pedro Gonzalez Sprint 2 2 Media CargaProductoActivity.java

3.2.6 Módulo 06: Movimientos Atómicos de Stock (FR-MOV / #US06)

  • FR-MOV-01: Registro de transferencias de inventario entre sucursales origen y destino con validación de stock disponible.
  • FR-MOV-02: Procesamiento atómico en backend (POST /api/vendedor/movimientos/ o /api/inventario/movimientos/): la transacción incrementa y decrementa existencias de forma dual.

[US06] Movimientos entre Sucursales

  • ID: US06 | Prioridad: Alta | Story Points: 7 (Sprint 1: 4 SP | Sprint 2: 3 SP)
  • Responsable: Aylén Bartolino Luna
  • Narrativa: Como Empleado o Administrador quiero registrar un movimiento de stock entre dos sucursales para que la existencia se actualice en ambas.
  • Criterios de Aceptación: Formulario con spinners origen/destino, selección de producto y cantidad, bloqueo si origen = destino o cantidad <= 0.
  • Endpoints: POST /api/vendedor/movimientos/

Tareas Técnicas Asociadas (#US06):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK24 Layout activity_movimientos.xml (origen/destino, producto, cantidad). Aylén Bartolino Sprint 1 2 Alta activity_movimientos.xml
TK25 Spinners de sucursal origen/destino y producto. Aylén Bartolino Sprint 1 1 Media MovimientosActivity.java
TK26 Validaciones locales de negocio (origen ≠ destino, cantidad > 0). Aylén Bartolino Sprint 1 1 Media MovimientosActivity.java
TK27 Conexión con API atómica de movimientos (MovimientoRequest). Aylén Bartolino Sprint 2 3 Alta MovimientosActivity.java

3.2.7 Módulo 07: Registro de Usuarios (FR-REG / #US07)

  • FR-REG-01: Solicitud de alta de cuenta en RegistroActivity mediante POST /api/usuarios/registro/ (nombre, email, DNI, fecha de nacimiento con edad mínima +18 y contraseña).
  • FR-REG-02: Estado inicial de la cuenta en PENDIENTE de aprobación por un Administrador.

[US07] Registro de Usuarios

  • ID: US07 | Prioridad: Alta | Story Points: 6 (Sprint 2: 6 SP)
  • Responsable: Aylén Bartolino Luna
  • Narrativa: Como visitante quiero registrarme con mis datos para solicitar mi cuenta en la app.
  • Criterios de Aceptación: Formulario de registro con validaciones de campos, formato DNI, edad mínima +18 y contraseña en Validadores.java.
  • Endpoints: POST /api/usuarios/registro/

Tareas Técnicas Asociadas (#US07):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK34 RegistroActivity: layout, validaciones de edad mínima (+18) y API. Aylén Bartolino Sprint 2 4 Alta RegistroActivity.java
TK35 Verificación de endpoint de registro y pruebas Postman. Aylén Bartolino Sprint 2 1 Media RegistroApiService.java
TK47 Política de contraseñas robustas y validación en Validadores.java. Aylén Bartolino Sprint 2 1 Media Validadores.java

3.2.8 Módulo 08: Administración de Usuarios y Roles (FR-USR-ADM / #US08)

  • FR-USR-ADM-01: Listado, aprobación, asignación de rol (ADMINISTRADOR o EMPLEADO) y desactivación de usuarios desde la API (GET/PUT/DELETE /api/usuarios/). Acción exclusiva de Administradores.
  • FR-USR-ADM-02: Menú condicional por rol en MenuPrincipalActivity (#TK48): las opciones administrativas solo se despliegan si es_admin es verdadero.

[US08] Control y Gestión de Usuarios (Admin)

  • ID: US08 | Prioridad: Alta | Story Points: 7 (Sprint 2: 7 SP)
  • Responsable: Miguel Flores / Candelaria Barjollo
  • Narrativa: Como Administrador quiero cargar, aprobar, listar, editar y dar de baja usuarios para controlar quién accede y con qué rol.
  • Criterios de Aceptación: Listado de usuarios, asignación de roles, activación de cuentas pendientes y control de acceso.
  • Endpoints: GET/PUT/DELETE /api/usuarios/, GET /api/usuarios/roles/

Tareas Técnicas Asociadas (#US08):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK36 API de usuarios (listar, editar, baja) solo Administrador. Miguel Flores Sprint 2 2 Alta Backend API
TK37 Gestión de usuarios: lista, edición y baja con diálogo. Candelaria Barjollo Sprint 2 2 Alta Front / App
TK48 Autorización por perfiles (Administrador / Empleado) y menú por rol. Miguel Flores Sprint 2 2 Alta MenuPrincipalActivity.java
TK109 Cargar usuario y aprobar registros pendientes (Administrador). Candelaria Barjollo Sprint 2 1 Media Backend / App

3.2.9 Módulo 09: Edición y Eliminación de Productos (FR-PROD-ADM / #US09)

  • FR-PROD-ADM-01: Edición y baja lógica de productos (PUT/DELETE /api/inventario/productos/<id>/). Exclusivo para Administradores.

[US09] Edición y Eliminación de Productos (Admin)

  • ID: US09 | Prioridad: Media | Story Points: 4 (Sprint 2: 4 SP)
  • Responsable: Pedro Gonzalez
  • Narrativa: Como Administrador quiero editar y eliminar productos para mantener el catálogo libre de datos obsoletos.
  • Criterios de Aceptación: Modificación de campos de productos y eliminación lógica con control de error si posee existencias.
  • Endpoints: PUT/DELETE /api/inventario/productos/<id>/

Tareas Técnicas Asociadas (#US09):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK38 API de productos: edición y baja lógica con respuesta descriptiva. Pedro Gonzalez Sprint 2 2 Media Backend API
TK39 Listado de productos con opciones de editar y eliminar. Pedro Gonzalez Sprint 2 2 Media CargaProductoActivity.java

3.2.10 Módulo 10: Ayuda e Instructivos (FR-UX / #US10)

  • FR-UX-01: Pantalla e instructivos de ayuda para guiar al usuario en la operatoria del sistema.
  • FR-UX-02: Adaptabilidad de layouts para orientaciones landscape y tablets, manteniendo el estado de UI ante rotaciones de pantalla.

[US10 & RNF-UX] Ayuda e Instructivos de Uso

  • ID: US10 / RNF-UX | Prioridad: Media | Story Points: 4 (Sprint 2: 4 SP)
  • Responsable: Miguel Flores / Equipo
  • Narrativa: Como usuario quiero ver una pantalla de ayuda con instructivos y contar con un diseño adaptable al rotar el dispositivo.
  • Criterios de Aceptación: Pantalla de ayuda funcional, preservación de estado en rotación de pantalla.

Tareas Técnicas Asociadas (#US10 / RNF-UX):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK40 Activity e instructivo de Ayuda visual. Miguel Flores Sprint 2 2 Media Layout Ayuda
TK41 Layouts landscape y tablet, y conservación de estado al rotar. Miguel Flores Sprint 2 2 Media Layouts XML

3.2.11 Módulo 11: Legislación, Privacidad y Baja de Cuenta (FR-LEG / #US11)

  • FR-LEG-01: Pantalla TerminosActivity para visualización de Términos y Condiciones y Políticas de Privacidad (Ley 25.326).
  • FR-LEG-02: Mecanismo de arrepentimiento y solicitud de baja de cuenta propia en BajaDeCuenta conectando con DELETE /api/usuarios/me/.

[US11] Legislación, Términos y Baja de Cuenta

  • ID: US11 | Prioridad: Media | Story Points: 5 (Sprint 2: 5 SP)
  • Responsables: Aylén Bartolino Luna / Octavio Arnaudo
  • Narrativa: Como usuario quiero conocer y controlar el uso de mis datos personales y contar con la opción de darme de baja.
  • Criterios de Aceptación: Visualización de textos legales en TerminosActivity y opción activa de baja de cuenta en BajaDeCuenta.
  • Endpoints: DELETE /api/usuarios/me/

Tareas Técnicas Asociadas (#US11):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK52 Legislación en la app: TerminosActivity, términos y 'Darme de baja' (BajaDeCuenta). Aylén Bartolino Sprint 2 3 Media TerminosActivity.java, BajaDeCuenta.java
TK105 Sección de legislación en la Wiki y verificación de cumplimiento normativo. Octavio Arnaudo Sprint 2 2 Media Proteccion-de-Datos.md

3.2.12 Módulo 12: Perfil de Usuario Propio (FR-PERFIL / #US12)

  • FR-PERFIL-01: Consulta y actualización de datos personales del propio usuario autenticado (PerfilActivity y EditarPerfilActivity) mediante GET/PATCH /api/usuarios/me/.

[US12] Perfil de Usuario Propio

  • ID: US12 | Prioridad: Alta | Story Points: 4 (Sprint 2: 4 SP)
  • Responsable: Candelaria Barjollo
  • Narrativa: Como usuario quiero ver y editar mis datos personales para mantener mi información actualizada.
  • Criterios de Aceptación: Vista de perfil en PerfilActivity y formulario de modificación en EditarPerfilActivity conectado a la API.
  • Endpoints: GET/PATCH /api/usuarios/me/

Tareas Técnicas Asociadas (#US12):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK94 PerfilApiService y DTOs (PerfilResponse, PerfilUpdateRequest). Candelaria Barjollo Sprint 2 2 Alta PerfilApiService.java
TK95 PerfilActivity y EditarPerfilActivity: ver y editar mis datos. Candelaria Barjollo Sprint 2 2 Alta PerfilActivity.java, EditarPerfilActivity.java

3.3 Requisitos de Rendimiento

  • PE-01: Tiempo de respuesta de la API < 1s para consultas de inventario y autenticación.
  • PE-02: Carga fluida de RecyclerViews de stock y sucursales con scroll reactivo.

3.4 Restricciones de Diseño

  • Arquitectura Android: Aplicación nativa en Java, arquitectura por capas (network, repositorio, sesion, validacion) y vistas XML con Material Design.
  • Arquitectura Backend: Django REST Framework expuesto en /api/ con base de datos MySQL.

3.5 Atributos del Sistema y Requisitos No Funcionales (RNF & ENABLER-QA)

3.5.1 Hardening de Seguridad y Protección de Sesiones (RNF-SEG)

  • NFR-SEC-01: Inyección automática del header Authorization: Bearer <token> mediante AuthInterceptor.
  • NFR-SEC-02: Gestión centralizada de sesión mediante SesionManager (SharedPreferences).
  • NFR-SEC-03: Registro automático de eventos sensibles en la tabla LogAuditoria en servidor (#TK51).
  • NFR-SEC-04: Comunicaciones encriptadas vía HTTPS / TLS 1.2+.

Tareas Técnicas de Ciberseguridad (#RNF-SEG):

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

3.5.2 Suite de Pruebas Automatizadas y Accesibilidad (ENABLER-QA)

  • NFR-QA-01: Suite de pruebas unitarias implementada en ValidadoresTest.java (app/src/test/java/com/ispc/todostock/validacion/) aplicando el patrón Arrange-Act-Assert (AAA) sobre contraseñas, emails, DNI y edad mínima (+18).

Tareas Técnicas de Testing y Calidad (#ENABLER-QA):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK60 [AUT-UNIT-01] Tests unitarios de validadores en ValidadoresTest.java (patrón AAA). Aylén Bartolino Sprint 2 3 Alta ValidadoresTest.java
TK61 [AUT-UNIT-02] Tests unitarios de stock bajo umbral y mappers. Virginia Garcia Sprint 2 2 Media Tests unitarios
TK62 [AUT-UNIT-03] Tests unitarios de repositorios. Aylén Bartolino Sprint 2 2 Media Tests unitarios
TK63 [AUT-UNIT-04] Tests unitarios de token, sesión y AuthInterceptor. Aylén Bartolino Sprint 2 2 Media Tests unitarios
TK80..89 Plan de Pruebas, ejecución de casos TC-L, TC-STK, TC-MOV, TC-REG, TC-CP, TC-C y planilla. Octavio Arnaudo Sprint 2 10 Alta Testing-y-Calidad.md
TK96 Informe de Accesibilidad y auditoría visual de la app. Octavio Arnaudo Sprint 2 1 Media Accesibilidad.md
TK110 Casos de prueba de API y reporte de bugs del endpoint de registro. Octavio Arnaudo Sprint 2 2 Media Reporte Bugs

3.5.3 Gestión de Proyecto, Wiki e Infraestructura (MGMT / RELEASE)

Tareas Técnicas Transversales y de Proceso (#MGMT / #RELEASE):

ID Tarea Técnica Responsable Sprint SP Prioridad Entregable / Archivo
TK28 Setup del repo, estrategia GitFlow, Kanban y Wiki. Octavio Arnaudo Sprint 0 2 Alta GitHub / Wiki
TK29 Vincular documentación IEEE830 desde la Wiki. Octavio Arnaudo Sprint 0 1 Media Wiki IEEE830
TK30 Consolidar plan de pruebas y los 12 test cases en la Wiki. Octavio Arnaudo Sprint 1 2 Alta Testing-y-Calidad.md
TK31 Redactar borrador del plan de ciberseguridad y JWT. Octavio Arnaudo Sprint 1 2 Alta Ciberseguridad.md
TK32 Cargar Anexo II del IEEE830 con capturas de pantalla. Octavio Arnaudo Sprint 1 1 Media Anexos.md
TK33 GitHub Action para notificaciones de merges a develop. Miguel Flores Sprint 1 1 Media .github/workflows/
TK43 Deploy del backend en Alwaysdata y baseUrl de release. Miguel Flores Sprint 2 1 Alta Backend Deployment
TK44 APK release en main e instrucciones de instalación. Miguel Flores Sprint 2 1 Alta Release v1.0.0
TK97 Grabar y editar el video demo grupal (máx. 3 minutos). Aylén Bartolino Sprint 2 2 Media Video Demo
TK98 Milestone Sprint 2, etiquetas e Issues en GitHub. Octavio Arnaudo Sprint 2 2 Alta GitHub Milestones
TK99 Gestión de reporte y seguimiento de bugs. Octavio Arnaudo Sprint 2 1 Media GitHub Issues
TK100 Registro de las 4 ceremonias del Sprint 2 en la Wiki. Octavio Arnaudo Sprint 2 2 Alta Ceremonias-Scrum.md
TK101 IEEE830 actualizado con los requerimientos del Sprint 2. Octavio Arnaudo Sprint 2 1 Alta IEEE830.md
TK102 Diagrama de navegabilidad y Anexo II con capturas nuevas. Octavio Arnaudo Sprint 2 2 Alta Navegabilidad.md
TK103 Wiki: avances individuales, de equipo y enlaces externos. Octavio Arnaudo Sprint 2 1 Media Wiki Home
TK104 Product Backlog de la Wiki alineado con el backlog general. Octavio Arnaudo Sprint 2 1 Alta Product-Backlog.md
TK106 README del repositorio actualizado. Octavio Arnaudo Sprint 2 1 Alta README.md
TK107 Guion y coordinación del video demo grupal. Aylén Bartolino Sprint 2 1 Media Guion Demo
TK108 Commit en main con el backlog y plantillas de Issues/PR. Miguel Flores Sprint 2 1 Alta Repositorio
TK111 Guía de Aclaraciones para Evaluación Docente. Octavio Arnaudo Sprint 2 1 Alta GUÍA-DOCENTE.md

3.6 Requisitos de Base de Datos

El esquema relacional está diseñado para soportar integridad referencial estricta.

Note

Diagrama Entidad-Relación (ER)

erDiagram
    ROLE {
        int id PK
        string nombre UK
        string descripcion
    }
    USUARIO {
        int id PK
        string nombre
        string email UK
        string dni UK
        date fecha_nacimiento
        string password
        int rol_id FK
    }
    CATEGORIA {
        int id_cat PK
        string nombre
    }
    PRODUCTO {
        int id_art PK
        string nombre
        string codigo UK
        string descripcion
        decimal precio_venta
        int stock_min_global
        int id_cat FK
    }
    SUCURSAL {
        int id_suc PK
        string nombre
        string direccion
        boolean es_central
    }
    STOCK_SUCURSAL {
        int id_stock PK
        int id_art FK
        int id_suc FK
        int cantidad_stock
        int stock_min
    }
    PROVEEDOR {
        int id_prov PK
        string nombre
        string cuit UK
        string telefono
        string email
        string direccion
    }
    PRODUCTO_PROVEEDOR {
        int id_enlace PK
        int id_art FK
        int id_prov FK
        decimal precio_costo
    }
    MOVIMIENTO {
        int id_mov PK
        string tipo
        datetime fecha_hora
        int cantidad
        int stock_previo
        string motivo
        int id_art FK
        int id_suc FK
        int id_usuario FK
        int id_prov FK
    }

    ROLE ||--o{ USUARIO : "asignado_a"
    CATEGORIA ||--o{ PRODUCTO : "clasifica"
    USUARIO ||--o{ MOVIMIENTO : "registra"
    PRODUCTO ||--o{ STOCK_SUCURSAL : "posee"
    SUCURSAL ||--o{ STOCK_SUCURSAL : "almacena"
    PRODUCTO ||--o{ MOVIMIENTO : "involucra"
    SUCURSAL ||--o{ MOVIMIENTO : "ocurre_en"
    PROVEEDOR ||--o{ MOVIMIENTO : "origina"
    PRODUCTO ||--o{ PRODUCTO_PROVEEDOR : "provisto_por"
    PROVEEDOR ||--o{ PRODUCTO_PROVEEDOR : "provee"
Loading

Entidades Principales:

  1. USUARIO: id, nombre, email (PK), password, rol_id.
  2. PRODUCTO: id_art (PK), nombre, codigo (Unique), precio_venta, stock_min_global.
  3. SUCURSAL: id_suc (PK), nombre, direccion.
  4. STOCK_SUCURSAL: id_stock (PK), id_art (FK), id_suc (FK), cantidad_stock.
  5. MOVIMIENTO: id_mov (PK), tipo, fecha_hora, id_art (FK), id_suc (FK), id_usuario (FK).

4. Verificación y Trazabilidad de Requisitos

4.1 Matriz Base de Casos de Prueba y Métodos

ID Requisito Caso de Prueba (Wiki) Método
FR-AUTH-01 / #US01 TC-L-01 al TC-L-04 (Login, Validaciones y Sesión) Automatizado / Unitario (ValidadoresTest)
FR-SUC-01 / #US02 TC-SSUC-01 y TC-SSUC-02 (Selección de Sucursal) Manual / Integración API
FR-STK-01 / #US03 TC-STK-01 y TC-STK-02 (Stock y Alertas Visuales) Manual / Integración API
FR-CONT-01 / #US04 TC-C-01 (Contacto y Soporte) Manual / API
FR-PROD-01 / #US05 TC-CP-01 (Carga de Producto y Validación Válida) Manual / API
FR-MOV-01 / #US06 TC-MOV-001 al TC-MOV-006 (Movimientos Atómicos) Manual / Integración API
FR-REG-01 / #US07 TC-REG-01 al TC-REG-04 (Registro de Usuarios, Edad y Validaciones) Automatizado / Unitario (ValidadoresTest)
FR-USR-ADM / #US08 Verificación de Roles y Menú Condicional Manual / API
FR-PROD-ADM / #US09 Edición y Eliminación de Productos Manual / API
FR-UX / #US10 Instructivo de Ayuda y Rotación de Pantalla Manual
FR-LEG / #US11 Términos, Políticas y Baja de Cuenta (BajaDeCuenta) Manual / API
FR-PERFIL / #US12 Consultar y Editar Perfil Propio Manual / API
NFR-SEC / RNF-SEG TC-SEG-01 al TC-SEG-05 (Hardening de Seguridad y JWT) Auditoría de Seguridad
NFR-QA / ENABLER-QA Tests Unitarios en ValidadoresTest.java (Patrón AAA) Unitario (JUnit)

4.2 Auditoría vs Implementación en Repositorio (Issues/PRs)

📊 4.2.1 Matriz Extendida de Cumplimiento de Requerimientos Funcionales

El contraste directo entre las especificaciones IEEE 830, el código fuente nativo en app/, el backend y los registros de Pull Requests confirma el cumplimiento total del alcance acordado:

Requerimiento SRS Módulo / Historia Actividades / Componentes Backend Django (Backend/) Cobertura de Tests Pull Requests Fusionados Estado
RF-01 / #US01 Autenticación JWT LoginActivity, SesionManager, AuthInterceptor usuarios/views.py (POST /login/) test_auth_enforcement.py PR #49, PR #50, PR #160 ✅ CUMPLIDO
RF-02 / #US02 Selección Sucursal SeleccionSucursalActivity, SucursalAdapter inventario/views.py (GET /sucursales/) test_sucursales.py PR #185 ✅ CUMPLIDO
RF-03 / #US03 Stock e Inventario GestionStockActivity, StockAdapter inventario/views.py (GET /stock/) test_stock_consolidado.py, ValidadoresTest PR #216, PR #220 ✅ CUMPLIDO
RF-04 / #US04 Contacto y Soporte ContactoActivity, ContactoApiService usuarios/views.py (POST /contacto/) TC-C-01 PR #192 ✅ CUMPLIDO
RF-05 / #US05 Alta de Producto CargaProductoActivity inventario/views.py (POST /productos/) TC-CP-01 PR #197, PR #287 ✅ CUMPLIDO
RF-06 / #US06 Movimientos Stock MovimientosActivity inventario/views.py (POST /movimientos/) test_traslados.py PR #185 (ADR-0002) ✅ CUMPLIDO
RF-07 / #US07 Registro Usuarios RegistroActivity, Validadores.java usuarios/views.py (POST /registro/) ValidadoresTest.java (AAA) PR #171, PR #173, PR #223, PR #283 ✅ CUMPLIDO
RF-08 / #US08 Administración RBAC MenuPrincipalActivity, UsuariosActivosFragment usuarios/views.py (GET/PATCH /usuarios/) test_auth_enforcement.py PR #160 (ADR-0008), PR #290, PR #300 (TK37) ✅ CUMPLIDO
RF-09 / #US09 Edición de Producto CargaProductoActivity, GestionStockActivity inventario/views.py (PATCH /productos/{id}/) test_mobile_api.py PR #197, PR #216, PR #296 (TK39), PR #323 ✅ CUMPLIDO
RF-10 / #US10 Ayuda y Usabilidad AyudaActivity, Layouts Apaisados/Tablet - TC-L-03, TC-L-04 PR #217, PR #294 ✅ CUMPLIDO
RF-11 / #US11 Legislación / Baja TerminosActivity, BajaDeCuenta usuarios/views.py (POST /desactivar/) TC-SEG-05 PR #180, PR #195, PR #217 ✅ CUMPLIDO
RF-12 / #US12 Perfil Propio PerfilActivity, EditarPerfilActivity usuarios/views.py (GET/PATCH /me/) usuarios/tests.py PR #180 ✅ CUMPLIDO

🛡️ 4.2.2 Evaluación Auditada de Requisitos No Funcionales (RNF)

  1. Seguridad (RNF-SEG): Verificado mediante el almacenamiento seguro de tokens con EncryptedSharedPreferences, expiración de acceso a los 15 minutos, rotación de refresh tokens y archivo de seguridad network_security_config.xml limitando la comunicación a HTTPS.
  2. Rendimiento y Adaptabilidad (RNF-PERF / RNF-UX): Peticiones asíncronas con Retrofit2 y OkHttp3 en hilos secundarios, renderizado fluido en RecyclerView y adaptabilidad completa a orientación Apaisada (Landscape) y Tablets mediante ScrollView y preservación de estado con onSaveInstanceState (#TK41 - PR #294).
  3. Calidad de Código y Testing (RNF-QA): Cobertura unitaria, red y UI automatizada en Android (app/src/test/ y app/src/androidTest/):
    • Pruebas Unitarias: ValidadoresTest.java (TK60 - AAA), StockItemTest.java (TK61) y LoginViewModelTest.java (TK62).
    • Pruebas de Red: ParseoRespuestasTest.java (TK64 - 200 OK) y AuthRepositoryTest.java (TK65 - HTTP 500) con MockWebServer.
    • Pruebas de UI Automatizadas (Espresso - AUT-UI-01 / TK70 - PR #299): Flujo completo Login ➔ Menú en LoginFlujoTest.java utilizando Page Objects (LoginScreen, MenuPrincipalScreen), AccessibilityChecks.enable() e IdlingResource.
    • Integración de API (Postman - AUT-API-02 / TK68 - PR #298): Suite Postman de catálogo de productos e infraestructura utilitaria en PostmanConfig.java.

5. Anexos y Tareas Transversales

5.1 Glosario de Códigos de Error

  • 401 Unauthorized: El JWT ha expirado o es inválido.
  • 403 Forbidden: El rol del usuario no tiene permisos para la acción (ej. Empleado intentando acción de Administrador).
  • 422 Unprocessable Entity / 400 Bad Request: Error de validación (ej. campos vacíos, contraseñas fuera de norma o DNI/email duplicado).

FIN DEL DOCUMENTO


⚠️ **GitHub.com Fallback** ⚠️