Skip to content
Demiton
Demiton
/ var / log / engineering
Partner Showcase - every Wednesday
Partner Showcase
Business Central
Civil Memory
Cost Drift
ERP
Civil Construction

The ledger knew in March: Business Central and the five diseases

The job was under margin months before anyone said so out loud, and every fact needed to see it was already posted. Business Central keeps 29 registers current in Demiton, from job cost lines to retention. This week: what comes across from your ERP, which of the five margin diseases it helps stop - cost drift above all - and the two diseases it does nothing for.

12 min read
Named disease feeder registers filled by Business Central, led by cost drift.

The job was under margin in April. Business Central said so in April.

The cost lines were posted. The committed purchase orders were sitting in the ledger. The job's percent complete was running ahead of its percent invoiced. None of it was hidden and none of it was wrong. It simply was not anyone's job to put those four facts next to the tendered margin and say the number out loud.

The final account said so in November, when there was nothing left to decide but who to blame.

That is cost drift: nobody saw the job drift until the final account. And it is the disease Business Central is for, because the ledger is where the drift is already written.

Last Wednesday we started this series with Assignar and the registers a field system fills, and we ended by saying Business Central is the other half of cost drift. This is that half. Same shape as last week: what actually comes across, which of the five diseases it helps stop, and where it stops - because a showcase that only lists what a connector reads is a datasheet, not an argument.

What comes across

Business Central connects with OAuth 2.0 client credentials: a service principal registered in Entra ID, granted application access to your environment, pointed at your environment URL. The adapter reads the environment's OData v4 metadata on first use, so the entity list follows what your Business Central actually publishes rather than a list we ship and hope matches.

Demiton reads by default. It writes only inside a governed workflow you switch on, and every one of those writes supports a dry run first. A Protocol Zero safety lock refuses a production write outright unless the workflow was explicitly configured for production, which means a misconfigured workflow fails instead of quietly posting into your live ledger.

The commonly-read resources are projects, job ledger entries, general ledger entries, purchase orders and their lines, vendors, customers, items, vendor ledger entries, bank accounts, fixed assets, dimensions and companies. But the resources are the wrong unit to think in. The registers are the right one, because the register is what you ask for, and it is the same shape whether the fact arrived from Business Central, Xero or FinOps.

Twenty-nine registers are kept current from Business Central. Here is what they hold, grouped by what they are for:

The job and its margin (7). Job budget by expense category; cost element, the posted job cost lines; budget versus actual; job progress, percent complete against percent invoiced; profit and loss; dimension set entries, the finance dimensions attached to postings; and work activity categories, so a job task normalises to a standard taxonomy instead of a string a finance team invented.

Money in and withheld (4). Progress claims with claimed, certified, paid and retention held; retention position, what is currently withheld on a job and its status; receivable entries and the aged receivables balance; invoices issued to customers.

Committed and owed (3). Purchase orders, which is committed spend not yet posted; purchase lines, job-linked; and payable entries, the outstanding supplier bills and aged payables.

The books (4). Chart of accounts, general ledger journal entries, trial balance, and the financial period list.

Cash and assets (3). Bank accounts, current cash position across them, and the fixed asset list with cost, book value and depreciation.

Counterparties and pipeline (5). Customer list, vendor list, opportunities and their changes over time, and where a record's link to an opportunity or customer came from in your CRM.

Identity and structure (3). Legal entities, the operating companies in your group; the project list; and project details.

Every register format is published in full, with its JSON Schema and required fields, in the register catalogue, and the Business Central connector page lists all 29 with the number of fields each one draws from Business Central.

Which of the five diseases get something

Five registers out of those 29 are named feeder registers for a disease. That is the honest headline, and it is a much better answer than a register count.

RegisterWhat Business Central puts in itDisease it feeds
Budget vs actualBudgeted spend against posted GL actuals, by expense categoryCost drift
Job progressPercent complete against percent invoicedCost drift
Cost elementPosted job cost lines from the job ledgerCost drift
Progress claimClaimed, certified, paid and retention held, with the due dateCost drift, missed claims
Retention positionRetention withheld on a job, and its statusDisputes

The other 24 registers are not decoration and they are not feeders. They are the picture the five are read against - which is a distinction the platform takes seriously, because a register the verdicts do not run on should not be presented as one that stops a disease.

Cost drift

Nobody saw the job drift until the final account.

