Files
production-analytics/docs/downtime-architecture.md
T

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.