Skip to content

Commit 199390c

Browse files
authored
Nouvelles règles pour les nitrates (#185)
* update csv file with references * calculations for nitrates are now much simpler (following new specs) * update leng for nitrates * misc * forgot to remove this when cleaning in PR #184
1 parent 177a1a6 commit 199390c

8 files changed

+111
-308
lines changed

dbt_/models/intermediate/_int__models.yml

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,6 @@
11
version: 2
22

33
models:
4-
- name: int__mapping_category_simple
5-
description: "Liste des cdparametresiseeaux unique avec categorisation"
6-
columns:
7-
- name: cdparametresiseeaux
8-
description: >
9-
Le code SISE-Eaux du paramètre est un identifiant alphanumérique sur 7 positions maximum, associé à chaque
10-
paramètre. Lorsque c'est possible, le symbole chimique est retenu comme identifiant (NO3, AS...) pour le rendre
11-
signifiant.
12-
type: VARCHAR(10)
13-
tests:
14-
- unique
15-
- name: categorie
16-
description: "Catégorie du paramètre (pesticides, nitrate, etc.)"
17-
type: VARCHAR
18-
- name: nb_categorie
19-
description: Nombre unique categorie à cdparametresiseeaux - DOIT être égal à 1
20-
type: SMALLINT
21-
tests:
22-
- accepted_values:
23-
values: [1]
24-
254
- name: int__prelevements_uniques
265
description: "Liste des prélèvements unique"
276
columns:

dbt_/models/intermediate/nitrate/_int__nitrate_models.yaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,11 @@ models:
8181
- not_null
8282
- accepted_values:
8383
values:
84-
- inf_limite_qualite
85-
- sup_limite_qualite
84+
- non_quantifie
85+
- sup_valeur_sanitaire
86+
- inf_valeur_sanitaire
87+
- no3_inf_25
88+
- no3_inf_40
8689
- name: parametres_detectes
8790
description: "JSON contenant les paramètres détectés (valtraduite > 0) avec leurs valeurs correspondantes."
8891
type: JSON
Lines changed: 23 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,49 @@
11
WITH
2-
prels AS (
3-
SELECT
2+
nitrate_prels AS (
3+
-- Certains prélèvements ont plusieurs analyses pour la même substance
4+
-- Le SELECT DISTINCT ne dédoublonne pas ces cas là
5+
-- Donc il n'y a pas d'unicité sur referenceprel dans cetre requête
6+
SELECT DISTINCT
47
de_partition AS annee,
58
cdreseau,
69
referenceprel,
7-
MAX(datetimeprel) AS datetimeprel,
8-
COUNT(DISTINCT cdparametresiseeaux) AS nb_parametres,
9-
MAX(
10-
CASE
11-
WHEN
12-
cdparametresiseeaux = 'NO3'
13-
THEN valtraduite
14-
ELSE 0
15-
END
16-
) AS valtraduite_no3,
17-
MAX(
18-
CASE
19-
WHEN
20-
cdparametresiseeaux = 'NO2'
21-
THEN valtraduite
22-
ELSE 0
23-
END
24-
) AS valtraduite_no2,
25-
MAX(
26-
CASE
27-
WHEN
28-
cdparametresiseeaux = 'NO3_NO2'
29-
THEN valtraduite
30-
ELSE 0
31-
END
32-
) AS valtraduite_no3_no2
10+
datetimeprel,
11+
valeur_sanitaire_1,
12+
valtraduite
3313
FROM
3414
{{ ref('int__resultats_udi_communes') }}
3515
WHERE
3616
categorie = 'nitrate'
37-
GROUP BY
38-
annee,
39-
cdreseau,
40-
referenceprel
41-
),
42-
43-
valeur_ref AS (
44-
SELECT
45-
MAX(
46-
CASE
47-
WHEN
48-
cdparametresiseeaux = 'NO3'
49-
THEN limite_qualite
50-
END
51-
) AS limite_qualite_no3,
52-
MAX(
53-
CASE
54-
WHEN
55-
cdparametresiseeaux = 'NO3_NO2'
56-
THEN limite_qualite
57-
END
58-
) AS limite_qualite_no3_no2,
59-
MAX(
60-
CASE
61-
WHEN
62-
cdparametresiseeaux = 'NO2'
63-
THEN limite_qualite
64-
END
65-
) AS limite_qualite_no2
66-
FROM
67-
{{ ref('int__valeurs_de_reference') }}
68-
WHERE
69-
categorie_1 = 'nitrate'
17+
AND cdparametresiseeaux = 'NO3'
7018
)
7119

7220
SELECT
73-
prels.cdreseau,
74-
prels.annee,
21+
cdreseau,
22+
annee,
7523
'nitrate' AS categorie,
76-
'bilan_annuel_' || prels.annee AS periode,
77-
COUNT(
24+
'bilan_annuel_' || annee AS periode,
25+
count(
7826
DISTINCT
7927
CASE
8028
WHEN
81-
prels.valtraduite_no3 >= valeur_ref.limite_qualite_no3
82-
OR prels.valtraduite_no2 >= valeur_ref.limite_qualite_no2
83-
OR prels.valtraduite_no3_no2 >= valeur_ref.limite_qualite_no3_no2
84-
OR prels.valtraduite_no3 / 50 + prels.valtraduite_no2 / 3
85-
>= valeur_ref.limite_qualite_no3_no2
86-
THEN prels.referenceprel
29+
valtraduite IS NOT NULL AND valtraduite > valeur_sanitaire_1
30+
THEN referenceprel
8731
END
8832
) AS nb_depassements,
89-
COUNT(DISTINCT prels.referenceprel) AS nb_prelevements,
33+
count(DISTINCT referenceprel) AS nb_prelevements,
9034
(
91-
COUNT(
35+
count(
9236
DISTINCT
9337
CASE
9438
WHEN
95-
prels.valtraduite_no3 >= valeur_ref.limite_qualite_no3
96-
OR prels.valtraduite_no2 >= valeur_ref.limite_qualite_no2
97-
OR prels.valtraduite_no3_no2 >= valeur_ref.limite_qualite_no3_no2
98-
OR prels.valtraduite_no3 / 50 + prels.valtraduite_no2 / 3
99-
>= valeur_ref.limite_qualite_no3_no2
100-
THEN prels.referenceprel
39+
valtraduite IS NOT NULL AND valtraduite > valeur_sanitaire_1
40+
THEN referenceprel
10141
END
10242
)::float
10343
/
104-
COUNT(DISTINCT prels.referenceprel)::float
44+
count(DISTINCT referenceprel)::float
10545
) AS ratio
10646

107-
FROM prels
108-
CROSS JOIN valeur_ref
109-
GROUP BY prels.cdreseau, prels.annee
47+
FROM nitrate_prels
48+
49+
GROUP BY cdreseau, annee

dbt_/models/intermediate/nitrate/int__resultats_nitrate_udi_dernier.sql

Lines changed: 33 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -2,175 +2,58 @@ WITH
22
last_pvl AS (
33
SELECT
44
cdreseau,
5-
referenceprel,
5+
categorie,
6+
cdparametresiseeaux,
7+
valeur_sanitaire_1,
68
datetimeprel,
9+
valtraduite,
710
ROW_NUMBER()
811
OVER (
9-
PARTITION BY cdreseau
12+
PARTITION BY cdreseau, cdparametresiseeaux
1013
ORDER BY datetimeprel DESC
1114
)
1215
AS row_number
1316
FROM
1417
{{ ref('int__resultats_udi_communes') }}
1518
WHERE
1619
categorie = 'nitrate'
17-
AND cdparametresiseeaux = 'NO3'
18-
AND -- On garde les prélèvements de moins d'un an
20+
AND
21+
cdparametresiseeaux = 'NO3'
22+
AND
23+
-- On garde les prélèvements de moins d'un an
1924
CURRENT_DATE - datetimeprel < INTERVAL 1 YEAR
20-
AND valtraduite IS NOT NULL
25+
AND
2126
-- Cf cas cdreseau IN( '034005906') , referenceprel= 03400327764
22-
),
23-
24-
valeur_ref AS (
25-
SELECT
26-
MAX(
27-
CASE
28-
WHEN
29-
cdparametresiseeaux = 'NO3'
30-
THEN limite_qualite
31-
END
32-
) AS limite_qualite_no3,
33-
MAX(
34-
CASE
35-
WHEN
36-
cdparametresiseeaux = 'NO3_NO2'
37-
THEN limite_qualite
38-
END
39-
) AS limite_qualite_no3_no2,
40-
MAX(
41-
CASE
42-
WHEN
43-
cdparametresiseeaux = 'NO2'
44-
THEN limite_qualite
45-
END
46-
) AS limite_qualite_no2
47-
FROM
48-
{{ ref('int__valeurs_de_reference') }}
49-
WHERE
50-
categorie_1 = 'nitrate'
51-
),
52-
53-
split_nitrate AS (
54-
SELECT
55-
resultats.cdreseau,
56-
resultats.categorie,
57-
resultats.datetimeprel AS date_dernier_prel,
58-
COUNT(DISTINCT resultats.cdparametresiseeaux) AS nb_parametres,
59-
MAX(
60-
CASE
61-
WHEN
62-
resultats.cdparametresiseeaux = 'NO3'
63-
THEN resultats.valtraduite
64-
END
65-
) AS valtraduite_no3,
66-
MAX(
67-
CASE
68-
WHEN
69-
resultats.cdparametresiseeaux = 'NO2'
70-
THEN resultats.valtraduite
71-
END
72-
) AS valtraduite_no2,
73-
MAX(
74-
CASE
75-
WHEN
76-
resultats.cdparametresiseeaux = 'NO3_NO2'
77-
THEN resultats.valtraduite
78-
END
79-
) AS valtraduite_no3_no2
80-
FROM
81-
last_pvl
82-
LEFT JOIN
83-
{{ ref('int__resultats_udi_communes') }} AS resultats
84-
ON
85-
last_pvl.cdreseau = resultats.cdreseau
86-
AND last_pvl.referenceprel = resultats.referenceprel
87-
WHERE
88-
last_pvl.row_number = 1
89-
-- on ne veut que le dernier prélèvement
90-
AND resultats.categorie = 'nitrate'
91-
-- on ne veut que les résultats associé aux nitrates/nitrites
92-
GROUP BY
93-
resultats.cdreseau,
94-
resultats.categorie,
95-
resultats.datetimeprel
96-
),
97-
98-
split_nitrate_with_ref AS (
99-
SELECT
100-
split_nitrate.cdreseau,
101-
split_nitrate.categorie,
102-
split_nitrate.nb_parametres,
103-
split_nitrate.date_dernier_prel,
104-
valeur_ref.limite_qualite_no3,
105-
valeur_ref.limite_qualite_no2,
106-
valeur_ref.limite_qualite_no3_no2,
107-
split_nitrate.valtraduite_no3_no2,
108-
split_nitrate.valtraduite_no3,
109-
split_nitrate.valtraduite_no2
110-
FROM
111-
split_nitrate
112-
CROSS JOIN
113-
valeur_ref
27+
valtraduite IS NOT NULL
11428
)
11529

11630
SELECT
11731
cdreseau,
118-
categorie,
11932
'dernier_prel' AS periode,
120-
date_dernier_prel,
121-
nb_parametres,
33+
datetimeprel AS date_dernier_prel,
34+
1 AS nb_parametres,
35+
categorie,
12236
CASE
123-
WHEN -- Si nitrates (no3) et pas nitrites (no2)
124-
valtraduite_no2 IS NULL
125-
AND
126-
valtraduite_no3
127-
< limite_qualite_no3
128-
THEN 'inf_limite_qualite'
12937
WHEN
130-
valtraduite_no2 IS NULL
131-
AND
132-
valtraduite_no3
133-
>= limite_qualite_no3
134-
THEN 'sup_limite_qualite'
135-
WHEN -- Si nitrates (no3) ET nitrites (no2)
136-
valtraduite_no2 IS NOT NULL
137-
AND (
138-
valtraduite_no3
139-
>= limite_qualite_no3
140-
OR valtraduite_no2
141-
>= limite_qualite_no2
142-
OR COALESCE(
143-
valtraduite_no3_no2,
144-
(
145-
valtraduite_no3 / 50
146-
+ valtraduite_no2 / 3
147-
)
148-
)
149-
>= limite_qualite_no3_no2
150-
)
151-
THEN 'sup_limite_qualite'
38+
valtraduite = 0
39+
THEN 'non_quantifie'
15240
WHEN
153-
valtraduite_no2 IS NOT NULL
154-
AND valtraduite_no3
155-
< limite_qualite_no3
156-
AND valtraduite_no2
157-
< limite_qualite_no2
158-
AND COALESCE(
159-
valtraduite_no3_no2,
160-
(
161-
valtraduite_no3 / 50
162-
+ valtraduite_no2 / 3
163-
)
164-
)
165-
< limite_qualite_no3_no2
166-
THEN 'inf_limite_qualite'
167-
ELSE 'erreur'
41+
valtraduite > valeur_sanitaire_1
42+
THEN 'sup_valeur_sanitaire'
43+
WHEN
44+
valtraduite <= 25
45+
THEN 'no3_inf_25'
46+
WHEN
47+
valtraduite > 25 AND valtraduite <= 40
48+
THEN 'no3_inf_40'
49+
WHEN
50+
valtraduite > 40 AND valtraduite <= valeur_sanitaire_1
51+
THEN 'inf_valeur_sanitaire'
52+
ELSE 'error'
16853
END AS resultat,
169-
JSON_OBJECT(
170-
CASE WHEN valtraduite_no2 > 0 THEN 'NO2' END, valtraduite_no2,
171-
CASE WHEN valtraduite_no3 > 0 THEN 'NO3' END, valtraduite_no3,
172-
CASE WHEN valtraduite_no3_no2 > 0 THEN 'NO3_NO2' END, valtraduite_no3_no2
173-
) AS parametres_detectes
174-
54+
JSON_OBJECT(CASE WHEN valtraduite > 0 THEN cdparametresiseeaux END, valtraduite)
55+
AS parametres_detectes
17556
FROM
176-
split_nitrate_with_ref
57+
last_pvl
58+
WHERE
59+
row_number = 1

dbt_/models/intermediate/tous/int__resultats_tous_udi_dernier.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ SELECT
2525
'inf_limite_qualite_sup_0_1',
2626
'somme_20pfas_inf_0_1_et_4pfas_inf_0_02',
2727
'sup_limite_qualite_2036',
28-
'inf_0_5'
28+
'inf_0_5',
29+
'no3_inf_25',
30+
'no3_inf_40'
2931
)) THEN 'inf_limites'
3032

3133
ELSE 'erreur'

0 commit comments

Comments
 (0)