From 6e96b7bcc3fc59a51ed96b3582544ac76ec324f7 Mon Sep 17 00:00:00 2001 From: Alexandre Fauquette <45398769+alexfauquette@users.noreply.github.com> Date: Tue, 24 Dec 2024 00:17:11 +0100 Subject: [PATCH] update prisma prisma model (#65) * update prisma * Add the About page * use more divers icons * Use real dossier data * remove fake text structure --- app/[legislature]/dossier/[id]/PreviewTab.tsx | 2 +- app/about/page.tsx | 180 ++++++- app/dossiers/api/route.ts | 2 +- app/page.tsx | 2 +- components/folderHomePage/DossierList.tsx | 4 +- components/home/Dossiers/DossierCard.tsx | 13 +- components/home/Dossiers/Dossiers.tsx | 52 ++ components/home/Dossiers/Section.tsx | 89 ---- components/home/Dossiers/index.tsx | 38 ++ components/home/FloatingIcons.tsx | 12 +- components/home/HeroSection.tsx | 7 +- components/home/SearchBar.tsx | 77 +-- prisma/models/acteur.prisma | 68 +-- prisma/models/agenda.prisma | 20 +- prisma/models/amendement.prisma | 9 +- prisma/models/batch_runs.prisma | 7 + prisma/models/commune.prisma | 9 +- prisma/models/debat.prisma | 7 +- prisma/models/document.prisma | 24 +- prisma/models/dossier.prisma | 44 +- prisma/models/mandat.prisma | 3 + prisma/models/organe.prisma | 70 ++- prisma/models/question.prisma | 3 + prisma/models/scrutin.prisma | 69 +-- prisma/models/stats.prisma | 3 + prisma/swagger/json-schema.json | 487 ++++++++++++++---- 26 files changed, 898 insertions(+), 403 deletions(-) create mode 100644 components/home/Dossiers/Dossiers.tsx delete mode 100644 components/home/Dossiers/Section.tsx create mode 100644 components/home/Dossiers/index.tsx create mode 100644 prisma/models/batch_runs.prisma diff --git a/app/[legislature]/dossier/[id]/PreviewTab.tsx b/app/[legislature]/dossier/[id]/PreviewTab.tsx index bc0465d..88fd5ba 100644 --- a/app/[legislature]/dossier/[id]/PreviewTab.tsx +++ b/app/[legislature]/dossier/[id]/PreviewTab.tsx @@ -80,7 +80,7 @@ export const PreviewTab = ({ dossier }: PreviewTabProps) => { dossierUid={dossier!.uid} legislature={dossier!.legislature} /> - + {/* */} ); diff --git a/app/about/page.tsx b/app/about/page.tsx index f0a45ec..8117dd0 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -1,10 +1,180 @@ -import Button from "@mui/material/Button"; +import Typography from "@mui/material/Typography"; +import Box from "@mui/material/Box"; export default function About() { return ( -
- Hello About - -
+ + + NosDéputés.fr est un site transpartisan géré par une équipe bénévole de + citoyens, avec pour objectif de promouvoir l’accès à l’activité + parlementaire française. + + + HISTOIRE DU GROUPE + + + NosDéputés.fr a été initié par l’association Regards Citoyens, fondée en + 2009 par Tangui Morlier, Benjamin Ooghe-Tabanou, Jean-Baptiste + Gabellieri et Brice Person. Depuis sa création, plusieurs autres projets + liés à l’ouverture des données publiques ont été développés par Regards + Citoyens, notamment Nos Sénateurs et La Fabrique de la Loi. + + + + Après plus de dix ans de développement, l’équipe fondatrice a choisi, en + 2022, de constituer une équipe de transition afin d’assurer la pérennité + de Nos Députés. Depuis ce passage de flambeau, la nouvelle équipe s’est + attelée à une refonte complète du site, visant à moderniser son + ergonomie et à en renforcer l’accessibilité. + + + CE QUI NOUS UNIS / LES VALEURS + + + La raison d’être de NosDéputés.fr est de revitaliser le lien entre les + citoyens et leurs représentants. + + + + À une époque où les problèmes liés à la désinformation et aux bulles + informationnelles prennent une ampleur croissante, il nous semble + primordial de revenir aux faits tels qu’ils sont rendus accessibles + publiquement. Nous voulons aider les citoyens – qu’ils soient familiers + des institutions ou novices – à lire, comprendre et analyser la réalité + de l’Assemblée nationale sans que des prismes idéologiques ne viennent + altérer leur perception. + + + + Les valeurs qui ont guidé Nos Députés depuis ses débuts et qui + continueront de le faire à l’avenir sont les suivantes : + +
    +
  • + Neutralité : Nos Députés est une initiative + transpartisane. La totalité de l’information publiée sur le site est + exempte de liens idéologiques. Les indicateurs d’activité et les + transcriptions des interventions des députés sont présentés de manière + uniforme pour chaque membre de l’Assemblée, sans aucun biais dans le + traitement des données. +
  • +
  • + Transparence : Les développements de la plateforme + visent à fournir un accès large aux données issues de l’Assemblée + nationale, ainsi qu’à leur traitement afin qu’elles soient + intelligibles pour le plus grand nombre. Toutes les données présentées + sur le site sont publiques et leur publication est autorisée. Lorsque + des analyses ou indicateurs sont ajoutés, leur méthode de calcul est + intégralement documentée et disponible sur le dépôt du projet. +
  • +
  • + Open source : Les développements liés à la plateforme + Nos Députés sont accessibles via un dépôt GitHub sous licence + AGPL-3.0. Cette licence impose que toute modification apportée au site + soit publiée librement sur le dépôt et permet à toute initiative non + commerciale de copier ou réutiliser le code, à condition que le projet + reste lui-même accessible librement. +
  • +
+ + QUI SOMMES NOUS ? + +
    +
  • Alex
  • +
  • David
  • +
  • Emmanuel
  • +
  • Henry
  • +
  • Samuel
  • +
  • Thomas
  • +
+ + CE QUE NOUS SOUHAITONS FAIRE + + + Si l’accès à l’information parlementaire s’est considérablement + démocratisé depuis la création de Nos Députés, l’utilisation de la + plateforme reste majoritairement réservée à des utilisateurs avertis. En + effet, seul un utilisateur disposant de connaissances préalables sur le + fonctionnement de l’Assemblée peut pleinement exploiter les informations + disponibles. + + + + En analysant les besoins des citoyens, nous avons identifié trois + obstacles majeurs à une veille personnelle équilibrée et efficace sur + leurs sujets d’intérêt : + +
    +
  • + L’absence de « thématisation » des dossiers législatifs : Les dossiers + législatifs de l’Assemblée nationale ne sont pas catégorisés par + thématique. Seules les commissions parlementaires permettent un + certain tri, mais leur nombre restreint (huit commissions permanentes, + par exemple) limite leur capacité à identifier les dossiers pertinents + pour une personne cherchant à se concentrer sur des domaines + spécifiques comme l’énergie, l’éducation ou la santé. +
  • +
  • + La complexité du formalisme parlementaire : Les termes tels que projet + de loi, proposition de loi, amendement ou navette parlementaire + peuvent sembler intimidants pour une personne non familiarisée avec le + fonctionnement institutionnel. Une explication systématique de ces + concepts est essentielle pour rendre l’activité parlementaire + accessible à tous. +
  • +
  • + Le volume de données disponible : Pour la plupart des citoyens – même + ceux qui s’intéressent vivement à un sujet – il est difficile de + concilier une vie bien remplie avec la consultation de dizaines + d’heures de travaux en commission. L’utilisation de technologies de + synthèse pourrait offrir des résumés clairs et impartiaux des débats, + des arguments ou encore des positions des différentes parties + prenantes. +
  • +
+ + Les développements futurs de la plateforme viseront à lever ces + barrières, afin de rendre Nos Députés encore plus accessible et utile + pour tous. + + VOUS POUVEZ AUSSI CONTRIBUER + + Votre soutien est inestimable. + + + Au-delà des coûts d’hébergement et des missions ponctuelles que nous + finançons grâce à vos dons, vos contributions nous encouragent à aller + de l’avant. Vous pouvez nous aider de plusieurs façons : + + + {/* Vous pouvez nous aider de plusieurs façon : +
    +
  • + Contribuer au projet : envoyez-nous un message à [Adresse mail] en + nous expliquant comment vous souhaiteriez participer au projet +
  • +
  • + Faire un don : Vous pouvez faire un don en suivant les étapes décrites + ici : [Instructions pour les dons et déductions fiscales] +
  • +
*/} +
); } diff --git a/app/dossiers/api/route.ts b/app/dossiers/api/route.ts index 207142d..598c1a9 100644 --- a/app/dossiers/api/route.ts +++ b/app/dossiers/api/route.ts @@ -22,7 +22,7 @@ export async function GET(request: NextRequest) { const data = await prisma.dossier.findMany({ where: { legislature, ...(theme === "" ? {} : { theme }) }, - orderBy: { numero: "asc" }, // TODO replace by last date when possible + orderBy: [{ dateDernierActe: "desc" }, { numero: "desc" }], take: pageSize, skip: page * pageSize, }); diff --git a/app/page.tsx b/app/page.tsx index 0816bc2..59694b1 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,5 +1,5 @@ import HeroSection from "@/components/home/HeroSection"; -import DossierSection from "@/components/home/Dossiers/Section"; +import DossierSection from "@/components/home/Dossiers"; export default function Home() { return ( diff --git a/components/folderHomePage/DossierList.tsx b/components/folderHomePage/DossierList.tsx index 5d74d45..b64ab3b 100644 --- a/components/folderHomePage/DossierList.tsx +++ b/components/folderHomePage/DossierList.tsx @@ -47,7 +47,7 @@ export default function DossierList(props: DossierListProps) { let res = await fetch( "/dossiers/api?" + new URLSearchParams({ - legislature: "16", + legislature: "17", page: currentPage.toString(), theme: theme, pageSize: PAGE_SIZE.toString(), @@ -71,7 +71,7 @@ export default function DossierList(props: DossierListProps) { let res = await fetch( "/dossiers/api?" + new URLSearchParams({ - legislature: "16", + legislature: "17", page: "0", theme: theme, pageSize: PAGE_SIZE.toString(), diff --git a/components/home/Dossiers/DossierCard.tsx b/components/home/Dossiers/DossierCard.tsx index 01b5f3c..6af31d6 100644 --- a/components/home/Dossiers/DossierCard.tsx +++ b/components/home/Dossiers/DossierCard.tsx @@ -11,20 +11,21 @@ import Link from "next/link"; import StatusChip from "@/components/StatusChip"; type DossierCardProps = { - titre: string; - status: string; //TODO: use an enum when the type of status will be clear + href: string; + titre: null | string; + status: null | string; //TODO: use an enum when the type of status will be clear thematique: string; // TODO: use an enum latter interventions: number; amendements: number; }; const DossierCard = (props: DossierCardProps) => { - const { titre, status, thematique, interventions, amendements } = props; + const { titre, status, href, thematique, interventions, amendements } = props; return ( { - - + {status && } + {thematique && } diff --git a/components/home/Dossiers/Dossiers.tsx b/components/home/Dossiers/Dossiers.tsx new file mode 100644 index 0000000..91387d8 --- /dev/null +++ b/components/home/Dossiers/Dossiers.tsx @@ -0,0 +1,52 @@ +import * as React from "react"; +import Box from "@mui/material/Box"; +import DossierCard from "./DossierCard"; + +import { prisma } from "@/prisma"; + +async function getLastDossiersUnCached() { + try { + const data = await prisma.dossier.findMany({ + where: { legislature: "17" }, + orderBy: [{ dateDernierActe: "desc" }, { numero: "desc" }], + take: 6, + include: { + _count: { + select: { paragraphes: true, amendements: true }, + }, + }, + }); + + return data; + } catch (error) { + return []; + } +} + +const getLastDossiers = React.cache(getLastDossiersUnCached); + +export default async function Dossiers() { + const dossiers = await getLastDossiers(); + + return ( + + {dossiers.map(({ uid, statut, _count, titre }) => ( + + ))} + + ); +} diff --git a/components/home/Dossiers/Section.tsx b/components/home/Dossiers/Section.tsx deleted file mode 100644 index 967a32c..0000000 --- a/components/home/Dossiers/Section.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import Box from "@mui/material/Box"; -import Typography from "@mui/material/Typography"; -import Button from "@mui/material/Button"; -import Link from "next/link"; - -import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; -import DossierCard from "./DossierCard"; - -const dissiers = [ - { - titre: "Restitution des biens culturels spoilés entnre 1933 et 1945", - status: "1e lecture AN", - thematique: "transport", - interventions: 5477, - amendements: 346, - }, - { - titre: `Mobilité internationale des alternants pour un "erasmus de l'apprentissage"`, - status: "1e lecture AN", - thematique: "transport", - interventions: 5477, - amendements: 346, - }, - { - titre: `Gestion différenciée des compétences eau et assainissement`, - status: "1e lecture AN", - thematique: "transport", - interventions: 5477, - amendements: 346, - }, - { - titre: `Régularisation du plui de la communauté de communes du bas-chablais`, - status: "1e lecture AN", - thematique: "transport", - interventions: 5477, - amendements: 346, - }, - { - titre: `Accompagnement des élus locaux dans la lutte contre l'artificialisation des sols`, - status: "1e lecture AN", - thematique: "transport", - interventions: 5477, - amendements: 346, - }, - { - titre: `Lutte contre le dumping social sur le transmanche`, - status: "1e lecture AN", - thematique: "transport", - interventions: 5477, - amendements: 346, - }, -]; -export default function Section() { - return ( - - - Les derniers dossiers - - - - {dissiers.map((card) => ( - - ))} - - - ); -} diff --git a/components/home/Dossiers/index.tsx b/components/home/Dossiers/index.tsx new file mode 100644 index 0000000..93b00d6 --- /dev/null +++ b/components/home/Dossiers/index.tsx @@ -0,0 +1,38 @@ +import * as React from "react"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import Button from "@mui/material/Button"; +import Link from "next/link"; + +import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; +import Dossiers from "./Dossiers"; + +export default function DossiersSection() { + return ( + + + Les derniers dossiers + + + + + + + ); +} diff --git a/components/home/FloatingIcons.tsx b/components/home/FloatingIcons.tsx index 245f1d6..e88ad71 100644 --- a/components/home/FloatingIcons.tsx +++ b/components/home/FloatingIcons.tsx @@ -54,27 +54,27 @@ export default function FloatingIcons() { limit="md" /> diff --git a/components/home/HeroSection.tsx b/components/home/HeroSection.tsx index ac88845..ea28d28 100644 --- a/components/home/HeroSection.tsx +++ b/components/home/HeroSection.tsx @@ -51,14 +51,15 @@ const HeroSection = () => { component="p" > NosDéputés met en valeur l'activité parlementaire des députés de - l'Assemblée nationale Française. en synthétisant les différentes + l'Assemblée nationale Française en synthétisant les différentes activités législatives et de contrôle du gouvernement des élus de la nation. -
+ {/* Desactivé tant que l'on a pas la carte des circos */} + {/*
{ > Ou consultez la carte des circonscriptions -
+
*/} ); }; diff --git a/components/home/SearchBar.tsx b/components/home/SearchBar.tsx index 7f8b133..93a6390 100644 --- a/components/home/SearchBar.tsx +++ b/components/home/SearchBar.tsx @@ -1,6 +1,6 @@ "use client"; -import Image from 'next/image'; +import Image from "next/image"; import { Autocomplete, TextField, @@ -56,9 +56,7 @@ const options: (DossierType | DeputeType)[] = [ export default function SearchBar() { return ( - ( - {}} - > - CHERCHER - - ), - }} - /> - )} - options={options} - getOptionLabel={(option) => { - if (typeof option === "string") { - return option; - } - if (isDepute(option)) { - return `${option.prenom} ${option.nom} ${option.circo}`; - } - return option.titre; - }} - renderOption={(props, option) => { - if (isDepute(option)) { - return ( - img": { mr: 2, flexShrink: 0 } }} - {...props} + fullWidth + placeholder="Entrez un code postal ou un nom de député" + slotProps={{ + input: { + endAdornment: ( + + ), + }, }} /> + - Ex. 01600, Bordeaux, Yaël Braun-Pivet, Projet de Loi Finance 2023, - Nucléaire... + Ex. 01600, Bordeaux, Yaël Braun-Pivet ); diff --git a/prisma/models/acteur.prisma b/prisma/models/acteur.prisma index 8be6068..31dc233 100644 --- a/prisma/models/acteur.prisma +++ b/prisma/models/acteur.prisma @@ -1,58 +1,59 @@ /// Personne physique ayant été élue ou nommée dans un organe. model Acteur { /// Identifiant unique. - uid String @id + uid String @id + senatMatricule String? + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) - dataset Int + dataset Int /// Prénom. - prenom String + prenom String /// Nom. - nom String + nom String /// Civilité. - civ String + civ String /// Date de naissance. - dateNais DateTime? + dateNais DateTime? @db.Date /// Date de décès. - dateDeces DateTime? + dateDeces DateTime? @db.Date /// Ville de naissance. - villeNais String? + villeNais String? /// Département de naissance. - depNais String? + depNais String? /// Pays de naissance. - paysNais String? + paysNais String? /// Profession. - profession String? + profession String? /// Catégorie socio professionelle de l'INSEE. - catSocPro String? + catSocPro String? /// Famille socio professionelle de l'INSEE. - famSocPro String? - slug String + famSocPro String? + slug String /// URL de la déclaration d'intérêt de l'acteur sur le site de la Haute Autorité pour la Transparence dans la Vie Publique. - uriHatvp String? + uriHatvp String? /// Deputé en poste actuellement. - actif Boolean? @default(false) + actif Boolean? @default(false) /// Groupe parlementaire du député. - groupeParlementaireUid String? + groupeParlementaireUid String? /// Mandat principal du député, c'est à dire s'il est actif ou non. - mandatPrincipalUid String? @unique + mandatPrincipalUid String? @unique /// Organe de circonscription - circonscriptionUid String? + circonscriptionUid String? /// Place dans l'hémicycle de l'acteur - placeHemicycle String? + placeHemicycle String? /// Identifiant unique de la commission permanente et active de cet acteur. - commissionPermanenteRefUid String? + commissionPermanenteRefUid String? /// URL de l'image de l'acteur - urlImage String? + urlImage String? /// Chambre du parlementaire (assemblée ou sénat) - chambre String? - compteTwitter String? + chambre String? + compteTwitter String? /// Nombre d'amendements pour cet acteur. - nombreAmendements Int @default(0) + nombreAmendements Int @default(0) /// Nombre d'interventions pour cet acteur. - nombreInterventions Int @default(0) + nombreInterventions Int @default(0) /// Nombre de questions pour cet acteur. - nombreQuestions Int @default(0) - + nombreQuestions Int @default(0) groupeParlementaire Organe? @relation("Acteur_GroupeParlementaire", fields: [groupeParlementaireUid], references: [uid]) mandatPrincipal Mandat? @relation("Acteur_MandatPrincipal", fields: [mandatPrincipalUid], references: [uid]) circonscription Organe? @relation("Acteur_Circonscription", fields: [circonscriptionUid], references: [uid]) @@ -90,6 +91,7 @@ model Acteur { /// Statistiques d'activité agrégé par semaine. statistiquesHebdomadaire StatistiqueHebdomadaire[] + @@unique([prenom, nom, dateNais]) @@index([dataset]) @@index([vecteurRecherche], type: Gin) @@index([actif]) @@ -102,7 +104,8 @@ model Acteur { model AdresseElectronique { /// Identifiant unique. - uid String @id + uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int type String @@ -112,7 +115,7 @@ model AdresseElectronique { valElec String? xsiType String? acteurRefUid String - acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade) + acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade) @@index([dataset]) @@index([acteurRefUid]) @@ -120,7 +123,8 @@ model AdresseElectronique { model AdressePostale { /// Identifiant unique. - uid String @id + uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int type String @@ -134,7 +138,7 @@ model AdressePostale { ville String? xsiType String? acteurRefUid String - acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade) + acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade) @@index([dataset]) @@index([acteurRefUid]) diff --git a/prisma/models/agenda.prisma b/prisma/models/agenda.prisma index 3b10939..c7d7558 100644 --- a/prisma/models/agenda.prisma +++ b/prisma/models/agenda.prisma @@ -2,6 +2,7 @@ model Agenda { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Type de la réunion @@ -89,6 +90,7 @@ model Agenda { model PointOdj { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Le contenu de ce champ n'est pas défini. @@ -116,9 +118,10 @@ model PointOdj { agendaRefUid String? /// Pour les réunions dont xsiType est 'seance_type', c'est à dire une séance publique, chaque point de l'ordre du jour est fixé par la `conférence des présidents `__ et a donc la valeur 'podjSeanceConfPres_type' pour le champ xsiType. Dans tout les autres cas la valeur est 'podjReunion_type'. xsiType String - actesLegislatifs ActeLegislatif[] dossierLegislatif Dossier? @relation(fields: [dossierLegislatifUid], references: [uid]) agendaRef Agenda? @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade) + scrutins Scrutin[] + actesLegislatifs ActeLegislatif[] interventions Paragraphe[] @@index([dataset]) @@ -128,15 +131,16 @@ model PointOdj { model ActeurDemandeur { /// Clé primaire. - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Acteur référent. acteurRefUid String /// Agenda référent. agendaRefUid String - acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade) - agendaRef Agenda @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade) + acteurRef Acteur @relation(fields: [acteurRefUid], references: [uid], onDelete: Cascade) + agendaRef Agenda @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade) @@index([dataset]) @@index([acteurRefUid]) @@ -145,7 +149,8 @@ model ActeurDemandeur { model ParticipantReunion { /// Clé primaire. - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// La valeur est 'absent' ou 'excusé' si la personne n'a pas participé à la réunion, 'présent' sinon. @@ -154,8 +159,8 @@ model ParticipantReunion { acteurRefUid String? /// Agenda référent. agendaRefUid String - acteurRef Acteur? @relation(fields: [acteurRefUid], references: [uid]) - agendaRef Agenda @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade) + acteurRef Acteur? @relation(fields: [acteurRefUid], references: [uid]) + agendaRef Agenda @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade) @@index([dataset]) @@index([acteurRefUid]) @@ -165,6 +170,7 @@ model ParticipantReunion { model PersonneAuditionneeReunion { /// Clé primaire. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique de l'acteur ou bien, dans le cas ou il ne s'agit pas d'un acteur, un identifiant unique de personne externe débutant par PE qui est utilisé uniquement dans ce contexte. diff --git a/prisma/models/amendement.prisma b/prisma/models/amendement.prisma index 9a9d4d2..de2ba77 100644 --- a/prisma/models/amendement.prisma +++ b/prisma/models/amendement.prisma @@ -1,6 +1,7 @@ model Amendement { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Chambre de provenance (Assemblée ou Sénat) @@ -117,6 +118,9 @@ model Amendement { /// Identifiant du scrutin lié à l'amendement scrutinRefUid String? @unique + /// Identifiant (string) de référence de l'article modifié par cet amendement. + subdivisionRefHash String? + vecteurRecherche Unsupported("tsvector")? @default(dbgenerated("to_tsvector('french'::regconfig, ((((immutable_unaccent((COALESCE(dispositif, ''::text))::character varying) || ' '::text) || immutable_unaccent((COALESCE(\"exposeSommaire\", ''::text))::character varying)) || ' '::text) || immutable_unaccent((COALESCE(\"divisionArticleDesignationCourte\", ''::text))::character varying)))")) texteLegislatifRef Document? @relation(fields: [texteLegislatifRefUid], references: [uid]) @@ -130,6 +134,7 @@ model Amendement { groupePolitiqueRef Organe? @relation("Amendement_GroupePolitique", fields: [groupePolitiqueRefUid], references: [uid]) seanceRef Agenda? @relation(fields: [seanceRefUid], references: [uid]) coSignataires CoSignataireAmendement[] + subdivisionRef Subdivision? @relation(fields: [subdivisionRefHash], references: [hash]) @@index([dataset]) @@index([vecteurRecherche], type: Gin) @@ -143,11 +148,13 @@ model Amendement { @@index([gouvernementOrganeRefUid]) @@index([groupePolitiqueRefUid]) @@index([dateDepot]) + @@index([subdivisionRefHash]) } model CoSignataireAmendement { /// Identifiant unique. - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiants uniques (uid) des acteurs. diff --git a/prisma/models/batch_runs.prisma b/prisma/models/batch_runs.prisma new file mode 100644 index 0000000..efde814 --- /dev/null +++ b/prisma/models/batch_runs.prisma @@ -0,0 +1,7 @@ +model BatchRuns { + id Int @id @default(autoincrement()) + dateDebut DateTime + dateFin DateTime? + nomTable String + nbLignesAffectees Int @default(0) +} diff --git a/prisma/models/commune.prisma b/prisma/models/commune.prisma index 97d2192..e26ed8c 100644 --- a/prisma/models/commune.prisma +++ b/prisma/models/commune.prisma @@ -1,9 +1,10 @@ /// L'ensemble des communes de France et leur circonscription associée model Commune { /// Identifiant unique. - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Hachage de l'objet - hash String @unique + hash String @unique /// Nom de la commune libelle String /// Numéro de la région où se trouve la commune @@ -19,12 +20,12 @@ model Commune { /// Code postal codePostal String /// Vrai si la commune est sur plusieurs circonscriptions - circoPartielle Boolean @default(false) + circoPartielle Boolean @default(false) /// Numéro de la cirsconscription numCirco Int? /// Identifiant unique de la cirsconscription liée à la commune circonscriptionUid String? - circonscription Organe? @relation(fields: [circonscriptionUid], references: [uid]) + circonscription Organe? @relation(fields: [circonscriptionUid], references: [uid]) @@index([circonscriptionUid]) } diff --git a/prisma/models/debat.prisma b/prisma/models/debat.prisma index 7c9f33b..e9cbc43 100644 --- a/prisma/models/debat.prisma +++ b/prisma/models/debat.prisma @@ -2,6 +2,7 @@ model Debat { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Chambre de provenance (AN, SN ou CG) @@ -37,7 +38,8 @@ model Debat { /// Sommaire d'une séance de débat. model SommaireDebat { - id String @id + id String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int debatRefUid String @@ -46,7 +48,7 @@ model SommaireDebat { titreIntitule String? titreSousIntitule String? idSyceron String - debatRef Debat @relation(fields: [debatRefUid], references: [uid]) + debatRef Debat @relation(fields: [debatRefUid], references: [uid]) @@index([dataset]) @@index([debatRefUid]) @@ -54,6 +56,7 @@ model SommaireDebat { model Paragraphe { id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Chambre de provenance (AN, SN ou CG) diff --git a/prisma/models/document.prisma b/prisma/models/document.prisma index 05db649..975cef4 100644 --- a/prisma/models/document.prisma +++ b/prisma/models/document.prisma @@ -1,4 +1,5 @@ model Document { + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Chambre parente du document (AN, SN, ou CG) @@ -79,12 +80,13 @@ model Document { organeRef Organe? @relation(fields: [organeRefUid], references: [uid]) documentParentRef Document? @relation("DocumentParentRef", fields: [documentParentRefUid], references: [uid], onDelete: Restrict, onUpdate: Restrict) sousDocuments Document? @relation("DocumentParentRef") + scrutins Scrutin[] amendements Amendement[] amendementsCommission AmendementCommission[] + actesLegislatifs ActeLegislatif[] auteurs Auteur[] coSignataires CoSignataireDocument[] etudesPlf EtudePlf[] - textesAssocies TexteAssocie[] interventions Paragraphe[] subdivisions Subdivision[] alineas Alinea[] @@ -100,7 +102,8 @@ model Document { model Auteur { /// Identifiant unique. - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) de l'organe correspondant au groupe politique. @@ -125,6 +128,7 @@ model Auteur { model CoSignataireDocument { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) de l'acteur. @@ -155,6 +159,7 @@ model CoSignataireDocument { model AmendementCommission { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) de l'organe correspondant au groupe politique. @@ -173,12 +178,12 @@ model AmendementCommission { model Subdivision { /// Identifiant unique. - hash String @id + hash String @id /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) du document. documentRefUid String? - documentRef Document? @relation(fields: [documentRefUid], references: [uid]) + documentRef Document? @relation(fields: [documentRefUid], references: [uid]) /// Type de division. type String? /// Identifiant de la division. @@ -198,7 +203,14 @@ model Subdivision { /// Ordre de la division dans le document. sequence Int? - alineas Alinea[] + /// Le nombre d'amendements liés à cette subdivision. + nombreAmendements Int @default(0) + + alineas Alinea[] + scrutins Scrutin[] + + /// Amendements liés à cette subdivision. + amendements Amendement[] @@index([dataset]) @@index([documentRefUid]) @@ -222,7 +234,7 @@ model Alinea { articleRef Subdivision @relation(fields: [articleRefHash], references: [hash]) /// Identifiant unique (uid) du document. documentRefUid String? - documentRef Document? @relation(fields: [documentRefUid], references: [uid]) + documentRef Document? @relation(fields: [documentRefUid], references: [uid]) @@index([dataset]) @@index([articleRefHash]) diff --git a/prisma/models/dossier.prisma b/prisma/models/dossier.prisma index 9ff4f94..daaf75f 100644 --- a/prisma/models/dossier.prisma +++ b/prisma/models/dossier.prisma @@ -2,6 +2,7 @@ model Dossier { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Chambre parente du document (AN, SN, ou CG) @@ -44,8 +45,10 @@ model Dossier { dossierAbsorbantRefUid String? @unique /// Organe à l'initiative du dossier. organeRefUid String? - /// Identifiant de la commission référente - commissionRefUid String? + /// Identifiant de la commission référente à l'Assemblée Nationale. + commissionANRefUid String? + /// Identifiant de la commission référente au Sénat. + commissionSNRefUid String? /// Identifiant unique (uid) de l'acteur. acteurPrincipalRefUid String? @@ -55,7 +58,8 @@ model Dossier { dossierAbsorbantRef Dossier? @relation("DossierAbsorbant", fields: [dossierAbsorbantRefUid], references: [uid], onDelete: Restrict, onUpdate: Restrict) dossierAbsorbrant Dossier? @relation("DossierAbsorbant") organeRef Organe? @relation("OrganeMission", fields: [organeRefUid], references: [uid]) - commissionRef Organe? @relation("OrganeCommission", fields: [commissionRefUid], references: [uid]) + commissionANRef Organe? @relation("OrganeANCommission", fields: [commissionANRefUid], references: [uid]) + commissionSNRef Organe? @relation("OrganeSNCommission", fields: [commissionSNRefUid], references: [uid]) plf EtudePlf[] initiateurs InitiateurDossier[] actesLegislatifs ActeLegislatif[] @@ -72,16 +76,18 @@ model Dossier { @@index([dataset]) @@index([vecteurRecherche], type: Gin) @@index([organeRefUid]) - @@index([commissionRefUid]) @@index([dossierAbsorbantRefUid]) @@index([acteurPrincipalRefUid]) @@index([dateDepot]) @@index([dateDernierActe]) + @@index([commissionANRefUid]) + @@index([commissionSNRefUid]) } model ActeLegislatif { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Chambre parente du document (AN, SN, ou CG) @@ -176,24 +182,26 @@ model ActeLegislatif { /// Signification du code du type de déclaration. libelleStatutTypeDeclaration String? dossierRefUid String? + documentRefUid String? /// Identifiant unique de l'ordre du jour de la réunion dans l'agenda. pointOdjUid String? agendaRef Agenda? @relation(fields: [reunionRefUid], references: [uid]) auteurMotionRef Acteur? @relation("ActeLegislatif_auteurMotion", fields: [auteurMotionRefUid], references: [uid]) dossierRef Dossier? @relation(fields: [dossierRefUid], references: [uid]) + documentRef Document? @relation(fields: [documentRefUid], references: [uid]) pointOdj PointOdj? @relation(fields: [pointOdjUid], references: [uid]) auteursRefs AuteurMotion[] infoJoRect InfoJoRect[] initiateurActeLegislatif InitiateurActeLegislatif[] rapporteurs Rapporteur[] scrutins Scrutin[] - textesAssocies TexteAssocie[] voteRefs VoteActeLegislatif[] @@index([dataset]) @@index([reunionRefUid]) @@index([auteurMotionRefUid]) @@index([dossierRefUid]) + @@index([documentRefUid]) @@index([pointOdjUid]) } @@ -201,6 +209,7 @@ model ActeLegislatif { model InitiateurDossier { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Dossier référent. @@ -223,6 +232,7 @@ model InitiateurDossier { model AuteurMotion { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) de l'acteur auteur de la motion. @@ -240,6 +250,7 @@ model AuteurMotion { model InfoJoRect { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Date de publication d'une lettre rectificative au journal officiel. @@ -261,6 +272,7 @@ model InfoJoRect { model InitiateurActeLegislatif { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) de l'acteur. @@ -281,6 +293,7 @@ model InitiateurActeLegislatif { model Rapporteur { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) du rapporteur. @@ -303,6 +316,7 @@ model Rapporteur { model EtudePlf { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Nom de la mission de l'état à laquelle se rapporte l'étude. @@ -334,6 +348,7 @@ model EtudePlf { model VoteActeLegislatif { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int voteRefUid String? @@ -346,26 +361,9 @@ model VoteActeLegislatif { @@index([voteRefUid]) } -model TexteAssocie { - /// Identifiant unique. - id Int @id @default(autoincrement()) - /// Jeu de données de provenance (numéro de législature) - dataset Int - /// Identifiant unique du texte adopté. - texteAssocieRefUid String? - /// BTA pour Bibard du Texte Adopté ou TAP pour Texte Adopté Provisoire. - typeTexte String? - acteLegislatifRefUid String? - acteLegislatifRef ActeLegislatif? @relation(fields: [acteLegislatifRefUid], references: [uid]) - texteAssocieRef Document? @relation(fields: [texteAssocieRefUid], references: [uid], onDelete: Restrict, onUpdate: Restrict) - - @@index([dataset]) - @@index([acteLegislatifRefUid]) - @@index([texteAssocieRefUid]) -} - model DossierThemes { uid String @id + dateMaj DateTime @default(now()) @updatedAt dossierRefUid String dossierRef Dossier @relation(fields: [dossierRefUid], references: [uid]) labels String[] diff --git a/prisma/models/mandat.prisma b/prisma/models/mandat.prisma index d240ef4..fb4e593 100644 --- a/prisma/models/mandat.prisma +++ b/prisma/models/mandat.prisma @@ -1,6 +1,7 @@ /// Une personne physique peut être mandataire d'un mandat représentatif ou bien d'un mandat dit simple, comme par exemple être membre d'une commission. Un `mandat représentatif `__ est \"une forme de mandat politique qui possède la caractéristique d'être général, libre et non révocable\". model Mandat { uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant de l'acteur qui détient le mandat @@ -60,6 +61,7 @@ model Mandat { model Collaborateur { id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int qualite String @@ -79,6 +81,7 @@ model Collaborateur { model Suppleant { id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int dateDebut DateTime diff --git a/prisma/models/organe.prisma b/prisma/models/organe.prisma index 7b8d2c4..3bcd21b 100644 --- a/prisma/models/organe.prisma +++ b/prisma/models/organe.prisma @@ -1,32 +1,61 @@ /// Il contribue au fonctionnement de l'Etat (par exemple l'Assemblée nationale ou une Délégation parlementaire) model Organe { /// Identifiant unique. - uid String @id + uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int - codeType String + codeType String /// Type d'organe (ex: "Commission permanente") - type String? - libelle String - libelleEdition String? - libelleAbrege String - libelleAbrev String + type String? + libelle String + libelleEdition String? + libelleAbrege String + libelleAbrev String /// Libellé tronquée (e.g. "Gauche Dém. et Rép.") - libelleTronque String? - organeParentRefUid String? - regime String? + libelleTronque String? + organeParentRefUid String? + regime String? /// Chambre parente de l'organe (Assemblée ou Sénat) - chambre String? + chambre String? /// Vrai si l'organe est en cours d'agrément. - actif Boolean? @default(false) - legislature String? - secretaire01 String? - secretaire02 String? - regimeJuridique String? - siteInternet String? - nombreReunionsAnnuelles Int? - nombreMembres Int? @default(0) + actif Boolean? @default(false) + legislature String? + secretaire01 String? + secretaire02 String? + regimeJuridique String? + siteInternet String? + nombreReunionsAnnuelles Int? + nombreMembres Int? @default(0) + + /// Nombre de textes de lois déposées. + nombreTextesLoisDeposes Int @default(0) + + /// Nombre d'amendements proposés. + nombreAmendementsProposes Int @default(0) + + /// Nombre d'interventions en hémicycle. + nombreInterventions Int @default(0) + + /// Nombre de questions. + nombreQuestions Int @default(0) + + /// Taux de cohésion du groupe. + cohesion Int @default(0) + + /// Nombre d'auditions réalisées. + auditionsRealisees Int @default(0) + + /// Nombre de rapports publiés. + rapportsPublies Int @default(0) + + /// Nombre de missions démarrées. + missionsDemarrees Int @default(0) + + /// Nombre de dossiers de loi traités. + dossiersLoiTraites Int @default(0) + positionPolitique String? preseance String? couleurAssociee String? @@ -49,7 +78,6 @@ model Organe { auteurs Auteur[] coSignataires CoSignataireDocument[] dossiers Dossier[] @relation("OrganeMission") - dossiersCommissions Dossier[] @relation("OrganeCommission") documents Document[] etudesPlf EtudePlf[] groupesVotants GroupeVotant[] @@ -61,6 +89,8 @@ model Organe { membresGroupeParlementaire Acteur[] @relation("Acteur_GroupeParlementaire") parlementairesCirconscription Acteur[] @relation("Acteur_Circonscription") communes Commune[] + dossiersCommissionsAN Dossier[] @relation("OrganeANCommission") + dossiersCommissionsSN Dossier[] @relation("OrganeSNCommission") @@index([dataset]) @@index([vecteurRecherche], type: Gin) diff --git a/prisma/models/question.prisma b/prisma/models/question.prisma index ccc76b5..4655ff5 100644 --- a/prisma/models/question.prisma +++ b/prisma/models/question.prisma @@ -2,6 +2,7 @@ model Question { /// Identifiant unique. uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int legislature String @@ -17,6 +18,8 @@ model Question { mandatRefUid String /// Identifiant unique du groupe politique de l'auteur groupeRefUid String + + /// Identifiant unique du ministère interrogé. minIntRefUid String? codeCloture String? libelleCloture String? diff --git a/prisma/models/scrutin.prisma b/prisma/models/scrutin.prisma index a7d675f..395eff2 100644 --- a/prisma/models/scrutin.prisma +++ b/prisma/models/scrutin.prisma @@ -1,7 +1,8 @@ /// Les positions de vote (pour, contre ou abstention) de chaque député pour les `scrutins solennels `__, les déclarations du Gouvernement, les motions de procédure et les autres scrutins publics. model Scrutin { /// Identifiant unique. - uid String @id + uid String @id + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Chambre parente du document (Assemblée ou Sénat) @@ -17,7 +18,7 @@ model Scrutin { /// Numéro unique du vote, relativement à la législature, débutant par 1 et par incrément de 1. On le retrouve aussi à la fin de l'identifiant unique du vote (uid). numero String? /// Objet du vote, toujours identique au champ titre. - objet String? + objet String? /// L'identifiant unique (uid) de l'organe au sein duquel se déroule le vote. Il s'agit toujours de l'Assemblée Nationale mais son uid varie en fonction de la législature. organeRefUid String? /// Numéro de la séance dans la journée. @@ -54,41 +55,47 @@ model Scrutin { libelleTypeVote String? /// La signification de ce champ n'est pas définie. typeMajorite String? - acteLegislatifsRefUid String? + /// Type de l'objet (e.g. amendement, article). + typeObjet TypeObjetScrutin? + /// Numéro de l'objet (e.g. 1, 2, 3, etc.). + numeroTypeObjet Int? + /// Identifiant de l'acte législatif associé au scrutin. + acteLegislatifRefUid String? /// Identifiant unique du dossier législatif dont ce scrutin appartient. dossierRefUid String? - - /// Dossier législatif dont ce scrutin appartient. - dossier Dossier? @relation(fields: [dossierRefUid], references: [uid]) - + /// Identifiant unique du point d'ordre du jour associé. + pointOdjRefUid String? /// Identifiant unique d'un amendement lié à ce scrutin. - amendementRefUid String? - - /// Identifiant unique d'une proposition de loi liée à ce scrutin. - propositionLoiRefUid String? - - amendementRef Amendement? - acteLegislatifsRef ActeLegislatif? @relation(fields: [acteLegislatifsRefUid], references: [uid]) - agendaRef Agenda? @relation(fields: [seanceRefUid], references: [uid]) - organeRef Organe? @relation(fields: [organeRefUid], references: [uid], onDelete: Cascade) - dysfonctionnements Dysfonctionnement[] - groupesVotants GroupeVotant[] - misesAuPoint MiseAuPoint[] - - /// Numéro de l'objet (e.g. 1, 2, 3, etc.). - numeroTypeObjet Int? - - /// Type de l'objet (e.g. amendement, article). - typeObjet TypeObjetScrutin? - votes Vote[] - votesActesLegislatifs VoteActeLegislatif[] + amendementRefUid String? + /// Identifiant de l'article associé + articleRefUid String? + /// Identifiant du document associé au scrutin + documentRefUid String? + + /// Dossier législatif lié au scrutin. + dossierRef Dossier? @relation(fields: [dossierRefUid], references: [uid]) + documentRef Document? @relation(fields: [documentRefUid], references: [uid]) + pointOdjRef PointOdj? @relation(fields: [pointOdjRefUid], references: [uid]) + amendementRef Amendement? + articleRef Subdivision? @relation(fields: [articleRefUid], references: [hash]) + acteLegislatifRef ActeLegislatif? @relation(fields: [acteLegislatifRefUid], references: [uid]) + agendaRef Agenda? @relation(fields: [seanceRefUid], references: [uid]) + organeRef Organe? @relation(fields: [organeRefUid], references: [uid], onDelete: Cascade) + dysfonctionnements Dysfonctionnement[] + groupesVotants GroupeVotant[] + misesAuPoint MiseAuPoint[] + votes Vote[] + votesActesLegislatifs VoteActeLegislatif[] @@index([dataset]) @@index([organeRefUid]) @@index([seanceRefUid]) - @@index([acteLegislatifsRefUid]) - @@index([dateScrutin]) + @@index([pointOdjRefUid]) + @@index([acteLegislatifRefUid]) + @@index([articleRefUid]) + @@index([documentRefUid]) @@index([dossierRefUid]) + @@index([dateScrutin]) } /// Énumération du type de l'objet. @@ -116,6 +123,7 @@ enum TypeObjetScrutin { model GroupeVotant { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Hachage de l'objet @@ -157,6 +165,7 @@ enum PositionVote { model Vote { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int /// Identifiant unique (uid) de l'acteur. @@ -188,6 +197,7 @@ model Vote { model MiseAuPoint { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int acteurRefUid String? @@ -204,6 +214,7 @@ model MiseAuPoint { model Dysfonctionnement { /// Identifiant unique. id Int @id @default(autoincrement()) + dateMaj DateTime @default(now()) @updatedAt /// Jeu de données de provenance (numéro de législature) dataset Int acteurRefUid String? diff --git a/prisma/models/stats.prisma b/prisma/models/stats.prisma index 41b9f3f..f93a01f 100644 --- a/prisma/models/stats.prisma +++ b/prisma/models/stats.prisma @@ -58,6 +58,9 @@ enum StatsType { /// Stats pour les interventions. interventions + /// Stats pour les organes. + organes + /// Stats pour les questions. questions diff --git a/prisma/swagger/json-schema.json b/prisma/swagger/json-schema.json index 5af6136..9041829 100644 --- a/prisma/swagger/json-schema.json +++ b/prisma/swagger/json-schema.json @@ -8,6 +8,16 @@ "type": "string", "description": "Identifiant unique." }, + "senatMatricule": { + "type": [ + "string", + "null" + ] + }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -350,6 +360,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -396,6 +410,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -501,6 +519,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -787,6 +809,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -869,12 +895,6 @@ "type": "string", "description": "Pour les réunions dont xsiType est 'seance_type', c'est à dire une séance publique, chaque point de l'ordre du jour est fixé par la `conférence des présidents `__ et a donc la valeur 'podjSeanceConfPres_type' pour le champ xsiType. Dans tout les autres cas la valeur est 'podjReunion_type'." }, - "actesLegislatifs": { - "type": "array", - "items": { - "$ref": "#/definitions/ActeLegislatif" - } - }, "dossierLegislatif": { "anyOf": [ { @@ -895,6 +915,18 @@ } ] }, + "scrutins": { + "type": "array", + "items": { + "$ref": "#/definitions/Scrutin" + } + }, + "actesLegislatifs": { + "type": "array", + "items": { + "$ref": "#/definitions/ActeLegislatif" + } + }, "interventions": { "type": "array", "items": { @@ -910,6 +942,10 @@ "type": "integer", "description": "Clé primaire." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -929,6 +965,10 @@ "type": "integer", "description": "Clé primaire." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -962,6 +1002,10 @@ "type": "integer", "description": "Clé primaire." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -1028,6 +1072,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -1608,6 +1656,16 @@ "items": { "$ref": "#/definitions/CoSignataireAmendement" } + }, + "subdivisionRef": { + "anyOf": [ + { + "$ref": "#/definitions/Subdivision" + }, + { + "type": "null" + } + ] } } }, @@ -1618,6 +1676,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -1644,6 +1706,32 @@ } } }, + "BatchRuns": { + "type": "object", + "properties": { + "id": { + "type": "integer" + }, + "dateDebut": { + "type": "string", + "format": "date-time" + }, + "dateFin": { + "type": [ + "string", + "null" + ], + "format": "date-time" + }, + "nomTable": { + "type": "string" + }, + "nbLignesAffectees": { + "type": "integer", + "default": 0 + } + } + }, "Commune": { "type": "object", "properties": { @@ -1651,6 +1739,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "hash": { "type": "string", "description": "Hachage de l'objet" @@ -1717,6 +1809,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -1822,6 +1918,10 @@ "id": { "type": "string" }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -1858,6 +1958,10 @@ "id": { "type": "integer" }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -2078,6 +2182,10 @@ "Document": { "type": "object", "properties": { + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -2356,6 +2464,12 @@ } ] }, + "scrutins": { + "type": "array", + "items": { + "$ref": "#/definitions/Scrutin" + } + }, "amendements": { "type": "array", "items": { @@ -2368,6 +2482,12 @@ "$ref": "#/definitions/AmendementCommission" } }, + "actesLegislatifs": { + "type": "array", + "items": { + "$ref": "#/definitions/ActeLegislatif" + } + }, "auteurs": { "type": "array", "items": { @@ -2386,12 +2506,6 @@ "$ref": "#/definitions/EtudePlf" } }, - "textesAssocies": { - "type": "array", - "items": { - "$ref": "#/definitions/TexteAssocie" - } - }, "interventions": { "type": "array", "items": { @@ -2419,6 +2533,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -2469,6 +2587,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -2539,6 +2661,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -2656,11 +2782,29 @@ ], "description": "Ordre de la division dans le document." }, + "nombreAmendements": { + "type": "integer", + "default": 0, + "description": "Le nombre d'amendements liés à cette subdivision." + }, "alineas": { "type": "array", "items": { "$ref": "#/definitions/Alinea" } + }, + "scrutins": { + "type": "array", + "items": { + "$ref": "#/definitions/Scrutin" + } + }, + "amendements": { + "type": "array", + "items": { + "$ref": "#/definitions/Amendement" + }, + "description": "Amendements liés à cette subdivision." } } }, @@ -2715,6 +2859,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -2867,7 +3015,17 @@ } ] }, - "commissionRef": { + "commissionANRef": { + "anyOf": [ + { + "$ref": "#/definitions/Organe" + }, + { + "type": "null" + } + ] + }, + "commissionSNRef": { "anyOf": [ { "$ref": "#/definitions/Organe" @@ -2941,6 +3099,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3277,6 +3439,16 @@ } ] }, + "documentRef": { + "anyOf": [ + { + "$ref": "#/definitions/Document" + }, + { + "type": "null" + } + ] + }, "pointOdj": { "anyOf": [ { @@ -3317,12 +3489,6 @@ "$ref": "#/definitions/Scrutin" } }, - "textesAssocies": { - "type": "array", - "items": { - "$ref": "#/definitions/TexteAssocie" - } - }, "voteRefs": { "type": "array", "items": { @@ -3338,6 +3504,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3381,6 +3551,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3414,6 +3588,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3471,6 +3649,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3514,6 +3696,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3561,6 +3747,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3647,6 +3837,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -3673,52 +3867,16 @@ } } }, - "TexteAssocie": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "Identifiant unique." - }, - "dataset": { - "type": "integer", - "description": "Jeu de données de provenance (numéro de législature)" - }, - "typeTexte": { - "type": [ - "string", - "null" - ], - "description": "BTA pour Bibard du Texte Adopté ou TAP pour Texte Adopté Provisoire." - }, - "acteLegislatifRef": { - "anyOf": [ - { - "$ref": "#/definitions/ActeLegislatif" - }, - { - "type": "null" - } - ] - }, - "texteAssocieRef": { - "anyOf": [ - { - "$ref": "#/definitions/Document" - }, - { - "type": "null" - } - ] - } - } - }, "DossierThemes": { "type": "object", "properties": { "uid": { "type": "string" }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dossierRef": { "$ref": "#/definitions/Dossier" }, @@ -3758,6 +3916,10 @@ "uid": { "type": "string" }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4030,6 +4192,10 @@ "id": { "type": "integer" }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4057,6 +4223,10 @@ "id": { "type": "integer" }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4087,6 +4257,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4187,6 +4361,51 @@ ], "default": 0 }, + "nombreTextesLoisDeposes": { + "type": "integer", + "default": 0, + "description": "Nombre de textes de lois déposées." + }, + "nombreAmendementsProposes": { + "type": "integer", + "default": 0, + "description": "Nombre d'amendements proposés." + }, + "nombreInterventions": { + "type": "integer", + "default": 0, + "description": "Nombre d'interventions en hémicycle." + }, + "nombreQuestions": { + "type": "integer", + "default": 0, + "description": "Nombre de questions." + }, + "cohesion": { + "type": "integer", + "default": 0, + "description": "Taux de cohésion du groupe." + }, + "auditionsRealisees": { + "type": "integer", + "default": 0, + "description": "Nombre d'auditions réalisées." + }, + "rapportsPublies": { + "type": "integer", + "default": 0, + "description": "Nombre de rapports publiés." + }, + "missionsDemarrees": { + "type": "integer", + "default": 0, + "description": "Nombre de missions démarrées." + }, + "dossiersLoiTraites": { + "type": "integer", + "default": 0, + "description": "Nombre de dossiers de loi traités." + }, "positionPolitique": { "type": [ "string", @@ -4306,12 +4525,6 @@ "$ref": "#/definitions/Dossier" } }, - "dossiersCommissions": { - "type": "array", - "items": { - "$ref": "#/definitions/Dossier" - } - }, "documents": { "type": "array", "items": { @@ -4381,6 +4594,18 @@ "items": { "$ref": "#/definitions/Commune" } + }, + "dossiersCommissionsAN": { + "type": "array", + "items": { + "$ref": "#/definitions/Dossier" + } + }, + "dossiersCommissionsSN": { + "type": "array", + "items": { + "$ref": "#/definitions/Dossier" + } } } }, @@ -4391,6 +4616,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4520,6 +4749,10 @@ "type": "string", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4683,7 +4916,39 @@ ], "description": "La signification de ce champ n'est pas définie." }, - "dossier": { + "typeObjet": { + "type": [ + "string", + "null" + ], + "enum": [ + "amendement", + "article", + "motionCensure", + "motionReferendaire", + "motionRejet", + "projetLoi", + "propositionLoi", + "propositionResolution", + "sousAmendement" + ], + "description": "Type de l'objet (e.g. amendement, article)." + }, + "numeroTypeObjet": { + "type": [ + "integer", + "null" + ], + "description": "Numéro de l'objet (e.g. 1, 2, 3, etc.)." + }, + "amendementRefUid": { + "type": [ + "string", + "null" + ], + "description": "Identifiant unique d'un amendement lié à ce scrutin." + }, + "dossierRef": { "anyOf": [ { "$ref": "#/definitions/Dossier" @@ -4693,19 +4958,25 @@ } ] }, - "amendementRefUid": { - "type": [ - "string", - "null" - ], - "description": "Identifiant unique d'un amendement lié à ce scrutin." + "documentRef": { + "anyOf": [ + { + "$ref": "#/definitions/Document" + }, + { + "type": "null" + } + ] }, - "propositionLoiRefUid": { - "type": [ - "string", - "null" - ], - "description": "Identifiant unique d'une proposition de loi liée à ce scrutin." + "pointOdjRef": { + "anyOf": [ + { + "$ref": "#/definitions/PointOdj" + }, + { + "type": "null" + } + ] }, "amendementRef": { "anyOf": [ @@ -4717,7 +4988,17 @@ } ] }, - "acteLegislatifsRef": { + "articleRef": { + "anyOf": [ + { + "$ref": "#/definitions/Subdivision" + }, + { + "type": "null" + } + ] + }, + "acteLegislatifRef": { "anyOf": [ { "$ref": "#/definitions/ActeLegislatif" @@ -4765,31 +5046,6 @@ "$ref": "#/definitions/MiseAuPoint" } }, - "numeroTypeObjet": { - "type": [ - "integer", - "null" - ], - "description": "Numéro de l'objet (e.g. 1, 2, 3, etc.)." - }, - "typeObjet": { - "type": [ - "string", - "null" - ], - "enum": [ - "amendement", - "article", - "motionCensure", - "motionReferendaire", - "motionRejet", - "projetLoi", - "propositionLoi", - "propositionResolution", - "sousAmendement" - ], - "description": "Type de l'objet (e.g. amendement, article)." - }, "votes": { "type": "array", "items": { @@ -4811,6 +5067,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4909,6 +5169,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -4993,6 +5257,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -5032,6 +5300,10 @@ "type": "integer", "description": "Identifiant unique." }, + "dateMaj": { + "type": "string", + "format": "date-time" + }, "dataset": { "type": "integer", "description": "Jeu de données de provenance (numéro de législature)" @@ -5145,6 +5417,7 @@ "acteurs", "amendements", "interventions", + "organes", "questions", "textes" ], @@ -5188,6 +5461,9 @@ "coSignataireAmendement": { "$ref": "#/definitions/CoSignataireAmendement" }, + "batchRuns": { + "$ref": "#/definitions/BatchRuns" + }, "commune": { "$ref": "#/definitions/Commune" }, @@ -5245,9 +5521,6 @@ "voteActeLegislatif": { "$ref": "#/definitions/VoteActeLegislatif" }, - "texteAssocie": { - "$ref": "#/definitions/TexteAssocie" - }, "dossierThemes": { "$ref": "#/definitions/DossierThemes" },