=== Report 1: Data subject requests: monthly volume, closure time, and overdue backlog (written by Bea) === Engineer's note: Platform-wide monthly report, 36 rows (2023-01 through 2025-12), exactly as specified; median days to close computed as fractional days (EPOCH/86400) rounded to 1 decimal, null for months with zero completions. REPORT: Data subject requests: monthly volume, closure time, and overdue backlog QUESTION: How many access/erasure/portability/rectification/restriction requests are we receiving each month, how long do they typically take to close, and how many are overdue or still open? month | requests_received | access_requests_received | erasure_requests_received | portability_requests_received | rectification_restriction_requests_recei | completed_count | median_days_to_close | still_open_count | overdue_count --------+-------------------+--------------------------+---------------------------+-------------------------------+------------------------------------------+-----------------+----------------------+------------------+-------------- 2023-01 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2023-02 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2023-03 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2023-04 | 1 | 0 | 1 | 0 | 0 | 1 | 29.0 | 0 | 0 2023-05 | 3 | 2 | 1 | 0 | 0 | 2 | 22.3 | 1 | 1 2023-06 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2023-07 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2023-08 | 1 | 0 | 1 | 0 | 0 | 1 | 5.9 | 0 | 0 2023-09 | 2 | 1 | 0 | 0 | 1 | 2 | 27.0 | 0 | 0 2023-10 | 1 | 0 | 1 | 0 | 0 | 1 | 11.3 | 0 | 0 2023-11 | 1 | 0 | 1 | 0 | 0 | 1 | 9.7 | 0 | 0 2023-12 | 1 | 0 | 0 | 0 | 1 | 1 | 7.8 | 0 | 0 2024-01 | 1 | 0 | 1 | 0 | 0 | 1 | 3.5 | 0 | 0 2024-02 | 3 | 0 | 3 | 0 | 0 | 3 | 5.8 | 0 | 0 2024-03 | 2 | 1 | 1 | 0 | 0 | 2 | 12.1 | 0 | 0 2024-04 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2024-05 | 3 | 0 | 3 | 0 | 0 | 3 | 9.8 | 0 | 0 2024-06 | 4 | 1 | 2 | 0 | 1 | 4 | 5.0 | 0 | 0 2024-07 | 1 | 0 | 1 | 0 | 0 | 0 | NULL | 1 | 1 2024-08 | 2 | 0 | 2 | 0 | 0 | 2 | 15.6 | 0 | 0 2024-09 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2024-10 | 1 | 0 | 1 | 0 | 0 | 1 | 7.5 | 0 | 0 2024-11 | 4 | 0 | 4 | 0 | 0 | 4 | 9.5 | 0 | 0 2024-12 | 2 | 0 | 2 | 0 | 0 | 2 | 10.6 | 0 | 0 2025-01 | 3 | 1 | 2 | 0 | 0 | 3 | 5.4 | 0 | 0 2025-02 | 1 | 1 | 0 | 0 | 0 | 1 | 5.1 | 0 | 0 2025-03 | 2 | 1 | 1 | 0 | 0 | 1 | 15.8 | 1 | 1 2025-04 | 1 | 0 | 1 | 0 | 0 | 1 | 19.8 | 0 | 0 2025-05 | 1 | 0 | 1 | 0 | 0 | 1 | 17.2 | 0 | 0 2025-06 | 1 | 0 | 1 | 0 | 0 | 1 | 14.8 | 0 | 0 2025-07 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2025-08 | 1 | 0 | 1 | 0 | 0 | 1 | 3.1 | 0 | 0 2025-09 | 2 | 1 | 1 | 0 | 0 | 2 | 7.9 | 0 | 0 2025-10 | 1 | 0 | 1 | 0 | 0 | 1 | 23.1 | 0 | 0 2025-11 | 0 | 0 | 0 | 0 | 0 | 0 | NULL | 0 | 0 2025-12 | 2 | 1 | 1 | 0 | 0 | 0 | NULL | 2 | 0 (36 rows) === Report 2: Consent trend by purpose and month: grants, withdrawals, and net opt-in rate (written by Felix) === Engineer's note: Active opt-in rate is left NULL for any (purpose, month) with zero users-with-any-record as of month end, since the ratio is undefined there; all other logic follows the request exactly (purposes taken from distinct consent_records.purpose, months 2023-01..2025-12 from calendar_days). REPORT: Consent trend by purpose and month: grants, withdrawals, and net opt-in rate QUESTION: How has the mix of granted vs. withdrawn vs. never-given consent changed over time, by purpose? purpose | month | grants_recorded | withdrawals_recorded | expirations_recorded | users_with_any_record | net_active_optins | active_optin_rate_pct ------------------+---------+-----------------+----------------------+----------------------+-----------------------+-------------------+---------------------- analytics_cookies | 2023-01 | 128 | 0 | 0 | 1199 | 1199 | 100.0 analytics_cookies | 2023-02 | 118 | 0 | 0 | 1317 | 1317 | 100.0 analytics_cookies | 2023-03 | 135 | 0 | 0 | 1452 | 1452 | 100.0 analytics_cookies | 2023-04 | 146 | 0 | 0 | 1598 | 1598 | 100.0 analytics_cookies | 2023-05 | 128 | 0 | 0 | 1726 | 1726 | 100.0 analytics_cookies | 2023-06 | 106 | 0 | 0 | 1832 | 1832 | 100.0 analytics_cookies | 2023-07 | 130 | 0 | 0 | 1962 | 1962 | 100.0 analytics_cookies | 2023-08 | 151 | 0 | 0 | 2113 | 2113 | 100.0 analytics_cookies | 2023-09 | 133 | 0 | 0 | 2246 | 2246 | 100.0 analytics_cookies | 2023-10 | 154 | 0 | 0 | 2400 | 2400 | 100.0 analytics_cookies | 2023-11 | 282 | 0 | 0 | 2682 | 2682 | 100.0 analytics_cookies | 2023-12 | 191 | 0 | 0 | 2873 | 2873 | 100.0 analytics_cookies | 2024-01 | 158 | 0 | 0 | 3031 | 3031 | 100.0 analytics_cookies | 2024-02 | 117 | 0 | 0 | 3148 | 3148 | 100.0 analytics_cookies | 2024-03 | 148 | 0 | 0 | 3296 | 3296 | 100.0 analytics_cookies | 2024-04 | 150 | 0 | 0 | 3446 | 3446 | 100.0 analytics_cookies | 2024-05 | 187 | 0 | 0 | 3633 | 3633 | 100.0 analytics_cookies | 2024-06 | 122 | 0 | 0 | 3755 | 3755 | 100.0 analytics_cookies | 2024-07 | 143 | 0 | 0 | 3898 | 3898 | 100.0 analytics_cookies | 2024-08 | 142 | 0 | 0 | 4040 | 4040 | 100.0 analytics_cookies | 2024-09 | 154 | 0 | 0 | 4194 | 4194 | 100.0 analytics_cookies | 2024-10 | 170 | 0 | 0 | 4364 | 4364 | 100.0 analytics_cookies | 2024-11 | 291 | 0 | 0 | 4655 | 4655 | 100.0 analytics_cookies | 2024-12 | 282 | 0 | 0 | 4937 | 4937 | 100.0 analytics_cookies | 2025-01 | 165 | 0 | 0 | 5102 | 5102 | 100.0 analytics_cookies | 2025-02 | 122 | 0 | 0 | 5224 | 5224 | 100.0 analytics_cookies | 2025-03 | 162 | 0 | 0 | 5386 | 5386 | 100.0 analytics_cookies | 2025-04 | 170 | 0 | 0 | 5556 | 5556 | 100.0 analytics_cookies | 2025-05 | 214 | 0 | 0 | 5770 | 5770 | 100.0 analytics_cookies | 2025-06 | 184 | 0 | 0 | 5954 | 5954 | 100.0 analytics_cookies | 2025-07 | 188 | 0 | 0 | 6142 | 6142 | 100.0 analytics_cookies | 2025-08 | 175 | 0 | 0 | 6317 | 6317 | 100.0 analytics_cookies | 2025-09 | 213 | 0 | 0 | 6530 | 6530 | 100.0 analytics_cookies | 2025-10 | 254 | 0 | 0 | 6784 | 6784 | 100.0 analytics_cookies | 2025-11 | 321 | 0 | 0 | 7105 | 7105 | 100.0 analytics_cookies | 2025-12 | 299 | 0 | 0 | 7404 | 7404 | 100.0 marketing_email | 2023-01 | 66 | 4 | 0 | 713 | 709 | 99.4 marketing_email | 2023-02 | 73 | 2 | 0 | 786 | 780 | 99.2 marketing_email | 2023-03 | 99 | 9 | 0 | 885 | 870 | 98.3 marketing_email | 2023-04 | 86 | 0 | 0 | 971 | 956 | 98.5 marketing_email | 2023-05 | 89 | 5 | 0 | 1060 | 1040 | 98.1 marketing_email | 2023-06 | 90 | 9 | 0 | 1150 | 1121 | 97.5 marketing_email | 2023-07 | 76 | 7 | 0 | 1226 | 1190 | 97.1 marketing_email | 2023-08 | 77 | 8 | 0 | 1303 | 1259 | 96.6 marketing_email | 2023-09 | 83 | 6 | 0 | 1386 | 1336 | 96.4 marketing_email | 2023-10 | 98 | 13 | 0 | 1484 | 1421 | 95.8 marketing_email | 2023-11 | 170 | 7 | 0 | 1654 | 1584 | 95.8 marketing_email | 2023-12 | 149 | 17 | 0 | 1803 | 1716 | 95.2 marketing_email | 2024-01 | 86 | 12 | 0 | 1889 | 1790 | 94.8 marketing_email | 2024-02 | 66 | 10 | 0 | 1955 | 1846 | 94.4 (72 rows, first 50 printed) === Report 3: Compliance events: monthly volume and resolution time by severity (written by Omar) === Engineer's note: Platform-wide (no tenant filter) as requested. median_days_to_resolve is computed as the median of (resolved_at - occurred_at) in fractional days over resolved=true rows only; months/severities with zero resolved incidents will show a null median rather than zero. REPORT: Compliance events: monthly volume and resolution time by severity QUESTION: How many compliance incidents are being flagged each month by severity, how quickly are they resolved, and is an unresolved backlog building up? month | severity | incidents_detected | resolved_count | unresolved_count | median_days_to_resolve | unresolved_over_30d --------+----------+--------------------+----------------+------------------+------------------------+-------------------- 2023-06 | medium | 1 | 1 | 0 | 3.7 | 0 2023-10 | medium | 1 | 1 | 0 | 18.1 | 0 2024-03 | medium | 1 | 1 | 0 | 20.7 | 0 2025-02 | high | 3 | 3 | 0 | 9.6 | 0 2025-02 | medium | 1 | 1 | 0 | 29.2 | 0 2025-10 | high | 1 | 1 | 0 | 0.1 | 0 (6 rows)