feat(package): aging CSVs in the export and the CPA package (P4b S6)

The CPA's first tie-out is that the aging equals the control account, so
books.export and the CPA package now write ar_aging.csv and ap_aging.csv
from one builder: one row per open document (number, party, dates, terms,
total, paid, discounted, outstanding, bucket, days overdue) and a TOTAL
line carrying the outstanding sum, the GL account and balance, and the
difference (always 0.00; B-23, B-38 INVARIANT 1). XLSX and PDF lay the
same aging out as a statement with the tie-out beneath it.

The package README states the tie-out, the gross discount method (A-8)
and the direct write-off method (A-5). The chart templates gain 6995
Purchase Discounts so no template puts another account at a control
role's code (4100 and 6060 already match). The viewer's Money out list
gains the discount-deadline column and colours a due-soon or
discount-open date; the screenshot is re-rendered.

Test: the_aging_csvs_tie_to_the_control_check in ledger-package; the
existing package file-order test and mcp_journeys see the two new files.
This commit is contained in:
swaits committed 2026-10-27 12:59:40 -06:00
1 parent 57f04dbb0c
commit 6c4480cdc8
8 files changed
+390 -39

No files matched your search

+2
View File
@@ -23,6 +23,7 @@
//! whichever [`PackageBooks`] they are read through.
//! ```
mod aging;
mod attention;
mod books;
mod iif;
@@ -34,6 +35,7 @@ mod text;
mod tins;
mod vendor_1099;
pub use aging::{AGING_CSV_HEADER, aging_csv, aging_statement};
pub use attention::{
Attention, Integrity, Report, Severity, Target, files_1099, find, find_with, reconcile_prompt,
w9_missing, w9_prompt,