Timesheets

The "Timesheets" page collects each employee's hours for a month in one table: planned hours from the schedule, actual hours from check-in/check-out marks, approved hours, and cost. The menu item is visible only to users with the "Timesheets" permission (manage timesheets) — by default, the organization owner and admin.

Where the numbers come from

  • Planned — the sum of an employee's shift minutes for a day, for shifts that have a start and end time.
  • Actual — the difference between the "Clock in" and "Clock out" marks in the Telegram bot for that day.
  • If there are no marks for a day, or only "Clock in" without "Clock out", actual hours fall back to the planned value, and the employee's row is flagged "by plan: N days" (N being the number of such days in the month).

The timesheet doesn't invent hours: without check-ins, it honestly shows the plan and clearly labels it as a plan, not a fact.

Generating and rebuilding

The "Generate timesheet" button builds the month's rows from the schedule and check-ins as they stand at the moment you click it. While the month is still open (not locked), you can click "Rebuild" to refresh the numbers — for example, after something changed in the schedule or in the check-ins.

Rebuilding updates planned and actual hours and resets all approvals for the month's rows back to "Draft" status, and also clears any previously saved AI explanations of discrepancies. The system shows a warning before rebuilding — if some rows were already approved, it's worth double-checking that a rebuild is really needed.

A locked period cannot be rebuilt.

Edits and the log

Approved hours can be adjusted manually — for example, if a manager knows about a shift the bot didn't record. An edit always requires a reason: the field won't let you save an empty value.

Every edit (old value, new value, reason, who made it) is written to a log. The number of edits per employee is visible right in the timesheet table — the "Adjustments" column shows a counter.

Approval and locking the period

  1. Review the rows and make adjustments if needed.
  2. Click "Approve all" — every draft row for the month moves to "Approved" status.
  3. Once every row for the month is approved, the "Lock period" button becomes available.

Once locked, the period is immutable: rebuilding, editing, and re-approving are unavailable while the period stays locked.

Only the organization owner can unlock a locked period. Unlocking returns the rows to "Approved" status (not "Draft") and leaves its own entry in the edit log — a record that the period was reopened.

AI explanation of discrepancies

On a row with a noticeable gap between planned and actual hours, an "Explain" button is available — AI produces a short, plain-language summary of the discrepancy patterns from the day-by-day data (for example, recurring shortfalls on specific days). It retells the facts in the data — it doesn't guess at the reasons behind them.

An explanation costs 1 AI credit. Viewing an already generated explanation again is free — the answer is saved ("cached") on the timesheet row itself. Rebuilding the timesheet clears saved explanations — after that, "Explain" will spend a credit again.

Export for the accountant

The "Export XLSX" and "Export CSV" buttons download the month's timesheet as a file named timesheet-YYYY-MM, with a summary per employee: planned, actual, approved hours, number of days from plan, number of adjustments, and cost.

If the period isn't fully approved yet (status "Draft"), exporting shows a warning: "The timesheet hasn't been approved yet. Export the draft anyway?" — you can still export, but the numbers aren't final.

Cost by rates

If rates are configured for the organization (Settings → Organization → Labor budget), the timesheet calculates cost per employee:

  • an employee's personal rate takes priority over their position's rate — if a personal rate is set, it's used;
  • an hourly rate is multiplied by approved hours;
  • a per-shift rate is multiplied by the employee's number of shifts for the month.

If neither the employee nor their position has a rate, the "Cost" column shows a dash, and a footnote appears below the table: "Some employees have no rate set — cost is only partially calculated."

What's next

Was this article helpful?