[Backend / BDD / Frontend] NIR (numéro de sécurité sociale) – harmonisation et données de test #102

Closed
opened 2026-02-26 10:21:21 +00:00 by jmartin · 1 comment
Owner

Contexte

Le NIR est géré de façon incohérente : backend et BDD attendent 15 chiffres, le frontend (inscription AM / formulaire pro) valide 13 chiffres. En France, le NIR suit des règles strictes (structure + clé de contrôle). On souhaite vérifier que le NIR correspond aux données renseignées, mais sans bloquer en cas d'écart : les AM sont souvent étrangères ou issues des DOM-TOM, avec beaucoup d'exceptions (département 99, codes spécifiques). Un avertissement suffit.

Objectif

  • Harmoniser le format NIR sur 15 caractères. Assouplir le DTO : pour la Corse (2A, 2B), accepter les lettres A et B ; en base on enregistre des caractères (2A ou 2B), jamais 19 ni 20 pour la Corse (19 = Corrèze, 20 = Corse ; la Corse a deux départements 2A et 2B).
  • Valider le NIR : format 15 caractères et clé de contrôle. Pour le calcul de la clé uniquement, conversion temporaire 2A/2B en deux chiffres (norme INSEE) ; le NIR stocké reste avec 2A ou 2B. Rejeter si format ou clé invalide.
  • Vérifier la cohérence avec les données déclarées (sexe, date de naissance, lieu si dispo) : en cas d'incohérence, afficher un warning (message ou log), sans rejeter l'inscription.
  • Corriger les données de test (NIR de test valides et documentés).
  • Frontend : champ NIR avec formatage type NIR (1 + 2 + 2 + 2 + 3 + 3 puis tiret ou slash + 2 pour la clé) et saisie de A ou B au bon endroit pour la Corse ; envoi des 15 caractères sans espaces ni séparateur.

Tâches

Backend – DTO et validation NIR

  • Assouplir le DTO : regex 15 caractères avec 2A ou 2B pour la Corse. En base on enregistre des caractères (2A/2B).
  • Créer un service/utilitaire de validation NIR : format + clé de contrôle (conversion temporaire 2A/2B pour le calcul) ; rejeter si invalide. Vérifier cohérence avec données formulaire → warning uniquement.
  • Appeler cette validation à l'inscription AM. Adapter DTO si besoin (date_naissance, optionnellement genre).

Données de test

  • Corriger tous les NIR du seed : valides et cohérents avec chaque AM.
  • Marie Dubois (AM) : née en Corse à Ajaccio – NIR 2A valide (1980-06-08, F). Documenter dans le seed.
  • Fatima El Mansouri (AM) : née à l'étranger – NIR 99 valide (1975-11-12, F). Documenter dans le seed.
  • Frontend mock (préremplissage AM étape 2) : utiliser le même NIR que Marie Dubois du seed.

Base de données

  • Rendre nir_chiffre NOT NULL dans assistantes_maternelles (migration ou BDD.sql). Gérer lignes existantes.

Frontend

  • Validation NIR : 15 caractères (chiffres ou 2A/2B). Hint et messages adaptés.
  • Champ formaté : 1+2+2+2+3+3 + tiret ou slash + 2. Saisie A ou B au bon endroit. Envoi 15 caractères sans espaces ni séparateur.
  • Optionnel : vérification clé + cohérence côté client → avertissement sans bloquer.

Références

  • INSEE / schéma NIR (15 caractères ; Corse 2A/2B ; clé 97 - (NIR13 mod 97)).
  • docs/24_DECISIONS-PROJET.md, docs/23_LISTE-TICKETS.md.
  • Backend DTO register-am-complet.dto.ts ; Seed 03_seed_test_data.sql.
