| `personal` | String | Apellido + nombre desde `nuevo.personal` (join por `numero_documento`). `null` si no hay match en `personal`. Presente aunque `data` esté vacío |
| `data` | Array | Meses registrados, ordenados por mes |
#### Objeto de `data[]` — `RetencionOtrosEmpleadoresItemDTO`
| Campo | Tipo | Descripción |
|---|---|---|
| `anio` | Integer | Año del registro |
| `mes` | Integer | 1–12 |
| `importe` | BigDecimal | Importe declarado por el otro empleador |
| `retencion` | BigDecimal | Retención declarada por el otro empleador |
| `fechaRegistro` | LocalDateTime | Fecha/hora en que se creó el registro (la setea el backend) |
---
## 2. POST `/api/v1/retencion-otros-empleadores/{documentoTrabajador}/{anio}/{mes}` — Crear
### Path params
| Parámetro | Tipo | Notas |
|---|---|---|
| `documentoTrabajador` | String | |
| `anio` | Integer | |
| `mes` | Integer | 1–12 |
### Body — `RetencionOtrosEmpleadoresRequestDTO`
```json
{
"importe":1500.00,
"retencion":120.00
}
```
Ambos campos obligatorios.
### Ejemplo
```
POST /api/v1/retencion-otros-empleadores/09742695/2026/3
Content-Type: application/json
{ "importe": 1500.00, "retencion": 120.00 }
```
### Response
`201 Created` con el `RetencionOtrosEmpleadoresDTO` creado (`fechaRegistro` la asigna el backend).
`409 Conflict` si ya existe un registro para esa combinación `documentoTrabajador + anio + mes`
(usar PUT para modificarlo).
---
## 3. PUT `/api/v1/retencion-otros-empleadores/{documentoTrabajador}/{anio}/{mes}` — Actualizar
Mismo path y body que el POST. Reemplaza `importe` y `retencion` del registro existente
(`fechaRegistro` no cambia).
### Ejemplo
```
PUT /api/v1/retencion-otros-empleadores/09742695/2026/3
Content-Type: application/json
{ "importe": 1600.00, "retencion": 130.00 }
```
### Response
`200 OK` con el `RetencionOtrosEmpleadoresDTO` actualizado.