BoardMark
Docs

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.

ColumnCategoryMeaning
DrafttodoQuotation being written
Sentin_progressQuotation sent — waiting for the customer to sign
Signedin_progressSigned or PO received
In deliveryin_progressDelivering the work
Billingin_progressDelivered — invoicing and collecting
CloseddonePaid in full
LostdoneNot 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.

flagOnFlagWhen
awaiting_signaturedealAwaiting signature N daysIn Sent for ≥ 7 days from sent_at (adjustable in Project settings)
bill_dueinstallmentBill due (yellow)Not invoiced yet and bill_on ≤ today
due_sooninstallmentDue soonInvoiced, not paid, and due_on within 3 days (adjustable)
overdueinstallmentOverdue N days (red)Invoiced, not paid, and past due_on
all_paiddealAll paid — close the dealEvery 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.

Example tool calls
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…”