5.8 KiB
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_idmutó apersona_cod_id). - Optimización de Almacenamiento Biométrico: Los campos de imágenes dactilares tipo
blobse 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 mediantedb.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:
- Tablas Maestras Primarias: Alta de Roles (Investigadores/Admin) y Usuarios del laboratorio.
- 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).
- 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
<b-input-group>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_requesty@app.after_request) que captura las peticiones de control de tipoOPTIONSenviadas por Axios y responde de inmediato con un código200 OKlimpio 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/usersy/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:
# --- 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