This is the disease Business Central owns, and it is worth being precise about why. Drift is not a missing number. It is a gap between numbers that live in five different places on purpose: what you budgeted (job budget), what you have committed (purchase orders and lines), what has actually posted (cost element, the general ledger), how far the job has got (job progress), and what you have claimed for it (progress claim). Every one of those is in the ledger. What has never existed is a thing that reads them together and says when they stop agreeing.

The rules for reading them are written and they run over the claim cycle. Once a cycle is past the delivering threshold - cumulative claimed of 15 per cent of contract value, because claims-basis margin is noise before that - a deviation of five points or more from the tendered margin raises an alert and ten points escalates. A cost-to-claim ratio above 1.0 for two consecutive cycles raises an alert of its own, which is the rule that catches a job drifting without a margin baseline to compare against.

The evaluation also drafts the notice the drift supports: an extension of time notice where the cause is weather or client delay, a variation notice where it is an unrecovered variation. Which is the point of pairing cost drift with the claims machinery - the moment you can see the drift is the moment you could still claim for part of it.

Where Business Central stops, and where we stop. Two things, and the second one is ours.

The tendered margin is not a ledger fact. It comes from your estimate, which arrives in our registers from the estimating documents rather than from the ERP, and where there is no tendered margin the rule falls through to the cost-to-claim ratio instead of inventing a baseline.

And the alert does not send. The drafts are payload-ready for the write-approval queue and the queue insertion is deliberately not wired, because an approval queue needs a human proposer and attributing a machine's draft to a named person is a product decision we have not made. So today: the arithmetic exists, the evidence exists, and no alert has reached anyone on a live job. Cost drift is the disease this connector exists for, and it is the one where we have the least to show you. We would rather say that than let the register count imply a cure.

Missed claims

The extra work was real, or it rained for four days. Both notices went in late.

A claim is two halves: proof the work cost what you say it cost, and a notice inside the window the contract allows. Business Central holds the first half and none of the second.

The progress claim register is the money half. It carries what you claimed, what was certified, what was paid, and the retention held, against the project, with a due date. The gap between claimed and certified is where a claim begins, and a construction business already argues about that number every month without ever having it in a register.

The entitlement half is entirely elsewhere. The notice period and the grounds come from the contract, the variation comes from the change register, the delay days come from the diary, and the rain comes from our own weather register. Business Central has the money and the due date. It does not have the window, and it never will, because the window is a contract term and not an accounting fact.

That is why last week's post put the evidence half in the field. Assignar holds the docket and the diary; Business Central holds the claim and the cost. Either one alone loses the claim.

Disputes

It went to a lawyer, and the record for that week is empty.

The disputes feeder register Business Central fills is retention position: how much is being withheld on a job, and what state that withholding is in. It is a small register doing a specific job. Close-out is one of the five dispute types we evaluate, and retention release is the most purely financial of them - a number, a project and a release date that either passed or did not.

Alongside it, the progress claim register carries the arithmetic a payment dispute is actually about: what was claimed, what was certified, what the difference is. A payment dispute argued from the certified-versus-claimed line is a much shorter argument than one reconstructed from emails.

Where Business Central stops: subcontracts, document transmittals, bank guarantees and the notices themselves are not ERP records. Business Central can tell you what is withheld. It cannot tell you whether the release was due, because that is a clause, and the clause is in the contract.

Rework

The inspection failed, and the next stage was already built on top of it.

Nothing. Rework is decided in inspections, prestarts, non-conformance reports, toolbox talks and test results, and not one of those is an ERP record. Business Central has no feeder register for this disease, and we are not going to describe a purchase order as if it were one.

If rework is the disease costing you the most, the connector that matters is the field system, and that was last Wednesday's post.

Lapsed compliance

The insurance lapsed the week the client checked.

Also nothing, and this one deserves to be said loudly because it is the natural assumption to make. The vendor list is not a certificate. The legal entity record is not an insurance policy. Company insurance, prequalification, worker competencies and plant registration come from your document system, your field app and the registers of record - not from the ledger.

Last week's post said company insurance and prequalification sit outside the field app. They sit outside the ERP too. Lapsed compliance is the first cure rolling out, and Business Central contributes no feeder to it at all.

One job, not two

The cost-drift rules only work if the job in the ledger is the same job as the one in the field system, and the same job as the one in the estimate.

So Business Central is the authoritative identity for a project: the job number is the anchor, and the Assignar project, the payroll entity and the cost centre in the ledger resolve against it, with the evidence recorded for every match. A job number that means one thing in the ERP and something else in a timesheet is how a cost drift calculation turns into two half-jobs that are each within margin.

