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

## Descripcion general [#descripcion-general]

Este endpoint permite actualizar parcialmente un calendario de nómina. Todos los campos del cuerpo son **opcionales**: si omites una clave, ese campo queda intacto. Solo `name`, `pay_day_offset` e `is_active` son mutables; `frequency`, la fecha ancla (`anchor_date`), `timezone` y la razón social son **inmutables**, porque cambiarlos invalidaría los periodos ya generados. El identificador en la URL es el `payroll_calendar_number` del calendario dentro de tu organización. Una solicitud exitosa devuelve `200` con la forma completa del calendario actualizado.

## Endpoint [#endpoint]

`PATCH https://app.integranom.com/api/v1/payroll-calendars/{payroll_calendar_number}`

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

## Actualizacion minima [#actualizacion-minima]

***

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

```json
{ "name": "Quincenal 2026 (revisado)" }
```

**cURL**

```bash
curl -X PATCH "https://app.integranom.com/api/v1/payroll-calendars/3" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Quincenal 2026 (revisado)" }'
```

**Respuesta**

```json
{
"payroll_calendar_number": 3,
"legal_entity_number": 1,
"name": "Quincenal 2026 (revisado)",
"frequency": "semimonthly",
"isr_tariff_frequency": "semimonthly",
"applies_seventh_day_discount": true,
"month_day_factor": 30,
"anchor_date": "2026-01-01T00:00:00.000Z",
"pay_day_offset": 3,
"timezone": "America/Mexico_City",
"is_active": true,
"periods_count": 24,
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T11:15:32.000Z"
}
```

## Ajustar la fecha de pago y desactivar [#ajustar-la-fecha-de-pago-y-desactivar]

***

`pay_day_offset` reajusta cuántos días después del fin del periodo cae la fecha de pago (un valor negativo la adelanta antes del cierre). `is_active: false` desactiva el calendario, pero solo si **no** hay empleados activos o pendientes asignados a él: en ese caso la solicitud falla con `409` e incluye `affected_count`. Reasigna esos empleados a otro calendario antes de desactivarlo.

```json
{
  "pay_day_offset": 5,
  "is_active": false
}
```

**cURL**

```bash
curl -X PATCH "https://app.integranom.com/api/v1/payroll-calendars/3" \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "pay_day_offset": 5,
  "is_active": false
}'
```

**Respuesta**

```json
{
"payroll_calendar_number": 3,
"legal_entity_number": 1,
"name": "Quincenal 2026",
"frequency": "semimonthly",
"isr_tariff_frequency": "semimonthly",
"applies_seventh_day_discount": true,
"month_day_factor": 30,
"anchor_date": "2026-01-01T00:00:00.000Z",
"pay_day_offset": 5,
"timezone": "America/Mexico_City",
"is_active": false,
"periods_count": 24,
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T11:18:09.000Z"
}
```

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

| Campo                          | Tipo    | Notas                                                                                                                                                                                                                                                                                                                                            |
| ------------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `name`                         | string  | 3–60 caracteres. Único por razón social.                                                                                                                                                                                                                                                                                                         |
| `pay_day_offset`               | integer | Entre `-15` y `15`. Días desde el fin del periodo hasta la fecha de pago; un valor negativo paga antes del cierre. No puede ser menor que el mínimo de la periodicidad del calendario (`0` en `daily`, `-6` en `weekly`, `-7` en `decennial`, `-13` en `biweekly`, `-12` en `semimonthly` y `-15` en `monthly`); si lo es, se rechaza con `400`. |
| `is_active`                    | boolean | Al ponerlo en `false` se rechaza (`409`) si hay empleados activos o pendientes asignados.                                                                                                                                                                                                                                                        |
| `isr_tariff_frequency`         | string  | Tabla del SAT con la que se retiene el ISR: el mismo valor que `frequency` del calendario, o `monthly`. Cualquier otro se rechaza con `400`. No modifica los periodos ya cerrados.                                                                                                                                                               |
| `applies_seventh_day_discount` | boolean | Si las faltas y ausencias sin goce descuentan además un sexto del día de descanso (séptimo día proporcional). Un valor que no sea booleano se rechaza con `400`. No modifica los periodos ya cerrados; los abiertos o calculados lo toman al recalcularse.                                                                                       |
| `month_day_factor`             | number  | Días del mes del calendario: `30` o `30.4` (el número, no texto). Cualquier otro valor se rechaza con `400` y el mensaje `Los días del mes deben ser 30 o 30.4.` No modifica los periodos ya cerrados; los abiertos o calculados lo toman al recalcularse.                                                                                       |

**Campos inmutables:** `frequency`, `anchor_date`, `timezone` y la razón social no se pueden editar — cambiarlos invalidaría los periodos ya generados. Para una configuración distinta, crea un calendario nuevo.

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

`200 OK` — misma forma que una fila de [listar](/docs/developers/api-reference/payroll-calendars/list):

```json
{
  "payroll_calendar_number": 3,
  "legal_entity_number": 1,
  "name": "Quincenal 2026",
  "frequency": "semimonthly",
  "isr_tariff_frequency": "semimonthly",
  "applies_seventh_day_discount": true,
  "month_day_factor": 30,
  "anchor_date": "2026-01-01T00:00:00.000Z",
  "pay_day_offset": 3,
  "timezone": "America/Mexico_City",
  "is_active": true,
  "periods_count": 24,
  "created_at": "...",
  "updated_at": "..."
}
```

## Errores [#errores]

| Status | Causa                                                                                                                                                                                 |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | `payroll_calendar_number` inválido en la URL, o falla de validación del cuerpo.                                                                                                       |
| `404`  | El calendario con ese `payroll_calendar_number` no existe (o fue eliminado) en esta organización.                                                                                     |
| `409`  | `is_active: false` pero hay empleados activos o pendientes asignados — la respuesta incluye `affected_count`. También cuando el `name` ya existe para la razón social del calendario. |

Ejemplo de cuerpo `409` al intentar desactivar:

```json
{
  "message": "Cannot deactivate a payroll calendar while active or pending employees are assigned to it. Reassign them first.",
  "affected_count": 12
}
```