ZuloOne
English
Sign in
Menu

🕒 Timesheet

Updated

A TimeSheet card is a grid of attendance over a period, not only a sum of hours for payroll. The payroll accrual still reads the total in Lines.

← Business process wiki · commands

What the user sees#

  1. The header carries the division and the period (PeriodFrom / PeriodTo). A new timesheet opens on the current calendar month.
  2. The body of the card is a grid of employee × day. Clicking a cell marks attendance or absence; Shift+click cycles vacation / sick leave / absence. The filter at the top leaves one employee.
  3. The Days tab is the same rows as a list: employee, date, the Absent checkbox, day type and hours. The Lines tab is the hours rolled up by employee.
  4. A draft has the Fill standard week button (FillTimeSheet).

How the week is filled#

The norm is 40 hours: five working days, Monday to Friday. The day length comes from HRSettings: WeeklyHours / 5, otherwise WorkHoursPerDay, otherwise 8.

For every employee in the division and every weekday of the period the command:

  • leaves the day untouched if it already carries a manual mark (IsManual);
  • if there is TimeOff (vacation, sick leave, absence), sets that type and 0 hours;
  • otherwise marks attendance and the standard hours.

Weekends are shown grey in the grid and are not filled. Days before an employee's hire date are skipped. Filling again rebuilds only automatic days.

After filling — and on save, if there are days — the service rolls Days.Hours up into Lines. Accrue payroll on an approved timesheet reads Lines. If the position has a salary (Position.MonthlySalary > 0), amount = salary × hours / the period norm (weekdays × day length from HRSettings, the same 40-hour week as the fill). Otherwise it remains hours × HourlyRate. Vacation and sick leave have already zeroed the hours in the timesheet; accrual has no separate "deduct days" step.

Printing is TimeSheetZr: division, period and hours by employee — the Lines roll-up, not the day grid.

Absences#

The TimeOff dictionary: employee, type (not "work"), dates and note. Overlapping windows for one person are rejected. These are exceptions to the norm, not a separate posting document.

A manual mark in the grid flags the day as IsManual — the next fill does not overwrite it.

Commands#

Button Subtype What it does
Fill standard week Draft ITimeSheetService.FillStandardAsync
Approve timesheet Draft → Approved an empty timesheet with no lines is not allowed
Accrue payroll Approved hours → PayrollAccrual by position: salary (MonthlySalary) pro rata to period hours, otherwise hours × HourlyRate
Void payroll accrual Posted → Voided Mix removes payroll and liability; after that Accrue payroll is available on the timesheet again. Paid net must first be reversed by a payment

The Payroll liability by employee layout (HR → Registers → Payroll liabilities) groups by employee. An accrual of 10000 and withholding of 975 leave closing amounts 9025 and withheld 975. A payment of 9025 clears the amount; the row remains until the withheld amount becomes zero. Both closing values zero — no row.

What's not there yet#

  • The HR core does not cover other payroll taxes or health-insurance-like contributions beyond the shipped payroll and social-insurance contours.
  • Vacation and sick leave zero the hours in the timesheet; there is no separate paid leave or sick-pay calculation in this contour.
  • Payroll liability is a balance by employee, not an ageing by source document.
  • Official country filing is outside HR core and belongs to localization packages.

Same topic for other readers: User

Where next#

Was this page helpful?