This is also why the numbers are comparable at all. Work activity categories normalise a job task to a standard taxonomy, dimension set entries carry the finance dimensions attached to a posting, and legal entities tie every worker, project and cost code back to the company that owns it. Read cost against budget without those three and you are comparing a category, a dimension and a company that nobody ever agreed on.

What goes back

Reads are the default, but this is not a one-way connector, and it would be wrong to describe Business Central as one. Three writes exist today, all inside governed workflows, all with a dry run, and all subject to Protocol Zero on a production environment:

  • An approved variation posts to Business Central as a job planning line, triggered by the workflow engine rather than from the request that approved it.
  • A procurement intake email becomes a draft purchase order, so the PO is drafted from the document that asked for it instead of re-keyed later.
  • Opportunity, vendor, item and customer records can be created or updated where a workflow calls for it.

Nothing writes because a page was open. A write needs a workflow you configured, and it fails in a test rather than landing in production.

How to try it

For most contractors running Business Central, this is the connector that answers the question the whole platform rests on: which jobs do we have, and what have they actually cost. It is also the connector with the most surface - 29 registers, 25 of them mapped field by field - which is why we spent the words on the two diseases it does nothing for.

No cure is held back for a higher tier: Public is free and protects up to AU$1M of projects a calendar year, and connecting a system starts on Insights.

The cures roll out one disease at a time

Two diseases have a running verdict today. Lapsed compliance counts certificate and insurance expiries down at 90, 30 and 7 days, and its countdown has fired end to end in a demo tenant. Disputes shipped its cure on Monday: every active project is checked each morning against the published evidence standards that apply to it, by jurisdiction and contract form. Cost drift - the disease this connector is for - has the arithmetic and the drafted notices and no alert switched on, for the reason above. Missed claims has no alert defined yet. A cure is only called live once it has fired on a real job, and none has.

If you run Business Central, book a 30-minute call and we will connect it and show you your own registers. Next Wednesday: Employment Hero, and the worker record.

Frequently asked questions

What does Demiton read from Business Central?
Twenty-nine registers, all read-only by default. The job ledger, budget versus actual, job progress, purchase orders and lines, payables and receivables, the general ledger, trial balance, bank accounts, fixed assets, dimensions, work activity categories, vendors, customers, legal entities, projects and the commercial pipeline. Twenty-five of the 29 are mapped field by field to Business Central's own fields, and every register format is published at api.demiton.io with no login. Resources are discovered from your environment's OData metadata, so the entity list follows what your Business Central exposes rather than a fixed list we ship.
Which of the five diseases does Business Central help prevent?
Cost drift, and it is the system that disease was waiting for. Business Central fills four of the named feeder registers behind it - budget versus actual, job progress, cost element and progress claim - which is where the gap between what you priced, what you committed, what has posted and how far the job has actually got becomes visible. It also supplies the money half of missed claims through the progress claim register, and the retention position behind one of the close-out disputes. It contributes nothing to rework, and nothing to lapsed compliance: a vendor record is not an insurance certificate.
Does connecting Business Central change anything in Business Central?
No by default. Demiton reads. Writes happen only inside a governed workflow you switch on, they support a dry run first, and a Protocol Zero safety lock refuses any write to a production environment unless that workflow has been explicitly configured for production. The writes that exist today are an approved variation posted as a job planning line, a procurement intake email turned into a draft purchase order, and opportunity, vendor, item and customer records.
Is the cost drift alert live?
No. The evaluation is written and it runs over the claim cycle: once a cycle is past 15 per cent of contract value, a margin deviation of five points from tendered margin raises an alert and ten points escalates, and a cost-to-claim ratio above 1.0 for two consecutive cycles raises an alert. It also drafts the extension of time or variation notice that the drift supports. Nothing sends: the drafts are payload-ready for the write-approval queue and the queue insertion is deliberately not wired, because an approval needs a human proposer and attributing a machine's draft to a named person is a decision we have not made. We would rather show you the arithmetic and say the send is missing than describe an alert doing nothing.
How many registers does the Business Central connector fill?
Twenty-nine, twenty-five of them mapped to source fields. The full list, with what each register holds, its JSON Schema, its required fields and an example record, is published without a login at api.demiton.io - the same registry the platform validates every fact against, so the documentation cannot drift from what the product accepts.
Connected tier

Live data. Real answers.

Business Central, Assignar, KeyPay and SharePoint, read into the registers behind all five diseases. Up to AU$50M of work under protection.