94 lines
2.7 KiB
SQL
94 lines
2.7 KiB
SQL
CREATE OR REPLACE VIEW mv_reports_ucepsa_demo.machine_stops_grafana AS
|
|
SELECT
|
|
s.id,
|
|
s.machine_id,
|
|
|
|
s.started_at,
|
|
s.ended_at,
|
|
COALESCE(s.ended_at, now()) AS effective_ended_at,
|
|
|
|
s.status,
|
|
s.classification_status,
|
|
|
|
s.start_event_name,
|
|
s.end_event_name,
|
|
|
|
COALESCE(
|
|
s.duration_s,
|
|
EXTRACT(EPOCH FROM (COALESCE(s.ended_at, now()) - s.started_at))
|
|
) AS duration_s_current,
|
|
|
|
ROUND(
|
|
(
|
|
COALESCE(
|
|
s.duration_s,
|
|
EXTRACT(EPOCH FROM (COALESCE(s.ended_at, now()) - s.started_at))
|
|
) / 60.0
|
|
)::numeric,
|
|
2
|
|
) AS duration_min,
|
|
|
|
COALESCE(s.cost_eur, 0)::numeric AS cost_eur,
|
|
|
|
COALESCE(
|
|
to_jsonb(s) ->> 'cause_code',
|
|
to_jsonb(s) ->> 'stop_cause_code',
|
|
to_jsonb(s) ->> 'reason_code',
|
|
to_jsonb(c) ->> 'code',
|
|
to_jsonb(c) ->> 'cause_code',
|
|
CASE
|
|
WHEN s.classification_status = 'PENDING' THEN 'PENDIENTE'
|
|
ELSE 'SIN_CAUSA'
|
|
END
|
|
) AS cause_code,
|
|
|
|
COALESCE(
|
|
to_jsonb(s) ->> 'cause_name',
|
|
to_jsonb(s) ->> 'stop_cause_name',
|
|
to_jsonb(s) ->> 'reason_name',
|
|
to_jsonb(c) ->> 'name',
|
|
to_jsonb(c) ->> 'description',
|
|
to_jsonb(c) ->> 'label',
|
|
CASE
|
|
WHEN s.classification_status = 'PENDING' THEN 'Pendiente de clasificar'
|
|
ELSE 'Sin causa registrada'
|
|
END
|
|
) AS cause_name,
|
|
|
|
to_jsonb(s) ->> 'operator_note' AS operator_note,
|
|
to_jsonb(s) ->> 'classified_by' AS classified_by,
|
|
to_jsonb(s) ->> 'classified_at' AS classified_at,
|
|
to_jsonb(s) ->> 'order_ref' AS order_ref,
|
|
to_jsonb(s) ->> 'production_order' AS production_order,
|
|
|
|
CASE WHEN s.status = 'OPEN' THEN true ELSE false END AS is_open,
|
|
|
|
CASE
|
|
WHEN s.classification_status = 'PENDING' THEN true
|
|
ELSE false
|
|
END AS is_pending_classification,
|
|
|
|
CASE
|
|
WHEN s.status = 'OPEN' THEN 'ABIERTO'
|
|
WHEN s.classification_status = 'PENDING' THEN 'CERRADO SIN CLASIFICAR'
|
|
WHEN s.classification_status = 'CLASSIFIED' THEN 'CLASIFICADO'
|
|
ELSE COALESCE(s.status, 'SIN_ESTADO')
|
|
END AS stop_status_label,
|
|
|
|
CASE
|
|
WHEN s.status = 'OPEN' THEN 3
|
|
WHEN s.classification_status = 'PENDING' THEN 2
|
|
WHEN s.classification_status = 'CLASSIFIED' THEN 1
|
|
ELSE 0
|
|
END AS stop_priority_score
|
|
|
|
FROM mv_hot.edge_oee_machine_stops s
|
|
LEFT JOIN mv_hot.edge_oee_stop_causes c
|
|
ON (to_jsonb(c) ->> 'id') = COALESCE(
|
|
to_jsonb(s) ->> 'cause_id',
|
|
to_jsonb(s) ->> 'stop_cause_id',
|
|
to_jsonb(s) ->> 'reason_id'
|
|
);
|
|
|
|
GRANT SELECT ON mv_reports_ucepsa_demo.machine_stops_grafana TO grafana_ucepsa_ro;
|