## Supuestos adoptados en F6 (i18n del panel admin, adelantado)

> Nota de alcance: el plan (`docs/helpmi-planificacion.md`) define F6 como
> transversal, con alemán como única lengua de referencia obligatoria y
> traducciones adicionales como "ampliación posterior". Por decisión
> explícita del cliente, se adelantó un selector de idioma **alemán +
> español** para el panel admin (no solo alemán), ya construido sobre F0-F2B.
> F3 (contenido del iframe público) queda excluido de este alcance: permanece
> únicamente en alemán, sin selector — así lo pidió el cliente.

| Decisión | Supuesto adoptado | Alternativa descartada | Quién debe validar |
|---|---|---|---|
| Mecanismo de cambio de idioma | Columna `users.locale` (enum `de`/`es`, default `de`) + middleware `SetLocaleFromUser` (aplica `App::setLocale()` en `authMiddleware` del panel) + dos `MenuItem` en el menú de usuario de Filament (`AdminPanelProvider::userMenuItems()`) que apuntan a una ruta `GET /admin/locale/{locale}` que actualiza el perfil y redirige. | Prefijo de URL `/{locale}/admin/...` (como hace mcamara/laravel-localization en rutas públicas). Se descartó para el panel porque el plan explícitamente reserva ese mecanismo para el portal público (F3) y el panel usa "locale del perfil del usuario admin" (F1/F6, ya documentado en CLAUDE.md). | Dev — coincide con el diseño ya fijado en el plan. |
| Alcance de fases cubiertas | Se tradujeron íntegramente F0-F2B (Auth, catálogos de F2A, citas de F2B: `TerminResource`, `SlotAvailabilityService`, `TerminBookingService`). F3/F4/F5 no existen todavía — no se puede aplicar la disciplina de "cero strings hardcodeados" a fases no construidas. | Esperar a tener todas las fases construidas para traducir de una vez (rechazado explícitamente por el cliente: prefiere ir traduciendo módulo a módulo, según lo previsto por el propio diseño transversal de F6). | — (decisión ya tomada por el cliente). |
| Términos de dominio (Hauptthema, Unterkategorie, Betreuer, Fallnummer, FAX-Code, DSGVO...) | **Traducción íntegra**, sin excepciones: `Hauptthema` → "Categoría principal", `Unterkategorie` → "Subcategoría", `Betreuer` → "Coordinador", `Weitere Angaben` → "Información adicional", `Fallnummer` → "Número de caso", `FAX-Code` → "Código FAX", `DSGVO` → "RGPD". Los VALORES almacenados en BD (enums, nombres de columna) no cambian, solo las etiquetas mostradas. | Dejar estos términos en alemán incluso en la vista en español, por ser jerga literal del CSV/spec original (fue la propuesta inicial del agente, descartada explícitamente por el cliente). | Cliente — decisión ya confirmada. |
| F3 (portal público / iframe) | Queda fuera de este selector. El contenido del iframe permanece únicamente en alemán, sin selector de idioma, tal como indica el plan para el portal público (`/{locale}/` reservado a mcamara/laravel-localization cuando se implemente F3, y el idioma de referencia ahí es alemán). | Extender también el selector es/de al portal público. | Cliente — instrucción explícita ("en la fase F3... no hace falta hacerlo ya que ese sí ha de ir en Alemán"). |
| Disciplina a partir de ahora | **A partir de F6 adelantado, ninguna fase que toque el panel admin (F4, F5, y cualquier ajuste futuro de F2A/F2B/F3-admin) puede añadir strings hardcodeados.** Cada Resource/Page/Service nuevo debe usar `__('admin.<seccion>.<clave>')` con su entrada correspondiente en `lang/de/admin.php` y `lang/es/admin.php` en el mismo commit — no se difiere a una fase F6 posterior. | Seguir acumulando strings hardcodeados y traducir en bloque al final (rechazado: es la práctica que generó la deuda técnica corregida en este commit). | Dev — regla operativa a partir de ahora, ver CLAUDE.md. |

Este archivo se revisa con Verena antes del UAT (F9). Si algún supuesto está mal, se corrige antes de F9.
