muyu-apiserver/deploy/mysql/migrations/20260629_phase3_e2e_validation.sql

80 lines
3.4 KiB
MySQL
Raw Normal View History

-- End-to-End Validation Queries for Production Plan Collaboration
-- Run these after testing the full flow to verify data consistency
-- 1. Verify production plan exists and has correct structure
SELECT p.plan_id, p.plan_code, p.product_name, p.target_quantity,
p.completed_quantity, p.status,
ROUND(p.completed_quantity * 100.0 / NULLIF(p.target_quantity, 0), 1) as progress_pct
FROM pro_production_plan p
WHERE p.tenant_id = 'TEST_TENANT'
ORDER BY p.created_at DESC LIMIT 5;
-- 2. Verify yarn ratios sum to 100%
SELECT yr.plan_id,
COUNT(*) as ratio_count,
SUM(yr.ratio) as total_ratio,
CASE WHEN ABS(SUM(yr.ratio) - 1.0) < 0.01 THEN 'OK' ELSE 'MISMATCH' END as check_result
FROM pro_plan_yarn_ratio yr
GROUP BY yr.plan_id;
-- 3. Verify process steps — each plan should have exactly 5 steps
SELECT ps.plan_id,
COUNT(*) as step_count,
SUM(CASE WHEN ps.status = 2 THEN 1 ELSE 0 END) as completed_steps,
CASE WHEN COUNT(*) = 5 THEN 'OK' ELSE 'MISSING_STEPS' END as check_result
FROM pro_plan_process_step ps
GROUP BY ps.plan_id;
-- 4. Verify share link lifecycle
SELECT sl.short_code, sl.status, sl.click_count,
sl.expires_at, NOW() as current_time,
CASE WHEN sl.expires_at > NOW() THEN 'VALID' ELSE 'EXPIRED' END as expiry_check,
pf.factory_tenant_id
FROM pro_share_link sl
LEFT JOIN pro_plan_factory pf ON pf.plan_id = sl.plan_id
ORDER BY sl.created_at DESC LIMIT 5;
-- 5. CRITICAL: Verify data consistency — completed_quantity must equal SUM(inbound)
SELECT p.plan_id, p.plan_code,
p.completed_quantity as plan_completed,
COALESCE(SUM(ir.quantity), 0) as inbound_sum,
CASE
WHEN ABS(p.completed_quantity - COALESCE(SUM(ir.quantity), 0)) < 0.01 THEN 'CONSISTENT'
ELSE 'DRIFT_DETECTED'
END as consistency_check
FROM pro_production_plan p
LEFT JOIN pro_inbound_record ir ON ir.plan_id = p.plan_id
GROUP BY p.plan_id, p.plan_code, p.completed_quantity;
-- 6. Verify auto-completion: plans with completed_quantity >= target_quantity should be status=3
SELECT p.plan_id, p.plan_code,
p.target_quantity, p.completed_quantity, p.status,
CASE
WHEN p.completed_quantity >= p.target_quantity AND p.status != 3 THEN 'SHOULD_BE_COMPLETED'
WHEN p.completed_quantity < p.target_quantity AND p.status = 3 THEN 'PREMATURE_COMPLETION'
ELSE 'OK'
END as auto_complete_check
FROM pro_production_plan p
WHERE p.status IN (2, 3);
-- 7. Verify inventory logs match inbound records
SELECT ir.record_id, ir.quantity,
il.change_qty, il.ref_type, il.ref_id,
CASE
WHEN il.log_id IS NULL THEN 'MISSING_LOG'
WHEN ABS(ir.quantity - il.change_qty) < 0.01 THEN 'OK'
ELSE 'QUANTITY_MISMATCH'
END as log_check
FROM pro_inbound_record ir
LEFT JOIN inv_inventory_log il ON il.ref_id = ir.record_id AND il.ref_type = 'PRODUCTION';
-- 8. Summary report
SELECT
(SELECT COUNT(*) FROM pro_production_plan) as total_plans,
(SELECT COUNT(*) FROM pro_production_plan WHERE status = 3) as completed_plans,
(SELECT COUNT(*) FROM pro_share_link) as total_links,
(SELECT COUNT(*) FROM pro_share_link WHERE status = 2) as confirmed_links,
(SELECT COUNT(*) FROM pro_inbound_record) as total_inbound_records,
(SELECT COALESCE(SUM(quantity), 0) FROM pro_inbound_record) as total_inbound_meters,
(SELECT COUNT(*) FROM inv_inventory_log WHERE ref_type = 'PRODUCTION') as production_inv_logs;