SIGNALS Documentation
API Reference

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:

  1. From an issued invoice, open Credit Note. Check Save as draft, then submit. IssueCreditNote runs with draft: true. The invoice balance does not move. Toast: Credit note saved as draft.
  2. 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_posting false).

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.