2.4 KiB
ENLYZE downtime architecture
GET /v2/downtimes is the source of downtime events. Its UUID is the durable external
identity. end: null means the source event is currently open. reason: null is valid
and is persisted as UNKNOWN; it is never treated as UNPLANNED. ENLYZE's
updated.timestamp describes source metadata/reason editing, not finalization.
The reconciliation runner polls each configured machine with a configurable source-start
lookback (48 hours by default), follows pagination, and upserts by UUID. Every 24 hours by
default it also scans the full machine source so an old open or UNKNOWN event remains eligible
for a delayed classification update. It always replaces
the end time, comment, reason metadata, category, source update timestamp, and attributed
timing. This is intentionally not append-only because supervisors can classify an event much
later. Operators can enlarge lookback_hours where delayed classification exceeds the normal
window.
production_downtime_events retains ENLYZE source timing separately from FA-attributed
timing. An event only receives an order while the persisted ERP order boundary is active.
When ERP reports a new production order, the preceding boundary ends at the new feedback
timestamp. A boundary also ends when remaining_quantity_m2 <= completion_tolerance_m2, or
when good_quantity_m2 + tolerance >= order_quantity_m2. These are the exact fields from
CurrentWorkplaceStatus; feedback_timestamp supplies the boundary instant. No equality on
floating values is required. If neither signal proves completion, attribution stays open.
This protects a completed FA from time in an ENLYZE downtime that remains open after work has
finished. It does not infer completion from downtime. The durable
production_order_attribution_state makes this clipping survive runner restarts.
There is no machine-readable schedule today. No clock-time, shift, overnight, weekend, or Excel
planning inference occurs. ENLYZE reason.category is the only planned/unplanned source;
anything absent or unsupported remains UNKNOWN. A future SPA schedule provider can refine
classification or boundaries as a separate input without changing stored source facts.
The resulting fields support totals per order, category and reason, individual source events,
and open events. Source duration is ENLYZE's source_start/source_end; attributed duration is
only the interval inside the proven FA boundary.