{# safe_numeric(col) Casts a string column to numeric, treating any non-numeric value as NULL. Handles all EES suppression codes (z, c, x, q, u, etc.) without needing an explicit list — any string that doesn't look like a number becomes NULL. A trailing percent sign is accepted: DfE's 2023/24 KS2 information file writes percentages as "34%" (audit C2). #} {% macro safe_numeric(col) -%} CASE WHEN {{ col }} ~ '^-?[0-9]+(\.[0-9]+)?%?$' THEN rtrim({{ col }}, '%')::numeric ELSE NULL END {%- endmacro %}