ProductEngland & Wales

Billing

The firm's money dashboard: revenue and tax, the live Stripe balance, the invoice list, refunds, balance collection and tax/deposit defaults.

Workflow group: Company config · Sidebar: Billing Who sees this: Managers & Admins. Withdrawing funds and editing billing settings are Admin only.

Billing is the firm's money dashboard: revenue and tax at a glance, the live Stripe payout balance, the full invoice list, refunds and balance collection, and the firm-wide tax/deposit defaults. Invoices originate from order payments; Stripe Connect (which unlocks the balance) is set up in Setup / Onboarding.


Billing overview - /billing

  • Intent: The firm's money dashboard. Gives managers and admins a 90-day snapshot of revenue, tax, outstanding balances and the live Stripe payout balance, plus quick access to the full invoice list and settings.
  • Who can access it: Manager or Admin of the active company only. Everyone else sees an "Access denied - Billing is available to company admins and managers only" notice. If no company is selected, a "No active company - Select a company from the switcher" notice shows instead. The "Settings" button and the "Withdraw to bank" action are Admin-only.
  • What you can do:
    • Read four headline figures: Gross volume (with count of succeeded invoices), Net to your account (after platform fees), Tax collected, and Outstanding balance (deposits + deferred invoices awaiting their balance).
    • Read three count tiles: Pending (awaiting Stripe Checkout completion), Deferred (no upfront charge, collect at the end), and Failed (Stripe declined or expired).
    • View your live Stripe Connect balance split into Available (withdrawable now) and Pending (still settling).
    • Withdraw funds to your linked bank account (Admin only, shown only when there is an available balance) - opens a dialog where you can enter an amount or leave blank to withdraw the full available balance; validates the amount against your available balance and confirms with a success toast when the payout is initiated.
    • Scan the Revenue trend bar chart (monthly gross volume across 90 days); hover a bar for that period's gross and tax.
    • Review three top-5 leaderboards: Top products, Top advisers, and Top clients, each with amount and invoice count.
    • Browse the Recent invoices table and click any row to open its detail page.
    • Jump to "All invoices" (/billing/invoices) or, as Admin, to "Settings" (/billing/settings) from the header buttons.
  • What you see: Page header with All invoices / Settings buttons; a 4-up KPI stat row; a 3-up count row; the Stripe balance card; the revenue trend chart; a 3-column breakdown row (products / advisers / clients); and a "Recent invoices" card containing the invoice table.
  • States: Loading shows skeleton placeholders for the header, KPIs and charts. A summary load failure replaces the page with a destructive "Could not load billing dashboard" alert. The Stripe balance card shows its own skeleton while loading and, if the connected account isn't set up, reads "Balance unavailable. Complete Stripe Connect onboarding first." Trend and breakdown cards show "No payments in this window." / "No data for this window." when empty. The Withdraw button is hidden when the available balance is zero.
  • Related pages / flow: Reached from the app's main navigation (Manager/Admin). Goes to All invoices (/billing/invoices), Invoice detail (/billing/invoices/[id]), and Billing settings (/billing/settings). Stripe Connect onboarding that unlocks the balance is completed in Setup/Onboarding (/onboarding).

Invoices (list) - /billing/invoices

  • Intent: The complete, unbounded list of every invoice raised against the firm, with filtering and pagination - the full version of the overview page's "Recent invoices" table.
  • Who can access it: Manager or Admin of the active company (enforced by the billing section gate).
  • What you can do:
    • Browse all invoices, 25 per page, paginated.
    • Filter by free-text search (matches description, payer email, or client name) and by Status (Pending, Succeeded, Failed, Cancelled, Refunded, Deferred).
    • Open an invoice either by clicking its row or using the explicit "View" action button at the end of each row.
  • What you see: Page header ("Invoices") over a full-width table with columns: Issued (date), Description (falls back to first product name), Payer (name or email), Amount, Balance (dash when nothing outstanding), Tax (dash when none), Status (coloured pill), and a per-row View action.
  • States: Empty result shows "No invoices in this window." The table shows its own loading and error states while fetching.
  • Related pages / flow: Arrived at from the "All invoices" button on Billing overview (/billing). Each row/View leads to Invoice detail (/billing/invoices/[id]).

