Skip to main content

Services

Some monthly charges cannot be counted from the PBX. A fibre circuit, a mobile SIM, a leased line, a licence you resell, a maintenance contract: the PBX has never heard of any of them, and they belong to one customer rather than to everybody on a rate plan.

That is what a service is. Nothing in Vodia Billing knows what these products are — an NBN service in Australia, an FTTC line in the UK, Glasfaser in Germany, fibra in Spain. A service is a description, a currency, a price, and a customer who has one.

Services are configured in two places, and the split is the whole idea:

  • Catalogue → Service catalogue is a price list. It sells nothing.
  • Tenants → Services is where a customer is given one, and it holds its own price.

Why not a flat rate on the plan​

A flat recurring row is the obvious place to put a circuit, and it fails for two reasons.

Scope. A flat row bills every tenant on that plan. Customer-specific services therefore force a plan per customer, and plans stop being plans.

A silent collision. Recurring charges are keyed on {system, domain, basis, period, subtype, frequency}, and a flat row's key is its description. Two rows both described "NBN 100" share one key, so only one of them ever bills — no error, no second line, and the second circuit simply not charged. Vodia Billing now refuses to save two identically described flat rows for exactly this reason, and names this page in the refusal.

A service is keyed on its own assignment, so three identical circuits are three charges and three invoice lines.

The catalogue​

Catalogue → Add service. One row per product you sell:

FieldNotes
DescriptionPrints on the invoice. Authored in your language, printed verbatim
CurrencyLives on the item, exactly as it does for hardware
PriceA starting point, copied onto each assignment
CostOptional. Blank leaves margin blank rather than showing a false 100%
SKUOptional. Appears in the biller export
Category, supplierOptional, free text. Not a closed list
How oftenMonthly, quarterly or annual — the default for new assignments

Editing the catalogue never re-prices a customer​

This is the one rule worth reading twice. A hardware item fills in a one-time charge form once. A service catalogue entry would otherwise be read every month, so a price rise here would silently re-price every customer who has that service on the next bill run.

It does not. The price is copied onto the assignment when the service is given to a customer, and the catalogue is then out of the loop. Re-pricing a customer is an edit to their assignment, which is a decision somebody makes deliberately.

Archiving an item follows the same logic: it leaves the price list, and customers who already have it keep being charged, because they still have the service. Ending somebody's service is done on the tenant.

Assigning a service​

Tenants → Services → Assign a service. The catalogue fills the form in and every field stays editable — a negotiated price is normal.

FieldNotes
From the catalogueWhich product this is. Only items in the tenant's own currency are offered
DescriptionWhat the service is. Prints on the invoice
LabelWhich one this is. Optional, and see below
QuantityOne or more
Each / Cost eachThis customer's price, not the list price
How oftenMonthly, quarterly or annual
Billing monthQuarterly and annual only — the month it appears on an invoice
First monthThe first period it bills
Last monthBlank means open-ended

One row per instance, and the label​

Three circuits at three sites are three assignments, each with its own label — a street, a site name, a circuit or service id, a phone number. The label prints under the description, which is what makes three identical services three lines a customer can actually check:

NBN 100
Head office · AVC10000000 99.00
NBN 100
Branch office · AVC20000000 99.00

They also end independently, which is the practical reason instances beat a quantity: one site closes, one assignment gets a last month, the others carry on untouched.

Use quantity when the things genuinely are interchangeable — ten extra mailboxes, five fax lines. One assignment, quantity 10, one invoice line.

Currency​

An item priced in AUD cannot be assigned to a tenant billing in USD. The refusal names both currencies rather than converting, defaulting, or billing a number that means nothing. Add the row in the currency you sell in — currency lives on the item.

If a tenant's currency is changed after a service was assigned, that service stops billing and says so in the bill run's unpriced list. It bills nothing rather than billing the wrong currency quietly.

Whole months, both ends​

First month and Last month are months, not dates. A service turned on mid-month bills the full month.

That is deliberate. Vodia Billing does not guess whether your commercial terms prorate a part-month — the same decision it makes for a tenant onboarded mid-period. If your terms do prorate, add a one-time credit for the difference, which puts a figure and a reason on the invoice rather than arithmetic nobody can check.

Ending a service is its last month. That keeps the history: past invoices still refer to something that exists.

Editing a service that has already billed​

Change a price or a quantity and Vodia Billing re-cuts the charge in every period that is not yet invoiced or exported, and tells you which periods it left alone:

re-cut 2026-11 · left 2026-10 as invoiced

A finalized line is never rewritten. If a period is already on an issued invoice, the change applies from the next one.

Removing an assignment outright is refused once any of its charges has been invoiced or exported. Set a last month instead — the refusal says so, and names the periods involved.

What a service is not​

Not counted as a line for per-unit tax. A US 911 fee counts access lines: extensions, DIDs, licences, trunk channels. A fibre circuit is not an access line, so services are deliberately excluded from that count. An invoice with two circuits and two extensions shows 911 fee (2 × 0.35), not four.

Not goods. A service falls in the recurring tax bucket, so a percentage component on recurring applies to it. Hardware is goods; a circuit is a service.

Not a plan basis. service cannot be added to a rate plan's recurring rows, and the API refuses it by name. A service is assigned to a tenant and priced on that assignment.

Not snapshot-derived. No snapshot, no partial-period flag, no highest-observed window. The quantity is what you wrote down. Services therefore bill for a period that has no snapshots at all, and for a tenant with no sell plan.

In Xero and QuickBooks​

A service line is handed over as a recurring line, under whatever revenue account your existing recurring mapping uses. No extra configuration.

The line description carries the label:

NBN 100 — Head office · AVC10000000            99.00
NBN 100 — Branch office · AVC20000000 99.00

On Xero (Shape 1) the accounting system's own mailer sends the document, so that description is what the customer reads. Without the label they would receive two identical lines.

In the biller export​

Service rows are typed RECURRING, with the SKU in the direction_or_subtype column and the description with its label in number_or_desc:

"RECURRING","...","hq.northwind-example.com","2026-11","","FTTC80","NBN 100 — Head office · AVC10000000","","","1","","99.0000","USD","NW-1041",""

The amount column is the extended total, so a biller that ignores the quantity column still charges the right money.

Worked example​

Northwind Telecom resells two fibre circuits to their head-office tenant.

Catalogue:

DescriptionCurrencyPriceCostHow often
NBN 100USD99.0089.00monthly

Assignments on hq.northwind-example.com:

DescriptionLabelQtyEachFirst monthLast month
NBN 100Head office · AVC10000000199.002026-11
NBN 100Branch office · AVC20000000199.002026-11

On the November invoice:

ItemQtyAmount
NBN 100 — Head office · AVC10000000199.00
NBN 100 — Branch office · AVC20000000199.00

Margin is 10.00 per circuit, which reaches the margin report because a cost was entered. Both lines fall in the recurring tax bucket. Neither is counted by a per-line 911 fee.

The branch closes in February​

Set the branch assignment's last month to 2026-01. It bills November, December and January, and stops. The head-office circuit is untouched, and the invoices already issued still refer to a service that exists.