@tricoteuses/senat 2.22.0 → 2.22.2

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.
Files changed (129) hide show
  1. package/package.json +2 -2
  2. package/lib/config.d.ts +0 -3
  3. package/lib/config.js +0 -16
  4. package/lib/databases.d.ts +0 -2
  5. package/lib/databases.js +0 -26
  6. package/lib/datasets.d.ts +0 -34
  7. package/lib/datasets.js +0 -233
  8. package/lib/git.d.ts +0 -26
  9. package/lib/git.js +0 -167
  10. package/lib/index.d.ts +0 -13
  11. package/lib/index.js +0 -1
  12. package/lib/loaders.d.ts +0 -58
  13. package/lib/loaders.js +0 -286
  14. package/lib/model/agenda.d.ts +0 -6
  15. package/lib/model/agenda.js +0 -148
  16. package/lib/model/ameli.d.ts +0 -51
  17. package/lib/model/ameli.js +0 -149
  18. package/lib/model/commission.d.ts +0 -18
  19. package/lib/model/commission.js +0 -269
  20. package/lib/model/debats.d.ts +0 -67
  21. package/lib/model/debats.js +0 -95
  22. package/lib/model/documents.d.ts +0 -12
  23. package/lib/model/documents.js +0 -151
  24. package/lib/model/dosleg.d.ts +0 -7
  25. package/lib/model/dosleg.js +0 -326
  26. package/lib/model/index.d.ts +0 -7
  27. package/lib/model/index.js +0 -7
  28. package/lib/model/questions.d.ts +0 -45
  29. package/lib/model/questions.js +0 -89
  30. package/lib/model/scrutins.d.ts +0 -13
  31. package/lib/model/scrutins.js +0 -114
  32. package/lib/model/seance.d.ts +0 -3
  33. package/lib/model/seance.js +0 -267
  34. package/lib/model/sens.d.ts +0 -146
  35. package/lib/model/sens.js +0 -454
  36. package/lib/model/texte.d.ts +0 -7
  37. package/lib/model/texte.js +0 -228
  38. package/lib/model/util.d.ts +0 -9
  39. package/lib/model/util.js +0 -38
  40. package/lib/parsers/texte.d.ts +0 -7
  41. package/lib/parsers/texte.js +0 -228
  42. package/lib/raw_types/ameli.d.ts +0 -914
  43. package/lib/raw_types/ameli.js +0 -5
  44. package/lib/raw_types/debats.d.ts +0 -207
  45. package/lib/raw_types/debats.js +0 -5
  46. package/lib/raw_types/dosleg.d.ts +0 -1619
  47. package/lib/raw_types/dosleg.js +0 -5
  48. package/lib/raw_types/questions.d.ts +0 -419
  49. package/lib/raw_types/questions.js +0 -5
  50. package/lib/raw_types/senat.d.ts +0 -11368
  51. package/lib/raw_types/senat.js +0 -5
  52. package/lib/raw_types/sens.d.ts +0 -8248
  53. package/lib/raw_types/sens.js +0 -5
  54. package/lib/raw_types_schemats/ameli.d.ts +0 -539
  55. package/lib/raw_types_schemats/ameli.js +0 -2
  56. package/lib/raw_types_schemats/debats.d.ts +0 -127
  57. package/lib/raw_types_schemats/debats.js +0 -2
  58. package/lib/raw_types_schemats/dosleg.d.ts +0 -977
  59. package/lib/raw_types_schemats/dosleg.js +0 -2
  60. package/lib/raw_types_schemats/questions.d.ts +0 -235
  61. package/lib/raw_types_schemats/questions.js +0 -2
  62. package/lib/raw_types_schemats/sens.d.ts +0 -6915
  63. package/lib/raw_types_schemats/sens.js +0 -2
  64. package/lib/scripts/convert_data.d.ts +0 -1
  65. package/lib/scripts/convert_data.js +0 -354
  66. package/lib/scripts/data-download.d.ts +0 -1
  67. package/lib/scripts/data-download.js +0 -12
  68. package/lib/scripts/datautil.d.ts +0 -8
  69. package/lib/scripts/datautil.js +0 -34
  70. package/lib/scripts/parse_textes.d.ts +0 -1
  71. package/lib/scripts/parse_textes.js +0 -44
  72. package/lib/scripts/retrieve_agenda.d.ts +0 -1
  73. package/lib/scripts/retrieve_agenda.js +0 -132
  74. package/lib/scripts/retrieve_cr_commission.d.ts +0 -1
  75. package/lib/scripts/retrieve_cr_commission.js +0 -364
  76. package/lib/scripts/retrieve_cr_seance.d.ts +0 -6
  77. package/lib/scripts/retrieve_cr_seance.js +0 -347
  78. package/lib/scripts/retrieve_documents.d.ts +0 -3
  79. package/lib/scripts/retrieve_documents.js +0 -219
  80. package/lib/scripts/retrieve_open_data.d.ts +0 -1
  81. package/lib/scripts/retrieve_open_data.js +0 -315
  82. package/lib/scripts/retrieve_senateurs_photos.d.ts +0 -1
  83. package/lib/scripts/retrieve_senateurs_photos.js +0 -147
  84. package/lib/scripts/retrieve_videos.d.ts +0 -1
  85. package/lib/scripts/retrieve_videos.js +0 -461
  86. package/lib/scripts/shared/cli_helpers.d.ts +0 -95
  87. package/lib/scripts/shared/cli_helpers.js +0 -91
  88. package/lib/scripts/shared/util.d.ts +0 -4
  89. package/lib/scripts/shared/util.js +0 -35
  90. package/lib/scripts/test_iter_load.d.ts +0 -1
  91. package/lib/scripts/test_iter_load.js +0 -12
  92. package/lib/strings.d.ts +0 -1
  93. package/lib/strings.js +0 -18
  94. package/lib/types/agenda.d.ts +0 -44
  95. package/lib/types/agenda.js +0 -1
  96. package/lib/types/ameli.d.ts +0 -5
  97. package/lib/types/ameli.js +0 -1
  98. package/lib/types/compte_rendu.d.ts +0 -83
  99. package/lib/types/compte_rendu.js +0 -1
  100. package/lib/types/debats.d.ts +0 -2
  101. package/lib/types/debats.js +0 -1
  102. package/lib/types/dosleg.d.ts +0 -70
  103. package/lib/types/dosleg.js +0 -1
  104. package/lib/types/questions.d.ts +0 -2
  105. package/lib/types/questions.js +0 -1
  106. package/lib/types/sens.d.ts +0 -10
  107. package/lib/types/sens.js +0 -1
  108. package/lib/types/sessions.d.ts +0 -5
  109. package/lib/types/sessions.js +0 -84
  110. package/lib/types/texte.d.ts +0 -74
  111. package/lib/types/texte.js +0 -16
  112. package/lib/utils/cr_spliting.d.ts +0 -28
  113. package/lib/utils/cr_spliting.js +0 -265
  114. package/lib/utils/date.d.ts +0 -10
  115. package/lib/utils/date.js +0 -100
  116. package/lib/utils/nvs-timecode.d.ts +0 -7
  117. package/lib/utils/nvs-timecode.js +0 -79
  118. package/lib/utils/reunion_grouping.d.ts +0 -11
  119. package/lib/utils/reunion_grouping.js +0 -337
  120. package/lib/utils/reunion_odj_building.d.ts +0 -5
  121. package/lib/utils/reunion_odj_building.js +0 -154
  122. package/lib/utils/reunion_parsing.d.ts +0 -23
  123. package/lib/utils/reunion_parsing.js +0 -209
  124. package/lib/utils/scoring.d.ts +0 -14
  125. package/lib/utils/scoring.js +0 -147
  126. package/lib/utils/string_cleaning.d.ts +0 -7
  127. package/lib/utils/string_cleaning.js +0 -57
  128. package/lib/validators/config.d.ts +0 -1
  129. package/lib/validators/config.js +0 -54
