How it works

From a signed contract to a paid invoice, in four steps

HR-LY is opinionated about the sequence, because most billing disputes come from a step being skipped: time recorded without a rate, approved without a policy, invoiced twice because nobody stamped it.

  1. Set up the commercial shape

    Create the client, then the project: billing method, currency, budget in hours or money, and whether timesheets need approval. Staff the project with the people who will do the work.

    • Client and project are separate records, so one client can hold many engagements
    • Per-person rates override the project default, and the project default overrides nothing else
    • Budget is optional — a project with no budget reports as untracked rather than zero
  2. Capture time against real work

    People log hours against a project and task, in the weekly sheet that matches the organisation's period. The policy decides what is legal: increments, daily caps, weekends, future dates and whether a note is required.

    • Hours are validated server-side before anything is written
    • The bill and cost rate are snapshotted onto the entry at that moment
    • Draft and rejected weeks are editable; submitted weeks are fixed
  3. Approve a fixed snapshot

    A manager sees submitted weeks and approves or rejects them. Approval and rejection both write an append-only event, so the history is a record rather than a reconstruction.

    • Approved time is immutable — a correction is a new entry, not an edit
    • A rejection must carry a reason the member can act on
    • Time that has already been invoiced cannot be reopened
  4. Bill it exactly once

    Generate an invoice from approved, unbilled hours. Lines are grouped by project and rate, tax is applied once, and every consumed entry is stamped with its invoice line in the same transaction.

    • An entry is billable only while approved and not yet stamped
    • If two people invoice at once, one transaction rolls back rather than double-billing
    • Issue, record payment or void — and the general ledger export reflects only issued invoices

Three things the system will not let you get wrong

One definition of revenue

Reports, budgets, the dashboard and the invoice all compute revenue the same way: billable hours at the rate recorded with them. Where they disagreed before, they now share one function with tests.

Permissions at the boundary

Every write resolves the user, their organisation, their capability and the organisation's subscription before touching data. Hiding a button is cosmetic; this is the boundary.

An audit trail you can defend

Status changes, entry edits and invoice transitions each write an event in the same transaction as the change itself. Nothing moves without a matching row.

Try the sequence yourself

The demo organisation is seeded with clients, projects, approved time and invoices, so every step above has real data behind it.