Spaces:
Paused
Paused
| -- view_decision_temporal_trends v1.45 | |
| -- Fix: Add committee_referral_decisions pattern to capture =utskottet, utskottet, =utskott values | |
| -- Analysis: 7,049 records were falling into other_decisions instead of proper classification | |
| -- Pattern: UPPER(chamber) ~~ '%UTSKOTT%' catches =utskottet (6501), = utskottet (517), utskottet (12), =utskott (19) | |
| DROP VIEW IF EXISTS view_decision_temporal_trends CASCADE; | |
| CREATE VIEW view_decision_temporal_trends AS | |
| WITH daily_decisions AS ( | |
| SELECT | |
| dd.made_public_date AS decision_day, | |
| COUNT(*) AS daily_decisions, | |
| ROUND(100.0 * COUNT(*) FILTER ( | |
| WHERE UPPER(dpd.chamber) ~~ '%BIFALL%' | |
| OR UPPER(dpd.chamber) ~~ '%GODKÄNT%' | |
| OR UPPER(dpd.chamber) ~~ '%BIFALLA%' | |
| )::NUMERIC / NULLIF(COUNT(*), 0)::NUMERIC, 2) AS daily_approval_rate, | |
| COUNT(*) FILTER ( | |
| WHERE UPPER(dpd.chamber) ~~ '%BIFALL%' | |
| OR UPPER(dpd.chamber) ~~ '%GODKÄNT%' | |
| OR UPPER(dpd.chamber) ~~ '%BIFALLA%' | |
| ) AS approved_decisions, | |
| COUNT(*) FILTER ( | |
| WHERE UPPER(dpd.chamber) ~~ '%AVSLAG%' | |
| OR UPPER(dpd.chamber) ~~ '%AVSLÅ%' | |
| ) AS rejected_decisions, | |
| COUNT(*) FILTER ( | |
| WHERE UPPER(dpd.chamber) ~~ '%ÅTERFÖRVISNING%' | |
| OR UPPER(dpd.chamber) ~~ '%ÅTERFÖRVISA%' | |
| ) AS referred_back_decisions, | |
| -- NEW: Committee referral decisions (captures =utskottet, = utskottet, utskottet, =utskott) | |
| COUNT(*) FILTER ( | |
| WHERE UPPER(dpd.chamber) ~~ '%UTSKOTT%' | |
| AND UPPER(dpd.chamber) !~~ '%ÅTERFÖRVISNING%' | |
| ) AS committee_referral_decisions | |
| FROM document_proposal_data dpd | |
| JOIN document_proposal_container dpc ON dpc.proposal_document_proposal_c_0 = dpd.hjid | |
| JOIN document_status_container dsc ON dsc.document_proposal_document_s_0 = dpc.hjid | |
| JOIN document_data dd ON dd.id = dsc.document_document_status_con_0 | |
| WHERE dd.made_public_date IS NOT NULL | |
| AND dd.made_public_date >= CURRENT_DATE - INTERVAL '5 years' | |
| AND dpd.chamber IS NOT NULL | |
| AND LENGTH(dpd.chamber) >= 6 | |
| AND LENGTH(dpd.chamber) <= 29 | |
| GROUP BY dd.made_public_date | |
| ) | |
| SELECT | |
| decision_day, | |
| daily_decisions, | |
| daily_approval_rate, | |
| approved_decisions, | |
| rejected_decisions, | |
| referred_back_decisions, | |
| committee_referral_decisions, | |
| ROUND(AVG(daily_decisions) OVER (ORDER BY decision_day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW), 2) AS ma_7day_decisions, | |
| ROUND(AVG(daily_decisions) OVER (ORDER BY decision_day ROWS BETWEEN 29 PRECEDING AND CURRENT ROW), 2) AS ma_30day_decisions, | |
| ROUND(AVG(daily_decisions) OVER (ORDER BY decision_day ROWS BETWEEN 89 PRECEDING AND CURRENT ROW), 2) AS ma_90day_decisions, | |
| ROUND(AVG(daily_approval_rate) OVER (ORDER BY decision_day ROWS BETWEEN 29 PRECEDING AND CURRENT ROW), 2) AS ma_30day_approval_rate, | |
| LAG(daily_decisions, 365) OVER (ORDER BY decision_day) AS decisions_last_year, | |
| (daily_decisions - LAG(daily_decisions, 365) OVER (ORDER BY decision_day)) AS yoy_decisions_change, | |
| ROUND(100.0 * (daily_decisions - LAG(daily_decisions, 365) OVER (ORDER BY decision_day))::NUMERIC | |
| / NULLIF(LAG(daily_decisions, 365) OVER (ORDER BY decision_day), 0)::NUMERIC, 2) AS yoy_decisions_change_pct, | |
| EXTRACT(YEAR FROM decision_day) AS decision_year, | |
| EXTRACT(MONTH FROM decision_day) AS decision_month, | |
| EXTRACT(WEEK FROM decision_day) AS decision_week, | |
| EXTRACT(DOW FROM decision_day) AS decision_day_of_week, | |
| CASE | |
| WHEN EXTRACT(MONTH FROM decision_day) IN (7, 8) THEN 'Summer Recess' | |
| WHEN EXTRACT(MONTH FROM decision_day) IN (12, 1) THEN 'Winter Recess' | |
| WHEN EXTRACT(MONTH FROM decision_day) IN (2, 3) THEN 'Spring Session' | |
| WHEN EXTRACT(MONTH FROM decision_day) IN (9, 10, 11) THEN 'Autumn Session' | |
| WHEN EXTRACT(MONTH FROM decision_day) IN (4, 5, 6) THEN 'Late Spring Session' | |
| ELSE 'Active Session' | |
| END AS parliamentary_period, | |
| 'Q' || EXTRACT(QUARTER FROM decision_day)::TEXT || ' ' || EXTRACT(YEAR FROM decision_day)::TEXT AS decision_quarter | |
| FROM daily_decisions | |
| ORDER BY decision_day DESC; | |