feat: the invoice PDF, with stamps and each payment (P4b S3)
check / check (push) Canceled after 0s

ledger-import invoice_pdf (templates/invoice.typ): seller, bill-to,
number, dates, terms, lines, total, each settled line and the balance
due; money formatted in Rust (the template does no arithmetic), text as
data, deterministic bytes. Stamps as a rubber stamp would mark it, in
red: PAID (with the day it was paid in full: the invoice is then the
customer's receipt), PARTIALLY PAID, PAST DUE, VOID; DRAFT in gray for
S4's preview. ledger-package invoice_document builds it from the books
as of a day: the derived figures (B-38), each payment that stands on its
own line with its date, payment method and reference; re-created copies
say so (the issued copy is kept from S4 on and never changes).
books.document pdf hands it over as a download; the viewer's invoice
page saves or opens it. The owner asked for the paid stamp with the
payment's date and details (2026-10-24).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
swaitsandClaude Opus 5.5 committed 2026-10-24 18:20:55 -06:00
1 parent b7b7f17163
commit c1f9001cfe
12 files changed
+843 -4

No files matched your search

+6 -2
View File
@@ -2027,13 +2027,17 @@ accounting only: the caller supplies every figure), tax filing.
anything still owed), `overdue`, `paid`, `void`, `written_off`,
`overpaid` or `all`; `party` (a customer's or vendor's name or id) and
`due_by` narrow the list (P4b S2).
- `books.document { ref, as_of? }` → `{ ref, party, date, due_date,
- `books.document { ref, as_of?, pdf? }` → `{ ref, party, date, due_date,
entry_id, lines: [{ description, amount, project? }], total, paid,
discounted, written_off, outstanding, status, overdue_days, timeline:
[{ date, entry_id, kind, amount, reversal, stands }] }`. `ref` is
`invoice:N` or `bill:N`; the timeline is every ledger line tagged with
the document in posting order, each saying whether its entry still
stands as of the day (P4b S2).
stands as of the day (P4b S2). With `pdf: true` an invoice's PDF comes
back as a handed file (`pdf`: run its download): re-created from the
books as of the day, each standing payment on its own line with its
date, method and reference, stamped PAID (with the day), PARTIALLY
PAID, PAST DUE or VOID (P4b S3); refused for a bill.
- `books.control_check { as_of? }` → `{ as_of, agrees, accounts: [{ role,
code, name, balance, documents_total, unattached: [{ entry_id, line,
date, amount }], difference, attention: [{ kind, id, status, total,