Finance is three boards over the same rows: a finance report of money by job, a technician report that settles up with one person, and a job source report that says which source paid for itself. Nothing on any of them is a stored total.
1
- Settle up records what you actually paid a worker, against what the ledger says is owed.
Expenses, and who paid them
An expense is money that left for a reason, and it carries an expense type — your own list, seeded with Parts and extended in Settings. The field that matters most is who paid it: when a worker bought the part out of pocket, the business owes them that money back, and the product records both facts at once.
That is one place a naive sum goes wrong. A worker-paid part is both money the business spent and money it now owes the worker; counting both would double it. The rule is that the expense is recognised when the expense is recorded, and the reimbursement only records that it is owed — so reimbursements are excluded from the expense total while the labour cuts are included, because labour exists nowhere else.
The split on a job
Subcontractor payout tracking rests on one arithmetic, run the same way everywhere it appears. The job's money comes in, everybody's outlay comes back to them, the rest divides by the terms on the job, and the total of what everyone takes home equals the money that came in — exactly, not within a tolerance.
| Figure | How it is derived |
|---|---|
| Gross revenue | What the client paid, before the payment rail took anything |
| Processing fees | What the rail kept. Its own line, shown only when there are any |
| Gross profit | Revenue less all parts and fees, whoever paid them |
| Net profit | Gross profit less the cuts and rates that pay for labour |
| The worker's total | Their cut, plus the parts they bought back in full — what they are owed, not what they earned |
| The company's share | A residual: whatever the other claimants leave, plus the company's own parts back |
No company rate is stored anywhere. Two claimants at fifty per cent both want to round the same half-cent down, and a system that computes every share independently loses it — which is how a split of a job can fail to add back to the job. Deriving the last share instead puts the odd cent on the house, and makes the cross-foot an equality. A tolerance would pass the exact job this is built to catch.
A job's own page and the expandable row on the Jobs panel print this working rather than the answer, one block per claimant, ending in the check as a sentence. Where a cut was imported as a number rather than as a term, the rate is read back off the finished split and marked as approximate, because history arrives as a figure and there is no term to quote.
The one signed balance
Every report about a person leads with one number and says which way it points, in words as well as in colour:
- Positive, green — you pay out to them.
- Negative, red — they owe the company, usually because they are holding cash they collected.
- Zero, grey — settled, nothing owed either way.
Under it sit the two halves that make it — what is owed to them, and what of the company's they hold — so the figure can be checked against the columns rather than trusted. The direction is decided in one place and imported by every surface that prints a balance: the report on screen, the PDF, the CSV and the statement in the Team drawer all say the same sentence, because a sheet read once on a phone must not require remembering which way a sign points.
Money always prints its cents. Two decimals, everywhere, on every surface.
The closing rate
The closing rate on a worker's report is closed jobs divided by closed plus canceled, over the jobs that worker was given in the window. Two consequences follow, and both are deliberate:
- A job still in progress is not counted as lost. It is in neither term.
- A canceled job counts, even though it moved no money. A cancellation posts no payment, no cut and no expense, so it has no line on the sheet at all — the rate is the only place it appears, and the band prints the counts underneath so the percentage can be checked.
A sheet built only from jobs that moved money would show a closing rate of 100% for everybody, which is the reason the report is drawn from the jobs and joins the money to them rather than the other way round. Every line on it carries its status, and a job that moved no money prints dashes rather than zeros — in the CSV those cells are left empty, because a spreadsheet sums a zero and skips a blank.
Still owed is not the same as balance
Two money columns on the technician's book answer different questions, and the difference is what makes a settle-up trustworthy.
| Column | What it answers | Windowed by the date range? |
|---|---|---|
| Balance | What the period came to, over the rows inside the range | Yes |
| Still owed | What the ledger says this job still owes, net of every settlement that ever covered it | No |
An obligation does not stop existing because somebody moved the date range. A settle-up that skipped a cut from March because the panel was showing August would be a silent non-payment, so the range decides which jobs are listed and never what one of them is owed. A settled job prints a dash rather than zero: zero is a figure and gets read as one.
Settling up
The technician report is a catalogue you scan — who is owed what, how many jobs are unsettled, when they were last paid — and a row you open onto that person's per-job book. Four actions sit on it, and only one of them moves money:
- Settle up through a date writes one settlement covering every unsettled job through the end of the range, with a line naming each entry it paid. It is the only main action here, so it is the one blue docked button.
- Export unsettled hands you the still-owed jobs as a CSV, and deliberately ignores the Show filter — a quick action that quietly obeyed a filter somebody forgot they set would export the wrong thing.
- Download reads out the book on screen, as CSV or PDF.
- Refresh repairs staleness.
A worker who is holding your cash and is owed cuts is squared by one settlement for the difference, whose lines cover the receivable and the payables together — never two settlements that happen to net. Running a settle-up twice settles nothing the second time, because the first left nothing outstanding; that stays true when a cut is posted an hour later, which a same-day lock would have swallowed. Voiding a settlement releases every job it covered in the same transaction, and the lines survive as the record of what the void undid.
When a cut posts, and when it moves
- A cut posts when the job closes, from the terms on the assignment, falling back to the worker's defaults — inside the same transaction that closes the job, because a job that closed without its cut posting is a silent underpayment.
- It re-derives on every later money change. A cut is a percentage of the job's live money, not of the money as it stood the moment somebody pressed Close. A later payment amends the posted row rather than adding a second one.
- An open job shows the same derivation as a projection on the job page, labelled as such. A projection is a display, never an obligation.
- The row is dated by the job, not by the run. A cut takes the job's service day, else the day its money first moved. Dating it by the posting run would split a job across two report windows and show money out with no money in.
- Every row is on the company's calendar, in the timezone you set for the company — not the browser's and not the server's.
- A payment that lands with a worker records that they are holding the company's money, net of any processing fee. Who collected a payment and where it landed are two questions, asked separately, because a card run on the company's terminal passed through somebody's hands and stayed the company's.
Why nothing is stored
Money rows are editable in place — a payment can be corrected, an expense amended — so every balance, every profit and every statement is a sum computed over the live rows each time it is asked for. A stored total would be a second source of truth, and it would be wrong from the moment somebody fixed a typo, with nothing to tell it so. The edits themselves are recorded in order, so there is an audit trail underneath.
The practical version of that rule: if a figure here surprises you, open it. Every board reaches the rows it was computed from, and the job page prints the arithmetic for one job in full.