NominexDocs
Referencia de la APIEmpleados

Editar

Actualiza parcialmente un empleado existente.

Descripcion general

Este endpoint permite actualizar parcialmente un empleado. Todos los campos del cuerpo son opcionales y operan en tres capas dentro de la misma transacción: datos personales del empleado, datos laborales (puesto, departamento, sucursal, registro patronal, etc.), y valores de campos personalizados. Omitir una clave significa que ese campo no se toca; null la limpia (cuando aplica).

El identificador en la URL es el employee_number. Una solicitud exitosa devuelve 200 con el objeto plano del empleado (datos personales + los de su empleo actual, mismo shape que POST en modo single). Los empleados eliminados se tratan como no encontrados (404).

Sobre los datos laborales. Solo pueden modificarse cuando el empleado está activo (no dado de baja). Si el empleado está dado de baja, tocar cualquier campo laboral devuelve 400 con NO_OPEN_EMPLOYMENT — primero debes reactivarlo.

Invariante IMSS. Cuando el valor efectivo de contributes_to_imss queda en true, el employer_registration efectivo debe estar puesto. Si no, la respuesta es 400.

Datos fijos por historial. Cuando el empleado ya tiene una nómina cerrada en la que se le pagó, o su alta ante el IMSS ya se presentó (desde la plataforma o fuera de ella), worker_type, contributes_to_imss y employer_registration ya no pueden cambiar: la respuesta es 409 con LOCKED_BY_PAYROLL_HISTORY en el campo. Esos datos cambian con una baja y un reingreso. payroll_calendar_number no puede cambiar mientras el empleado está en una nómina abierta (409 con LOCKED_BY_OPEN_PAYROLL). Reenviar el valor guardado no cuenta como cambio.

Tipo de trabajador. Cuando el worker_type efectivo no es subordinate, el contributes_to_imss efectivo debe ser false y los valores efectivos de imss_number y employer_registration deben quedar vacíos (sino, 400): para reclasificar a un subordinado, envía esos campos en null en la misma solicitud. Reclasificar a asimilado u honorarios borra la fecha de antigüedad del empleado. Reclasificar a un trabajador no altera ninguna corrida cerrada: cada corrida congela el tipo con el que se calculó. Un subordinate con créditos INFONAVIT o FONACOT activos o suspendidos no puede pasar a asimilado ni a honorarios (409 con WORKER_TYPE_HAS_CREDITS).

Compensación y estatus. El endpoint acepta también la compensación (daily_base_salary, regimen_fiscal, payroll_calendar_number, contract_number), el horario de trabajo (work_schedule_number o work_schedule_bundle_number) y las unidades organizacionales (organizational_units) del empleado. Cambiar el sueldo registra una nueva fila con fecha efectiva en el historial de sueldos. activate: true da de alta al empleado solo si el estado fusionado queda listo para nómina (sino, 400 ACTIVATION_INCOMPLETE); si su fecha de ingreso cae en periodos cerrados, exige confirm_retro: true (sino, 409 RETRO_CONFIRMATION_REQUIRED) y paga esos periodos con ajustes retroactivos; activate: false lo deja en pending; si omites activate, un empleado active se degrada automáticamente a pending cuando una edición elimina un dato requerido para nómina. El arreglo organizational_units reemplaza el conjunto actual (un arreglo vacío lo limpia).

Endpoint

PATCHhttps://app.integranom.com/api/v1/employees/{employee_number}

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

Actualizar datos personales


Envía solo los campos que quieras cambiar. El resto del empleado (incluyendo sus datos laborales) queda intacto.

{ "first_name": "María José", "notes": "Promovida en marzo." }

Reasignar departamento y limpiar puesto


Los campos laborales solo aplican si el empleado está activo. null desvincula (en este caso, deja al empleado sin puesto asignado). Si el empleado está dado de baja, la solicitud falla con 400 NO_OPEN_EMPLOYMENT.

