# Reactivar (/docs/developers/api-reference/employees/reactivate)

## Descripcion general [#descripcion-general]

Este endpoint **reactiva** a un empleado que está dado de baja, registrando una nueva relación laboral. Se usa para **recontratar** empleados que fueron dados de baja previamente. La nueva relación laboral puede atarse a una razón social distinta a la anterior, y opcionalmente puede arrastrar la antigüedad acumulada.

Si el empleado no tiene historial laboral previo, este endpoint no es el camino — usa [POST `/api/v1/employees`](/docs/developers/api-reference/employees/create) para registrarlo por primera vez.

**Cálculo de antigüedad.** Si `keep_seniority` es `true`, la `seniority_date` toma la fecha más antigua de antigüedad encontrada en el historial del empleado. Si es `false`, la antigüedad **se reinicia** y `seniority_date` queda igual a `rehire_date`. Un asimilado o un trabajador por honorarios no lleva antigüedad: su `seniority_date` queda en `null` sin importar `keep_seniority`.

## Endpoint [#endpoint]

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

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

## Recontratar con antiguedad [#recontratar-con-antiguedad]

***

`keep_seniority: true` arrastra la fecha de antigüedad más antigua del historial. En este ejemplo, el empleado fue contratado originalmente el `2026-01-15` y se recontrata el `2026-08-01` conservando esa antigüedad.

```json
{
  "legal_entity_number": 1,
  "rehire_date": "2026-08-01",
  "keep_seniority": true,
  "is_included_in_payroll_calculations": true,
  "contributes_to_imss": true,
  "imss_number": "12345678903",
  "already_registered_with_imss": false
}
```

**cURL**

```bash
curl -X POST "https://app.integranom.com/api/v1/employees/5/reactivate" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "legal_entity_number": 1,
  "rehire_date": "2026-08-01",
  "keep_seniority": true,
  "is_included_in_payroll_calculations": true,
  "contributes_to_imss": true,
  "imss_number": "12345678903",
  "already_registered_with_imss": false
}'
```

**Respuesta**

```json
{
"employee_number": 5,
"legal_entity_number": 1,
"status": "active",
"hire_date": "2026-08-01T00:00:00.000Z",
"seniority_date": "2026-01-15T00:00:00.000Z",
"termination_date": null,
"created_at": "2026-08-01T10:00:00.000Z"
}
```

## Recontratar reiniciando antiguedad y cambiando razon social [#recontratar-reiniciando-antiguedad-y-cambiando-razon-social]

***

`keep_seniority: false` reinicia la antigüedad — la nueva `seniority_date` queda igual a `rehire_date`. La razón social puede ser diferente a la que tenía antes de la baja.

```json
{
  "legal_entity_number": 2,
  "rehire_date": "2026-08-01",
  "keep_seniority": false,
  "is_included_in_payroll_calculations": true,
  "contributes_to_imss": false
}
```

**cURL**

```bash
curl -X POST "https://app.integranom.com/api/v1/employees/5/reactivate" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "legal_entity_number": 2,
  "rehire_date": "2026-08-01",
  "keep_seniority": false,
  "is_included_in_payroll_calculations": true,
  "contributes_to_imss": false
}'
```

**Respuesta**

```json
{
"employee_number": 5,
"legal_entity_number": 2,
"status": "active",
"hire_date": "2026-08-01T00:00:00.000Z",
"seniority_date": "2026-08-01T00:00:00.000Z",
"termination_date": null,
"created_at": "2026-08-01T10:00:00.000Z"
}
```

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

