Skip to content

Conversation

20k-P
Copy link
Collaborator

@20k-P 20k-P commented Apr 3, 2025

Last prélèvement pour les nitrites

Les règles choisies/proposées

Si on a les 3 paramètres disponibles

  • Si Nitrates < 50 mg/L et nitrites < 0,5 mg/L et nitrate/50 + nitrites/3 < 1 mg/L --> CONFORME
  • Si Nitrates >= 50 mg/L et/ou nitrites >= 0,5 mg/L et/ou nitrate/50 + nitrites/3 >= 1 mg/L --> NON CONFORME

Si on n'a pas nitrate/50 + nitrites/3 mais qu'on a nitrate et nitrites

==> on le calcule et on applique comme ci-dessus

  • Si on n'a pas nitrate --> donnee_manquante
  • Si on n'a pas nitrites et que nitrate >= 50 mg/L --> NON CONFORME
  • Si on n'a pas nitrites et que nitrate < 50 mg/L --> donnee_manquant

Update 12/05/2025

Ajout d'une condition sur les dates de prélèvement/mesure

Les règles choisies

Si on a les 3 paramètres disponibles avec moins de 30 jours de différences

  • Si Nitrates < 50 mg/L et nitrites < 0,5 mg/L et nitrate/50 + nitrites/3 < 1 mg/L --> CONFORME
  • Si Nitrates >= 50 mg/L et/ou nitrites >= 0,5 mg/L et/ou nitrate/50 + nitrites/3 >= 1 mg/L --> NON CONFORME

Si on n'a pas nitrate/50 + nitrites/3 mais qu'on a nitrate et nitrites

==> on le calcule et on applique comme ci-dessus

  • Si on n'a pas nitrate (no3) --> donnee_manquante
  • Si on n'a pas nitrites (no2) et que nitrate >= 50 mg/L --> NON CONFORME
  • Si on n'a pas nitrites (no2) et que nitrate < 50 mg/L --> donnee_manquant

Update 14/05/2025

Les règles choisies

Pour le choix du dernier prélèvement (date et id) : on se réfère uniquement à nitrate (no3)
Mais on doit regarder ensuite toutes les données (no3/no2) des prélèvements sélectionnés

  • Si on n'a pas nitrate (no3) : pas de données dans la table. ca sera "pas recherché" sur le site
  • Si nitrates (no3) ET nitrites (no2)
    • Si Nitrates < 50 mg/L et nitrites < 0,5 mg/L et nitrate/50 + nitrites/3 < 1 mg/L --> inf_limite_qualite
    • Si Nitrates >= 50 mg/L et/ou nitrites >= 0,5 mg/L et/ou nitrate/50 + nitrites/3 >= 1 mg/L --> sup_limite_qualite
  • Si nitrates (no3) et pas nitrites (no2) :
    • Nitrates < 50 mg/L --> inf_limite_qualite
    • Si Nitrates >= 50 mg/L -> sup_limite_qualite

Summary by CodeRabbit

  • Améliorations
    • Ajustement du niveau de zoom à partir duquel l’épaisseur des contours de la carte commence à augmenter, pour une expérience visuelle plus fluide lors du zoom.

@20k-P 20k-P requested review from jereze and LounesAbd April 3, 2025 11:22
@20k-P 20k-P self-assigned this Apr 3, 2025
Copy link

coderabbitai bot commented Apr 3, 2025

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (2)
  • dbt_/models/intermediate/cvm/_int__cvm_models.yaml is excluded by none and included by none
  • dbt_/models/intermediate/nitrate/_int__nitrate_models.yaml is excluded by none and included by none

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

La modification ajuste le seuil de zoom auquel l’épaisseur de la bordure sur la carte commence à augmenter. Désormais, l’épaisseur reste à 0 pixel jusqu’au niveau de zoom 7 (au lieu de 6), puis elle s’interpole progressivement jusqu’à 2 pixels au niveau de zoom 20. Aucun changement n’a été apporté aux entités exportées ou publiques.

Changes

