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.budgetNumber
BC total budget.
Example:
2850000- outcome.cost_actualNumber
BC total cost.
Example:
1620000- outcome.margin_pctNumber
Margin to date.
Example:
5.3- outcome.cost_growth_pctNumber
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_claimedNumber
Cumulative claimed.
Example:
1425000- claim_cycle.curve[].cum_costNumber
Cumulative cost.
Example:
1305000- claim_cycle.curve[].margin_to_date_pctNumber
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_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- 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
alertorescalationExample:
warning- margin_alerts.active_alerts[].monthText
The month the alert fired.
Example:
2026-07- data_quality.source_coverage_pctNumber
Share of expected sources present.
Example:
0.88- data_quality.confidenceNumber
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 time
Generation timestamp.
Example:
2026-08-01T02:00:00Z
Optional
Present when the source system records them.
- outcome.contract_valueNumber
BC total contract value.
Example:
2850000- outcome.revenue_actualNumber
BC total revenue.
Example:
1710000- outcome.invoicedNumber
BC total invoiced.
Example:
1710000- outcome.marginNumber
BC margin.
Example:
90630- outcome.revised_budgetNumber
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_budgetNumber
Per-category budget vs actual.
- labour_plant.total_task_hoursNumber
Total allocated task hours.
- labour_plant.allocation_countWhole number
Allocation rollup.
- schedule_delaysGroup of fields
Latest site-diary schedule signal (completion dates, days worked, delay-field presence)
- claim_cycle.curve[].claimedNumber
Claimed in that month.
Example:
285000- claim_cycle.curve[].costNumber
Cost in that month.
Example:
260000- claim_cycle.claimed_to_dateNumber
Latest-point rollups.
Example:
1710000- claim_cycle.drift_alarm_monthText
First month margin-to-date flips negative.
Example:
2026-07- claim_cycle.tendered_margin_pctNumber
Tendered baseline and deviation.
Example:
9- claim_cycle.cyclesWhole number
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_pctNumber
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_basisText
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 fields
Allocated hours per Assignar task.
- provenance.resolved_linksList
The tenant's source-link rows used for the reconciliation.
- contract.claim_termsGroup of fields
Claim cadence / payment terms / retention from the tenant's QF-164 template.
- contract.sourceText
Provenance of the claim terms.
- variations[]List
The tenant's variation register at analysis time.
- proposal: claim_cycle.response_window_daysWhole number
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.
{ "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.
https://docs.demiton.io/registers/project_performance_record/v1.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 keep current from them, on your data, in a 30-minute call.