UNPKG

@tricoteuses/assemblee

Version:

Retrieve, clean up & handle French Assemblée nationale's open data

1,058 lines 61.5 kB
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(