# Algorithm 10. Agglomeration: Overall Compliance ## Overview Overall compliance of an agglomeration based on the compliance results of **Articles 3, 4, 5, and 6**. This is a **hierarchical logic**, where certain conditions override others. ## Simplified Logic ### 1. Check for NULLs * Raises error if any article compliance is **NULL**. ### 2. Check for unknown (?) * → Overall compliance = **?** * (`exit_leaf = 10-01`) ### 3. If any Article = NC * → Overall compliance = **NC** * (`exit_leaf = 10-02`) ### 4. If Article 3 = NR * → Overall compliance = **NR** * (`exit_leaf = 10-03`) ### 5. If Article 3 = PD * → Overall compliance = **PD** * (`exit_leaf = 10-04`) ### 6. If Article 3 not in (C, QC) * → Overall compliance = **?** * (`exit_leaf = 10-05`) ### 7. If `aggGenerated < 10,000` & at least one plant with appropriate treatment * → **C** * (`exit_leaf = 10-06`) ### 8. If Article 6 = C or PD * → Overall compliance = **C** * (`exit_leaf = 10-07`) ### 9. If Article 4 = C, PD, or NR * → Overall compliance = **C** * (`exit_leaf = 10-08`) ### 10. Otherwise * → Overall compliance = **NR** * (`exit_leaf = 10-09`) ## Decision Tree ```{mermaid} graph TB ROOT["Compliance Article 3 = ? or
Compliance Article 4 = ? or
Compliance Article 5 = ? or
Compliance Article 6 = ?"] ROOT --> Y1((YES)) --- C_Q1["Compliance agglomeration =?"] C_Q1 -.- ID01(["10-01"]) ROOT --> N1((NO)) --- COND_NC["Compliance Article 3 = NC or
Compliance Article 4 = NC or
Compliance Article 5 = NC or
Compliance Article 6 = NC"] COND_NC --- Y2((YES)) --- C_NC["Compliance agglomeration = NC"] C_NC -.- ID02(["10-02"]) COND_NC --- N2((NO)) --- COND_NR["(Compliance Article 3 = NR and
Compliance Article 4 = NR and
Compliance Article 5 = NR and
Compliance Article 6 = NR) or
Compliance Article 3 =NR"] COND_NR --- Y3((YES)) --- C_NR1["Compliance agglomeration = NR"] C_NR1 -.- ID03(["10-03"]) COND_NR --- N3((NO)) --- COND_PD["Compliance Article 3 = PD"] COND_PD --- Y4((YES)) --- C_PD["Compliance agglomeration = PD"] C_PD -.- ID04(["10-04"]) COND_PD --- N4((NO)) --- COND_CQC["Compliance Article 3 = C or QC"] COND_CQC --- N5((NO)) --- C_Q2["Compliance agglomeration = ?"] C_Q2 -.- ID05(["10-05"]) COND_CQC --- Y5((YES)) --- COND_LOAD["Agglomeration generated load < 10,000p.e
and treatment required = appropriate"] COND_LOAD --- Y6((YES)) --- C_C1["Compliance agglomeration = C"] C_C1 -.- ID06(["10-06"]) COND_LOAD --- N6((NO)) --- COND_ART6["Compliance Article 6 = C or PD"] COND_ART6 --- Y7((YES)) --- C_C2["Compliance agglomeration = C"] C_C2 -.- ID07(["10-07"]) COND_ART6 --- N7((NO)) --- COND_ART4["Compliance Article 4 = C or PD or NR"] COND_ART4 --- Y8((YES)) --- C_C3["Compliance agglomeration = C"] C_C3 -.- ID08(["10-08"]) COND_ART4 --- N8((NO)) --- C_NR2["Compliance agglomeration = NR"] C_NR2 -.- ID09(["10-09"]) %% Styles classDef reference stroke:#00a2ff,color:#00a2ff; classDef yesBox fill:#4CAF50,color:white,stroke:#2E7D32; classDef noBox fill:#F44336,color:white,stroke:#C62828; %% Class Assignments class ID01,ID02,ID03,ID04,ID05,ID06,ID07,ID08,ID09 reference; class Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8 yesBox; class N1,N2,N3,N4,N5,N6,N7,N8 noBox; ``` ## Pseudocode ```{dropdown} Show python code ```python # Unknown compliance if "?" in (art3, art4, art5, art6): return "?", "10-01" # If any NC if "NC" in (art3, art4, art5, art6): return "NC", "10-02" # Hierarchical checks if art3 == "NR": return "NR", "10-03" elif art3 == "PD": return "PD", "10-04" elif art3 not in ("C", "QC"): return "?", "10-05" elif aggGenerated < 10000 and np_treat_appropriate > 0: return "C", "10-06" elif art6 in ("C", "PD"): return "C", "10-07" elif art4 in ("C", "PD", "NR"): return "C", "10-08" else: return "NR", "10-09" ```