## Contexte Le NIR est géré de façon incohérente : backend et BDD attendent 15 chiffres, le frontend (inscription AM / formulaire pro) valide 13 chiffres. En France, le NIR suit des **règles strictes** (structure + clé de contrôle). On souhaite **vérifier** que le NIR correspond aux données renseignées, mais **sans bloquer** en cas d'écart : les AM sont souvent **étrangères ou issues des DOM-TOM**, avec beaucoup d'exceptions (département 99, codes spécifiques). Un **avertissement** suffit. ## Objectif - Harmoniser le format NIR sur **15 caractères**. **Assouplir le DTO** : pour la Corse (2A, 2B), accepter les **lettres** A et B ; en base on enregistre **des caractères** (2A ou 2B), jamais 19 ni 20 pour la Corse (19 = Corrèze, 20 = Corse ; la Corse a deux départements 2A et 2B). - **Valider** le NIR : format 15 caractères et clé de contrôle. Pour le calcul de la clé uniquement, conversion temporaire 2A/2B en deux chiffres (norme INSEE) ; le NIR stocké reste avec 2A ou 2B. Rejeter si format ou clé invalide. - **Vérifier la cohérence** avec les données déclarées (sexe, date de naissance, lieu si dispo) : en cas d'incohérence, **afficher un warning** (message ou log), sans rejeter l'inscription. - Corriger les données de test (NIR de test valides et documentés). - **Frontend** : champ NIR avec **formatage type NIR** (1 + 2 + 2 + 2 + 3 + 3 puis **tiret ou slash** + 2 pour la clé) et **saisie de A ou B** au bon endroit pour la Corse ; envoi des 15 caractères sans espaces ni séparateur. ## Tâches ### Backend – DTO et validation NIR - [ ] Assouplir le DTO : regex 15 caractères avec 2A ou 2B pour la Corse. En base on enregistre des caractères (2A/2B). - [ ] Créer un service/utilitaire de validation NIR : format + clé de contrôle (conversion temporaire 2A/2B pour le calcul) ; rejeter si invalide. Vérifier cohérence avec données formulaire → warning uniquement. - [ ] Appeler cette validation à l'inscription AM. Adapter DTO si besoin (date_naissance, optionnellement genre). ### Données de test - [ ] Corriger tous les NIR du seed : valides et cohérents avec chaque AM. - [ ] Marie Dubois (AM) : née en Corse à Ajaccio – NIR 2A valide (1980-06-08, F). Documenter dans le seed. - [ ] Fatima El Mansouri (AM) : née à l'étranger – NIR 99 valide (1975-11-12, F). Documenter dans le seed. - [ ] Frontend mock (préremplissage AM étape 2) : utiliser le même NIR que Marie Dubois du seed. ### Base de données - [ ] Rendre nir_chiffre NOT NULL dans assistantes_maternelles (migration ou BDD.sql). Gérer lignes existantes. ### Frontend - [ ] Validation NIR : 15 caractères (chiffres ou 2A/2B). Hint et messages adaptés. - [ ] Champ formaté : 1+2+2+2+3+3 + tiret ou slash + 2. Saisie A ou B au bon endroit. Envoi 15 caractères sans espaces ni séparateur. - [ ] Optionnel : vérification clé + cohérence côté client → avertissement sans bloquer. ## Références - INSEE / schéma NIR (15 caractères ; Corse 2A/2B ; clé 97 - (NIR13 mod 97)). - docs/24_DECISIONS-PROJET.md, docs/23_LISTE-TICKETS.md. - Backend DTO register-am-complet.dto.ts ; Seed 03_seed_test_data.sql.
Author
Owner

Livré : NIR harmonisation (backend DTO/validation 2A-2B, BDD nir_chiffre NOT NULL + migration, seeds, frontend formulaire NIR). Merge dans master.

Livré : NIR harmonisation (backend DTO/validation 2A-2B, BDD nir_chiffre NOT NULL + migration, seeds, frontend formulaire NIR). Merge dans master.
Sign in to join this conversation.
No description provided.