Fichier Résumé des modifications
webapp/components/PollutionMapBase.tsx Modification du seuil d’interpolation de l’épaisseur de la bordure dans la propriété "border-layer" : le zoom de départ passe de 6 à 7.

Sequence Diagram(s)

sequenceDiagram
    participant Utilisateur
    participant PollutionMapBase
    Utilisateur->>PollutionMapBase: Modifie le niveau de zoom
    PollutionMapBase->>PollutionMapBase: Calcule l’épaisseur de la bordure selon le zoom (0 px jusqu’à 7, interpolation jusqu’à 20)
    PollutionMapBase-->>Utilisateur: Affiche la carte avec la nouvelle épaisseur de bordure
Loading

Possibly related PRs

  • Add UDI borders #144 : Modifie également l’interpolation de l’épaisseur de la bordure selon le zoom dans le même fichier, suggérant des ajustements similaires du rendu des frontières sur la carte.

Poem

Sur la carte, la frontière attend,
Jusqu’au zoom sept, elle se fait discrète.
Puis doucement, elle s’éveille,
S’épaissit, trace sa merveille.
Merci aux bénévoles,
Pour ces pixels qui frôlent le sol !
🗺️✨


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@githubzey
Copy link
Collaborator

githubzey commented Apr 3, 2025

Bonjour @20k-P,
Merci pour le travail. Je vais m'inspirer de ton code.
Juste, il me semble qu'il y a encore une condition d'après le document de brief

Nitrates (en NO3)< 50 mg/L
Nitrites (en NO2)<=0,5 mg/L
nitrate/50 + nitrites/3 < 1 mg/L

split_nitrites.valtraduite_no3 <0.5 --> si j'ai bien compris cela doit être <50

Screenshot 2025-04-03 at 15 05 54

Copy link
Collaborator

@LounesAbd LounesAbd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello !

Après revue, j'ai aussi l'impression qu'il manque la condition pour le paramètre 'NO2' (Nitrites) dans le CTE 'split_nitrites'.

=> Ajouter MAX(CASE WHEN last_pvl.cdparametresiseeaux = 'NO2' THEN last_pvl.valtraduite END) AS valtraduite_no2 et les conditions associées.

Autrement je modifierai la première condition qui qualifie en 'non_quantifie' car j'ai l'impression que le CASE WHEN que l'on a actuellement classifie les résultats en 'non_quantifie' même si on a juste une substance en NULL. Exemple: le NO2 est NULL mais NO3 et NO3_NO2 ont des valeurs --> non_quantifie.

Je propose quelque chose comme :

WHEN COALESCE(split_nitrites.valtraduite_no3, 0) = 0 AND COALESCE(split_nitrites.valtraduite_no3_no2, 0) = 0 AND COALESCE(split_nitrites.valtraduite_no2, 0) = 0 THEN 'non_quantifie'

Dites moi si c'est pertinent ou pas. Peut être que je me trompe sur le fonctionnement du CASE WHEN.

Autrement ça m'a l'air bon :)

@20k-P
Copy link
Collaborator Author

20k-P commented Apr 4, 2025

Merci @githubzey et @LounesAbd pour les retours très pertinents . 😃

J'ai modifié le SQL et ajouté des checks dans le notebook.

J'ai un doute sur la classification dans le cas suivant (on a bien les mesures mais les 3 sont à 0)

            split_nitrites.nb_parametres = 3
            AND split_nitrites.valtraduite_no3 = 0
            AND split_nitrites.valtraduite_no2 = 0
            AND split_nitrites.valtraduite_no3_no2 = 0 

--> Est-ce "conforme" ou "non quantifié" ? pour le moment j'ai mis "non quantifié"

@20k-P 20k-P requested review from githubzey and LounesAbd April 4, 2025 08:46
@LounesAbd
Copy link
Collaborator

Bon pour moi après 2ème review !

Pour la classification "conforme" vs "non quantifié", ce que je comprends c'est que si c'est "non quantifié" c'est forcément conforme, juste que la substance n'a pas été trouvée malgré sa recherche. Alors que "conforme" c'est si la substance est trouvée mais pas assez pour être "non conforme"... À re-confirmer ! J'ai aussi un doute du coup haha

