# Baja (/docs/developers/api-reference/employees/terminate)

## Descripcion general [#descripcion-general]

Este endpoint **da de baja** al empleado: marca su estado como `terminated` y guarda la `termination_date` enviada. El empleado **no** se elimina — su registro personal se conserva y queda en el historial. Para volver a contratarlo, llama a [`/reactivate`](/docs/developers/api-reference/employees/reactivate).

La razón social, fecha de alta y demás datos laborales se conservan tal cual para fines históricos (declaraciones SUA, reportes, etc.).

## Endpoint [#endpoint]

`POST https://app.integranom.com/api/v1/employees/{employee_number}/terminate`

**Path param:** `employee_number` — entero positivo, el número de empleado dentro de la organización.

## Solicitud [#solicitud]

***

Envía la fecha de baja. La API marca al empleado como `terminated` y guarda la `termination_date`.

```json
{ "termination_date": "2026-06-30" }
```

**cURL**

```bash
curl -X POST "https://app.integranom.com/api/v1/employees/5/terminate" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "termination_date": "2026-06-30" }'
```

**Respuesta**

```json
{
"employee_number": 5,
"status": "terminated",
"hire_date": "2026-01-15T00:00:00.000Z",
"seniority_date": "2026-01-15T00:00:00.000Z",
"termination_date": "2026-06-30T00:00:00.000Z",
"created_at": "2026-01-15T00:00:00.000Z",
"retros_touched": 0
}
```

## Campos del cuerpo [#campos-del-cuerpo]

| Campo                          | Tipo                | Requerido | Notas                                                                                                                                                                                                                                                    |
| ------------------------------ | ------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `termination_date`             | string `YYYY-MM-DD` | Sí        | Fecha en que termina la relación laboral.                                                                                                                                                                                                                |
| `already_registered_with_imss` | boolean             | No        | Por defecto `false`. Con `true`, la baja en Movimientos IMSS se registra como ya presentada ante el IMSS fuera de la plataforma, sin fecha límite pendiente. Con `false`, queda pendiente de presentar. Solo tiene efecto si el empleado aporta al IMSS. |
| `confirm_retro`                | boolean             | No        | Autoriza que una baja con fecha dentro de un periodo **cerrado** se registre como ajuste retroactivo. Ver abajo.                                                                                                                                         |

## Comportamiento [#comportamiento]

1. Carga al empleado activo (`status != "terminated"`).
2. Si la fecha de baja cae dentro de un periodo **cerrado**, exige `confirm_retro` (ver abajo).
3. Asigna `status = "terminated"` y `terminationDate = termination_date`.
4. Si el empleado aporta al IMSS, genera su baja en Movimientos IMSS: pendiente de presentar, o ya presentada si envías `already_registered_with_imss: true`.
5. Genera los ajustes retroactivos que correspondan y los reporta en `retros_touched`.
6. Los demás datos laborales (razón social, fecha de alta, FKs) se conservan para el historial.

## Baja con fecha dentro de un periodo cerrado [#baja-con-fecha-dentro-de-un-periodo-cerrado]

***

Cerrar un periodo es definitivo. Una baja fechada **dentro** de sus fechas contradice los recibos ya pagados: el empleado cobró días que, con la nueva fecha, no le correspondían.

Por eso la baja no se aplica en silencio. Si la fecha cae en un periodo cerrado, la llamada se rechaza con `409 RETRO_CONFIRMATION_REQUIRED` (con `retro_periods`, los periodos afectados). Reenvíala con **`confirm_retro: true`** para aceptar: la baja se registra y la diferencia se corrige con un **ajuste retroactivo negativo** en el siguiente periodo — la respuesta lo reporta en `retros_touched`.

Es la misma regla que aplica la plataforma; el API no la puede saltar.

## Forma de la respuesta [#forma-de-la-respuesta]

`200 OK` — los datos laborales del empleado recién dado de baja:

```json
{
  "employee_number": 5,
  "status": "terminated",
  "hire_date": "2026-01-15T00:00:00.000Z",
  "seniority_date": "2026-01-15T00:00:00.000Z",
  "termination_date": "2026-06-30T00:00:00.000Z",
  "created_at": "2026-01-15T00:00:00.000Z",
  "retros_touched": 0
}
```

## Errores [#errores]

| Status | Código                        | Causa                                                                                          |
| ------ | ----------------------------- | ---------------------------------------------------------------------------------------------- |
| `400`  | —                             | `employee_number` inválido en la URL (no es entero positivo) o falla de validación del cuerpo. |
| `400`  | `NO_OPEN_EMPLOYMENT`          | El empleado ya está dado de baja.                                                              |
| `404`  | —                             | El empleado no existe o ya fue eliminado en esta organización.                                 |
| `409`  | `RETRO_CONFIRMATION_REQUIRED` | La fecha de baja cae en un periodo cerrado. Reenvía con `confirm_retro: true`.                 |