# Instrucciones para IA: Migración a API Model v2 (Clean Architecture)

Actúa como un experto en ingeniería de software y refactorización de PHP. Tu tarea es transformar código legacy (procedural o controladores gruesos) a la estructura de **API Model v2** basada en Slim 4 y Clean Architecture.

---

## 1. El Objetivo (Target Stack)
*   **Framework**: Slim 4.
*   **Contenedor**: PHP-DI (Inyección de dependencias).
*   **Lenguaje**: PHP 8.2+ con `strict_types=1`.
*   **Arquitectura**: Capas (Route -> Action -> Service -> Domain -> Infrastructure).
*   **Persistencia**: PDO nativo en Repositorios (sin ORM).
*   **Respuesta**: JSON estándar vía `HttpRunner::runJson`.

---

## 2. Reglas de Mapeo de Código
Cuando recibas un bloque de código legacy, divídelo siguiendo estas reglas:

1.  **SQL Directo**: Mover a `src/Infrastructure/Persistence/Repositories/Pdo[Entidad]Repository.php`. Implementar una interfaz de `src/Domain/Repository/`.
2.  **Lógica de Negocio/Validaciones**: Mover a `src/Service/[Entidad]Service.php`. Este servicio solo debe interactuar con las **interfaces** del repositorio.
3.  **Manejo de Request/Response**: Mover a `src/Action/[Accion]Action.php`. Esta clase solo llama al Service y formatea la salida.
4.  **Rutas**: Definir en `src/Route/[Modulo]Routes.php`.

---

## 3. Estándares de Implementación (Obligatorios)

### A. Firmas de Clases
*   Usa siempre `final class`.
*   Usa **readonly properties** y **constructor promotion**.
*   Incluye `declare(strict_types=1);` al inicio.

### B. Inyección de Dependencias
*   **PROHIBIDO** instanciar clases con `new` dentro de un Action o Service (excepto DTOs o Entidades).
*   Pide todas las dependencias (Servicios, Repositorios) a través del constructor.

### C. Manejo de Errores
*   No uses `die()`, `exit()` o `echo`.
*   Lanza excepciones de `ApiModel\Shared\Exceptions\*` (ej: `NotFoundException`, `BadRequestException`).

### D. Acceso a Datos
*   El Service **no conoce** PDO. Solo llama a métodos del Repositorio.
*   El Repositorio devuelve **arrays** o **Entidades**, no objetos PDOStatement.

---

## 4. Algoritmo de Transformación
Para cada funcionalidad legacy que debas migrar, sigue este orden:

1.  **Identifica la Entidad**: ¿Es un Usuario, una Póliza, una Notificación?
2.  **Crea la Interfaz**: Define los métodos de persistencia necesarios en `Domain/Repository`.
3.  **Escribe el Repositorio**: Implementa el SQL en `Infrastructure/Persistence/Repositories`.
4.  **Escribe el Servicio**: Implementa el caso de uso y lógica de negocio.
5.  **Escribe la Acción**: Crea el punto de entrada HTTP.
6.  **Registra la Ruta**: Añade el endpoint.
7.  **Actualiza el Contenedor**: Indica cómo resolver las nuevas clases en `config/container.php`.

---

## 5. Ejemplo de Prompts para usar conmigo (IA)
> "IA, migra este script de login PHP procedural a la estructura de API Model v2. Sigue el algoritmo de transformación y asegúrate de que el Service no tenga SQL directo."
