Credit notes
Credit-note record page — honest draft / issued / applied framing, read-only lines, and the draft→apply path.
Overview
A credit note is a Verbs-projected adjustment against one invoice. Tax is mirrored from the invoice (negated). Lines are event-sourced and immutable — the record page never offers a line editor.
An effective credit reduces the invoice's receivable through the admitted original posting evidence; it is not cash received or a refund. A draft has no effective credit posting until Apply, and a void draft has no invoice balance effect. Signed original net/tax components are mirrored, so a reversed negative component can be positive; do not apply a second sign multiplier to frozen credit facts.
The credit's effective posting/tax date and stored transaction/base amounts remain distinct from provider receipt or payment dates. Original frozen invoice rates and remaining component evidence govern the credit; today's exchange rate is not a historical repair. Missing original posting, currency or base evidence is a refusal to resolve, not permission to invent tax policy or financial provenance. Write-off reversals refer to their own original adjustment, not this credit-note lifecycle.
Two real paths exist. Do not treat them as one lifecycle:
| Status | Meaning |
|---|---|
| Issued | Immediate-effect, terminal. The invoice balance moved at issue. The page never frames issued as "waiting to apply". |
| Draft | Opt-in. The invoice balance is untouched until Apply. Drafts do not count toward the invoice credit ceiling. |
| Applied | A former draft that has been applied. Ceiling is re-validated at apply time. |
| Void | A former draft that was voided. Never applied; invoice balances unchanged. |
List credit notes at /credit-notes. The first-ever record page is /credit-notes/{creditNote}. See also Invoicing & Payments and the Credit Notes API.
Credit notes list
Route: /credit-notes
Finance data table with status chips and columns Reference, Invoice, Account, Issued, Total, Status. Reference and View open the record page; Edit still opens the three-field header form. Reference shows Draft credit note #… when the draft has no legal number, or its existing legal number otherwise.
Under the default numbering policy, immediate issue assigns the legal number and a saved draft receives it on Apply, in the owning transaction. An explicitly enabled creation-time compatibility policy can assign the number to a draft earlier; that captured number is kept without another allocation on Apply. A number alone does not mean the credit is effective or posted. The status and original invoice's posting contract determine that outcome; opening the page changes neither. Compatibility sunset remains pending. See Document references, legal numbers and posting.
Credit note detail
Route: /credit-notes/{creditNote}
Permission: invoices.view (show and index). Apply requires credit-notes.apply. Void requires invoices.void.
The page uses the shared document-brief chassis: identity band (display reference, status, Favouritable star, actions), a tab strip at the top and bottom, headline cards that drill into registers, four briefing verdicts, and an aside for Totals / Counterparty / Related documents.
Overview
Route: /credit-notes/{creditNote}
- Headlines — Reconciliation, Application, Lifecycle. Cards open registers as
?register=recon,?register=alloc, or?register=life. Unknown keys are ignored. - Reconciliation — credited lines vs remaining creditable, plus the signed-variance bar (
This credit vs remaining creditable). Drafts and voids do not count toward the ceiling. - Application —
Not applied — draft/Applied at issue/Applied/Void. Apply and Void appear only on draft. - Briefing — four graded verdicts (correctness, agreement, money, next event). Future commitments are real dates only.
- Aside — totals, counterparty, related invoice. Cost keys are omitted (not zeroed) without
costs.view.
Lines
Route: /credit-notes/{creditNote}/lines
Read-only recon register. No add/edit/delete on lines. The signed-variance bar is shown here as well.
Application
Route: /credit-notes/{creditNote}/application
Alloc register plus Apply / Void for drafts. Apply calls ApplyCreditNote (ceiling re-check). Void calls VoidCreditNote. Both stay on the record. Ceiling failure surfaces as: Cumulative credit notes cannot exceed the invoice total.
Documents, activities, files
| Tab | Route |
|---|---|
| Documents | /credit-notes/{creditNote}/documents |
| Activities | /credit-notes/{creditNote}/activities |
| Files | /credit-notes/{creditNote}/files |
Activities use the commitments spine (all / financial / comms). Audit rows are gated on action-log.view.
Plugin tabs
Plugins register extra tabs on credit_note.detail.tabs. Authorised tabs open /credit-notes/{creditNote}/tabs/{key} (credit-notes.plugin-tab), gated on invoices.view.
Draft → apply
The live issue path remains immediate-effect (issued is terminal). Draft is opt-in:
- From an issued invoice, open Credit Note. Check Save as draft, then submit.
IssueCreditNoteruns withdraft: true. The invoice balance does not move. Toast:Credit note saved as draft. - On the credit-note record (or the header form), Apply or Void. Apply re-validates the cumulative ceiling against the invoice total.
No other mutation path creates or applies drafts. The header form still edits notes / issued-at only and links to the record page.
Credits on deposit invoices
A deposit invoice does not create a financial posting when it is issued, so a credit note on an issued deposit invoice does not create one either. When the credit is issued or applied, its three issue-effect receipts (document, communication, dashboard) record the posting decision not_posted. A credit on a posting (standard) invoice records posted, and it still needs its exact financial posting.
The database admits a not_posted receipt only when all of these are true:
- the credit event has no frozen financial posting;
- no financial posting exists for the credit event;
- the credited invoice does not post on issue (a deposit invoice, or an invoice with
is_postingfalse).
The posting decision cannot change after it is recorded, and a financial posting cannot be added later for a credit event that recorded not_posted. Replay and projection repair keep the receipts as they are.
A standard invoice that was issued without a financial posting (a legacy invoice from before postings existed) cannot be credited, because its credit has no posting to correct. Creating a draft credit, issuing a credit note, or applying an existing draft credit to it is refused before any change with a 422 whose code is credit_source_posting_missing. Currency and base-evidence refusals run before the original-posting check, including when creating a draft: an unresolved foreign invoice receives its currency refusal first. Once that evidence is admitted, the posting-refusal message names the invoice. No draft is created that would later be impossible to apply. Repair or admit the invoice posting history first.
Related documentation
- Invoicing & Payments — invoice lifecycle and the issue-credit-note modal
- Payments — single-invoice payment records
- Documents & Templates — credit-note PDFs
- Credit Notes API