A exportação do registo de tempo de trabalho (ver Acesso e cópia do registo) tem colunas estáveis: o nome de cada coluna é uma chave em inglês que não se traduz e não muda de um idioma para o outro. Se quiseres importar o ficheiro para outro sistema, podes contar com elas: quando se acrescenta uma coluna, vai para o fim da sua secção, e nenhuma se renomeia nem se retira.
Como é o ficheiro
- O CSV é um único ficheiro com todas as secções. A sua primeira coluna é
section(entry,change,day_totaloumonth_total) e depois vão as colunas das quatro secções, uma a seguir à outra; as que não se aplicam a uma linha ficam vazias. Leva marca BOM (abre bem no Excel) e as células que se poderiam interpretar como fórmula são neutralizadas. - O Excel (XLSX) leva uma folha
info(empresa, NIF, intervalo, fuso horário, vista e data da transferência) e uma folha por secção:entries,changes,day_totalsemonth_totals, cada uma só com as suas colunas. - Os instantes vão em ISO 8601 com o desfasamento do fuso horário da empresa
(
2026-10-15T09:00+02:00), os dias comoAAAA-MM-DDe os meses comoAAAA-MM. As durações são minutos inteiros, os booleanostrueoufalsee os valores enumerados vão pelo seu código. - O que não se aplica ou não se registou vai vazio: o People não inventa dados.
- Na vista minimizada dos representantes dos trabalhadores, o NIF, os IP e as medidas de conciliação (chave e texto) continuam a ser colunas, mas vazias, para que o ficheiro tenha a mesma forma para todos.
Troços: entries (entry)
Uma linha por troço (o registo de início e, se o houver, o que o fecha). Os troços anulados também saem, marcados.
| Coluna | O que contém |
|---|---|
employee_id | Identificador da pessoa |
employee_last_name | Apelidos |
employee_first_name | Nome |
employee_tax_id | NIF (vazio na vista minimizada) |
date | Dia do início, no fuso horário da empresa |
kind | Situação: WORK (jornada), BREAK (pausa), WAITING (espera), ON_CALL (à disposição) ou DISCONNECTION_INTERRUPTION |
start | Instante de início |
end | Instante de fim (vazio se não houver saída) |
duration_minutes | Duração do troço em minutos |
start_clocking_id | Identificador do registo de início |
end_clocking_id | Identificador do registo de fim |
start_channel | Canal por onde se fez o início: WEB, MCP, CHAT, SYSTEM, TECHNICAL_INCIDENT ou LEGACY (anterior ao histórico) |
end_channel | Canal do fim, com os mesmos valores |
modality | ON_SITE (presencial) ou REMOTE (à distância) |
hours_nature | ORDINARY, OVERTIME ou COMPLEMENTARY |
overtime_compensation | REST (descanso) ou PAY (retribuídas), nas extraordinárias |
force_majeure | true se as horas são por força maior |
conciliation_measure_key | Chave da medida de conciliação (vazia na vista minimizada) |
conciliation_measure_text | Detalhe da medida (vazio na vista minimizada) |
automatic_end | true se o fim foi posto pelo fecho automático anterior a este registo |
incomplete | true se é uma entrada sem saída de um dia já terminado |
voided_at | Instante em que se anulou o troço |
end_voided_at | Instante em que se anulou só a saída |
has_conciliation_measure | true se o troço leva uma medida (é a única coisa que a representação vê) |
Alterações: changes (change)
Uma linha por cada revisão aplicada e por cada proposta de alteração, com quem propõe, quem autoriza, a discrepância e as marcas de «posterior ao fecho» e de incidente técnico.
| Coluna | O que contém |
|---|---|
employee_id, employee_last_name, employee_first_name | A pessoa afetada |
record | revision (alteração aplicada) ou proposal (proposta) |
id | Identificador da linha |
proposal_id | Proposta de que vem uma revisão |
clocking_id | Registo afetado |
action | CREATE (registo), MOVE (mudança de hora), VOID (anulação) ou RECLASSIFY (reclassificação) |
at | Instante da alteração |
status | PENDING, ACCEPTED, REJECTED ou WITHDRAWN |
channel | Canal por onde se fez |
technical_incident | true se é um incidente técnico |
after_close | true se é posterior ao fecho do mês |
reason | Motivo da alteração |
before, after | Como estava e como fica o registo (em JSON) |
author | Quem fez a alteração |
author_ip | IP a partir do qual se fez (vazio na vista minimizada) |
proposed_by | Quem propôs |
proposed_for | Em nome de que parte: EMPLOYEE ou COMPANY |
proposer_ip | IP de quem propôs |
decided_by | Quem decidiu |
decided_for | Em nome de que parte decidiu |
decided_at | Instante da decisão |
decider_ip | IP de quem decidiu |
decision_reason | Motivo da decisão, se foi rejeitada |
employee_discrepancy | Discrepância da pessoa |
discrepancy_at | Quando a deixou |
applied_at | Quando se aplicou ao registo |
representation_notified_at | Quando se avisou os representantes dos trabalhadores |
Totais diários: day_totals (day_total)
Uma linha por pessoa e dia. Todos os tempos estão em minutos.
| Coluna | O que contém |
|---|---|
employee_id, employee_last_name, employee_first_name | A pessoa |
date | O dia |
worked_minutes | Trabalho efetivo (inclui as interrupções da desconexão) |
ordinary_minutes | Dele, normais |
overtime_minutes | Dele, extraordinárias |
complementary_minutes | Dele, complementares |
unclassified_minutes | Dele, por classificar (não se usa a proposta, só o guardado) |
break_minutes | Pausas |
waiting_minutes | Esperas |
on_call_minutes | Tempo à disposição |
disconnection_minutes | Interrupções da desconexão (já incluídas no trabalho efetivo) |
incomplete | true se nesse dia há entradas sem saída |
workday_regime | FULL_TIME ou PART_TIME, segundo o contrato em vigor |
part_time_percentage | Percentagem do tempo parcial |
schedule_mode | FIXED ou FLEXIBLE |
ordinary_limit_exceeded | true se se ultrapassa o máximo diário de horas normais |
short_rest_minutes | Minutos de descanso desde a jornada anterior, se foi menos de 12 horas |
Totais mensais: month_totals (month_total)
Uma linha por pessoa e mês. Repete as nove colunas de minutos dos totais diários
(worked_minutes … disconnection_minutes), agora somadas por mês, e acrescenta:
| Coluna | O que contém |
|---|---|
employee_id, employee_last_name, employee_first_name | A pessoa |
month | O mês (AAAA-MM) |
days_worked | Dias com trabalho |
incomplete_days | Dias incompletos |
flexible_target_minutes | Objetivo do mês em horário flexível |
flexible_worked_minutes | Trabalhado no mês em horário flexível |
flexible_excess_minutes | Excesso sobre o objetivo (nunca negativo) |
flexible_deficit_minutes | Défice face ao objetivo (nunca negativo) |
O cômputo flexível só sai nos meses inteiros que caem dentro do intervalo transferido. O saldo vai dividido em excesso e défice, duas colunas que nunca são negativas.