# QA Sprint 12 — Directorio de fuentes

## Puertas automáticas

1. Ejecutar `EJECUTAR_TODO.bat`.
2. Confirmar copia de seguridad de archivos y base de datos.
3. Confirmar migración `015_sprint12_source_directory.sql`.
4. Confirmar lint PHP sin errores.
5. Confirmar `tests/run.php` con `TOTAL_ERRORES=0`.
6. Confirmar `tools/qa/sprint12_validate.php` con `TOTAL_ERRORES=0`.
7. Confirmar SQL QA sin cruces multiempresa ni modos inválidos.

## QA funcional

- Abrir **Fuentes** desde el menú privado.
- Ver los ocho modos MA-01 a MA-08 y sus recetas iniciales.
- Filtrar por texto, país, modo, nivel de acceso y estado.
- Crear una fuente propia con nueva institución.
- Crear otra fuente seleccionando una institución existente.
- Editar una fuente propia y confirmar los cambios.
- Abrir una fuente global y comprobar que no existe acción de edición.
- Añadir canal, receta propia, paso y experiencia interna.
- Comprobar que el mapa muestra cobertura calculada desde búsquedas existentes.
- Probar tema claro, oscuro, español e inglés.

## QA negativo y seguridad

- Cambiar manualmente el UUID por el de una fuente privada de otra empresa: debe devolver acceso no disponible.
- Intentar editar una fuente global: debe rechazarse.
- Intentar asignar una institución de otra empresa mediante POST: debe rechazarse.
- Crear una fuente MA-07 indicando automatización `sí`: el servidor debe guardar `no` y marcar restricción.
- Crear una fuente MA-06 sin marcar login: el servidor debe activar el requisito de login.
- Intentar acceder sin `research.directory.view`: debe responder 403.
- Intentar guardar sin CSRF válido: debe rechazarse.
- Confirmar que no se solicitan ni almacenan contraseñas, cookies o tokens externos.

## QA visual

- Escritorio: tarjetas en tres columnas y filtros en una línea cuando exista espacio.
- Tablet: tarjetas en dos columnas.
- Móvil: una columna, acciones apiladas y tablas con desplazamiento horizontal.
- Revisar contraste y legibilidad en ambos temas.
- Confirmar que estados y modos no dependen únicamente del color.

## Resultado de aceptación

Sprint aprobado cuando el validador muestre `TOTAL_ERRORES=0`, el aislamiento multiempresa sea negativo y el usuario confirme el QA visual/funcional.
