3. 环境质量标准与排放标准的规则映射

超标预警规则要真正跑起来,第一步不是写判断语句,而是把标准文本翻译成机器能算的阈值。环境空气质量标准、地表水环境质量标准、污染物排放标准这三类文件,在规则设计中的角色并不相同:前两者回答“环境受体允许到什么程度”,后者回答“污染源允许排出多少”。预警规则的本质,是把这两类限值放到同一条数据链上,并明确每个阈值对应哪个监测对象、哪种统计口径、哪段时间窗口。

三类标准的角色分工

环境空气质量标准(以 GB 3095 为代表)规定的是保护人体健康和生态系统的浓度限值,按污染物、平均时间、功能区类别分档。例如 PM2.5 的日均二级限值为 75 μg/m³,年均二级限值为 35 μg/m³;SO₂ 的 1 小时平均二级限值为 500 μg/m³。注意同一污染物在不同平均时间下的限值差异极大,规则中若只写“PM2.5 超过 75 报警”,而不绑定“24 小时滑动平均”,就会把瞬时高值误判为日均超标。

地表水环境质量标准(以 GB 3838 为代表)按水域功能和保护目标划分为 Ⅰ—Ⅴ 类,限值随类别变化。例如 Ⅲ 类水 COD 限值 20 mg/L、氨氮 1.0 mg/L;Ⅳ 类水 COD 限值 30 mg/L、氨氮 1.5 mg/L。规则设计时必须先确定断面所属类别,再取对应限值,否则同一浓度在不同断面会得出相反结论。

污染物排放标准则面向排口,通常区分行业、排放去向和时段(如新建/现有企业)。以某行业水污染物排放标准为例,COD 直接排放限值可能为 80 mg/L,间接排放为 500 mg/L;大气污染物标准中颗粒物限值常以 mg/m³ 表示,并需按实测浓度折算为基准氧含量下的排放浓度。排放标准还常带“超标即违法”的刚性特征,因此其阈值在预警体系中一般作为红色告警线。

从限值到可计算阈值的四步转化

第一步,锁定适用条款。每条规则必须携带“标准编号 + 污染物 + 平均时间 + 类别/时段 + 限值”五元组。例如 GB3095-2012|PM2.5|24h|二级|75。缺少任一维度,阈值就不可复现。

第二步,确定统计口径。日均值用 24 小时滑动平均还是自然日均值,直接决定触发时刻。工程上常用滑动平均以提前发现趋势,但需在规则中写明窗口长度与最小有效数据量(如 24 小时内至少 20 个有效小时值)。

第三步,设置分级阈值。以限值为基准,向下取预警比例:黄色预警取限值的 80%,橙色取 90%,红色取 100%。对排放标准,红色即限值本身;对环境质量标准,可额外设置“接近限值”的提示级。分级系数应作为可配置参数,而非硬编码。

第四步,处理折算与修正。大气排放浓度需按基准氧含量折算:折算浓度 = 实测浓度 × (21 − 基准氧含量) / (21 − 实测氧含量)。若实测氧含量为 9%,基准氧含量为 6%,实测颗粒物 25 mg/m³,则折算浓度 = 25 × 15 / 12 = 31.25 mg/m³,此时才可与 30 mg/m³ 的限值比较。这一步若遗漏,规则会在高氧含量工况下系统性低估排放水平。

标准限值 → 规则阈值映射链 环境质量标准 GB 3095 空气 / GB 3838 地表水 按功能区/水质类别分档 受体浓度限值 污染物排放标准 行业 + 排放去向 + 时段 排口浓度/总量限值 需氧含量折算 五元组锁定 标准号 | 污染物 | 平均时间 类别/时段 | 限值 例:PM2.5|24h|二级|75 统计口径与折算处理 滑动平均窗口 24h / 最小有效数据量 氧含量折算 C折 = C实×(21−6)/(21−O₂) 类别/时段匹配 断面类别、企业时段 分级系数 80% / 90% / 100% 可计算阈值与判定条件 黄色预警 浓度 ≥ 限值 × 0.8 提示级,关注趋势 橙色预警 浓度 ≥ 限值 × 0.9 接近限值,准备处置 红色预警 浓度 ≥ 限值(或折算后) 超标,触发处置流程

一个可落地的规则配置示例

下面以某断面氨氮预警和某排口颗粒物预警为例,给出可直接写入规则引擎的配置结构。示例参数为教学假设,实际取值须以现行标准文本和当地功能区划为准。

rule_id: WQ_NH3N_Ⅲ_001
standard: GB3838-2002
pollutant: 氨氮
water_class: Ⅲ
limit_mgL: 1.0
statistic: 24h_sliding_mean
min_valid_hours: 20
levels:
  yellow: 0.80   # 0.80 mg/L
  orange: 0.90   # 0.90 mg/L
  red:    1.00   # 1.00 mg/L
compare: ">="

rule_id: AIR_PM_行业A_001
standard: 行业A大气污染物排放标准
pollutant: 颗粒物
limit_mg_m3: 30
oxygen_reference_pct: 6
statistic: 1h_mean
levels:
  yellow: 0.80
  orange: 0.90
  red:    1.00
preprocess: oxygen_correction

规则引擎执行时,先按 statistic 聚合原始监测值,再按 preprocess 做折算,最后逐级比较。以氨氮为例,若 24 小时滑动均值为 0.92 mg/L,则命中橙色(0.92 ≥ 0.90 且 < 1.00);若为 1.03 mg/L,则命中红色。以颗粒物为例,实测 25 mg/m³、氧含量 9%,折算后 31.25 mg/m³,超过 30 mg/m³,命中红色;若氧含量为 7%,折算为 25 × 15 / 14 ≈ 26.79 mg/m³,仅命中黄色(≥ 24)。同一实测值因工况不同得出不同等级,这正是折算环节必须前置的原因。

规则映射的验收标准不是“能报警”,而是“可复现”:给定同一组原始数据和同一份标准文本,任何人按规则配置都应得到相同的预警等级与触发时刻。建议为每条规则保留标准条款出处和版本号,标准修订时按版本切换,而不是直接改阈值。

常见映射陷阱

一是平均时间错配,用小时值直接对比日均限值,造成大量误报;二是类别缺失,未绑定水质类别或功能区,导致阈值取错档;三是遗漏折算,排放浓度未按基准氧含量修正;四是边界处理不一致,有的规则用“>”,有的用“≥”,应在规范中统一为“达到即触发”;五是标准版本混用,新旧标准限值并存时未标注生效日期。把这些维度固化进规则元数据,预警系统才能既灵敏又可信。