refs #729: seed RDS carrier performance demo
This commit is contained in:
324
sql/source/postgres_hmm_carrier_performance_verify.sql
Normal file
324
sql/source/postgres_hmm_carrier_performance_verify.sql
Normal file
@@ -0,0 +1,324 @@
|
||||
-- ============================================================
|
||||
-- Verification for HMM demo carrier performance data.
|
||||
-- Redmine: #729
|
||||
-- ============================================================
|
||||
|
||||
\set ON_ERROR_STOP on
|
||||
\pset pager off
|
||||
\echo === HMM carrier performance demo: verification begin ===
|
||||
|
||||
DO $verify$
|
||||
DECLARE
|
||||
carrier_count INTEGER;
|
||||
performance_count INTEGER;
|
||||
invalid_month_count INTEGER;
|
||||
latest_month DATE;
|
||||
earliest_month DATE;
|
||||
wrong_series_count INTEGER;
|
||||
latest_risk_count INTEGER;
|
||||
wrong_trend_count INTEGER;
|
||||
reader_can_login BOOLEAN;
|
||||
BEGIN
|
||||
SELECT COUNT(*)
|
||||
INTO carrier_count
|
||||
FROM hmm_demo.carriers
|
||||
WHERE carrier_code BETWEEN 'C001' AND 'C008';
|
||||
|
||||
SELECT COUNT(*), MIN(performance_month), MAX(performance_month)
|
||||
INTO performance_count, earliest_month, latest_month
|
||||
FROM hmm_demo.carrier_monthly_performance
|
||||
WHERE carrier_code BETWEEN 'C001' AND 'C008'
|
||||
AND performance_month BETWEEN DATE '2025-02-01' AND DATE '2026-07-01';
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO invalid_month_count
|
||||
FROM hmm_demo.carrier_monthly_performance
|
||||
WHERE performance_month <> date_trunc('month', performance_month)::DATE;
|
||||
|
||||
SELECT COUNT(*)
|
||||
INTO wrong_series_count
|
||||
FROM (
|
||||
SELECT carrier_code, COUNT(*) AS month_count
|
||||
FROM hmm_demo.carrier_monthly_performance
|
||||
WHERE carrier_code BETWEEN 'C001' AND 'C008'
|
||||
AND performance_month BETWEEN DATE '2025-02-01' AND DATE '2026-07-01'
|
||||
GROUP BY carrier_code
|
||||
HAVING COUNT(*) <> 18
|
||||
) wrong_series;
|
||||
|
||||
SELECT COUNT(DISTINCT risk_level)
|
||||
INTO latest_risk_count
|
||||
FROM hmm_demo.carrier_performance_latest_v;
|
||||
|
||||
WITH boundaries AS (
|
||||
SELECT
|
||||
carrier_code,
|
||||
MAX(revenue_usd) FILTER (WHERE performance_month = DATE '2025-02-01')
|
||||
AS first_revenue,
|
||||
MAX(revenue_usd) FILTER (WHERE performance_month = DATE '2026-07-01')
|
||||
AS latest_revenue
|
||||
FROM hmm_demo.carrier_monthly_performance
|
||||
WHERE carrier_code BETWEEN 'C001' AND 'C008'
|
||||
GROUP BY carrier_code
|
||||
)
|
||||
SELECT COUNT(*)
|
||||
INTO wrong_trend_count
|
||||
FROM boundaries
|
||||
WHERE (carrier_code IN ('C001', 'C002', 'C003', 'C004', 'C007')
|
||||
AND latest_revenue <= first_revenue)
|
||||
OR (carrier_code IN ('C005', 'C006', 'C008')
|
||||
AND latest_revenue >= first_revenue);
|
||||
|
||||
SELECT rolcanlogin
|
||||
INTO reader_can_login
|
||||
FROM pg_roles
|
||||
WHERE rolname = 'hmm_federation_reader';
|
||||
|
||||
IF carrier_count <> 8 THEN
|
||||
RAISE EXCEPTION 'Expected 8 carriers, found %', carrier_count;
|
||||
END IF;
|
||||
IF performance_count <> 144 THEN
|
||||
RAISE EXCEPTION 'Expected 144 monthly performance rows, found %', performance_count;
|
||||
END IF;
|
||||
IF earliest_month <> DATE '2025-02-01' OR latest_month <> DATE '2026-07-01' THEN
|
||||
RAISE EXCEPTION 'Unexpected period: % through %', earliest_month, latest_month;
|
||||
END IF;
|
||||
IF invalid_month_count <> 0 OR wrong_series_count <> 0 THEN
|
||||
RAISE EXCEPTION
|
||||
'Invalid monthly series: invalid dates %, wrong carrier series %',
|
||||
invalid_month_count,
|
||||
wrong_series_count;
|
||||
END IF;
|
||||
IF latest_risk_count <> 3 THEN
|
||||
RAISE EXCEPTION 'Expected GREEN, AMBER, RED latest risks, found % levels',
|
||||
latest_risk_count;
|
||||
END IF;
|
||||
IF wrong_trend_count <> 0 THEN
|
||||
RAISE EXCEPTION 'Unexpected first-to-latest trend for % carriers', wrong_trend_count;
|
||||
END IF;
|
||||
IF reader_can_login IS DISTINCT FROM FALSE THEN
|
||||
RAISE EXCEPTION 'hmm_federation_reader must remain a NOLOGIN role';
|
||||
END IF;
|
||||
|
||||
IF NOT has_schema_privilege('hmm_federation_reader', 'hmm_demo', 'USAGE') THEN
|
||||
RAISE EXCEPTION 'hmm_federation_reader lacks schema USAGE';
|
||||
END IF;
|
||||
IF has_schema_privilege('hmm_federation_reader', 'hmm_demo', 'CREATE') THEN
|
||||
RAISE EXCEPTION 'hmm_federation_reader unexpectedly has schema CREATE';
|
||||
END IF;
|
||||
IF NOT has_table_privilege(
|
||||
'hmm_federation_reader',
|
||||
'hmm_demo.carrier_monthly_performance',
|
||||
'SELECT'
|
||||
) THEN
|
||||
RAISE EXCEPTION 'hmm_federation_reader lacks SELECT';
|
||||
END IF;
|
||||
IF has_table_privilege(
|
||||
'hmm_federation_reader',
|
||||
'hmm_demo.carrier_monthly_performance',
|
||||
'INSERT'
|
||||
) THEN
|
||||
RAISE EXCEPTION 'hmm_federation_reader unexpectedly has INSERT';
|
||||
END IF;
|
||||
END
|
||||
$verify$;
|
||||
|
||||
DO $constraint_tests$
|
||||
BEGIN
|
||||
BEGIN
|
||||
INSERT INTO hmm_demo.carrier_monthly_performance (
|
||||
carrier_code,
|
||||
performance_month,
|
||||
contracted_teu,
|
||||
shipped_teu,
|
||||
revenue_usd,
|
||||
gross_margin_usd,
|
||||
schedule_reliability_pct,
|
||||
vessel_utilization_pct,
|
||||
claim_rate_pct,
|
||||
yoy_growth_pct,
|
||||
risk_level,
|
||||
updated_at
|
||||
) VALUES (
|
||||
'C001',
|
||||
DATE '2026-07-02',
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
90,
|
||||
90,
|
||||
1,
|
||||
1,
|
||||
'GREEN',
|
||||
CURRENT_TIMESTAMP
|
||||
);
|
||||
RAISE EXCEPTION 'Month-first-day constraint did not reject invalid input';
|
||||
EXCEPTION
|
||||
WHEN check_violation THEN
|
||||
NULL;
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
INSERT INTO hmm_demo.carrier_monthly_performance (
|
||||
carrier_code,
|
||||
performance_month,
|
||||
contracted_teu,
|
||||
shipped_teu,
|
||||
revenue_usd,
|
||||
gross_margin_usd,
|
||||
schedule_reliability_pct,
|
||||
vessel_utilization_pct,
|
||||
claim_rate_pct,
|
||||
yoy_growth_pct,
|
||||
risk_level,
|
||||
updated_at
|
||||
) VALUES (
|
||||
'UNKNOWN',
|
||||
DATE '2026-08-01',
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
90,
|
||||
90,
|
||||
1,
|
||||
1,
|
||||
'GREEN',
|
||||
CURRENT_TIMESTAMP
|
||||
);
|
||||
RAISE EXCEPTION 'Foreign key constraint did not reject unknown carrier';
|
||||
EXCEPTION
|
||||
WHEN foreign_key_violation THEN
|
||||
NULL;
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
INSERT INTO hmm_demo.carrier_monthly_performance (
|
||||
carrier_code,
|
||||
performance_month,
|
||||
contracted_teu,
|
||||
shipped_teu,
|
||||
revenue_usd,
|
||||
gross_margin_usd,
|
||||
schedule_reliability_pct,
|
||||
vessel_utilization_pct,
|
||||
claim_rate_pct,
|
||||
yoy_growth_pct,
|
||||
risk_level,
|
||||
updated_at
|
||||
) VALUES (
|
||||
'C001',
|
||||
DATE '2026-08-01',
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
101,
|
||||
90,
|
||||
1,
|
||||
1,
|
||||
'GREEN',
|
||||
CURRENT_TIMESTAMP
|
||||
);
|
||||
RAISE EXCEPTION 'Percentage constraint did not reject invalid input';
|
||||
EXCEPTION
|
||||
WHEN check_violation THEN
|
||||
NULL;
|
||||
END;
|
||||
END
|
||||
$constraint_tests$;
|
||||
|
||||
\echo --- Row counts and period ---
|
||||
SELECT
|
||||
COUNT(DISTINCT carrier_code) AS carrier_count,
|
||||
COUNT(*) AS monthly_row_count,
|
||||
MIN(performance_month) AS first_month,
|
||||
MAX(performance_month) AS latest_month
|
||||
FROM hmm_demo.carrier_monthly_performance
|
||||
WHERE carrier_code BETWEEN 'C001' AND 'C008'
|
||||
AND performance_month BETWEEN DATE '2025-02-01' AND DATE '2026-07-01';
|
||||
|
||||
\echo --- Per-carrier series ---
|
||||
SELECT
|
||||
c.carrier_code,
|
||||
c.carrier_name,
|
||||
COUNT(p.*) AS month_count,
|
||||
MIN(p.performance_month) AS first_month,
|
||||
MAX(p.performance_month) AS latest_month
|
||||
FROM hmm_demo.carriers c
|
||||
JOIN hmm_demo.carrier_monthly_performance p
|
||||
ON p.carrier_code = c.carrier_code
|
||||
WHERE c.carrier_code BETWEEN 'C001' AND 'C008'
|
||||
GROUP BY c.carrier_code, c.carrier_name
|
||||
ORDER BY c.carrier_code;
|
||||
|
||||
\echo --- Latest KPI and risk distribution ---
|
||||
SELECT
|
||||
carrier_code,
|
||||
carrier_name,
|
||||
performance_month,
|
||||
shipped_teu,
|
||||
revenue_usd,
|
||||
gross_margin_usd,
|
||||
schedule_reliability_pct,
|
||||
claim_rate_pct,
|
||||
risk_level
|
||||
FROM hmm_demo.carrier_performance_latest_v
|
||||
ORDER BY carrier_code;
|
||||
|
||||
SELECT risk_level, COUNT(*) AS carrier_count
|
||||
FROM hmm_demo.carrier_performance_latest_v
|
||||
GROUP BY risk_level
|
||||
ORDER BY risk_level;
|
||||
|
||||
\echo --- First-to-latest revenue trend ---
|
||||
WITH boundaries AS (
|
||||
SELECT
|
||||
carrier_code,
|
||||
MAX(revenue_usd) FILTER (WHERE performance_month = DATE '2025-02-01') AS first_revenue,
|
||||
MAX(revenue_usd) FILTER (WHERE performance_month = DATE '2026-07-01') AS latest_revenue
|
||||
FROM hmm_demo.carrier_monthly_performance
|
||||
WHERE carrier_code BETWEEN 'C001' AND 'C008'
|
||||
GROUP BY carrier_code
|
||||
)
|
||||
SELECT
|
||||
carrier_code,
|
||||
first_revenue,
|
||||
latest_revenue,
|
||||
CASE
|
||||
WHEN latest_revenue > first_revenue THEN 'UP'
|
||||
WHEN latest_revenue < first_revenue THEN 'DOWN'
|
||||
ELSE 'FLAT'
|
||||
END AS trend
|
||||
FROM boundaries
|
||||
ORDER BY carrier_code;
|
||||
|
||||
\echo --- TLS session ---
|
||||
SELECT
|
||||
ssl,
|
||||
version AS tls_version,
|
||||
cipher,
|
||||
bits
|
||||
FROM pg_stat_ssl
|
||||
WHERE pid = pg_backend_pid();
|
||||
|
||||
\echo --- Read-only role privileges ---
|
||||
SELECT
|
||||
(SELECT NOT rolcanlogin
|
||||
FROM pg_roles
|
||||
WHERE rolname = 'hmm_federation_reader') AS no_login,
|
||||
has_schema_privilege('hmm_federation_reader', 'hmm_demo', 'USAGE') AS schema_usage,
|
||||
has_schema_privilege('hmm_federation_reader', 'hmm_demo', 'CREATE') AS schema_create,
|
||||
has_table_privilege(
|
||||
'hmm_federation_reader',
|
||||
'hmm_demo.carrier_monthly_performance',
|
||||
'SELECT'
|
||||
) AS can_select,
|
||||
has_table_privilege(
|
||||
'hmm_federation_reader',
|
||||
'hmm_demo.carrier_monthly_performance',
|
||||
'INSERT'
|
||||
) AS can_insert;
|
||||
|
||||
\echo === HMM carrier performance demo: verification complete ===
|
||||
Reference in New Issue
Block a user