# EX-B2-03 · Requisitos sin clasificar

La operación `POST /departments/{department_id}/records` crea un expediente para
el departamento indicado. Debe admitir un modo de simulación, recibir un
identificador de correlación del cliente y aceptar asunto, prioridad y responsable.
El listado `GET /records` se pagina y puede filtrar por estado.

Completa antes de codificar:

| Dato | Significado | Fuente HTTP | Tipo | ¿Requerido? | Regla |
|---|---|---|---|---|---|
| `department_id` | identificador del departamento propietario, por ejemplo `dep-legal` | path | string | sí | patrón `^dep-[a-z]+$` |
| `dry_run` | valida la solicitud sin crear el recurso | query | boolean | no | default `false` |
| `X-Correlation-ID` | permite correlacionar la petición entre servicios | header | string | sí | mínimo 8 caracteres |
| `subject` | asunto legible del expediente | body JSON | string | sí | 3–120 caracteres |
| `priority` | urgencia operativa | body JSON | integer | sí | de 1 a 5 |
| `owner` | responsable inicial | body JSON | object | sí | contiene `name` y `email` |
| `page` | página solicitada del listado | query | integer | no | mínimo 1, default 1 |
| `limit` | máximo de elementos por página | query | integer | no | 1–100, default 20 |
| `state` | filtra el listado por ciclo de vida | query | string | no | `draft`, `in_review` o `closed` |

Ejemplo que debe aceptar el contrato:

```http
POST /departments/dep-legal/records?dry_run=true HTTP/1.1
Host: records.internal.example
Content-Type: application/json
X-Correlation-ID: req-8f21c402

{"subject":"Vendor contract review","priority":4,"owner":{"name":"Ada","email":"ada@example.invalid"}}
```

Después contrasta la matriz con `/openapi.json`. No implementes persistencia,
autenticación ni un modelo de dominio más grande que la historia.
