Registo de horas — implementado L1
GET /v1/time-entries, GET /v1/time-entries/{id}, POST /v1/time-entries. GET exige read, POST write e Idempotency-Key. assignedTo, start, end obrigatórios; datas UTC ISO; labourBreak inteiro 0–1440. Duração positiva, máximo 1440 min, pausa menor que duração; labourTotal calculado no servidor. Modelo schemas.Time com estado pending, unlocked e sem dados de eliminação. Valida membro/projeto e rejeita sobreposição com registos não eliminados (409 time_overlap). Não existem REST times, férias, aprovação, exportação ou edição.
Listas paginadas e erros conforme Convenções. Contrato executável: functions/src/api/resources.ts e schemas partilhados.