LounesAbd
LounesAbd previously approved these changes Apr 4, 2025
githubzey
githubzey previously approved these changes Apr 4, 2025
Copy link
Collaborator

@githubzey githubzey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour moi aussi, tout semble bon. Merci

@20k-P 20k-P dismissed stale reviews from githubzey and LounesAbd via 75c93cc April 5, 2025 10:02
@20k-P 20k-P requested review from LounesAbd and githubzey April 5, 2025 10:02
AND split_nitrites.valtraduite_no2 = 0
AND split_nitrites.valtraduite_no3_no2 = 0
)
THEN 'non_quantifie'
Copy link
Collaborator

@githubzey githubzey Apr 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bonjour,

Après réflexion, j’ai une question concernant la condition

CASE
        WHEN
            split_nitrites.nb_parametres != 3
            OR (
                split_nitrites.valtraduite_no3 = 0
                AND split_nitrites.valtraduite_no2 = 0
                AND split_nitrites.valtraduite_no3_no2 = 0
            )
            THEN 'non_quantifie'.

Si j’ai bien compris, lorsqu’un prélèvement ne contient pas les trois substances attendues, on le considère comme "non quantifié". Mais pourquoi ne pas vérifier quand même les valeurs des substances disponibles ? Par exemple, si l’une d’elles dépasse son seuil, même si les deux autres sont absentes.

Pour tester cela, j’ai ajouté une condition supplémentaire dans le code suivant sur mon local:

         WHEN
            split_nitrites.nb_parametres != 3
            AND  ( split_nitrites.valtraduite_no3 >= 50
            OR split_nitrites.valtraduite_no2 >= 0.5
            OR split_nitrites.valtraduite_no3_no2 >= 1 )
            THEN 'anomalie'

Cependant, aucun cas n’a été détecté comme anomalie.

Je voulais donc mieux comprendre pourquoi on ne tient pas compte des substances disponibles lorsqu’il en manque une ou deux. Merci.

Copy link
Collaborator Author

@20k-P 20k-P Apr 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Très bonne question @githubzey ! :)

J'ai considéré que pour split_nitrites.nb_parametres != 3 on ne pouvait jamais avoir 'conforme' car on n'avait pas les données pour les 3 substances.

J'avais donc le choix entre "non conforme" et "non quantifié". Je me suis dit que "non conforme" était un peu dur car en réalité on n'avait pas toutes les informations pour conclure. Mais c'est discutable :)

Ce à quoi il faut faire attention quand la substance n'a pas de données on met 0 dans le max, il faut faire attention de ne pas confondre ce 0 avec un vrai 0.
Et il me semble de manière générale, valtraduite=0 doit être ignoré / considéré comme "non qualifié" (voir ici )

on pourrait essayer de partir sur

    CASE
        WHEN
                split_nitrites.valtraduite_no3 = 0
                AND split_nitrites.valtraduite_no2 = 0
                AND split_nitrites.valtraduite_no3_no2 = 0
            THEN 'non_quantifie'
        WHEN
            split_nitrites.nb_parametres = 3
            AND split_nitrites.valtraduite_no3 < 50
            AND split_nitrites.valtraduite_no2 < 0.5
            AND split_nitrites.valtraduite_no3_no2 < 1
            THEN 'conforme'
        WHEN
                split_nitrites.valtraduite_no3 >= 50
                OR split_nitrites.valtraduite_no2 >= 0.5
                OR split_nitrites.valtraduite_no3_no2 >= 1
            THEN 'non_conforme'
         WHEN
            split_nitrites.nb_parametres != 3
            AND  ( split_nitrites.valtraduite_no3 < 50
            OR split_nitrites.valtraduite_no2 < 0.5
            OR split_nitrites.valtraduite_no3_no2 < 1 )
          THEN 'non_quantifie'
        ELSE 'error'
    END AS resultat

@jereze
Copy link
Contributor

jereze commented Apr 13, 2025

Salut Vinca !

  • Je te l'avais glissé dans une discussion jeudi en DM sur Slack, est-ce qu'on au lieu de chercher le dernier prélèvement individuellement pour les 3 paramètres, on ne devrait pas plutôt essayer de prendre les 3 paramètres en trio ?

