# Restricciones — Preservar arquitectura `develop_eneon`

Este documento lista lo que **no debe eliminarse, revertirse ni simplificarse** al portar funcionalidades de `version2`.

---

## 1. Historial CUPS (feature develop exclusiva)

### Backend
- `app/Http/Controllers/CupsHistorialController.php`
- `app/Models/HistorialCUPsElectrico.php`
- `app/Models/HistorialCUPsGas.php`
- `app/Models/Concerns/TieneHistorialCupsElectrico.php`
- `app/Models/Concerns/TieneHistorialCupsGas.php`
- `app/Services/Cups/RegistrarHistorialCupsService.php`
- `database/migrations/2026_06_29_120000_create_historial_cups_tables.php`

### Frontend
- `resources/js/Pages/Eneon/Cups/Shared/CupsHistorialTab.tsx`
- `resources/js/Pages/Eneon/Cups/hooks/useHistorialCups.ts`
- `resources/js/Pages/Eneon/Cups/types/historialCups.ts`
- `resources/js/Pages/Eneon/PuntosSuministro/Shared/CupsHistorialContextBar.tsx`
- Integración en `EditarCups.tsx`, `EditarPunto.tsx`

### Tests
- `tests/CupsHistorialTestCase.php`
- `tests/Feature/CupsHistorialEscrituraTest.php`
- `tests/Feature/CupsHistorialLecturaTest.php`
- `tests/Unit/Services/RegistrarHistorialCupsServiceTest.php`
- `tests/Support/CreatesCupsHistorialTables.php`

**Regla:** al modificar `CupsTraits`, `PuntoSuministroTraits`, `CupsController` — conservar hooks de historial.

---

## 2. Accesibilidad y sistema de tabs Eneon

### Componentes Shared
- `resources/js/Pages/Eneon/Shared/Tabs/EneonTabs.tsx`
- `EneonTabsCard.tsx`, `EneonDatosHistoricoTabs.tsx`, `EneonTabEmptyState.tsx`
- `resources/js/Pages/Eneon/Shared/tokensEneonTabs.ts`
- `resources/js/Pages/Eneon/Shared/eneonTabsClasses.ts`

### SCSS
- `resources/scss/components/_eneonTabs.scss`
- `resources/scss/components/_tokensEneonTabs.scss`
- `resources/scss/components/_tokensTarjetaEneon.scss`

### Contratos
- `resources/js/Pages/Eneon/Contratos/Shared/estilosFocoAccesible.module.css`

**Regla:** nuevos paneles SIPS y tabs contratos deben usar `EneonTabs`, no Nav Bootstrap plano de version2.

---

## 3. Infraestructura UX contratos (develop)

| Archivo | Función |
|---------|---------|
| `Shared/TypeaheadClienteConLimpiar.tsx` | Búsqueda cliente accesible con limpiar |
| `Shared/BarraProgresoCargaMasiva.tsx` | Feedback carga masiva CUPS |
| `Shared/bulkLoadProgress.ts` | Estado progreso bulk |
| `Shared/cupsDisponiblesPorFila.ts` | Anti-duplicados CUPS |
| `Shared/cupsRowKeys.ts` | Keys estables filas |
| `Shared/tokensTarjetaEneon.ts` | Tokens visuales tarjetas |

### Validación formularios
- `MultiClienteMultiPunto/hooks/useValidacionContratoMultiClienteMultipunto.ts`
- `UniClienteMultiPunto/hooks/useValidacionContratoMultipunto.ts`
- `Contratos/utils/validacionFormulario.ts`
- Utils `constantesFormulario`, `idsDom*`, `mapeoErroresCups*`

**Regla:** portar servicios contrato y ventana ADX **encima** de validación existente, no reemplazar hooks de validación.

---

## 4. Refactor UniClienteUniPunto (componentes develop)

Conservar subcomponentes eliminados en version2:

- `BotonBusquedaAccion.tsx`
- `CampoInformativo.tsx`
- `GrupoTypeaheadBusqueda.tsx`
- `OpcionesAdicionalesToggles.tsx`
- `RejillaPotencias.tsx`
- `SeccionDatosTecnicosElectrico.tsx` / `SeccionDatosTecnicosGas.tsx`
- `SeccionDireccion.tsx`
- `SeccionFechasVentana.tsx`
- `SubseccionFormulario.tsx`
- `TarjetaSuministro.tsx`

**Regla:** añadir `ServiciosContratoFormSection` y campos ventana ADX **dentro** de la estructura de componentes develop.

---

## 5. Vistas tarjetas e infinite scroll (develop)

Módulos con `*Card.tsx`, `*CardsView.tsx`, `useInfinite*.ts`:

- Clientes, Contactos
- Comercializadoras, Productos, AnexoProductos, Tarifas
- Contratos, CUPS, Puntos Suministro
- `Comerciales/Tarifas/index.tsx`

**Regla:** no revertir a listados legacy de version2.

---

## 6. SIPS — validación frontend develop

- `resources/js/Pages/Eneon/Sips/validacionSips.ts` (eliminado en version2)

**Regla:** integrar validación CUPS en `useSipsConsulta` o paneles ADX/AUDAX; no eliminar.

---

## 7. RepresentanteLegalSection — fusión obligatoria

| Aspecto | develop_eneon | version2 | Decisión port |
|---------|---------------|----------|---------------|
| Typeahead | `TypeaheadClienteConLimpiar` | Typeahead estándar | **Conservar develop** |
| Errores | Props granulares ARIA | `errors` simple | **Conservar develop** |
| Bulk load guard | — | Exige representante | **Portar regla version2** |
| Filtro clientes por CodConCli | — | Sí | **Portar regla version2** |

---

## 8. CI/CD y assets

| Recurso | Acción |
|---------|--------|
| `.github/workflows/deploy.yml` | Mantener develop |
| `public/storage/pdfs/templates/**` | Mantener develop (version2 los borró) |
| `phpunit.xml` | Mantener config develop (SQLite memoria si aplica) |

---

## 9. Tests develop a conservar

- `tests/Unit/AuxiliarCondicionesEconomicasFechaFinTest.php`
- `tests/Unit/AuxiliarSepaDireccionTest.php`
- Toda la suite CupsHistorial

**Regla:** añadir tests ADX solo si el usuario lo solicita explícitamente.

---

## 10. Patrones de código develop a respetar

1. **Inertia + React 18** — páginas en `resources/js/Pages`
2. **Form requests** Laravel para validación backend
3. **Traits existentes** — extender, no duplicar lógica en controllers
4. **CSS modules + SCSS** — no inline styles masivos
5. **Ziggy `route()`** — rutas nombradas
6. **SweetAlert2** — modales confirmación (prompts version2 compatibles)
7. **Accesibilidad WCAG** — focus visible, labels, ARIA en formularios contratos

---

## 11. Checklist revisión PR (anti-regresión)

Antes de merge a `develop_eneon`:

- [ ] ¿Se eliminó algún archivo de §1–§9? → Revertir
- [ ] ¿SIPS/contratos perdieron validación accesible?
- [ ] ¿Historial CUPS funciona en EditarCups y EditarPunto?
- [ ] ¿Vistas tarjetas siguen siendo entry point de listados?
- [ ] ¿Carga masiva muestra barra de progreso?
- [ ] ¿GitHub Actions deploy intacto?
- [ ] ¿Plantillas PDF presentes en repo?
