# Despliegue

El agente toca tres repos. El orden importa: **primero el backend del ERP** (crea el módulo
`SOPORTE_IA` y da el privilegio `SOP_IA_USAR`); sin eso el servicio responde 403 a todos.

| Pieza | Repo / rama | Qué cambia |
|---|---|---|
| Backend del ERP | `novasispy-backend-api`, `pos-dev` (test) / `pos` (prod) | Seed del módulo + migración `20261024200000_soporte_ia_modulo` (todos los planes, suscripciones y perfiles) |
| Servicio del agente | `kdbf23/novasis-soporte-ia`, `main` | Este repo |
| Panel | `novasispy-erp`, `dev` (test) / `main` (prod) | Sección Soporte IA, menú por módulo |

## Test (`facerp.factupy.es`, server 143.198.100.72)

### 0. Antes (una vez)

- DNS: registro **A `soporte-api.factupy.es` → 143.198.100.72**.
- La API key de Anthropic del agente, en el server: `/root/.soporte_anthropic_key` (600). Sin key el
  chat muestra el teléfono de contacto (modo degradado).

### 1. Backend del ERP

Deploy normal de `pos-dev` (ver la memoria del proyecto "Topología server de test"):

```bash
cd /var/www/html/factvoice-erp-api && nvm use 24
git pull && pnpm install && npx prisma migrate deploy && npx prisma generate && pnpm run build
pm2 restart facvoiceerp-api --update-env
```

`migrate deploy` aplica `20261024200000_soporte_ia_modulo`; al arrancar, el seed de seguridad
registra el módulo (ya creado por la migración) y se lo da a los perfiles de sistema.

### 2. Servicio del agente

El server no puede clonar `kdbf23/novasis-soporte-ia` (es privado): se sube con rsync, junto con
el **manual del sistema** (`manual/`, plan §6.9), que se arma local desde las ramas del entorno:

```bash
# desde la máquina local, en este repo
git -C ../frontend fetch && git -C ../backend fetch
pnpm build && pnpm manual:construir -- --frontend ../frontend --frontend-ref origin/dev \
  --backend ../backend --backend-ref origin/pos-dev
# (opcional) capturas y guías paso a paso: desde el frontend, con un usuario de demo,
#   e2e/manual-capturas.real.spec.js (manual/capturas) y e2e/manual-guias.real.spec.js (manual/guias)
rsync -az --delete --exclude .git --exclude node_modules --exclude dist --exclude .env \
  --exclude evals/resultados --exclude logs ./ Servidor_Digital_Ocean_DEV:/var/www/html/novasis-soporte-ia/

# en el server, como root
cd /var/www/html/novasis-soporte-ia
bash deploy/desplegar-servidor.sh novasiserp soporte-api.factupy.es \
  https://facerp.factupy.es /var/www/html/factvoice-erp-api/.env
```

El script es idempotente (ver su encabezado). Corre `verificar.sql` contra la base del ERP:
todo tiene que salir en `t` / `ok:`. Las contraseñas y la clave de la firma quedan en
`/root/.soporte_*` (600).

### 2.b Incidencias en YouTrack (opcional hasta tener el token)

```bash
# en el server: token permanente de un usuario BOT con permiso solo en el proyecto NE
echo 'TOKEN' > /root/.soporte_youtrack && chmod 600 /root/.soporte_youtrack
cd /var/www/html/novasis-soporte-ia
grep -q '^YOUTRACK_URL=' .env || cat >> .env <<FIN
YOUTRACK_URL=https://novasis.youtrack.cloud
YOUTRACK_TOKEN=$(cat /root/.soporte_youtrack)
YOUTRACK_PROYECTO=NE
FIN
pm2 restart novasis-soporte-ia --update-env
```

Sin esas variables el servicio encola igual (tabla `incidencias`) y el cron espera; al cargar el
token se drena el backlog. Kill switch: `INSERT INTO config (clave, ambito, valor) VALUES
('youtrack_activo','global','false')` en la base propia.

### 3. Panel

```bash
cd /var/www/html/facvoice-erp
grep -q '^VITE_SOPORTE_API_URL=' .env || echo 'VITE_SOPORTE_API_URL=https://soporte-api.factupy.es/api/v1' >> .env
git pull --ff-only origin dev && pnpm install --frozen-lockfile && pnpm run build
grep -roh "https://soporte-api[a-z.]*" dist/assets/*.js | sort -u   # tiene que ser soporte-api.factupy.es
```

### 4. Verificar

- `curl https://soporte-api.factupy.es/api/v1/health` → `{"ok":true,"erp_db":true}`.
- En el panel, cualquier usuario ve **Soporte IA** en el menú. Probar una pregunta de ventas y un
  documento rechazado.
- Apagar para una empresa: Suscripciones › submódulos incluidos › quitar "Asistente de soporte".
  El menú desaparece y la pantalla dice que no está habilitado.

## Prod

Igual, con `smartfactpy`, `soporte-api.novasispy.com`, `https://app.novasispy.com` y el `.env` del
backend de prod. El panel de prod se compila local con `.env.production` (agregar
`VITE_SOPORTE_API_URL`). No se hace sin el visto bueno explícito.
