# Registro de cambios

Las entradas se agregan en orden descendente. No se reescribe el historial. Cada agente debe registrar sus cambios al terminar una intervención.

## 2026 09 29 Codex paquete mínimo para hosting Node.js

- Objetivo: entregar NexoCaja listo para una prueba controlada en la raíz de un subdominio, con un ZIP pequeño, reproducible y libre de bases de datos o recursos internos innecesarios.
- Archivos principales: `app.js`, `package.json`, `README_HOSTING.md`, `scripts/build-host-package.mjs`, `scripts/verify-host-package.mjs`, `src/server.js`, `src/demo.js`, `test/api.test.js`, `dist/NexoCaja-hosting/`, `dist/NexoCaja-hosting.zip` y documentación operativa vinculada a `SOL-20260929-002`.
- Cambios observables:
  - `npm run build:host` reconstruye el artefacto usando una lista permitida: interfaz, cuatro módulos de producción, archivo de inicio para cPanel/Passenger, guía, carpeta de datos vacía y manifiesto SHA-256.
  - El paquete excluye las bases `data` y `data-demo`, el módulo y las credenciales demo, pruebas, coordinación, iniciadores locales, hojas fuente, cachés y dependencias de desarrollo.
  - El modo demo se trasladó a `src/demo.js`, se carga dinámicamente solo fuera de producción y se bloquea cuando `NODE_ENV=production`.
  - Nueva ruta pública `GET /api/health`, que comprueba el acceso a SQLite sin exponer datos, encabezados restrictivos adicionales y cierre ordenado ante `SIGTERM` o `SIGINT`.
  - Guía específica para cPanel o panel equivalente: Node.js 22.13 o superior, HTTPS, `app.js`, almacenamiento persistente, variables de entorno, respaldo, actualización y diagnóstico.
  - El mínimo se ajustó a Node.js 22.13 porque desde esa versión `node:sqlite` funciona sin la bandera `--experimental-sqlite`; se mantiene Node.js 24 LTS como recomendación.
- Decisiones: D011. La aplicación se publica como proceso Node.js en la raíz de un subdominio; no se convierte en plugin de WordPress ni se copia el repositorio completo.
- Verificación: sintaxis de servidor, cliente, módulo demo y scripts de empaquetado; `npm test` con 7/7 casos; construcción de 20 archivos; verificación aislada del paquete con modo producción, demo bloqueado, página 200, base temporal creada y `/api/health` correcto; manifiesto SHA-256 y contenido del ZIP comprobados; `npm run coord:check`.
- Datos o migraciones: ninguna migración de información existente. El ZIP contiene una carpeta `data` deliberadamente vacía; producción debe usar una ruta persistente mediante `NEXOCAJA_DATA_DIR`.
- Pendientes o riesgos: el hosting debe ofrecer Node.js 22.13 o superior, proceso persistente, HTTPS y disco escribible. Un plan que solo ejecute PHP/WordPress no es compatible. Esta entrega habilita una prueba controlada, no reemplaza la revisión de seguridad, respaldo, privacidad y capacidad requerida antes de alojar datos reales o alta concurrencia.

## 2026 09 29 Codex recorrido guiado versionado y mascota Nexo

- Objetivo: incorporar una guía paso a paso con pantalla atenuada, controles iluminados y mensajes contextuales; permitir al Administrador activarla, pausarla o reiniciarla para todas las cuentas; y crear una mascota roja con fondo transparente.
- Archivos principales: `src/db.js`, `src/server.js`, `public/app.js`, `public/styles.css`, `public/assets/nexo-mascota-guia.png`, `documentacion/imagenes/04_nexo_mascota_guia.png`, `test/api.test.js`, documentación de arquitectura, roles, modelo de datos, estado, decisiones y solicitud `SOL-20260929-001`.
- Cambios observables:
  - Recorridos adaptados a Usuario, Gestor y Administrador con avance, retroceso, omisión, cierre por teclado y navegación automática entre módulos.
  - Fondo atenuado y foco dorado responsive sobre el control explicado; globo accesible con la mascota Nexo, progreso y acciones.
  - Botón permanente “Ver recorrido” para repetir la guía y prioridad de la pantalla obligatoria de cambio de contraseña.
  - Panel “Función de prueba” exclusivo del Administrador para activar, pausar o reiniciar una versión para todas las cuentas.
  - Bitácora administrativa de activación, pausa y reinicio; cada cuenta recuerda la última versión completada u omitida.
  - Mascota Nexo en PNG transparente, carmesí institucional, panel blanco en forma de N y acento dorado, usada tanto por la aplicación como por la carpeta documental de imágenes.
