@tricoteuses/senat 3.1.20 → 3.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/add-js-extensions-v2.d.ts +1 -0
- package/lib/add-js-extensions-v2.js +23 -0
- package/lib/add-js-extensions.d.ts +1 -0
- package/lib/add-js-extensions.js +17 -0
- package/lib/aggregates.d.ts +52 -0
- package/lib/aggregates.js +930 -0
- package/lib/aggregates.mjs +713 -0
- package/lib/aggregates.ts +833 -0
- package/lib/config.d.ts +10 -0
- package/lib/config.js +16 -0
- package/lib/config.mjs +16 -0
- package/lib/config.ts +26 -0
- package/lib/databases.d.ts +2 -0
- package/lib/databases.js +26 -0
- package/lib/databases.mjs +57 -0
- package/lib/databases.ts +71 -0
- package/lib/datasets.d.ts +34 -0
- package/lib/datasets.js +233 -0
- package/lib/datasets.mjs +78 -0
- package/lib/datasets.ts +118 -0
- package/lib/fields.d.ts +10 -0
- package/lib/fields.js +68 -0
- package/lib/fields.mjs +22 -0
- package/lib/fields.ts +29 -0
- package/lib/git.d.ts +26 -0
- package/lib/git.js +167 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +1 -0
- package/lib/index.mjs +7 -0
- package/lib/index.ts +64 -0
- package/lib/inserters.d.ts +98 -0
- package/lib/inserters.js +500 -0
- package/lib/inserters.mjs +360 -0
- package/lib/inserters.ts +521 -0
- package/lib/legislatures.json +38 -0
- package/lib/loaders.d.ts +58 -0
- package/lib/loaders.js +286 -0
- package/lib/loaders.mjs +158 -0
- package/lib/loaders.ts +271 -0
- package/lib/model/agenda.d.ts +6 -0
- package/lib/model/agenda.js +148 -0
- package/lib/model/ameli.d.ts +51 -0
- package/lib/model/ameli.js +149 -0
- package/lib/model/ameli.mjs +84 -0
- package/lib/model/ameli.ts +100 -0
- package/lib/model/commission.d.ts +18 -0
- package/lib/model/commission.js +269 -0
- package/lib/model/debats.d.ts +67 -0
- package/lib/model/debats.js +95 -0
- package/lib/model/debats.mjs +43 -0
- package/lib/model/debats.ts +68 -0
- package/lib/model/documents.d.ts +12 -0
- package/lib/model/documents.js +151 -0
- package/lib/model/dosleg.d.ts +7 -0
- package/lib/model/dosleg.js +326 -0
- package/lib/model/dosleg.mjs +196 -0
- package/lib/model/dosleg.ts +240 -0
- package/lib/model/index.d.ts +7 -0
- package/lib/model/index.js +7 -0
- package/lib/model/index.mjs +5 -0
- package/lib/model/index.ts +15 -0
- package/lib/model/questions.d.ts +45 -0
- package/lib/model/questions.js +89 -0
- package/lib/model/questions.mjs +71 -0
- package/lib/model/questions.ts +93 -0
- package/lib/model/scrutins.d.ts +13 -0
- package/lib/model/scrutins.js +114 -0
- package/lib/model/seance.d.ts +3 -0
- package/lib/model/seance.js +267 -0
- package/lib/model/sens.d.ts +146 -0
- package/lib/model/sens.js +454 -0
- package/lib/model/sens.mjs +415 -0
- package/lib/model/sens.ts +516 -0
- package/lib/model/texte.d.ts +7 -0
- package/lib/model/texte.js +256 -0
- package/lib/model/texte.mjs +208 -0
- package/lib/model/texte.ts +229 -0
- package/lib/model/util.d.ts +9 -0
- package/lib/model/util.js +38 -0
- package/lib/model/util.mjs +19 -0
- package/lib/model/util.ts +32 -0
- package/lib/parsers/texte.d.ts +7 -0
- package/lib/parsers/texte.js +228 -0
- package/lib/raw_types/ameli.d.ts +914 -0
- package/lib/raw_types/ameli.js +5 -0
- package/lib/raw_types/ameli.mjs +163 -0
- package/lib/raw_types/debats.d.ts +207 -0
- package/lib/raw_types/debats.js +5 -0
- package/lib/raw_types/debats.mjs +58 -0
- package/lib/raw_types/dosleg.d.ts +1619 -0
- package/lib/raw_types/dosleg.js +5 -0
- package/lib/raw_types/dosleg.mjs +438 -0
- package/lib/raw_types/questions.d.ts +419 -0
- package/lib/raw_types/questions.js +5 -0
- package/lib/raw_types/questions.mjs +11 -0
- package/lib/raw_types/senat.d.ts +11368 -0
- package/lib/raw_types/senat.js +5 -0
- package/lib/raw_types/sens.d.ts +8248 -0
- package/lib/raw_types/sens.js +5 -0
- package/lib/raw_types/sens.mjs +508 -0
- package/lib/raw_types_kysely/ameli.d.ts +915 -0
- package/lib/raw_types_kysely/ameli.js +7 -0
- package/lib/raw_types_kysely/ameli.mjs +5 -0
- package/lib/raw_types_kysely/ameli.ts +951 -0
- package/lib/raw_types_kysely/debats.d.ts +207 -0
- package/lib/raw_types_kysely/debats.js +7 -0
- package/lib/raw_types_kysely/debats.mjs +5 -0
- package/lib/raw_types_kysely/debats.ts +222 -0
- package/lib/raw_types_kysely/dosleg.d.ts +3532 -0
- package/lib/raw_types_kysely/dosleg.js +7 -0
- package/lib/raw_types_kysely/dosleg.mjs +5 -0
- package/lib/raw_types_kysely/dosleg.ts +3621 -0
- package/lib/raw_types_kysely/questions.d.ts +414 -0
- package/lib/raw_types_kysely/questions.js +7 -0
- package/lib/raw_types_kysely/questions.mjs +5 -0
- package/lib/raw_types_kysely/questions.ts +426 -0
- package/lib/raw_types_kysely/sens.d.ts +4394 -0
- package/lib/raw_types_kysely/sens.js +7 -0
- package/lib/raw_types_kysely/sens.mjs +5 -0
- package/lib/raw_types_kysely/sens.ts +4499 -0
- package/lib/raw_types_schemats/ameli.d.ts +539 -0
- package/lib/raw_types_schemats/ameli.js +2 -0
- package/lib/raw_types_schemats/ameli.mjs +2 -0
- package/lib/raw_types_schemats/ameli.ts +601 -0
- package/lib/raw_types_schemats/debats.d.ts +127 -0
- package/lib/raw_types_schemats/debats.js +2 -0
- package/lib/raw_types_schemats/debats.mjs +2 -0
- package/lib/raw_types_schemats/debats.ts +145 -0
- package/lib/raw_types_schemats/dosleg.d.ts +977 -0
- package/lib/raw_types_schemats/dosleg.js +2 -0
- package/lib/raw_types_schemats/dosleg.mjs +2 -0
- package/lib/raw_types_schemats/dosleg.ts +2193 -0
- package/lib/raw_types_schemats/questions.d.ts +235 -0
- package/lib/raw_types_schemats/questions.js +2 -0
- package/lib/raw_types_schemats/questions.mjs +2 -0
- package/lib/raw_types_schemats/questions.ts +249 -0
- package/lib/raw_types_schemats/sens.d.ts +6915 -0
- package/lib/raw_types_schemats/sens.js +2 -0
- package/lib/raw_types_schemats/sens.mjs +2 -0
- package/lib/raw_types_schemats/sens.ts +2907 -0
- package/lib/scripts/convert_data.d.ts +1 -0
- package/lib/scripts/convert_data.js +354 -0
- package/lib/scripts/convert_data.mjs +181 -0
- package/lib/scripts/convert_data.ts +243 -0
- package/lib/scripts/data-download.d.ts +1 -0
- package/lib/scripts/data-download.js +12 -0
- package/lib/scripts/datautil.d.ts +8 -0
- package/lib/scripts/datautil.js +34 -0
- package/lib/scripts/datautil.mjs +16 -0
- package/lib/scripts/datautil.ts +19 -0
- package/lib/scripts/images/transparent_150x192.jpg +0 -0
- package/lib/scripts/images/transparent_155x225.jpg +0 -0
- package/lib/scripts/parse_textes.d.ts +1 -0
- package/lib/scripts/parse_textes.js +44 -0
- package/lib/scripts/parse_textes.mjs +46 -0
- package/lib/scripts/parse_textes.ts +65 -0
- package/lib/scripts/retrieve_agenda.d.ts +1 -0
- package/lib/scripts/retrieve_agenda.js +132 -0
- package/lib/scripts/retrieve_cr_commission.d.ts +1 -0
- package/lib/scripts/retrieve_cr_commission.js +364 -0
- package/lib/scripts/retrieve_cr_seance.d.ts +6 -0
- package/lib/scripts/retrieve_cr_seance.js +347 -0
- package/lib/scripts/retrieve_documents.d.ts +3 -0
- package/lib/scripts/retrieve_documents.js +219 -0
- package/lib/scripts/retrieve_documents.mjs +249 -0
- package/lib/scripts/retrieve_documents.ts +298 -0
- package/lib/scripts/retrieve_open_data.d.ts +1 -0
- package/lib/scripts/retrieve_open_data.js +315 -0
- package/lib/scripts/retrieve_open_data.mjs +217 -0
- package/lib/scripts/retrieve_open_data.ts +268 -0
- package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
- package/lib/scripts/retrieve_senateurs_photos.js +147 -0
- package/lib/scripts/retrieve_senateurs_photos.mjs +147 -0
- package/lib/scripts/retrieve_senateurs_photos.ts +177 -0
- package/lib/scripts/retrieve_videos.d.ts +1 -0
- package/lib/scripts/retrieve_videos.js +461 -0
- package/lib/scripts/shared/cli_helpers.d.ts +95 -0
- package/lib/scripts/shared/cli_helpers.js +91 -0
- package/lib/scripts/shared/cli_helpers.ts +36 -0
- package/lib/scripts/shared/util.d.ts +4 -0
- package/lib/scripts/shared/util.js +35 -0
- package/lib/scripts/shared/util.ts +33 -0
- package/lib/scripts/test_iter_load.d.ts +1 -0
- package/lib/scripts/test_iter_load.js +12 -0
- package/lib/src/ameli.d.ts +66 -0
- package/lib/src/ameli.js +1 -0
- package/lib/src/config.d.ts +22 -0
- package/lib/src/config.js +17 -7
- package/lib/src/conversion_textes.js +5 -1
- package/lib/src/databases.d.ts +2 -1
- package/lib/src/databases_postgres.d.ts +4 -0
- package/lib/src/databases_postgres.js +23 -0
- package/lib/src/datasets.d.ts +4 -0
- package/lib/src/datasets.js +16 -2
- package/lib/src/db_types/ameli.d.ts +1762 -0
- package/lib/src/db_types/ameli.js +1074 -0
- package/lib/src/db_types/debats.d.ts +380 -0
- package/lib/src/db_types/debats.js +266 -0
- package/lib/src/db_types/dosleg.d.ts +2954 -0
- package/lib/src/db_types/dosleg.js +2005 -0
- package/lib/src/db_types/questions.d.ts +699 -0
- package/lib/src/db_types/questions.js +493 -0
- package/lib/src/db_types/sens.d.ts +7843 -0
- package/lib/src/db_types/sens.js +4691 -0
- package/lib/src/debats.d.ts +38 -0
- package/lib/src/debats.js +1 -0
- package/lib/src/dosleg.d.ts +142 -0
- package/lib/src/dosleg.js +193 -0
- package/lib/src/git.d.ts +1 -0
- package/lib/src/git.js +45 -11
- package/lib/src/loaders.d.ts +12 -12
- package/lib/src/loaders.js +14 -8
- package/lib/src/model/agenda.d.ts +1 -1
- package/lib/src/model/agenda.js +3 -3
- package/lib/src/model/ameli.d.ts +64 -52
- package/lib/src/model/ameli.js +147 -145
- package/lib/src/model/ameli_postgres.d.ts +67 -0
- package/lib/src/model/ameli_postgres.js +150 -0
- package/lib/src/model/commission.d.ts +5 -4
- package/lib/src/model/commission.js +6 -6
- package/lib/src/model/debats.d.ts +38 -66
- package/lib/src/model/debats.js +110 -93
- package/lib/src/model/documents.d.ts +32 -12
- package/lib/src/model/documents.js +171 -130
- package/lib/src/model/dosleg.d.ts +142 -5
- package/lib/src/model/dosleg.js +298 -156
- package/lib/src/model/index.d.ts +7 -7
- package/lib/src/model/index.js +7 -7
- package/lib/src/model/questions.d.ts +54 -45
- package/lib/src/model/questions.js +89 -87
- package/lib/src/model/scrutins.d.ts +48 -13
- package/lib/src/model/scrutins.js +118 -111
- package/lib/src/model/seance.d.ts +1 -1
- package/lib/src/model/seance.js +7 -7
- package/lib/src/model/sens.d.ts +109 -179
- package/lib/src/model/sens.js +384 -484
- package/lib/src/model/util.d.ts +0 -8
- package/lib/src/model/util.js +0 -23
- package/lib/src/other_types/manifest.d.ts +11 -0
- package/lib/src/other_types/manifest.js +1 -0
- package/lib/src/other_types/questions.d.ts +2 -0
- package/lib/src/other_types/questions.js +1 -0
- package/lib/src/questions.d.ts +53 -0
- package/lib/src/questions.js +1 -0
- package/lib/src/raw_types/ameli.d.ts +1651 -803
- package/lib/src/raw_types/ameli.js +1074 -5
- package/lib/src/raw_types/debats.d.ts +353 -180
- package/lib/src/raw_types/debats.js +266 -5
- package/lib/src/raw_types/dosleg.d.ts +2862 -1527
- package/lib/src/raw_types/dosleg.js +2005 -5
- package/lib/src/raw_types/questions.d.ts +671 -395
- package/lib/src/raw_types/questions.js +493 -5
- package/lib/src/raw_types/sens.d.ts +7743 -8148
- package/lib/src/raw_types/sens.js +4691 -5
- package/lib/src/raw_types_schemats/ameli.d.ts +4 -2
- package/lib/src/raw_types_schemats/debats.d.ts +2 -2
- package/lib/src/raw_types_schemats/dosleg.d.ts +2 -2
- package/lib/src/raw_types_schemats/questions.d.ts +2 -2
- package/lib/src/raw_types_schemats/sens.d.ts +10 -4216
- package/lib/src/rich_types/agenda.d.ts +45 -0
- package/lib/src/rich_types/agenda.js +1 -0
- package/lib/src/rich_types/compte_rendu.d.ts +83 -0
- package/lib/src/rich_types/compte_rendu.js +1 -0
- package/lib/src/rich_types/dosleg.js +0 -7
- package/lib/src/rich_types/sessions.d.ts +6 -0
- package/lib/src/rich_types/sessions.js +19 -0
- package/lib/src/rich_types/texte.d.ts +72 -0
- package/lib/src/rich_types/texte.js +15 -0
- package/lib/src/scripts/convert_data.js +4 -5
- package/lib/src/scripts/retrieve_agenda.js +38 -4
- package/lib/src/scripts/retrieve_cr_commission.js +1 -1
- package/lib/src/scripts/retrieve_open_data.js +39 -0
- package/lib/src/scripts/retrieve_videos.js +1 -2
- package/lib/src/sens.d.ts +104 -0
- package/lib/src/sens.js +1 -0
- package/lib/src/server/ameli.js +0 -2
- package/lib/src/server/conversion_textes.js +1 -1
- package/lib/src/server/debats.js +0 -5
- package/lib/src/server/documents.js +0 -3
- package/lib/src/server/dosleg.js +0 -11
- package/lib/src/server/questions.js +0 -1
- package/lib/src/server/scrutins.js +0 -4
- package/lib/src/server/sens.js +0 -17
- package/lib/src/types/ameli.d.ts +1761 -4
- package/lib/src/types/ameli.js +1074 -1
- package/lib/src/types/debats.d.ts +380 -2
- package/lib/src/types/debats.js +266 -1
- package/lib/src/types/dosleg.d.ts +2953 -69
- package/lib/src/types/dosleg.js +2005 -1
- package/lib/src/types/questions.d.ts +699 -2
- package/lib/src/types/questions.js +493 -1
- package/lib/src/types/sens.d.ts +7842 -9
- package/lib/src/types/sens.js +4691 -1
- package/lib/src/types/texte.d.ts +2 -2
- package/lib/src/utils/manifest.d.ts +6 -0
- package/lib/src/utils/manifest.js +37 -0
- package/lib/src/utils/reunion_deletion.d.ts +2 -0
- package/lib/src/utils/reunion_deletion.js +27 -0
- package/lib/strings.d.ts +1 -0
- package/lib/strings.js +18 -0
- package/lib/strings.mjs +18 -0
- package/lib/strings.ts +26 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/agenda.d.ts +44 -0
- package/lib/types/agenda.js +1 -0
- package/lib/types/ameli.d.ts +5 -0
- package/lib/types/ameli.js +1 -0
- package/lib/types/ameli.mjs +13 -0
- package/lib/types/ameli.ts +21 -0
- package/lib/types/compte_rendu.d.ts +83 -0
- package/lib/types/compte_rendu.js +1 -0
- package/lib/types/debats.d.ts +2 -0
- package/lib/types/debats.js +1 -0
- package/lib/types/debats.mjs +2 -0
- package/lib/types/debats.ts +6 -0
- package/lib/types/dosleg.d.ts +70 -0
- package/lib/types/dosleg.js +1 -0
- package/lib/types/dosleg.mjs +151 -0
- package/lib/types/dosleg.ts +284 -0
- package/lib/types/questions.d.ts +2 -0
- package/lib/types/questions.js +1 -0
- package/lib/types/questions.mjs +1 -0
- package/lib/types/questions.ts +3 -0
- package/lib/types/sens.d.ts +10 -0
- package/lib/types/sens.js +1 -0
- package/lib/types/sens.mjs +1 -0
- package/lib/types/sens.ts +12 -0
- package/lib/types/sessions.d.ts +5 -0
- package/lib/types/sessions.js +84 -0
- package/lib/types/sessions.mjs +43 -0
- package/lib/types/sessions.ts +42 -0
- package/lib/types/texte.d.ts +74 -0
- package/lib/types/texte.js +16 -0
- package/lib/types/texte.mjs +16 -0
- package/lib/types/texte.ts +76 -0
- package/lib/typings/windows-1252.d.js +2 -0
- package/lib/typings/windows-1252.d.mjs +2 -0
- package/lib/typings/windows-1252.d.ts +11 -0
- package/lib/utils/cr_spliting.d.ts +28 -0
- package/lib/utils/cr_spliting.js +265 -0
- package/lib/utils/date.d.ts +10 -0
- package/lib/utils/date.js +100 -0
- package/lib/utils/nvs-timecode.d.ts +7 -0
- package/lib/utils/nvs-timecode.js +79 -0
- package/lib/utils/reunion_grouping.d.ts +9 -0
- package/lib/utils/reunion_grouping.js +361 -0
- package/lib/utils/reunion_odj_building.d.ts +5 -0
- package/lib/utils/reunion_odj_building.js +154 -0
- package/lib/utils/reunion_parsing.d.ts +23 -0
- package/lib/utils/reunion_parsing.js +209 -0
- package/lib/utils/scoring.d.ts +14 -0
- package/lib/utils/scoring.js +147 -0
- package/lib/utils/string_cleaning.d.ts +7 -0
- package/lib/utils/string_cleaning.js +57 -0
- package/lib/validators/config.d.ts +9 -0
- package/lib/validators/config.js +10 -0
- package/lib/validators/config.mjs +54 -0
- package/lib/validators/config.ts +79 -0
- package/lib/validators/senat.d.ts +0 -0
- package/lib/validators/senat.js +28 -0
- package/lib/validators/senat.mjs +24 -0
- package/lib/validators/senat.ts +26 -0
- package/package.json +30 -28
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface AgendaEvent {
|
|
2
|
+
id: string;
|
|
3
|
+
type: string | null;
|
|
4
|
+
date: string;
|
|
5
|
+
startTime: string | null;
|
|
6
|
+
endTime: string | null;
|
|
7
|
+
timeOriginal: string | null;
|
|
8
|
+
titre: string;
|
|
9
|
+
organe: string | null;
|
|
10
|
+
objet: string | null;
|
|
11
|
+
lieu: string | null;
|
|
12
|
+
captationVideo: boolean;
|
|
13
|
+
urlDossierSenat: string | null;
|
|
14
|
+
quantieme: string | null;
|
|
15
|
+
}
|
|
16
|
+
export type TimeSlot = "MATIN" | "APRES-MIDI" | "SOIR" | "UNKNOWN";
|
|
17
|
+
export interface Reunion {
|
|
18
|
+
uid: string;
|
|
19
|
+
chambre: "SN";
|
|
20
|
+
date: string;
|
|
21
|
+
startTime: string | null;
|
|
22
|
+
endTime: string | null;
|
|
23
|
+
captationVideo: boolean;
|
|
24
|
+
titre: string;
|
|
25
|
+
type: string;
|
|
26
|
+
organe?: string;
|
|
27
|
+
objet?: string;
|
|
28
|
+
lieu?: string;
|
|
29
|
+
events: AgendaEvent[];
|
|
30
|
+
compteRenduRefUid?: string;
|
|
31
|
+
transcriptionRef?: string;
|
|
32
|
+
urlVideo?: string;
|
|
33
|
+
urlPageVideo?: string;
|
|
34
|
+
timecodeDebutVideo?: number;
|
|
35
|
+
timecodeFinVideo?: number;
|
|
36
|
+
odj?: ReunionOdj;
|
|
37
|
+
}
|
|
38
|
+
export interface ReunionOdjPoint {
|
|
39
|
+
objet: string | null;
|
|
40
|
+
dossierLegislatifRef: string | null;
|
|
41
|
+
codeEtape: string | null;
|
|
42
|
+
}
|
|
43
|
+
export interface ReunionOdj {
|
|
44
|
+
pointsOdj: ReunionOdjPoint[];
|
|
45
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export interface CompteRendu {
|
|
2
|
+
uid: string;
|
|
3
|
+
seanceRef: string;
|
|
4
|
+
sessionRef: string;
|
|
5
|
+
metadonnees: Metadonnees;
|
|
6
|
+
contenu: Contenu;
|
|
7
|
+
}
|
|
8
|
+
export interface Metadonnees {
|
|
9
|
+
dateSeance: string;
|
|
10
|
+
dateSeanceJour: string;
|
|
11
|
+
numSeanceJour: string;
|
|
12
|
+
numSeance: string;
|
|
13
|
+
typeAssemblee: "AN" | "SN";
|
|
14
|
+
legislature: string;
|
|
15
|
+
session: string;
|
|
16
|
+
nomFichierJo: string;
|
|
17
|
+
validite: string;
|
|
18
|
+
etat: string;
|
|
19
|
+
diffusion: string;
|
|
20
|
+
version: string;
|
|
21
|
+
environnement: string;
|
|
22
|
+
heureGeneration: Date;
|
|
23
|
+
sommaire?: Sommaire;
|
|
24
|
+
}
|
|
25
|
+
export interface Contenu {
|
|
26
|
+
quantiemes: Quantiemes;
|
|
27
|
+
ouvertureSeance?: Point[] | Point;
|
|
28
|
+
point: Point[] | Point;
|
|
29
|
+
finSeance?: FinSeance;
|
|
30
|
+
paragraphe?: Point[];
|
|
31
|
+
}
|
|
32
|
+
export interface FinSeance {
|
|
33
|
+
point: Point;
|
|
34
|
+
}
|
|
35
|
+
export interface Quantiemes {
|
|
36
|
+
journee: string;
|
|
37
|
+
session: string;
|
|
38
|
+
}
|
|
39
|
+
export interface Point {
|
|
40
|
+
ordre_absolu_seance: string;
|
|
41
|
+
code_grammaire: string;
|
|
42
|
+
roledebat?: string;
|
|
43
|
+
orateurs?: {
|
|
44
|
+
orateur: {
|
|
45
|
+
nom: string;
|
|
46
|
+
id: string;
|
|
47
|
+
qualite: string;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
texte: {
|
|
51
|
+
_: string;
|
|
52
|
+
};
|
|
53
|
+
code_style?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface Texte {
|
|
56
|
+
_?: string;
|
|
57
|
+
id_syceron?: string;
|
|
58
|
+
stime?: string;
|
|
59
|
+
sup?: string;
|
|
60
|
+
lienAdt?: Texte[] | Texte;
|
|
61
|
+
}
|
|
62
|
+
export interface Sommaire {
|
|
63
|
+
presidentSeance: Texte;
|
|
64
|
+
sommaire1: SommaireElement[] | SommaireElement;
|
|
65
|
+
sommaire3?: SommaireElement[] | SommaireElement;
|
|
66
|
+
sommaire2?: SommaireElement[] | SommaireElement;
|
|
67
|
+
para?: Texte[] | Texte;
|
|
68
|
+
}
|
|
69
|
+
export interface SommaireElement {
|
|
70
|
+
valeur_pts_odj: string | undefined;
|
|
71
|
+
titreStruct: TitreStruct;
|
|
72
|
+
para?: Array<Texte | string> | Texte;
|
|
73
|
+
sommaire2?: SommaireElement[] | SommaireElement;
|
|
74
|
+
sommaire3?: SommaireElement[] | SommaireElement;
|
|
75
|
+
presidentSeance?: Texte[] | Texte;
|
|
76
|
+
type_debat?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface TitreStruct {
|
|
79
|
+
id_syceron: string;
|
|
80
|
+
intitule?: string;
|
|
81
|
+
sousIntitule?: string;
|
|
82
|
+
type_debat?: string;
|
|
83
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -39,13 +39,6 @@ function getDateSortValue(value) {
|
|
|
39
39
|
function compareByDate(left, right) {
|
|
40
40
|
return getDateSortValue(left.date) - getDateSortValue(right.date);
|
|
41
41
|
}
|
|
42
|
-
function getCommissionCodeActe(phasePrefix, rapportType) {
|
|
43
|
-
const normalizedType = (rapportType || "").toLowerCase();
|
|
44
|
-
if (normalizedType.includes("avis") || normalizedType.includes("information")) {
|
|
45
|
-
return `${phasePrefix}-COM-AVIS`;
|
|
46
|
-
}
|
|
47
|
-
return `${phasePrefix}-COM-FOND`;
|
|
48
|
-
}
|
|
49
42
|
function getPhasePrefix(lecture, assemblee, codeNatureDossier) {
|
|
50
43
|
if (assemblee !== "Sénat")
|
|
51
44
|
return null;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const UNDEFINED_SESSION = 0;
|
|
2
|
+
export declare const sessionOptions: readonly [1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026];
|
|
3
|
+
export declare const sessionOptionsOrAll: readonly [0, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026];
|
|
4
|
+
export type Session = (typeof sessionOptions)[number];
|
|
5
|
+
export type SessionOrAll = (typeof sessionOptionsOrAll)[number];
|
|
6
|
+
export declare function getSessionsFromStart(startSession: SessionOrAll): (1958 | 1959 | 1960 | 1961 | 1962 | 1963 | 1964 | 1965 | 1966 | 1967 | 1968 | 1969 | 1970 | 1971 | 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | 1978 | 1979 | 1980 | 1981 | 1982 | 1983 | 1984 | 1985 | 1986 | 1987 | 1988 | 1989 | 1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026)[];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const UNDEFINED_SESSION = 0;
|
|
2
|
+
export const sessionOptions = [
|
|
3
|
+
1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976,
|
|
4
|
+
1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
|
|
5
|
+
1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
|
|
6
|
+
2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026,
|
|
7
|
+
// TO COMPLETE EVERY YEAR :)
|
|
8
|
+
];
|
|
9
|
+
export const sessionOptionsOrAll = [UNDEFINED_SESSION, ...sessionOptions];
|
|
10
|
+
export function getSessionsFromStart(startSession) {
|
|
11
|
+
if (startSession === UNDEFINED_SESSION) {
|
|
12
|
+
return Array.from(sessionOptions);
|
|
13
|
+
}
|
|
14
|
+
const sessionIndex = sessionOptions.findIndex((session) => startSession === session);
|
|
15
|
+
if (sessionIndex >= 0) {
|
|
16
|
+
return sessionOptions.slice(sessionIndex);
|
|
17
|
+
}
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DocumentResult } from "../documents.js";
|
|
2
|
+
export declare enum DivisionType {
|
|
3
|
+
tome = 1,
|
|
4
|
+
part = 2,
|
|
5
|
+
book = 3,
|
|
6
|
+
title = 4,
|
|
7
|
+
subtitle = 5,
|
|
8
|
+
chapter = 6,
|
|
9
|
+
section = 7,
|
|
10
|
+
subsection = 8,
|
|
11
|
+
paragraph = 9,
|
|
12
|
+
article = 10,
|
|
13
|
+
alinea = 11,
|
|
14
|
+
division = 12
|
|
15
|
+
}
|
|
16
|
+
export type DivisionTag = keyof typeof DivisionType;
|
|
17
|
+
export interface DocumentMetadata {
|
|
18
|
+
name: string;
|
|
19
|
+
session: number | null | undefined;
|
|
20
|
+
date?: string | null;
|
|
21
|
+
url_expose_des_motifs?: URL;
|
|
22
|
+
url_xml?: URL;
|
|
23
|
+
url_html: URL;
|
|
24
|
+
url_pdf: URL;
|
|
25
|
+
}
|
|
26
|
+
export interface FlatTexte extends Partial<DocumentResult> {
|
|
27
|
+
titre: string | null;
|
|
28
|
+
titre_court: string | null;
|
|
29
|
+
url_dossier_senat: string | null;
|
|
30
|
+
url_dossier_assemblee: string | null;
|
|
31
|
+
date_presentation: Date | null;
|
|
32
|
+
date_depot: Date | null;
|
|
33
|
+
date_publication_xml: Date | null;
|
|
34
|
+
version: Version | null;
|
|
35
|
+
divisions: Division[];
|
|
36
|
+
expose_motifs?: ExposeDesMotifs | null;
|
|
37
|
+
}
|
|
38
|
+
export type Version = "RECT" | "RECT_BIS" | "RECT_TER" | "RECT_QUATER" | "RECT_QUINQUIES";
|
|
39
|
+
export interface Step {
|
|
40
|
+
eId: string;
|
|
41
|
+
date: Date | null;
|
|
42
|
+
type: string | null;
|
|
43
|
+
session: string | null;
|
|
44
|
+
numero: string | null;
|
|
45
|
+
version: Version | null;
|
|
46
|
+
outcome: string | null;
|
|
47
|
+
}
|
|
48
|
+
export interface Division {
|
|
49
|
+
index: number;
|
|
50
|
+
eId: string;
|
|
51
|
+
tag: DivisionTag;
|
|
52
|
+
level: number;
|
|
53
|
+
headings: DivisionContent[];
|
|
54
|
+
}
|
|
55
|
+
export interface Article extends Division {
|
|
56
|
+
alineas: Alinea[];
|
|
57
|
+
}
|
|
58
|
+
export interface DivisionContent {
|
|
59
|
+
text: string | null;
|
|
60
|
+
html?: string | null;
|
|
61
|
+
}
|
|
62
|
+
export interface Alinea extends DivisionContent {
|
|
63
|
+
eId: string;
|
|
64
|
+
heading: DivisionContent;
|
|
65
|
+
pastille: string | null;
|
|
66
|
+
text_avec_liens?: string | null;
|
|
67
|
+
html_avec_liens?: string | null;
|
|
68
|
+
}
|
|
69
|
+
export interface ExposeDesMotifs {
|
|
70
|
+
text: string | null;
|
|
71
|
+
html: string | null;
|
|
72
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export var DivisionType;
|
|
2
|
+
(function (DivisionType) {
|
|
3
|
+
DivisionType[DivisionType["tome"] = 1] = "tome";
|
|
4
|
+
DivisionType[DivisionType["part"] = 2] = "part";
|
|
5
|
+
DivisionType[DivisionType["book"] = 3] = "book";
|
|
6
|
+
DivisionType[DivisionType["title"] = 4] = "title";
|
|
7
|
+
DivisionType[DivisionType["subtitle"] = 5] = "subtitle";
|
|
8
|
+
DivisionType[DivisionType["chapter"] = 6] = "chapter";
|
|
9
|
+
DivisionType[DivisionType["section"] = 7] = "section";
|
|
10
|
+
DivisionType[DivisionType["subsection"] = 8] = "subsection";
|
|
11
|
+
DivisionType[DivisionType["paragraph"] = 9] = "paragraph";
|
|
12
|
+
DivisionType[DivisionType["article"] = 10] = "article";
|
|
13
|
+
DivisionType[DivisionType["alinea"] = 11] = "alinea";
|
|
14
|
+
DivisionType[DivisionType["division"] = 12] = "division";
|
|
15
|
+
})(DivisionType || (DivisionType = {}));
|
|
@@ -154,12 +154,11 @@ async function convertDatasetDosLeg(dataDir, options) {
|
|
|
154
154
|
if (options["verbose"]) {
|
|
155
155
|
console.log(`Converting ${dossier["signet"]} file…`);
|
|
156
156
|
}
|
|
157
|
-
let dossierReorganizedDir = path.join(dossiersReorganizedDir, String(UNDEFINED_SESSION));
|
|
158
157
|
const session = getSessionFromSignet(dossier["signet"]) || UNDEFINED_SESSION;
|
|
159
158
|
if (options["fromSession"] && session < options["fromSession"]) {
|
|
160
159
|
continue;
|
|
161
160
|
}
|
|
162
|
-
dossierReorganizedDir = path.join(dossiersReorganizedDir, String(session));
|
|
161
|
+
const dossierReorganizedDir = path.join(dossiersReorganizedDir, String(session));
|
|
163
162
|
const actesBrutsNormalises = buildActesLegislatifs(dossier);
|
|
164
163
|
const dossierWithActes = {
|
|
165
164
|
...dossier,
|
|
@@ -184,9 +183,8 @@ async function convertDatasetScrutins(dataDir, options) {
|
|
|
184
183
|
if (options["verbose"]) {
|
|
185
184
|
console.log(`Converting ${scrutin["numero"]} file…`);
|
|
186
185
|
}
|
|
187
|
-
let scrutinReorganizedDir = path.join(scrutinsReorganizedDir, String(UNDEFINED_SESSION));
|
|
188
186
|
const session = scrutin["session"] || UNDEFINED_SESSION;
|
|
189
|
-
scrutinReorganizedDir = path.join(scrutinsReorganizedDir, String(session));
|
|
187
|
+
const scrutinReorganizedDir = path.join(scrutinsReorganizedDir, String(session));
|
|
190
188
|
const scrutinFileName = `${scrutin["numero"]}.json`;
|
|
191
189
|
await fs.outputJSON(path.join(scrutinReorganizedDir, scrutinFileName), scrutin, {
|
|
192
190
|
spaces: 2,
|
|
@@ -339,7 +337,8 @@ async function convertDatasetSens(dataDir, options) {
|
|
|
339
337
|
for await (const organisme of findAllOrganismes()) {
|
|
340
338
|
const sanitizedCode = organisme.code.trim().replace(/\s+/g, "-");
|
|
341
339
|
if (sanitizedCode !== organisme.code) {
|
|
342
|
-
console.warn(`Warning: code "${organisme.code}" contains leading/trailing or multiple consecutive whitespace characters.
|
|
340
|
+
console.warn(`Warning: code "${organisme.code}" contains leading/trailing or multiple consecutive whitespace characters. ` +
|
|
341
|
+
`It has been sanitized to "${sanitizedCode}". Please check the original code for potential issues.`);
|
|
343
342
|
}
|
|
344
343
|
if (options["verbose"]) {
|
|
345
344
|
console.log(`Converting ${sanitizedCode} file…`);
|
|
@@ -11,6 +11,8 @@ import { assertExistingDirectory, commonOptions } from "./shared/cli_helpers.js"
|
|
|
11
11
|
import { fetchWithRetry } from "./shared/util.js";
|
|
12
12
|
import { buildReunionsByBucket } from "../utils/reunion_parsing.js";
|
|
13
13
|
import { buildSenatDossierIndex, buildDoslegReunionIndex } from "../utils/reunion_odj_building.js";
|
|
14
|
+
import { loadPreviousManifest, saveManifest, detectChanges } from "../utils/manifest.js";
|
|
15
|
+
import { deleteReunionFiles } from "../utils/reunion_deletion.js";
|
|
14
16
|
const optionsDefinitions = [
|
|
15
17
|
...commonOptions,
|
|
16
18
|
{
|
|
@@ -52,11 +54,9 @@ async function retrieveAgendas(options, sessions) {
|
|
|
52
54
|
for (const session of sessions) {
|
|
53
55
|
const originalAgendaSessionDir = path.join(originalAgendaDir, `${session}`);
|
|
54
56
|
fs.ensureDirSync(originalAgendaSessionDir);
|
|
55
|
-
fs.emptyDirSync(originalAgendaSessionDir);
|
|
56
57
|
const transformedAgendaSessionDir = path.join(transformedAgendaDir, `${session}`);
|
|
57
58
|
if (options["parseAgenda"]) {
|
|
58
59
|
fs.ensureDirSync(transformedAgendaSessionDir);
|
|
59
|
-
fs.emptyDirSync(transformedAgendaSessionDir);
|
|
60
60
|
}
|
|
61
61
|
const fifteenDaysFromNow = new Date();
|
|
62
62
|
// Don't download agendas more than 15 days in the future.
|
|
@@ -68,7 +68,8 @@ async function retrieveAgendas(options, sessions) {
|
|
|
68
68
|
try {
|
|
69
69
|
await downloadAgenda(agendaName, agendaPath);
|
|
70
70
|
if (options["parseAgenda"]) {
|
|
71
|
-
await parseAgenda(transformedAgendaSessionDir, agendaFileName, agendaPath, dossierIndex, doslegReunionIndex);
|
|
71
|
+
const createdUids = await parseAgenda(transformedAgendaSessionDir, agendaFileName, agendaPath, dossierIndex, doslegReunionIndex);
|
|
72
|
+
await processManifestAndDeletions(transformedAgendaSessionDir, agendaFileName, session, createdUids);
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
catch (error) {
|
|
@@ -109,21 +110,54 @@ async function parseAgenda(transformedAgendaSessionDir, agendaFileName, agendaPa
|
|
|
109
110
|
console.log(`Parsing Agenda ${agendaPath}…`);
|
|
110
111
|
const parsedAgendaEvents = await parseAgendaFromFile(agendaPath);
|
|
111
112
|
if (!parsedAgendaEvents?.length)
|
|
112
|
-
return;
|
|
113
|
+
return [];
|
|
113
114
|
const flatPath = path.join(transformedAgendaSessionDir, `${agendaFileName}.json`);
|
|
114
115
|
fs.writeJSONSync(flatPath, parsedAgendaEvents, { spaces: 2 });
|
|
115
116
|
const byBucket = buildReunionsByBucket(parsedAgendaEvents, dossierBySenatUrl, doslegReunionIndex);
|
|
117
|
+
// Collecter tous les UIDs créés
|
|
118
|
+
const createdUids = [];
|
|
116
119
|
// SP
|
|
117
120
|
if (byBucket.IDS.length > 0) {
|
|
118
121
|
writeGroupsAsFiles(transformedAgendaSessionDir, byBucket.IDS);
|
|
122
|
+
createdUids.push(...byBucket.IDS.map((r) => r.uid));
|
|
119
123
|
}
|
|
120
124
|
// NON-SP
|
|
121
125
|
for (const suffix of ["IDC", "IDM", "IDO", "IDI"]) {
|
|
122
126
|
const groups = byBucket[suffix];
|
|
123
127
|
if (groups.length > 0) {
|
|
124
128
|
writeGroupsAsFiles(transformedAgendaSessionDir, groups);
|
|
129
|
+
createdUids.push(...groups.map((r) => r.uid));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return createdUids;
|
|
133
|
+
}
|
|
134
|
+
async function processManifestAndDeletions(transformedAgendaSessionDir, agendaFileName, session, currentUids) {
|
|
135
|
+
const date = agendaFileName;
|
|
136
|
+
const previousManifest = loadPreviousManifest(transformedAgendaSessionDir, date);
|
|
137
|
+
if (previousManifest) {
|
|
138
|
+
const changes = detectChanges(previousManifest.reunionUids, currentUids);
|
|
139
|
+
if (changes.new.length > 0) {
|
|
140
|
+
console.log(` [${date}] ${changes.new.length} nouvelle(s) réunion(s)`);
|
|
125
141
|
}
|
|
142
|
+
if (changes.deleted.length > 0) {
|
|
143
|
+
console.log(` [${date}] ${changes.deleted.length} réunion(s) supprimée(s) détectée(s)`);
|
|
144
|
+
const deleted = deleteReunionFiles(transformedAgendaSessionDir, changes.deleted);
|
|
145
|
+
console.log(` [${date}] ${deleted} fichier(s) supprimé(s)`);
|
|
146
|
+
}
|
|
147
|
+
if (changes.kept.length > 0 && !options["silent"]) {
|
|
148
|
+
console.log(` [${date}] ${changes.kept.length} réunion(s) conservée(s)`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (!options["silent"]) {
|
|
152
|
+
console.log(` [${date}] Premier téléchargement (${currentUids.length} réunions)`);
|
|
126
153
|
}
|
|
154
|
+
const newManifest = {
|
|
155
|
+
date,
|
|
156
|
+
timestamp: DateTime.now().toISO() ?? "",
|
|
157
|
+
reunionUids: currentUids,
|
|
158
|
+
session,
|
|
159
|
+
};
|
|
160
|
+
saveManifest(transformedAgendaSessionDir, newManifest);
|
|
127
161
|
}
|
|
128
162
|
async function main() {
|
|
129
163
|
const dataDir = assertExistingDirectory(options["dataDir"], "data directory");
|
|
@@ -263,7 +263,7 @@ async function retrieveCommissionCRs(options = {}) {
|
|
|
263
263
|
for (const f of htmlFiles) {
|
|
264
264
|
const htmlPath = path.join(commissionDir, f);
|
|
265
265
|
let meta;
|
|
266
|
-
let raw
|
|
266
|
+
let raw;
|
|
267
267
|
try {
|
|
268
268
|
raw = await fs.readFile(htmlPath, "utf8");
|
|
269
269
|
meta = parseCommissionMetadataFromHtml(raw, f);
|
|
@@ -185,10 +185,49 @@ function runPsqlQuery(command, dataDir, options, connection, stopOnError = true)
|
|
|
185
185
|
stdio: ["ignore", "pipe", "pipe"],
|
|
186
186
|
});
|
|
187
187
|
}
|
|
188
|
+
function sourceSchemaNames(dataset) {
|
|
189
|
+
if (dataset.database === "sens") {
|
|
190
|
+
return ["sens", "senat"];
|
|
191
|
+
}
|
|
192
|
+
return [dataset.database];
|
|
193
|
+
}
|
|
194
|
+
function inspectSourceDump(dataset, dataDir) {
|
|
195
|
+
const sqlFilePath = path.join(dataDir, `${dataset.database}.sql`);
|
|
196
|
+
if (!fs.existsSync(sqlFilePath)) {
|
|
197
|
+
return {
|
|
198
|
+
copyStatements: 0,
|
|
199
|
+
createTableStatements: 0,
|
|
200
|
+
fileSizeBytes: null,
|
|
201
|
+
schemaQualifiedTableStatements: 0,
|
|
202
|
+
sqlFilePath,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
const sqlContent = fs.readFileSync(sqlFilePath, { encoding: "utf8" });
|
|
206
|
+
const schemaPattern = sourceSchemaNames(dataset)
|
|
207
|
+
.map((schemaName) => schemaName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))
|
|
208
|
+
.join("|");
|
|
209
|
+
return {
|
|
210
|
+
copyStatements: (sqlContent.match(/^COPY\s+/gim) ?? []).length,
|
|
211
|
+
createTableStatements: (sqlContent.match(/^CREATE\s+TABLE\s+/gim) ?? []).length,
|
|
212
|
+
fileSizeBytes: fs.statSync(sqlFilePath).size,
|
|
213
|
+
schemaQualifiedTableStatements: (sqlContent.match(new RegExp(`\\b(?:${schemaPattern})\\.`, "g")) ?? []).length,
|
|
214
|
+
sqlFilePath,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
188
217
|
function ensureStagingSchemaHasTables(dataset, dataDir, options, connection) {
|
|
189
218
|
const stagingSchema = stagingSchemaName(dataset.database);
|
|
190
219
|
const tableCount = Number.parseInt(runPsqlQuery(`SELECT count(*) FROM pg_tables WHERE schemaname = '${escapeSqlLiteral(stagingSchema)}'`, dataDir, options, connection).trim(), 10);
|
|
220
|
+
if (tableCount === 0) {
|
|
221
|
+
const dumpInspection = inspectSourceDump(dataset, dataDir);
|
|
222
|
+
const fileSizeLabel = dumpInspection.fileSizeBytes === null ? "missing" : `${dumpInspection.fileSizeBytes} bytes`;
|
|
223
|
+
console.error(`Source dump diagnostics for ${dataset.database}: file=${dumpInspection.sqlFilePath}, ` +
|
|
224
|
+
`size=${fileSizeLabel}, create_table=${dumpInspection.createTableStatements}, ` +
|
|
225
|
+
`copy=${dumpInspection.copyStatements}, ` +
|
|
226
|
+
`schema_refs=${dumpInspection.schemaQualifiedTableStatements}`);
|
|
227
|
+
}
|
|
191
228
|
assert(tableCount > 0, `Staging schema ${stagingSchema} is empty after importing ${dataset.database}. ` +
|
|
229
|
+
"Source dump may be empty or malformed. " +
|
|
230
|
+
`Check /home/gitlab-runner/senat-data/${dataset.database}.sql and the upstream archive before retrying. ` +
|
|
192
231
|
`Aborting incremental merge to protect ${senatSchemaName}.`);
|
|
193
232
|
}
|
|
194
233
|
function ensureStagingDatabase(dataDir, options, runtime) {
|
|
@@ -106,7 +106,6 @@ async function processGroupedReunion(agenda, session, dataDir, lastByVideo) {
|
|
|
106
106
|
return;
|
|
107
107
|
const ctx = await computeContext(agenda, session, dataDir);
|
|
108
108
|
const skipDownload = shouldSkipDownload(agenda, ctx.baseDir);
|
|
109
|
-
let match = null;
|
|
110
109
|
let best = null;
|
|
111
110
|
let secondBest = null;
|
|
112
111
|
// 2) Match + download artifacts (only if not skipped)
|
|
@@ -117,7 +116,7 @@ async function processGroupedReunion(agenda, session, dataDir, lastByVideo) {
|
|
|
117
116
|
console.log(`[warn] ${agenda.uid} No candidate found for this reunion. Probably VOD not published yet.`);
|
|
118
117
|
return;
|
|
119
118
|
}
|
|
120
|
-
match = await matchAgendaToVideo({ agenda, agendaTs: ctx.agendaTs, candidates, options });
|
|
119
|
+
const match = await matchAgendaToVideo({ agenda, agendaTs: ctx.agendaTs, candidates, options });
|
|
121
120
|
if (!match) {
|
|
122
121
|
console.log(`[miss] ${agenda.uid} No match found for this reunion`);
|
|
123
122
|
return;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export interface FonctionRow {
|
|
2
|
+
date_debut: string | null;
|
|
3
|
+
date_fin: string | null;
|
|
4
|
+
libelle: string | null;
|
|
5
|
+
}
|
|
6
|
+
export interface MandatSenateurRow {
|
|
7
|
+
code_circonscription: string | null;
|
|
8
|
+
date_debut: string | null;
|
|
9
|
+
date_fin: string | null;
|
|
10
|
+
etat: string | null;
|
|
11
|
+
etat_debut: string | null;
|
|
12
|
+
etat_fin: string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface MandatOrganismeRow {
|
|
15
|
+
code_organisme: string;
|
|
16
|
+
date_debut: string | null;
|
|
17
|
+
date_fin: string | null;
|
|
18
|
+
etat: string | null;
|
|
19
|
+
fonctions: FonctionRow[];
|
|
20
|
+
libelle: string | null;
|
|
21
|
+
type_code_organisme: string | null;
|
|
22
|
+
type_organisme: string | null;
|
|
23
|
+
}
|
|
24
|
+
export interface AdressePointContactRow {
|
|
25
|
+
bureau_distributeur: string | null;
|
|
26
|
+
code_cedex: string | null;
|
|
27
|
+
code_postal: string | null;
|
|
28
|
+
commune: string | null;
|
|
29
|
+
complement: string | null;
|
|
30
|
+
complement2: string | null;
|
|
31
|
+
libelle_cedex: string | null;
|
|
32
|
+
nom_voie: string | null;
|
|
33
|
+
numero_voie: string | null;
|
|
34
|
+
}
|
|
35
|
+
export interface TelephonePointContactRow {
|
|
36
|
+
numero: string | null;
|
|
37
|
+
type: string;
|
|
38
|
+
}
|
|
39
|
+
export interface PointContactRow {
|
|
40
|
+
adresses: AdressePointContactRow[];
|
|
41
|
+
id: string;
|
|
42
|
+
libelle: string | null;
|
|
43
|
+
telephones: TelephonePointContactRow[];
|
|
44
|
+
type: string;
|
|
45
|
+
}
|
|
46
|
+
export interface UrlRow {
|
|
47
|
+
code_url: string;
|
|
48
|
+
url: string;
|
|
49
|
+
}
|
|
50
|
+
export interface SenateurResult {
|
|
51
|
+
PCS_INSEE: string | null;
|
|
52
|
+
PCS_INSEE_24: string | null;
|
|
53
|
+
PCS_INSEE_42: string | null;
|
|
54
|
+
PCS_INSEE_8: string | null;
|
|
55
|
+
circonscription: string | null;
|
|
56
|
+
code_circonscription: string | null;
|
|
57
|
+
code_commission_permanente: string | null;
|
|
58
|
+
code_groupe_politique: string | null;
|
|
59
|
+
commission_permanente: string | null;
|
|
60
|
+
commissions: MandatOrganismeRow[];
|
|
61
|
+
courrier_electronique: string | null;
|
|
62
|
+
date_deces: string | null;
|
|
63
|
+
date_naissance: string | null;
|
|
64
|
+
delegations: MandatOrganismeRow[];
|
|
65
|
+
description_profession: string | null;
|
|
66
|
+
etat: string;
|
|
67
|
+
fonction_bureau_senat: string | null;
|
|
68
|
+
fonctions_bureau: FonctionRow[];
|
|
69
|
+
groupe_politique: string | null;
|
|
70
|
+
groupes: MandatOrganismeRow[];
|
|
71
|
+
mandats_senateur: MandatSenateurRow[];
|
|
72
|
+
matricule: string;
|
|
73
|
+
nom_usuel: string | null;
|
|
74
|
+
points_contact: PointContactRow[];
|
|
75
|
+
prenom_usuel: string;
|
|
76
|
+
qualite: string;
|
|
77
|
+
siege: string | null;
|
|
78
|
+
url_hatvp: string | null;
|
|
79
|
+
urls: UrlRow[];
|
|
80
|
+
}
|
|
81
|
+
export interface CirconscriptionResult {
|
|
82
|
+
article: string | null;
|
|
83
|
+
code: string;
|
|
84
|
+
date_debut: string | null;
|
|
85
|
+
date_fin: string | null;
|
|
86
|
+
etat: string | null;
|
|
87
|
+
identifiant: string;
|
|
88
|
+
libelle_departement: string;
|
|
89
|
+
libelle_region: string;
|
|
90
|
+
nombre_senateurs: string | null;
|
|
91
|
+
url: string | null;
|
|
92
|
+
}
|
|
93
|
+
export interface OrganismeResult {
|
|
94
|
+
code: string;
|
|
95
|
+
date_debut: string | null;
|
|
96
|
+
date_fin: string | null;
|
|
97
|
+
etat: string | null;
|
|
98
|
+
libelle: string | null;
|
|
99
|
+
libelle_court: string | null;
|
|
100
|
+
libelle_long: string | null;
|
|
101
|
+
type_code: string;
|
|
102
|
+
type_libelle: string | null;
|
|
103
|
+
url: string | null;
|
|
104
|
+
}
|
package/lib/src/sens.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/lib/src/server/ameli.js
CHANGED
|
@@ -112,7 +112,6 @@ export async function* findAllAmendements(fromSession) {
|
|
|
112
112
|
sql `(${eb.ref("cab.entid")} is not null)`.as("auteur_est_gouvernement"),
|
|
113
113
|
// Sous-requête scalaire: numéro de scrutin
|
|
114
114
|
eb
|
|
115
|
-
.withSchema("senat")
|
|
116
115
|
.selectFrom("dosleg_amescr as amescr")
|
|
117
116
|
.leftJoin("dosleg_scr as scr", (join) => join.onRef("amescr.scrnum", "=", "scr.scrnum").onRef("amescr.sesann", "=", "scr.sesann"))
|
|
118
117
|
.leftJoin("dosleg_date_seance as date_seance", "date_seance.code", "scr.code")
|
|
@@ -124,7 +123,6 @@ export async function* findAllAmendements(fromSession) {
|
|
|
124
123
|
.as("scrutin_num"),
|
|
125
124
|
// Sous-requête pour les auteurs
|
|
126
125
|
jsonArrayFrom(eb
|
|
127
|
-
.withSchema("senat")
|
|
128
126
|
.selectFrom("ameli_amdsen as amdsen")
|
|
129
127
|
.leftJoin("ameli_sen_ameli as sen_ameli", "sen_ameli.entid", "amdsen.senid")
|
|
130
128
|
.leftJoin("ameli_grppol_ameli as grppol_ameli2", "grppol_ameli2.entid", "amdsen.grpid")
|
|
@@ -218,7 +218,7 @@ p.has-alinea {
|
|
|
218
218
|
else if (child.nodeType === 1) {
|
|
219
219
|
const element = child;
|
|
220
220
|
const tagName = element.tagName.toLowerCase();
|
|
221
|
-
let htmlElement
|
|
221
|
+
let htmlElement;
|
|
222
222
|
switch (tagName) {
|
|
223
223
|
case "article": {
|
|
224
224
|
htmlElement = htmlDoc.createElement("div");
|
package/lib/src/server/debats.js
CHANGED
|
@@ -13,7 +13,6 @@ export async function* findAll() {
|
|
|
13
13
|
"debats.debsyn as etat_synchronisation",
|
|
14
14
|
// Sections principales (PJL)
|
|
15
15
|
jsonArrayFrom(eb
|
|
16
|
-
.withSchema("senat")
|
|
17
16
|
.selectFrom("debats_secdis as secdis")
|
|
18
17
|
.leftJoin("debats_typsec as typsec", "typsec.typseccod", "secdis.typseccod")
|
|
19
18
|
.select((eb2) => [
|
|
@@ -26,7 +25,6 @@ export async function* findAll() {
|
|
|
26
25
|
"secdis.lecassidt as lecture_id",
|
|
27
26
|
// Interventions de la section
|
|
28
27
|
jsonArrayFrom(eb2
|
|
29
|
-
.withSchema("senat")
|
|
30
28
|
.selectFrom("debats_intpjl as intpjl")
|
|
31
29
|
.leftJoin("dosleg_auteur as auteur", "auteur.autcod", "intpjl.autcod")
|
|
32
30
|
.select([
|
|
@@ -49,7 +47,6 @@ export async function* findAll() {
|
|
|
49
47
|
.orderBy("secdis.secdisordid", "asc")).as("sections"),
|
|
50
48
|
// Sections diverses
|
|
51
49
|
jsonArrayFrom(eb
|
|
52
|
-
.withSchema("senat")
|
|
53
50
|
.selectFrom("debats_secdivers as secdivers")
|
|
54
51
|
.leftJoin("debats_typsec as typsec", "typsec.typseccod", "secdivers.typseccod")
|
|
55
52
|
.select((eb2) => [
|
|
@@ -59,7 +56,6 @@ export async function* findAll() {
|
|
|
59
56
|
"typsec.typseccat as categorie",
|
|
60
57
|
// Interventions diverses
|
|
61
58
|
jsonArrayFrom(eb2
|
|
62
|
-
.withSchema("senat")
|
|
63
59
|
.selectFrom("debats_intdivers as intdivers")
|
|
64
60
|
.leftJoin("dosleg_auteur as auteur", "auteur.autcod", "intdivers.autcod")
|
|
65
61
|
.select([
|
|
@@ -81,7 +77,6 @@ export async function* findAll() {
|
|
|
81
77
|
.whereRef("secdivers.datsea", "=", "debats.datsea")).as("sections_divers"),
|
|
82
78
|
// Lectures
|
|
83
79
|
jsonArrayFrom(eb
|
|
84
|
-
.withSchema("senat")
|
|
85
80
|
.selectFrom("debats_lecassdeb as lecassdeb")
|
|
86
81
|
.select(["lecassdeb.lecassidt as id"])
|
|
87
82
|
.whereRef("lecassdeb.datsea", "=", "debats.datsea")).as("lectures"),
|
|
@@ -36,7 +36,6 @@ export async function* findAllTextes() {
|
|
|
36
36
|
sql `${eb.ref("texte.sesann")}::int`.as("session"),
|
|
37
37
|
// Auteurs
|
|
38
38
|
jsonArrayFrom(eb
|
|
39
|
-
.withSchema("senat")
|
|
40
39
|
.selectFrom("dosleg_auteur as auteur")
|
|
41
40
|
.leftJoin("dosleg_ecr as ecr", "ecr.autcod", "auteur.autcod")
|
|
42
41
|
.leftJoin("dosleg_rolsig as rolsig", "rolsig.signataire", "ecr.signataire")
|
|
@@ -95,7 +94,6 @@ export async function* findAllRapports() {
|
|
|
95
94
|
sql `${eb.ref("rap.sesann")}::int`.as("session"),
|
|
96
95
|
// Auteurs
|
|
97
96
|
jsonArrayFrom(eb
|
|
98
|
-
.withSchema("senat")
|
|
99
97
|
.selectFrom("dosleg_auteur as auteur")
|
|
100
98
|
.leftJoin("dosleg_ecr as ecr", "ecr.autcod", "auteur.autcod")
|
|
101
99
|
.leftJoin("dosleg_rolsig as rolsig", "rolsig.signataire", "ecr.signataire")
|
|
@@ -111,7 +109,6 @@ export async function* findAllRapports() {
|
|
|
111
109
|
.whereRef("ecr.rapcod", "=", "rap.rapcod")).as("auteurs"),
|
|
112
110
|
// Documents annexes
|
|
113
111
|
jsonArrayFrom(eb
|
|
114
|
-
.withSchema("senat")
|
|
115
112
|
.selectFrom("dosleg_docatt as docatt")
|
|
116
113
|
.leftJoin("dosleg_typatt as typatt", "typatt.typattcod", "docatt.typattcod")
|
|
117
114
|
.select(["docatt.docatturl as url", "typatt.typattlib as type_document"])
|