Skip to content

Validateur code postal

Vincent Lara requested to merge validateur-code-postal into main

Contexte

On a reçu un fichier avec seulement un code postal et un nom de commune par ligne. Ce n’est pas le premier d’habitude on fait un pré-traitement pour pouvoir importer ce fichier.

Contenu

On fait deux choses dans cette MR, je peux séparer au besoin :

  1. On ajoute la possibilité d’ajouter une colonne sans source
  2. On ajoute une validateur code_insee_from_code_postal

Ajouter une colonne sans source

On ajoute une propriété nosource au dataset qui permet de dire que cette colonne n’a pas de source dans le fichier actuel. On peut s’en servir avec les validateurs format_with_row_values et le validateur introduit dans cette MR code_insee_from_code_postal

Validateur code_insee_from_code_postal

Ajout de la constante CODE_INSEE_PAR_CODE_POSTAL

On se sert de la table codes_postaux déjà présente pour ajouter une constante contenant les codes postaux sous la forme d’un dictionnaire ayant pour clé les codes postaux et pour valeur un autre dictionnaire ayant lui pour clé les différents labels des communes et pour valeur les codes INSEE communaux.

Validateur

Ce validateur se sert de deux colonnes : une contenant le code postal, l’autre le libellé.

Il s’utilise comme suit :

- nosource: true
  db:
    type: VARCHAR(5)
    column: insee_com
  validators:
    - path: "insitu.importer.validators.code_insee_from_code_postal"
      params:
        code_postal_column: Code postal
        libelle_commune_column: Libellé Commune
- source: Code postal
  db:
    column: code_postal
    type: TEXT
- source: Libellé Commune
  db:
    column: lib_com
    type: TEXT

dans le cas d’un schema au format frictionless on ferait

fields:
  - name: "Code postal"
    type: string
  - name: insee_com
    type: string
    insitu:
      nosource: true
      db:
        type: VARCHAR(5)
        column: insee_com
      validators:
        - path: "insitu.importer.validators.code_insee_from_code_postal"
          params:
            code_postal_column: Code postal
            libelle_commune_column: "Localité du projet"
  - name: "Localité du projet"
    type: string

Il va chercher dans la constante CODE_INSEE_PAR_CODE_POSTAL le dictionnaire ayant pour clé le code postal indiqué et va chercher, après une phase de normalisation, le libellé qui correspond pour trouver le code INSEE qui va bien

Edited by Vincent Lara

Merge request reports

Loading