Aller au contenu principal

Module Cartes de membre

Le module Cartes de membre génère, imprime et révoque les cartes d'identité officielles SDS pour tous les scouts (jeunes ET responsables — doctrine R1 : un responsable est d'abord un scout dans son groupe d'origine).

Concepts

TermeDéfinition
CarteUne carte individuelle pour 1 scout × 1 année scoute, avec card_number unique format SDS-YYYY-NNNNNN
SnapshotDonnées figées au moment de l'émission (matricule, prénom/nom, photo, unité, branche) — la carte ne change pas si le scout change ensuite
StatutACTIVE (valide) / EXPIRED (validité dépassée) / REVOKED (perdue, volée…) / LOST
QR tokenToken aléatoire qui permet la vérification publique via /v/[token] (anon, scannable)
LotGénération en masse pour un périmètre + une année scoute donnés

Doctrine

  • Multi-cartes : un scout peut avoir plusieurs cartes au cours de sa vie scoute. À tout instant, 1 seule carte ACTIVE par scout × année (contrainte DB).
  • Réémission propre : perte/vol → révoquer + réémettre (nouveau card_number, matricule inchangé). L'historique reste auditable.
  • Génération centralisée : réservée au Secrétariat National et Régional (perm governance.member_cards.generate). Les chefs de groupe / unité ne génèrent pas eux-mêmes — anti-fraude.
  • Photo obligatoire : un scout sans photo_url est skippé silencieusement dans la génération en lot.
  • Validité = année scoute : valid_until = scout_years.end_date à l'émission. La carte expire automatiquement à la fin de l'année courante.
  • Snapshots immutables : R3 — si le scout change d'unité ou de photo, sa carte ACTIVE n'est PAS rétro-modifiée. Réémission nécessaire.
  • Audit complet (R6) : chaque génération, révocation, réémission est tracée dans audit_logs.

Accéder au module

Sidebar → Cartes de membre.

Page cartes — placeholder

KPIs

  • Actives : cartes utilisables (statut ACTIVE + non expirées)
  • Expirées : statut ACTIVE mais valid_until dépassée (calcul à la volée)
  • Révoquées : statut REVOKED (perte, vol, données erronées, etc.)
  • Total : toutes statuts confondus pour l'année scoute filtrée

Filtres

Pattern cascade hiérarchique scope-aware :

  • Recherche : n° carte, matricule, prénom, nom
  • Statut : ACTIVE / EXPIRED / REVOKED / LOST
  • Année scoute (défaut : courante)
  • Région (visible ADMIN_NATION+)
  • District (visible ADMIN_REGION+, restreint à la région choisie)
  • Groupe (visible ADMIN_DISTRICT+, restreint au district)
  • Unité (visible ADMIN_GROUPE+, restreint au groupe)
  • Branche (Louveteaux / Éclaireurs / Routiers)

Workflows

1. Générer un lot de cartes (Secrétariat)

Quand : à la rentrée scoute, ou après un afflux d'inscriptions.

  1. Bouton vert "Générer un lot" en haut à droite
  2. Cascade : sélectionner Région → District → Groupe → Unité (ou s'arrêter à n'importe quel niveau pour générer pour tout le sous-arbre)
  3. Choisir l'année scoute (défaut : actuelle)
  4. (Optionnel) Cocher "Forcer la réémission" pour révoquer les cartes ACTIVE existantes et les ré-émettre. À utiliser uniquement après réimpression statutaire (changement de modèle, etc.).
  5. Lancer la génération → résumé affiché :
    • X cartes générées sur Y éligibles
    • N sans photo (skippées, à régulariser)
    • M déjà actives (skippées sauf force)

Dialog Génération — placeholder

2. Imprimer un lot (papier ou PVC)

Quand : après une génération, pour distribuer matériellement.

  1. Bouton "Imprimer le lot" en haut à droite
  2. Cascade : périmètre + année
  3. Générer le PDF → téléchargement automatique

Format A4 : 8 cartes par page (grille 2×4), au format CR80 réel (85.6×54mm). Imprimer en A4 et découper, ou utiliser une feuille de cartes pré-perforées.

3. Imprimer une carte unitaire (impression PVC Evolis)

Quand : 1 carte à imprimer sur imprimante PVC dédiée.

  1. Dans la table, click l'icône ⬇ "Télécharger carte PDF" sur la ligne du scout
  2. Le PDF s'ouvre dans un nouvel onglet au format CR80 exact (1 carte/page)
  3. Imprimer directement sur PVC blanc (Evolis Primacy, Magicard, etc.)

4. Révoquer une carte (perte, vol)

Quand : un scout signale la perte ou le vol de sa carte.

  1. Dans la table, click l'icône 🛡✕ "Révoquer" sur la ligne ACTIVE
  2. Choisir un motif (Perdue / Volée / Détériorée / Données erronées / Doublon / Autre)
  3. Révoquer → la carte passe à REVOKED, le QR ne valide plus

5. Réémettre après révocation

Quand : un scout dont la carte est révoquée doit recevoir une nouvelle carte.

  1. Dans la table, click l'icône ↻ "Réémettre" sur la ligne
  2. La nouvelle carte est créée avec un nouveau card_number mais le même matricule
  3. L'ancienne reste en historique (REVOKED)

6. Vérification publique par scan QR

Quand : un tiers (responsable d'événement, secrétariat tournoi, gendarme) doit vérifier l'authenticité.

  1. Scanner le QR de la carte avec n'importe quel téléphone
  2. Atterrissage sur https://sygades.info/v/[qr_token]aucune auth requise
  3. Affiche : photo + nom + unité + branche + statut + validité
  4. Statut affiché : Carte valide (vert) / Carte expirée (orange) / Carte révoquée (rouge) / Carte introuvable (token invalide)

Données non révélées : téléphone, email, adresse, contacts d'urgence, dossier médical. Seul le minimum pour vérification visuelle.

Page vérif publique — placeholder

Permissions

ActionPermissionRôles
Voir le menu sidebar + lister les cartesgovernance.member_cards.viewADMIN_REGION + ADMIN_NATION + ADMIN_SYSTEM
Générer un lotgovernance.member_cards.generateADMIN_REGION + ADMIN_NATION
Révoquer une cartegovernance.member_cards.revokeADMIN_REGION + ADMIN_NATION
Réémettre une cartegovernance.member_cards.reissueADMIN_REGION + ADMIN_NATION
Imprimer (PDF)(= view)ADMIN_REGION + ADMIN_NATION + ADMIN_SYSTEM
Doctrine — Secrétariat uniquement

Le module est réservé au Secrétariat National et Régional (option A, DEC-018). Les chefs de groupe / district / unité ne voient PAS le menu sidebar — pour savoir si une carte existe pour un scout précis, ils passent par la fiche scout (encart latéral, à venir).

Schéma

  • member_cards (table principale, 1 row = 1 carte) — snapshots, statut, qr_token
  • member_card_counters (compteur atomique par année scoute pour card_number)
  • RLS scope-aware via org_unit_id_snapshot + org_unit_closure
  • Migrations : 0281 (schéma), 0282 (RPCs), 0283 (fix pgcrypto)

Voir aussi