@tricoteuses/senat 3.1.18 → 3.1.19
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/src/config.d.ts +0 -22
- package/lib/src/config.js +7 -17
- package/lib/src/conversion_textes.js +1 -5
- package/lib/src/databases.d.ts +2 -0
- package/lib/src/databases.js +26 -0
- package/lib/src/datasets.d.ts +0 -4
- package/lib/src/datasets.js +2 -16
- package/lib/src/git.d.ts +0 -1
- package/lib/src/git.js +11 -45
- package/lib/src/loaders.d.ts +12 -12
- package/lib/src/loaders.js +8 -14
- package/lib/src/model/agenda.d.ts +1 -1
- package/lib/src/model/agenda.js +3 -3
- package/lib/src/model/ameli.d.ts +52 -64
- package/lib/src/model/ameli.js +145 -147
- package/lib/src/model/commission.d.ts +4 -5
- package/lib/src/model/commission.js +6 -6
- package/lib/src/model/debats.d.ts +66 -38
- package/lib/src/model/debats.js +93 -110
- package/lib/src/model/documents.d.ts +12 -32
- package/lib/src/model/documents.js +130 -171
- package/lib/src/model/dosleg.d.ts +5 -142
- package/lib/src/model/dosleg.js +156 -298
- package/lib/src/model/index.d.ts +7 -7
- package/lib/src/model/index.js +7 -7
- package/lib/src/model/questions.d.ts +45 -54
- package/lib/src/model/questions.js +87 -89
- package/lib/src/model/scrutins.d.ts +13 -48
- package/lib/src/model/scrutins.js +111 -118
- package/lib/src/model/seance.d.ts +1 -1
- package/lib/src/model/seance.js +7 -7
- package/lib/src/model/sens.d.ts +179 -109
- package/lib/src/model/sens.js +484 -384
- package/lib/src/model/util.d.ts +8 -0
- package/lib/src/model/util.js +23 -0
- package/lib/src/raw_types/ameli.d.ts +800 -1648
- package/lib/src/raw_types/ameli.js +5 -1074
- package/lib/src/raw_types/debats.d.ts +180 -353
- package/lib/src/raw_types/debats.js +5 -266
- package/lib/src/raw_types/dosleg.d.ts +1523 -2858
- package/lib/src/raw_types/dosleg.js +5 -2005
- package/lib/src/raw_types/questions.d.ts +395 -671
- package/lib/src/raw_types/questions.js +5 -493
- package/lib/src/raw_types/senat.d.ts +11372 -0
- package/lib/src/raw_types/senat.js +5 -0
- package/lib/src/raw_types/sens.d.ts +8148 -7743
- package/lib/src/raw_types/sens.js +5 -4691
- package/lib/src/raw_types_schemats/ameli.d.ts +2 -4
- 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 +4235 -29
- package/lib/src/scripts/test_iter_load.d.ts +1 -0
- package/lib/src/scripts/test_iter_load.js +12 -0
- package/lib/src/types/ameli.d.ts +4 -4
- package/lib/src/types/dosleg.d.ts +39 -39
- package/lib/src/types/questions.d.ts +2 -2
- package/lib/src/types/sens.d.ts +2 -0
- package/lib/src/types/texte.d.ts +2 -2
- package/lib/src/utils/reunion_odj_building.js +27 -11
- package/package.json +1 -1
- package/lib/src/databases_postgres.d.ts +0 -4
- package/lib/src/databases_postgres.js +0 -23
- package/lib/src/scripts/debug_dosleg_query.d.ts +0 -6
- package/lib/src/scripts/debug_dosleg_query.js +0 -50
package/lib/src/model/dosleg.js
CHANGED
|
@@ -1,277 +1,123 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { sql } from "kysely";
|
|
2
|
+
import { jsonArrayFrom } from "kysely/helpers/postgres";
|
|
3
|
+
import { dbSenat } from "../databases";
|
|
4
|
+
import { concat, rtrim, toDateString } from "./util";
|
|
5
|
+
import { textes, rapports } from "./documents";
|
|
6
|
+
function datesSeances(lectureAssembleeId) {
|
|
7
|
+
return jsonArrayFrom(dbSenat
|
|
8
|
+
.withSchema("dosleg")
|
|
9
|
+
.selectFrom("dosleg.date_seance")
|
|
10
|
+
.where("dosleg.date_seance.lecidt", "=", lectureAssembleeId)
|
|
11
|
+
.select(({ ref }) => [toDateString(ref("dosleg.date_seance.date_s")).as("date")]));
|
|
4
12
|
}
|
|
5
|
-
function
|
|
6
|
-
return
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
function lecturesAssemblee(lectureId) {
|
|
14
|
+
return jsonArrayFrom(dbSenat
|
|
15
|
+
.withSchema("dosleg")
|
|
16
|
+
.selectFrom("lecass")
|
|
17
|
+
.where("lecass.lecidt", "=", lectureId)
|
|
18
|
+
.leftJoin("ass", "ass.codass", "lecass.codass")
|
|
19
|
+
.leftJoin("org", "org.orgcod", "lecass.orgcod")
|
|
20
|
+
.leftJoin("orippr", "orippr.oripprcod", "lecass.orippr")
|
|
21
|
+
.select(({ ref }) => [
|
|
22
|
+
rtrim(ref("ass.libass")).as("assemblee"),
|
|
23
|
+
"org.orgnom as libelle_organisme",
|
|
24
|
+
"org.senorgcod as code_organisme",
|
|
25
|
+
"lecass.ordreass as ordre_lecture_assemblee",
|
|
26
|
+
"lecass.sesann as session",
|
|
27
|
+
"orippr.oripprlib as origine_proposition",
|
|
28
|
+
"lecass.ptlnum as numero_petite_loi",
|
|
29
|
+
"lecass.ptlurl as url_petite_loi",
|
|
30
|
+
"lecass.loiintmod as loi_intitule_modifie",
|
|
31
|
+
"lecass.debatsurl as url_cr_debats",
|
|
32
|
+
toDateString(ref("lecass.lecassamecomdat")).as("date_publication_amendements_commission"),
|
|
33
|
+
toDateString(ref("lecass.lecassamedat")).as("date_publication_amendements_seance"),
|
|
34
|
+
textes(ref("lecass.lecassidt")).as("textes"),
|
|
35
|
+
rapports(ref("lecass.lecassidt")).as("rapports"),
|
|
36
|
+
datesSeances(ref("lecass.lecassidt")).as("dates_seances"),
|
|
37
|
+
])
|
|
38
|
+
.orderBy("lecass.ordreass", "asc"));
|
|
25
39
|
}
|
|
26
|
-
function
|
|
27
|
-
return
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
from senat.dosleg_auteur as auteur
|
|
40
|
-
left join senat.dosleg_ecr as ecr on ecr.autcod = auteur.autcod
|
|
41
|
-
left join senat.dosleg_rolsig as rolsig on rolsig.signataire = ecr.signataire
|
|
42
|
-
where ecr.rapcod = ${rapportIdSql}
|
|
43
|
-
) as author_rows
|
|
44
|
-
)
|
|
45
|
-
`;
|
|
40
|
+
function lectures(loiId) {
|
|
41
|
+
return jsonArrayFrom(dbSenat
|
|
42
|
+
.withSchema("dosleg")
|
|
43
|
+
.selectFrom("lecture")
|
|
44
|
+
.leftJoin("typlec", "typlec.typleccod", "lecture.typleccod")
|
|
45
|
+
.where("lecture.loicod", "=", loiId)
|
|
46
|
+
.select(({ ref }) => [
|
|
47
|
+
rtrim(ref("typlec.typleclib")).as("type_lecture"),
|
|
48
|
+
rtrim(ref("lecture.leccom")).as("libelle"),
|
|
49
|
+
"typlec.typlecord as ordre_lecture",
|
|
50
|
+
lecturesAssemblee(ref("lecture.lecidt")).as("lectures_assemblee"),
|
|
51
|
+
])
|
|
52
|
+
.orderBy("typlec.typlecord", "asc"));
|
|
46
53
|
}
|
|
47
|
-
function
|
|
48
|
-
return
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
typatt.typattlib as type_document
|
|
55
|
-
from senat.dosleg_docatt as docatt
|
|
56
|
-
left join senat.dosleg_typatt as typatt on docatt.typattcod = typatt.typattcod
|
|
57
|
-
where docatt.rapcod = ${rapportIdSql}
|
|
58
|
-
) as attached_rows
|
|
59
|
-
)
|
|
60
|
-
`;
|
|
54
|
+
function themes(loiId) {
|
|
55
|
+
return jsonArrayFrom(dbSenat
|
|
56
|
+
.withSchema("dosleg")
|
|
57
|
+
.selectFrom("the")
|
|
58
|
+
.leftJoin("loithe", "loithe.thecle", "the.thecle")
|
|
59
|
+
.where("loithe.loicod", "=", loiId)
|
|
60
|
+
.select(["the.thelib as libelle"]));
|
|
61
61
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
${buildDocumentsAttachesSql("rap.rapcod")} as documents_annexes
|
|
122
|
-
from senat.dosleg_rap as rap
|
|
123
|
-
left join senat.dosleg_raporg as raporg on raporg.rapcod = rap.rapcod
|
|
124
|
-
left join senat.dosleg_denrap as denrap on denrap.coddenrap = rap.coddenrap
|
|
125
|
-
left join senat.dosleg_lecassrap as lecassrap on lecassrap.rapcod = rap.rapcod
|
|
126
|
-
where lecassrap.lecassidt = ${lectureAssembleeIdSql}
|
|
127
|
-
) as report_rows
|
|
128
|
-
)
|
|
129
|
-
`;
|
|
130
|
-
}
|
|
131
|
-
function buildDatesSeancesSql(lectureAssembleeIdSql) {
|
|
132
|
-
return `
|
|
133
|
-
(
|
|
134
|
-
select coalesce(json_agg(date_rows), '[]'::json)
|
|
135
|
-
from (
|
|
136
|
-
select to_char(date_seance.date_s, 'YYYY-MM-DD') as date
|
|
137
|
-
from senat.dosleg_date_seance as date_seance
|
|
138
|
-
where date_seance.lecidt = ${lectureAssembleeIdSql}
|
|
139
|
-
) as date_rows
|
|
140
|
-
)
|
|
141
|
-
`;
|
|
142
|
-
}
|
|
143
|
-
function buildLecturesAssembleeSql(lectureIdSql) {
|
|
144
|
-
return `
|
|
145
|
-
(
|
|
146
|
-
select coalesce(json_agg(assembly_rows order by assembly_rows.ordre_lecture_assemblee_num nulls last), '[]'::json)
|
|
147
|
-
from (
|
|
148
|
-
select
|
|
149
|
-
rtrim(ass.libass) as assemblee,
|
|
150
|
-
org.orgnom as libelle_organisme,
|
|
151
|
-
org.senorgcod as code_organisme,
|
|
152
|
-
lecass.ordreass::text as ordre_lecture_assemblee,
|
|
153
|
-
lecass.ordreass as ordre_lecture_assemblee_num,
|
|
154
|
-
lecass.sesann::int as session,
|
|
155
|
-
orippr.oripprlib as origine_proposition,
|
|
156
|
-
lecass.ptlnum as numero_petite_loi,
|
|
157
|
-
lecass.ptlurl as url_petite_loi,
|
|
158
|
-
lecass.loiintmod as loi_intitule_modifie,
|
|
159
|
-
lecass.debatsurl as url_cr_debats,
|
|
160
|
-
to_char(lecass.lecassamecomdat, 'YYYY-MM-DD') as date_publication_amendements_commission,
|
|
161
|
-
to_char(lecass.lecassamedat, 'YYYY-MM-DD') as date_publication_amendements_seance,
|
|
162
|
-
${buildTextesSql("lecass.lecassidt")} as textes,
|
|
163
|
-
${buildRapportsSql("lecass.lecassidt")} as rapports,
|
|
164
|
-
${buildDatesSeancesSql("lecass.lecassidt")} as dates_seances
|
|
165
|
-
from senat.dosleg_lecass as lecass
|
|
166
|
-
left join senat.dosleg_ass as ass on ass.codass = lecass.codass
|
|
167
|
-
left join senat.dosleg_org as org on org.orgcod = lecass.orgcod
|
|
168
|
-
left join senat.dosleg_orippr as orippr on orippr.oripprcod = lecass.orippr
|
|
169
|
-
where lecass.lecidt = ${lectureIdSql}
|
|
170
|
-
) as assembly_rows
|
|
171
|
-
)
|
|
172
|
-
`;
|
|
173
|
-
}
|
|
174
|
-
function buildLecturesSql(loiIdSql) {
|
|
175
|
-
return `
|
|
176
|
-
(
|
|
177
|
-
select coalesce(json_agg(lecture_rows order by lecture_rows.ordre_lecture_num nulls last), '[]'::json)
|
|
178
|
-
from (
|
|
179
|
-
select
|
|
180
|
-
rtrim(typlec.typleclib) as type_lecture,
|
|
181
|
-
rtrim(lecture.leccom) as libelle,
|
|
182
|
-
typlec.typlecord::text as ordre_lecture,
|
|
183
|
-
typlec.typlecord as ordre_lecture_num,
|
|
184
|
-
${buildLecturesAssembleeSql("lecture.lecidt")} as lectures_assemblee
|
|
185
|
-
from senat.dosleg_lecture as lecture
|
|
186
|
-
left join senat.dosleg_typlec as typlec on typlec.typleccod = lecture.typleccod
|
|
187
|
-
where lecture.loicod = ${loiIdSql}
|
|
188
|
-
) as lecture_rows
|
|
189
|
-
)
|
|
190
|
-
`;
|
|
191
|
-
}
|
|
192
|
-
function buildThemesSql(loiIdSql) {
|
|
193
|
-
return `
|
|
194
|
-
(
|
|
195
|
-
select coalesce(json_agg(theme_rows), '[]'::json)
|
|
196
|
-
from (
|
|
197
|
-
select the.thelib as libelle
|
|
198
|
-
from senat.dosleg_the as the
|
|
199
|
-
left join senat.dosleg_loithe as loithe on loithe.thecle = the.thecle
|
|
200
|
-
where loithe.loicod = ${loiIdSql}
|
|
201
|
-
) as theme_rows
|
|
202
|
-
)
|
|
203
|
-
`;
|
|
204
|
-
}
|
|
205
|
-
function buildFindAllDossiersQuery() {
|
|
206
|
-
return {
|
|
207
|
-
params: [],
|
|
208
|
-
query: `
|
|
209
|
-
select
|
|
210
|
-
rtrim(loi.loicod) as code,
|
|
211
|
-
loi.numero,
|
|
212
|
-
loi.signet,
|
|
213
|
-
nullif(regexp_replace(loi.url_an, '^.*\\/(DL[^\\/]+)\\.asp$', '\\1'), '') as code_dossier_an,
|
|
214
|
-
loi.signetalt as signet_alternatif,
|
|
215
|
-
rtrim(loi.motclef) as mot_cle,
|
|
216
|
-
rtrim(loi.loient) as titre_court,
|
|
217
|
-
rtrim(typloi.typloiden) || ' ' || rtrim(loi.loitit) as titre,
|
|
218
|
-
rtrim(typloi.typloiden) || ' ' || rtrim(loi.loiint) as titre_long,
|
|
219
|
-
rtrim(typloi.typloiden) || ' ' || rtrim(loi.loiintori) as titre_long_original,
|
|
220
|
-
'https://www.senat.fr/dossier-legislatif/' || loi.signet || '.html' as url,
|
|
221
|
-
loi.urgence,
|
|
222
|
-
rtrim(typloi.groupe) as code_nature_dossier,
|
|
223
|
-
rtrim(typloi.typloilib) as libelle_type_dossier,
|
|
224
|
-
rtrim(etaloi.etaloilib) as etat_dossier,
|
|
225
|
-
loi.url_an as url_dossier_assemblee_nationale,
|
|
226
|
-
loi.url_presart as url_presentation_articles,
|
|
227
|
-
loi.url_ordonnance as url_ordonnance,
|
|
228
|
-
loi.orgcod as code_organisme_resolution,
|
|
229
|
-
deccoc.deccoclib as libelle_decision_CoC,
|
|
230
|
-
to_char(loi.date_decision, 'YYYY-MM-DD') as date_decision_CoC,
|
|
231
|
-
loi.num_decision as num_decision_CoC,
|
|
232
|
-
loi.deccocurl as url_decision_CoC,
|
|
233
|
-
loi.doscocurl as url_dossier_CoC,
|
|
234
|
-
to_char(loi.saisine_date, 'YYYY-MM-DD') as date_saisine_CoC,
|
|
235
|
-
loi.saisine_par as condition_saisine_CoC,
|
|
236
|
-
to_char(loi.proaccdat, 'YYYY-MM-DD') as date_procedure_acceleree,
|
|
237
|
-
to_char(loi.proaccoppdat, 'YYYY-MM-DD') as date_opposition_procedure_acceleree,
|
|
238
|
-
to_char(loi.retproaccdat, 'YYYY-MM-DD') as date_retrait_procedure_acceleree,
|
|
239
|
-
to_char(loi.date_loi, 'YYYY-MM-DD') as date_promulgation,
|
|
240
|
-
case
|
|
241
|
-
when loi.loititjo is not null then rtrim(typloi.typloiden) || ' ' || rtrim(loi.loititjo)
|
|
242
|
-
else ''
|
|
243
|
-
end as titre_JO,
|
|
244
|
-
to_char(loi.loidatjo, 'YYYY-MM-DD') as date_publication_JO,
|
|
245
|
-
loi.loinumjo as numero_JO,
|
|
246
|
-
loi.url_jo as url_JO,
|
|
247
|
-
to_char(loi.loidatjo2, 'YYYY-MM-DD') as date_publication_JO_correctif_1,
|
|
248
|
-
loi.loinumjo2 as numero_JO_correctif_1,
|
|
249
|
-
loi.url_jo2 as url_JO_correctif_1,
|
|
250
|
-
to_char(loi.loidatjo3, 'YYYY-MM-DD') as date_publication_JO_correctif_2,
|
|
251
|
-
loi.loinumjo3 as numero_JO_correctif_2,
|
|
252
|
-
loi.url_jo3 as url_JO_correctif_2,
|
|
253
|
-
${buildLecturesSql("loi.loicod")} as lectures,
|
|
254
|
-
${buildThemesSql("loi.loicod")} as themes
|
|
255
|
-
from senat.dosleg_loi as loi
|
|
256
|
-
left join senat.dosleg_typloi as typloi on typloi.typloicod = loi.typloicod
|
|
257
|
-
left join senat.dosleg_etaloi as etaloi on etaloi.etaloicod = loi.etaloicod
|
|
258
|
-
left join senat.dosleg_deccoc as deccoc on deccoc.deccoccod = loi.deccoccod
|
|
259
|
-
`,
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
export async function* findAllDossiers() {
|
|
263
|
-
const { query, params } = buildFindAllDossiersQuery();
|
|
264
|
-
for await (const row of streamUnsafeQuery(query, params)) {
|
|
265
|
-
if (!row.signet) {
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
yield {
|
|
269
|
-
...row,
|
|
270
|
-
signet: row.signet,
|
|
271
|
-
lectures: row.lectures ?? [],
|
|
272
|
-
themes: row.themes ?? [],
|
|
273
|
-
};
|
|
274
|
-
}
|
|
62
|
+
const findAllDossiersQuery = dbSenat
|
|
63
|
+
.withSchema("dosleg")
|
|
64
|
+
.selectFrom("loi")
|
|
65
|
+
.leftJoin("typloi", "typloi.typloicod", "loi.typloicod")
|
|
66
|
+
.leftJoin("etaloi", "etaloi.etaloicod", "loi.etaloicod")
|
|
67
|
+
.leftJoin("deccoc", "deccoc.deccoccod", "loi.deccoccod")
|
|
68
|
+
.select(({ eb, ref, val }) => [
|
|
69
|
+
rtrim(ref("loi.loicod")).as("code"),
|
|
70
|
+
"loi.numero as numero",
|
|
71
|
+
"loi.signet as signet",
|
|
72
|
+
sql `NULLIF(regexp_replace(loi.url_an, '^.*\\/(DL[^\\/]+)\\.asp$', '\\1'), '')`.as("code_dossier_an"),
|
|
73
|
+
"loi.signetalt as signet_alternatif",
|
|
74
|
+
rtrim(ref("loi.motclef")).as("mot_cle"),
|
|
75
|
+
rtrim(ref("loi.loient")).as("titre_court"),
|
|
76
|
+
concat(rtrim(ref("typloi.typloiden")), val(" "), rtrim(ref("loi.loitit"))).as("titre"),
|
|
77
|
+
concat(rtrim(ref("typloi.typloiden")), val(" "), rtrim(ref("loi.loiint"))).as("titre_long"),
|
|
78
|
+
concat(rtrim(ref("typloi.typloiden")), val(" "), rtrim(ref("loi.loiintori"))).as("titre_long_original"),
|
|
79
|
+
concat(val("https://www.senat.fr/dossier-legislatif/"), ref("loi.signet"), val(".html")).as("url"),
|
|
80
|
+
"loi.urgence as urgence",
|
|
81
|
+
rtrim(ref("typloi.groupe")).as("code_nature_dossier"),
|
|
82
|
+
rtrim(ref("typloi.typloilib")).as("libelle_type_dossier"),
|
|
83
|
+
rtrim(ref("etaloi.etaloilib")).as("etat_dossier"),
|
|
84
|
+
"loi.url_an as url_dossier_assemblee_nationale",
|
|
85
|
+
"loi.url_presart as url_presentation_articles",
|
|
86
|
+
"loi.url_ordonnance as url_ordonnance",
|
|
87
|
+
"loi.orgcod as code_organisme_resolution",
|
|
88
|
+
"deccoc.deccoclib as libelle_decision_CoC",
|
|
89
|
+
toDateString(ref("loi.date_decision")).as("date_decision_CoC"),
|
|
90
|
+
"loi.num_decision as num_decision_CoC",
|
|
91
|
+
"loi.deccocurl as url_decision_CoC",
|
|
92
|
+
"loi.doscocurl as url_dossier_CoC",
|
|
93
|
+
toDateString(ref("loi.saisine_date")).as("date_saisine_CoC"),
|
|
94
|
+
"loi.saisine_par as condition_saisine_CoC",
|
|
95
|
+
toDateString(ref("loi.proaccdat")).as("date_procedure_acceleree"),
|
|
96
|
+
toDateString(ref("loi.proaccoppdat")).as("date_opposition_procedure_acceleree"),
|
|
97
|
+
toDateString(ref("loi.retproaccdat")).as("date_retrait_procedure_acceleree"),
|
|
98
|
+
toDateString(ref("loi.date_loi")).as("date_promulgation"),
|
|
99
|
+
eb
|
|
100
|
+
.case()
|
|
101
|
+
.when("loi.loititjo", "is not", null)
|
|
102
|
+
.then(concat(rtrim(ref("typloi.typloiden")), val(" "), rtrim(ref("loi.loititjo"))))
|
|
103
|
+
.else("")
|
|
104
|
+
.end()
|
|
105
|
+
.as("titre_JO"),
|
|
106
|
+
toDateString(ref("loi.loidatjo")).as("date_publication_JO"),
|
|
107
|
+
"loi.loinumjo as numero_JO",
|
|
108
|
+
"loi.url_jo as url_JO",
|
|
109
|
+
toDateString(ref("loi.loidatjo2")).as("date_publication_JO_correctif_1"),
|
|
110
|
+
"loi.loinumjo2 as numero_JO_correctif_1",
|
|
111
|
+
"loi.url_jo2 as url_JO_correctif_1",
|
|
112
|
+
toDateString(ref("loi.loidatjo3")).as("date_publication_JO_correctif_2"),
|
|
113
|
+
"loi.loinumjo3 as numero_JO_correctif_2",
|
|
114
|
+
"loi.url_jo3 as url_JO_correctif_2",
|
|
115
|
+
lectures(ref("loi.loicod")).as("lectures"),
|
|
116
|
+
themes(ref("loi.loicod")).as("themes"),
|
|
117
|
+
])
|
|
118
|
+
.$narrowType();
|
|
119
|
+
export function findAllDossiers() {
|
|
120
|
+
return findAllDossiersQuery.stream();
|
|
275
121
|
}
|
|
276
122
|
export function getCodeActeLecture(codeNatureDossier, typeLecture, assemblee) {
|
|
277
123
|
const codeAssemblee = assemblee === "Sénat" ? "SN" : assemblee === "Assemblée nationale" ? "AN" : null;
|
|
@@ -304,16 +150,7 @@ export function getCodeActeLecture(codeNatureDossier, typeLecture, assemblee) {
|
|
|
304
150
|
}
|
|
305
151
|
return null;
|
|
306
152
|
}
|
|
307
|
-
|
|
308
|
-
if (!value) {
|
|
309
|
-
return Number.POSITIVE_INFINITY;
|
|
310
|
-
}
|
|
311
|
-
const timestamp = new Date(value).getTime();
|
|
312
|
-
return Number.isNaN(timestamp) ? Number.POSITIVE_INFINITY : timestamp;
|
|
313
|
-
}
|
|
314
|
-
function compareByDate(left, right) {
|
|
315
|
-
return getDateSortValue(left.date) - getDateSortValue(right.date);
|
|
316
|
-
}
|
|
153
|
+
// Helper pour déterminer le code de phase (SN1, SN2, CMP...)
|
|
317
154
|
function getPhasePrefix(lecture, assemblee) {
|
|
318
155
|
if (assemblee !== "Sénat")
|
|
319
156
|
return null;
|
|
@@ -322,33 +159,38 @@ function getPhasePrefix(lecture, assemblee) {
|
|
|
322
159
|
return "CMP";
|
|
323
160
|
if (typeLibelle.includes("nouvelle lecture"))
|
|
324
161
|
return "SNNLEC";
|
|
325
|
-
if (typeLibelle.includes("
|
|
162
|
+
if (typeLibelle.includes("d\u00e9finitive"))
|
|
326
163
|
return "SNLDEF";
|
|
327
164
|
if (typeLibelle.includes("unique"))
|
|
328
165
|
return "SNLUNI";
|
|
329
166
|
if (lecture.ordre_lecture) {
|
|
330
167
|
return `SN${lecture.ordre_lecture}`;
|
|
331
168
|
}
|
|
332
|
-
if (typeLibelle.includes("
|
|
169
|
+
if (typeLibelle.includes("premi\u00e8re"))
|
|
333
170
|
return "SN1";
|
|
334
|
-
if (typeLibelle.includes("
|
|
171
|
+
if (typeLibelle.includes("deuxi\u00e8me") || typeLibelle.includes("seconde"))
|
|
335
172
|
return "SN2";
|
|
336
173
|
return "SN1";
|
|
337
174
|
}
|
|
338
175
|
export function buildActesLegislatifs(dossier) {
|
|
339
176
|
const actes = [];
|
|
340
177
|
const loiSignet = dossier.signet;
|
|
341
|
-
const lectures = dossier.lectures
|
|
178
|
+
const lectures = dossier.lectures || [];
|
|
342
179
|
for (const lecture of lectures) {
|
|
343
|
-
const lecturesAssemblee = lecture.lectures_assemblee
|
|
180
|
+
const lecturesAssemblee = lecture.lectures_assemblee || [];
|
|
344
181
|
for (const lecAss of lecturesAssemblee) {
|
|
182
|
+
// On ne traite que la partie SÉNAT
|
|
345
183
|
if (lecAss.assemblee !== "Sénat")
|
|
346
184
|
continue;
|
|
347
185
|
const phasePrefix = getPhasePrefix(lecture, lecAss.assemblee);
|
|
348
186
|
if (!phasePrefix)
|
|
349
187
|
continue;
|
|
350
|
-
|
|
351
|
-
const
|
|
188
|
+
// Préparation des textes (tri chronologique)
|
|
189
|
+
const textes = lecAss.textes || [];
|
|
190
|
+
const textesTries = [...textes].sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());
|
|
191
|
+
// =================================================================
|
|
192
|
+
// A. DÉPÔT
|
|
193
|
+
// =================================================================
|
|
352
194
|
const depotTexte = textesTries.find((t) => (t.origine || "").toLowerCase().includes("déposé") ||
|
|
353
195
|
(t.origine || "").toLowerCase().includes("transmis") ||
|
|
354
196
|
t.ordre_origine === "0");
|
|
@@ -367,7 +209,10 @@ export function buildActesLegislatifs(dossier) {
|
|
|
367
209
|
code_organisme: null,
|
|
368
210
|
});
|
|
369
211
|
}
|
|
370
|
-
|
|
212
|
+
// =================================================================
|
|
213
|
+
// B. COMMISSION (Rapports)
|
|
214
|
+
// =================================================================
|
|
215
|
+
const rapports = lecAss.rapports || [];
|
|
371
216
|
for (const rap of rapports) {
|
|
372
217
|
if (rap.date) {
|
|
373
218
|
actes.push({
|
|
@@ -376,7 +221,8 @@ export function buildActesLegislatifs(dossier) {
|
|
|
376
221
|
libelle: `Rapport n°${rap.numero} de la commission`,
|
|
377
222
|
id: rap.id,
|
|
378
223
|
numero: rap.numero,
|
|
379
|
-
code_organisme: rap.code_organisme
|
|
224
|
+
code_organisme: rap.code_organisme,
|
|
225
|
+
adoption: rap.adoption,
|
|
380
226
|
uid: `${loiSignet}-${phasePrefix}-COM`,
|
|
381
227
|
session: lecAss.session,
|
|
382
228
|
chambre: "SN",
|
|
@@ -385,16 +231,20 @@ export function buildActesLegislatifs(dossier) {
|
|
|
385
231
|
});
|
|
386
232
|
}
|
|
387
233
|
}
|
|
388
|
-
|
|
234
|
+
// =================================================================
|
|
235
|
+
// C. SÉANCE PUBLIQUE
|
|
236
|
+
// =================================================================
|
|
237
|
+
const datesSeances = lecAss.dates_seances || [];
|
|
389
238
|
if (datesSeances.length > 0) {
|
|
390
|
-
|
|
239
|
+
// Tri des objets dates
|
|
240
|
+
datesSeances.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime());
|
|
391
241
|
const premiereSeance = datesSeances[0];
|
|
392
242
|
if (premiereSeance && premiereSeance.date) {
|
|
393
243
|
actes.push({
|
|
244
|
+
// Champs pour buildParlementActeLegislatif
|
|
394
245
|
code_acte: `${phasePrefix}-DEBATS-SEANCE`,
|
|
395
246
|
date: premiereSeance.date,
|
|
396
|
-
libelle:
|
|
397
|
-
id: null,
|
|
247
|
+
libelle: `Discussion en séance publique`,
|
|
398
248
|
uid: `${loiSignet}-${phasePrefix}-DEBATS-SEANCE`,
|
|
399
249
|
session: lecAss.session,
|
|
400
250
|
chambre: "SN",
|
|
@@ -403,6 +253,9 @@ export function buildActesLegislatifs(dossier) {
|
|
|
403
253
|
});
|
|
404
254
|
}
|
|
405
255
|
}
|
|
256
|
+
// =================================================================
|
|
257
|
+
// D. DÉCISION / VOTE
|
|
258
|
+
// =================================================================
|
|
406
259
|
const texteFinal = [...textesTries].reverse().find((t) => {
|
|
407
260
|
const origine = (t.origine || "").toLowerCase();
|
|
408
261
|
return (origine.includes("adopté") ||
|
|
@@ -436,16 +289,18 @@ export function buildActesLegislatifs(dossier) {
|
|
|
436
289
|
}
|
|
437
290
|
}
|
|
438
291
|
}
|
|
292
|
+
// =================================================================
|
|
293
|
+
// E. HORS LECTURE (CC & PROMULGATION)
|
|
294
|
+
// =================================================================
|
|
439
295
|
if (dossier.date_decision_CoC) {
|
|
440
296
|
actes.push({
|
|
441
297
|
code_acte: "CC",
|
|
442
298
|
date: dossier.date_decision_CoC,
|
|
443
|
-
libelle:
|
|
299
|
+
libelle: `Décision du Conseil constitutionnel`,
|
|
444
300
|
id: dossier.url_decision_CoC,
|
|
445
301
|
uid: `${loiSignet}-CC`,
|
|
446
302
|
chambre: "AN",
|
|
447
303
|
signet_dossier: loiSignet,
|
|
448
|
-
code_organisme: null,
|
|
449
304
|
texte_url: dossier.url_decision_CoC || dossier.url_dossier_CoC,
|
|
450
305
|
});
|
|
451
306
|
}
|
|
@@ -453,7 +308,7 @@ export function buildActesLegislatifs(dossier) {
|
|
|
453
308
|
actes.push({
|
|
454
309
|
code_acte: "PROM",
|
|
455
310
|
date: dossier.date_promulgation,
|
|
456
|
-
libelle:
|
|
311
|
+
libelle: `Promulgation de la loi`,
|
|
457
312
|
date_publication_JO: dossier.date_publication_JO,
|
|
458
313
|
numero_JO: dossier.numero_JO,
|
|
459
314
|
url_legifrance: dossier.url_JO,
|
|
@@ -461,8 +316,11 @@ export function buildActesLegislatifs(dossier) {
|
|
|
461
316
|
uid: `${loiSignet}-PROM`,
|
|
462
317
|
chambre: "AN",
|
|
463
318
|
signet_dossier: loiSignet,
|
|
464
|
-
code_organisme: null,
|
|
465
319
|
});
|
|
466
320
|
}
|
|
467
|
-
return actes.sort(
|
|
321
|
+
return actes.sort((a, b) => {
|
|
322
|
+
const dateA = new Date(a.date).getTime();
|
|
323
|
+
const dateB = new Date(b.date).getTime();
|
|
324
|
+
return dateA - dateB;
|
|
325
|
+
});
|
|
468
326
|
}
|
package/lib/src/model/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { findAllAmendements } from "./ameli
|
|
2
|
-
export { findAll as findAllDebats } from "./debats
|
|
3
|
-
export { findAllDossiers } from "./dosleg
|
|
4
|
-
export { findAllTextes, findAllRapports } from "./documents
|
|
5
|
-
export { findAllScrutins } from "./scrutins
|
|
6
|
-
export { findAll as findAllQuestions } from "./questions
|
|
7
|
-
export { findAll as findAllSens, findAllCirconscriptions, findAllOrganismes } from "./sens
|
|
1
|
+
export { findAllAmendements } from "./ameli";
|
|
2
|
+
export { findAll as findAllDebats } from "./debats";
|
|
3
|
+
export { findAllDossiers } from "./dosleg";
|
|
4
|
+
export { findAllTextes, findAllRapports } from "./documents";
|
|
5
|
+
export { findAllScrutins } from "./scrutins";
|
|
6
|
+
export { findAll as findAllQuestions } from "./questions";
|
|
7
|
+
export { findAll as findAllSens, findAllCirconscriptions, findAllOrganismes } from "./sens";
|
package/lib/src/model/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { findAllAmendements } from "./ameli
|
|
2
|
-
export { findAll as findAllDebats } from "./debats
|
|
3
|
-
export { findAllDossiers } from "./dosleg
|
|
4
|
-
export { findAllTextes, findAllRapports } from "./documents
|
|
5
|
-
export { findAllScrutins } from "./scrutins
|
|
6
|
-
export { findAll as findAllQuestions } from "./questions
|
|
7
|
-
export { findAll as findAllSens, findAllCirconscriptions, findAllOrganismes } from "./sens
|
|
1
|
+
export { findAllAmendements } from "./ameli";
|
|
2
|
+
export { findAll as findAllDebats } from "./debats";
|
|
3
|
+
export { findAllDossiers } from "./dosleg";
|
|
4
|
+
export { findAllTextes, findAllRapports } from "./documents";
|
|
5
|
+
export { findAllScrutins } from "./scrutins";
|
|
6
|
+
export { findAll as findAllQuestions } from "./questions";
|
|
7
|
+
export { findAll as findAllSens, findAllCirconscriptions, findAllOrganismes } from "./sens";
|