01 — Quick Reference

How a value is rated

Our rating governs; the lab's own rating is neither stored nor used. Levels are normal, elevated, urgent, not_rated.

  1. The unit's primary maintenance group at the date taken comes from the Asset Register. No group: not_rated.
  2. The standard for (group, SMCS code, method): the site row if it has at least the parameter's minimum sample count; otherwise the thin-population rule (overall_then_engineered by default): the overall row (the group, then its parents), then the engineered row; otherwise not_rated. A value is never scored against another method's population.
  3. Ascending (the default): urgent at or above the standard's urgent, elevated at or above its elevated, else normal. Descending (viscosity): the same with "at or below", and elevated is the higher figure.
  4. Either level may be empty: a standard with only urgent gives urgent or normal; a standard with neither cannot rate and is skipped as if absent. Context values (rated false) are stored, not rated.

Trend, series and resets

  • Rate per 100 SMU = change against the previous result of the same series (unit + SMCS code + modifier) and method, divided by the SMU between them. It is information only: no rate thresholds, it never changes a severity.
  • The SMU is Lifecycle's reading at the date taken (the last known reading), never the date the lab reported.
  • The trend restarts (the next rate is empty) after a series reset: a component fitted or removed at that unit and SMCS code (the app is told, not which component), a change of method, an OIL_CHANGED value on the result, or a closed work order whose template is flagged oil_change.

Alerts and Work

  • An elevated or urgent value raises one alert per result and parameter (a result sent again is not recorded twice: it is matched on the lab's result id). condition.elevated_reading / condition.urgent_reading are published. An elevated alert is a warning only: no work order and no schedule item. It resolves itself when the same unit, SMCS code and parameter is normal in two results running (alerts_resolved in the response); a planner can also acknowledge or resolve it.
  • An urgent alert asks Work for a draft work order from the route's template (alert_routing.yaml, by SMCS code; no work type, Work takes it from the template). Work's order is linked back to the alert, and closing it resolves the alert (condition.alert_resolved).

Wear patterns

  • A pattern is a set of values (its members), each with a lowest severity that counts (elevated or urgent), a weight (a negative weight rules the pattern out, e.g. silicon argues for dirt ingress, not wear) and a required flag. The score is the sum of the weights of the members met; at or above the pattern's score_possible it is possible, at or above score_confirmed it is confirmed. A pattern is at most no match unless every required member is met.
  • A pattern applies by maintenance group (the unit's group or an ancestor; empty means all groups) and SMCS code; where several versions share a name, the most specific group wins. The weights in the demo data are placeholders until the reliability engineers set the real ones.
  • A value the lab did not report is simply not met and is noted in the evaluation (it lowers the confidence); it is not a clean negative.
  • When a pattern first reaches possible or confirmed (or goes from possible to confirmed) one pattern alert is raised with the pattern's wording frozen in it, and condition.pattern_detected is published. The pattern alert replaces the elevated single-value alerts of the values that contribute to it; an urgent value always raises its own alert.
  • Possible and confirmed both ask Work for a draft work order from the pattern's own corrective template, like an urgent value (decided 2026-10-15: a possible pattern is not scheduled). Closing the order resolves the alert.
  • A series reset (a component fitted or removed at that unit and SMCS, a method change, an oil change) ends the pattern state; the next result starts it afresh.

MTBR (mean time between removals)

Beside an alert's wording: the computed figure for the group + SMCS code (the exposure of all the components fitted there, those still running included, divided by the failures, in the main SMU) when there are at least reliability.min_failures failures (default 5); otherwise the engineer's industry estimate with its source. condition.recalculate_reliability (or scripts/recalculate_reliability.py) reads the failure removals from the Register's component history and the exposure from Lifecycle. It is context only: it never changes a severity.

Settings

schema/condition_settings.yaml: sigma for elevated (1.0) and urgent (2.0), minimum sample count (30; lead 15), the thin rule, samples kept out of the norm (those within 500 SMU before a component change at that unit and SMCS), the usage metric used for the SMU. schema/alert_routing.yaml: what each severity does.

Recalculating the statistical standards

condition.recalculate_standards (or python apps/condition_monitoring/scripts/recalculate_standards.py) recomputes mean, SD and count per (group, SMCS code, method, parameter), once per site and once overall, and for each parent group; the previous rows are superseded and old results keep the standard they were rated against. Run it weekly; nothing schedules it inside the app.

Numbers

Record Number How
Result RS-00007 … assigned on save
Alert CA-00004 … assigned on save

Everyday tasks

To… Do this
See what needs attention Results & Alerts → Condition Alert, filter status open.
See a unit's standing Condition State, filter by asset.
Check how a value was rated Result Value → the standard it points at.
See why a pattern was declared Wear Patterns → Pattern Evaluation (score, members met and missing, confidence, rising).
Tune a pattern Wear Patterns → Wear Pattern Member (min severity, weight, required).
Enter an industry estimate Standards → Reliability Estimate (basis industry estimate, with its source).
Change an engineered limit Standards → Parameter Standard (source engineered).

Running it

python server/run.py condition_monitoring                   # alone, http://localhost:5100
python networks/work_supply/network.py start            # with the whole Work & Supply network