image

Cet exemple illustre bien, pour NO2, on préférerait sûrement prendre celui d'août et non décembre, afin d'avoir les 3 à la même date.

  • j'imagine que tu construis valeur_ref au lieu d'utiliser les colonnes déjà incluses dans int__resultats_udi_communes pour le cas où tu recalcules no3_no2 ?
  • j'ai des tests qui ne fail pas quand je change le résultat, c'est un problème chez moi ou un problème de définition des tests ?

@20k-P
Copy link
Collaborator Author

20k-P commented Apr 13, 2025

Salut Vinca !

  • Je te l'avais glissé dans une discussion jeudi en DM sur Slack, est-ce qu'on au lieu de chercher le dernier prélèvement individuellement pour les 3 paramètres, on ne devrait pas plutôt essayer de prendre les 3 paramètres en trio ?

image

Cet exemple illustre bien, pour NO2, on préférerait sûrement prendre celui d'août et non décembre, afin d'avoir les 3 à la même date.

Je comprends ta question mais l'objectif est le dernier prélèvement par UDI.
A voir avec Pauline si finalement on veut le dernier prélèvement avec les 3 substances disponibles.
J'avais compris de la discussion sur les pesticides de vendredi après-midi qu'on voulait des explications/méthodes simples

  • j'imagine que tu construis valeur_ref au lieu d'utiliser les colonnes déjà incluses dans int__resultats_udi_communes pour le cas où tu recalcules no3_no2 ?

Je fais un max pour avoir une ligne avec toutes les valeurs de référence pour chaque dernier prélèvement avec le CROSS JOIN.
Tu voulais faire comment ?

image

  • j'ai des tests qui ne fail pas quand je change le résultat, c'est un problème chez moi ou un problème de définition des tests ?

Je vais regarder ça. Je n'ai pas pensé à inverser les tests.
Certaines dernier_prel_datetime ont changé avec le nouvel SQL j'ai l'impression.
Ou je m'étais trompée lors de l'écriture du test

Comment on lines 26 to 46
MAX(
CASE
WHEN
cdparametresiseeaux = 'NO3'
THEN limite_qualite
END
) AS limite_qualite_no3,
MAX(
CASE
WHEN
cdparametresiseeaux = 'NO3_NO2'
THEN limite_qualite
END
) AS limite_qualite_no3_no2,
MAX(
CASE
WHEN
cdparametresiseeaux = 'NO2'
THEN limite_qualite
END
) AS limite_qualite_no2
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello ! Pourquoi est-ce que tu utilises la fonction MAX() ici ? La table 'int__valeurs_de_reference' n'a que des lignes distinctes pour la catégorie 'nitrate'.

Pourquoi ne pas juste selectionner 'cdparametresiseeaux', 'categorie_1' et 'limite_qualite' avec un filtre sur categorie = 'nitrate' ?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je crois comprendre... Est-ce que c'est pour uniformiser les noms pour le cross join qui suit dans le CTE d'après ?

Copy link
Collaborator Author

@20k-P 20k-P Apr 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est pour avoir une seule ligne avec les 3 valeurS de référence. Et ensuite les avoir toutes les 3 pour chaque prélèvements avec le cross join. Si tu ne fais pas ça il peut manquer des valeurs et en plus les lignes sont multipliées

C'est ce que j'expliquais dans le commentaire ici
si je fais que categorie = 'nitrate' j'ai 3 lignes et non une seule.

Si vous avez une meilleure solution, je veux bien essayer

@jereze
Copy link
Contributor

jereze commented Apr 21, 2025

Hello @20k-P , merci, c'est bon pour moi le code SQL !
J'ai fait quelques petites modifications mineures.
Par contre je trouve qu'on est incohérent avec la décision prise sur une autre catégorie, donc j'ai posé la question à Pauline sur Slack.

@jereze
Copy link
Contributor

jereze commented Apr 22, 2025

Validé sur Slack. Merge 👏

@jereze jereze merged commit 80ab2b7 into main Apr 22, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants