diff --git a/dbt_/models/intermediate/tous/_int__tous_models.yml b/dbt_/models/intermediate/tous/_int__tous_models.yml new file mode 100644 index 00000000..4d6fd749 --- /dev/null +++ b/dbt_/models/intermediate/tous/_int__tous_models.yml @@ -0,0 +1,42 @@ +version: 2 + +models: + - name: int__resultats_tous_udi_dernier + description: "Résultats des derniers prélèvements pour tous les polluants par UDI. Ce modèle sélectionne le dernier prélèvement pour chaque paramètre et agrège les résultats pour identifier les dépassements des seuils sanitaires et/ou règlementaires." + columns: + - name: cdreseau + description: "Code de l'installation (UDI)." + type: VARCHAR + tests: + - not_null + - unique + + - name: categorie + description: "Catégorie du paramètre analysé (ici, toujours 'tous')." + type: VARCHAR + + - name: periode + description: "Période d'analyse des prélèvements (ici, toujours 'dernier_prel')." + type: VARCHAR + + - name: dernier_prel_datetime + description: "Date et heure du dernier prélèvement pris en compte dans l'analyse." + type: TIMESTAMP + tests: + - not_null + - dbt_utils.expression_is_true: + expression: ">= CURRENT_DATE - INTERVAL 1 YEAR" + + - name: nb_parametres + description: "Nombre de paramètres analysés" + type: INTEGER + + - name: resultat + description: "Interprétation du résultat en fonction des seuils sanitaires et règlementaires." + type: VARCHAR + tests: + - accepted_values: + values: + - "inf_limites" + - "sup_limite_qualite" + - "sup_limite_sanitaire" diff --git a/dbt_/models/intermediate/tous/int__resultats_tous_udi_dernier.sql b/dbt_/models/intermediate/tous/int__resultats_tous_udi_dernier.sql new file mode 100644 index 00000000..6f142fa6 --- /dev/null +++ b/dbt_/models/intermediate/tous/int__resultats_tous_udi_dernier.sql @@ -0,0 +1,34 @@ +SELECT + cdreseau, + 'tous' AS categorie, + 'dernier_prel' AS periode, + MAX(dernier_prel_datetime) AS dernier_prel_datetime, + SUM(nb_parametres) AS nb_parametres, + CASE + WHEN BOOL_OR(resultat IN ( + 'sup_0_5', + 'sup_valeur_sanitaire', + 'sup_valeur_sanitaire_2' + )) THEN 'sup_limite_sanitaire' + + WHEN BOOL_OR(resultat IN ( + 'inf_limite_qualite_sup_0_1', + 'somme_20pfas_sup_0_1', + 'somme_20pfas_inf_0_1_et_4pfas_sup_0_02', + 'sup_limite_qualite' + )) THEN 'sup_limite_qualite' + + WHEN BOOL_AND(resultat IN ( + 'non_quantifie', + 'inf_valeur_sanitaire', + 'inf_limite_qualite', + 'somme_20pfas_inf_0_1_et_4pfas_inf_0_02', + 'inf_0_5' + )) THEN 'inf_limites' + + ELSE 'erreur' + END AS resultat + +FROM {{ ref('int__union_resultats_udi') }} +WHERE periode = 'dernier_prel' +GROUP BY cdreseau diff --git a/dbt_/models/website/_web__models.yml b/dbt_/models/website/_web__models.yml index 28fc0802..603f633f 100644 --- a/dbt_/models/website/_web__models.yml +++ b/dbt_/models/website/_web__models.yml @@ -47,6 +47,7 @@ models: - metabolite_chloridazone_desphenyl - metabolite_chloridazone_methyl_desphenyl - metabolite_atrazine_desethyl + - tous - name: resultat description: "Résultat qualitatif de l'analyse" type: VARCHAR @@ -115,6 +116,7 @@ models: - metabolite_chloridazone_desphenyl - metabolite_chloridazone_methyl_desphenyl - metabolite_atrazine_desethyl + - tous - name: resultat description: "Résultat qualitatif de l'analyse" type: VARCHAR diff --git a/dbt_/models/website/web__resultats_udi.sql b/dbt_/models/website/web__resultats_udi.sql index 04a09613..5ef56e51 100644 --- a/dbt_/models/website/web__resultats_udi.sql +++ b/dbt_/models/website/web__resultats_udi.sql @@ -21,7 +21,8 @@ categories AS ( 'metabolite_chlorothalonil_r471811', 'metabolite_chloridazone_desphenyl', 'metabolite_chloridazone_methyl_desphenyl', - 'metabolite_atrazine_desethyl' + 'metabolite_atrazine_desethyl', + 'tous' ]) AS categorie ), @@ -46,6 +47,35 @@ udi_periodes_categories AS ( periodes AS p CROSS JOIN categories +), + +-- Append results from 'tous' category (in another model to avoid circular dependency) +results AS ( + SELECT + cdreseau, + periode, + categorie, + resultat, + ratio, + dernier_prel_datetime, + dernier_prel_valeur, + nb_parametres, + nb_prelevements, + nb_sup_valeur_sanitaire + FROM {{ ref('int__union_resultats_udi') }} + UNION ALL + SELECT + cdreseau, + periode, + categorie, + resultat, + null AS ratio, + dernier_prel_datetime, + null AS dernier_prel_valeur, + nb_parametres, + null AS nb_prelevements, + null AS nb_sup_valeur_sanitaire + FROM {{ ref('int__resultats_tous_udi_dernier') }} ) -- Final output with all UDI-periodes-categories combinations @@ -64,7 +94,7 @@ SELECT FROM udi_periodes_categories AS upc LEFT JOIN - {{ ref('int__union_resultats_udi') }} AS r + results AS r ON upc.cdreseau = r.cdreseau AND upc.periode = r.periode diff --git a/dbt_/tests/test_tous_results.sql b/dbt_/tests/test_tous_results.sql new file mode 100644 index 00000000..f8a75c1c --- /dev/null +++ b/dbt_/tests/test_tous_results.sql @@ -0,0 +1,25 @@ +-- dernier relevé +SELECT + 'dernier_prel' AS periode, + cdreseau, + resultat +FROM + {{ ref('int__resultats_tous_udi_dernier') }} +WHERE + ( + cdreseau = '001000404' + AND dernier_prel_datetime = '2025-01-21 12:12:00' + AND resultat != 'sup_limite_qualite' + ) + OR + ( + cdreseau = '976003881' + AND dernier_prel_datetime = '2024-06-18 10:21:00' + AND resultat != 'inf_limites' + ) + OR + ( + cdreseau = '088002246' + AND dernier_prel_datetime = '2024-10-22 10:33:00' + AND resultat != 'sup_limite_sanitaire' + ) diff --git a/webapp/lib/polluants.ts b/webapp/lib/polluants.ts index cb329b70..f9bb5018 100644 --- a/webapp/lib/polluants.ts +++ b/webapp/lib/polluants.ts @@ -45,7 +45,7 @@ export interface ICategory { export const availableCategories: ICategory[] = [ { - id: "tous-polluants", + id: "tous", nomAffichage: "Tous polluants", disable: false, enfants: [], @@ -57,19 +57,19 @@ export const availableCategories: ICategory[] = [ regulation: "Directive cadre sur l'eau (DCE), Code de l'environnement.", sourcesExposition: "Eau potable, air, alimentation, sols contaminés.", resultats: { - aucun_depassement: { + inf_limites: { label: "Aucun dépassement des limites de qualité", couleur: "#B4E681", couleurFond: "#B4E681", picto: null, }, - limite_qualite: { + sup_limite_qualite: { label: "Au moins un dépassement des limites de qualité", couleur: "#F3903F", couleurFond: "#F3903F", picto: "warning", }, - limite_sanitaire: { + sup_limite_sanitaire: { label: "Au moins un dépassement des limites sanitaires", couleur: "#E93E3A", couleurFond: "#E93E3A",