Project performance record
Project performance record is one of Demiton's published registers for Australian civil construction. A project's performance summary for a period: margin, schedule and quality signals. Demiton keeps it current from the systems a contractor already runs and publishes the record's shape as a versioned JSON Schema, so the same question works whichever system produced the record.
Part of Projects in the register catalog.
- Register ID
project_performance_recordUse this name to ask for the register. The API calls it a shelf ID.- Each record is
- A stateThe current value of something, replaced when it changes.
- Status
- DeclaredDefined, and fills when a source produces its first record.
- Data
- OrganisationPrivate to each organisation's own workspace.
- Version
- v2 (2.1.1)Current version.
Standards
This register's contract was designed against these standards and laws. Holding these records does not by itself certify compliance.
- A New Tax System (Goods and Services Tax) Act 1999 (Cth)GST tax invoice rules (ATO guidance)
- AS 2124General Conditions of Contract
- AS 4000General Conditions of Contract
- AS 4000General Conditions of Contract (construct only)
- AS 4902General Conditions of Contract for Design and Construct
- Security of paymentQld security of payment
- Security of paymentACT security of payment
- Security of paymentWA security of payment
- Security of paymentNSW security of payment
- Security of paymentVic security of payment (2026 reforms)
- Security of paymentSA security of payment
- Security of paymentTas security of payment
- Construction Contracts Act 2002 (NZ)Construction Contracts Act 2002 (2002 No 46)
- Housing Grants, Construction and Regeneration Act 1996 Part IIHGCRA 1996 Part II (Payment), as amended by LDEDCA 2009
- SI 1998/649Scheme for Construction Contracts (England and Wales) Regulations 1998
- AIA G702/G703Application and Certificate for Payment / Continuation Sheet
Connectors
Connected today
Demiton keeps this register current from these systems now.
No system fills this register yet.
On the roadmap
Systems in the planned connector rollout that can fill this register. Partial means the system holds only some of its fields.
None planned yet.
Fields
62 fields: 29 required, 26 optional, 7 defined by each organisation.
Required
Every record carries these fields.
- subjectWhole number
The project the record is about; the semantic fact's subject and supersede key.
Example:
8101- summaryText
One-line human summary for content search and list display.
Example:
Emerald Street Rejuvenation is tracking slightly behind t…- claim_cycleGroup of fields
Monthly claimed-vs-cost curve and its derived margin.
- margin_alertsGroup of fields
Evaluated alert rules and drafts; empty object valid.
- outcome.budgetNumber
BC total budget.
Example:
2850000- schema_versionText
Payload version marker (
"1.0-phase1")Example:
1.0- outcome.margin_pctNumber
Margin to date.
Example:
5.3- claim_cycle.curve[]List
Month-by-month points; empty array valid.
- classification.nameText
Project/contract display label at analysis time.
Example:
Emerald Street Rejuvenation - Central Highlands Regional …- outcome.cost_actualNumber
BC total cost.
Example:
1620000- divergence_attributionGroup of fields
Deterministic drift attribution; empty object valid.
- data_quality.confidenceNumber
Gate confidence stamped on the fact.
Example:
0.81- outcome.cost_growth_pctNumber
Cost ÷ budget − 1.
Example:
3.1- provenance.generated_atDate and time
Generation timestamp.
Example:
2026-08-01T02:00:00Z- claim_cycle.curve[].monthText
The period covered by the point.
Example:
2026-06- claim_cycle.curve[].cum_costNumber
Cumulative cost.
Example:
1305000- margin_alerts.active_alerts[]List
Alerts active in the latest month; empty valid.
- data_quality.sources_missing[]List
Named gaps.
Example:
KEYPAY- data_quality.sources_present[]List
Named sources that answered.
Example:
D365_BUSINESS_CENTRAL- claim_cycle.curve[].cum_claimedNumber
Cumulative claimed.
Example:
1425000- divergence_attribution.cycles[]List
Drifting periods; empty array valid.
- data_quality.source_coverage_pctNumber
Share of expected sources present.
Example:
0.88- margin_alerts.active_alerts[].ruleText
Rule id (
tendered_deviation,cost_claim_ratio)Example:
cost_growth_threshold- margin_alerts.active_alerts[].levelText
alertorescalationExample:
warning- margin_alerts.active_alerts[].monthText
The month the alert fired.
Example:
2026-07- divergence_attribution.cycles[].monthText
The drifting period.
Example:
2026-07- claim_cycle.curve[].margin_to_date_pctNumber
Cumulative margin at that month.
Example:
8.4- divergence_attribution.cycles[].drift_ptsNumber
Signed margin movement that cycle.
Example:
-3.1- divergence_attribution.cycles[].causes[].causeText
Attributed cause, one of the code-defined values.
Example:
wet weather standdown
Optional
Present when the source system records them.
- currencycurrency
The currency of every monetary amount on this record, an ISO 4217 alpha-3 code as the source states it. A record with no currency has no usable amount.
- cost_lines[]List
Raw BC cost categories; empty when no P&L.
- outcome.marginNumber
BC margin.
Example:
90630- outcome.statusText
BC status.
Example:
on_track- schedule_delaysGroup of fields
Latest site-diary schedule signal (completion dates, days worked, delay-field presence)
- financial_periodText
The three declared context coordinates.
Example:
2026-07- outcome.invoicedNumber
BC total invoiced.
Example:
1710000- provenance.phaseText
Pipeline phase marker (
"phase1-bc-assignar")Example:
delivering- claim_cycle.cyclesWhole number
Number of months carrying a claim.
Example:
6- proposal: tax_basisText
n/a)- outcome.contract_valueNumber
BC total contract value.
Example:
2850000- outcome.revenue_actualNumber
BC total revenue.
Example:
1710000- outcome.revised_budgetNumber
Variation-adjusted budget/contract and the variation tally.
Example:
2900000- proposal: jurisdictionjurisdiction
The regime the record is being read under.
- claim_cycle.curve[].costNumber
Cost in that month.
Example:
260000- cost_lines[].cost_budgetNumber
Per-category budget vs actual.
- claim_cycle.claimed_to_dateNumber
Latest-point rollups.
Example:
1710000- claim_cycle.curve[].claimedNumber
Claimed in that month.
Example:
285000- claim_cycle.drift_alarm_monthText
First month margin-to-date flips negative.
Example:
2026-07- labour_plant.allocation_countWhole number
Allocation rollup.
- labour_plant.total_task_hoursNumber
Total allocated task hours.
- claim_cycle.tendered_margin_pctNumber
Tendered baseline and deviation.
Example:
9- margin_alerts.first_alert_monthText
Earliest alert month.
Example:
2026-07- divergence_attribution.attribution_coverage_pctNumber
Share of drifting cycles explained (cycle-count basis v1)
Example:
92- divergence_attribution.cycles[].causes[].evidenceText
The observed signal behind the cause.
Example:
daily_log delay notes, w/c 2026-07-14- divergence_attribution.cycles[].observability_gaps[]List
Named missing data that left the cycle unattributable.
Defined by each organisation
Their contents come from the organisation's own forms or systems, so they differ between organisations.
- variations[]List
The tenant's variation register at analysis time.
- contract.sourceText
Provenance of the claim terms.
- contract.claim_termsGroup of fields
Claim cadence / payment terms / retention from the tenant's QF-164 template.
- provenance.resolved_linksList
The tenant's source-link rows used for the reconciliation.
- cost_lines[].work_type_rawText
The tenant's own BC category label.
- labour_plant.hours_by_taskGroup of fields
Allocated hours per Assignar task.
- proposal: claim_cycle.response_window_daysWhole number
calendar_day)
Filed against
Records are indexed along these dimensions, so they can be asked for by any of them.
- Currencycontext for the record, from
When known - Legal entitycontext for the record, from
When known - Financial periodcontext for the record, from
When known
Example record
A sample from Bridgeworks Group, Demiton's demonstration company. The values are illustrative; the shape is exactly what the contract describes.
{ "claim_cycle": { "claimed_to_date": 1710000, "curve": [ { "claimed": 285000, "cost": 260000, "cum_claimed": 1425000, "cum_cost": 1305000, "margin_to_date_pct": 8.4, "month": "2026-06" }, { "claimed": 312000, "cost": 300000, "cum_claimed": 1710000, "cum_cost": 1620000, "margin_to_date_pct": 5.3, "month": "2026-07" } ], "cycles": 6, "drift_alarm_month": "2026-07", "tendered_margin_pct": 9 }, "classification": { "name": "Emerald Street Rejuvenation - Central Highlands Regional Council" }, "data_quality": { "confidence": 0.81, "source_coverage_pct": 0.88, "sources_missing": [ "KEYPAY" ], "sources_present": [ "D365_BUSINESS_CENTRAL", "ASSIGNAR" ] }, "divergence_attribution": { "attribution_coverage_pct": 92, "cycles": [ { "causes": [ { "cause": "wet weather standdown", "evidence": "daily_log delay notes, w/c 2026-07-14" } ], "drift_pts": -3.1, "month": "2026-07", "observability_gaps": [] } ] }, "financial_period": "2026-07", "margin_alerts": { "active_alerts": [ { "level": "warning", "month": "2026-07", "rule": "cost_growth_threshold" } ], "first_alert_month": "2026-07" }, "outcome": { "budget": 2850000, "contract_value": 2850000, "cost_actual": 1620000, "cost_growth_pct": 3.1, "invoiced": 1710000, "margin": 90630, "margin_pct": 5.3, "revenue_actual": 1710000, "revised_budget": 2900000, "status": "on_track" }, "provenance": { "generated_at": "2026-08-01T02:00:00Z", "phase": "delivering", "resolved_links": [] }, "schema_version": "1.0", "subject": 8101, "summary": "Emerald Street Rejuvenation is tracking slightly behind tendered margin after a July cost-growth bump, with claims keeping pace with cost."}Version history
- v2 (current)
- v1
Use this contract
The contract is a standard JSON Schema (draft 2020-12) document, so any JSON Schema validator can check a record against it. Keywords starting with x-demiton- add Demiton's own meaning, such as units and requiredness, and validators ignore them.
https://docs.demiton.io/registers/project_performance_record/v2.jsonShow the full JSON Schema
Loading the schema…
Talk to the team
Tell us what you run - your ERP, field, payroll and document systems - and we will show you the registers Demiton would fill from them, on your data, in a 30-minute call.