La exportación del registro de jornada (ver Acceso y copia del registro) tiene columnas estables: el nombre de cada columna es una clave en inglés que no se traduce y no cambia de un idioma a otro. Si quieres importar el fichero en otro sistema, puedes confiar en ellas: cuando se añade una columna va al final de su sección, y ninguna se renombra ni se quita.
Cómo es el fichero
- El CSV es un único fichero con todas las secciones. Su primera columna es
section(entry,change,day_totalomonth_total) y después van las columnas de las cuatro secciones, una detrás de otra; las que no aplican a una fila quedan vacías. Lleva marca BOM (se abre bien en Excel) y las celdas que podrían interpretarse como una fórmula se neutralizan. - El Excel (XLSX) lleva una hoja
info(empresa, CIF, rango, zona horaria, vista y fecha de la descarga) y una hoja por sección:entries,changes,day_totalsymonth_totals, cada una solo con sus columnas. - Los instantes van en ISO 8601 con el desfase de la zona horaria de la
empresa (
2026-10-15T09:00+02:00), los días comoAAAA-MM-DDy los meses comoAAAA-MM. Las duraciones son minutos enteros, los booleanostrueofalsey los valores enumerados van por su código. - Lo que no aplica o no se registró va vacío: People no inventa datos.
- En la vista minimizada de la representación legal el NIF, las IP y las medidas de conciliación (clave y texto) siguen siendo columnas, pero vacías, para que el fichero tenga la misma forma para todos.
Tramos: entries (entry)
Una fila por tramo (el asiento de inicio y, si lo hay, el que lo cierra). Los tramos anulados también salen, marcados.
| Columna | Qué contiene |
|---|---|
employee_id | Identificador de la persona |
employee_last_name | Apellidos |
employee_first_name | Nombre |
employee_tax_id | NIF/NIE (vacío en la vista minimizada) |
date | Día del inicio, en la zona de la empresa |
kind | Situación: WORK (jornada), BREAK (pausa), WAITING (espera), ON_CALL (a disposición) o DISCONNECTION_INTERRUPTION |
start | Instante de inicio |
end | Instante de fin (vacío si no hay salida) |
duration_minutes | Duración del tramo en minutos |
start_clocking_id | Identificador del asiento de inicio |
end_clocking_id | Identificador del asiento de fin |
start_channel | Canal con el que se practicó el inicio: WEB, MCP, CHAT, SYSTEM, TECHNICAL_INCIDENT o LEGACY (anterior al historial) |
end_channel | Canal del fin, con los mismos valores |
modality | ON_SITE (presencial) o REMOTE (a distancia) |
hours_nature | ORDINARY, OVERTIME o COMPLEMENTARY |
overtime_compensation | REST (descanso) o PAY (retribuidas), en las extraordinarias |
force_majeure | true si son horas por fuerza mayor |
conciliation_measure_key | Clave de la medida de conciliación (vacía en la vista minimizada) |
conciliation_measure_text | Detalle de la medida (vacío en la vista minimizada) |
automatic_end | true si el fin lo puso el cierre automático anterior a este registro |
incomplete | true si es una entrada sin salida de un día ya terminado |
voided_at | Instante en que se anuló el tramo |
end_voided_at | Instante en que se anuló solo la salida |
has_conciliation_measure | true si el tramo lleva una medida (es lo único que ve la representación) |
Modificaciones: changes (change)
Una fila por cada revisión aplicada y por cada propuesta de cambio, con quién propone, quién autoriza, la discrepancia y las marcas de «posterior al cierre» y de incidencia técnica.
| Columna | Qué contiene |
|---|---|
employee_id, employee_last_name, employee_first_name | La persona afectada |
record | revision (cambio aplicado) o proposal (propuesta) |
id | Identificador de la fila |
proposal_id | Propuesta de la que viene una revisión |
clocking_id | Asiento afectado |
action | CREATE (alta), MOVE (cambio de hora), VOID (anulación) o RECLASSIFY (reclasificación) |
at | Instante del cambio |
status | PENDING, ACCEPTED, REJECTED o WITHDRAWN |
channel | Canal por el que se hizo |
technical_incident | true si es una incidencia técnica |
after_close | true si es posterior al cierre del mes |
reason | Motivo del cambio |
before, after | Cómo estaba y cómo queda el asiento (en JSON) |
author | Quién hizo el cambio |
author_ip | IP desde la que se hizo (vacía en la vista minimizada) |
proposed_by | Quién propuso |
proposed_for | En nombre de qué parte: EMPLOYEE o COMPANY |
proposer_ip | IP de quien propuso |
decided_by | Quién decidió |
decided_for | En nombre de qué parte decidió |
decided_at | Instante de la decisión |
decider_ip | IP de quien decidió |
decision_reason | Motivo de la decisión, si se rechazó |
employee_discrepancy | Discrepancia de la persona |
discrepancy_at | Cuándo la dejó |
applied_at | Cuándo se aplicó al registro |
representation_notified_at | Cuándo se avisó a la representación legal |
Totales diarios: day_totals (day_total)
Una fila por persona y día. Todos los tiempos están en minutos.
| Columna | Qué contiene |
|---|---|
employee_id, employee_last_name, employee_first_name | La persona |
date | El día |
worked_minutes | Trabajo efectivo (incluye las interrupciones de la desconexión) |
ordinary_minutes | De ello, ordinarias |
overtime_minutes | De ello, extraordinarias |
complementary_minutes | De ello, complementarias |
unclassified_minutes | De ello, sin clasificar (no se usa la propuesta, solo lo guardado) |
break_minutes | Pausas |
waiting_minutes | Esperas |
on_call_minutes | Tiempo a disposición |
disconnection_minutes | Interrupciones de la desconexión (ya incluidas en el trabajo efectivo) |
incomplete | true si hay entradas sin salida ese día |
workday_regime | FULL_TIME o PART_TIME, según el contrato vigente |
part_time_percentage | Porcentaje de la jornada parcial |
schedule_mode | FIXED o FLEXIBLE |
ordinary_limit_exceeded | true si se supera el máximo diario de ordinarias |
short_rest_minutes | Minutos de descanso desde la jornada anterior, si fue menos de 12 horas |
Totales mensuales: month_totals (month_total)
Una fila por persona y mes. Repite las nueve columnas de minutos de los
totales diarios (worked_minutes … disconnection_minutes), ahora sumadas
por mes, y añade:
| Columna | Qué contiene |
|---|---|
employee_id, employee_last_name, employee_first_name | La persona |
month | El mes (AAAA-MM) |
days_worked | Días con trabajo |
incomplete_days | Días incompletos |
flexible_target_minutes | Objetivo del mes en horario flexible |
flexible_worked_minutes | Trabajado en el mes en horario flexible |
flexible_excess_minutes | Exceso sobre el objetivo (nunca negativo) |
flexible_deficit_minutes | Déficit respecto del objetivo (nunca negativo) |
El cómputo flexible solo sale en los meses enteros que caen dentro del rango descargado. El saldo va partido en exceso y déficit, dos columnas que nunca son negativas.