- Documentation
- /
- Asset Lifecycle
- /
- 03 — Integration
03 — Integration
Asset Lifecycle is a member of the Work & Supply network (message protocol v1) with the
network domain lifecycle. Its contract is schema/asset_lifecycle.integration.dsl (authoring
spec v1.5), generated with python -m codegen.cli integration asset_lifecycle --network work_supply;
the handlers are in integration/handlers.py. The whole network is in
networks/work_supply/NETWORK_MAP.md.
What it owns
| Network entity | Model | Business reference |
|---|---|---|
lifecycle.usage_metric_type |
UsageMetricType | code |
lifecycle.usage_meter |
UsageMeter | meter_number |
lifecycle.meter_correction |
MeterCorrection | — |
lifecycle.life_model |
LifeModel | model_code |
lifecycle.life_forecast |
LifeForecast | forecast_number (LF-{sequence:05}) |
lifecycle.derating |
DeratingEvent | — |
Messages
| Kind | Message | What |
|---|---|---|
| publishes | lifecycle.usage_threshold_crossed |
a limit enters watch; carries that limit's consumed_life and remaining_life |
| publishes | lifecycle.life_forecast_changed |
the headline status changes (status and predicted date only) |
| publishes | lifecycle.life_due |
a limit becomes due or overdue; carries remaining_life, the headline forecast_status and is_governing |
| publishes | lifecycle.exposure_revised |
a meter correction was recorded (a technician's reading that disagrees with the history, or an explicit correction); ask component_exposure for the revised figures |
| publishes | lifecycle.usage_metric_type_reference_changed |
a corrected metric code, to the copies |
| publishes | lifecycle.derating_started / derating_ended |
an operating limit placed / lifted |
| consumes | asset.component_installed |
start a span (model by maintenance group + SMCS) |
| consumes | asset.component_removed |
end it and store the exposure |
| consumes | work.component_installed / work.component_removed |
the unit's main SMU entered on the work order: a reading at the event's date (source manual), a correction "entered on work order …" if it differs from the history, and a recalculation of the spans it reaches. Blank changes nothing. Either arrival order (this or the Register's event first) gives the same figures |
| consumes | asset.component_rebuilt |
close the cycle; open the next with the rebuild's life factor |
| consumes | asset.asset_group_reference_changed, classification.smcs_reference_changed |
refreshed copies |
| accepts | lifecycle.record_usage |
a meter reading (telematics, FMS, manual, work order …) |
| accepts | lifecycle.apply_meter_correction |
a reset / rollover / replacement / calibration / manual adjustment |
| answers | lifecycle.usage_at |
the last known reading at or before a date (value, quality, as_of, age_days) |
| answers | lifecycle.search_usage_metric_types |
the metric picker |
| answers | lifecycle.current_usage (with daily_rate), usage_history, life_status |
read-only |
| answers | lifecycle.component_exposure |
the stored exposure since the last rebuild: life_consumed and usage_unit (the first limit), and by_metric for Warranty's claim snapshot |
References
LifeModel.asset_group_cid → asset.asset_group (picker asset.search_asset_groups) and
LifeModel.smcs_cid → classification.smcs (picker classification.search_smcs); both keep a
_ref and are refreshed when the code is corrected. Components are asset.component; units are
asset.asset. The Register is asked for asset.group_membership directly; if it is unreachable
the fitting is acknowledged as unmatched (no model), never failed.
Differences from the pack
The pack published "when material"; the spec has no such expression, so the events are status
transitions. Because the figures now live per limit, usage_threshold_crossed and life_due are
triggered by the limit rows (one event per limit crossing). lifecycle.exposure_revised is
triggered by the correction record, so it carries the correction rather than the figures per
component. Derating events name lifecycle.derating.