Feat(ADN): Implementado y ejecutado archivar:md para mover Markdowns obsoletos a histórico DB-First

This commit is contained in:
Ricardo Monla
2026-03-10 16:02:03 -03:00
parent 8aa1532396
commit 8d27a8958e
74 changed files with 3195 additions and 2073 deletions
+123
View File
@@ -0,0 +1,123 @@
# P2601 - Proyecto DASUTEN
> Manifiesto de Proyecto | Referencia: [`adn/07_proyectos.md`](../adn/07_proyectos.md)
## Identificación
| Campo | Valor |
| :--- | :--- |
| **Código** | P2601 |
| **Nombre** | Infraestructura y Sistema DASUTEN |
| **Estado** | ⏳ En Ejecución |
| **Inicio** | 23/02/2026 |
| **Fin Estimado** | Por definir |
## Objetivo
**DASUTeN** (Departamento de Acción Social Universitaria Tecnológica Nacional) es la obra social de empleados, docentes y alumnos de la Universidad Tecnológica Nacional. Si bien cuenta con una oficina en la Facultad Regional La Rioja, depende directamente de su **sede central en el Rectorado (Buenos Aires)**.
Actualmente, el sistema de gestión administrativa de DASUTeN funciona dentro de los servidores de la Facultad. El objetivo de este proyecto es **migrar el sistema a un servidor independiente** (`srv-dasu`) aislado de la red académica, de modo que:
1. La **PC física de la oficina** (`pc-dasu0`) consuma el sistema directamente desde el nuevo servidor.
2. La infraestructura quede **autocontenida** dentro de la oficina DASUTeN: una PC cliente + un servidor con sus VMs (DC, SQL, y a futuro posibles servicios adicionales).
3. Se logre **independencia operativa** respecto a los servidores de la Facultad, facilitando la gestión desde Rectorado si fuera necesario.
## Stakeholders
| Rol | Persona | Visibilidad |
| :--- | :--- | :--- |
| **Responsable Técnico** | Lic. Ricardo MONLA | Operador directo |
| **Dirección de TIC** | (Jerárquico superior) | Dashboard asíncrono |
## Dashboard
- **URL**: `https://ns8.frlr.utn.edu.ar/P2601/`
- **Tipo**: Aplicación web estática (HTML/JS/CSS) servida por Nginx.
- **Métricas**: Timeline de hitos, barras de progreso, desglose Físico/Remoto por hito.
- **Actualización**: Las métricas se alimentan de las etiquetas `[Físico/Remoto: H:MM hs]` parseadas de las bitácoras.
### Nodos Exclusivos (Core DASUTEN)
| Nodo | IP | Rol en el Proyecto |
| :--- | :--- | :--- |
| [**srv-dasu**](../nodos/srv-dasu.md) | `10.0.10.205` | Hipervisor Proxmox VE (Libre de red académica) |
| **dc-dasuten** (VM 100) | `10.0.100.10` | Controlador de Dominio AD DS + DNS |
| **sql-dasuten** (VM 101) | `10.0.100.11` | Motor SQL Server 2019 (Core) |
| **pcv-dasu0** (VM 102) | `10.0.100.12` | VM de pruebas (Win 10 LTSC) |
| [**pc-dasu0**](../nodos/pc-dasu0.md) | Oficina DASUTeN | PC física cliente (Nodo final destino) |
### Nodos de Soporte e Infraestructura
| Nodo | IP | Rol en el Proyecto |
| :--- | :--- | :--- |
| [**srv-ns8**](../nodos/srv-ns8.md) | `10.0.10.8` | Gestión central, GIT y Dashboard |
## Herramientas
| Herramienta | Uso |
| :--- | :--- |
| **Proxmox VE 9.1** | Virtualización y gestión de VMs |
| **Windows Server 2022 Core** | SO base para DC y SQL |
| **SQL Server 2019** | Motor de base de datos relacional |
| **OpenSSH** | Administración remota nativa de VMs Windows |
| **VZDump** | Resguardos offline de VMs |
| **Dashboard P2601** | Panel web de seguimiento para stakeholders |
## Hitos Clave
| Fecha | ID | Estado | Hito |
| :--- | :--- | :---: | :--- |
| 23/02 | A00-A01 | ✅ | Acondicionamiento hardware e instalación de Proxmox VE en `srv-dasu`. |
| 23/02 | A05 | ✅ | Creación de VM Windows Server Core y descarga de ISO. |
| 24/02 | A05 | ✅ | Habilitación SVM en BIOS, instalación de OS, promoción a DC (`dc-dasuten`). |
| 24/02 | A06 | ✅ | Despliegue del Dashboard P2601 con telemetría operativa. |
| 25/02 | DB01 | ✅ | Creación de VM `sql-dasuten`, instalación de OS, integración al dominio e instalación de SQL Server 2019. |
| 26/02 | SSH | ✅ | Despliegue de OpenSSH Server nativo en ambas VMs Windows. |
| 26/02 | BKP | ✅ | Resguardo VZDump offline (stop mode) de DC y SQL. |
| 27/02 | ADN | ✅ | Refactorización del ADN a arquitectura multi-hebra con Armonía Integral. |
| 27/02 | TEST | ✅ | Despliegue de VM de pruebas Win 10 LTSC (pcv-dasu0). Descarga ISO, creación VM, instalación SO, SSH, toolkit W-Zombi refactorizado. |
| 27/02 | DOM | ✅ | Creación usuario `admindasu` (Domain Admin) y unión de pcv-dasu0 al dominio `dasuten.utnlr`. Login verificado. |
| — | P02 | 📍 | Instalación del sistema DASUTEN sobre el motor SQL. |
| — | S02 | 📍 | Hardenización SSH (llaves, passphrases, auditoría). |
| — | MIG | 📍 | Migración de datos del sistema actual a la nueva infraestructura. |
| — | CLI | 📍 | Configuración final de `pc-dasu0` como cliente del dominio `dasuten.utnlr`. |
## 🌐 Topología y Contexto de Red
**Regla de Acceso (Agentes e IA):** Todo el ecosistema central (dc-dasuten, sql-dasuten, pcv-dasu0) transcurre en la **subred aislada `10.0.100.0/24`**. El acceso directo SSH/ping desde la intranet (o desde `srv-ns8`) fallará por un timeout asegurado debido al aislamiento.
**Vía Tailscale (Nuevo Estándar):** El hipervisor `srv-dasu` (`10.0.10.205`) tiene instalado Tailscale y está configurado como **Subnet Router** para la red `10.0.100.0/24`. Desde cualquier nodo o IA en la Tailnet (ej. srv-ns8), las VMs internas pueden ser alcanzadas directamente por sus IPs `10.0.100.x` a través de la VPN sin necesidad de ProxyJump.
**Vía SSH Clásico:** En caso de no contar con Tailscale, es imperativo configurar un salto (ProxyJump) a través de `10.0.10.205`.
## Arquitectura de Red
```
┌────────────────────────────────────────────────────────┐
│ Red Facultad (10.0.10.x) │
│ │
│ srv-ns8 (.8) srv-dasu (.205) │
│ [Tailscale VPN] [Tailscale Subnet Router] │
│ └─────────────────────────┘ │
│ │ │
│ │ NAT/VPN Routing │
│ ▼ │
│ ┌──────────────┐ │
│ │ 10.0.100.x │ │
│ │ (Aislada) │ │
│ │ │ │
│ │ dc-dasuten │ │
│ │ (.10) [AD DS]│ │
│ │ │ │
│ │ sql-dasuten │ │
│ │ (.11) [SQL] │ │
│ │ │ │
│ │ pcv-dasu0 │ │
│ │ (.12) [Test] │ pc-dasu0 │
│ └──────────────┘ [Cliente] │
└────────────────────────────────────────────────────────┘
```
## Referencias
- **Bitácoras**: [23/02](../bitacoras/2026-02-23.md) | [24/02](../bitacoras/2026-02-24.md) | [25/02](../bitacoras/2026-02-25.md) | [26/02](../bitacoras/2026-02-26.md) | [27/02](../bitacoras/2026-02-27.md)
- **ADN**: [Ontología](../adn/01_ontologia.md) | [Proyectos](../adn/07_proyectos.md)
- **Nodos**: [srv-dasu](../nodos/srv-dasu.md) | [srv-ns8](../nodos/srv-ns8.md)
@@ -0,0 +1,106 @@
# Plan de Migración: Solo Bitácoras Web (P2605)
## 🎯 Objetivo
Dejar de editar manualmente archivos `.md`. La Web y los comandos ADN escriben en la DB; el `.md` se genera automáticamente como respaldo.
---
## 📋 Secuencia Lógica de Hitos
> La numeración refleja dependencias reales: cada hito requiere los anteriores.
### Etapa A — La Web puede reemplazar al MD (Entrada de datos)
Sin esto, seguís dependiendo del archivo para registrar actividad.
| # | Hito | Qué resuelve | Estado |
| :---: | :--- | :--- | :---: |
| A1 | **Esquema DB: gestion + resumen_nodos** | Tablas para Pendientes, En Proceso y Resumen Integral | ✅ |
| A2 | **API: endpoints gestion y resumen** | Backend para crear/editar/eliminar desde la Web | ✅ |
| A3 | **UI: Panel de Gestión** | Editar Pendientes y En Proceso desde el Dashboard | ✅ |
| A4 | **UI: Editor Resumen Integral** | Editar resumen por nodo desde el Dashboard | ✅ |
| A5 | **UI: Formulario de Entradas** | Crear entradas I-F-D-E desde la Web | ✅ |
| A6 | **Rollover automático** | Pendientes activos pasan al día siguiente (vía `activo=true`) | ✅ |
**Resultado:** La Web ya puede hacer todo lo que antes se hacía a mano en el MD.
---
### Etapa B — Los comandos ADN hablan con la DB (Automatización)
Sin esto, `adn inicio` y `adn cierre` siguen escribiendo en el `.md`.
| # | Hito | Qué resuelve | Estado |
| :---: | :--- | :--- | :---: |
| B1 | **Refactor inicio.rb → DB-First** | `adn inicio de jornada` escribe en DB, no en MD | ✅ |
| B2 | **Refactor cierre.rb → DB-First** | `adn cierre de jornada` escribe en DB, no en MD | ✅ |
| B3 | **Refactor backup → DB** | Registrar eventos de backup como entradas en DB | ✅ |
**Resultado:** Los comandos del enjambre ya no tocan archivos `.md`.
---
### Etapa C — El MD se genera desde la DB (Respaldo)
Recién ahora tiene sentido generar el MD, porque la DB **ya es** la fuente de verdad.
| # | Hito | Qué resuelve | Estado |
| :---: | :--- | :--- | :---: |
| C1 | **Exportador Ruby: md_exporter.rb** | `adn db exportar:md FECHA` genera el MD desde la DB | ✅ |
| C2 | **Exportación masiva** | `adn db exportar:md --todo` regenera todos los MDs | ✅ |
**Resultado:** Los archivos `.md` son un producto generado, no una fuente de entrada.
---
### Etapa D — Verificación y cierre (Confianza)
Asegurar que no se perdió nada en la transición.
| # | Hito | Qué resuelve | Estado |
| :---: | :--- | :--- | :---: |
| D1 | **Migración histórica** | `adn db migrar:md --todo` importa todo el historial | ✅ |
| D2 | **Verificación de cobertura** | `adn db verificar` audita MD ↔ DB | ✅ |
| D3 | **Desactivar edición manual de MDs** | Header `<!-- GENERADO AUTOMÁTICAMENTE -->` en MDs exportados | ✅ |
---
## 🐝 Herramientas del Enjambre ADN
```
# Flujo diario (DB-First)
./tools/adn/run inicio de jornada presencial|remoto
./tools/adn/run cierre de jornada presencial|remoto
# Importar MD existente → DB
./tools/adn/run db migrar:md FECHA [--sobrescribir]
./tools/adn/run db migrar:md --todo [--sobrescribir]
# Exportar DB → MD (respaldo)
./tools/adn/run db exportar:md FECHA
./tools/adn/run db exportar:md --todo
# Auditoría
./tools/adn/run db verificar
./tools/adn/run db estadisticas
```
---
## 📊 Estado Actual — COMPLETO ✅
**Ya no es necesario editar MDs manualmente.** Todas las etapas están completas.
| Etapa | Progreso |
| :--- | :---: |
| A — Web reemplaza al MD | 6/6 ✅ |
| B — ADN habla con DB | 3/3 ✅ |
| C — MD se genera desde DB | 2/2 ✅ |
| D — Verificación y cierre | 3/3 ✅ |
### Notas
- Cobertura de migración: 88.9% (16/18 bitácoras con entradas). Las 2 restantes son días sin actividades detalladas.
- Selector "Modo de Jornada" en la UI queda como mejora futura (no bloquea el flujo actual).
---
<!-- 🤖 PREMISAS DE TRABAJO (IA): Fuente de Verdad → adn/05_ia.md -->