NominexDocs
Referencia de la APIContratos

Editar

Edita un contrato.

Descripcion general

Este endpoint permite actualizar parcialmente un contrato. Todos los campos del cuerpo son opcionales: si omites una clave, ese campo queda intacto; si envías description como null, se limpia. El identificador en la URL es el contract_number del contrato dentro de tu organización. Enviar legal_entity_numbers reemplaza el conjunto de razones sociales vinculadas, y enviar concept_numbers reemplaza el conjunto de conceptos extralegales. Una solicitud exitosa devuelve 200 con la forma completa del contrato actualizado.

Nota sobre concept_numbers: la API todavía no documenta cómo listar los conceptos de nómina, así que concept_numbers debe usar números que ya conozcas, o puedes omitirlo (arreglo vacío).

Endpoint

PATCHhttps://app.integranom.com/api/v1/contracts/{contract_number}

Path param: contract_number — entero positivo, el número de contrato dentro de la organización.

Actualizacion minima


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

{ "name": "Indeterminado jornada completa" }

Reemplazar razones sociales y conceptos


Al enviar legal_entity_numbers se reconcilian los vínculos con las razones sociales: el arreglo pasa a ser el conjunto completo de RS del contrato (se agregan las nuevas y se retiran las ausentes). Al enviar concept_numbers se reemplaza el conjunto de conceptos extralegales.

Si modificas las razones sociales, los conceptos vigentes se revalidan: cada concepto debe seguir activo y ser extralegal; de lo contrario la solicitud falla con CONCEPT_NOT_FOUND.

{
  "legal_entity_numbers": [1, 2, 3],
  "concept_numbers": [7]
}

Campos del cuerpo

CampoTipoNotas
legal_entity_numbersarreglo de enteros positivosAl menos 1 elemento. Reemplaza el conjunto de razones sociales vinculadas.
namestring3–80 caracteres, sin contar espacios al inicio o al final, que no se guardan. Único por organización.
contract_typestringCódigo SAT c_TipoContrato (p. ej. "01").
descriptionstring | nullnull limpia la descripción.
concept_numbersarreglo de enteros positivosReemplaza el conjunto de conceptos extralegales.
concept_calculationsarreglo de objetosReemplaza los cálculos por concepto. Si lo omites, los conceptos que siguen en el contrato conservan su cálculo y los conceptos nuevos empiezan con el suyo. Cada objeto sigue las reglas de crear y su concepto debe quedar en el contrato.
concept_valuesarreglo de objetosFormato anterior de concept_calculations, que se sigue aceptando con las reglas de crear. Si lo envías, reemplaza los cálculos por concepto igual que concept_calculations. No se envía junto con él.
is_activebooleanFlag activo controlado por el usuario. Al ponerlo en false con empleados activos o pendientes, la solicitud falla con 409 e informa affected_count.
PrestacionesLas claves de crear. Lo que omitas queda intacto.

Prestaciones

Las reglas que combinan campos (vacaciones del primer año, vales de despensa, fondo de ahorro) se validan contra el resultado de combinar tu solicitud con lo guardado, y responden 400 con INVALID_BENEFITS. Un valor fuera de rango en un solo campo responde con errors por campo. Por ejemplo, activar food_voucher_enabled exige que el contrato ya tenga, o que envíes, el porcentaje o el monto y el método de entrega. Enviar food_voucher_monthly_amount limpia food_voucher_rate, y al revés. Solo se juzgan los grupos que envías (aguinaldo, vales, fondo de ahorro). Modificar el valor de una prestación vuelve personalizado el contrato (template_key en null), igual que en el panel.

Coherencia al reconciliar

Los conceptos del contrato se revalidan en cada edición, incluso si no modificas legal_entity_numbers ni concept_numbers. Cada concepto adjunto debe seguir activo y ser extralegal; si alguno dejó de cumplirlo (por ejemplo, se desactivó), la solicitud se rechaza con CONCEPT_NOT_FOUND. Si un legal_entity_number no existe, el error es LEGAL_ENTITY_NOT_FOUND; si un concept_number no es un concepto extralegal activo, el error es CONCEPT_NOT_FOUND.

Forma de la respuesta

200 OK: el objeto completo del contrato actualizado, con sus prestaciones:

{
  "contract_number": 4,
  "name": "Indeterminado jornada completa",
  "contract_type": "01",
  "description": null,
  "is_active": true,
  "sort_order": 0,
  "legal_entity_numbers": [1, 2, 3],
  "concept_numbers": [7],
  "created_at": "2026-01-01T00:00:00.000Z",
  "updated_at": "2026-01-15T11:18:09.000Z"
}

Errores

400 — parámetro o validación

Para contract_number inválido en la URL, la respuesta es 400. Para fallas de validación del cuerpo, errors es un arreglo de problemas:

{
  "message": "Validation failed.",
  "errors": [
    {
      "field": "concept_numbers",
      "code": "CONCEPT_NOT_FOUND",
      "message": "No se encontró un concepto extralegal activo con el número '7' en la organización."
    }
  ]
}

Los códigos LEGAL_ENTITY_NOT_FOUND, CONCEPT_NOT_FOUND, CONCEPT_CALCULATION_NOT_ALLOWED, CONCEPT_VALUE_NOT_ALLOWED, WORK_SCHEDULE_NOT_FOUND, INVALID_BENEFITS y YEAR_END_BONUS_TABLE_GRADED aparecen en errors[].code. Un valor fuera de rango responde 400 con errors como objeto indexado por campo.

409 — desactivar con empleados vigentes

Se devuelve cuando envías is_active: false y el contrato aún tiene empleados activos o pendientes. El cuerpo informa cuántos empleos quedarían afectados vía affected_count:

{
  "message": "Cannot deactivate a contract with active or pending employees.",
  "affected_count": 3
}

409: contrato modificado

code: "CONTRACT_CHANGED": otra solicitud modificó el contrato mientras se procesaba la tuya. No se guardó nada; envíala de nuevo.

409 — nombre duplicado

Se devuelve cuando el nuevo name ya existe en la organización:

{
  "message": "A contract with this 'name' already exists in this organization."
}

Vocabulario de códigos de error

StatusCausa
400contract_number inválido en la URL; falla de validación del cuerpo (LEGAL_ENTITY_NOT_FOUND / CONCEPT_NOT_FOUND / CONCEPT_CALCULATION_NOT_ALLOWED / CONCEPT_VALUE_NOT_ALLOWED / WORK_SCHEDULE_NOT_FOUND / INVALID_BENEFITS / YEAR_END_BONUS_TABLE_GRADED).
403Alguna razón social del contrato o de legal_entity_numbers queda fuera del alcance de la API key.
404El contrato con ese contract_number no existe (o fue eliminado) en esta organización.
409is_active: false con empleados activos o pendientes (affected_count), name duplicado o CONTRACT_CHANGED.
Abrir Nominex