feat(mcp): books.mark_sent, and the send in the read tools (P4b S5)
`books.mark_sent` records the send the human or a delegate made: the invoice (`invoice:7` or its id), the day, who sent it (the token's name unless given), how (email by default, or mail, portal, hand, another channel), to whom (the bill-to email, else the customer's), whether it was the original or a reminder (original on the first send, reminder after), and the channel's own id. It answers with every send on the invoice, newest last. `books.documents` rows gain `last_sent` and `books.document` shows the sends, so "did we send it, and when" is one read away, while a bill (which we receive) has none. The schema lint refuses a parameter named `to` (a path-name rule), so the recipients parameter is `recipients`; the journal event and the result keep the plan's `to`. The tool needs `books:write`: it changes the record, never a figure. The handbook gains the invoices-and-bills section (S4.5 had not landed yet) with the send procedure: the books never send, the PDF goes to the human, and each send is recorded afterwards. Over the wire, mark_sent_records_who_and_how: two sends (the second a reminder with a message id), the list's `last_sent`, the document's `sends`, and the invoice still owing its total. The P2 cutover refuses a send before consent and takes it after.
This commit is contained in:
1 parent
d1fb512e4b
commit
75d8c23d9b
10 files changed
+416
-14
No files matched your search
@@ -0,0 +1,28 @@
|
||||
# Invoices and bills
|
||||
|
||||
An invoice bills a customer: it posts Dr Accounts Receivable and Cr the
|
||||
revenue its lines name. A bill is a vendor's invoice to us: it posts Dr
|
||||
the expense or asset its lines name, and Cr Accounts Payable. A document's
|
||||
own figures are read from the ledger lines tagged with it, never kept on
|
||||
the document: a reversed payment, a void or a write-off comes out right
|
||||
without another copy to correct (B-38).
|
||||
|
||||
## Sending an invoice
|
||||
|
||||
- The books never send mail, and never say they did. To send an invoice,
|
||||
create and post it (`books.create_invoice`), hand its PDF to the human
|
||||
(`books.document` with `pdf: true`), and let the owner or a delegate
|
||||
send it.
|
||||
- Then record the send with `books.mark_sent`: the invoice (`invoice:7`),
|
||||
the day it went out, who sent it (`by`: the owner, or the agent acting
|
||||
for them), how (`via`: `email`, or `mail`, `portal`, `hand`, or another
|
||||
channel's own name), to whom (`to`: the bill-to email, else the
|
||||
customer's email), whether it was the original or a reminder (`kind`:
|
||||
`original` for the first send, `reminder` after), and the channel's own
|
||||
reference when there is one (a message id).
|
||||
- A send changes no figure and never moves the due date. Several sends
|
||||
are allowed: each is recorded in order, and `books.documents` shows the
|
||||
latest as `last_sent`.
|
||||
- A void invoice can't be marked sent: it should never have reached the
|
||||
customer. An invoice already open, partly paid, paid or written off can
|
||||
(a copy for the customer's records, a reminder).
|
||||
Reference in new issue
Block a user