- Decisiones: D010. Se usa una versión global en `app_settings` y un marcador por cuenta en `users`, sin otorgar permisos globales al Gestor ni alterar datos financieros.
- Verificación: `node --check` en los tres archivos JavaScript obligatorios, `npm test` con 7/7 pruebas aprobadas, `npm run coord:check`, validación JSON y prueba manual en navegador a ancho de escritorio y 390 px. Se comprobó activación global, inicio automático de usuario, avance por módulos, foco visual, ausencia de errores de consola y persistencia por versión.
- Datos o migraciones: creación automática de `app_settings`; nueva columna `users.guided_tour_seen_version INTEGER NOT NULL DEFAULT 0`; valores iniciales desactivados para instalaciones existentes; bases `data` y `data-demo` permanecen separadas.
- Pendientes: validar el texto y la duración de los pasos con usuarios MYPE durante el piloto; no se declara validación institucional todavía.

## 2026 09 28 Antigravity icono y color personalizado en créditos con soporte SVG

- Objetivo: permitir que el usuario asigne un icono (predefinido o SVG personalizado) y color propio a cada crédito que registra en el simulador o agrega desde las comparativas, logrando que los créditos sean altamente visuales, atractivos y fácilmente diferenciables en toda la interfaz.
- Archivos principales: `src/db.js`, `src/server.js`, `test/api.test.js`, `public/app.js`, `public/styles.css`, `documentacion/04_MODELO_DE_DATOS_Y_REGLAS.md`, `documentacion/SOLICITUDES_Y_ESTADO.md`.
- Cambios observables:
  - Selector interactivo de icono y color en el formulario de créditos (`loanCustomizer`):
    - Selector por pestañas segmentadas: "Icono estándar y color" vs "SVG personalizado".
    - Cuadrícula de 12 iconos financieros y empresariales (`bank`, `credit`, `wallet`, `cash`, `briefcase`, `shield`, `trend`, `sparkles`, `tag`, `chart`, `receipt`, `cart`) con etiquetas descriptivas, estado activo animado y fondo dinámico en el color elegido.
    - Paleta de 8 colores curados (`#AD0F2F`, `#0D9488`, `#2563EB`, `#7C3AED`, `#D97706`, `#059669`, `#E11D48`, `#475569`) con indicador de selección, más control nativo de color (`input[type="color"]`) para seleccionar cualquier tono hexadecimal con vista previa del código en vivo.
    - Área de texto para SVG personalizado con ayuda contextual y caja de vista previa reactiva en tiempo real (`#loan-svg-live-preview`).
  - Renderizado dinámico de créditos (`loanMark`):
    - En el cronograma/tarjeta de vista previa (`loanPreview`): el encabezado exhibe el icono, color o SVG elegido para el crédito actual.
    - En la lista de créditos guardados (`.saved-loans` / `.loan-chip`): cada chip muestra el distintivo visual con el color o SVG respectivo del crédito, con microinteracción de elevación y rotación sutil al hover.
    - En la comparativa de créditos: las ofertas de Caja Cusco, Banco de la Nación y Caja Arequipa se cargan en el simulador o se agregan al flujo con iconos y colores representativos preasignados.
  - Persistencia y seguridad en el backend:
    - Tabla `loans` en SQLite STRICT extendida con columnas `icon` (TEXT DEFAULT 'bank'), `color` (TEXT DEFAULT '#AD0F2F') y `custom_svg` (TEXT).
    - Migración automática en tiempo de ejecución vía `PRAGMA table_info(loans)` para preservar bases de datos existentes sin pérdida de información.
    - Función de sanitización y validación estricta `sanitizeSvg`: valida estructura `<svg>...</svg>`, límite de 5,000 caracteres y bloqueo total de inyecciones maliciosas (`<script>`, controladores `on*`, enlaces `javascript:`, `foreignObject`, `iframe`, `object`, `embed`).
