Skip to content

Customer statements

Generate per-customer statements showing invoices, payments, brought-forward balances, and aging buckets. Use them to chase overdue payments. Statements are available on screen, as a branded PDF, or as CSV. You can email a statement directly to the customer with the PDF attached, or generate statements for every customer with an outstanding balance from the All Outstanding view.

  • You have the finance.statements.view permission. Owner and Manager have this by default.
  • To download or email statements, you also need finance.statements.export.
  • Customers must have invoices in the system for statements to show anything.
  1. Go to Finance → Statements.
  2. On the Individual Statement tab, search for the customer (search-as-you-type by name, company, or reference).
  3. Pick a date range. Defaults to the current calendar month.
  4. Click Generate Statement.

The on-screen statement shows:

  • Customer header — name, company, billing address, account status, payment terms.
  • Activity table — Date, Type (Invoice / Payment), Document number, Vehicle, Total, Paid, Outstanding.
  • Brought forward — invoices outstanding from before the date range, labelled “B/F”.
  • Total Due — prominent at the bottom.
  • Aging summary — five buckets: Current / 30 / 60 / 90 / 120+ days.

From the on-screen statement, the action buttons:

  • Download PDF — branded PDF, suitable for printing or sending manually.
  • Export CSV — spreadsheet view for spreadsheet manipulation.
  • Email Statement — sends the PDF to the customer’s email. Subject “Statement from {your org} — {period}”. Uses your org’s payment instructions in the body.

The send confirmation dialog protects you from misclicks. The statement view shows the last sent timestamp, with a Resend option.

Generate statements for every outstanding customer

Section titled “Generate statements for every outstanding customer”
  1. Go to Finance → Statements and click the All Outstanding tab.
  2. The list shows every customer with an outstanding balance, with their per-customer aging breakdown.
  3. Sort by any column (text columns ascending, numeric descending).
  4. Click any row to open that customer’s PDF in a new tab.
  5. Click the row’s Email button to send to that customer (with confirmation dialog).
  6. URL pagination (?page=N) lets you bookmark a specific page.

The bulk view defaults to the current calendar month. There is no per-row date range picker in this version — for custom date ranges use the Individual Statement tab.

A statement on screen, downloadable as PDF or CSV, or emailed to the customer. The customer receives a branded email with the statement PDF attached.

Aging buckets use the invoice’s due date, not the invoice date. As of today:

  • Current — not overdue (today ≤ due date).
  • 30 / 60 / 90 / 120+ — days past due.

A customer’s payment terms (set on their record) determine the due date for new invoices. See Customer account types and payment terms.

  • The “brought forward” entries cover invoices outstanding at the start of the period — even if they are decades old.
  • Payments during the period appear in the activity table even if they apply to brought-forward invoices.
  • Pre-period invoices that get fully paid during the period also appear, so the payment is visible.
  • Customers without an email address see “Customer has no email address on file” when you try to email them. Add one to their record first.
  • Voided invoices are excluded from statements entirely (they are not struck through).
  • Credit notes are not yet displayed in this version.
  • Email sends use the verified noreply@mail.torqueflow.app domain.

Problem: I cannot find Statements in Finance navigation. Cause: Your role does not have finance.statements.view. Fix: Ask an Owner.

Problem: Statement total does not match the customer’s outstanding balance. Cause: The date range may be filtering out brought-forward activity, or some invoices may have been voided after generating. Fix: Widen the date range. Voided invoices are excluded by design.

Problem: Customer says they did not receive the email. Cause: Email is going to spam, the customer’s email is wrong, or they have no email at all. Fix: Confirm the email address on the customer record. Resend from the statement page. Ask the customer to check spam.

  • finance.statements.view to view statements.
  • finance.statements.export to download PDF or CSV, or to email statements.