{ "department_code": "MKT", "job_position_code": null }

Alternar contribucion IMSS


Cuando contributes_to_imss efectivo es true, el employer_registration efectivo debe estar puesto. Si lo dejas en true sin un registro patronal vinculado (ni enviado ni almacenado), la solicitud falla con 400.

{ "contributes_to_imss": false }

Campos personalizados


Los key de campos personalizados se envían como claves planas en la raíz del cuerpo, junto con cualquier campo nativo del empleado en el mismo request. Cada key enviada se guarda uno a uno: si ya tenía valor, se sobrescribe; si no lo tenía, se crea. null limpia ese valor específico. Las key omitidas del payload no se tocan — es un patch parcial sobre el conjunto de valores del empleado.

{
  "department_code": "MKT",
  "shirt_size": "L",
  "allergens": null
}

Campos del cuerpo — datos personales

CampoTipoNotas
first_namestringMínimo 1 carácter. No aceptado como null.
middle_namestring | null
paternal_last_namestringMínimo 1 carácter. No aceptado como null.
maternal_last_namestring | null
gendermale | female | unspecified
birth_datestring YYYY-MM-DD | null
birth_countrystring | null
birth_statestring | nullNombre del estado de nacimiento. Se acepta por compatibilidad: si coincide con un estado del catálogo se guarda su clave; si no, se conserva el texto. Prefiere birth_state_code.
birth_citystring | nullNombre del municipio de nacimiento. Se acepta por compatibilidad: si coincide con un municipio del estado de nacimiento se guarda su clave; si no, se conserva el texto. Prefiere birth_municipality_code.
birth_state_codestring | nullEstado de nacimiento, clave SAT c_Estado de 3 letras (por ejemplo JAL).
birth_municipality_codestring | nullMunicipio de nacimiento, clave INEGI de 3 dígitos dentro del estado de nacimiento (por ejemplo 120). Al cambiar el estado sin enviar municipio, el municipio se limpia.
birth_placestring | null
nationalitystring | nullNacionalidad en gentilicio, del catálogo de nacionalidades (por ejemplo Mexicana). No distingue mayúsculas, acentos ni género, y acepta el nombre del país, la forma en inglés o la clave de tres letras: MEXICANO, México y MEX se guardan como Mexicana. Un valor fuera del catálogo responde INVALID_NATIONALITY. null la borra.
phone_numberstring | nullTeléfono del empleado con clave de país y sin espacios, por ejemplo +529611234567. null lo borra.
secondary_phone_numberstring | nullTeléfono secundario. Mismo formato que phone_number. null lo borra.
postal_codestring ##### | nullCódigo postal de 5 dígitos del domicilio fiscal (el de la Constancia de Situación Fiscal), que es el que valida el CFDI. Cuenta para la preparación de nómina. Se ignora si la casilla queda en true (ve fiscal_address_same_as_home).
work_center_state_codestringEntidad del centro de trabajo, clave SAT c_Estado de 3 letras (por ejemplo CMX). No acepta null: solo puede cambiarse por otra entidad válida. Cuenta para la preparación de nómina.
home_streetstring | nullCalle del domicilio real (donde vive el empleado). Independiente del domicilio fiscal.
home_exterior_numberstring | nullNúmero exterior del domicilio real.
home_interior_numberstring | nullNúmero interior del domicilio real.
home_neighborhoodstring | nullColonia del domicilio real.
home_citystring | nullNombre del municipio o alcaldía. Se acepta por compatibilidad: si coincide con un municipio del estado se guarda su clave; si no, se conserva el texto. Prefiere home_municipality_code.
home_municipality_codestring | nullMunicipio o alcaldía del domicilio real, clave INEGI de 3 dígitos dentro de home_state_code (por ejemplo 039). Al cambiar el estado sin enviar municipio, el municipio se limpia.
home_state_codestring | nullEstado del domicilio real, clave SAT c_Estado de 3 letras (por ejemplo NLE).
home_postal_codestring ##### | nullCódigo postal de 5 dígitos del domicilio real. Solo cuenta para la preparación de nómina si fiscal_address_same_as_home es true. null lo borra.
fiscal_address_same_as_homebooleantrue copia el domicilio real al fiscal en cada edición e ignora postal_code, domicile_state_code y los fiscal_* enviados; mientras siga en true, cambiar un home_* cambia también el domicilio fiscal. Si se omite, conserva el valor guardado, salvo que envíes algún campo del domicilio fiscal: entonces pasa a false.
domicile_state_codestring | nullEstado del domicilio fiscal, clave SAT c_Estado de 3 letras. Cambiarlo borra fiscal_municipality_code si no se envía uno nuevo.
fiscal_streetstring | nullCalle del domicilio fiscal.
fiscal_exterior_numberstring | nullNúmero exterior del domicilio fiscal.
fiscal_interior_numberstring | nullNúmero interior del domicilio fiscal.
fiscal_neighborhoodstring | nullColonia del domicilio fiscal.
fiscal_municipality_codestring | nullMunicipio o alcaldía del domicilio fiscal, clave INEGI de 3 dígitos dentro de domicile_state_code.
fiscal_citystring | nullNombre del municipio del domicilio fiscal. Se acepta por compatibilidad igual que home_city. Prefiere fiscal_municipality_code.
internal_numberstring | nullNúmero interno que asigna la organización. Único en la organización sin distinguir mayúsculas: 409 con DUPLICATE_INTERNAL_NUMBER si otro empleado ya lo tiene. null lo borra.
bankstring | nullNombre del banco, máximo 60 caracteres. Texto libre; utiliza el nombre del catálogo SAT c_Banco para que coincida con el selector de la plataforma.
clabestring 18 dígitos | nullCLABE interbancaria. Se valida el dígito verificador.
account_numberstring | nullNúmero de cuenta, solo dígitos: máximo 12 si bank es BANREGIO, máximo 11 para cualquier otro banco. Sin una clabe válida, el bank efectivo es obligatorio: 400 con BANK_REQUIRED_FOR_ACCOUNT. Solo se revisa si la solicitud envía bank, clabe o account_number.
card_numberstring 16 dígitos | nullNúmero de tarjeta.
notesstring | null
rfcstring12 o 13 caracteres. Editable — se devuelve 409 si el nuevo valor colisiona con otro empleado de la organización.
curpstringExactamente 18 caracteres. Editable — 409 en colisión.

