Skip to content
Demiton

How do I reconcile Assignar site hours against KeyPay payroll?

You get Assignar field hours and KeyPay payroll hours in one register, so you can see the variance by worker and by week instead of exporting two spreadsheets and matching them by hand. The two systems are not meant to agree exactly; Demiton shows you where they differ so you can decide which difference matters.


  • Tier: Connected - AU$4,167/month or AU$50,000/year, plus a one-off implementation fee
  • Systems: Assignar (system key ASSIGNAR) and KeyPay (system key KEYPAY)
  • Access: Read access to Assignar timesheets and workers, and to KeyPay employees, timesheets and pay runs

See Assignar and KeyPay for connection setup. KeyPay’s API is also referred to as PayCat in the platform’s transformers and adapters; the system key is KEYPAY.


  1. FETCH. Assignar is read for timesheets-expanded, allocations, leave-requests and workers. KeyPay is read for employees, timesheets, payruns and leaverequests.
  2. Record the registers. Both sources write to the same registers, and source provenance is kept on every record:
    • timesheet_entry - one record per timesheet line, with the hours measure, fed by Assignar (total_time) and KeyPay (durationExcludingBreaks). A KeyPay timesheet carries no project; it anchors to the worker and the financial period only. An Assignar timesheet anchors to the worker and the project.
    • allocation - what was planned, from Assignar. hours comes from the allocation’s total, and the project is required.
    • payroll_run - the KeyPay pay run itself, with total_gross and total_net.
  3. TRANSFORM. Three transformers do the cross-system work by name:
    • ASSIGNAR_CODED_TIMESHEET_TO_KEYPAY - maps Assignar coded timesheet records to the KeyPay timesheet import shape, grouping lines by employee, requiring a pay_code_map to resolve each Assignar pay code to a KeyPay work type, and using the employee id carried on the Assignar worker as the bridge. Lines with no employee, no mapped pay code, or zero units are skipped and counted rather than guessed.
    • ASSIGNAR_LEAVE_TO_KEYPAY - maps approved Assignar leave requests to the KeyPay leave import shape, resolving the leave type through a leave_type_map and the worker through the Assignar worker external_id.
    • PAYCAT_ASSIGNAR_EMPLOYEE_DIFF - diffs KeyPay employees against Assignar workers on the external_id join key and produces a plan of who to create, update or deactivate, with unmatched workers listed separately as external_id_missing.
  4. PUSH. Timesheets and leave are written back to KeyPay only through governed workflows. Simulation mode is the default, so you can see the exact payload before anything is committed.
  5. Reconcile nightly. Allocations are reconciled against payroll every night, and the variance is attributed to the worker and project it touches.

See the published contracts for timesheet_entry, allocation and payroll_run.

The variance is expected, and it is not one bug:

  • Different questions. Assignar records hours worked on site, coded to a project and a cost code. KeyPay records hours approved for pay, coded to a pay category. A day can be right in both systems and still not match.
  • Different scope. A KeyPay timesheet carries no project, so payroll hours are not attributed to a job on their own. They can be lined up with a project only where an Assignar record for the same worker and date carries one.
  • Known causes of drift. Leave, public holidays, allowances, rounding, a no-show recorded on site but not in payroll, or two pay codes that map to one work type. ASSIGNAR_CODED_TIMESHEET_TO_KEYPAY reports its skipped lines by reason - no employee, no pay code, zero units - so you can see which of these is present.

  • “Which workers have Assignar hours this week but no matching KeyPay timesheet?”
  • “What is the variance between site hours and payroll hours on the Bruce Highway job last month?”
  • “Show me the allocations that have no timesheet against them.”
  • “Which pay codes were skipped in the last timesheet import, and why?”
  • “Which Assignar workers have no KeyPay employee id, so they cannot be matched?”

  • It does not run payroll or approve timesheets. Those decisions stay in KeyPay and in your own approval process.
  • It does not change either system without a governed, approved workflow - and every write runs in simulation mode first.
  • It does not guess a worker match. The join key is the KeyPay employee id carried on the Assignar worker as external_id. Where that is missing, the record is reported as unmatched rather than matched by name.
  • It does not show everyone individual pay. Payroll data is restricted to payroll administrators and executives. A project manager sees aggregated labour cost for their projects, never individual pay records or rates - see Security and governance.
  • It does not make the two numbers agree. It shows you the difference and attributes it. Closing it is a decision about your data and your process.

Talk to us about scoping the Assignar and KeyPay reconciliation for your payroll.

Talk to the team

Tell us what you run - your ERP, field, payroll and document systems - and we will show you the registers Demiton would keep current from them, on your data, in a 30-minute call.

Book a 30-minute callStart free