# Operación y pruebas

## Requisitos

- Node.js 22.13 o superior; se recomienda Node.js 24 LTS.
- Navegador moderno.
- Permiso de escritura en la carpeta del proyecto.
- Red Wi-Fi de confianza para acceso desde iPhone o iPad.

## Iniciadores

| Entorno | Archivo | Resultado |
| --- | --- | --- |
| Windows local | `INICIAR_NEXOCAJA.bat` | Demo en `127.0.0.1:4174` |
| Windows demo alternativo | `INICIAR_NEXOCAJA_DEMO.bat` | Demo en `127.0.0.1:4174` |
| macOS local | `INICIAR_NEXOCAJA_MAC.command` | Demo en `127.0.0.1:4174` |
| iPhone o iPad con Windows | `INICIAR_NEXOCAJA_IPHONE_IPAD.bat` | Acceso por IP local |
| iPhone o iPad con Mac | `COMPARTIR_NEXOCAJA_IPHONE_IPAD.command` | Acceso por IP local |

En macOS puede ser necesario ejecutar una sola vez:

```bash
chmod +x INICIAR_NEXOCAJA_MAC.command COMPARTIR_NEXOCAJA_IPHONE_IPAD.command
```

## Ejecución manual

```powershell
npm start
```

El servidor manual usa `127.0.0.1:4173` y la carpeta `data`. Para desarrollo:

```powershell
npm run dev
```

## Base de datos y respaldo

- Base normal: `data/nexocaja.sqlite`.
- Base demo: `data-demo/nexocaja.sqlite`.

Para respaldar, detener el servidor y copiar el archivo SQLite junto con cualquier archivo `-wal` o `-shm` presente. Para una restauración, mantener el servidor apagado y reemplazar el conjunto completo.

La ubicación puede cambiarse mediante `NEXOCAJA_DATA_DIR`. No usar una variable genérica del sistema para este fin.

## Pruebas automatizadas

```powershell
npm test
```

## Paquete para un subdominio

```powershell
npm run build:host
```

El comando reconstruye `dist/NexoCaja-hosting` desde una lista permitida. El paquete contiene el servidor y la interfaz, pero no incluye `data`, `data-demo`, el módulo ni las credenciales de demostración, pruebas ni documentación interna. La guía completa se mantiene en `README_HOSTING.md` y se copia como `LEEME_PRIMERO.md` dentro del artefacto.

El proveedor debe ofrecer Node.js 22.13 o superior, HTTPS, un proceso persistente y almacenamiento escribible. El archivo de inicio es `app.js`; `/api/health` permite comprobar servidor y acceso a SQLite sin exponer datos. La URL debe corresponder a la raíz del subdominio. Un hosting exclusivo de WordPress/PHP no es suficiente.

Variables mínimas de producción: `NODE_ENV=production`, `NEXOCAJA_DEMO=0` y `NEXOCAJA_DATA_DIR` apuntando a una carpeta persistente preferentemente fuera del directorio público. El panel debe proporcionar `PORT`; `HOST` solo se define si el proveedor lo exige.

## Coordinación entre agentes

Antes y después de una intervención, cada agente consulta su bandeja. La validación de mensajes se incorpora al cierre técnico:

```powershell
npm run inbox -- NombreDelAgente
npm run coord:check
```

El protocolo y los estados están en `coordinacion/README.md`.

Los casos actuales comprueban roles y privacidad, modo demo, amortización con tasa positiva, crédito con tasa cero, política 40/20/20/20, arrastre del crédito fiscal de IGV y recuperación ante una política inválida.

## Verificación antes de entregar un cambio

```powershell
node --check public/app.js
node --check public/spreadsheet.js
node --check src/server.js
npm test
```

Después de las pruebas automáticas, revisar manualmente el flujo afectado. Para cambios de interfaz comprobar una vista de escritorio y una vista móvil. Para importaciones comprobar archivo válido, encabezado faltante, duplicado y límite de filas.

## Lista breve para una demostración

1. Iniciar el modo demo y mostrar los tres accesos.
2. Entrar como usuario y registrar un ingreso o egreso.
3. Abrir el plan de caja y explicar la proyección mensual.
4. Crear o revisar un crédito y mostrar la fórmula de TEA.
5. Abrir Reportes y cambiar la visualización gráfica.
6. Entrar como gestor y mostrar creación, búsqueda y atención de usuarios.
7. Aclarar que el gestor no puede ver información financiera.

## Incidencias comunes

| Situación | Revisión |
| --- | --- |
| El navegador no abre | Abrir manualmente la URL mostrada por el iniciador |
| El puerto está ocupado | Cerrar otra instancia o usar otro valor de `PORT` |
| No inicia en Mac | Revisar permiso de ejecución y versión de Node.js |
| iPhone no conecta | Confirmar misma Wi-Fi, IP local y permiso de firewall |
| Una cuenta no ingresa | Revisar estado activo, usuario y contraseña del modo correcto |
| La hoja no importa | Usar la plantilla y revisar encabezados, tipos y duplicados |
