Sales & Billing: deals & installments
For sales and admin teams: one deal per card, installments inside it, awaiting-signature, bill-due and overdue flags from the dates, reminders, and what AI agents answer.
What is a deal card?
Sales & Billing answers the three questions a sales or admin team keeps asking: has the customer signed yet, is it time to bill or chase, and has everything been collected. One card is one quotation or contract (a deal) on a Kanban board with ready-made columns; drag cards between columns as on any Kanban board, and each column header sums its value.
| Column | Category | Meaning |
|---|---|---|
| Draft | todo | Quotation being written |
| Sent | in_progress | Quotation sent — waiting for the customer to sign |
| Signed | in_progress | Signed or PO received |
| In delivery | in_progress | Delivering the work |
| Billing | in_progress | Delivered — invoicing and collecting |
| Closed | done | Paid in full |
| Lost | done | Not won (grey, not counted as a success) |
- Deal fields: customer (required, on card) · quote_no · amount (required, on card) · sent_at · signed_at · valid_until · payment_terms (One-time · 50-50 · 30-40-30 · Custom) · owner (who looks after the deal)
- Attach the quotation and the signed contract as ordinary attachments of the card
- The card shows customer and amount, the date flags, a paid / total bar and “n of N installments collected” — plus a “Delivery · N %” bar once the deal is linked to the development team's release or issues (see Delivered by)
- Columns can be changed under the board-columns rules (Premium), for example to add On hold
Where are the installments?
An installment is a subtask whose parent is the deal, but it never appears as a card on the board — it lives in the installment table of the deal card and in the list view when you switch to Installments. Its state comes from its dates, not from a column: Not yet (no invoiced_at) → Invoiced (invoiced_at, no paid_at) → Paid (paid_at).
- Installment fields: amount (required) · bill_on (the day to send the bill, required) · invoiced_at · invoice_no · due_on (payment due, required) · paid_at · paid_amount
- Generate from payment terms makes the set from payment_terms × amount: One-time 1, 50-50 2, 30-40-30 3 installments — bill_on starts at signed_at (or today), 2 months apart, due_on = bill_on + 15 days; amounts are rounded and the last one takes the remainder. Every cell can be edited afterwards
- Add installment adds a row by hand for custom terms
- Click an installment's state pill to record that it was invoiced (invoiced_at = today) or paid (paid_at = today and paid_amount = its amount); dates and the real amount can be corrected later
- Deleting or moving a deal takes its installments along; a deleted deal can be restored for 30 days with them
How are the flags worked out?
Flags are computed from dates and fields when the issue is read (Bangkok time); nothing is stored and no status is ever moved for you. Every flag is a filter in the list view and a flag value in search_issues. A Lost deal and its installments carry no flags.
| flag | On | Flag | When |
|---|---|---|---|
awaiting_signature | deal | Awaiting signature N days | In Sent for ≥ 7 days from sent_at (adjustable in Project settings) |
bill_due | installment | Bill due (yellow) | Not invoiced yet and bill_on ≤ today |
due_soon | installment | Due soon | Invoiced, not paid, and due_on within 3 days (adjustable) |
overdue | installment | Overdue N days (red) | Invoiced, not paid, and past due_on |
all_paid | deal | All paid — close the deal | Every installment Paid and Σ paid_amount ≥ amount, but not Closed yet |
When and to whom are reminders sent?
Every morning at 08:00 (Bangkok time) BoardMark looks at every deal and installment and tells the deal's owner, its watchers and its assignee through the channels each person has on: the in-app bell, email, LINE (Premium) and device notifications. The new switch Deal finance in Settings → Notifications is on from the start. Each reminder goes out once per day at most.
- Bill due — on the morning of bill_on, once
- Due soon — once, the first day with ≤ 3 days left
- Overdue — the day after due_on, then every 7 days until it is marked paid
- Awaiting signature — once, when the 7 days are up
- All paid — once, when the flag appears
- Service desk has its own switch, SLA due; Budget planning rings the bell only
How do I close a deal?
- When every installment is Paid and the full amount is in, the card shows the banner All paid — close the deal; clicking it moves the card to Closed (it is never moved for you)
- Dragging to Closed while money is still outstanding asks you to confirm “฿x still outstanding”
- Dragging to Lost needs nothing more: the remaining installments stop showing flags and stop reminding
- Closed and Lost are both in the done category, but Lost is grey and does not count as a success
Who delivers this deal, and how far is it?
The deal drawer has a “Delivered by” group: delivers links to a release or an issue of the development team's project in the same company (relates links count too). Press “Link to…”, pick the project → search for the release or issue → link type delivers, and the target then shows live in the drawer with the release's name, state and progress bar.
- The field delivery_progress (rollup from links, fn progress) works the delivery % out from those targets: a done issue counts 100 %, a release the % of its issues past the last gate (shipped = 100 %)
- When it has a value, the deal card shows a second thin bar under the payment bar: “Delivery · <target> · N %” — the sales team sees at once whether the work lags the money or the money lags the work
- Sales & Billing projects created before this round do not get the field by themselves — add it in Project settings → Fields (Premium); the drawer says so while the field is missing
- AI agents: link_issues { key: "SALE-12", type: "delivers", id: "APP/R-3" }, then get_issue returns computed.delivery_progress and linked[]
Where does the admin team see the overview?
- The list view switches between Deals and Installments, adds field columns, sorts, and filters by date or amount
- Saved filters come as chips with counts: Overdue · Bill due · Due soon · Awaiting signature · Unpaid installments; project admins save more for the whole team
- The totals row sums the filtered rows — the total outstanding of overdue installments, for example
- Everyone in the project sees the same overview; nobody has to ask for a report
What can an AI agent answer?
No new tools: an agent uses get_project (the template's columns, fields and saved filters), get_docs_context (the template explained), create_issue / update_issue with fields, and search_issues with flag or fields. It can answer “which deals are overdue?”, “which installments are due for billing this week?” or “which quotations have waited more than 7 days for a signature?” at once, and create a deal or add an installment for you within your rights.
search_issues { project: "SALE", flag: "overdue" } # overdue installments (which deals are unpaid?)
search_issues { project: "SALE", flag: "awaiting_signature" } # quotations waiting for a signature
create_issue { project: "SALE", type: "task", title: "Website redesign — Siam Logistics",
fields: { customer: "Siam Logistics Co., Ltd.", amount: 150000, payment_terms: "50-50" } }
create_issue { project: "SALE", type: "subtask", parent: "SALE-12", title: "Installment 1/2",
fields: { amount: 75000, bill_on: "2026-10-03", due_on: "2026-10-18" } }
update_issue { key: "SALE-13", version: 3, fields: { paid_at: "2026-10-20", paid_amount: 75000 } }What is not in this round?
- Quotation or invoice PDFs from BoardMark
- A central customer table — the customer field suggests names already used in the project only
- e-Tax or bank connections, and commissions
- A “Create project / release from this deal” button — for now create the release in the development project first, then link it with “Link to…”