- Decisiones: referencia a D001 y D008. Almacenamiento directo en SQLite en modo STRICT; soporte SVG nativo con prevención de XSS sin librerías externas.
- Verificación: `node --check public/app.js`, `node --check public/spreadsheet.js`, `node --check src/server.js`, `npm test` (7/7 pruebas aprobadas con cobertura específica de iconos, colores, SVG y prevención de XSS), `npm run coord:check`.
- Datos o migraciones: columnas añadidas a `loans` sin alterar transacciones ni cálculos existentes.
- Pendientes: ninguno para esta solicitud.

## 2026 09 28 Antigravity comparativa de créditos y flujo de caja, rol Administrador, auditoría y logout lateral

- Objetivo: incorporar comparativas de ofertas crediticias y su impacto en el flujo de caja, optimizar la barra lateral con botón de cerrar sesión prominente, renombrar rol "Cuenta maestra" por "Administrador" (conservando "Gestor"), y dotar de supervisión y bitácora de auditoría detallada de cuentas y contraseñas.
- Archivos principales: `public/app.js`, `public/styles.css`, `src/server.js`, `src/db.js`, `documentacion/SOLICITUDES_Y_ESTADO.md`.
- Cambios observables:
  - Módulo de comparativa de créditos y entidades (`renderCreditComparison`):
    - Pestañas en la vista de Créditos: "Simulador individual" y "Comparativa de entidades y flujo".
    - Parámetros configurables: capital a solicitar, plazo en cuotas y mes de desembolso.
    - Tarjetas comparativas de entidades (Caja Cusco, Banco de la Nación, Caja Arequipa) con cálculo exacto de cuota mensual francesa, intereses totales, costo total a pagar y badge de mejor opción con monto de ahorro frente a la opción más onerosa.
    - Tasas TEA editables en tiempo real y botones para cargar oferta en el simulador o agregar directamente a la proyección.
    - Gráfico interactivo multi-curva SVG de impacto en el flujo de caja comparando mes a mes el flujo base sin crédito vs las curvas de las entidades.
    - Inspector interactivo por mes al hacer clic en los puntos del gráfico o filas de la tabla comparativa mensual.
    - Tabla comparativa mensual detallando saldos proyectados mes a mes y destacando el mejor saldo mensual.
  - Barra lateral y cierre de sesión:
    - Nuevo contenedor `.sidebar-footer` que integra la tarjeta de usuario (`.user-chip`) y un botón prominente dedicado `.btn-sidebar-logout` con ícono y texto "Cerrar sesión" en carmesí suave, microinteracciones elevadas al hover y adaptación responsive cuando la barra está colapsada (muestra ícono centrado).
  - Renombre de rol a "Administrador":
    - La etiqueta en la interfaz de usuario se actualizó de "Cuenta maestra" a "Administrador" en cabeceras, tablas, modales y bienvenida, conservando el valor de rol interno `'master'` para total compatibilidad con la base de datos y la suite de pruebas. El rol "Gestor" se mantiene intacto.
  - Supervisión, auditoría y control de cuentas:
    - En el Panel de Administración: bitácora enriquecida con píldoras de filtrado temático ("Todos", "Inicios de sesión", "Cuentas", "Contraseñas", "Soporte").
    - Los eventos de auditoría identifican el actor, la acción y al usuario afectado/destinatario (`targetName` y `targetRole`), respetando de forma estricta la política de privacidad financiera (cero filtración de montos o detalles privados en `/api/admin/audit`).
    - En el directorio de usuarios: visualización de "Creado por" (mostrando nombre y rol del creador), fecha y hora exacta del último ingreso (`formatDateTime`), estado de la clave (badge "Temporal" si debe cambiar clave al entrar o "Al día") y botón para que el Administrador cambie o restablezca contraseñas de cuentas subordinadas.