Campos del cuerpo — datos laborales

Aplican solo cuando el empleado está activo (no dado de baja). Si el empleado está dado de baja, cualquier campo de esta sección produce 400 NO_OPEN_EMPLOYMENT.

CampoTipoNotas
job_position_codestring | null
branch_codestring | null
department_codestring | null
cost_center_codestring | null
employer_registrationstring | nullDentro de la razón social del empleado. Debe quedar en null cuando el worker_type efectivo no es subordinate. Fijo cuando el empleado tiene historial de nómina (409 LOCKED_BY_PAYROLL_HISTORY).
imss_numberstring | nullNSS de 11 dígitos cuando se asigna. Se valida el dígito verificador. Debe quedar en null cuando el worker_type efectivo no es subordinate.
is_included_in_payroll_calculationsboolean
contributes_to_imssbooleanCuando el valor efectivo es true, el employer_registration efectivo debe estar puesto; sino 400. Debe quedar en false cuando el worker_type efectivo no es subordinate. Fijo cuando el empleado tiene historial de nómina (409 LOCKED_BY_PAYROLL_HISTORY).
worker_typesubordinate | asimilado | honorariosTipo de trabajador para efectos estatutarios. No se infiere del tipo de contrato SAT. Fijo cuando el empleado tiene historial de nómina (409 LOCKED_BY_PAYROLL_HISTORY); 409 WORKER_TYPE_HAS_CREDITS al dejar de ser subordinate con créditos INFONAVIT o FONACOT activos.
minimum_wage_zonegeneral | northern_borderZona económica del empleado: Zona del Salario Mínimo General o Zona Libre de la Frontera Norte. Al cambiarla, el daily_base_salary efectivo se vuelve a validar contra el mínimo de la nueva zona. Cada corrida congela la zona con la que se calculó.
salary_typefixed | mixed | variable | nullTipo de salario del empleado: fijo, mixto o variable. Con null se borra. Es informativo: no cambia el cálculo de la nómina.
imss_worker_typepermanent | eventual_city | eventual_construction | eventual_rural | nullTipo de trabajador IMSS: permanente, eventual de la ciudad, eventual de la construcción o eventual del campo. Con null se borra. Obligatorio para un empleado activo que aporta al IMSS. Si el empleado no aporta al IMSS, se guarda vacío.
imss_work_schedulefull | one_day_week | two_day_week | three_day_week | four_day_week | five_day_week | reduced_day | nullSemana o jornada reducida: semana completa, semana reducida de 1 a 5 días o jornada reducida. Con null se borra. Obligatorio para un empleado activo que aporta al IMSS. Si el empleado no aporta al IMSS, se guarda vacío.
is_unionizedbooleanIndica si el trabajador está sindicalizado.
receives_annual_isr_adjustmentbooleanSi el subordinado entra al ajuste anual de ISR. true con un worker_type efectivo distinto de subordinate responde 400. Reclasificar a asimilado u honorarios lo regresa a false, y reclasificar a subordinate lo vuelve true si no lo envías.
opts_into_annual_isr_adjustmentbooleanObsoleto: utiliza receives_annual_isr_adjustment. Un true se acepta como su equivalente; un false se ignora, porque antes no excluía a ningún subordinado. Si envías ambos, gana receives_annual_isr_adjustment. Las respuestas lo devuelven siempre en false: su significado era la solicitud de un asimilado o un trabajador por honorarios, que ya no existe. Antes un subordinado siempre entraba al ajuste; ahora receives_annual_isr_adjustment decide. Un error sobre este campo se reporta con el nombre que enviaste.
daily_base_salarynumber | nullSueldo diario base (> 0). Un cambio registra una nueva fila con fecha efectiva en el historial de sueldos.
regimen_fiscalstring | nullClave SAT del régimen del trabajador (c_TipoRegimen). El valor efectivo debe corresponder al worker_type efectivo: 02 o 13 para subordinate, del 05 al 11 para asimilado y honorarios (sino 400).
work_shift_typestring | nullClave SAT del tipo de jornada (c_TipoJornada). Va en el recibo timbrado y cuenta para la preparación de nómina.
benefit_scheme_numbernullYa no existe: las prestaciones del empleado vienen de su contrato (contract_number). Se acepta null y se ignora; cualquier otro valor responde 400.
payroll_calendar_numberinteger positivo | nullCalendario de nómina; debe pertenecer a la razón social del empleado. No cambia mientras el empleado está en una nómina abierta (409 LOCKED_BY_OPEN_PAYROLL).
contract_numberinteger positivo | nullContrato; debe estar vinculado a la razón social del empleado.
work_schedule_numberinteger positivo | nullHorario semanal fijo. Debe ser un horario activo de la organización; null limpia la asignación. Excluyente con work_schedule_bundle_number.
work_schedule_bundle_numberinteger positivo | nullRotación de horarios. Debe ser una rotación activa de la organización; null limpia la asignación. Excluyente con work_schedule_number.
work_schedule_bundle_start_stepinteger positivo | nullPaso del ciclo en el que arranca el empleado. Opcional: omitido, se utiliza el primer paso de la rotación. Un paso con valor exige work_schedule_bundle_number en el mismo cuerpo.
organizational_unitsinteger[]Reemplaza el conjunto de unidades organizacionales (un arreglo vacío lo limpia). Máximo una unidad por tipo.
activatebooleantrue da de alta (active) solo si el estado fusionado está listo para nómina (sino 400 ACTIVATION_INCOMPLETE); false deja en pending. Omitirlo aún degrada active→pending si la edición rompe la preparación.
confirm_retrobooleanAutoriza que dar de alta a un empleado pending cuya fecha de ingreso cae en periodos cerrados pague esos periodos con ajustes retroactivos. Sin él, esa alta responde 409 RETRO_CONFIRMATION_REQUIRED (con retro_periods) y no se guarda nada.

