Saltar al contenido principal

Reporte de Resumen de Actividad

Calendario mensual de actividad por persona: una fila por persona, una celda por día, con estado de turno, descanso y ausencia.

GET/apidev/v1/reports/cpm/activity-summary
PermisoAPICLI_RPTCPM_RESUMENACTIVIDAD
Límite de solicitudes10 req/min
Caché300s
Rango máximo1 mes

Resumen​

Devuelve un resumen tipo calendario para el mes seleccionado. Cada persona aparece una vez, con una lista de entradas de actividad diaria que muestran el turno trabajado, los períodos de descanso, las horas trabajadas y descansadas, los kilómetros recorridos y el estado a nivel de día (trabajado, día de descanso o ausencia). Úsalo para revisar la asistencia y la carga de trabajo de todo un mes de un vistazo.

  • Vista mensual — el período es un único mes calendario; se evalúan los días hasta la fecha actual de la compañía, y los días futuros quedan vacíos
  • Estado del día — cada día lleva un estado para que puedas detectar ausencias, días de descanso e incumplimientos sin analizar marcas de tiempo en bruto
  • Filtros de alcance — acotá los resultados por persona, dispositivo, tipo de dispositivo o categoría de turno

Solicitud​

Encabezados de la solicitud​

Every request to a protected endpoint requires these headers:

HeaderRequiredDescription
AuthorizationYesBearer token obtained from the Login endpoint. Format: Bearer <token>
X-API-KeyYesCompany integration key provided during onboarding. Format: gtk_xxx...
tenantYesYour assigned tenant domain (default: geotareas.com) — always send your assigned tenant
Content-TypeConditionalapplication/json — required for POST and PUT requests

Parámetros de consulta​

ParámetroTipoRequeridoPredeterminadoDescripción
monthstringSí—Mes objetivo en ISO 8601 (ej. 2026-03 o 2026-03-01). Cubre el mes calendario completo.
driversstringNoTodos los visiblesIDs de persona separados por coma. Máximo 500.
devicesstringNoTodos los visiblesIDs de dispositivo separados por coma. Máximo 500.
device_typesstringNo—IDs de tipo de dispositivo separados por coma. Máximo 100.
shift_categoriesstringNo—IDs de categoría de turno separados por coma. Máximo 50.
limitintegerNo25Cantidad de personas por página (1–100).
offsetintegerNo0Cantidad de personas a omitir para la paginación.

Ejemplos de código​

curl -s -H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
"https://$TENANT/apidev/v1/reports/cpm/activity-summary?month=2026-03&limit=25"

Respuesta​

Campos de la respuesta​

Cada elemento en data es una persona con un array activities de entradas diarias.

CampoTipoDescripción
person_idstring | nullIdentificador de la persona.
person_namestring | nullNombre de la persona.
person_imagestring | nullURL de la imagen de la persona.
total_worked_minutesnumberMinutos trabajados en el mes (suma de activities[].worked_minutes).
total_discount_minutesnumberMinutos de descuento del mes (llegadas tarde + salidas anticipadas).
activitiesarrayUna entrada por día del mes (ver más abajo).

Entrada de actividad (activities[])

Una entrada por día del mes, incluidos los días sin jornada (llevan solo day, date y status) — son las mismas celdas que pinta la matriz de la pantalla.

CampoTipoDescripción
daynumber | nullDía del mes (1–31).
datestring | nullFecha de la entrada (YYYY-MM-DD).
shift_idstring | nullIdentificador de la jornada.
shift_linenumber | nullNúmero de línea del descanso dentro de la jornada.
shift_namestring | nullNombre del turno/horario.
device_namestring | nullNombre del móvil (vehículo).
shift_startstring | nullMarca de tiempo de inicio del turno.
shift_endstring | nullMarca de tiempo de fin del turno.
rest_startstring | nullMarca de tiempo de inicio del descanso.
rest_endstring | nullMarca de tiempo de fin del descanso.
qra_timestring | nullMarca efectiva de inicio de jornada (QRA).
qtp_timestring | nullMarca efectiva de fin de jornada (QTP).
start_addressstring | nullDirección donde comenzó la jornada.
end_addressstring | nullDirección donde terminó la jornada.
worked_minutesnumber | nullMinutos trabajados ese día (jornada menos descanso).
discount_minutesnumber | nullMinutos de descuento del día (llegada tarde + salida anticipada).
statusstring | nullEstado del día: OK (cumplió), WARN (revisar), ERROR (incumplió). null = sin jornada.
status_reasonstring | nullCódigo del motivo del estado (ej. absent). null si no hay motivo.
editedbooleantrue cuando un supervisor corrigió alguna marca del día.
edited_bystring | nullQuién corrigió la marca.
shifts_countnumberJornadas de ese día (> 1 = varias jornadas en un día). 0 = sin jornada.
Datos no disponibles

