Crear o modificar lista de empleados (simplificado)

Este endpoint es una simplificación de Crear o modificar lista de empleados (complejo). Permite crear o modificar la lista de empleados incluyendo solo información acerca de la persona, sus asociaciones a servicio y sus contratos.

PUT /api/v1/businesses/{businessId}/import/simple/employees

A continuación, se expone una explicación detallada de cada uno de los campos que pueden conformar el cuerpo de la petición, siendo algunos de ellos obligatorios para que esta se realice de manera exitosa.

Los campos obligatorios están marcados con un asterisco (*).

Cuerpo de la petición

Objeto person*

Incluye los datos personales del empleado identificado a través de su employeeId.

"person": {
      "name": "string",
      "surname": "string",
      "group": "string",
      "email": "string",
      "birthday": "string",
      "employeeId": "string",
      "seniority": "string",
      "aptitudes": [
        {
          "productId": "string",
          "aptitudes": [
            {
              "locationId": "string",
              "level": 0
            }
          ]
        }
      ]
    }
Detalles
  • name* : nombre del empleado.

  • surname*: apellido(s) del empleado.

  • group: si se han definido grupos dentro del negocio, el grupo al que pertenece el empleado.

  • email: el email de empleado, con formato correcto.

  • birthday: la fecha de nacimiento con formato yyyy-MM-dd.

  • employeeId*: identificador del empleado en el sistema externo.

  • seniority: antigüedad del empleado en formato yyyy-MM-dd.

  • aptitudes: conjunto de capacidades que posee el empleado en un producto determinado. Para añadir las aptitudes en un producto o sección concreta, deben especificarse los siguientes campos:

    • productId *: identificador externo del producto al que está vinculada la aptitud.

    • aptitudes *: cada una de las aptitudes que se definen para el empleado en el producto indicado. Será necesario añadir los siguientes datos:

      • locationId*: identificador de la tarea a la que está vinculada la aptitud.

      • level*: nivel de competencia en dicha tarea en un rango de 0 (no competente) a 3 (experto).

Objeto serviceAssociations

Incluye la información relativa a las asociaciones a servicio establecidas para el empleado.

"serviceAssociations": [
      {
        "ownerProduct": "string",
        "product": "string",
        "from": "string",
        "to": "string",
        "splitPresence": true,
        "unplannable": true,
        "disponibility": [
          {
            "from": "string",
            "to": "string",
            "ranges": [
              {
                "dayType": "string",
                "startMinuteDay": 0,
                "duration": 0
              }
            ]
          }
        ],
        "id": "string"
      }
    ]
Detalles
  • ownerProduct* : identificador del producto o sección al que pertenece el empleado.

  • product*: identificador del producto o sección donde va a trabajar el empleado. Puede ser igual al ownerProduct.

  • from*: fecha de inicio de la asociación a servicio en formato yyyy-MM-dd.

  • to: fecha de finalización de la asociación a servicio en formato yyyy-MM-dd. Puede ser null, indicando que no hay fecha de fin establecida.

  • splitPresence: determina si se trata de un turno partido. El valor por defecto es true.

  • unplannable: determina si el empleado será ignorado por el planificador, por lo que deberá planificarse a mano. El valor por defecto es false.

  • disponibility: disponibilidad del empleado dependiendo del tipo de día durante un período concreto. Si no se define, la disponibilidad de un empleado por defecto es 24/7, teniendo en cuenta las restricciones de su contrato. Para cambiarla, será necesario enviar los siguientes datos:

    • from*: fecha de inicio del periodo de la disponibilidad en formato yyyy-MM-dd.

    • to*: fecha de finalización del periodo de la disponibilidad en formato yyyy-MM-dd. Puede establecerse como null siempre que la asociación a servicio también lo sea.

    • ranges*: lista (array) de disponibilidades para cada tipo de día. Estos rangos deben estar definidos en el contrato e incluyen los siguientes parámetros:

      • dayType*: tipo de día al que se aplica la disponibilidad. Las opciones disponibles del sistema son las siguientes: ALL, WEEKENDS, WORKED, HOLIDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY. No obstante, se pueden definir otros tipos de día a nivel de negocio.

      • startMinuteDay*: inicio de la disponibilidad en minutos a partir de las 00:00. Por ejemplo 600 para las 10:00.

      • duration*: duración del rango en minutos.

  • id: identificador de la asociación a servicio en el sistema externo.

Objeto contracts

Incluye la información relativa a los contratos que se aplican al empleado, en términos de horas trabajadas, limitaciones laborales, etc.

"contracts": [
      {
        "from": "string",
        "to": "string",
        "regularMinutes": 0,
        "countingDays": "string",
        "additionalMinutes": 0,
        "regularControlPeriod": "string",
        "additionalControlPeriod": "string",
        "calendarDaysOff": true,
        "numberOfHolidays": 0,
        "numberOfPublicHolidays": 0,
        "weeklyDaysInvolved": "string",
        "metadata": {},
        "costPerHour": 0,
        "personCategory": "string",
        "id": "string",
        "contractTypeId": "string"
      }
    ]