Invoice detail - /billing/invoices/[id]

  • Intent: The full breakdown of a single invoice - its line items, totals, payer, and Stripe provenance - and the place to refund a payment or collect a remaining balance.
  • Who can access it: Manager or Admin of the active company can view. The Refund and Collect-balance actions require an elevated (Manager/Admin) role.
  • What you can do:
    • Read the per-product line items (product name, optional description, unit price, quantity, subtotal).
    • Read the totals breakdown: Bill total, Charged now, Tax captured, Platform fee (amount and %), Product cost, Balance remaining, Refunded (shown only when a refund exists), and Deposit mode (Full payment, or Deposit with its percentage).
    • See who paid: a matched user (name, email, user id) or, for guest checkout, the captured customer email/name with a "No User record matched - guest checkout" note.
    • See Stripe + audit provenance: raising adviser id, connected account id, checkout session id, payment intent id, and Created / Paid at / Cancelled at timestamps.
    • Refund the payment - opens a dialog (available only when the invoice is Succeeded or Partially refunded and has a refundable amount). Enter an optional amount in pounds (blank refunds the full remaining refundable balance) and an optional reason; a destructive "This can't be undone" warning is shown. The amount is validated against the remaining refundable balance, and on success a toast confirms and the dashboard figures refresh.
    • Collect the remaining balance - a "Collect remaining balance" button appears (only when there is a balance remaining and the invoice is Succeeded or Deferred) that raises a balance request and notifies the client; disabled while requesting, and it errors if a balance request is already pending.
  • What you see: Page header with the short invoice id, a description, a Status pill, and (when eligible) a Refund payment button. Below: a two-thirds "Line items" card beside a "Totals" card; then a two-up row of "Payer" and "Stripe + audit" cards. A refund dialog overlays when opened.
  • States: Loading shows a "Loading invoice…" spinner. A load failure shows a destructive "Could not load invoice" alert. Refund/Collect controls are hidden when the invoice status or balance doesn't permit them; the collect button is hidden after a successful collection; buttons show "Refunding…" / "Requesting…" / disabled states while in flight.
  • Related pages / flow: Arrived at from Billing overview's recent-invoices table (/billing) or the Invoices list (/billing/invoices). Invoices originate from order payments (the order/checkout flow), so this page is where those charges are reconciled after the fact.

Billing settings - /billing/settings

  • Intent: Set the firm-wide tax and deposit defaults applied to every new checkout unless an order overrides them.
  • Who can access it: Admin of the active company only. Managers reach the page (they pass the billing section gate) but see an "Admin only" notice explaining they can view the dashboard but not edit settings.
  • What you can do:
    • Toggle "Enable Stripe Tax on new checkouts" - when on, every new checkout applies automatic tax based on the connected account's tax registrations.
    • Choose the Default deposit mode: "Charge in full upfront", "Take a deposit, balance later", or "Defer the full charge to the end".
    • When deposit mode is "Take a deposit", set the Deposit % (required, between 0.01 and 100), plus optional Minimum deposit (£) floor and Maximum deposit (£) ceiling. The max must be at least the min. The pound values you type are converted to the stored amounts on save.
    • Save via "Save payment settings"; a success toast confirms and the data refreshes. Saving here preserves the adviser discount policy configured elsewhere.
  • What you see: Page header ("Billing settings") over a single "Tax + deposit defaults" card holding the form. The deposit percentage/min/max fields appear only when "Take a deposit" is selected.
  • States: Loading shows a "Loading billing settings…" spinner. Non-admins see the destructive "Admin only" alert instead of the form. A load failure shows a "Settings unavailable" alert. Client-side validation blocks saving a DEPOSIT mode without a valid percentage or with max below min; a failed save shows a "Could not save billing settings" toast.
  • Related pages / flow: Reached from the "Settings" button on Billing overview (/billing, Admin only). These defaults feed the order payment/checkout flow. The related discount-policy fields this form carries through are edited on the advisers permissions screen (/advisors/permissions), and Stripe Connect activation is handled in Setup/Onboarding (/onboarding).

The law behind it

Related

  • AdvisersProductManage the firm's people: view the roster, invite colleagues, set lead-routing teams, and set role permissions and discount caps.
  • Setup / OnboardingProductThe guided post-registration checklist that gets a new company subscribed and connected to Stripe so it can take payments.
  • OrdersProductThe end-to-end workspace for running an estate-planning order: products, fact-find, drafting, sign-off, payment, signatures and finalising.
  • DashboardProductThe adviser's customisable home screen: widgets that summarise leads, orders, fact-finds and billing, with quick jumps into every core area.
Last updated 2026-07-22· george