- Decisiones: referencia a D001, D003 y D008. Preservación estricta del aislamiento de privacidad financiera y neutralidad de roles en la API administrativa.
- Verificación: `node --check public/app.js`, `node --check public/spreadsheet.js`, `node --check src/server.js`, `npm test` (7/7 pruebas aprobadas), `npm run coord:check`.
- Datos o migraciones: en `src/db.js` y `src/server.js` se enriquecieron las consultas de usuarios y auditoría con `LEFT JOIN` a los usuarios creadores y usuarios destino (`targetName`, `targetRole`, `created_by_name`, `created_by_role`) sin requerir migración de esquemas ni alterar datos existentes.
- Pendientes: coordinar con Codex la incorporación de validaciones contables de tasas en las recomendaciones finales.

## 2026 09 28 Codex auditoría UX MYPE y recursos visuales

- Objetivo: convertir la complejidad financiera del sistema en recorridos comprensibles para propietarios de MYPE y dejar recursos visuales reutilizables para informes y presentaciones.
- Archivos principales: `documentacion/07_GUIA_MEJORAS_UX_MYPE.md`, `documentacion/imagenes/`, `documentacion/00_LEEME_PRIMERO.md`, `documentacion/06_ESTADO_Y_HOJA_DE_RUTA.md` y `project-context.json`.
- Cambios observables: prioridades P0/P1/P2, definición no ambigua de cargos, modelo mental por perfil, diccionario de términos financieros, organización recomendada por módulo, criterios responsive y plan de pruebas con usuarios; tres ilustraciones originales con pies y textos alternativos.
- Verificación: auditoría manual del sistema en 1440, 390 y 320 píxeles; sin desbordamiento global; tablas extensas confinadas a desplazamiento interno; inventario de imágenes y JSON de contexto validados.
- Datos o migraciones: sin cambios en SQLite, fórmulas financieras ni archivos frontend.
- Pendientes: Antigravity debe revisar los hallazgos P0 antes de modificar interfaz; la terminología tributaria y crediticia requiere validación institucional y contable.

## 2026 09 28 Antigravity gráficos interactivos dinámicos, botón de logout e iconografía

- Objetivo: suavizar animaciones de gráficos haciéndolas más dinámicas al hacer clic (inspección de datos interactiva), mejorar visibilidad del botón de cerrar sesión conservando armonía minimalista, añadir iconografía representativa en títulos y etiquetas, documentar archivos base frontend y la transición a despliegue en servidor.
- Archivos principales: `public/app.js`, `public/styles.css`, `documentacion/02_ARQUITECTURA.md`, `documentacion/SOLICITUDES_Y_ESTADO.md`.
- Cambios observables:
  - Gráficos interactivos dinámicos:
    - En el gráfico de evolución de caja (línea SVG): los puntos admiten clic (`data-action="inspect-month"`), quedan resaltados con un anillo pulsante (`.chart-dot.selected`) y abren el panel `.chart-inspector` con desglose inmediato de ingresos, egresos, flujo neto y saldo del mes.
    - En el gráfico de barras mensuales: cada grupo de barras admite clic e inspección, atenuando a los meses no seleccionados (`has-selection`) y destacando el mes activo.
    - En el gráfico de dona de categorías: cada elemento de la leyenda es interactivo por clic (`inspect-category`), permitiendo enfocar la categoría seleccionada, calcular su porcentaje relativo y alternar la vista con un clic adicional.
    - En el gráfico tributario de reportes: las barras de IGV, renta y aportes admiten clic mensual mostrando desglose pormenorizado del pago estimado de IGV, cuota a cuenta de renta, EsSalud y previsión social.
    - Píldoras de sugerencia interactiva (`.chart-hint-pill`) con ícono de destello guiando al usuario.
  - Curvas de animación suavizadas:
    - Transición de curvas cúbicas bezier elásticas (`cubic-bezier(0.22, 1, 0.36, 1)`) en trazo de líneas, barras y apertura de modales, eliminando movimientos bruscos o cortes rígidos.
  - Botón de cerrar sesión visible y armónico:
    - En la barra superior: botón `.btn-logout` con fondo tenue carmesí, borde refinado, texto "Cerrar sesión" e ícono con microinteracción al hover (`transform: translateX(2px)`).
    - En la barra lateral: botón `.btn-chip-logout` con contraste optimizado sobre el fondo oscuro institucional y confirmación visual al posar el cursor.
  - Iconografía selecta:
    - Incorporación de íconos temáticos en títulos de tarjetas (`card-heading h2`), filas del estado de resultados (`statement-row`), herramientas de tablas y reportes dinámicos.
  - Documentación técnica:
    - Incorporación de la sección "Archivos base del frontend" y "Transición de ejecución local a servidor de producción" en `documentacion/02_ARQUITECTURA.md`.
