Saltar a contenido

Crear Fichaje por Incidencia

Este endpoint se utiliza cuando el empleado no puede realizar un fichaje estándar debido a restricciones del sistema (como estar fuera de horario o de ubicación), pero elige la opción de "Justificar y continuar".

Esto genera dos cosas simultáneamente: 1. Un registro de fichaje (entrada o salida). 2. Una incidencia asociada, que queda pendiente de revisión por el administrador.

Endpoint

POST /api/v2/incident/create-incident-and-checkin

Requiere autenticación con Token Bearer.

Parámetros del Body (JSON)

Campo Tipo Obligatorio Descripción
checkInType string Tipo de fichaje: "start" (entrada) o "end" (salida).
errorCode string El código de error que impidió el fichaje normal. Ejemplos: EARLY_EXIT, OUT_OF_SCHEDULE_WINDOW, NO_SCHEDULE_TODAY, OUT_OF_RANGE.
attemptedAt string (ISO) Fecha y hora exacta del intento de fichaje original. ISO 8601 (ej: "2025-02-02T10:30:00Z").
latitude number No Latitud GPS de la ubicación del empleado.
longitude number No Longitud GPS de la ubicación del empleado.
description string No Justificación o motivo proporcionado por el empleado.
source string No Origen del fichaje: "App" o "Web". Nuevo en v1.2.2
deviceId string No Identificador único del dispositivo (UUID). Nuevo en v1.2.2

Ejemplo de Petición

curl -X POST "https://api.musicaymaestro.com/api/v2/incident/create-incident-and-checkin" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "checkInType": "start",
    "errorCode": "OUT_OF_RANGE",
    "attemptedAt": "2025-02-02T08:55:00.000Z",
    "latitude": 40.4168,
    "longitude": -3.7038,
    "description": "Estaba en la puerta pero el GPS fallaba",
    "source": "App",
    "deviceId": "550e8400-e29b-41d4-a716-446655440000"
  }'

Respuesta Exitosa (201 Created)

{
  "status": "success",
  "message": "Time record started with incident created",
  "data": {
    "incident": {
      "id": 45,
      "employeeId": 101,
      "incidentType": "OUT_OF_RANGE",
      "description": "Estaba en la puerta pero el GPS fallaba",
      "status": "open",
      "source": "App",
      "deviceId": "550e8400-e29b-41d4-a716-446655440000",
      "createdAt": "2025-02-02T08:55:05.000Z"
    },
    "timeRecordId": 1234,
    "checkInType": "start",
    "registeredAt": "2025-02-02T08:55:05.000Z"
  }
}

Errores Comunes

  • 400 Bad Request: Si faltan campos obligatorios (errorCode, checkInType, etc.) o el formato de fecha es inválido.
  • 401 Unauthorized: Token faltante o inválido.