# /v2 — Nueva estructura modular de CST.CAT / PEFiR PWA

Creada en Fase 2 de refactorización (2026-06-13).
**Los ficheros originales en /app NO están modificados.**

## Árbol de ficheros

```
v2/
└── src/
    ├── index.js              ← Punto de entrada. Expone window.v2.* para compatibilidad con HTML v1
    ├── config.js             ← URL servidor, rutas de assets, textos bilingües, layout PDF
    ├── data/
    │   └── store.js          ← Estado global (mainMenu, sesión, selección). Sustituye 34 globals de varapp.js
    ├── utils/
    │   └── catalog.js        ← buildCatalog(), detectHardware(), sortBy(). Sustituye toClientes() + helpers duplicados
    └── services/
        ├── mediaService.js   ← fetchImageAsBase64, fetchExternalVideoUrl, isValidUrl (antes duplicadas ×2)
        ├── logService.js     ← logPdfEvent, cleanLog, cleanAllLogs (antes duplicadas ×2 + dispersas)
        ├── qrService.js      ← generateQR, buildPatientURL, buildPdfFilename (antes duplicado ×4)
        └── pdfService.js     ← createPdf({ rows, upload, useRehab, ... }) — unifica creatorport4x4 + creatorport4x3
```

## Problemas resueltos respecto a v1

| Problema v1 | Solución v2 |
|---|---|
| `servidorURL` global implícita en 35 ficheros | `SERVER_URL` exportada desde `config.js` |
| `totalUrl`, `qrCode` globals implícitas en pdfcreator.js | Variables locales dentro de `createPdf()` |
| `loadScriptapp` duplicada ×2 | `_ensureJsPDF()` / `_ensureQrious()` idempotentes en sus servicios |
| `fetchImageAsBase64` + 5 funciones más duplicadas ×2 | Un único módulo `mediaService.js` |
| `numseg`, `numtec`, `plusOptionTec` duplicadas dentro de varapp.js | Helpers privados en `catalog.js` |
| `creatorport4x4` + `creatorport4x3` = 1448 líneas con 90% idéntico | `createPdf({ rows })` ≈ 220 líneas |
| localStorage parseado en cada llamada | `_cache` en `store.js` — se parsea una sola vez |
| 34 variables globales | `store.js` con API get/set |

## Cómo usar en un HTML de v1 (migración gradual)

Añadir al `<head>` en lugar de varapp.js + indexpdf.js:

```html
<script type="module" src="/v2/src/index.js"></script>
```

Los botones que llamaban `creatorport4x4(lapp, upload, codigopdf)` pasan a llamar:

```javascript
// Antes (v1):
creatorport4x4(true, false, 'p_')

// Después (v2, desde onclick o script inline):
v2.createPdf4x4(false, 'p_')
```

## Próximos pasos (Fase 3)

1. Migrar `especificos.html` para que cargue `index.js` y use `window.v2.createPdf4x4`
2. Verificar que el PDF generado es idéntico al de v1 (baseline guardado)
3. Migrar `genericos.html` y `personalizados.html`
4. Migrar `settings.html` para que use `SERVER_URL` de config.js