Detalles
  • from*: fecha de inicio del contrato en formato yyyy-MM-dd.

  • to: fecha de finalización del contrato en formato yyyy-MM-dd. Puede enviarse como null si no hay una fecha de fin establecida.

  • regularMinutes*: número de minutos que se espera que el empleado trabaje según los términos de su contrato laboral. Este campo depende del periodo de control que se establezca para el contrato: anual, semanal o diario.

  • countingDays: en un contrato diario, indica qué días computan como trabajados. Su valor puede ser MONDAY_SUNDAY, MONDAY_SATURDAY o LABOR_DAYS.

  • additionalMinutes*: número de minutos adicionales que el empleado puede trabajar según los términos de su contrato laboral y que excede del tiempo regular del mismo. Este campo depende del periodo de control que se establezca para el contrato: anual, semanal o diario.

  • regularControlPeriod*: periodo de control para las horas regulares establecidas en el contrato. Puede ser WEEKLY, MONTHLY o YEARLY.

  • additionalControlPeriod*: periodo de control para las horas complementarias. Puede ser WEEKLY, MONTHLY o YEARLY.

  • calendarDaysOff*: determina si las vacaciones serán procesadas en días naturales (true) o laborables (false).

  • numberOfHolidays*: número de días de vacaciones que tiene el empleado en su contrato.

  • numberOfPublicHolidays*: número de días festivos que tiene el empleado en su contrato.

  • weeklyDaysInvolved*: días de la semana que serán computables. Este campo puede definirse como MONDAY_SUNDAY, MONDAY_SATURDAY.

  • metadata: cualquier dato adicional relativo al contrato. La estructura de estos metadatos debe ser configurada previamente.

  • costPerHour: coste del empleado por hora trabajada.

  • personCategory*: identificador externo de la categoría del empleado.

  • id: identificador externo del contrato. Es muy recomendable proporcionar este campo. De lo contrario, el sistema intentará hacer coincidir los objetos dados. La identificación debe ser única y debe ser la misma siempre. Limitado a 200 caracteres.

  • contractTypeId: identificador del tipo de contrato que se aplica. Si se añade, las características del contrato serán sobrescritas por aquellas del tipo de contrato. Si no se especifica, se podrán aplicar filtros de tipo de contrato para asignarle uno.

Ejemplo de la petición

Una vez realizado el análisis de los distintos campos, se muestra un ejemplo del cuerpo de la petición:

[
  {
    "person": {
      "name": "Brian",
      "surname": "Cohen",
      "group": "01",
      "email": "brian@orquest.com",
      "birthday": "1987-12-01",
      "employeeId": "021298521",
      "seniority": "2021-12-01",
      "aptitudes": [
        {
          "productId": "C14",
          "aptitudes": [
            {
              "locationId": "101",
              "level": 3
            },
            {
              "locationId": "102",
              "level": 2
            }
          ]
        }
      ]
    },
    "serviceAssociations": [
      {
        "ownerProduct": "C14",
        "product": "C14",
        "from": "2024-04-11",
        "to": null,
        "splitPresence": true,
        "unplannable": false,
        "disponibility": [
          {
            "from": "2024-04-11",
            "to": null,
            "ranges": [
              {
                "dayType": "ALL",
                "startMinuteDay": 600,
                "duration": 300
              }
            ]
          }
        ],
        "id": "asb1415"
      }
    ],
    "contracts": [
      {
        "from": "2024-04-11",
        "to": "2027-04-11",
        "regularMinutes": 2400,
        "countingDays": "MONDAY_SUNDAY",
        "additionalMinutes": 360,
        "regularControlPeriod": "WEEKLY",
        "additionalControlPeriod": "WEEKLY",
        "calendarDaysOff": true,
        "numberOfHolidays": 25,
        "numberOfPublicHolidays": 7,
        "weeklyDaysInvolved": "MONDAY_SUNDAY",
        "metadata": {
          "full": true,
          "days": 215,
          "taxProfit": "none"
        },
        "costPerHour": 200.34,
        "personCategory": "DE125",
        "id": "321abc654def",
        "contractTypeId": "07H"
      }
    ]
  }
]

Aspectos que tener en cuenta

Cada entidad de la lista tiene su propio estado, es decir, cada elemento de la lista tiene su propio conjunto de atributos o propiedades que se pueden actualizar de manera independiente. No se permiten más de 30 elementos en el cuerpo de la petición.

Cada entidad generará una operación atómica que se puede revertir de forma automática si hay errores: el error se mostrará en la respuesta de la petición.

Si se incluyen datos del objeto user, se valida la existencia de ese usuario en Orquest, de modo que se establecen los siguientes escenarios:

  • Si el usuario no existe, se crea y se vincula al empleado.

  • Si el usuario existe y ya está vinculado al empleado de la petición, se actualiza la información.

  • Si el usuario existe y está vinculado a otro empleado, la operación se cancela y devuelve HTTP 409 - Conflict, señalando el conflicto con los detalles del error en el cuerpo de la respuesta.

Si la categoría de empleado (personCategory) especificada en el cuerpo de la petición no existe en el sistema, se crea automáticamente una nueva categoría (Configuración de negocio > Categorías de empleado). En este caso, el nombre y el identificador externo de la nueva categoría coincidirán con el valor proporcionado en este campo. Por lo tanto, es recomendable revisar las categorías existentes antes de realizar la petición para evitar la creación innecesaria de categorías adicionales.

Enlaces de interés

¿Qué es un empleado?

¿Qué es una asociación a servicio?

¿Qué es un contrato? ¿Y un tipo de contrato?