AttendanceBook/PunchesByShifts
POST https://customerapi.geovictoria.com/api/v1/AttendanceBook/PunchesByShifts
Descripción
Obtener las marcas agrupadas por turno del libro de asistencia para un periodo de tiempo y un conjunto de
usuarios. Entrega un objeto por usuario con la lista de sus turnos, y dentro de cada turno las marcas registradas en
ese día.
Request
Request Body
| Campos | Tipo de dato | Descripción |
|---|---|---|
| StartDate | String | Fecha inicial de consulta. Formato yyyyMMddHHmmss. Requerido |
| EndDate | String | Fecha final de consulta. Formato yyyyMMddHHmmss. Requerido |
| UserIds | String | Lista de identificadores de usuario separados por coma. Requerido |
{
"StartDate": "20260501000000",
"EndDate": "20260531235959",
"UserIds": "65631998"
}
Importante
- Solo se incluyen los turnos que tienen turno asignado en el día; cada turno trae sus marcas en el arreglo
Punches. - Las horas se devuelven en formato HH:MM.
- Los campos sin valor se omiten de la respuesta.
Response
Response Body
La respuesta es un arreglo de usuarios. Cada usuario tiene los siguientes campos:
| Campos | Tipo de dato | Descripción |
|---|---|---|
| Id | String | Identificador interno único del usuario |
| Identifier | String | Identificador del usuario (RUT/cédula u otro) |
| Enabled | String | Indica si el usuario está habilitado (1 = habilitado, 0 = deshabilitado) |
| Name | String | Nombre del usuario |
| LastName | String | Apellido del usuario |
| String | Correo electrónico corporativo | |
| GroupDescription | String | Descripción del grupo al que pertenece el usuario |
| PositionId | String | Identificador del cargo |
| PositionDescription | String | Descripción del cargo |
| WeeklyWorkingHoursCodeId | String | Identificador del código de jornada semanal |
| CustomColumn1 | String | Columna personalizada 1 |
| CustomColumn2 | String | Columna personalizada 2 |
| CustomColumn3 | String | Columna personalizada 3 |
| IsHiddenForReports | String | Indica si el usuario está oculto en los reportes (True / False) |
| Shifts | Array | Lista de turnos del usuario con sus marcas (ver detalle abajo) |
Shifts
| Campos | Tipo de dato | Descripción |
|---|---|---|
| Id | String | Identificador único del turno |
| Date | String | Fecha del día del turno (yyyyMMddHHmmss) |
| BelongsToDay | String | Día al que pertenece el turno |
| StartTime | String | Hora de inicio del turno (HH:MM) |
| MaxStartTime | String | Hora máxima de inicio del turno (HH:MM). Vacío si no aplica |
| ExitTime | String | Hora de salida del turno (HH:MM) |
| Type | String | Tipo de turno (FixedShift, NotWorking, etc.) |
| FixedShiftHours | String | Horas fijas del turno (HH:MM) |
| ShiftDisplay | String | Representación visible del turno (ej: “07:00 – 16:00 (60 mins)”, “Break”) |
| BreakType | String | Tipo de colación (FreeLunch, NoLunch, etc.). Puede no aparecer en turnos sin colación |
| BreakMinutes | String | Minutos de colación |
| BreakStart | String | Hora de inicio de la colación (HH:MM) |
| BreakEnd | String | Hora de término de la colación (HH:MM) |
| Status | String | Estado del turno (enabled / disabled) |
| Custom | String | Valor personalizado del turno |
| Punches | Array | Marcas registradas en el turno (ver detalle abajo) |
Punches
| Campos | Tipo de dato | Descripción |
|---|---|---|
| PunchId | String | Identificador único de la marca |
| Type | String | Tipo de marca (Ingreso / Salida) |
| Date | String | Fecha y hora de la marca (yyyyMMddHHmmss) |
| Origin | String | Origen de la marca (reloj, app, web, etc.) |
| GroupDescription | String | Descripción del grupo asociado a la marca |
| UploadDate | String | Fecha de subida de la marca (yyyyMMddHHmmss) |
| ShiftPunchType | String | Tipo de marca dentro del turno (Entrada / Salida / SalidaColacion / etc.) |
| UserIdentifier | String | Identificador del usuario dueño de la marca |
| AssignedInBook | Boolean | Indica si la marca está asignada en el libro de asistencia |
| BoxSn | String | Número de serie del reloj que registró la marca |
| IdProject | String | Identificador del proyecto asociado a la marca (si aplica) |
| IdTask | String | Identificador de la tarea asociada a la marca (si aplica) |
| Checksum | String | Checksum de validación de la marca |
| Longitude | String | Longitud GPS de la marca. Solo aparece si la marca tiene geolocalización |
| Latitude | String | Latitud GPS de la marca. Solo aparece si la marca tiene geolocalización |
| Accuracy | String | Margen de error del GPS. Solo aparece si la marca tiene geolocalización |
| JustifiedTimeJustification | String | Justificación del tiempo justificado. Solo aparece si la marca está justificada |
Códigos
| Código | Descripción |
|---|---|
| 200 | Éxito |
| 400 | Error en el request |
Ejemplo response
[
{
"Id": "K0--lX0NcrkLeP_w62AeFQ",
"Identifier": "65631998",
"Enabled": "1",
"Name": "Maria Constanza",
"LastName": "Gamba Cante",
"Email": "moti.0226@hotmail.com",
"GroupDescription": "dinatech mobile sas - 2001",
"PositionId": "xit8BQ5HOO3ZejTzkmsEWA",
"PositionDescription": "ASISTENTE DE OPERACIONES",
"WeeklyWorkingHoursCodeId": "sDzBzlFnefikfhnZoFXLiw",
"CustomColumn2": "11002",
"IsHiddenForReports": "False",
"Shifts": [
{
"Id": "-8K921C_fnri5yeIm6TgHA",
"Date": "20260504000000",
"BelongsToDay": "20260504000000",
"StartTime": "07:00",
"MaxStartTime": "",
"ExitTime": "16:00",
"Type": "FixedShift",
"FixedShiftHours": "00:00",
"ShiftDisplay": "07:00 - 16:00 (60 mins)",
"BreakType": "FreeLunch",
"BreakMinutes": "60",
"BreakStart": "00:00",
"BreakEnd": "00:00",
"Status": "enabled",
"Custom": "",
"Punches": [
{
"Type": "Ingreso",
"Date": "20260504070000",
"Origin": "RCGPRS",
"GroupDescription": "dinatech mobile sas - 2001",
"UploadDate": "20260504120057",
"ShiftPunchType": "Entrada",
"UserIdentifier": "65631998",
"AssignedInBook": true,
"BoxSn": "CKQX212460008",
"IdTask": "",
"IdProject": "",
"PunchId": "TJfO5jDKx59qWuzijAVSdQ",
"Checksum": "SgKFLFZVO6hIIau03rOdt4d2hmjhIYZrEytONk4L09KHffa"
},
{
"Type": "Salida",
"Date": "20260504180000",
"Origin": "RCGPRS",
"GroupDescription": "dinatech mobile sas - 2001",
"UploadDate": "20260504230014",
"ShiftPunchType": "Salida",
"UserIdentifier": "65631998",
"AssignedInBook": true,
"BoxSn": "3316201807148",
"IdTask": "",
"IdProject": "",
"PunchId": "kD5nugTsYaCHbDh_-ns1Og",
"Checksum": "SgKFLFZVO6hIIau03rOdtyxZj3AlwhzbRAzISaTMIy94Jvn"
}
]
},
{
"Id": "GQfRNJeWP1SL5sLCnYm1Qg",
"Date": "20260509000000",
"BelongsToDay": "20260509000000",
"StartTime": "07:00",
"MaxStartTime": "",
"ExitTime": "11:00",
"Type": "FixedShift",
"FixedShiftHours": "00:00",
"ShiftDisplay": "07:00 - 11:00 ( No Lunch )",
"BreakType": "NoLunch",
"BreakMinutes": "",
"BreakStart": "00:00",
"BreakEnd": "00:00",
"Status": "enabled",
"Custom": "",
"Punches": [
{
"Type": "Ingreso",
"Date": "20260509070600",
"Origin": "RCGPRS",
"GroupDescription": "dinatech mobile sas - 2001",
"UploadDate": "20260509120645",
"ShiftPunchType": "Entrada",
"UserIdentifier": "65631998",
"AssignedInBook": true,
"BoxSn": "CKQX212460008",
"IdTask": "",
"IdProject": "",
"PunchId": "xv_M4tteRmE_avjDMhJPQQ",
"Checksum": "7Z4thNedvaVa12-IEuFPpOkyOrdDqoPGSRdhqXx5oIch9Kn"
}
]
}
]
}
]