@@ -1,269 +0,0 @@
1
- import * as cheerio from "cheerio";
2
- import path from "path";
3
- import { makeReunionUid } from "../utils/reunion_parsing";
4
- import { norm } from "../utils/string_cleaning";
5
- import { frDateToISO, hourShortToStartTime } from "../utils/date";
6
- import { toCRDate } from "./util";
7
- const PARA_h3_SEL = "p.sh_justify, p.sh_center, p.sh_marge, p[align], li, h3";
8
- function findDayRoot($, targetISO) {
9
- let $root = $();
10
- $("h2").each((_, el) => {
11
- const txt = norm($(el).text());
12
- const m = txt.match(/(?:Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi|Dimanche)\s+(.+)$/i);
13
- const iso = m ? frDateToISO(m[1]) : undefined;
14
- if (iso === targetISO && $root.length === 0)
15
- $root = $(el);
16
- });
17
- return $root;
18
- }
19
- function normalizeSpaces(s) {
20
- return s.replace(/[\u00A0\u202F\u2009]/g, " ");
21
- }
22
- function stripIntroPunct(s) {
23
- return s.replace(/^[\s]*[.:;]?\s*(?:[–—-]\s*)+/u, "");
24
- }
25
- function collectLeadingHeaderStrongEls($, $clone) {
26
- const els = [];
27
- const nodes = $clone.contents().toArray();
28
- for (const node of nodes) {
29
- if (node.type === "text") {
30
- if (norm(node.data || ""))
31
- break;
32
- continue;
33
- }
34
- if (node.type === "tag") {
35
- const $n = $(node);
36
- if ($n.is("strong, b")) {
37
- els.push(node);
38
- continue;
39
- }
40
- if ($n.is("a") && $n.children("strong, b").length) {
41
- $n.children("strong, b").each((_, el) => {
42
- els.push($(el));
43
- });
44
- continue;
45
- }
46
- break;
47
- }
48
- }
49
- return els;
50
- }
51
- // Remove orateur's name from text and clean intro punct
52
- export function getRemainingTextAfterSpeakerHeader($, $p) {
53
- const $clone = $p.clone();
54
- // 1) Remove <strong> at start
55
- const headerStrongEls = collectLeadingHeaderStrongEls($, $clone);
56
- for (const el of headerStrongEls)
57
- $(el).remove();
58
- // 2) normalize + clean intro punct
59
- let remainingHtml = $clone.html() || "";
60
- remainingHtml = normalizeSpaces(cheerio.load(remainingHtml).text());
61
- remainingHtml = stripIntroPunct(remainingHtml);
62
- const remainingText = norm(remainingHtml || "");
63
- return remainingText;
64
- }
65
- function buildPointsFromParagraphs($, paras) {
66
- const points = [];
67
- let ordreAbsoluSeance = 0;
68
- const normSpeaker = (s) => s
69
- .normalize("NFKC")
70
- .replace(/\s+/g, " ")
71
- .replace(/[:\.]\s*$/, "")
72
- .trim();
73
- const normQual = (s) => s
74
- .normalize("NFKC")
75
- .replace(/\s+/g, " ")
76
- .replace(/^\s*,\s*|\s+$/g, "")
77
- .replace(/[\s\u00A0]*[.,;:–—-]+$/u, "")
78
- .trim();
79
- let currentOrateur = null;
80
- let currentQualite = "";
81
- let currentTexte = "";
82
- function isPresidentQual(qual) {
83
- return /\bprésident(e)?\b/i.test(qual);
84
- }
85
- // Flush the buffered speaker’s text into points[] if any.
86
- function flush() {
87
- if (!currentOrateur || !currentTexte.trim())
88
- return;
89
- ordreAbsoluSeance++;
90
- points.push({
91
- code_grammaire: "PAROLE_GENERIQUE",
92
- roledebat: isPresidentQual(currentQualite) ? "président" : "",
93
- ordre_absolu_seance: String(ordreAbsoluSeance),
94
- orateurs: { orateur: { nom: currentOrateur, id: "", qualite: currentQualite || "" } },
95
- texte: { _: currentTexte.trim() },
96
- });
97
- currentOrateur = null;
98
- currentQualite = "";
99
- currentTexte = "";
100
- }
101
- function addPoint(payload) {
102
- ordreAbsoluSeance++;
103
- points.push({ ...payload, ordre_absolu_seance: String(ordreAbsoluSeance) });
104
- }
105
- for (const $p of paras) {
106
- if ($p.closest("table").length)
107
- continue;
108
- const tagName = ($p.prop("tagName") || "").toString().toLowerCase();
109
- const rawText = ($p.text() || "").replace(/\u00a0/g, " ").trim();
110
- const text = norm(rawText);
111
- if (!text || text.length <= 3)
112
- continue;
113
- const html = ($p.html() || "").trim();
114
- const italicSpans = $p.find("i, em, span[style*='italic']");
115
- const firstItalicOuter = italicSpans.length ? $(italicSpans[0]).prop("outerHTML") || "" : "";
116
- const htmlBeforeFirstItalic = firstItalicOuter ? html.split(firstItalicOuter)[0].trim() : "";
117
- const isPureItalic = italicSpans.length > 0 && italicSpans.length === $p.find("span,i,em").length && htmlBeforeFirstItalic === "";
118
- if (tagName === "h3") {
119
- flush();
120
- addPoint({
121
- code_style: "Titre",
122
- code_grammaire: "TITRE_TEXTE_DISCUSSION",
123
- texte: { _: text },
124
- });
125
- continue;
126
- }
127
- const boldSpans = $p.find("strong, b");
128
- const joinedBold = norm(boldSpans
129
- .map((_, el) => $(el).text() || "")
130
- .get()
131
- .join(""));
132
- const [namePartRaw, qualPartRaw] = joinedBold.split(/\s*,\s+/, 2);
133
- const namePart = namePartRaw ? normSpeaker(namePartRaw) : "";
134
- const qualPart = qualPartRaw ? normQual(qualPartRaw) : "";
135
- const looksLikeName = namePart.length > 3 && /^(M\.|Mme)[\s\u00A0\u202F]+/i.test(namePart);
136
- const startsWithName = namePart && text.startsWith(namePart);
137
- const isNewSpeaker = looksLikeName && startsWithName && namePart !== currentOrateur;
138
- if (isNewSpeaker) {
139
- flush();
140
- currentOrateur = namePart;
141
- currentQualite = qualPart;
142
- const remainingText = getRemainingTextAfterSpeakerHeader($, $p);
143
- currentTexte = remainingText;
144
- continue;
145
- }
146
- if (isPureItalic || (!joinedBold && !currentOrateur && text)) {
147
- flush();
148
- addPoint({
149
- code_style: "Info Italiques",
150
- code_grammaire: "PAROLE_GENERIQUE",
151
- texte: { _: "<i>" + text + "</i>" },
152
- });
153
- continue;
154
- }
155
- // concat text because same orateur
156
- if (currentOrateur) {
157
- const removeOrateurFromText = getRemainingTextAfterSpeakerHeader($, $p);
158
- currentTexte += (currentTexte ? "<br/><br/>" : "") + removeOrateurFromText;
159
- continue;
160
- }
161
- }
162
- flush();
163
- return points;
164
- }
165
- const TIME_RE = /(?:\b[àa]\s*)?(\d{1,2})\s*(?:h|heures?)\s*(?:([0-5]\d))?/i;
166
- export function cleanTitle(t) {
167
- return (t || "").replace(/\s+/g, " ").trim();
168
- }
169
- function parseTimeToHHmm(text) {
170
- const m = normalizeSpaces(text).match(TIME_RE);
171
- if (!m)
172
- return undefined;
173
- const hh = m[1]?.padStart(2, "0");
174
- const mm = (m[2] ?? "00").padStart(2, "0");
175
- const h = Number(hh);
176
- if (h >= 0 && h <= 23)
177
- return `${hh}:${mm}`;
178
- return undefined;
179
- }
180
- function findNearbyTime($, $h3) {
181
- let cur = $h3.prev();
182
- for (let i = 0; i < 3 && cur.length; i++, cur = cur.prev()) {
183
- const direct = parseTimeToHHmm(cur.text());
184
- if (direct)
185
- return direct;
186
- const italic = parseTimeToHHmm(cur.find("i, em").first().text());
187
- if (italic)
188
- return italic;
189
- }
190
- return undefined;
191
- }
192
- export function extractDayH3Sections($, dateISO) {
193
- const sections = [];
194
- const $dayRoot = findDayRoot($, dateISO);
195
- if ($dayRoot.length === 0)
196
- return sections;
197
- const $range = $dayRoot.nextUntil("h2");
198
- const $h3s = $range.filter("h3").add($range.find("h3"));
199
- $h3s.each((_, el) => {
200
- const $h3 = $(el);
201
- const title = cleanTitle($h3.text());
202
- if (!title)
203
- return;
204
- const time = findNearbyTime($, $h3);
205
- sections.push({ title, $start: $h3, time });
206
- });
207
- return sections;
208
- }
209
- export function parseCommissionCRSectionFromDom($, htmlFilePath, opts) {
210
- try {
211
- const { dateISO, hourShort, organe, section, matched } = opts;
212
- const seanceRef = matched?.uid ?? makeReunionUid(dateISO, "COM", matched?.events[0].id ?? hourShort ?? "", organe ?? undefined);
213
- const uid = seanceRef.replace(/^RU/, "CRC");
214
- const dateSeance = toCRDate(dateISO, matched?.startTime ?? hourShortToStartTime(hourShort));
215
- const $dayRoot = findDayRoot($, dateISO);
216
- if ($dayRoot.length === 0) {
217
- console.warn(`[COM-CR][parse] day root not found for ${dateISO} in ${path.basename(htmlFilePath)}`);
218
- return null;
219
- }
220
- const paras = [];
221
- let $cursor = section.$start;
222
- // Jump title if we do not want to add it to paragraphes
223
- $cursor = $cursor.next();
224
- while ($cursor.length && !$cursor.is("h2") && !$cursor.is("h3")) {
225
- if ($cursor.is(PARA_h3_SEL)) {
226
- paras.push($cursor);
227
- }
228
- else {
229
- const $ps = $cursor.find(PARA_h3_SEL);
230
- if ($ps.length)
231
- $ps.each((_, p) => {
232
- paras.push($(p));
233
- });
234
- }
235
- $cursor = $cursor.next();
236
- }
237
- const points = buildPointsFromParagraphs($, paras);
238
- if (points.length < 4 || !points.some((pt) => pt.code_grammaire === "PAROLE_GENERIQUE" && pt.orateurs)) {
239
- console.warn(`[COM-CR][parse] Insufficient points or no interventions found for a section in ${path.basename(htmlFilePath)}`);
240
- return null;
241
- }
242
- const session = dateISO.slice(5, 7) >= "10" ? `${dateISO.slice(0, 4)}` : `${Number(dateISO.slice(0, 4)) - 1}`;
243
- const contenu = {
244
- quantiemes: { journee: dateISO, session },
245
- point: points,
246
- };
247
- const metadonnees = {
248
- dateSeance,
249
- dateSeanceJour: dateISO,
250
- numSeanceJour: "",
251
- numSeance: "",
252
- typeAssemblee: "SN",
253
- legislature: "",
254
- session,
255
- nomFichierJo: path.basename(htmlFilePath),
256
- validite: "non-certifie",
257
- etat: "definitif",
258
- diffusion: "publique",
259
- version: "1",
260
- environnement: "prod",
261
- heureGeneration: new Date(),
262
- };
263
- return { uid, seanceRef, sessionRef: session, metadonnees, contenu };
264
- }
265
- catch (e) {
266
- console.error(`[COM-CR][parse] error section file=${path.basename(htmlFilePath)}:`, e);
267
- return null;
268
- }
269
- }
@@ -1,67 +0,0 @@
1
- import { InferResult } from "kysely";
2
- export type DebatResult = InferResult<typeof findAllQuery>[0];
3
- declare const findAllQuery: import("kysely").SelectQueryBuilder<any, "debats.debats", {
4
- [x: string]: any;
5
- id: string;
6
- date_seance: string;
7
- sections: {
8
- [x: string]: any;
9
- interventions: {
10
- [x: string]: any;
11
- auteur: {
12
- code: any;
13
- nom: any;
14
- prenom: any;
15
- matricule: any;
16
- };
17
- }[];
18
- }[];
19
- sections_divers: {
20
- [x: string]: any;
21
- interventions: {
22
- [x: string]: any;
23
- auteur: {
24
- code: any;
25
- nom: any;
26
- prenom: any;
27
- matricule: any;
28
- };
29
- }[];
30
- }[];
31
- lectures: {
32
- id: any;
33
- }[];
34
- }>;
35
- export declare function findAll(fromSession?: number): AsyncIterableIterator<{
36
- [x: string]: any;
37
- id: string;
38
- date_seance: string;
39
- sections: {
40
- [x: string]: any;
41
- interventions: {
42
- [x: string]: any;
43
- auteur: {
44
- code: any;
45
- nom: any;
46
- prenom: any;
47
- matricule: any;
48
- };
49
- }[];
50
- }[];
51
- sections_divers: {
52
- [x: string]: any;
53
- interventions: {
54
- [x: string]: any;
55
- auteur: {
56
- code: any;
57
- nom: any;
58
- prenom: any;
59
- matricule: any;
60
- };
61
- }[];
62
- }[];
63
- lectures: {
64
- id: any;
65
- }[];
66
- }>;
67
- export {};
@@ -1,95 +0,0 @@
1
- import { jsonArrayFrom, jsonBuildObject } from "kysely/helpers/postgres";
2
- import { dbSenat } from "../databases";
3
- import { ID_DATE_FORMAT } from "../scripts/datautil";
4
- import { toDateString } from "./util";
5
- function sectionsLegislatives(dateSeance) {
6
- return jsonArrayFrom(dbSenat
7
- .selectFrom("debats.secdis")
8
- .leftJoin("debats.typsec", "debats.secdis.typseccod", "debats.typsec.typseccod")
9
- .where("debats.secdis.datsea", "=", dateSeance)
10
- .select(({ ref }) => [
11
- "debats.secdis.secdisordid as id",
12
- "debats.secdis.secdisnum as numero",
13
- "debats.secdis.secdisobj as objet",
14
- "debats.secdis.secdisurl as url",
15
- "debats.typsec.typseclib as type",
16
- "debats.typsec.typseccat as categorie",
17
- interventionsLegislatives(ref("debats.secdis.secdiscle")).as("interventions"),
18
- "debats.secdis.lecassidt as lecture_id",
19
- ])
20
- .orderBy("debats.secdis.secdisordid", "asc"));
21
- }
22
- function interventionsLegislatives(sectionId) {
23
- return jsonArrayFrom(dbSenat
24
- .selectFrom("debats.intpjl")
25
- .leftJoin("dosleg.auteur", "debats.intpjl.autcod", "dosleg.auteur.autcod")
26
- .where("debats.intpjl.secdiscle", "=", sectionId)
27
- .select(({ ref, val, fn }) => [
28
- "debats.intpjl.intordid as id",
29
- "debats.intpjl.autcod as auteur_code",
30
- "debats.intpjl.intfon as fonction_intervenant",
31
- "debats.intpjl.inturl as url",
32
- "debats.intpjl.intana as analyse",
33
- jsonBuildObject({
34
- code: ref("dosleg.auteur.autcod"),
35
- nom: ref("dosleg.auteur.nomuse"),
36
- prenom: ref("dosleg.auteur.prenom"),
37
- matricule: ref("dosleg.auteur.autmat"),
38
- }).as("auteur"),
39
- ])
40
- .orderBy("debats.intpjl.intordid", "asc"));
41
- }
42
- function sectionsNonLegislatives(dateSeance) {
43
- return jsonArrayFrom(dbSenat
44
- .selectFrom("debats.secdivers")
45
- .leftJoin("debats.typsec", "debats.secdivers.typseccod", "debats.typsec.typseccod")
46
- .where("debats.secdivers.datsea", "=", dateSeance)
47
- .select(({ ref }) => [
48
- "debats.secdivers.secdiverslibelle as libelle",
49
- "debats.secdivers.secdiversobj as objet",
50
- "debats.typsec.typseclib as type",
51
- "debats.typsec.typseccat as categorie",
52
- interventionsNonLegislatives(ref("debats.secdivers.secdiverscle")).as("interventions"),
53
- ]));
54
- }
55
- function interventionsNonLegislatives(sectionId) {
56
- return jsonArrayFrom(dbSenat
57
- .selectFrom("debats.intdivers")
58
- .leftJoin("dosleg.auteur", "debats.intdivers.autcod", "dosleg.auteur.autcod")
59
- .where("debats.intdivers.intdiverscle", "=", sectionId)
60
- .select(({ ref, val }) => [
61
- "debats.intdivers.intdiversordid as id",
62
- "debats.intdivers.autcod as auteur_code",
63
- "debats.intdivers.intfon as fonction_intervenant",
64
- "debats.intdivers.inturl as url",
65
- "debats.intdivers.intana as analyse",
66
- jsonBuildObject({
67
- code: ref("dosleg.auteur.autcod"),
68
- nom: ref("dosleg.auteur.nomuse"),
69
- prenom: ref("dosleg.auteur.prenom"),
70
- matricule: ref("dosleg.auteur.autmat"),
71
- }).as("auteur"),
72
- ])
73
- .orderBy("debats.intdivers.intdiversordid", "asc"));
74
- }
75
- function lecturesAssemblee(dateSeance) {
76
- return jsonArrayFrom(dbSenat
77
- .selectFrom("debats.lecassdeb")
78
- .where("debats.lecassdeb.datsea", "=", dateSeance)
79
- .select("debats.lecassdeb.lecassidt as id"));
80
- }
81
- const findAllQuery = dbSenat
82
- .selectFrom("debats.debats")
83
- .select(({ ref, val }) => [
84
- toDateString(ref("debats.debats.datsea"), val(ID_DATE_FORMAT)).as("id"),
85
- toDateString(ref("debats.debats.datsea")).as("date_seance"),
86
- "debats.debats.numero as numero",
87
- "debats.debats.deburl as url",
88
- "debats.debats.debsyn as etat_synchronisation",
89
- sectionsLegislatives(ref("debats.debats.datsea")).as("sections"),
90
- sectionsNonLegislatives(ref("debats.debats.datsea")).as("sections_divers"),
91
- lecturesAssemblee(ref("debats.debats.datsea")).as("lectures"),
92
- ]);
93
- export function findAll(fromSession) {
94
- return findAllQuery.stream();
95
- }
@@ -1,12 +0,0 @@
1
- import { Expression, InferResult, SelectQueryBuilder } from "kysely";
2
- export declare function rapports(lectureAssembleeId: Expression<string>): import("kysely").RawBuilder<{
3
- [x: string]: any;
4
- }[]>;
5
- declare const queryTextes: SelectQueryBuilder<any, any, any>;
6
- export declare function textes(lectureAssembleeId: Expression<string>): import("kysely").RawBuilder<{
7
- [x: string]: any;
8
- }[]>;
9
- export declare function findAllTextes(): AsyncIterableIterator<DocumentResult>;
10
- export declare function findAllRapports(): AsyncIterableIterator<DocumentResult>;
11
- export type DocumentResult = InferResult<typeof queryTextes>[0];
12
- export {};
@@ -1,151 +0,0 @@
1
- import { sql } from "kysely";
2
- import { dbSenat } from "../databases";
3
- import { concat, rtrim, toDateString } from "./util";
4
- import { jsonArrayFrom } from "kysely/helpers/postgres";
5
- function orderOrdreOrigineTexte(expr) {
6
- return sql `array_position(array['0','2','1'], ${expr})`;
7
- }
8
- function auteursRapport(rapportId) {
9
- return jsonArrayFrom(dbSenat
10
- .withSchema("dosleg")
11
- .selectFrom("dosleg.auteur")
12
- .leftJoin("dosleg.ecr", "dosleg.ecr.autcod", "dosleg.auteur.autcod")
13
- .leftJoin("dosleg.rolsig", "dosleg.rolsig.signataire", "dosleg.ecr.signataire")
14
- .where("dosleg.ecr.rapcod", "=", rapportId)
15
- .select([
16
- "dosleg.auteur.prenom as prenom",
17
- "dosleg.auteur.nomuse as nom_usuel",
18
- "dosleg.auteur.autmat as matricule",
19
- "dosleg.ecr.ecrnumtri as ordre",
20
- "dosleg.rolsig.rolsiglib as role",
21
- "dosleg.ecr.ecrqua as qualite",
22
- ])
23
- .orderBy("dosleg.ecr.ecrnumtri", "asc"));
24
- }
25
- function documentsAttaches(rapportId) {
26
- return jsonArrayFrom(dbSenat
27
- .withSchema("dosleg")
28
- .selectFrom("docatt")
29
- .leftJoin("typatt", "docatt.typattcod", "typatt.typattcod")
30
- .where("docatt.rapcod", "=", rapportId)
31
- .select([
32
- "docatt.docatturl as url",
33
- "typatt.typattlib as type_document"
34
- ]));
35
- }
36
- function selectRapportAttributes({ eb, ref, val }) {
37
- return [
38
- "rap.rapnum as numero",
39
- "raporg.orgcod as code_organisme",
40
- eb
41
- .case()
42
- .when("rap.rapurl", "is not", null)
43
- .then(sql `regexp_replace(trim(${ref("rap.rapurl")}), '^(.*/)?(.*?)(\\.html)?$', '\\2')`)
44
- .else(null)
45
- .end()
46
- .as("id"),
47
- eb
48
- .case()
49
- .when("rap.typurl", "=", "I")
50
- .then(concat(val("https://www.senat.fr/rap/"), rtrim(ref("rap.rapurl"))))
51
- .else(rtrim(ref("rap.rapurl")))
52
- .end()
53
- .as("url"),
54
- rtrim(ref("denrap.libdenrap")).as("type"),
55
- rtrim(rtrim(ref("rap.raptil"))).as("titre"),
56
- rtrim(rtrim(ref("rap.rapsoustit"))).as("sous_titre"),
57
- toDateString(ref("rap.date_depot")).as("date"),
58
- "rap.sesann as session",
59
- auteursRapport(ref("rap.rapcod")).as("auteurs"),
60
- documentsAttaches(ref("rap.rapcod")).as("documents_annexes"),
61
- ];
62
- }
63
- const baseQueryRapports = dbSenat
64
- .withSchema("dosleg")
65
- .selectFrom("rap")
66
- .leftJoin("raporg", "raporg.rapcod", "rap.rapcod")
67
- .leftJoin("denrap", "denrap.coddenrap", "rap.coddenrap")
68
- .leftJoin("lecassrap", "lecassrap.rapcod", "rap.rapcod");
69
- const queryRapports = baseQueryRapports
70
- .leftJoin("lecass", "lecass.lecassidt", "lecassrap.lecassidt")
71
- .leftJoin("lecture", "lecture.lecidt", "lecass.lecidt")
72
- .leftJoin("loi", "loi.loicod", "lecture.loicod")
73
- .select((args) => [
74
- "loi.signet as signet_dossier",
75
- ...selectRapportAttributes(args),
76
- ]);
77
- export function rapports(lectureAssembleeId) {
78
- return jsonArrayFrom(baseQueryRapports
79
- .select(selectRapportAttributes)
80
- .where("lecassrap.lecassidt", "=", lectureAssembleeId));
81
- }
82
- function auteursTexte(texteId) {
83
- return jsonArrayFrom(dbSenat
84
- .withSchema("dosleg")
85
- .selectFrom("auteur")
86
- .leftJoin("ecr", "ecr.autcod", "auteur.autcod")
87
- .leftJoin("rolsig", "rolsig.signataire", "ecr.signataire")
88
- .where("ecr.texcod", "=", texteId)
89
- .select([
90
- "auteur.prenom as prenom",
91
- "auteur.nomuse as nom_usuel",
92
- "auteur.autmat as matricule",
93
- "ecr.ecrnumtri as ordre",
94
- "rolsig.rolsiglib as role",
95
- "ecr.ecrqua as qualite",
96
- ])
97
- .orderBy("ecr.ecrnumtri", "asc"));
98
- }
99
- function selectTexteAttributes({ eb, ref, val }) {
100
- return [
101
- "texte.texnum as numero",
102
- "texte.orgcod as code_organisme",
103
- eb
104
- .case()
105
- .when("texte.texurl", "is not", null)
106
- .then(sql `regexp_replace(trim(${ref("texte.texurl")}), '^(.*/)?(.*?)(\\.html)?$', '\\2')`)
107
- .else(null)
108
- .end()
109
- .as("id"),
110
- eb
111
- .case()
112
- .when("texte.typurl", "=", "I")
113
- .then(concat(val("https://www.senat.fr/leg/"), rtrim(ref("texte.texurl"))))
114
- .else(rtrim(ref("texte.texurl")))
115
- .end()
116
- .as("url"),
117
- rtrim(ref("oritxt.oritxtlib")).as("origine"),
118
- "oritxt.oriordre as ordre_origine",
119
- "oritxt.oritxtado as code_adoption",
120
- "oritxt.oritxtmod as modification",
121
- rtrim(ref("typtxt.typtxtlib")).as("type"),
122
- toDateString(ref("texte.txtoritxtdat")).as("date"),
123
- "texte.sesann as session",
124
- auteursTexte(ref("texte.texcod")).as("auteurs"),
125
- ];
126
- }
127
- const baseQueryTextes = dbSenat
128
- .withSchema("dosleg")
129
- .selectFrom("texte")
130
- .leftJoin("oritxt", "oritxt.oritxtcod", "texte.oritxtcod")
131
- .leftJoin("typtxt", "typtxt.typtxtcod", "texte.typtxtcod")
132
- .orderBy(({ ref }) => orderOrdreOrigineTexte(ref("oritxt.oriordre")));
133
- const queryTextes = baseQueryTextes
134
- .leftJoin("lecass", "lecass.lecassidt", "texte.lecassidt")
135
- .leftJoin("lecture", "lecture.lecidt", "lecass.lecidt")
136
- .leftJoin("loi", "loi.loicod", "lecture.loicod")
137
- .select((args) => [
138
- "loi.signet as signet_dossier",
139
- ...selectTexteAttributes(args),
140
- ]);
141
- export function textes(lectureAssembleeId) {
142
- return jsonArrayFrom(baseQueryTextes
143
- .select(selectTexteAttributes)
144
- .where("texte.lecassidt", "=", lectureAssembleeId));
145
- }
146
- export function findAllTextes() {
147
- return queryTextes.stream();
148
- }
149
- export function findAllRapports() {
150
- return queryRapports.stream();
151
- }
@@ -1,7 +0,0 @@
1
- import { InferResult, SelectQueryBuilder } from "kysely";
2
- declare const findAllDossiersQuery: SelectQueryBuilder<any, any, any>;
3
- export declare function findAllDossiers(): AsyncIterableIterator<DossierLegislatifResult>;
4
- export declare function getCodeActeLecture(codeNatureDossier: string, typeLecture: string, assemblee: string): string | null;
5
- export type DossierLegislatifResult = InferResult<typeof findAllDossiersQuery>[0];
6
- export declare function buildActesLegislatifs(dossier: any): any[];
7
- export {};