Skip to content

GuardCore · Quoting & billing

Price the guarding, then bill the hours it actually took

Nine security calculators over one build-up — base rate, productive-hours uplift, on-costs, overhead, margin, GST — and an accepted estimate that writes the contract rather than being retyped into it.

The problem this solves

A guarding bid is usually priced in a spreadsheet nobody else can open, from an hourly rate and an optimistic view of how many hours the post really needs. It prices last year’s contract, and when the margin turns out wrong there is no way to find which line was wrong.

GuardCore prices the work. Guard hours split by day type, a static post, a mobile patrol run whose cost is allocated across the sites it covers, alarm response, event crowd control, control-room monitoring, equipment and vehicles, mobilisation, and a premium for a licence class — nine calculators, each with its own unit, all through one build-up: the base rate, the divisor that turns paid hours into productive ones, the on-costs, the overhead, the margin and the GST.

It is not an award engine, and that is a decision rather than a shortfall. Penalty rates arrive as your own effective-dated rows, minimum engagements arrive as your own bands, and a crowd ratio arrives with the label its provenance is written on. Nothing is ever priced at zero: an unresolvable rate produces no unit cost and a named warning instead of a line that quietly costs nothing.

Then the commercial record is continuous. An accepted security estimate writes a static-guard contract on the security service line, with its rates. Approved hours are priced against those rates — site, then contract, then organisation — into invoice lines that keep the hours they were built from, so an attempt to bill the same hour twice is refused and told to raise a credit note instead. The month leaves as a Xero or MYOB import file, column for column.

Worked example

A tender for two static posts, a nightly mobile patrol over four sites, and alarm response.

  1. 1

    Each line has its own calculator

    Posts priced per hour by day type, the patrol run priced per event and allocated across its four sites, alarm response priced per period — rather than everything converted to hours first.

  2. 2

    One build-up, applied the same way

    Base rate, productive-hours divisor, on-costs, overhead, margin and GST, with the realised margin checked against the profile’s floor.

  3. 3

    Accepting it writes the contract

    A static-guard contract on the security service line, with its rates — so the price that won is the price that bills.

  4. 4

    The hours bill once

    Priced by rate type against those contract rates, with each invoice line keeping the hours behind it. A second attempt is refused and pointed at a credit note.

The bid can be defended line by line six months later, and nothing between winning it and invoicing it was retyped.

Capabilities

What quoting & billing gives you

All 7 of these are in the product today. Each one names what it is built on.

GuardCore Estimator

Live

Nine security calculators over one build-up — guard hours by day type, a static post, a mobile patrol run allocated across its sites, alarm response, event crowd control, control-room monitoring, equipment, mobilisation and a licence-class premium.

A security estimate is not a cleaning one

Live

One engine, two domains, and an estimate must declare which — the line types differ, and an accepted security estimate writes a static-guard contract on the security service line rather than something a person retypes.

Rates that know a static post from a patrol

Live

Contract rates typed by service — static guard, mobile patrol, alarm response, event — and by rate type, effective-dated and overridable per site, so a rate rise is a new row rather than an edit to history.

Invoices built from approved hours

Live

Approved hours priced by rate type, one line per rate, with the rate resolved site, then contract, then organisation — and an unresolvable rate producing a named refusal rather than a line that quietly costs nothing.

An hour bills once

Live

Each invoice line keeps the hours it was built from, and an attempt to bill them again is refused with the instruction to raise a credit note against the earlier invoice — which is the difference between a billing system and a spreadsheet.

Recurring billing on the contract

Live

One schedule per contract, in the same cadence vocabulary the report schedules use, drafted by the background worker — so a monthly invoice is not a recurring diary entry for a person.

Export to Xero, MYOB or plain CSV

Live

The import layouts those two products actually accept, column for column, with the account and tax codes resolved from your own mapping — a file you upload, not a connection we do not have credentials for.

What backs these claims

Each capability names the decision record, module, route or table it is built on. Ask us for any of them in an evaluation and we will walk you through the code.

GuardCore Estimator
ADR 0051 · src/lib/imss-estimator-security.ts priceGuardHours priceMobilePatrolRun · /imss/guardcore-estimator · imss_estimates
A security estimate is not a cleaning one
ADR 0051 · src/server/imss-estimating.ts ESTIMATE_DOMAINS · src/lib/imss-estimator-core.ts computeEstimate
Rates that know a static post from a patrol
imss_contract_rates · /imss/contracts · GET /api/imss/contracts
Invoices built from approved hours
src/server/imss-invoice.ts buildInvoice resolveRate · POST /api/imss/invoices/generate · imss_invoice_lines
An hour bills once
ADR 0027 · ADR 0029 · src/server/imss-invoice-payments.ts · src/server/imss-invoice-credit-notes.ts
Recurring billing on the contract
ADR 0019 · src/server/imss-billing-schedule.ts · imss_billing_schedules
Export to Xero, MYOB or plain CSV
ADR 0028 · src/server/imss-invoice-export.ts xeroRow myobRow · /imss/accounting-export

Twenty minutes on a real contract.

Real data, four logins, nothing typed on the day — including the parts we have not built, which we will point out ourselves.