Attachments, statements, reconciliations, TIN vault, counterparty policy

MCP: books.link_attachment, unlink_attachment, attachments; link_to on
attach_receipt and file_document; record_statement, statements;
books.reconcile previews and, confirmed against a recorded statement,
records the reconciliation; void_reconciliation, reconciliations;
import_bank_csv links its source file; digest lists unreconciled
accounts.

TIN vault: books.set_w9 takes the TIN and the form into the encrypted
vault (last four in the books); books.vendor_1099 include_tins and
save_csv_to for the CPA's copy; books.get_w9; books.purge_tin. A leak
test scans every tool output, the journal, the database, and the blobs.

[books] parties = off | suggest | require (default suggest): every
preview names the entry's party or suggests likely ones; require refuses
to post until it names one or is marked as having none (entry.no_party).

Viewer: documents on every subject page; statements and reconciliation
history per account; reconciliation pages; reconcile and
no-counterparty attention items; party money by period (paid out,
received in, net, what for, by month); Needs attention gets its own
full-width section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GWVo7x3UHw5kwCUaWxiejX
This commit is contained in:
swaitsandClaude Opus 5.5 committed 2026-10-15 15:42:37 -06:00
1 parent a299077991
commit 08ce558ed3
41 files changed
+8463 -465

No files matched your search

+16
View File
@@ -64,6 +64,19 @@ fn screenshots() {
.map(|p| p.id)
})
.unwrap_or(1);
let reconciliation = loaded.reconciliations.last().map(|r| r.id).unwrap_or(1);
let voided = loaded
.reconciliations
.iter()
.find(|r| r.voided.is_some())
.map_or(reconciliation, |r| r.id);
// A document linked to more than one subject, else the last.
let linked_doc = loaded
.attachments
.iter()
.rev()
.find(|a| loaded.links_of(a.id).len() > 1)
.map_or(last_doc, |a| a.id);
drop(loaded);
let routes: Vec<(&str, Route)> = vec![
("overview", Route::Overview),
@@ -98,6 +111,9 @@ fn screenshots() {
("parties", Route::Parties),
("party", Route::Party(party)),
("document", Route::Document(last_doc)),
("document-linked", Route::Document(linked_doc)),
("reconciliation", Route::Reconciliation(reconciliation)),
("reconciliation-voided", Route::Reconciliation(voided)),
("event", Route::JournalEvent(last_event)),
("documents", Route::Documents),
("company", Route::Company),