Coming soon — TimeSheets is in active development.

Invoices

Turn approved, priced work into a numbered invoice

An invoice turns a period of approved, priced work for one client into a numbered document. The lifecycle is deliberately narrow: preview → draft → issued → void, in one direction.

1. Preview before you commit

A preview shows exactly what an invoice would contain and writes nothing. It uses the same code that produces the real document, so what you see is what gets billed.

The invoice preview showing lines, totals and a warning about unpriced work
The invoice preview showing lines, totals and a warning about unpriced work

The preview also warns about two things worth catching early: unpriced billable work, which would otherwise be left off silently, and work priced in a different currency from the client, which cannot be billed here at all.

2. Creating a draft

A draft claims the entries it covers, so a second draft for the same period will not bill them again. Drafts carry no number — abandoning one costs nothing, which is exactly why numbering waits.

Delete a draft and its entries return to the billable pool.

3. How work is grouped into lines

Choose the grouping when you create the draft:

GroupingResult
One line per person per projectThe default — most people's idea of a billing line
One line per projectSimpler documents for a client who does not need names
One line per cost centreWhere the classification is what the client cares about
A single lineOne total for the engagement

Whatever you choose, rate and currency are always part of the grouping. Two different rates never share a line, because a line showing one rate and an amount derived from two would be quietly wrong.

Rounding happens once per line. That way each line's amount follows exactly from its own hours and rate, and the invoice total is exactly the sum of its lines. Rounding per entry or only at the total breaks one of those two.

4. Issuing an invoice

Issuing is the one-way door. In order, TimeSheets:

  1. checks the arithmetic, and refuses to issue anything whose lines do not add up;
  2. claims the next number in the client's series;
  3. marks the invoice issued and sets the issue and due dates;
  4. freezes the priced snapshot of every entry on it.
An issued invoice showing its number, client details, lines and total
An issued invoice showing its number, client details, lines and total

5. Invoice numbering

Numbers are assigned at issue, never at draft creation, so abandoned drafts do not leave holes. Each client with a prefix gets its own sequence.

Two people issuing at the same moment can never receive the same number. Gaps are a different matter: if an invocation fails between claiming a number and writing it, that number is spent. Check for gaps on the Invoices screen lists any such number, and reports voided invoices separately because a void keeps its number and is not a gap.

The numbering check showing the next number, issued and voided counts, and any gaps
The numbering check showing the next number, issued and voided counts, and any gaps

6. Voiding and re-issuing

There is no *edit issued invoice*, on purpose: a document that changed after it was sent is not evidence of anything. The only correction path is void → fix → raise a new one.

Voiding requires a reason, keeps the number — numbers are never reused — and releases the work so it can be billed correctly on a new invoice.

The void invoice dialog with the required reason field
The void invoice dialog with the required reason field

7. What happens to the time entries

Once an invoice is issued, the entries behind it are frozen. Editing or deleting one is refused with a message saying it is on an issued invoice — and an unlock request will not help, because the constraint is the invoice, not the calendar.

Voiding the invoice releases them again.