Save local fertigungski changes

This commit is contained in:
2026-10-01 12:20:44 +02:00
parent e9f9cf6f3c
commit 5452dc035b
2 changed files with 119 additions and 0 deletions
+56
View File
@@ -12,6 +12,23 @@ CREATE TABLE IF NOT EXISTS material_consumption_snapshots (
CREATE INDEX IF NOT EXISTS material_consumption_snapshots_machine_time_idx
ON material_consumption_snapshots (calculation_id, machine_id, timestamp);
-- Channel identities are intentionally independent of material assignment.
CREATE TABLE IF NOT EXISTS channel_material_consumption_snapshots (
timestamp timestamptz NOT NULL,
calculation_id text NOT NULL,
machine_id text NOT NULL,
extruder text NOT NULL,
doser_channel text NOT NULL,
production_order text NOT NULL,
run_id text NOT NULL,
cumulative_consumption_kg double precision NOT NULL,
material_number text NULL,
material_name text NULL,
material_mapping_status text NOT NULL CHECK (material_mapping_status IN ('ASSIGNED', 'UNAVAILABLE', 'AMBIGUOUS', 'UNMAPPED')),
percentage_sum_valid boolean NOT NULL,
PRIMARY KEY (calculation_id, machine_id, extruder, doser_channel, production_order, timestamp)
);
CREATE TABLE IF NOT EXISTS material_efficiency_snapshots (
erp_feedback_timestamp timestamptz NOT NULL,
material_snapshot_timestamp timestamptz NOT NULL,
@@ -70,3 +87,42 @@ CREATE TABLE IF NOT EXISTS power_meter_monthly_reports (
generated_at timestamptz NOT NULL DEFAULT now(),
PRIMARY KEY (meter, month)
);
-- Mutable ENLYZE downtime source records. external_id is the stable ENLYZE UUID.
CREATE TABLE IF NOT EXISTS production_downtime_events (
external_id text PRIMARY KEY,
machine_id text NOT NULL,
production_order text NULL,
source_type text NOT NULL,
source_start timestamptz NOT NULL,
source_end timestamptz NULL,
attributed_start timestamptz NULL,
attributed_end timestamptz NULL,
attributed_duration_seconds double precision NULL,
reason_id text NULL,
reason_name text NULL,
reason_description text NULL,
reason_group text NULL,
category text NOT NULL CHECK (category IN ('PLANNED', 'UNPLANNED', 'UNKNOWN')),
comment text NULL,
source_updated_at timestamptz NULL,
last_reconciled_at timestamptz NOT NULL
);
CREATE INDEX IF NOT EXISTS production_downtime_events_machine_attributed_time_idx
ON production_downtime_events (machine_id, attributed_start);
CREATE INDEX IF NOT EXISTS production_downtime_events_production_order_idx
ON production_downtime_events (production_order);
CREATE INDEX IF NOT EXISTS production_downtime_events_category_idx
ON production_downtime_events (category);
CREATE INDEX IF NOT EXISTS production_downtime_events_unresolved_idx
ON production_downtime_events (machine_id, source_start)
WHERE source_end IS NULL OR category = 'UNKNOWN';
-- One observed ERP order boundary per machine, used to clip open ENLYZE downtimes.
CREATE TABLE IF NOT EXISTS production_order_attribution_state (
machine_id text PRIMARY KEY,
production_order text NOT NULL,
started_at timestamptz NOT NULL,
ended_at timestamptz NULL
);