# Editar (/docs/developers/api-reference/payroll-concepts/edit)

## Descripcion general [#descripcion-general]

Esta ruta actualiza parcialmente un concepto de nómina **extralegal** (`origin: "custom"`). Todos los campos del cuerpo son **opcionales**: si omites una clave, ese campo queda intacto. El identificador en la URL es el `payroll_concept_number` del concepto dentro de tu organización. Los conceptos de ley (`origin: "legal"`) los administra la plataforma y no se editan por la API. Una solicitud exitosa devuelve `200` con la forma completa del concepto actualizado.

La API key necesita el permiso **Actualizar conceptos de nómina** y alcance sobre toda la organización.

## Ruta [#ruta]

`PATCH https://app.integranom.com/api/v1/payroll-concepts/{payroll_concept_number}`

**Parámetro de ruta:** `payroll_concept_number`: entero positivo, el número del concepto dentro de la organización.

## Actualizacion minima [#actualizacion-minima]

***

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

```json
{ "name": "Bono de productividad", "sort_order": 15 }
```

**cURL**

```bash
curl -X PATCH "https://app.integranom.com/api/v1/payroll-concepts/42" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Bono de productividad", "sort_order": 15 }'
```

**Respuesta**

```json
{
"payroll_concept_number": 42,
"code": "P070",
"name": "Bono de productividad",
"kind": "perception",
"informative_subtype": null,
"sat_classification": "percepcion",
"sat_key": "038",
"behavior": "captured",
"calculator_key": null,
"calc_mode": "manual",
"formula_expression": null,
"capture_unit": "amount",
"receipt_visibility": "when_nonzero",
"sdi_variability": "variable",
"deduction_priority": null,
"tracks_balance": false,
"origin": "custom",
"template_key": null,
"is_mandatory": false,
"self_managed": false,
"employer_responsibility": false,
"affects_net_cash": true,
"reduces_isr_base": false,
"reduces_isn_base": false,
"is_active": true,
"sort_order": 15,
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-15T11:15:32.000Z"
}
```

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

| Campo                     | Tipo           | Notas                                                                                                                                                                                                                                                                                                                                                 |
| ------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `code`                    | string         | 1–60 caracteres. Único por organización.                                                                                                                                                                                                                                                                                                              |
| `name`                    | string         | No puede ir vacío.                                                                                                                                                                                                                                                                                                                                    |
| `sat_key`                 | string \| null | Clave del catálogo SAT de la clasificación del concepto. `null` o `""` la limpia, salvo en un concepto que se timbra. Un concepto que no se timbra no lleva clave.                                                                                                                                                                                    |
| `formula_expression`      | string \| null | Solo para conceptos de fórmula (`behavior: "formula"`); no se puede limpiar. En cualquier otro concepto se ignora.                                                                                                                                                                                                                                    |
| `employer_responsibility` | boolean        |                                                                                                                                                                                                                                                                                                                                                       |
| `affects_net_cash`        | boolean        |                                                                                                                                                                                                                                                                                                                                                       |
| `reduces_isr_base`        | boolean        | Solo deducciones con fórmula o captura manual. `true` resta el importe de la base gravable de ISR antes de calcular el impuesto. En otro concepto responde `400`.                                                                                                                                                                                     |
| `reduces_isn_base`        | boolean        | Solo deducciones con fórmula o captura manual. `true` resta el importe de la base del impuesto sobre nómina. En otro concepto responde `400`.                                                                                                                                                                                                         |
| `is_active`               | boolean        | `false` desactiva el concepto. **Desc Patronal Fondo Ahorro** no se puede desactivar mientras **Desc Aportación Trabajador F.A** esté activo, ni **Vales de despensa entregados** mientras **Vales de despensa** esté activo. `true` sobre **Desc Aportación Trabajador F.A** o **Vales de despensa** también activa su deducción si estaba inactiva. |
| `sort_order`              | entero         | Mayor o igual a 0.                                                                                                                                                                                                                                                                                                                                    |

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

`200 OK`: el objeto completo del concepto actualizado, con la misma forma del ejemplo.

`is_mandatory` es de solo lectura y no se envía en el cuerpo: es `true` solo en un concepto de ley que la nómina calcula a cada empleado, como el sueldo o el ISR, y `false` en los demás, incluidos todos los extralegales. Quién recibe un concepto extralegal lo decide su contrato.

### `400`: Desc Patronal Fondo Ahorro con el fondo del trabajador activo [#400-desc-patronal-fondo-ahorro-con-el-fondo-del-trabajador-activo]

```json
{
  "message": "La validación falló.",
  "errors": [
    {
      "field": "is_active",
      "code": "SAVINGS_FUND_PAIR_ACTIVE",
      "message": "Desc Patronal Fondo Ahorro no se puede desactivar mientras Desc Aportación Trabajador F.A esté activo."
    }
  ]
}
```

Con **Vales de despensa entregados** mientras **Vales de despensa** está activo, el error es el mismo con `code` `FOOD_VOUCHER_PAIR_ACTIVE` y el mensaje "Vales de despensa entregados no se puede desactivar mientras Vales de despensa esté activo."

## Errores [#errores]

| Status | Causa                                                                                                                                                     |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | `payroll_concept_number` inválido en la URL, cuerpo que no es JSON, o falla de validación de campos.                                                      |
| `400`  | `sat_key` inválida para la clasificación del concepto, limpiada en un concepto que se timbra, o enviada a un concepto que no se timbra (`INVALID_INPUT`). |
| `400`  | `formula_expression` en `null` en un concepto de fórmula.                                                                                                 |
| `400`  | `is_active: false` sobre **Desc Patronal Fondo Ahorro** mientras **Desc Aportación Trabajador F.A** está activo (`SAVINGS_FUND_PAIR_ACTIVE`).             |
| `400`  | `is_active: false` sobre **Vales de despensa entregados** mientras **Vales de despensa** está activo (`FOOD_VOUCHER_PAIR_ACTIVE`).                        |
| `400`  | `reduces_isr_base` o `reduces_isn_base` en `true` sobre un concepto que no es deducción con fórmula o captura manual (`INVALID_INPUT`).                   |
| `403`  | El concepto es de ley (`IMMUTABLE_LEGAL_CONCEPT`), o la API key no tiene alcance sobre toda la organización.                                              |
| `404`  | El concepto no existe o fue eliminado en esta organización.                                                                                               |
| `409`  | Ya existe otro concepto con ese `code` en la organización.                                                                                                |