Campos del cuerpo — valores de campos personalizados

Los valores de campos personalizados se envían como claves planas en la raíz del cuerpo, junto a los campos nativos del empleado. Cada key enviada se guarda (sobrescribe el valor anterior si existía); null limpia ese campo; las key omitidas del payload no se tocan. Los tipos aceptados son los mismos que en crear (text/select → string, number → número, boolean → true/false, date → string YYYY-MM-DD).

No aceptados

  • legal_entity_number — la razón social del empleado activo es inmutable. Para cambiarla, primero da de baja al empleado y reactívalo contra una nueva razón social.
  • hire_date, seniority_date — se fijan al crear/reactivar.
  • termination_date — se fija vía /terminate.
  • employee_number — identificador en la URL.

Forma de la respuesta

200 OK — el objeto plano del empleado (datos personales + los de su empleo actual), misma forma que la respuesta de crear en modo single.

Errores

StatusCausa
400employee_number inválido en la URL; falla de validación del cuerpo; NO_OPEN_EMPLOYMENT cuando se tocan campos laborales y el empleado está dado de baja; *_NOT_FOUND para códigos que no resuelven (incluye PAYROLL_CALENDAR_NOT_FOUND, CONTRACT_NOT_FOUND, ORGANIZATIONAL_UNIT_NOT_FOUND); ORGANIZATIONAL_UNIT_DUPLICATE_TYPE; ACTIVATION_INCOMPLETE al dar de alta un empleado que no está listo para nómina; BELOW_MINIMUM_WAGE cuando el daily_base_salary efectivo es menor al salario mínimo diario vigente de la minimum_wage_zone efectiva (tomado del catálogo salario_minimo, respetando el override de la razón social); INVALID_HOME_MUNICIPALITY / INVALID_FISCAL_MUNICIPALITY / INVALID_BIRTH_MUNICIPALITY cuando el municipio efectivo no pertenece al estado efectivo; ACCOUNT_NUMBER_TOO_LONG cuando el account_number efectivo excede los dígitos permitidos para el bank efectivo (12 para BANREGIO, 11 para cualquier otro); BANK_REQUIRED_FOR_ACCOUNT cuando el account_number efectivo no tiene bank ni una clabe válida; CUSTOM_FIELD_NOT_FOUND / CUSTOM_FIELD_INVALID_TYPE; invariante IMSS violada; regimen_fiscal que no corresponde al worker_type efectivo; imss_number o employer_registration efectivos en un empleado que no es subordinate.
404El empleado con ese employee_number no existe (o fue eliminado) en esta organización.
409RETRO_CONFIRMATION_REQUIRED al dar de alta a un empleado cuya fecha de ingreso cae en periodos cerrados sin confirm_retro: true; LOCKED_BY_PAYROLL_HISTORY al cambiar worker_type, contributes_to_imss o employer_registration de un empleado con historial de nómina; LOCKED_BY_OPEN_PAYROLL al cambiar payroll_calendar_number mientras está en una nómina abierta; WORKER_TYPE_HAS_CREDITS al dejar de ser subordinate con créditos INFONAVIT o FONACOT activos; DUPLICATE_INTERNAL_NUMBER; carrera por RFC/CURP duplicado durante la escritura (CONCURRENT_MODIFICATION).
Abrir Nominex