Skip to main content

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.cs del 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.

[ ] 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.

[ ] 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.productos y wms.lotes (los productos son del dominio catalogos, no de ventas).
    • Configurar e inyectar la columna nativa xmin de PostgreSQL en Entity Framework Core para habilitar el control de versiones y la prevención de sobreescritura (Concurrencia Optimista).

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 AuthContext en 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.

[ ] 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 /login si no se cuenta con sesión activa.
    • Mapear el menú dinámico del Navbar basándose en los claims decodificados del Access Token JWT.

[ ] 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-Modified o endpoints diferenciales (/api/sync?since=...) para descargar únicamente los registros mutados desde la última sincronización.