invoice-vendor-followup · git:20261104.da4984f · 2026-11-04 · sha256 7eff36d00db6b5a3
invoice-vendor-followup git:20261104.da4984fA
Immutable. This exact content never changes and is served at /api/v1/blob/7eff36d00db6b5a3.
--- name: invoice-vendor-followup description: Finds invoice and payment threads in the mailbox that have gone unanswered, ages them, and drafts the follow-up to each counterparty. Use when the user asks what invoices are outstanding, which vendors have not replied, to chase payment or payment queries, or to prepare the aged follow-up list before a finance review. --- # Invoice & Vendor Follow-up Finds the invoice threads that stopped, with age and amount, and drafts the nudge. ## Inputs - Mailbox, through **Email** - `references/config.md` for the ageing buckets, the chase ladder and who is never chased ## Procedure 1. **Find invoice threads** over the window: invoices sent or received, payment queries, disputes, remittance advice. 2. **Determine the state of each thread** from the last message only: awaiting their reply, awaiting ours, resolved, or ambiguous. Ambiguous is a valid answer and must not be guessed. 3. **Age** from the last message in the thread, not from the invoice date, and bucket by config. 4. **Extract** counterparty, invoice reference, amount as written, direction (we owe / they owe), last contact date, who spoke last, and the source link. 5. **Rank** by age within direction. Money we owe sits above money owed to us, because a missed payable costs a relationship and a late receivable costs interest. 6. **Draft one follow-up per counterparty**, at the ladder step matching the age bucket. ## Output | Counterparty | Ref | Amount | Direction | Last contact | Age | Waiting on | Ladder step | Source | Then: totals by direction and bucket, threads marked ambiguous and why, drafts prepared. ## Definition of done Every open thread is aged and attributed to a side, ambiguous ones are named rather than forced, and every counterparty due a chase has one draft. **Nothing outstanding is a good week.** Say it in one line. ## When there is no data - No invoice threads in the window: say so, state the window, stop. - A thread with no amount anywhere: list it with amount UNKNOWN rather than dropping it. - A thread where the last message is an automated receipt: treat as awaiting their reply and say the attribution came from an automated message. ## Boundaries - **Draft, never send.** Especially never send a chase to a counterparty on the config exclusion list, which exists for relationships being handled by a person. - Never state an amount as owed. The ledger is the source of truth. - Never escalate a ladder step on your own. The user chooses the step. - Never contact anyone outside the organization without approval. ## Self-check - Is every age measured from the last message, not the invoice date? - Is every ambiguous thread labelled rather than guessed? - Did I keep exclusions out entirely?