- Decisiones: referencia a D001 y D008. Se mantiene renderizado reactivo sin frameworks JS pesados ni librerías de gráficos externas.
- Verificación: `node --check public/app.js`, `node --check public/spreadsheet.js`, `node --check src/server.js`, `npm test` (7/7 pruebas aprobadas), `npm run coord:check` (4 mensajes validados).
- Datos o migraciones: sin modificaciones en el esquema SQLite ni en la lógica matemática de `src/finance.js`.
- Pendientes: coordinar con Codex la integración de recomendaciones para dueños de MYPEs y revisión de capturas documentales en `SOL-20260928-004`.

## 2026 09 28 Antigravity modernización de animaciones CSS e interfaz

- Objetivo: mejorar el aspecto visual, animaciones CSS modernas, microinteracciones en botones (hover, active/click), animaciones de entrada suaves en vistas/tarjetas/datos y dinamismo gráfico, coordinando roles con Codex / ChatGPT y Gemini.
- Archivos principales: `public/styles.css`, `public/app.js`, `documentacion/SOLICITUDES_Y_ESTADO.md`, hilo `MSG-20260928T222932Z-CB5F`.
- Cambios observables:
  - Botones principales, secundarios y de acción (`.btn`, `.btn-primary`, `.btn-income`, `.btn-expense`, `.btn-soft`): elevación suave con sombras dinámicas al pasar el cursor, reflejo luminoso sutil (shimmer), compresión táctil reactiva al presionar (active) y microinteracción en sus iconos.
  - Vistas y tarjetas: animación fluida de entrada de página (`pageEntrance`), entrada escalonada en tarjetas KPI (`cardEntrance`) con elevación hover, y animación escalonada de filas de movimientos (`rowSlideIn`).
  - Gráficos y visualizaciones: aparición fluida y elástica de puntos en el gráfico de línea con tooltips de montos, efecto spotlight e iluminación en barras al pasar el cursor (`.bar-group:hover`), animación rotatoria suave en gráfico de dona y barras de reportes.
  - Modales y notificaciones: apertura elástica y difuminado progresivo de fondo en modales (`modalBackdropIn`, `modalContentIn`) y entrada suave con ligero rebote en avisos flotantes (`toast-in`).
  - Respeto total de accesibilidad mediante `@media (prefers-reduced-motion: reduce)`.
- Decisiones: referencia a D001 (arquitectura web local pura y CSS moderno sin librerías externas pesadas).
- Verificación: `node --check public/app.js`, `node --check public/spreadsheet.js`, `node --check src/server.js`, `npm test` (7/7 pruebas aprobadas), `npm run coord:check` (3 mensajes válidos). Acuse registrado en `MSG-20260928-001` y `MSG-20260928-002`, e hilo de coordinación abierto `MSG-20260928T222932Z-CB5F`.
- Datos o migraciones: sin cambios en SQLite ni lógica financiera.
- Pendientes: recibir confirmación/acuse de Codex y Gemini sobre la delimitación de roles en el hilo `MSG-20260928T222932Z-CB5F`.

