Algorithm 3. UWWTD: Treatment and Performance Compliance (Correction for Transitional Period)#
Overview#
This is the transitional period correction step. It takes the output of Algorithm 2 (treatment/performance compliance) and adjusts it depending on deadlines in the 1991 UWWTD:
Article 4 → requires secondary treatment.
Article 5 → requires more stringent treatment (nutrients or advanced).
Some countries had derogations/delays. If the reporting date (repSituationAt) is before the legal deadline, then a non-compliant plant may temporarily be classified as “Pending Deadline (PD)” instead of “Non-Compliant”.
Algorithm 3’s role is to take compliance from Algorithm 2 and adjust it to C / NC / PD, depending on deadlines and minimal checks.
Simplified Logic#
1. If required = “Appropriate”#
Deadline of Article 4 passed or unknown →
compliance = result from Algorithm 2
(
alg3_exit_leaf = 03-01)
Deadline of Article 4 not yet passed →
compliance = PD
(
alg3_exit_leaf = 03-02)
2. If required = primary, secondary, or more stringent#
Deadline of Article 4 passed or unknown → check Article 5 deadline:
Deadline of Article 5 passed or unknown →
compliance = result from Algorithm 2
(
alg3_exit_leaf = 03-04)
Deadline of Article 5 not yet passed → check plant treatment:
Secondary treatment present and COD & BOD5 pass →
compliance = C
(
alg3_exit_leaf = 03-05)
Otherwise →
compliance = NC
(
alg3_exit_leaf = 03-06)
Deadline of Article 4 not yet passed →
compliance = PD
(
alg3_exit_leaf = 03-03)
Decision Tree#
graph TB
ROOT(["RESULTS: Algorithm n°2"])
ROOT --> L1["If required=appropriate check date article 4: if = null OR if deadline is before or equal reporting reference date."]
ROOT --> M1["If required=primary or secondary check date article 4: if = null OR if deadline is before or equal reporting reference date."]
ROOT --> R1["if required= more stringent, check date article 4: if = null OR if deadline is before or equal reporting reference date."]
%% Left Branch
L1 --- Y1((YES)) --- L_YES["compliance = result of algorithm n°2"]
L_YES -.- ID01(["03-01"])
L1 --- N1((NO)) --- L_NO["compliance = PD"]
L_NO -.- ID02(["03-02"])
%% Middle Branch
M1 --- N2((NO)) --- M_NO["Compliance = PD"]
M_NO -.- ID03A(["03-03"])
M1 --- Y2((YES)) --- A5_CHECK["check date article 5: if = null OR if deadline is before or equal reporting reference date."]
%% Right Branch
R1 --- Y3((YES)) --- A5_CHECK
R1 --- N3((NO)) --- R_NO["Compliance = PD"]
R_NO -.- ID03B(["03-03"])
%% Article 5 Check
A5_CHECK --- Y4((YES)) --- A5_YES["compliance = result of algorithm n°2"]
A5_YES -.- ID04(["03-04"])
A5_CHECK --- N4((NO)) --- A5_NO["If secondary treatment in place AND if COD and BOD5 performance = pass"]
%% A5_NO branch
A5_NO --- Y5((YES)) --- N6["Compliance = C"] -.- ID05(["03-05"])
A5_NO --- N5((NO)) --- N7["Compliance = NC"] -.- ID06(["03-06"])
%% 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,ID03A,ID03B,ID04,ID05,ID06 reference;
class Y1,Y2,Y3,Y4,Y5 yesBox;
class N1,N2,N3,N4,N5 noBox;
Pseudocode#
Show python code
# --- Case 1: Required = Appropriate ---
if required == "Appropriate":
if deadline_art4 is None or deadline_art4 <= rep_date:
log("Deadline art.4 passed, required=Appropriate → Compliance = Algorithm 2 result")
alg3_exit_leaf = "03-01"
# compliance stays = compliance_alg2
else:
log("Deadline art.4 not yet reached, required=Appropriate → Compliance = PD")
compliance_alg2 = "PD"
alg3_exit_leaf = "03-02"
# --- Case 2: Required = Primary / Secondary / More stringent ---
elif required in [
"Primary",
"Secondary",
"(aN)",
"(aN+aP)",
"(aN+aP+c)",
"(aN+c)",
"(aP)",
"(aP+b)",
"(aP+b+c)",
"(aP+c)",
"(b)",
"(b+c)",
"(c)",
"(nitrogen)",
"(nitrogen+other)",
"(nitrogen+phosphorus)",
"(nitrogen+phosphorus+other)",
"(other)",
"(phosphorus)",
"(phosphorus+other)"
]:
if deadline_art4 is None or deadline_art4 <= rep_date:
log("Deadline art.4 passed → check art.5 deadline")
if deadline_art5 is None or deadline_art5 <= rep_date:
log("Deadline art.5 passed → Compliance = Algorithm 2 result")
alg3_exit_leaf = "03-04"
else:
log("Deadline art.5 not passed → check secondary treatment + COD + BOD5")
if has_secondary and bod5_perf == "P" and cod_perf == "P":
log("Secondary present & COD+BOD5 passed → Compliance = C")
compliance_alg2 = "C"
alg3_exit_leaf = "03-05"
else:
log("Secondary missing or COD/BOD5 failed → Compliance = NC")
compliance_alg2 = "NC"
alg3_exit_leaf = "03-06"
else:
log("Deadline art.4 not yet reached → Compliance = PD")
compliance_alg2 = "PD"
alg3_exit_leaf = "03-03"