40-clients/ucepsa/edge-oee-demo/ops/validate_context_root_case_queue_v0310.sql
2026-07-20 17:28:10 +02:00

201 lines
4.6 KiB
SQL

\pset pager off
\echo '=== 1. Objetos v0.3.10 ==='
SELECT
to_regclass(
'mv_loss_intelligence.context_review_case_policies'
) AS policy_table,
to_regclass(
'mv_loss_intelligence.context_review_cases'
) AS cases_table,
to_regclass(
'mv_loss_intelligence.context_review_case_evidence'
) AS evidence_table,
to_regclass(
'mv_loss_intelligence.context_review_case_reviews'
) AS reviews_table,
to_regclass(
'mv_loss_intelligence.context_review_case_builder_state'
) AS state_table,
to_regclass(
'mv_reports_ucepsa_prod.li_context_review_case_history_v1'
) AS history_view,
to_regclass(
'mv_reports_ucepsa_prod.li_context_review_case_backlog_v1'
) AS backlog_view,
to_regclass(
'mv_reports_ucepsa_prod.li_context_review_case_evidence_v1'
) AS evidence_view,
to_regclass(
'mv_reports_ucepsa_prod.li_context_review_case_builder_health_v1'
) AS health_view,
to_regclass(
'mv_reports_ucepsa_prod.li_canonical_context_readiness_gate_v2'
) AS readiness_v2_view;
\echo '=== 2. Salud del constructor ==='
SELECT *
FROM
mv_reports_ucepsa_prod
.li_context_review_case_builder_health_v1;
\echo '=== 3. Evidencias no pertenecen a varios casos ==='
SELECT COUNT(*) AS evidence_link_duplicates
FROM (
SELECT
episode_id,
COUNT(*) AS n
FROM
mv_loss_intelligence.context_review_case_evidence
GROUP BY episode_id
HAVING COUNT(*) > 1
) duplicated;
\echo '=== 4. Episodios recientes con revisión no quedan sin caso ==='
SELECT COUNT(*) AS review_episodes_without_case
FROM
mv_reports_ucepsa_prod
.li_shopfloor_context_incident_history_v1 h
WHERE h.review_required
AND (
h.episode_status = 'OPEN'
OR h.first_seen_at >=
now() - interval '30 days'
)
AND NOT EXISTS (
SELECT 1
FROM
mv_loss_intelligence.context_review_case_evidence e
WHERE e.episode_id =
h.episode_id
);
\echo '=== 5. Conflicto 7/8/9 agrupado en un caso raíz ==='
SELECT
COUNT(
DISTINCT case_id
) AS root_case_count_7_8_9,
COUNT(*) AS evidence_count_7_8_9
FROM
mv_loss_intelligence.context_review_case_evidence
WHERE episode_id IN (
7,
8,
9
);
\echo '=== 6. Detalle del caso raíz 7/8/9 ==='
SELECT DISTINCT
c.case_id,
c.case_family,
c.machine_id,
c.case_title,
c.question_text,
c.case_status,
c.max_severity,
c.linked_evidence_count,
c.episode_ids,
c.production_orders,
c.odoo_workorder_ids,
c.review_owner,
c.review_status,
c.official_eligible
FROM
mv_reports_ucepsa_prod
.li_context_review_case_history_v1 c
JOIN
mv_loss_intelligence.context_review_case_evidence e
ON e.case_id =
c.case_id
WHERE e.episode_id IN (
7,
8,
9
);
\echo '=== 7. Backlog humano por caso raíz ==='
SELECT
backlog_rank,
case_id,
case_status,
max_severity,
machine_id,
case_title,
linked_evidence_count,
production_orders,
odoo_workorder_ids,
review_owner,
review_status,
question_text
FROM
mv_reports_ucepsa_prod
.li_context_review_case_backlog_v1
ORDER BY backlog_rank
LIMIT 50;
\echo '=== 8. Readiness v2 ==='
SELECT
machine_id,
pending_review_count
AS pending_episode_review_count,
pending_root_case_count,
pending_critical_root_case_count,
oldest_pending_root_case_hours,
builder_health_status,
technical_gate_pass,
review_gate_pass,
readiness_status,
next_action,
ready_for_official_ledger,
official_ledger_eligible
FROM
mv_reports_ucepsa_prod
.li_canonical_context_readiness_gate_v2
ORDER BY machine_id;
\echo '=== 9. READY v2 coherente ==='
SELECT COUNT(*) AS ready_v2_gate_mismatches
FROM
mv_reports_ucepsa_prod
.li_canonical_context_readiness_gate_v2
WHERE readiness_status =
'READY_FOR_CONTROLLED_SHADOW'
AND NOT (
technical_gate_pass
AND observation_gate_pass
AND review_gate_pass
AND coverage_gate_pass
);
\echo '=== 10. Nada oficial ==='
SELECT
(
SELECT COUNT(*)
FROM
mv_loss_intelligence.context_review_cases
WHERE official_eligible
) AS official_case_rows,
(
SELECT COUNT(*)
FROM
mv_reports_ucepsa_prod
.li_canonical_context_readiness_gate_v2
WHERE ready_for_official_ledger
OR official_ledger_eligible
) AS official_gate_rows,
(
SELECT COUNT(*)
FROM
mv_reports_ucepsa_prod.li_operator_stop_queue_v2
) AS official_operator_queue_rows;