Skip to content

MSP Billing Rationale

This page explains the consequences of the implemented billing boundaries. It does not establish a new billing policy or record unverified historical reasons for earlier decisions. Exact eligibility, calculations and exceptions belong in the MSP billing rules.

Separate Eligibility from Charges

The Client Service owns the commercial billing window and identifies the customer. The Account owns the dated MSP seat roster, which can survive a change of agreement without moving or duplicating people. Linked MSP Invoice Lines own the configured charges. Products provide defaults for labels, prices and Xero account codes. This allows client-specific charges and prices without making every commercial variation a different Plan type.

For example, a licence or base charge uses its invoice-line quantity, while a monthly seat Product uses eligible MSP Seats on the Service's Account. Changing the reference quantity on a monthly seat charge does not change the number of billable people.

Keep Agreement Dates Distinct from Billing Dates

The optional current-agreement fields describe the accepted commercial agreement. They do not drive invoice generation. A contractual renewal date does not end billing; the Plan's Billing_End has that separate operational meaning. Changing an agreement reference therefore does not silently stop or restart service charges. See agreement maintenance.

Make Exceptional Charges Explicit

Annual seat Products recur on a twelve-month anniversary anchored to the first day of their initial invoice month. An annual charge starting 2026-07-01 recurs in July; it is not a monthly charge spread across twelve invoices.

A person joining partway through that annual period needs an explicitly configured prorate charge with the calculated price, quantity and covered period. That line remains separately reviewable. The generator does not calculate the prorate automatically or prevent duplicate prorate configuration; the operator must check for an existing charge.

Preserve Review Before Issuing an Invoice

Generation creates or refreshes drafts. Approval and sending remain Xero actions. A refresh checks the existing Xero and CRM invoice details before applying new configuration. Matching totals alone are insufficient: changed descriptions or account codes also need reconciliation.

This boundary makes the draft review meaningful and avoids silently replacing unreconciled Xero edits. Once Xero is no longer DRAFT, corrections require the appropriate adjustment or credit process instead of regenerating that invoice.