From 691e6923b2419c5bee1541879cbf0bc6034f9132 Mon Sep 17 00:00:00 2001 From: Lounes Date: Sat, 12 Apr 2025 01:32:32 +0200 Subject: [PATCH 1/6] feat: use new file GF pfas udi dernier --- .../intermediate/pfas/_int__pfas_models.yml | 7 +-- .../pfas/int__resultats_pfas_udi_dernier.sql | 62 ++++++------------- 2 files changed, 20 insertions(+), 49 deletions(-) diff --git a/dbt_/models/intermediate/pfas/_int__pfas_models.yml b/dbt_/models/intermediate/pfas/_int__pfas_models.yml index 7a80750a..a10a3df0 100644 --- a/dbt_/models/intermediate/pfas/_int__pfas_models.yml +++ b/dbt_/models/intermediate/pfas/_int__pfas_models.yml @@ -1,14 +1,9 @@ -version: 1 +version: 2 models: - name: int__resultats_pfas_udi_dernier description: "Résultats des derniers prélèvements pour les PFAS par UDI. Ce modèle sélectionne le dernier prélèvement pour chaque paramètre PFAS et agrège les résultats pour identifier les dépassements des seuils sanitaires." columns: - - name: referenceprel - description: "Référence unique du prélèvement." - tests: - - not_null - - name: cdreseau description: "Code de l'installation (UDI)." tests: diff --git a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql index 1b68133f..69302685 100644 --- a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql +++ b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql @@ -1,6 +1,13 @@ WITH latest_pfas_results AS ( SELECT - *, + cdreseau, + referenceprel, + categorie, + cdparametresiseeaux, + datetimeprel, + limite_qualite, + valeur_sanitaire_1, + valtraduite, ROW_NUMBER() OVER ( PARTITION BY cdreseau, cdparametresiseeaux ORDER BY datetimeprel DESC @@ -13,37 +20,12 @@ WITH latest_pfas_results AS ( CURRENT_DATE - datetimeprel < INTERVAL 1 YEAR ), -valeurs_sanitaires (cdparametresiseeaux, valeur_sanitaire) AS ( - SELECT * FROM ( - VALUES - ('PFOA', 0.075), - ('PFHPA', 0.075), - ('PFHXA', 960), - ('PFPEA', 960), - ('PFBA', 72), - ('PFBS', 240), - ('PFOS', 0.18), - ('PFHXS', 12) - -- TODO : vérifier unicité de cdparametresiseeaux - ) -), - -latest_pfas_results_with_valeurs_sanitaires AS ( - SELECT - r.*, - vs.valeur_sanitaire - FROM latest_pfas_results AS r - LEFT JOIN valeurs_sanitaires AS vs - ON r.cdparametresiseeaux = vs.cdparametresiseeaux - WHERE r.row_number = 1 -), - aggregated_results AS ( SELECT referenceprel, cdreseau, - MIN(datetimeprel) AS datetimeprel, COUNT(DISTINCT cdparametresiseeaux) AS nb_parametres, + MIN(datetimeprel) AS datetimeprel, -- La somme des 20 PFAS est disponible comme un paramètre (SPFAS) MAX( CASE WHEN cdparametresiseeaux = 'SPFAS' THEN valtraduite ELSE 0 END @@ -74,9 +56,9 @@ aggregated_results AS ( COUNT( DISTINCT CASE WHEN - valeur_sanitaire IS NOT NULL + valeur_sanitaire_1 IS NOT NULL AND valtraduite IS NOT NULL - AND valtraduite >= valeur_sanitaire + AND valtraduite >= valeur_sanitaire_1 THEN cdparametresiseeaux END ) AS nb_pfas_above_limit, @@ -85,24 +67,23 @@ aggregated_results AS ( WHEN valtraduite != 0 THEN cdparametresiseeaux END ) AS nb_quantified_params - FROM latest_pfas_results_with_valeurs_sanitaires + FROM latest_pfas_results + WHERE row_number = 1 -- On garde seulement le dernier prélèvement + -- pour chaquecouple cdreseau/referenceprel GROUP BY referenceprel, cdreseau HAVING - -- On vérifie que la somme des 20 PFAS est bien présente + -- On vérifie que la somme des 20 PFAS est bien présente (>95% des cas) is_20_pfas = 1 AND - -- On vérifie que la somme des 4 PFAS est bien présente + -- On vérifie que la somme des 4 PFAS est bien présente (>95% des cas) nb_4_pfas = 4 - -- TODO: On pourrait prendre essayer de prendre un autre prélèvement si - -- le dernier n'a pas les 20 PFAS et les 4 PFAS ) SELECT - referenceprel, cdreseau, 'pfas' AS categorie, - datetimeprel AS dernier_prel_datetime, 'dernier_prel' AS periode, + datetimeprel AS dernier_prel_datetime, nb_parametres, CASE WHEN @@ -113,6 +94,8 @@ SELECT THEN 'aucun_parametre_quantifie' WHEN sum_20_pfas < 0.1 AND sum_4_pfas < 0.02 + -- On laisse les valeurs 0.1 et 0.02 en dur car 0.02 n'est pas + -- dans le fichier de GF. Plus compréhensible comme ça THEN 'somme_20pfas_inf_0_1_et_4pfas_inf_0_02' WHEN sum_20_pfas < 0.1 AND sum_4_pfas >= 0.02 @@ -122,10 +105,3 @@ SELECT END AS resultat FROM aggregated_results ORDER BY datetimeprel DESC - -/* -Précisions importantes: - -J'ai choisi de mettre ≥ au lieu de > pour les valeurs seuils. -À confirmer avec GF. -*/ From 49f55d2a2fb35f6c04319d3ed27bf71866ffff24 Mon Sep 17 00:00:00 2001 From: Lounes Date: Sun, 13 Apr 2025 19:03:05 +0200 Subject: [PATCH 2/6] fix : changement fonction MAX pour 'datetimeprel' --- .../intermediate/pfas/int__resultats_pfas_udi_dernier.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql index 69302685..329df198 100644 --- a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql +++ b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql @@ -25,7 +25,7 @@ aggregated_results AS ( referenceprel, cdreseau, COUNT(DISTINCT cdparametresiseeaux) AS nb_parametres, - MIN(datetimeprel) AS datetimeprel, + MAX(datetimeprel) AS datetimeprel, -- La somme des 20 PFAS est disponible comme un paramètre (SPFAS) MAX( CASE WHEN cdparametresiseeaux = 'SPFAS' THEN valtraduite ELSE 0 END From 95f2df32c374c4a2ba19add1075b519bc8dcfc80 Mon Sep 17 00:00:00 2001 From: Lounes Date: Sun, 13 Apr 2025 22:50:17 +0200 Subject: [PATCH 3/6] =?UTF-8?q?fix=20:=20changement=20valeur=20resultat=20?= =?UTF-8?q?g=C3=A9n=C3=A9rique=20'sup=5Fvaleur=5Fsanitaire'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbt_/models/intermediate/pfas/_int__pfas_models.yml | 2 +- .../intermediate/pfas/int__resultats_pfas_udi_dernier.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dbt_/models/intermediate/pfas/_int__pfas_models.yml b/dbt_/models/intermediate/pfas/_int__pfas_models.yml index a10a3df0..4aad55ad 100644 --- a/dbt_/models/intermediate/pfas/_int__pfas_models.yml +++ b/dbt_/models/intermediate/pfas/_int__pfas_models.yml @@ -34,7 +34,7 @@ models: - "somme_20pfas_inf_0_1_et_4pfas_inf_0_02" - "somme_20pfas_inf_0_1_et_4pfas_sup_0_02" - "somme_20pfas_sup_0_1" - - "un_pfas_sup_valeur_sanitaire" + - "sup_valeur_sanitaire" - name: periode description: "Période d'analyse des prélèvements (ici, toujours 'dernier_prel')." diff --git a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql index 329df198..e088390b 100644 --- a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql +++ b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql @@ -88,7 +88,7 @@ SELECT CASE WHEN nb_pfas_above_limit > 0 - THEN 'un_pfas_sup_valeur_sanitaire' + THEN 'sup_valeur_sanitaire' WHEN nb_quantified_params = 0 THEN 'aucun_parametre_quantifie' From 02277e3d9e886634348dfa04fef8303bb2f4f0e4 Mon Sep 17 00:00:00 2001 From: Lounes Date: Tue, 15 Apr 2025 11:52:33 +0200 Subject: [PATCH 4/6] fix : changed 'aucun_parametre_quantifie' to 'non_quantifie' --- dbt_/models/intermediate/pfas/_int__pfas_models.yml | 2 +- .../intermediate/pfas/int__resultats_pfas_udi_dernier.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dbt_/models/intermediate/pfas/_int__pfas_models.yml b/dbt_/models/intermediate/pfas/_int__pfas_models.yml index 4aad55ad..c0842862 100644 --- a/dbt_/models/intermediate/pfas/_int__pfas_models.yml +++ b/dbt_/models/intermediate/pfas/_int__pfas_models.yml @@ -30,7 +30,7 @@ models: tests: - accepted_values: values: - - "aucun_parametre_quantifie" + - "non_quantifie" - "somme_20pfas_inf_0_1_et_4pfas_inf_0_02" - "somme_20pfas_inf_0_1_et_4pfas_sup_0_02" - "somme_20pfas_sup_0_1" diff --git a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql index e088390b..14f5090f 100644 --- a/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql +++ b/dbt_/models/intermediate/pfas/int__resultats_pfas_udi_dernier.sql @@ -91,7 +91,7 @@ SELECT THEN 'sup_valeur_sanitaire' WHEN nb_quantified_params = 0 - THEN 'aucun_parametre_quantifie' + THEN 'non_quantifie' WHEN sum_20_pfas < 0.1 AND sum_4_pfas < 0.02 -- On laisse les valeurs 0.1 et 0.02 en dur car 0.02 n'est pas From 3ad4dd354736ac992ac6409d4407f9ffbc61b39e Mon Sep 17 00:00:00 2001 From: Jeremy Greze Date: Tue, 15 Apr 2025 20:03:24 +0200 Subject: [PATCH 5/6] tests pfas --- dbt_/tests/test_pfas_results.sql | 29 +++++++++++++++++++ .../tests_int__resultats_pfas_udi_dernier.sql | 11 ------- 2 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 dbt_/tests/test_pfas_results.sql delete mode 100644 dbt_/tests/tests_int__resultats_pfas_udi_dernier.sql diff --git a/dbt_/tests/test_pfas_results.sql b/dbt_/tests/test_pfas_results.sql new file mode 100644 index 00000000..59dbf634 --- /dev/null +++ b/dbt_/tests/test_pfas_results.sql @@ -0,0 +1,29 @@ +SELECT * +FROM {{ ref('int__resultats_pfas_udi_dernier') }} +WHERE + ( + -- test n°1 + -- l'UDI 013001457 a un prélevement le 2025-02-19 09:58:00 + -- avec un dépassement de valeur sanitaire pour PFOS + cdreseau = '013001457' + AND dernier_prel_datetime = TIMESTAMP '2025-02-19 09:58:00' + AND resultat != 'sup_valeur_sanitaire' + ) + OR ( + -- test n°2 + cdreseau = '003000370' + AND dernier_prel_datetime = TIMESTAMP '2025-02-18 08:45:00' + AND resultat != 'non_quantifie' + ) + OR ( + -- test n°3 + cdreseau = '004001032' + AND dernier_prel_datetime = TIMESTAMP '2025-02-28 12:33:00' + AND resultat != 'somme_20pfas_inf_0_1_et_4pfas_inf_0_02' + ) + OR ( + -- test n°4 + cdreseau = '008000855' + AND dernier_prel_datetime = TIMESTAMP '2025-02-27 09:24:00' + AND resultat != 'sup_valeur_sanitaire' + ) diff --git a/dbt_/tests/tests_int__resultats_pfas_udi_dernier.sql b/dbt_/tests/tests_int__resultats_pfas_udi_dernier.sql deleted file mode 100644 index a7ef2f23..00000000 --- a/dbt_/tests/tests_int__resultats_pfas_udi_dernier.sql +++ /dev/null @@ -1,11 +0,0 @@ -SELECT * -FROM {{ ref('int__resultats_pfas_udi_dernier') }} -WHERE - ( - -- test n°1 - -- l'UDI 013001457 a un prélevement le 2025-01-21 09:40:00 - -- avec un dépassement de valeur sanitaire pour PFOS - cdreseau = '013001457' - AND dernier_prel_datetime = TIMESTAMP '2025-01-21 09:40:00' - AND resultat != 'un_pfas_sup_valeur_sanitaire' - ) From 61d6206107da9d6d9296812b52fd06b207dd27bf Mon Sep 17 00:00:00 2001 From: Jeremy Greze Date: Tue, 15 Apr 2025 20:04:38 +0200 Subject: [PATCH 6/6] update website values --- webapp/lib/polluants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/lib/polluants.ts b/webapp/lib/polluants.ts index 607c4a4a..8a4a10c6 100644 --- a/webapp/lib/polluants.ts +++ b/webapp/lib/polluants.ts @@ -94,7 +94,7 @@ export const availableCategories: ICategory[] = [ sourcesExposition: "Ustensiles de cuisine, emballages alimentaires, eau potable.", resultats: { - aucun_parametre_quantifie: { + non_quantifie: { label: "Aucun paramètre quantifié", couleur: "#75D3B4", couleurFond: "#75D3B4", @@ -121,7 +121,7 @@ export const availableCategories: ICategory[] = [ couleurFond: "#FBBD6C", picto: null, }, - un_pfas_sup_valeur_sanitaire: { + sup_valeur_sanitaire: { label: "Au moins un paramètre au-dessus de la limite sanitaire", couleur: "#FB726C", couleurFond: "#FB726C",