@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
1,058 lines • 61.5 kB
JavaScript
import { C as e, D as t, S as n, b as r, t as i, w as a, x as o } from "./amendements-D3Jr9MQa.js";
import { C as s, Ct as c, Ft as l, S as u, St as d, T as f, U as p, _ as m, _t as h, b as g, bt as _, d as v, f as y, g as ee, gt as b, h as te, ht as x, m as ne, mt as re, p as ie, pt as S, r as C, s as w, t as T, v as ae, vt as E, w as oe, x as se, xt as ce, y as le, yt as ue } from "./questions-CsNQoayp.js";
import { getChangedFilesSinceCommit as D } from "./git.js";
import { z as O } from "zod";
import k from "node:assert";
import A from "fs-extra";
import j from "node:path";
import "glob";
import "node:fs/promises";
//#region src/datasets.ts
var M = /* @__PURE__ */ function(e) {
return e[e.SingleFile = 0] = "SingleFile", e[e.SegmentedFiles = 1] = "SegmentedFiles", e;
}({}), N = /* @__PURE__ */ function(e) {
return e[e.None = 0] = "None", e[e.ActeursEtOrganes = 1] = "ActeursEtOrganes", e[e.Agendas = 2] = "Agendas", e[e.Amendements = 4] = "Amendements", e[e.DossiersLegislatifs = 8] = "DossiersLegislatifs", e[e.Photos = 16] = "Photos", e[e.Scrutins = 32] = "Scrutins", e[e.Questions = 64] = "Questions", e[e.ComptesRendus = 128] = "ComptesRendus", e[e.All = 255] = "All", e;
}({});
Object.keys(N).filter((e) => Number.isNaN(Number(e)) && e !== "None" && e !== "All");
//#endregion
//#region src/file_systems.ts
function* P(e, t = []) {
let n = j.join(e, ...t);
if (A.existsSync(n)) for (let r of A.readdirSync(n)) {
if (r[0] === ".") continue;
let i = j.join(n, r), a = [...t, r];
A.statSync(i).isDirectory() ? yield* P(e, a) : yield a;
}
}
var de = O.enum([
"AdresseMail_Type",
"AdressePostale_Type",
"AdresseSiteWeb_Type",
"AdresseTelephonique_Type"
]), fe = O.object({
civ: S,
prenom: O.string().meta({ description: "Prénom." }),
nom: O.string().meta({ description: "Nom." }),
alpha: O.string().meta({ description: "La signification de ce champ est indéfinie." }),
trigramme: O.string().optional().meta({ description: "La signification de ce champ est indéfinie." })
}).meta({ description: "Identité" }), pe = O.object({
dateNais: o().meta({ description: "Date de naissance." }),
villeNais: O.string().optional().meta({ description: "Ville de naissance." }),
depNais: b.optional().meta({ description: "Département de naissance." }),
paysNais: O.string().optional().meta({ description: "Pays de naissance." })
}), me = O.object({
ident: fe,
infoNaissance: pe.optional(),
dateDeces: o().meta({ description: "Date du décès" })
}).meta({
title: "État civil",
description: "L'état civil est la situation de la personne dans la société, résultat d'une procédure écrite d'identification administrative."
}), he = O.object({
catSocPro: O.string().optional().meta({ description: "Catégorie socio professionelle de l'INSEE." }),
famSocPro: h.optional().meta({ description: "Famille socio professionelle de l'INSEE." })
}), ge = O.object({
libelleCourant: O.string().optional().meta({ description: "Profession." }),
socProcInsee: he.optional()
}).meta({ description: "Profession" }), _e = O.object({
xsiType: de,
uid: O.string().meta({ description: "Identifiant unique." }),
type: O.string().meta({ description: "Détermine l'interprétation des champs **adresseDeRattachement** et **valElec**. Voir aussi le champ **typeLibelle**. Nombre entier." }),
typeLibelle: O.string().meta({ description: "Signification du champ type." }),
poids: O.string().optional().meta({ description: "Détermine un ordre entre les valeurs d'un même type (Téléphone, courriel etc.) pour un acteur donné. Les valeurs dont le poids est le plus petit sont les premières. Nombre entier." }),
intitule: O.string().optional().meta({ description: "Intitulé (par exemple Assemblée nationale)." }),
numeroRue: O.string().optional().meta({ description: "Numéro de rue." }),
nomRue: O.string().optional().meta({ description: "Nom de rue." }),
complementAdresse: O.string().optional().meta({ description: "Complément d'adresse." }),
codePostal: O.string().optional().meta({ description: "Code Postal." }),
ville: O.string().optional().meta({ description: "Ville." }),
adresseDeRattachement: O.string().optional().meta({ description: "Identifiant unique de {@link AdressePostale | l'addresse postale} associée. Uniquement renseigné pour les types Téléphone et Télécopie." }),
valElec: O.string().optional().meta({ description: "Numéro de téléphone ou adresse électronique (courriel, site web, identifiant, etc.)" })
}).meta({
title: "Adresse postale et électronique",
description: "Les adresses postales, numéros de téléphones et les adresses électroniques de l'acteur."
}), ve = O.object({
codeQualite: O.string().optional().meta({ description: "Abrégé de la qualité, unifié entre les {@link CodeTypeOrgane | types d'organes}." }),
libQualite: O.string().meta({ description: "La signification de ce champ est indéfinie." }),
libQualiteSex: O.string().optional().meta({ description: "Titre donné en raison du mandat. (par exemple: Sénateur, Vice-Président, Membre, etc.)" })
}), ye = O.object({
dateDebut: n().meta({ description: "Date de début de la nomination." }),
dateFin: o().meta({ description: "Date de fin de la fonction." }),
suppleantRef: r().meta({ description: "Référence au suppléant" })
}).meta({ description: "Personne physique désignée pour remplacer le mandataire si nécessaire." }), be = O.object({
region: E.optional().meta({ description: "Région de la cirsconscription du député. Uniquement si le type de territoire est Métropolitain ou Dom." }),
regionType: c.optional(),
departement: b.optional().meta({ description: "Si le type de territoire est Métropolitain ou Dom: {@link https://fr.wikipedia.org/wiki/D%C3%A9partement_fran%C3%A7ais#D%C3%A9nomination_des_d%C3%A9partements | nom du département} de la cirsconscription du député. Si le type de territoire est \"Collectivités d'outre-mer et Nouvelle-Calédonie\": nom de la collectivité." }),
numDepartement: O.string().optional().meta({ description: "{@link https://fr.wikipedia.org/wiki/D%C3%A9partement_fran%C3%A7ais#Codification | Numéro du département} de la cirsconscription du député. Uniquement si le type de territoire n'est pas \"Français établis hors de France\"." }),
numCirco: O.string().optional().meta({ description: "Numéro de la {@link https://fr.wikipedia.org/wiki/Circonscriptions_l%C3%A9gislatives_fran%C3%A7aises | circonscription du député}." })
}).meta({ description: "Lieu" }), xe = O.object({
lieu: be,
causeMandat: O.string().optional().meta({ description: "Élection ou nommination à l'origine du mandat (par exemple: élections générales, remplacement d'un député nommé au Gouvernement, etc.)" }),
refCirconscription: O.string().optional().meta({ description: "La signification de ce champ est indéfinie." })
}), Se = O.object({
qualite: S.optional(),
prenom: O.string().meta({ description: "Prénom." }),
nom: O.string().meta({ description: "Nom." })
}).meta({ description: "Collaborateur" }), Ce = O.object({
datePriseFonction: o().meta({ description: "Date de la prise de fonction." }),
causeFin: O.string().optional().meta({ description: "Cause de la fin du mandat (par exemple: Fin de législature, Élection au Sénat, etc.)" }),
premiereElection: O.string().optional().meta({ description: "1 s'il s'agit d'une première élection, 0 sinon" }),
placeHemicycle: O.string().optional().meta({ description: "Numéro de la place du député dans {@link https://fr.wikipedia.org/wiki/H%C3%A9micycle | l'hémicycle}" }),
mandatRemplaceRef: O.string().optional().meta({ description: "Identifiant unique (uid) du mandat remplacé par ce mandat dans le cas d'une suppléance." }),
matriculeVote: O.string().optional()
}).meta({ description: "Détails concernant uniquement les {@link https://fr.wikipedia.org/wiki/Mandature | mandats représentatifs}." }), we = O.object({
xsiType: ue.optional(),
uid: t().meta({ description: "Identifiant unique du mandat" }),
acteurRef: r().meta({ description: "Référence à l'acteur" }),
legislature: O.string().optional().meta({ description: "Numéro de {@link https://fr.wikipedia.org/wiki/Liste_des_l%C3%A9gislatures_fran%C3%A7aises | la législature} sous laquelle a été créé l'organe. Nombre entier." }),
typeOrgane: x,
dateDebut: n().meta({ description: "Date de début de la nomination de l'acteur." }),
datePublication: o().meta({ description: "Date de publication de la nomination au journal officiel." }),
dateFin: o().meta({ description: "Date de fin du mandat." }),
preseance: O.string().optional().meta({ description: "Plus le mandat est important, plus la préséance est proche de 1. Nombre entier." }),
nominPrincipale: O.string().meta({ description: "1 pour le mandat principal, 0 sinon. Si deux mandats pour un même organe coïncident dans le temps (c'est à dire que les intervalles de temps entre leurs dates de début et de fin ont une intersection), alors le mandat principal est celui dont le champ préséance a la plus petite valeur." }),
infosQualite: ve,
organesRefs: O.array(a()).meta({ description: "Identifiants uniques (uid) des {@link Organe | organes} au sein desquels le mandat est exercé." }),
libelle: O.string().optional().meta({ description: "Libellé de la nomination. Uniquement pour les {@link http://www2.assemblee-nationale.fr/deputes/liste/deputes-en-mission | députés en mission auprès du gouvernement}." }),
missionSuivanteRef: O.string().optional().meta({ description: "Identifiant unique (uid) du mandat suivant. Uniquement pour les {@link http://www2.assemblee-nationale.fr/deputes/liste/deputes-en-mission | députés en mission auprès du gouvernement}." }),
missionPrecedenteRef: O.string().optional().meta({ description: "Identifiant unique (uid) du mandat précédent. Uniquement pour les {@link http://www2.assemblee-nationale.fr/deputes/liste/deputes-en-mission | députés en mission auprès du gouvernement}." }),
suppleant: ye.optional().meta({ description: "Personne physique désignée pour remplacer le mandataire si nécessaire." }),
election: xe.optional(),
mandature: Ce.optional().meta({ description: "Détails concernant uniquement les {@link https://fr.wikipedia.org/wiki/Mandature | mandats représentatifs}." }),
collaborateurs: O.array(Se).optional().meta({ description: "Liste des collaborateurs attachés au {@link https://fr.wikipedia.org/wiki/Mandat_repr%C3%A9sentatif | mandat représentatif}" })
}).meta({
title: "Mandat",
description: "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 {@link https://fr.wikipedia.org/wiki/Mandat_repr%C3%A9sentatif | 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\"."
}), Te = O.object({
chemin: O.string(),
cheminMosaique: O.string(),
hauteur: O.number(),
largeur: O.number(),
xMosaique: O.number(),
yMosaique: O.number()
}), F = O.object({
schemaVersion: O.string().optional(),
uid: t().meta({ description: "Identifiant unique de l'acteur" }),
etatCivil: me,
profession: ge.optional(),
uriHatvp: O.string().optional().meta({ description: "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." }),
adresses: O.array(_e).optional().meta({ description: "Les adresses postales, numéros de téléphones et les adresses électroniques de l'acteur." }),
mandats: O.array(we).optional().meta({ description: "Les mandats ({@link https://fr.wikipedia.org/wiki/Mandat_repr%C3%A9sentatif | représentatifs} ou {@link https://fr.wikipedia.org/wiki/Mandat_imp%C3%A9ratif | impératifs}) passés ou présents." }),
photo: Te.optional(),
deports: O.array(O.lazy(() => R)).optional()
}).meta({
title: "Acteur",
description: "Personne physique ayant été élue ou nommée dans {@link Organe | un organe}."
}), Ee = O.object({
dateDebut: o().meta({ description: "Date de création de l'organe." }),
dateAgrement: o().meta({ description: "Date de publication de la création de l'organe parlementaire au journal officiel." }),
dateFin: o().meta({ description: "Date de clôture de l'organe." })
}).meta({
title: "Début, fin et agrément",
description: "L'intervalle de temps durant lequel un organe existe."
}), De = O.object({
secretaire01: O.string().optional().meta({ description: "Civilité Prénom Nom." }),
secretaire02: O.string().optional().meta({ description: "Civilité Prénom Nom." })
}).meta({ description: "Le rôle du secrétaire administratif est d'assister le président dans tous les aspects du fonctionnement du groupe : à ce titre, il est notamment chargé de l'organisation matérielle des activités du groupe (dont les missions et les réceptions) et établit les comptes rendus de ses réunions. Cette définition {@link http://www2.assemblee-nationale.fr/decouvrir-l-assemblee/role-et-pouvoirs-de-l-assemblee-nationale/les-relations-interparlementaires/les-groupes-d-amitie | du secrétaire administratif d'un groupe d'amitié} se rapproche de celle des autres organes ({@link http://www.assemblee-nationale.fr/connaissance/reglement.pdf | Groupes Parlementaires} Article 20, etc.)" }), Oe = O.object({
codeNatureDep: re.optional(),
code: O.string().optional(),
libelle: b.optional()
}), ke = O.object({
type: c.optional(),
libelle: E.optional()
}), Ae = O.object({
region: ke,
departement: Oe
}), I = O.lazy(() => O.object({
schemaVersion: O.string().optional(),
xsiType: _.optional(),
uid: t().meta({ description: "Identifiant unique de l'organe" }),
codeType: x,
libelle: O.string().meta({ description: "Nom complet." }),
libelleEdition: O.string().optional().meta({ description: "Le contenu de ce champ n'est pas défini." }),
libelleAbrege: O.string().meta({ description: "Nom court." }),
libelleAbrev: O.string().meta({ description: "Abréviation en majuscule." }),
viMoDe: Ee.optional(),
organeParentRef: a().optional().meta({ description: "Identifiant unique (uid) de l'organe parent. Le gouvernement est l'organe parent des ministères, secrétariats d'état et du premier ministre. Une commission permanente (.codeType == COMPER) peut être parente d'une mission d'information (.codeType == MISINFO)" }),
organeParent: I.optional(),
organePrecedentRef: a().optional(),
organePrecedent: I.optional(),
regime: d.optional(),
legislature: O.string().optional().meta({ description: "Numéro de {@link https://fr.wikipedia.org/wiki/Liste_des_l%C3%A9gislatures_fran%C3%A7aises | la législature} sous laquelle a été créé l'organe. Nombre entier." }),
regimeJuridique: O.string().optional().meta({ description: "Référence en texte libre au texte législatif et réglementaire qui a créé l'organe. Il est possible de le retrouver en faisant une recherche sur https://www.legifrance.gouv.fr/. Uniquement renseigné pour les organismes extra parlementaires (dont le codeType est égal à ORGEXTPARL)." }),
siteInternet: O.string().optional().meta({ description: "Site internet de l'organe." }),
nombreReunionsAnnuelles: O.string().optional().meta({ description: "Nombre de réunions annuelles. Nombre entier." }),
secretariat: De.optional(),
numero: O.string().optional(),
lieu: Ae.optional(),
positionPolitique: ce.optional(),
preseance: O.string().optional().meta({ description: "Plus le groupe politique est important, plus la préséance est proche de 1. Nombre entier. Uniquement renseigné pour les groupes politiques (dont le codeType est égal à GP)." }),
couleurAssociee: O.string().optional().meta({ description: "Couleur suggérée pour l'affichage, sous la forme #rrggbb." }),
listePays: O.array(O.string()).optional().meta({ description: "Le contenu de ce champ n'est pas défini." })
}).meta({
title: "Organe",
description: "Il contribue au fonctionnement de l'Etat (par exemple l'Assemblée nationale ou une Délégation parlementaire)"
})), L = O.object({
code: O.string(),
libelle: O.string()
}), je = O.object({
type: L,
referenceTextuelle: O.string()
}), R = O.object({
uid: t().meta({ description: "Identifiant unique du déport" }),
chronotag: O.string(),
legislature: O.string(),
refActeur: r().meta({ description: "Référence à l'acteur" }),
dateCreation: n(),
datePublication: o(),
portee: L,
lecture: L,
instance: L,
cible: je,
explication: O.string().optional()
}), Me = O.object({
organes: O.array(I),
acteurs: O.array(F)
});
function Ne(e) {
let t = F.safeParse(JSON.parse(e));
if (!t.success) throw Error(z("ActeurClean", t.error));
return t.data;
}
function Pe(e) {
let t = I.safeParse(JSON.parse(e));
if (!t.success) throw Error(z("OrganeClean", t.error));
return t.data;
}
function Fe(e) {
let t = R.safeParse(JSON.parse(e));
if (!t.success) throw Error(z("DeportClean", t.error));
return t.data;
}
function Ie(e) {
let t = Me.safeParse(JSON.parse(e));
if (!t.success) throw Error(z("ActeursEtOrganesClean", t.error));
return t.data;
}
function Le(e) {
return JSON.stringify(e, null, 2);
}
function Re(e) {
return JSON.stringify(e, null, 2);
}
function ze(e) {
return JSON.stringify(e, null, 2);
}
function Be(e) {
return JSON.stringify(e, null, 2);
}
function z(e, t) {
return `Invalid ${e}:\n${t.issues.map((e) => ` - ${e.path.join(".")}: ${e.message}`).join("\n")}`;
}
var B = {
toActeur: Ne,
acteurToJson: Le,
toOrgane: Pe,
organeToJson: Re,
toDeport: Fe,
deportToJson: ze,
toActeursEtOrganes: Ie,
acteursEtOrganesToJson: Be
}, V = O.lazy(() => O.object({
_: O.string().optional(),
id_syceron: O.string().optional(),
stime: O.string().optional(),
sup: O.string().optional(),
lienAdt: O.array(V).optional()
}).meta({ description: "Texte de la séance du débat." })), H = O.object({
nom: O.string().optional(),
id: O.string().optional(),
qualite: O.string().optional()
}).meta({ description: "Orateur de la séance du débat." }), Ve = O.object({ orateur: e(H) }), He = O.union([
Ve,
e(H),
H,
O.string()
]), U = O.lazy(() => O.object({
id_preparation: O.string().optional(),
ordre_absolu_seance: O.string().optional(),
code_grammaire: O.string().optional(),
sommaire: O.string().optional(),
id_syceron: O.string().optional(),
valeur_ptsodj: O.string().optional(),
nivpoint: O.string().optional(),
ordinal_prise: O.string().optional(),
code_style: O.string().optional(),
code_parole: O.string().optional(),
valeur: O.string().optional(),
orateurs: He.optional(),
texte: O.union([V, O.string()]).optional(),
paragraphe: e(U).optional(),
interExtraction: e(U).optional(),
point: e(U).optional(),
structure: O.string().optional(),
id_acteur: O.string().optional(),
id_mandat: O.string().optional(),
id_nomination_oe: O.string().optional(),
id_nomination_op: O.string().optional(),
orateur: O.string().optional(),
bibard: O.string().optional(),
art: O.string().optional(),
adt: O.string().optional(),
ssadt: O.string().optional(),
roledebat: O.string().optional(),
changementPresidence: e(U).optional(),
type_debat: O.string().optional(),
decision: p.optional().meta({ description: "Décision prise à l'issue du point de débat." }),
ouvertureSeance: U.optional(),
qualite: O.string().optional(),
nom_orateur: O.string().optional()
}).meta({ description: "Point de la séance du débat." })), Ue = O.object({ point: U }), We = O.object({
journee: O.string(),
session: O.string()
}), Ge = O.object({
quantiemes: We,
ouvertureSeance: e(U).optional(),
point: e(U),
finSeance: Ue.optional(),
paragraphe: e(U).optional()
}).meta({ description: "Contenu de la séance du débat." }), Ke = O.object({
id_syceron: O.string(),
intitule: O.string().optional(),
sousIntitule: O.string().optional(),
type_debat: O.string().optional()
}), W = O.lazy(() => O.object({
valeur_pts_odj: O.string().optional(),
titreStruct: Ke,
para: e(O.union([
V,
O.string(),
O.unknown()
])).optional(),
sommaire2: e(W).optional(),
sommaire3: e(W).optional(),
presidentSeance: e(V).optional(),
type_debat: O.string().optional()
}).meta({ description: "Sommaire de la séance du débat." })), qe = O.object({
presidentSeance: V.meta({ description: "Président de la séance." }),
sommaire1: e(W).meta({ description: "Premier niveau de sommaire." }),
sommaire3: e(W).optional().meta({ description: "Troisième niveau de sommaire." }),
sommaire2: e(W).optional().meta({ description: "Second niveau de sommaire." }),
para: e(V).optional().meta({ description: "Paragraphe de texte libre dans le sommaire." })
}).meta({ description: "Sommaire de la séance du débat." }), Je = O.object({
dateSeance: O.string(),
dateSeanceJour: O.string(),
numSeanceJour: O.string(),
numSeance: O.string(),
typeAssemblee: O.string(),
legislature: O.string(),
session: O.string(),
nomFichierJo: O.string(),
validite: O.string(),
etat: O.string(),
diffusion: O.string(),
version: O.string(),
environnement: O.string(),
heureGeneration: O.iso.datetime({ offset: !0 }).optional(),
sommaire: qe
}).meta({ description: "Données de la séance du débat." }), G = O.object({
schemaVersion: O.string().optional(),
uid: t().meta({ description: "Identifiant unique du compte rendu" }),
seanceRef: O.string(),
sessionRef: O.string(),
metadonnees: Je,
contenu: Ge,
videoUrl: O.string().optional(),
videoTimecode: O.number().optional()
}).meta({
title: "Débat",
description: "Compte rendu des débats en séance."
}), Ye = O.object({ comptesRendus: O.array(G) });
function Xe(e) {
let t = G.safeParse(JSON.parse(e));
if (!t.success) throw Error(K("CompteRenduClean", t.error));
return t.data;
}
function Ze(e) {
let t = Ye.safeParse(JSON.parse(e));
if (!t.success) throw Error(K("ComptesRendusClean", t.error));
return t.data;
}
function Qe(e) {
return JSON.stringify(e, null, 2);
}
function $e(e) {
return JSON.stringify(e, null, 2);
}
function K(e, t) {
return `Invalid ${e}:\n${t.issues.map((e) => ` - ${e.path.join(".")}: ${e.message}`).join("\n")}`;
}
var q = {
toCompteRendu: Xe,
compteRenduToJson: Qe,
toComptesRendus: Ze,
comptesRendusToJson: $e
}, et = O.object({ texte: O.string().optional() }), tt = O.object({
libelle: O.string(),
dossierRef: O.string()
}), nt = O.object({
libelle: O.string(),
dossierLegislatif: tt.optional()
}), rt = O.object({
code: ae,
libelle: g
}), it = O.object({
codeTypeVote: le,
libelleTypeVote: se,
typeMajorite: f.meta({ description: "La signification de ce champ n'est pas définie." })
}), J = O.object({
pour: O.string().meta({ description: "Nombre total de votes pour." }),
contre: O.string().meta({ description: "Nombre total de votes contre." }),
abstentions: O.string().optional().meta({ description: "Nombre total d'abstentions." }),
nonVotants: O.string().optional().meta({ description: "Nombre total de non votants" }),
nonVotantsVolontaires: O.string().optional().meta({ description: "Nombre total de non votants volontaires." })
}), at = O.object({
nombreVotants: O.string().meta({ description: "Nombre de votants, c'est à dire de {@link http://www2.assemblee-nationale.fr/decouvrir-l-assemblee/role-et-pouvoirs-de-l-assemblee-nationale/les-fonctions-de-l-assemblee-nationale/les-fonctions-legislatives/les-votes-a-l-assemblee-nationale | sièges occupés dans l'hémicycle}." }),
suffragesExprimes: O.string().meta({ description: "Nombre de suffrages exprimés." }),
nbrSuffragesRequis: O.string().meta({ description: "Nombre de suffrages requis, le {@link http://www2.assemblee-nationale.fr/decouvrir-l-assemblee/role-et-pouvoirs-de-l-assemblee-nationale/les-fonctions-de-l-assemblee-nationale/les-fonctions-legislatives/les-votes-a-l-assemblee-nationale | cas échéant}." }),
annonce: g,
decompte: J
}), Y = O.object({
acteurRef: r().meta({ description: "Référence à l'acteur votant" }),
mandatRef: O.string(),
parDelegation: O.boolean().optional(),
numPlace: O.number().optional(),
causePositionVote: m.optional()
}), ot = O.object({
nonVotants: O.array(Y).optional(),
pour: O.array(Y).optional(),
contre: O.array(Y).optional(),
abstentions: O.array(Y).optional()
}), st = O.object({
positionMajoritaire: oe,
decompteVoix: J,
decompteNominatif: ot
}), ct = O.object({
organeRef: a(),
nombreMembresGroupe: O.string(),
vote: st
}), lt = O.object({
organeRef: a(),
groupes: O.array(ct)
}), ut = O.object({
nonVotants: O.array(Y).optional(),
pour: O.array(Y).optional(),
contre: O.array(Y).optional(),
abstentions: O.array(Y).optional(),
nonVotantsVolontaires: O.array(Y).optional()
}), dt = O.object({
nonVotants: O.array(Y).optional(),
pour: O.array(Y).optional(),
contre: O.array(Y).optional(),
abstentions: O.array(Y).optional(),
nonVotantsVolontaires: O.array(Y).optional(),
dysfonctionnement: ut.optional()
}), ft = O.object({
schemaVersion: O.string().optional(),
uid: t(),
numero: O.string().meta({ description: "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)." }),
organeRef: a().meta({ description: "L'identifiant unique (uid) de l'{@link Organe | 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." }),
legislature: O.string().meta({ description: "Numéro de {@link https://fr.wikipedia.org/wiki/Liste_des_l%C3%A9gislatures_fran%C3%A7aises | la législature} sous laquelle a été créé le scrutin. Nombre entier." }),
sessionRef: O.string().meta({ description: "Le contenu de ce champ n'est pas défini." }),
seanceRef: O.string().meta({ description: "Identifiant unique (uid) de l'entrée de l'{@link Reunion | agenda} correspondant au moment ou le vote a lieu." }),
dateScrutin: n().meta({ description: "Date à laquelle le vote a eu lieu." }),
quantiemeJourSeance: O.string().meta({ description: "Numéro de la séance dans la journée." }),
typeVote: it,
sort: rt,
titre: O.string().meta({ description: "Objet du vote." }),
demandeur: et,
objet: nt,
modePublicationDesVotes: s.meta({ description: "La signification de ce champ n'est pas définie." }),
syntheseVote: at,
ventilationVotes: lt,
miseAuPoint: dt.optional(),
lieuVote: u.optional()
}), pt = O.object({ scrutins: O.array(ft) });
function mt(e) {
let t = ft.safeParse(JSON.parse(e));
if (!t.success) throw Error(vt("ScrutinClean", t.error));
return t.data;
}
function ht(e) {
let t = pt.safeParse(JSON.parse(e));
if (!t.success) throw Error(vt("ScrutinsClean", t.error));
return t.data;
}
function gt(e) {
return JSON.stringify(e, null, 2);
}
function _t(e) {
return JSON.stringify(e, null, 2);
}
function vt(e, t) {
return `Invalid ${e}:\n${t.issues.map((e) => ` - ${e.path.join(".")}: ${e.message}`).join("\n")}`;
}
var X = {
toScrutin: mt,
scrutinToJson: gt,
toScrutins: ht,
scrutinsToJson: _t
}, Z = {
acteursEtOrganes: [
{
filename: "AMO10_deputes_actifs_mandats_actifs_organes_XVII.json",
name: "AMO10_deputes_actifs_mandats_actifs_organes_XVII",
ignoreForWeb: !0,
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Députés actifs et organes de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/amo/deputes_actifs_mandats_actifs_organes/AMO10_deputes_actifs_mandats_actifs_organes.json.zip"
},
{
filename: "AMO10_deputes_actifs_mandats_actifs_organes_XVI.json",
name: "AMO10_deputes_actifs_mandats_actifs_organes_XVI",
ignoreForWeb: !0,
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Députés actifs et organes de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/amo/deputes_actifs_mandats_actifs_organes/AMO10_deputes_actifs_mandats_actifs_organes.json.zip"
},
{
filename: "AMO10_deputes_actifs_mandats_actifs_organes_XV.json",
name: "AMO10_deputes_actifs_mandats_actifs_organes_XV",
ignoreForWeb: !0,
legislature: l.Quinze,
repairZip: $,
structure: M.SegmentedFiles,
title: "Députés actifs et organes de la XVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/amo/deputes_actifs_mandats_actifs_organes/AMO10_deputes_actifs_mandats_actifs_organes_XV.json.zip"
},
{
filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XVII.json",
name: "AMO20_dep_sen_min_tous_mandats_et_organes_XVII",
ignoreForWeb: !0,
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Acteurs et organes de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/amo/deputes_senateurs_ministres_legislature/AMO20_dep_sen_min_tous_mandats_et_organes.json.zip"
},
{
filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XVI.json",
name: "AMO20_dep_sen_min_tous_mandats_et_organes_XVI",
ignoreForWeb: !0,
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Acteurs et organes de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/amo/deputes_senateurs_ministres_legislature/AMO20_dep_sen_min_tous_mandats_et_organes.json.zip"
},
{
filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XV.json",
name: "AMO20_dep_sen_min_tous_mandats_et_organes_XV",
ignoreForWeb: !0,
legislature: l.Quinze,
repairZip: $,
structure: M.SegmentedFiles,
title: "Acteurs et organes de la XVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/amo/deputes_senateurs_ministres_legislature/AMO20_dep_sen_min_tous_mandats_et_organes_XV.json.zip"
},
{
filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XIV.json",
name: "AMO20_dep_sen_min_tous_mandats_et_organes_XIV",
ignoreForWeb: !0,
legislature: l.Quatorze,
structure: M.SingleFile,
title: "Acteurs et organes de la XIVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/14/amo/deputes_senateurs_ministres_legislatures_XIV/AMO20_dep_sen_min_tous_mandats_et_organes_XIV.json.zip"
},
{
filename: "AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json",
name: "AMO30_tous_acteurs_tous_mandats_tous_organes_historique",
legislature: l.All,
repairZip: $,
structure: M.SegmentedFiles,
title: "Historique de tous les acteurs et organes depuis la XIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/amo/tous_acteurs_mandats_organes_xi_legislature/AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json.zip"
},
{
filename: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XVII.json",
name: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XVII",
ignoreForWeb: !0,
legislature: l.DixSept,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.mkdir(n), await A.pathExists(j.join(t, `${e.filename}.temp`, "acteur")) && await A.move(j.join(t, `${e.filename}.temp`, "acteur"), j.join(n, "acteur")), await A.move(j.join(t, `${e.filename}.temp`, "organe"), j.join(n, "organe"));
},
structure: M.SegmentedFiles,
title: "Députés actifs et organes de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/amo/deputes_actifs_mandats_actifs_organes_divises/AMO40_deputes_actifs_mandats_actifs_organes_divises.json.zip"
},
{
filename: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XVI.json",
name: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XVI",
ignoreForWeb: !0,
legislature: l.Seize,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.mkdir(n), await A.pathExists(j.join(t, `${e.filename}.temp`, "acteur")) && await A.move(j.join(t, `${e.filename}.temp`, "acteur"), j.join(n, "acteur")), await A.move(j.join(t, `${e.filename}.temp`, "organe"), j.join(n, "organe"));
},
structure: M.SegmentedFiles,
title: "Députés actifs et organes de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/amo/deputes_actifs_mandats_actifs_organes_divises/AMO40_deputes_actifs_mandats_actifs_organes_divises.json.zip"
},
{
filename: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XV.json",
name: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XV",
ignoreForWeb: !0,
legislature: l.Quinze,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.mkdir(n), await A.move(j.join(t, `${e.filename}.temp`, "acteur"), j.join(n, "acteur")), await A.move(j.join(t, `${e.filename}.temp`, "organe"), j.join(n, "organe"));
},
structure: M.SegmentedFiles,
title: "Députés actifs et organes de la XVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/amo/deputes_actifs_mandats_actifs_organes_divises/AMO40_deputes_actifs_mandats_actifs_organes_divises_XV.json.zip"
},
{
filename: "AMO50_acteurs_mandats_organes_divises_XVII.json",
name: "AMO50_acteurs_mandats_organes_divises_XVII",
ignoreForWeb: !0,
legislature: l.DixSept,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.mkdir(n), await A.move(j.join(t, `${e.filename}.temp`, "mandat"), j.join(n, "mandat")), await A.move(j.join(t, `${e.filename}.temp`, "acteur"), j.join(n, "acteur")), await A.move(j.join(t, `${e.filename}.temp`, "organe"), j.join(n, "organe"));
},
structure: M.SegmentedFiles,
title: "Acteurs, mandats et organes de la XVIIème législature (fichiers séparés, y compris mandats)",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/amo/acteurs_mandats_organes_divises/AMO50_acteurs_mandats_organes_divises.json.zip"
},
{
filename: "AMO50_acteurs_mandats_organes_divises_XVI.json",
name: "AMO50_acteurs_mandats_organes_divises_XVI",
ignoreForWeb: !0,
legislature: l.Seize,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.mkdir(n), await A.move(j.join(t, `${e.filename}.temp`, "mandat"), j.join(n, "mandat")), await A.move(j.join(t, `${e.filename}.temp`, "acteur"), j.join(n, "acteur")), await A.move(j.join(t, `${e.filename}.temp`, "organe"), j.join(n, "organe"));
},
structure: M.SegmentedFiles,
title: "Acteurs, mandats et organes de la XVIème législature (fichiers séparés, y compris mandats)",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/amo/acteurs_mandats_organes_divises/AMO50_acteurs_mandats_organes_divises.json.zip"
},
{
filename: "AMO50_acteurs_mandats_organes_divises_XV.json",
name: "AMO50_acteurs_mandats_organes_divises_XV",
ignoreForWeb: !0,
legislature: l.Quinze,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.mkdir(n), await A.move(j.join(t, `${e.filename}.temp`, "mandat"), j.join(n, "mandat")), await A.move(j.join(t, `${e.filename}.temp`, "acteur"), j.join(n, "acteur")), await A.move(j.join(t, `${e.filename}.temp`, "organe"), j.join(n, "organe"));
},
structure: M.SegmentedFiles,
title: "Acteurs, mandats et organes de la XVème législature (fichiers séparés, y compris mandats)",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/amo/acteurs_mandats_organes_divises/AMO50_acteurs_mandats_organes_divises_XV.json.zip"
}
],
agendas: [
{
filename: "Agenda_XVII.json",
name: "Agenda_XVII",
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Agenda de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/vp/reunions/Agenda.json.zip"
},
{
filename: "Agenda_XVI.json",
name: "Agenda_XVI",
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Agenda de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/vp/reunions/Agenda.json.zip"
},
{
filename: "Agenda_XV.json",
name: "Agenda_XV",
legislature: l.Quinze,
repairZip: $,
structure: M.SegmentedFiles,
title: "Agenda de la XVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/vp/reunions/Agenda_XV.json.zip"
},
{
filename: "Agenda_XIV.json",
name: "Agenda_XIV",
legislature: l.Quatorze,
structure: M.SingleFile,
title: "Agenda de la XIVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/14/vp/reunions/Agenda_XIV.json.zip"
}
],
amendements: [
{
filename: "Amendements_XVII.json",
name: "Amendements_XVII",
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Amendements de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/loi/amendements_div_legis/Amendements.json.zip"
},
{
filename: "Amendements_XVI.json",
name: "Amendements_XVI",
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Amendements de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/loi/amendements_div_legis/Amendements.json.zip"
},
{
filename: "Amendements_XV.json",
name: "Amendements_XV",
legislature: l.Quinze,
repairZip: $,
structure: M.SegmentedFiles,
title: "Amendements de la XVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/loi/amendements_legis/Amendements_XV.json.zip"
}
],
dossiersLegislatifs: [
{
filename: "Dossiers_Legislatifs_XVII.json",
name: "Dossiers_Legislatifs_XVII",
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Dossiers législatifs de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/loi/dossiers_legislatifs/Dossiers_Legislatifs.json.zip"
},
{
filename: "Dossiers_Legislatifs_XVI.json",
name: "Dossiers_Legislatifs_XVI",
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Dossiers législatifs de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/loi/dossiers_legislatifs/Dossiers_Legislatifs.json.zip"
},
{
filename: "Dossiers_Legislatifs_XV.json",
name: "Dossiers_Legislatifs_XV",
legislature: l.Quinze,
repairZip: $,
structure: M.SegmentedFiles,
title: "Dossiers législatifs de la XVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/loi/dossiers_legislatifs/Dossiers_Legislatifs_XV.json.zip"
},
{
filename: "Dossiers_Legislatifs_XIV.json",
name: "Dossiers_Legislatifs_XIV",
legislature: l.Quatorze,
structure: M.SingleFile,
title: "Dossiers législatifs de la XIVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/14/loi/dossiers_legislatifs/Dossiers_Legislatifs_XIV.json.zip"
}
],
scrutins: [
{
filename: "Scrutins_XVII.json",
name: "Scrutins_XVII",
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Scrutins de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/loi/scrutins/Scrutins.json.zip"
},
{
filename: "Scrutins_XVI.json",
name: "Scrutins_XVI",
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Scrutins de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/loi/scrutins/Scrutins.json.zip"
},
{
filename: "Scrutins_XV.json",
name: "Scrutins_XV",
legislature: l.Quinze,
repairZip: $,
structure: M.SegmentedFiles,
title: "Scrutins de la XVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/15/loi/scrutins/Scrutins_XV.json.zip"
},
{
filename: "Scrutins_XIV.json",
name: "Scrutins_XIV",
legislature: l.Quatorze,
structure: M.SingleFile,
title: "Scrutins de la XIVème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/14/loi/scrutins/Scrutins_XIV.json.zip"
}
],
questions: [
{
filename: "Questions_ecrites_XVII.json",
name: "Questions_ecrites_XVII",
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Questions écrites de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/questions/questions_ecrites/Questions_ecrites.json.zip"
},
{
filename: "Questions_ecrites_XVI.json",
name: "Questions_ecrites_XVI",
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Questions écrites de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/questions/questions_ecrites/Questions_ecrites.json.zip"
},
{
filename: "Questions_gouvernement_XVII.json",
name: "Questions_gouvernement_XVII",
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Questions au gouvernement de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/questions/questions_gouvernement/Questions_gouvernement.json.zip"
},
{
filename: "Questions_gouvernement_XVI.json",
name: "Questions_gouvernement_XVI",
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Questions au gouvernement de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/questions/questions_gouvernement/Questions_gouvernement.json.zip"
},
{
filename: "Questions_orales_XVII.json",
name: "Questions_orales_XVII",
legislature: l.DixSept,
repairZip: $,
structure: M.SegmentedFiles,
title: "Questions orales sans débats de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/questions/questions_orales_sans_debat/Questions_orales_sans_debat.json.zip"
},
{
filename: "Questions_orales_XVI.json",
name: "Questions_orales_XVI",
legislature: l.Seize,
repairZip: $,
structure: M.SegmentedFiles,
title: "Questions orales sans débats de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/questions/questions_orales_sans_debat/Questions_orales_sans_debat.json.zip"
}
],
comptesRendus: [
{
filename: "Comptes_Rendus_Seances_XVII.xml",
name: "Comptes_Rendus_Seances_XVII",
legislature: l.DixSept,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.move(j.join(t, `${e.filename}.temp`, "xml"), n);
},
structure: M.SegmentedFiles,
title: "Comptes rendus des séances publiques de la XVIIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/17/vp/syceronbrut/syseron.xml.zip"
},
{
filename: "Comptes_Rendus_Seances_XVI.xml",
name: "Comptes_Rendus_Seances_XVI",
legislature: l.Seize,
repairZip: async (e, t) => {
let n = j.join(t, e.filename);
await A.pathExists(n) && await A.remove(n), await A.move(j.join(t, `${e.filename}.temp`, "xml"), n);
},
structure: M.SegmentedFiles,
title: "Comptes rendus des séances publiques de la XVIème législature",
url: "https://data.assemblee-nationale.fr/static/openData/repository/16/vp/syceronbrut/syseron.xml.zip"
},
{
filename: "Comptes_Rendus_Commissions_XVII.xml",
name: "Comptes_Rendus_Commissions_XVII",
legislature: l.DixSept,
structure: M.SegmentedFiles,
title: "Comptes rendus des commissions de la XVIIème législature"
}
]
};
function* Q(e, t, n, r, i, { log: a = !1, noValidation: o = !1, sinceCommits: s } = {}) {
let c = /* @__PURE__ */ new Set();
for (let l of n) {
if (l.ignoreForWeb || !yt(t, l)) continue;
let n = j.join(e, `${l.name}_nettoye`), u = s ? s[l.name] : void 0, d = u ? D(n, u, { diffFilter: "AMR" }) : null;
a && u && (console.log(`Filtering files changed since commit ${u} in ${n}`), console.log(`Found ${d?.size || 0} changed files`));
for (let e of P(n, i)) {
if (!e[e.length - 1].endsWith(".json")) continue;
let t = j.join(n, ...e), i = j.join(...e), s = d?.get(i);
if (d != null && s == null) continue;
a && console.log(`Loading file: ${t}…`);
let u = A.readFileSync(t, { encoding: "utf8" }), f = o ? JSON.parse(u) : r(u);
c.has(f.uid) || (c.add(f.uid), yield {
datasetLegislature: l.legislature,
filePath: t,
item: f,
...s && { gitStatus: s }
});
}
if (u) {
let e = D(n, u, { diffFilter: "D" });
for (let [t, r] of e.entries()) {
let e = j.join(n, t);
a && console.log(`Deleted file: ${e}`);
let i = { uid: j.parse(t).name };
yield {
datasetLegislature: l.legislature,
filePath: e,
item: i,
gitStatus: r
};
}
}
}
c.clear();
}
function yt(e, t) {
let n = Array.isArray(e) ? e : e === void 0 ? [] : [e];
return e === void 0 || n.includes(0) || t.legislature === l.All ? !0 : n.includes(t.legislature);
}
function* bt(e, t, n = {}, r) {
for (let { datasetLegislature: i, item: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.acteursEtOrganes, B.toActeur, ["acteurs"], n)) yield {
acteur: a,
datasetLegislature: i,
filePath: o,
...s && { gitStatus: s }
};
}
function* xt(e, t, n = {}, r) {
for (let { item: i, datasetLegislature: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.acteursEtOrganes, B.toOrgane, ["organes"], n)) yield {
organe: i,
datasetLegislature: a,
filePath: o,
...s && { gitStatus: s }
};
}
function* St(e, t, n = {}, r) {
for (let { datasetLegislature: a, item: o, filePath: s, gitStatus: c } of Q(e, t, r ?? Z.amendements, i.toAmendement, [], n)) yield {
amendement: o,
datasetLegislature: a,
filePath: s,
...c && { gitStatus: c }
};
}
function* Ct(e, t, n = {}, r) {
for (let { item: i, datasetLegislature: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.dossiersLegislatifs, C.toDocument, ["documents"], n)) yield {
document: i,
datasetLegislature: a,
filePath: o,
...s && { gitStatus: s }
};
}
function* wt(e, t, n = {}, r) {
for (let { item: i, datasetLegislature: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.dossiersLegislatifs, C.toDossierParlementaire, ["dossiers"], n)) yield {
dossierParlementaire: i,
datasetLegislature: a,
filePath: o,
...s && { gitStatus: s }
};
}
function* Tt(e, t, n = {}, r) {
for (let { item: i, datasetLegislature: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.agendas, w.toReunion, [], n)) yield {
reunion: i,
datasetLegislature: a,
filePath: o,
...s && { gitStatus: s }
};
}
function* Et(e, t, n = {}, r) {
for (let { item: i, datasetLegislature: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.scrutins, X.toScrutin, [], n)) yield {
scrutin: i,
datasetLegislature: a,
filePath: o,
...s && { gitStatus: s }
};
}
function* Dt(e, t, n = {}, r) {
for (let { item: i, datasetLegislature: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.questions, T.toQuestion, [], n)) yield {
question: i,
datasetLegislature: a,
filePath: o,
...s && { gitStatus: s }
};
}
function* Ot(e, t, n = {}, r) {
for (let { item: i, datasetLegislature: a, filePath: o, gitStatus: s } of Q(e, t, r ?? Z.comptesRendus, q.toCompteRendu, [], n)) yield {
compteRendu: i,
datasetLegislature: a,
filePath: o,
...s && { gitStatus: s }
};
}
function kt(e, t, n, { log: r = !1 } = {}) {
let a = {}, o = {};
if (t & N.ActeursEtOrganes) for (let t of Z.acteursEtOrganes) {
if (t.ignoreForWeb || n !== l.All && t.legislature !== l.All && n !== t.legislature) continue;
let i = j.join(e, t.filename.replace(/\.json$/, "_nettoye"));
for (let e of P(i, ["acteurs"])) {
if (!e[e.length - 1].endsWith(".json")) continue;
let t = j.join(i, ...e);
r && console.log(`Loading file: ${t}…`);
let n = A.readFileSync(t, { encoding: "utf8" }), o = B.toActeur(n);
a[o.uid] === void 0 && (a[o.uid] = o);
}
for (let e of P(i, ["organes"])) {
if (!e[e.length - 1].endsWith(".json")) continue;
let t = j.join(i, ...e);
r && console.log(`Loading file: ${t}…`);
let n = A.readFileSync(t, { encoding: "utf8" }), a = B.toOrgane(n);
o[a.uid] === void 0 && (o[a.uid] = a);
}
}
let s = {}, c = {}, u = {};
if (t & N.Agendas) for (let t of Z.agendas) {
if (t.ignoreForWeb || n !== l.All && t.legislature !== l.All && n !== t.legislature) continue;
let i = j.join(e, t.filename.replace(/\.json$/, "_nettoye"));
for (let e of P(i)) {
if (!e[e.length - 1].endsWith(".json")) continue;
let t = j.join(i, ...e);
r && console.log(`Loading file: ${t}…`);
let n = A.readFileSync(t, { encoding: "utf8" }), a = w.toReunion(n);
s[a.uid] === void 0 && (s[a.uid] = a);
let o = a.timestampDebut.toISOString().split("T")[0], l = c[o];
l === void 0 && (l = c[o] = []), l.push(a);
let d = a.odj;
if (d !== void 0) for (let e of d.pointsOdj || []) for (let t of e.dossiersLegislatifsRefs || []) {
let e = u[t];
e === void 0 && (e = u[t] = []), e.push(a);
}
}
}
let d = {};
if (t & N.Amendements) for (let t of Z.amendements) {
if (t.ignoreForWeb || n !== l.All && t.legislature !== l.All && n !== t.legislature) continue;
let a = j.join(e, t.filename.replace(/\.json$/, "_nettoye"));
for (let e of P(a)) {
if (!e[e.length - 1].endsWith(".json")) continue;
let t = j.join(a, ...e);
r && console.log(`Loading file: ${t}…`);
let n = A.readFileSync(t, { encoding: "utf8" }), o = i.toAmendement(n);
d[o.uid] === void 0 && (d[o.uid] = o);
}
}
let f = {}, p = {}, m = {}, h = {};
if (t & N.DossiersLegislatifs) for (let t of Z.dossiersLegislatifs) {
if (t.ignoreForWeb || n !== l.All && t.legislature !== l.All && n !== t.legislature) continue;
let i = j.join(e, t.filename.replace(/\.json$/, "_nettoye"));
for (let e of P(i, ["documents"])) {
if (!e[e.length - 1].endsWith(".json")) continue;
let t = j.join(i, ...e);
r && console.log(