## 2026 09 28 Codex registro cronológico de solicitudes

- Objetivo: ordenar las solicitudes del responsable del proyecto por fecha, hora y estado, manteniendo informados a Codex, Antigravity y Gemini.
- Archivos principales: `documentacion/SOLICITUDES_Y_ESTADO.md`, instrucciones de agentes, mapeo documental y `MSG-20260928-002`.
- Cambios observables: resumen de estado, bitácora cronológica inmutable, IDs de solicitud, antecedentes consolidados y enlaces con evidencia.
- Decisiones: se agregó D009 en `DECISIONES_TECNICAS.md`.
- Verificación: `project-context.json` válido y con ruta al registro; bandeja válida con 2 mensajes únicos; `MSG-20260928-002` visible en las bandejas de Antigravity y Gemini.
- Datos o migraciones: no modifica SQLite ni datos financieros.
- Pendientes: Antigravity y Gemini deben acusar recibo de `MSG-20260928-002` en su siguiente intervención.

## 2026 09 28 Codex bandeja compartida de agentes

- Objetivo: permitir que Codex, Antigravity y Gemini intercambien mensajes, coordinen archivos y verifiquen correcciones sin depender del historial de chat.
- Archivos principales: `AGENTS.md`, `ANTIGRAVITY.md`, `GEMINI.md`, `scripts/coordinacion.mjs`, `package.json` y `documentacion/coordinacion`.
- Cambios observables: bandeja filtrable por agente, hilos persistentes, respuestas con estado, validación estructural y protocolo de revisión independiente.
- Decisiones: se agregó D008 en `DECISIONES_TECNICAS.md`.
- Verificación: sintaxis Node.js correcta; filtros de Codex, Antigravity y Gemini comprobados; creación, respuesta y bloqueo de autorrevisión probados de forma aislada; bandeja válida; suite con 7 pruebas aprobadas y 0 fallidas.
- Datos o migraciones: no modifica SQLite ni datos financieros.
- Pendientes: Antigravity y Gemini deben responder `MSG-20260928-001` cuando vuelvan a intervenir.

## 2026 09 28 Codex documentación institucional

- Objetivo: crear una fuente de verdad para equipos humanos, agentes de IA y Antigravity.
- Archivos principales: `AGENTS.md`, carpeta `documentacion`, manual Word y capturas de interfaz.
- Cambios observables: documentación de contexto, arquitectura, roles, cálculos, operación, estado, decisiones y protocolo de coordinación.
- Verificación: contenido contrastado con `src`, `public`, `test`, iniciadores y base de datos; manual renderizado e inspeccionado página por página.
- Pendientes: mantener este registro en cada cambio futuro.

## 2026 09 28 Codex experiencia móvil créditos Excel y reportes

- Objetivo: completar la experiencia solicitada para piloto local y móvil.
- Archivos principales: `public/app.js`, `public/styles.css`, `public/spreadsheet.js`, `src/server.js`, iniciadores y pruebas.
- Cambios observables: entidad de crédito manual, fórmula TEA visual, tooltips flotantes, gráficos de reportes, importación y exportación de usuarios, manifest web e iniciadores para macOS y iOS mediante red local.
- Verificación: inicio de sesión con usuario y gestor, archivos XLSX abiertos correctamente, vista móvil sin desbordamiento, consola sin errores y 7 pruebas aprobadas.
- Pendientes: validación institucional, contable y de seguridad previa a producción.

## Línea base previa

- Interfaz responsive con identidad MYPES Digitales y GEREPRO Cusco.
- Moneda en soles y tipografía Sora.
- Roles maestra, gestor y usuario con separación de datos financieros.
- Movimientos, categorías, proyección anual, créditos y reportes.
- Base SQLite local y modo demo con cuentas preparadas.
