From 4f6966a40023cc6142a2791c16e19be221c22dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Elias=20Rios=20Nu=C3=B1ez?= Date: Mon, 1 Jun 2026 10:02:44 -0300 Subject: [PATCH] Documentacion, del proyecto --- documentacion/credenciales.md | 2 + documentacion/informe_reestructuracion.md | 69 +++++++++++++++++++++++ documentacion/inicial.md | 6 ++ 3 files changed, 77 insertions(+) create mode 100644 documentacion/credenciales.md create mode 100644 documentacion/informe_reestructuracion.md create mode 100644 documentacion/inicial.md diff --git a/documentacion/credenciales.md b/documentacion/credenciales.md new file mode 100644 index 0000000..88a2e24 --- /dev/null +++ b/documentacion/credenciales.md @@ -0,0 +1,2 @@ +Usuario : admin_root +Contrseña : admin1234 \ No newline at end of file diff --git a/documentacion/informe_reestructuracion.md b/documentacion/informe_reestructuracion.md new file mode 100644 index 0000000..6b60fb0 --- /dev/null +++ b/documentacion/informe_reestructuracion.md @@ -0,0 +1,69 @@ +# 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 \ No newline at end of file diff --git a/documentacion/inicial.md b/documentacion/inicial.md new file mode 100644 index 0000000..d60bd98 --- /dev/null +++ b/documentacion/inicial.md @@ -0,0 +1,6 @@ +# 1. opcion si ya tenemos el proyecto corriendo en local, que se requiera limpiar lo hecho +docker compose down -v + +# Permisos y ejecución unificada +chmod +x desplegar.sh +./desplegar.sh \ No newline at end of file