Fase 2: Identidad, Seguridad en Capas y Sincronización Estática
Objetivo: Implementar el control de acceso seguro y el flujo de descarga de catálogos maestros para su uso fuera de línea.
1. Track Backend (.NET 10 & PostgreSQL)
[ ] Task 2.1: Motor de Autenticación JWT (Access Tokens)
- Descripción: Configurar e inicializar la emisión de JSON Web Tokens firmados digitalmente.
- Detalle:
- Configurar el middleware de autenticación JWT en
Program.csdel API. - Generar el token encriptado agregando los claims de roles y permisos específicos de los empleados (
personal.usuarios). - Establecer tiempo de expiración estricto del Access Token en 15 minutos en memoria volátil.
- Configurar el middleware de autenticación JWT en
[ ] Task 2.2: Middleware de Cifrado de Cookies (Refresh Tokens)
- Descripción: Implementar el flujo de renovación automática de tokens sin comprometer la seguridad en el cliente.
- Detalle:
- Crear el endpoint
/api/auth/refresh. - Diseñar la inyección del Refresh Token encriptado en el navegador del cliente mediante cookies HttpOnly, directivas Secure y SameSite=Strict para mitigar ataques XSS y CSRF.
- Crear el endpoint
[ ] Task 2.3: CRUD de Medicamentos y Lotes con Concurrencia Optimista
- Descripción: Crear los endpoints de catálogos de medicamentos y lotes habilitando el control de versiones en el servidor.
- Detalle:
- Desarrollar servicios y endpoints REST para la administración de productos y sus lotes correspondientes en
catalogos.productosywms.lotes(los productos son del dominiocatalogos, no deventas). - Configurar e inyectar la columna nativa
xminde PostgreSQL en Entity Framework Core para habilitar el control de versiones y la prevención de sobreescritura (Concurrencia Optimista).
- Desarrollar servicios y endpoints REST para la administración de productos y sus lotes correspondientes en
2. Track Frontend (React SPA & Dexie.js)
[ ] Task 2.4: Contexto de Autenticación Seguro (AuthContext)
- Descripción: Crear e inyectar el estado global de autenticación en la Single Page Application.
- Detalle:
- Desarrollar el
AuthContexten React para retener únicamente el Access Token en memoria volátil. - Implementar interceptores de Axios/Fetch para inyectar de manera automática el header
Authorization: Bearer <token>en cada request.
- Desarrollar el
[ ] Task 2.5: Router Guards (Protección de Pantallas)
- Descripción: Restringir el acceso a vistas del portal administrativo por roles.
- Detalle:
- Crear componentes de protección de rutas (
ProtectedRoute.tsx) para interceptar peticiones de navegación y redirigir al/loginsi no se cuenta con sesión activa. - Mapear el menú dinámico del Navbar basándose en los claims decodificados del Access Token JWT.
- Crear componentes de protección de rutas (
[ ] Task 2.6: Buscador de Inventario Offline-First
- Descripción: Diseñar una interfaz responsiva optimizada para la consulta de mercancías sin red.
- Detalle:
- Crear la vista de consulta de catálogo y existencias en React, adaptada con botones de alta visibilidad para terminales PDA industriales en pasillos.
- Vincular la vista para que realice las búsquedas y filtrados directamente sobre las tablas de Dexie (
cache_productos,cache_lotes,cache_clientes) en 0 ms.
[ ] Task 2.7: Motor de Sincronización Inicial de Catálogos Maestros (Sync V1)
- Descripción: Programar la descarga de catálogos críticos (productos, lotes, clientes) al almacenamiento local.
- Detalle:
- Diseñar hooks de React (
useSyncCatalogos.ts) para descargar la base de datos de productos, lotes y directorio de clientes autorizados. - Implementar validación mediante cabeceras
Last-Modifiedo endpoints diferenciales (/api/sync?since=...) para descargar únicamente los registros mutados desde la última sincronización.
- Diseñar hooks de React (