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.
How it works
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.
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.
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.
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.
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.
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.
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.
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.
The demo organisation is seeded with clients, projects, approved time and invoices, so every step above has real data behind it.