Données & Base de Données
Modèle de Données Prisma
La base de données relationnelle est un cluster PostgreSQL 17 décrit par le fichier unique apps/api/prisma/schema.prisma.
Le schéma compte 39 modèles, plus 2 tables de jointures implicites gérées par Prisma.
📐 Conventions Fondamentales
- Nommage : Modèles et propriétés Prisma en
camelCase(DossierLegislatif.dateDepot) ; tables et colonnes SQL physiques ensnake_case(dossiers_legislatifs.date_depot) via les attributs@mapet@@map. - Clés Primaires : UUID stockés sous forme
text(@default(uuid())). - Pas d'Enum SQL natif : Les champs énumérés (
chambre,position,sort) sont stockés entextet validés par l'application TypeScript. - Chambre : Vaut toujours
'assemblee'ou'senat'. - Législature :
15,16ou17pour l'Assemblée. Pour le Sénat, qui ne connaît pas de dissolution, la colonne vautNULLsurscrutinsetgroupes_politiques(période définie parsessionoumandature).
💡 Principes de Modélisation Métier
1. Une personne, plusieurs mandats
Il n'existe pas de table séparée « députés » ou « sénateurs ».
- La table
parlementairescontient des personnes physiques. - La table
mandats_parlementairesenregistre leurs sièges successifs (une ligne par législature à l'Assemblée, par mandature au Sénat).
2. Changement de chambre et continuité
Lorsqu'un député est élu sénateur, sa fiche est conservée et bascule au Sénat. Son ancien identifiant PA... de l'Assemblée est historisé dans parlementaires_identifiants, garantissant que les votes ou amendements passés restent parfaitement rattachés.
3. Le groupe politique appartient au mandat
Le groupe politique, la circonscription et la commission permanente sont attachés à mandats_parlementaires. La colonne parlementaires.groupe_id n'indique que le groupe actuel.
📊 Catalogue et Volumétrie en Production
| Domaine | Table SQL | Volumétrie | Rôle |
|---|---|---|---|
| Parlementaires | parlementaires | ~2 200 lignes | Identités, statistiques précalculées, résumés IA |
| Mandats Sièges | mandats_parlementaires | ~3 600 lignes | Sièges par législature / mandature |
| Groupes | groupes_politiques | ~46 lignes | Groupes politiques de l'AN et du Sénat |
| Scrutins | scrutins | ~22 000 lignes | Scrutins publics solennels et ordinaires |
| Votes Individuels | votes | ~3 900 000 lignes | Votes nominatifs (pour, contre, abstention, absent) |
| Amendements | amendements | ~195 000 lignes | Amendements déposés, textes, sorts |
| Cosignatures | _AmendementCosignataires | ~3 300 000 lignes | Jointure amendement vers cosignataire |
| Interventions | interventions | ~1 420 000 lignes | Prises de parole en séance publique et commission |
| Liaisons Débats | intervention_scrutin | ~350 000 lignes | Rapprochement chronologique débat vers vote |
| Dossiers Législatifs | dossiers_legislatifs | ~21 500 lignes | Dossiers et textes de loi |
| Sujets Transverses | sujets | ~1 750 lignes | Regroupements des textes AN + Sénat |
| Lobbyistes | lobbyistes | ~4 100 lignes | Représentants d'intérêts déclarés HATVP |
| Actions Lobbying | actions_lobby | ~102 000 lignes | Actions d'influence déclarées |
| Réunions & Séances | reunions | ~8 800 lignes | Agenda et procès-verbaux |