| Campo                                 | Tipo                                                                                                                          | Requerido | Notas                                                                                                                                                                                                                                                                                        |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `legal_entity_number`                 | integer positivo                                                                                                              | Sí        | Razón social del empleado reactivado. Puede diferir de la que tenía antes de la baja.                                                                                                                                                                                                        |
| `rehire_date`                         | string `YYYY-MM-DD`                                                                                                           | Sí        | Nueva `hire_date` del empleado.                                                                                                                                                                                                                                                              |
| `keep_seniority`                      | boolean                                                                                                                       | Sí        | Si es `true`, `seniority_date` toma la fecha más antigua del historial. Si es `false`, se reinicia a `rehire_date`.                                                                                                                                                                          |
| `is_included_in_payroll_calculations` | boolean                                                                                                                       | Sí        |                                                                                                                                                                                                                                                                                              |
| `contributes_to_imss`                 | boolean                                                                                                                       | Sí        | Debe ser `false` cuando `worker_type` no es `subordinate`.                                                                                                                                                                                                                                   |
| `worker_type`                         | `subordinate` \| `asimilado` \| `honorarios`                                                                                  | No        | Si lo omites, el reingreso conserva el tipo del empleo anterior, y toma `subordinate` solo cuando no hay uno previo.                                                                                                                                                                         |
| `minimum_wage_zone`                   | `general` \| `northern_border`                                                                                                | No        | Si lo omites, el reingreso conserva la zona del empleo anterior, y toma `general` solo cuando no hay uno previo.                                                                                                                                                                             |
| `salary_type`                         | `fixed` \| `mixed` \| `variable`                                                                                              | No        | Si lo omites, el reingreso conserva el tipo de salario del empleo anterior, y queda vacío cuando no hay uno.                                                                                                                                                                                 |
| `imss_worker_type`                    | `permanent` \| `eventual_city` \| `eventual_construction` \| `eventual_rural` \| null                                         | No        | Si lo omites, el reingreso conserva el tipo de trabajador IMSS del empleo anterior, y es obligatorio si el reingreso aporta al IMSS y el empleo anterior no lo tiene (`IMSS_AFFILIATION_REQUIRED`). Si el reingreso no aporta al IMSS, siempre queda vacío.                                  |
| `imss_work_schedule`                  | `full` \| `one_day_week` \| `two_day_week` \| `three_day_week` \| `four_day_week` \| `five_day_week` \| `reduced_day` \| null | No        | Si lo omites, el reingreso conserva la semana o jornada reducida del empleo anterior, y es obligatoria si el reingreso aporta al IMSS y el empleo anterior no la tiene (`IMSS_AFFILIATION_REQUIRED`). Si el reingreso no aporta al IMSS, siempre queda vacía.                                |
| `work_shift_type`                     | string                                                                                                                        | No        | Clave SAT del tipo de jornada (c\_TipoJornada). Si lo omites, el reingreso conserva la del empleo anterior.                                                                                                                                                                                  |
| `is_unionized`                        | boolean                                                                                                                       | No        | Si lo omites, el reingreso conserva el valor del empleo anterior, y toma `false` solo cuando no hay uno previo.                                                                                                                                                                              |
| `imss_number`                         | string                                                                                                                        | No        | NSS de 11 dígitos. Se valida el dígito verificador. Solo para `subordinate`: con otro `worker_type` efectivo responde `400`.                                                                                                                                                                 |
| `already_registered_with_imss`        | boolean                                                                                                                       | No        | Por defecto `false`. Con `true`, el alta del reingreso en Movimientos IMSS se registra como ya presentada ante el IMSS fuera de la plataforma: no queda pendiente ni se calcula su SBC. Con `false`, queda pendiente de presentar. Solo tiene efecto cuando `contributes_to_imss` es `true`. |
| `confirm_retro`                       | boolean                                                                                                                       | No        | Autoriza que un reingreso con fecha dentro de un periodo **cerrado** se registre como ajuste retroactivo. Ver abajo.                                                                                                                                                                         |

## Comportamiento [#comportamiento]

1. Carga el empleado y su historial laboral completo.
2. Rechaza con `400` `ALREADY_HAS_OPEN_EMPLOYMENT` si el empleado está activo (no dado de baja) — primero hay que darlo de baja con [`/terminate`](/docs/developers/api-reference/employees/terminate).
3. Rechaza con `400` `NO_PRIOR_EMPLOYMENT` si el empleado **nunca** ha sido registrado — usa [POST `/api/v1/employees`](/docs/developers/api-reference/employees/create) para el primer alta.
4. Resuelve `legal_entity_number` contra una razón social existente (`LEGAL_ENTITY_NOT_FOUND` si no resuelve).
5. Calcula `seniority_date` según la regla descrita arriba.
6. Marca al empleado como activo nuevamente.
7. Si `contributes_to_imss` es `true`, genera el alta del reingreso en Movimientos IMSS: pendiente de presentar, o ya presentada si envías `already_registered_with_imss: true`.

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

`201 Created` — los datos laborales del empleado reactivado:

```json
{
  "employee_number": 5,
  "legal_entity_number": 1,
  "status": "active",
  "hire_date": "2026-08-01T00:00:00.000Z",
  "seniority_date": "2026-01-15T00:00:00.000Z",
  "termination_date": null,
  "created_at": "2026-08-01T10:00:00.000Z"
}
```

## Reingreso con fecha dentro de un periodo cerrado [#reingreso-con-fecha-dentro-de-un-periodo-cerrado]

***

Un reingreso fechado **dentro** de un periodo ya cerrado afecta una nómina que ya se pagó. Igual que en la [baja](/docs/developers/api-reference/employees/terminate), no se aplica en silencio: la llamada se rechaza con `409 RETRO_CONFIRMATION_REQUIRED` (con `retro_periods`, los periodos afectados).

Reenvíala con **`confirm_retro: true`** para aceptar. El ajuste retroactivo se genera cuando el nuevo empleo queda listo para nómina (con calendario, sueldo y contrato asignados).

## Errores [#errores]

| Status | Código                        | Causa                                                                                                                                                    |
| ------ | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | —                             | `employee_number` inválido en la URL o falla de validación del cuerpo.                                                                                   |
| `400`  | `NO_PRIOR_EMPLOYMENT`         | El empleado nunca ha sido registrado — usa `POST /api/v1/employees`.                                                                                     |
| `400`  | `ALREADY_HAS_OPEN_EMPLOYMENT` | El empleado está activo — primero dalo de baja con `/terminate`.                                                                                         |
| `400`  | `WORKER_TYPE_FIELD_CONFLICT`  | Se envió `imss_number` para un reingreso cuyo `worker_type` efectivo no es `subordinate`.                                                                |
| `400`  | `IMSS_AFFILIATION_REQUIRED`   | El reingreso aporta al IMSS y `imss_worker_type` o `imss_work_schedule` queda vacío: no se envió y el empleo anterior no lo tiene, o se envió en `null`. |
| `400`  | `LEGAL_ENTITY_NOT_FOUND`      | `legal_entity_number` no coincide con ninguna razón social de la organización.                                                                           |
| `404`  | —                             | El empleado no existe o ya fue eliminado en esta organización.                                                                                           |
| `409`  | `RETRO_CONFIRMATION_REQUIRED` | La fecha de reingreso cae en un periodo cerrado. Reenvía con `confirm_retro: true`.                                                                      |