Skip to content
Demiton

Project performance record

A project's performance summary for a period: margin, schedule and quality signals.

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
v1Current version.

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

61 fields: 29 required, 25 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

schema_versionText

Payload version marker ("1.0-phase1")

Example: 1.0

summaryText

One-line human summary for content search and list display.

Example: Emerald Street Rejuvenation is tracking slightly behind t…

classification.nameText

Project/contract display label at analysis time.

Example: Emerald Street Rejuvenation - Central Highlands Regional …

outcome.budgetNumberUnit: AUD

BC total budget.

Example: 2850000

outcome.cost_actualNumberUnit: AUD

BC total cost.

Example: 1620000

outcome.margin_pctNumberUnit: percent

Margin to date.

Example: 5.3

outcome.cost_growth_pctNumberUnit: percent

Cost ÷ budget − 1.

Example: 3.1

claim_cycleGroup of fields

Monthly claimed-vs-cost curve and its derived margin.

claim_cycle.curve[]List

Month-by-month points; empty array valid.

claim_cycle.curve[].monthText

The period covered by the point.

Example: 2026-06

claim_cycle.curve[].cum_claimedNumberUnit: AUD

Cumulative claimed.

Example: 1425000

claim_cycle.curve[].cum_costNumberUnit: AUD

Cumulative cost.

Example: 1305000

claim_cycle.curve[].margin_to_date_pctNumberUnit: percent

Cumulative margin at that month.

Example: 8.4

divergence_attributionGroup of fields

Deterministic drift attribution; empty object valid.

divergence_attribution.cycles[]List

Drifting periods; empty array valid.

divergence_attribution.cycles[].monthText

The drifting period.

Example: 2026-07

divergence_attribution.cycles[].drift_ptsNumberUnit: margin points

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

margin_alertsGroup of fields

Evaluated alert rules and drafts; empty object valid.

margin_alerts.active_alerts[]List

Alerts active in the latest month; empty valid.

margin_alerts.active_alerts[].ruleText

Rule id (tendered_deviation, cost_claim_ratio)

Example: cost_growth_threshold

margin_alerts.active_alerts[].levelText

alert or escalation

Example: warning

margin_alerts.active_alerts[].monthText

The month the alert fired.

Example: 2026-07

data_quality.source_coverage_pctNumberUnit: ratio 0–1

Share of expected sources present.

Example: 0.88

data_quality.confidenceNumberUnit: ratio 0–1

Gate confidence stamped on the fact.

Example: 0.81

data_quality.sources_present[]List

Named sources that answered.

Example: D365_BUSINESS_CENTRAL

data_quality.sources_missing[]List

Named gaps.

Example: KEYPAY

provenance.generated_atDate and timeISO 8601, with time zone

Generation timestamp.

Example: 2026-08-01T02:00:00Z

Optional

Present when the source system records them.

outcome.contract_valueNumberUnit: AUD

BC total contract value.

Example: 2850000

outcome.revenue_actualNumberUnit: AUD

BC total revenue.

Example: 1710000

outcome.invoicedNumberUnit: AUD

BC total invoiced.

Example: 1710000

outcome.marginNumberUnit: AUD

BC margin.

Example: 90630

outcome.revised_budgetNumberUnit: AUD / count / percent

Variation-adjusted budget/contract and the variation tally.

Example: 2900000

outcome.statusText

BC status.

Example: on_track

cost_lines[]List

Raw BC cost categories; empty when no P&L.

cost_lines[].cost_budgetNumberUnit: AUD / percent

Per-category budget vs actual.

labour_plant.total_task_hoursNumberUnit: hours

Total allocated task hours.

labour_plant.allocation_countWhole numberUnit: count

Allocation rollup.

schedule_delaysGroup of fields

Latest site-diary schedule signal (completion dates, days worked, delay-field presence)

claim_cycle.curve[].claimedNumberUnit: AUD

Claimed in that month.

Example: 285000

claim_cycle.curve[].costNumberUnit: AUD

Cost in that month.

Example: 260000

claim_cycle.claimed_to_dateNumberUnit: AUD / percent

Latest-point rollups.

Example: 1710000

claim_cycle.drift_alarm_monthText

First month margin-to-date flips negative.

Example: 2026-07

claim_cycle.tendered_margin_pctNumberUnit: percent / points

Tendered baseline and deviation.

Example: 9

claim_cycle.cyclesWhole numberUnit: count

Number of months carrying a claim.

Example: 6

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.

divergence_attribution.attribution_coverage_pctNumberUnit: percent

Share of drifting cycles explained (cycle-count basis v1)

Example: 92

margin_alerts.first_alert_monthText

Earliest alert month.

Example: 2026-07

provenance.phaseText

Pipeline phase marker ("phase1-bc-assignar")

Example: delivering

proposal: jurisdictionText

The regime the record is being read under.

proposal: tax_basisTextUnit: excl_gst\

n/a)

financial_periodText

The three declared context coordinates.

Example: 2026-07

Defined by each organisation

Their contents come from the organisation's own forms or systems, so they differ between organisations.

cost_lines[].work_type_rawText

The tenant's own BC category label.

labour_plant.hours_by_taskGroup of fieldsUnit: hours

Allocated hours per Assignar task.

contract.claim_termsGroup of fieldsUnit: days

Claim cadence / payment terms / retention from the tenant's QF-164 template.

contract.sourceText

Provenance of the claim terms.

variations[]ListUnit: AUD / date

The tenant's variation register at analysis time.

proposal: claim_cycle.response_window_daysWhole numberUnit: working_day\

calendar_day)

Example record

A sample from Bridgeworks Group, Demiton's demonstration company. The values are illustrative; the shape is exactly what the contract describes.

project_performance_record.example.json
{
"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."
}

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.

Schema URL
https://docs.demiton.io/registers/project_performance_record/v1.json
Show 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 keep current from them, on your data, in a 30-minute call.

Book a 30-minute callStart free