Los kilómetros (kms_shift / kms_rest) y las horas descansadas no los devuelve este reporte: el motor de la matriz mensual no los calcula. Versiones anteriores de esta página listaban worked_hours, rested_hours, kms_shift y kms_rest — solo existe el tiempo trabajado, y se publica como worked_minutes. Los kilómetros por jornada están en Detalle de Actividades.

Ejemplo de respuesta​

{
"success": true,
"data": [
{
"person_id": "982710394857201700",
"person_name": "Carlos Martinez",
"person_image": "https://cdn.example.com/people/982710394857201700.jpg",
"total_worked_minutes": 9450,
"total_discount_minutes": 65,
"activities": [
{
"day": 5,
"date": "2026-03-05",
"shift_id": "982710394857201664",
"shift_line": 1,
"shift_name": "Turno Mañana",
"device_name": "Unit-105",
"shift_start": "2026-03-05T07:00:00",
"shift_end": "2026-03-05T15:00:00",
"rest_start": "2026-03-05T11:00:00",
"rest_end": "2026-03-05T11:30:00",
"qra_time": "2026-03-05T07:02:00",
"qtp_time": "2026-03-05T15:04:00",
"start_address": "Av. Reforma 1234, Col. Centro",
"end_address": "Calle Madero 456, Col. Centro",
"worked_minutes": 450,
"discount_minutes": 0,
"status": "OK",
"status_reason": null,
"edited": false,
"edited_by": null,
"shifts_count": 1
},
{
"day": 6,
"date": "2026-03-06",
"shift_id": null,
"shift_line": null,
"shift_name": null,
"device_name": null,
"shift_start": null,
"shift_end": null,
"rest_start": null,
"rest_end": null,
"qra_time": null,
"qtp_time": null,
"start_address": null,
"end_address": null,
"worked_minutes": null,
"discount_minutes": null,
"status": "ERROR",
"status_reason": "absent",
"edited": false,
"edited_by": null,
"shifts_count": 0
}
]
},
{
"person_id": "982710394857201701",
"person_name": "Laura Hernandez",
"person_image": null,
"total_worked_minutes": 7680,
"total_discount_minutes": 0,
"activities": [
{
"day": 5,
"date": "2026-03-05",
"shift_id": "982710394857201999",
"shift_line": null,
"shift_name": "Turno Noche",
"device_name": "Unit-203",
"shift_start": "2026-03-05T22:00:00",
"shift_end": "2026-03-06T06:00:00",
"rest_start": null,
"rest_end": null,
"qra_time": "2026-03-05T22:00:00",
"qtp_time": "2026-03-06T06:00:00",
"start_address": "Ruta 8 Km 24",
"end_address": "Ruta 8 Km 24",
"worked_minutes": 480,
"discount_minutes": 0,
"status": "OK",
"status_reason": null,
"edited": true,
"edited_by": "supervisor.mendez",
"shifts_count": 1
}
]
}
],
"meta": {
"total": 2,
"limit": 25,
"offset": 0
}
}

Errores​

CódigoHTTPDescripción
VALIDATION_ERROR400Parámetros inválidos (ej. month mal formado).
UNAUTHORIZED401tenant / Authorization / X-API-Key faltante, inválido o expirado
FORBIDDEN403El usuario carece del permiso requerido.
RATE_LIMITED429Se superaron las 10 req/min.
INTERNAL_ERROR500Error inesperado del servidor.