The working-time record export (see Access to and copy of the record) has stable columns: each column name is an English key that is not translated and doesn't change from one language to another. If you want to import the file into another system, you can rely on them: when a column is added it goes at the end of its section, and none is renamed or removed.
What the file looks like
- The CSV is a single file with all the sections. Its first column is
section(entry,change,day_totalormonth_total), followed by the columns of the four sections one after another; those that don't apply to a row are left empty. It carries a BOM (it opens correctly in Excel) and cells that could be read as a formula are neutralised. - The Excel (XLSX) has an
infosheet (company, tax ID, range, time zone, view and download date) and one sheet per section:entries,changes,day_totalsandmonth_totals, each with only its own columns. - Instants are in ISO 8601 with the offset of the company's time zone
(
2026-10-15T09:00+02:00), days asYYYY-MM-DDand months asYYYY-MM. Durations are whole minutes, booleans aretrueorfalseand enumerated values appear as their code. - What doesn't apply or wasn't recorded is left empty: People doesn't invent data.
- In the minimised view for the workers' representatives, the tax ID, the IPs and the conciliation measures (key and text) are still columns, but empty, so the file has the same shape for everyone.
Segments: entries (entry)
One row per segment (the start entry and, if there is one, the one that closes it). Voided segments are also included, marked.
| Column | What it contains |
|---|---|
employee_id | The person's identifier |
employee_last_name | Last name |
employee_first_name | First name |
employee_tax_id | Tax ID (empty in the minimised view) |
date | Day of the start, in the company's time zone |
kind | Situation: WORK (working day), BREAK, WAITING, ON_CALL or DISCONNECTION_INTERRUPTION |
start | Start instant |
end | End instant (empty if there is no clock-out) |
duration_minutes | Duration of the segment in minutes |
start_clocking_id | Identifier of the start entry |
end_clocking_id | Identifier of the end entry |
start_channel | Channel the start was made through: WEB, MCP, CHAT, SYSTEM, TECHNICAL_INCIDENT or LEGACY (before the history existed) |
end_channel | Channel of the end, with the same values |
modality | ON_SITE or REMOTE |
hours_nature | ORDINARY, OVERTIME or COMPLEMENTARY |
overtime_compensation | REST or PAY, for overtime |
force_majeure | true if the hours are due to force majeure |
conciliation_measure_key | Key of the conciliation measure (empty in the minimised view) |
conciliation_measure_text | Detail of the measure (empty in the minimised view) |
automatic_end | true if the end was set by the automatic closing that predates this record |
incomplete | true if it is a clock-in with no clock-out on a day that has ended |
voided_at | Instant the segment was voided |
end_voided_at | Instant only the clock-out was voided |
has_conciliation_measure | true if the segment carries a measure (the only thing the representatives see) |
Changes: changes (change)
One row per applied revision and per change proposal, with who proposes, who authorises, the disagreement and the "after closing" and technical-incident marks.
| Column | What it contains |
|---|---|
employee_id, employee_last_name, employee_first_name | The person concerned |
record | revision (applied change) or proposal |
id | Identifier of the row |
proposal_id | The proposal a revision comes from |
clocking_id | Entry concerned |
action | CREATE, MOVE (time change), VOID or RECLASSIFY |
at | Instant of the change |
status | PENDING, ACCEPTED, REJECTED or WITHDRAWN |
channel | Channel it was made through |
technical_incident | true if it is a technical incident |
after_close | true if it is after the month closed |
reason | Reason for the change |
before, after | How the entry was and how it is now (in JSON) |
author | Who made the change |
author_ip | IP it was made from (empty in the minimised view) |
proposed_by | Who proposed |
proposed_for | On behalf of which party: EMPLOYEE or COMPANY |
proposer_ip | IP of whoever proposed |
decided_by | Who decided |
decided_for | On behalf of which party they decided |
decided_at | Instant of the decision |
decider_ip | IP of whoever decided |
decision_reason | Reason for the decision, if it was rejected |
employee_discrepancy | The person's disagreement |
discrepancy_at | When they left it |
applied_at | When it was applied to the record |
representation_notified_at | When the workers' representatives were notified |
Daily totals: day_totals (day_total)
One row per person and day. All times are in minutes.
| Column | What it contains |
|---|---|
employee_id, employee_last_name, employee_first_name | The person |
date | The day |
worked_minutes | Effective work (includes interruptions of disconnection) |
ordinary_minutes | Of which, ordinary |
overtime_minutes | Of which, overtime |
complementary_minutes | Of which, complementary |
unclassified_minutes | Of which, unclassified (only what is stored counts, not the proposal) |
break_minutes | Breaks |
waiting_minutes | Waiting times |
on_call_minutes | On-call time |
disconnection_minutes | Interruptions of disconnection (already included in effective work) |
incomplete | true if there are clock-ins with no clock-out that day |
workday_regime | FULL_TIME or PART_TIME, per the contract in force |
part_time_percentage | Percentage of the part-time working day |
schedule_mode | FIXED or FLEXIBLE |
ordinary_limit_exceeded | true if the daily maximum of ordinary hours is exceeded |
short_rest_minutes | Minutes of rest since the previous working day, if it was less than 12 hours |
Monthly totals: month_totals (month_total)
One row per person and month. It repeats the nine minute columns of the daily
totals (worked_minutes … disconnection_minutes), now added up per month,
and adds:
| Column | What it contains |
|---|---|
employee_id, employee_last_name, employee_first_name | The person |
month | The month (YYYY-MM) |
days_worked | Days with work |
incomplete_days | Incomplete days |
flexible_target_minutes | Month's target on a flexible schedule |
flexible_worked_minutes | Worked in the month on a flexible schedule |
flexible_excess_minutes | Excess over the target (never negative) |
flexible_deficit_minutes | Shortfall against the target (never negative) |
The flexible count only appears for whole months within the downloaded range. The balance is split into excess and deficit, two columns that are never negative.