# Editar (/docs/developers/api-reference/departments/edit)

## Descripcion general [#descripcion-general]

Este endpoint permite actualizar parcialmente un departamento. Todos los campos del cuerpo son **opcionales**: si omites una clave, ese campo no se toca; si la envías como `null`, ese campo se limpia (cuando aplica). El identificador en la URL es el `department_number` del departamento dentro de tu organización. Una solicitud exitosa devuelve `200` con la forma completa del departamento actualizado.

## Endpoint [#endpoint]

`PATCH https://app.integranom.com/api/v1/departments/{department_number}`

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

## Actualizacion minima [#actualizacion-minima]

***

Envía solo los campos que quieras cambiar. El resto del departamento queda intacto.

```json
{ "name": "Ventas Internacionales" }
```

**cURL**

```bash
curl -X PATCH "https://app.integranom.com/api/v1/departments/5" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Ventas Internacionales" }'
```

**Respuesta**

```json
{
"id": "ck...",
"department_number": 5,
"parent_id": "ck...",
"depth": 1,
"name": "Ventas Internacionales",
"code": "VEN",
"description": null,
"cost_center_id": null,
"is_active": true,
"sort_order": 0,
"created_at": "2026-05-24T10:00:00.000Z",
"updated_at": "2026-05-24T11:15:32.000Z"
}
```

## Limpiar campos y desanidar [#limpiar-campos-y-desanidar]

***

`null` (y `""` para strings) limpia el campo. En particular, `parent_department_number: null` desancla el departamento y lo convierte en raíz (`depth: 0`).

```json
{
  "description": null,
  "code": null,
  "parent_department_number": null
}
```

**cURL**

```bash
curl -X PATCH "https://app.integranom.com/api/v1/departments/5" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "description": null,
  "code": null,
  "parent_department_number": null
}'
```

**Respuesta**

```json
{
"id": "ck...",
"department_number": 5,
"parent_id": null,
"depth": 0,
"name": "Ventas Internacionales",
"code": null,
"description": null,
"cost_center_id": null,
"is_active": true,
"sort_order": 0,
"created_at": "2026-05-24T10:00:00.000Z",
"updated_at": "2026-05-24T11:18:09.000Z"
}
```

## Vincular a un centro de costos [#vincular-a-un-centro-de-costos]

***

Al vincular un departamento a un centro de costos (sea con `cost_center_code` o inline con `cost_center`), los campos `name`, `code`, `description`, `is_active` y `sort_order` del departamento se **sobrescriben** con los del CC. Cualquier valor que envíes para esos campos en el mismo request se ignora.

Para desvincular sin cambiar los valores actuales del departamento, envía `cost_center_code: null` — el departamento conserva su `name`, `code`, etc. tal como están en ese momento.

```json
{ "cost_center_code": "CC-VEN" }
```

**cURL**

```bash
curl -X PATCH "https://app.integranom.com/api/v1/departments/5" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "cost_center_code": "CC-VEN" }'
```

**Respuesta**

```json
{
"id": "ck...",
"department_number": 5,
"parent_id": "ck...",
"depth": 1,
"name": "Centro de costos Ventas",
"code": "CC-VEN",
"description": "Ventas y postventa",
"cost_center_id": "ck...",
"is_active": true,
"sort_order": 0,
"created_at": "2026-05-24T10:00:00.000Z",
"updated_at": "2026-05-24T11:22:44.000Z"
}
```

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

| Campo                      | Tipo                     | Notas                                                                                                                                                                                                                                                                                                                            |
| -------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                     | string                   | No vacío tras recortar.                                                                                                                                                                                                                                                                                                          |
| `code`                     | string \| null           | `null` o `""` limpian el código.                                                                                                                                                                                                                                                                                                 |
| `description`              | string \| null           | `null` o `""` limpian la descripción.                                                                                                                                                                                                                                                                                            |
| `parent_department_number` | integer positivo \| null | `null` convierte el departamento en raíz. El nuevo padre debe existir y no puede ser el propio departamento ni un descendiente.                                                                                                                                                                                                  |
| `cost_center_code`         | string \| null           | Vincula a un CC existente. `null` desvincula. Mutuamente excluyente con `cost_center`.                                                                                                                                                                                                                                           |
| `cost_center`              | object                   | Crea un CC nuevo y vincula. Misma forma que en [crear](/docs/developers/api-reference/departments/create). Mutuamente excluyente con `cost_center_code`.                                                                                                                                                                         |
| `is_active`                | boolean                  | Flag activo controlado por el usuario. Independiente del borrado — un departamento puede estar inactivo y seguir apareciendo en `GET`. Al ponerlo en `false`, se **desvincula el departamento de cada empleo** (`department_code → null`). Mientras está vinculado a un CC, el valor enviado se ignora (el CC controla el flag). |
| `sort_order`               | integer ≥ 0              |                                                                                                                                                                                                                                                                                                                                  |

### Espejo de campos con el centro de costos [#espejo-de-campos-con-el-centro-de-costos]

Cuando el departamento queda (o ya estaba) vinculado a un centro de costos, el CC es dueño de estos campos: `name`, `code`, `description`, `is_active`, `sort_order`. Cualquier valor del caller para esos campos se ignora.

* **Vinculando** (envías `cost_center_code` o `cost_center`): los campos espejo del departamento se sobrescriben con los valores del CC.
* **Desvinculando** (envías `cost_center_code: null`): el departamento retiene sus valores actuales y `cost_center_id` se limpia.
* **Ya vinculado, sin tocar el vínculo**: los valores enviados para los campos espejo se ignoran silenciosamente.

### Reparenting [#reparenting]

Si `parent_department_number` cambia:

* Primero corre una **verificación de ciclos**: el nuevo padre no puede ser el propio departamento ni un descendiente suyo.
* Se actualizan `path` y `depth` del departamento, y se recalculan `path`/`depth` para **todos los descendientes** del subárbol.

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

`200 OK` — misma forma que la respuesta de [crear](/docs/developers/api-reference/departments/create) en modo single:

```json
{
  "id": "ck...",
  "department_number": 5,
  "parent_id": "ck...",
  "depth": 1,
  "name": "Ventas",
  "code": "VEN",
  "description": null,
  "cost_center_id": null,
  "is_active": true,
  "sort_order": 0,
  "created_at": "...",
  "updated_at": "..."
}
```

## Errores [#errores]

| Status | Causa                                                                                                                                                                                                                                                                                                                            |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | `department_number` inválido en la URL; falla de validación del cuerpo; `parent_department_number` no encontrado; intento de poner el padre en sí mismo o en un descendiente (`CYCLE_DETECTED`); `cost_center_code` o `cost_center.parent_cost_center_code` no encontrado; `cost_center_code` y `cost_center` enviados a la vez. |
| `404`  | El departamento con ese `department_number` no existe (o fue eliminado) en esta organización.                                                                                                                                                                                                                                    |
| `409`  | Carrera por `code` duplicado durante la escritura.                                                                                                                                                                                                                                                                               |