325 lines
8.6 KiB
SQL
325 lines
8.6 KiB
SQL
-- ============================================================
|
|
-- 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 ===
|