# MP-B2-R · Validador de expedientes internos

Construye una API FastAPI en memoria que cree, consulte y filtre expedientes
sintéticos. El contrato debe usar Pydantic 2, separar entrada y salida, devolver
`201` con `Location`, filtrar campos internos y representar de forma uniforme
validación, ausencia y conflicto.

## Evidencia

- comando reproducible de arranque;
- OpenAPI inicial y final;
- 10 o más peticiones con status, headers y body;
- nota de tres decisiones y dos límites.

## Restricciones

Sin base de datos, login, Docker, `APIRouter`, repositorios ni servicios. El
proceso es el límite del estado. Detenerlo debe permitir un reinicio limpio.

## Diccionario del dataset

| Campo | Significado | Regla esperada |
| --- | --- | --- |
| `reference` | Referencia pública del expediente. | `REC-` seguido de tres dígitos. |
| `department` | Equipo propietario. | `human_resources`, `procurement` o `legal`. |
| `state` | Fase del ciclo de vida. | `draft`, `in_review` o `closed`. |
| `subject` | Motivo legible de la solicitud. | String no vacío. |
| `priority` | Urgencia operativa. | Entero de 1 a 5. |
| `owner` | Responsable del expediente. | Objeto con `name` y `contact`; no puede ser `null`. |
| `opened_on` | Fecha de apertura. | Fecha ISO `YYYY-MM-DD`. |
| `closed_on` | Fecha de cierre. | `null` o fecha no anterior a `opened_on`; se exige cuando `state=closed`. |

Las filas anómalas no están marcadas: la práctica consiste en obtener su
ubicación de error desde Pydantic, no en adivinar el significado de los campos.

No existe una solución oficial en el paquete. Usa los criterios publicados en la
página del miniproyecto y solicita revisión con Codex.
