# Informe Técnico de Consultoría y Despliegue de Infraestructura **Proyecto:** S.I.P – Sistema de Identificación Papiloscópica **Entorno de Desarrollo:** Docker (Linux Mint / Debian) **Fecha de Cierre:** 21 de Mayo de 2026 **Estado del Sistema:** Operativo / Comunicado --- ## 1. Resumen Ejecutivo Se completó con éxito la reestructuración estructural, migración de datos dactilares y depuración de la capa de red del **Sistema de Identificación Papiloscópica (S.I.P)**. El ecosistema multinivel integrado por un backend en Flask, base de datos transaccional PostgreSQL y una interfaz de usuario SPA en Vue 3 + Vite, se encuentra completamente operativo, comunicado y con los datos relacionales iniciales sembrados correctamente. --- ## 2. Acciones Realizadas y Soluciones Técnicas ### A. Migración de Base de Datos y Buenas Prácticas (MySQL ➡️ PostgreSQL) Se tomó el volcado de datos relacionales original (proveniente de MySQL) y se portó íntegramente hacia el ORM de Flask (SQLAlchemy), resolviendo incompatibilidades de motores y aplicando estándares de la industria: * **Normalización Estructural:** Se convirtieron todos los nombres de columnas que usaban estilos mixtos o híbridos en el volcado original hacia la convención estricta *snake_case* de Python/Postgres (ej. `personaCod_id` mutó a `persona_cod_id`). * **Optimización de Almacenamiento Biométrico:** Los campos de imágenes dactilares tipo `blob` se migraron a datos binarios eficientes en frío (`db.LargeBinary`), idóneos para almacenar ficheros RAW/WSQ en Postgres sin ralentizar el rendimiento de las consultas. * **Integridad Referencial:** Se definieron restricciones transaccionales rígidas con borrados en cascada (`ondelete='CASCADE'`) para las entidades vinculadas a las huellas de las personas y minucias, y restricciones de bloqueo (`ondelete='RESTRICT'`) para las tablas maestras de la clasificación dactiloscópica (Vucetich). ### B. Corrección de la Arquitectura de Fábrica de Comandos (CLI) Se depuró un bucle de reinicios críticos en el contenedor del backend (`huellas_api`) causado por excepciones de tipo `ImportError` y `AttributeError` en la consola de comandos Click de Flask. * **Desacople de Comandos:** Se independizó la lógica de la siembra mediante el uso correcto del decorador `@click.command(name="seed")` con contexto de aplicación obligatorio (`@with_appcontext`). * **Sincronización de Contexto:** Se reestructuró el archivo unificado de inicio de la API (`api/run.py`), garantizando que la extensión de migraciones (`Migrate`) y el ORM se enlacen directamente sobre la instancia viva de la aplicación mediante `db.init_app(app)`. ### C. Sembrado Automatizado de Datos Periciales (Seeders) Se desarrolló un script de siembra transaccional estricto que inyecta de forma secuencial y limpia los registros originales del dump en el motor Postgres: 1. **Tablas Maestras Primarias:** Alta de Roles (Investigadores/Admin) y Usuarios del laboratorio. 2. **Entidades Maestras Biométricas:** Registro de Personas, Catálogo de Orígenes de Captura (Lado de la mano e índice correspondiente) y Tipos Fundamentales Dactilares (Arco, Presilla Interna, Presilla Externa, Verticilo). 3. **Subtablas y Pivotes Espaciales:** Subclasificaciones papiloscópicas, catálogo de minucias (Bifurcaciones, finales de cresta) y el mapeo trigonométrico exacto de las huellas de prueba con sus respectivas coordenadas $(X, Y)$ y ángulos de inclinación. ### D. Rediseño Estético Forense de la Interfaz (Login.vue) Se mejoró la experiencia visual del panel de autenticación de investigadores implementando: * **Acoplamiento de Inputs:** Integración de componentes `` usando iconos vectoriales nativos (candados y usuarios) que interactúan de forma unificada (`:focus-within`) cambiando de color institucional cuando el analista escribe. * **Marca de Agua Biométrica Nativa:** Se inyectó una huella dactilar forense en formato SVG embebido directamente por CSS a través de un pseudo-elemento (`::before`), configurada con **relleno gris intermedio y contornos negros puros definidos**, generando un relieve de alto contraste detrás del formulario que simula un entorno de software pericial de alta seguridad. ### E. Resolución del Protocolo de Red Cruzada (CORS y 404 REST) El Frontend (puerto `:8080`) sufría bloqueos de seguridad del navegador al consultar la API (puerto `:5000`). Se solucionó implementando un esquema defensivo en el backend: * **Interceptor de Preflight Checks:** Se agregó un interceptor doble (`@app.before_request` y `@app.after_request`) que captura las peticiones de control de tipo `OPTIONS` enviadas por Axios y responde de inmediato con un código `200 OK` limpio con las cabeceras requeridas. * **Normalización de Prefijos REST:** Se reestructuró el ruteo unificado en `run.py`, eliminando los trayectos duplicados de los Blueprints (`/users/users`, `/roles/roles`) y organizando toda la API bajo un prefijo estándar limpio colgando de `/api/auth`, `/api/users` y `/api/roles`. --- ## 3. Arquitectura del Archivo de Configuración (`.env`) El sistema opera mediante un único archivo de variables de entorno centralizado en la raíz del proyecto para asegurar la consistencia entre contenedores: ```env # --- ENTORNO GENERAL --- PROJECT_NAME=huellas_investigacion FLASK_ENV=development NODE_ENV=development # --- BASE DE DATOS (POSTGRESQL) --- POSTGRES_USER=admin POSTGRES_PASSWORD=secretpassword_2026_x8 POSTGRES_DB=huellas_investigacion POSTGRES_PORT=5432 POSTGRES_HOST=db # --- BACKEND (API FLASK) --- FLASK_PORT=5000 JWT_SECRET_KEY=laravel_style_jwt_secret_token_scientific_2026 DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} # --- FRONTEND (VUE 3 + VITE) --- VITE_PORT=8080 VITE_API_BASE_URL=http://localhost:5000/api