The invoice on a jobcard isn't a separate document — the jobcard is the invoice once you issue it. Its invoice status is calculated from the manual payments you record against the jobcard.
The three states
| Status | Means |
|---|---|
unpaid | Total > recorded payments. (Or invoice issued and nothing recorded.) |
partial | Some payments recorded but they don't cover the total. |
paid | Recorded payments cover the total. |
The calculation lives in payment-service.ts in the foundry and runs every time a manual payment is added, edited, or voided. The result is denormalised onto jobcards.invoiceStatus so the kanban card and jobcard header can show it instantly.
Calculated, not manual
You can't set the invoice status by hand. To move from unpaid to paid, record a payment. To go the other way — say, a customer paid by cheque and it bounced — void the payment from the jobcard's payments list and the status falls back automatically.
Square payments don't count here
This calculation looks only at manual payments (jobcardPayments). Square payments live in a separate table and don't affect the invoice status. See Manual vs Square payments for why.