69 lines
5.8 KiB
Markdown
69 lines
5.8 KiB
Markdown
# 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 `<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_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 |