The methodology behind the project audit.
ScopeLedger provides operational review signals. Results depend on column mapping, data completeness and the rates supplied.
True, false and unknown
Billable and Billed/Invoiced use three states. Only explicitly interpretable values are treated as true or false. Missing columns, empty cells and unrecognised values remain unknown. Unknown is never silently interpreted as false and does not increase either billable or non-billable hours.
Mathematical definitions
| Metric | Calculation | Boundary / missing data |
|---|---|---|
| Total hours | Sum of all valid imported project hours | Invalid time rows are discarded and reported separately. |
| Billable hours | Sum of hours explicitly recognised as Billable = true | If billable status is completely missing, the metric remains unavailable. Unknown time is not included. |
| Non-billable hours | Sum of hours explicitly recognised as Billable = false | If billable status is completely missing, the metric remains unavailable. Unknown time is not included. |
| Explicitly uninvoiced hours | Sum of hours with Billable = true and Billed/Invoiced = false | Without a known invoicing status for explicitly billable time, the metric remains unavailable. |
| Billable coverage | Hours with known billable status ÷ total hours | 0% = unavailable, between 0% and 100% = partial, 100% = complete. |
| Invoicing coverage | Explicitly billable hours with known Billed/Invoiced status ÷ explicitly billable hours | The invoice status of non-billable or unknown time is excluded from this denominator. |
| Revenue coverage | With a project fee: 100%; without a fee it matches billable coverage. | It describes the data basis of the model, not the completeness of an accounting system. |
| Budget utilisation | Recorded hours ÷ hours budget | Available only when the hours budget is greater than 0. Above 100% is treated as a budget overrun. |
| Modelled revenue | Project fee when available; otherwise the sum of explicitly billable hours × the applied billing rate | Unknown billable time generates no modelled revenue. With partial coverage only the known portion is modelled. |
| Delivery cost | Sum of valid hours × the applied cost rate | Rate priority: time row → project rate → visible default cost rate. |
| Modelled contribution | Modelled revenue − delivery cost | Without a reliable revenue basis the contribution remains unavailable. |
| Modelled margin | Contribution ÷ modelled revenue | Available as a percentage only when modelled revenue is greater than 0. |
| Non-billable share | Explicitly non-billable hours ÷ hours with known billable status | Unknown time belongs to neither the billable nor non-billable share. The current default threshold is 20%. |
| Potential open billing value | Sum of hours × billing rate only where Billable = true and Billed/Invoiced = false | No amount is shown without known invoicing status. With partial coverage the amount applies only to the known portion. |
| Total modelled revenue | Sum of all available modelled project revenue | Projects without a reliable revenue basis are not invented as zero. Revenue coverage shows how complete the revenue basis is. |
| Total delivery cost | Sum of delivery costs across all analysed projects | Includes explicitly identified fallback costs when actual rates are missing. |
| Total contribution | Total modelled revenue − total delivery cost | Read this together with revenue coverage when a complete revenue basis is not available for all project hours. |
| Analysed rows | Imported time rows − discarded invalid time rows | Invalid rows are reported separately with row number and reason. |
| Critical projects | Number of projects with at least one finding of severity “critical” | Informational and warning findings alone do not increase this number. |
Model assumptions and fallbacks
For cost and billing rates, each time row follows this order: the actually imported rate, then an available project rate, and only then the visibly configured default rate. Default values are modelling assumptions, not industry benchmarks. ScopeLedger reports when they were used.
For a fixed project fee, the fee is used as the revenue basis. Without a fee, revenue is modelled only from explicitly billable time. Delivery costs, by contrast, include all valid time rows. With incomplete revenue coverage, the resulting margin can therefore be deliberately conservative.
Budget overrun
A budget overrun exists only when budget utilisation is greater than 100%. Exactly 100% is not treated as an overrun. Without a positive hours budget the metric remains unavailable.
Potentially unbilled work
Only the combination Billable = true and Billed/Invoiced = false counts as potentially open. Billable alone is not evidence of an unpaid invoice. If invoice status is completely missing, ScopeLedger shows “unavailable” instead of €0. With partial coverage only the known portion is calculated and explicitly marked as partial.
Data quality
The data-quality level follows the calculation basis actually used. Limited takes precedence when billable status is completely missing or when no hourly revenue can be modelled without a fixed fee. Otherwise the level is at least medium whenever a default cost or billing rate is used, billable coverage is only partial, invoicing coverage is incomplete or no hours budget is available. High is shown only when none of these reductions applies. The specific reasons are displayed separately in the result.
Result, coverage and review guidance
ScopeLedger deliberately separates five layers so a calculated value never appears more precise than its data basis:
- Calculated value: the result of the documented formula applied to the available data.
- Coverage: how complete the data required for the metric is.
- Data source and fallback: whether imported time/project rates, a fixed fee or visible default rates were used.
- Finding: a reproducible rule deviation derived from the calculated result.
- Review guidance: a recommended next verification step; it is not another calculated fact.
With partial revenue coverage, the interface labels the margin as a partial basis. With only partial invoicing coverage, the calculated amount is labelled known open value; it is not presented as a claimed total. If a metric cannot be calculated reliably, ScopeLedger shows “Unavailable” instead of zero or a falsely precise substitute estimate.
Project-list prioritisation
ScopeLedger sorts projects reproducibly by economic risk signals. The order is lexicographic: an earlier criterion takes precedence over every later criterion.
- Negative modelled contribution first.
- Then the stronger budget overrun, measured as budget utilisation minus 100%.
- Then projects below the currently configured target margin.
- Then the higher potential open billing value.
- Then the higher explicit non-billable share.
- If every criterion is equal, the project name decides alphabetically.
The visual indication of a low project margin uses the same currently configured target as the low_marginfinding and risk prioritisation. There is no separate hard-coded 30% threshold in the result display.
Findings and severity
| Rule | Trigger | Classification |
|---|---|---|
| Budget exceeded | Budget utilisation above 100% | Critical |
| Negative contribution | Modelled contribution below 0 | Critical |
| Low margin | Below the currently configured target margin | Warning unless contribution is already negative |
| Open time | Billable = true and Invoiced/Billed = false | Warning; never inferred from unknown |
| High non-billable share | Above 20% of time with known billable status | Warning |
| Data gaps and fallbacks | Budget, status or actual rate is missing | Information, not a claimed economic loss |
These metrics are designed to work together in an ongoing economic project review.