@tricoteuses/senat 2.22.16 → 2.23.0

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 (328) hide show
  1. package/README.md +168 -0
  2. package/lib/aggregates.d.ts +52 -0
  3. package/lib/aggregates.js +930 -0
  4. package/lib/aggregates.mjs +713 -0
  5. package/lib/aggregates.ts +833 -0
  6. package/lib/config.d.ts +10 -0
  7. package/lib/config.js +16 -0
  8. package/lib/config.mjs +16 -0
  9. package/lib/config.ts +26 -0
  10. package/lib/databases.d.ts +2 -0
  11. package/lib/databases.js +26 -0
  12. package/lib/databases.mjs +57 -0
  13. package/lib/databases.ts +71 -0
  14. package/lib/datasets.d.ts +34 -0
  15. package/lib/datasets.js +233 -0
  16. package/lib/datasets.mjs +78 -0
  17. package/lib/datasets.ts +118 -0
  18. package/lib/fields.d.ts +10 -0
  19. package/lib/fields.js +68 -0
  20. package/lib/fields.mjs +22 -0
  21. package/lib/fields.ts +29 -0
  22. package/lib/git.d.ts +26 -0
  23. package/lib/git.js +167 -0
  24. package/lib/index.d.ts +13 -0
  25. package/lib/index.js +1 -0
  26. package/lib/index.mjs +7 -0
  27. package/lib/index.ts +64 -0
  28. package/lib/inserters.d.ts +98 -0
  29. package/lib/inserters.js +500 -0
  30. package/lib/inserters.mjs +360 -0
  31. package/lib/inserters.ts +521 -0
  32. package/lib/legislatures.json +38 -0
  33. package/lib/loaders.d.ts +58 -0
  34. package/lib/loaders.js +286 -0
  35. package/lib/loaders.mjs +158 -0
  36. package/lib/loaders.ts +271 -0
  37. package/lib/model/agenda.d.ts +6 -0
  38. package/lib/model/agenda.js +148 -0
  39. package/lib/model/ameli.d.ts +51 -0
  40. package/lib/model/ameli.js +149 -0
  41. package/lib/model/ameli.mjs +84 -0
  42. package/lib/model/ameli.ts +100 -0
  43. package/lib/model/commission.d.ts +18 -0
  44. package/lib/model/commission.js +269 -0
  45. package/lib/model/debats.d.ts +67 -0
  46. package/lib/model/debats.js +95 -0
  47. package/lib/model/debats.mjs +43 -0
  48. package/lib/model/debats.ts +68 -0
  49. package/lib/model/documents.d.ts +12 -0
  50. package/lib/model/documents.js +151 -0
  51. package/lib/model/dosleg.d.ts +7 -0
  52. package/lib/model/dosleg.js +326 -0
  53. package/lib/model/dosleg.mjs +196 -0
  54. package/lib/model/dosleg.ts +240 -0
  55. package/lib/model/index.d.ts +7 -0
  56. package/lib/model/index.js +7 -0
  57. package/lib/model/index.mjs +5 -0
  58. package/lib/model/index.ts +15 -0
  59. package/lib/model/questions.d.ts +45 -0
  60. package/lib/model/questions.js +89 -0
  61. package/lib/model/questions.mjs +71 -0
  62. package/lib/model/questions.ts +93 -0
  63. package/lib/model/scrutins.d.ts +13 -0
  64. package/lib/model/scrutins.js +114 -0
  65. package/lib/model/seance.d.ts +3 -0
  66. package/lib/model/seance.js +267 -0
  67. package/lib/model/sens.d.ts +146 -0
  68. package/lib/model/sens.js +454 -0
  69. package/lib/model/sens.mjs +415 -0
  70. package/lib/model/sens.ts +516 -0
  71. package/lib/model/texte.d.ts +7 -0
  72. package/lib/model/texte.js +256 -0
  73. package/lib/model/texte.mjs +208 -0
  74. package/lib/model/texte.ts +229 -0
  75. package/lib/model/util.d.ts +9 -0
  76. package/lib/model/util.js +38 -0
  77. package/lib/model/util.mjs +19 -0
  78. package/lib/model/util.ts +32 -0
  79. package/lib/parsers/texte.d.ts +7 -0
  80. package/lib/parsers/texte.js +228 -0
  81. package/lib/raw_types/ameli.d.ts +914 -0
  82. package/lib/raw_types/ameli.js +5 -0
  83. package/lib/raw_types/ameli.mjs +163 -0
  84. package/lib/raw_types/debats.d.ts +207 -0
  85. package/lib/raw_types/debats.js +5 -0
  86. package/lib/raw_types/debats.mjs +58 -0
  87. package/lib/raw_types/dosleg.d.ts +1619 -0
  88. package/lib/raw_types/dosleg.js +5 -0
  89. package/lib/raw_types/dosleg.mjs +438 -0
  90. package/lib/raw_types/questions.d.ts +419 -0
  91. package/lib/raw_types/questions.js +5 -0
  92. package/lib/raw_types/questions.mjs +11 -0
  93. package/lib/raw_types/senat.d.ts +11368 -0
  94. package/lib/raw_types/senat.js +5 -0
  95. package/lib/raw_types/sens.d.ts +8248 -0
  96. package/lib/raw_types/sens.js +5 -0
  97. package/lib/raw_types/sens.mjs +508 -0
  98. package/lib/raw_types_kysely/ameli.d.ts +915 -0
  99. package/lib/raw_types_kysely/ameli.js +7 -0
  100. package/lib/raw_types_kysely/ameli.mjs +5 -0
  101. package/lib/raw_types_kysely/ameli.ts +951 -0
  102. package/lib/raw_types_kysely/debats.d.ts +207 -0
  103. package/lib/raw_types_kysely/debats.js +7 -0
  104. package/lib/raw_types_kysely/debats.mjs +5 -0
  105. package/lib/raw_types_kysely/debats.ts +222 -0
  106. package/lib/raw_types_kysely/dosleg.d.ts +3532 -0
  107. package/lib/raw_types_kysely/dosleg.js +7 -0
  108. package/lib/raw_types_kysely/dosleg.mjs +5 -0
  109. package/lib/raw_types_kysely/dosleg.ts +3621 -0
  110. package/lib/raw_types_kysely/questions.d.ts +414 -0
  111. package/lib/raw_types_kysely/questions.js +7 -0
  112. package/lib/raw_types_kysely/questions.mjs +5 -0
  113. package/lib/raw_types_kysely/questions.ts +426 -0
  114. package/lib/raw_types_kysely/sens.d.ts +4394 -0
  115. package/lib/raw_types_kysely/sens.js +7 -0
  116. package/lib/raw_types_kysely/sens.mjs +5 -0
  117. package/lib/raw_types_kysely/sens.ts +4499 -0
  118. package/lib/raw_types_schemats/ameli.d.ts +539 -0
  119. package/lib/raw_types_schemats/ameli.js +2 -0
  120. package/lib/raw_types_schemats/ameli.mjs +2 -0
  121. package/lib/raw_types_schemats/ameli.ts +601 -0
  122. package/lib/raw_types_schemats/debats.d.ts +127 -0
  123. package/lib/raw_types_schemats/debats.js +2 -0
  124. package/lib/raw_types_schemats/debats.mjs +2 -0
  125. package/lib/raw_types_schemats/debats.ts +145 -0
  126. package/lib/raw_types_schemats/dosleg.d.ts +977 -0
  127. package/lib/raw_types_schemats/dosleg.js +2 -0
  128. package/lib/raw_types_schemats/dosleg.mjs +2 -0
  129. package/lib/raw_types_schemats/dosleg.ts +2193 -0
  130. package/lib/raw_types_schemats/questions.d.ts +235 -0
  131. package/lib/raw_types_schemats/questions.js +2 -0
  132. package/lib/raw_types_schemats/questions.mjs +2 -0
  133. package/lib/raw_types_schemats/questions.ts +249 -0
  134. package/lib/raw_types_schemats/sens.d.ts +6915 -0
  135. package/lib/raw_types_schemats/sens.js +2 -0
  136. package/lib/raw_types_schemats/sens.mjs +2 -0
  137. package/lib/raw_types_schemats/sens.ts +2907 -0
  138. package/lib/scripts/convert_data.d.ts +1 -0
  139. package/lib/scripts/convert_data.js +354 -0
  140. package/lib/scripts/convert_data.mjs +181 -0
  141. package/lib/scripts/convert_data.ts +243 -0
  142. package/lib/scripts/data-download.d.ts +1 -0
  143. package/lib/scripts/data-download.js +12 -0
  144. package/lib/scripts/datautil.d.ts +8 -0
  145. package/lib/scripts/datautil.js +34 -0
  146. package/lib/scripts/datautil.mjs +16 -0
  147. package/lib/scripts/datautil.ts +19 -0
  148. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  149. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  150. package/lib/scripts/parse_textes.d.ts +1 -0
  151. package/lib/scripts/parse_textes.js +44 -0
  152. package/lib/scripts/parse_textes.mjs +46 -0
  153. package/lib/scripts/parse_textes.ts +65 -0
  154. package/lib/scripts/retrieve_agenda.d.ts +1 -0
  155. package/lib/scripts/retrieve_agenda.js +132 -0
  156. package/lib/scripts/retrieve_cr_commission.d.ts +1 -0
  157. package/lib/scripts/retrieve_cr_commission.js +364 -0
  158. package/lib/scripts/retrieve_cr_seance.d.ts +6 -0
  159. package/lib/scripts/retrieve_cr_seance.js +347 -0
  160. package/lib/scripts/retrieve_documents.d.ts +3 -0
  161. package/lib/scripts/retrieve_documents.js +219 -0
  162. package/lib/scripts/retrieve_documents.mjs +249 -0
  163. package/lib/scripts/retrieve_documents.ts +298 -0
  164. package/lib/scripts/retrieve_open_data.d.ts +1 -0
  165. package/lib/scripts/retrieve_open_data.js +315 -0
  166. package/lib/scripts/retrieve_open_data.mjs +217 -0
  167. package/lib/scripts/retrieve_open_data.ts +268 -0
  168. package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
  169. package/lib/scripts/retrieve_senateurs_photos.js +147 -0
  170. package/lib/scripts/retrieve_senateurs_photos.mjs +147 -0
  171. package/lib/scripts/retrieve_senateurs_photos.ts +177 -0
  172. package/lib/scripts/retrieve_videos.d.ts +1 -0
  173. package/lib/scripts/retrieve_videos.js +461 -0
  174. package/lib/scripts/shared/cli_helpers.d.ts +95 -0
  175. package/lib/scripts/shared/cli_helpers.js +91 -0
  176. package/lib/scripts/shared/cli_helpers.ts +36 -0
  177. package/lib/scripts/shared/util.d.ts +4 -0
  178. package/lib/scripts/shared/util.js +35 -0
  179. package/lib/scripts/shared/util.ts +33 -0
  180. package/lib/scripts/test_iter_load.d.ts +1 -0
  181. package/lib/scripts/test_iter_load.js +12 -0
  182. package/lib/src/config.d.ts +22 -0
  183. package/lib/src/config.js +17 -7
  184. package/lib/src/conversion_textes.js +5 -1
  185. package/lib/src/databases.d.ts +2 -1
  186. package/lib/src/databases_postgres.d.ts +4 -0
  187. package/lib/src/databases_postgres.js +23 -0
  188. package/lib/src/datasets.d.ts +4 -0
  189. package/lib/src/datasets.js +16 -2
  190. package/lib/src/git.d.ts +1 -0
  191. package/lib/src/git.js +45 -11
  192. package/lib/src/loaders.js +10 -4
  193. package/lib/src/model/agenda.js +2 -2
  194. package/lib/src/model/ameli.d.ts +64 -52
  195. package/lib/src/model/ameli.js +147 -145
  196. package/lib/src/model/ameli_postgres.d.ts +67 -0
  197. package/lib/src/model/ameli_postgres.js +150 -0
  198. package/lib/src/model/commission.d.ts +3 -2
  199. package/lib/src/model/commission.js +2 -2
  200. package/lib/src/model/debats.d.ts +38 -66
  201. package/lib/src/model/debats.js +110 -93
  202. package/lib/src/model/documents.d.ts +32 -12
  203. package/lib/src/model/documents.js +171 -130
  204. package/lib/src/model/dosleg.d.ts +142 -5
  205. package/lib/src/model/dosleg.js +298 -156
  206. package/lib/src/model/questions.d.ts +54 -45
  207. package/lib/src/model/questions.js +89 -87
  208. package/lib/src/model/scrutins.d.ts +48 -13
  209. package/lib/src/model/scrutins.js +118 -111
  210. package/lib/src/model/seance.js +3 -3
  211. package/lib/src/model/sens.d.ts +109 -179
  212. package/lib/src/model/sens.js +384 -484
  213. package/lib/src/model/util.d.ts +0 -8
  214. package/lib/src/model/util.js +0 -23
  215. package/lib/src/parsers/texte.js +7 -7
  216. package/lib/src/raw_types_schemats/ameli.d.ts +4 -2
  217. package/lib/src/raw_types_schemats/debats.d.ts +2 -2
  218. package/lib/src/raw_types_schemats/dosleg.d.ts +2 -2
  219. package/lib/src/raw_types_schemats/questions.d.ts +2 -2
  220. package/lib/src/raw_types_schemats/sens.d.ts +10 -4216
  221. package/lib/src/scripts/convert_data.js +7 -6
  222. package/lib/src/scripts/convert_xml_to_html.js +2 -2
  223. package/lib/src/scripts/data-download.js +3 -2
  224. package/lib/src/scripts/retrieve_agenda.js +21 -9
  225. package/lib/src/scripts/retrieve_cr_commission.js +17 -17
  226. package/lib/src/scripts/retrieve_cr_seance.d.ts +14 -1
  227. package/lib/src/scripts/retrieve_cr_seance.js +10 -11
  228. package/lib/src/scripts/retrieve_documents.d.ts +11 -2
  229. package/lib/src/scripts/retrieve_documents.js +25 -14
  230. package/lib/src/scripts/retrieve_open_data.js +400 -145
  231. package/lib/src/scripts/retrieve_senateurs_photos.js +25 -11
  232. package/lib/src/scripts/retrieve_videos.js +12 -11
  233. package/lib/src/scripts/shared/cli_helpers.d.ts +1 -6
  234. package/lib/src/scripts/shared/cli_helpers.js +9 -8
  235. package/lib/src/scripts/shared/incremental_import_sql.d.ts +2 -0
  236. package/lib/src/scripts/shared/incremental_import_sql.js +894 -0
  237. package/lib/src/scripts/shared/prefixed_tables.d.ts +7 -0
  238. package/lib/src/scripts/shared/prefixed_tables.js +30 -0
  239. package/lib/src/scripts/shared/schema_version.d.ts +3 -0
  240. package/lib/src/scripts/shared/schema_version.js +97 -0
  241. package/lib/src/scripts/shared/staging_import.d.ts +3 -0
  242. package/lib/src/scripts/shared/staging_import.js +80 -0
  243. package/lib/src/scripts/shared/staging_metadata_sql.d.ts +1 -0
  244. package/lib/src/scripts/shared/staging_metadata_sql.js +221 -0
  245. package/lib/src/scripts/validate_prefixed_tables.d.ts +1 -0
  246. package/lib/src/scripts/validate_prefixed_tables.js +102 -0
  247. package/lib/src/types/texte.d.ts +1 -1
  248. package/lib/src/utils/cr_spliting.d.ts +9 -6
  249. package/lib/src/utils/cr_spliting.js +6 -101
  250. package/lib/src/utils/reunion_odj_building.d.ts +7 -3
  251. package/lib/src/utils/reunion_parsing.d.ts +2 -1
  252. package/lib/src/utils/reunion_parsing.js +2 -2
  253. package/lib/src/videos/match.js +8 -5
  254. package/lib/src/videos/pipeline.d.ts +6 -2
  255. package/lib/src/videos/pipeline.js +21 -8
  256. package/lib/src/videos/search.js +6 -2
  257. package/lib/strings.d.ts +1 -0
  258. package/lib/strings.js +18 -0
  259. package/lib/strings.mjs +18 -0
  260. package/lib/strings.ts +26 -0
  261. package/lib/tests/incrementalImportSql.test.d.ts +1 -0
  262. package/lib/tests/incrementalImportSql.test.js +155 -0
  263. package/lib/tests/prefixedTables.test.d.ts +1 -0
  264. package/lib/tests/prefixedTables.test.js +29 -0
  265. package/lib/tests/schemaVersion.test.d.ts +1 -0
  266. package/lib/tests/schemaVersion.test.js +23 -0
  267. package/lib/tests/validatePrefixedTables.test.d.ts +1 -0
  268. package/lib/tests/validatePrefixedTables.test.js +14 -0
  269. package/lib/types/agenda.d.ts +44 -0
  270. package/lib/types/agenda.js +1 -0
  271. package/lib/types/ameli.d.ts +5 -0
  272. package/lib/types/ameli.js +1 -0
  273. package/lib/types/ameli.mjs +13 -0
  274. package/lib/types/ameli.ts +21 -0
  275. package/lib/types/compte_rendu.d.ts +83 -0
  276. package/lib/types/compte_rendu.js +1 -0
  277. package/lib/types/debats.d.ts +2 -0
  278. package/lib/types/debats.js +1 -0
  279. package/lib/types/debats.mjs +2 -0
  280. package/lib/types/debats.ts +6 -0
  281. package/lib/types/dosleg.d.ts +70 -0
  282. package/lib/types/dosleg.js +1 -0
  283. package/lib/types/dosleg.mjs +151 -0
  284. package/lib/types/dosleg.ts +284 -0
  285. package/lib/types/questions.d.ts +2 -0
  286. package/lib/types/questions.js +1 -0
  287. package/lib/types/questions.mjs +1 -0
  288. package/lib/types/questions.ts +3 -0
  289. package/lib/types/sens.d.ts +10 -0
  290. package/lib/types/sens.js +1 -0
  291. package/lib/types/sens.mjs +1 -0
  292. package/lib/types/sens.ts +12 -0
  293. package/lib/types/sessions.d.ts +5 -0
  294. package/lib/types/sessions.js +84 -0
  295. package/lib/types/sessions.mjs +43 -0
  296. package/lib/types/sessions.ts +42 -0
  297. package/lib/types/texte.d.ts +74 -0
  298. package/lib/types/texte.js +16 -0
  299. package/lib/types/texte.mjs +16 -0
  300. package/lib/types/texte.ts +76 -0
  301. package/lib/typings/windows-1252.d.js +2 -0
  302. package/lib/typings/windows-1252.d.mjs +2 -0
  303. package/lib/typings/windows-1252.d.ts +11 -0
  304. package/lib/utils/cr_spliting.d.ts +28 -0
  305. package/lib/utils/cr_spliting.js +265 -0
  306. package/lib/utils/date.d.ts +10 -0
  307. package/lib/utils/date.js +100 -0
  308. package/lib/utils/nvs-timecode.d.ts +7 -0
  309. package/lib/utils/nvs-timecode.js +79 -0
  310. package/lib/utils/reunion_grouping.d.ts +9 -0
  311. package/lib/utils/reunion_grouping.js +361 -0
  312. package/lib/utils/reunion_odj_building.d.ts +5 -0
  313. package/lib/utils/reunion_odj_building.js +154 -0
  314. package/lib/utils/reunion_parsing.d.ts +23 -0
  315. package/lib/utils/reunion_parsing.js +209 -0
  316. package/lib/utils/scoring.d.ts +14 -0
  317. package/lib/utils/scoring.js +147 -0
  318. package/lib/utils/string_cleaning.d.ts +7 -0
  319. package/lib/utils/string_cleaning.js +57 -0
  320. package/lib/validators/config.d.ts +9 -0
  321. package/lib/validators/config.js +10 -0
  322. package/lib/validators/config.mjs +54 -0
  323. package/lib/validators/config.ts +79 -0
  324. package/lib/validators/senat.d.ts +0 -0
  325. package/lib/validators/senat.js +28 -0
  326. package/lib/validators/senat.mjs +24 -0
  327. package/lib/validators/senat.ts +26 -0
  328. package/package.json +6 -10
@@ -1,141 +1,182 @@
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 stripTrailingHashes(expr) {
6
- return sql `regexp_replace(${expr}, '#+$', '')`;
1
+ import { streamUnsafeQuery } from "../databases_postgres";
2
+ function buildAuteursRapportSql(rapportIdSql) {
3
+ return `
4
+ (
5
+ select coalesce(json_agg(author_rows order by author_rows.ordre_num nulls last), '[]'::json)
6
+ from (
7
+ select
8
+ auteur.prenom as prenom,
9
+ auteur.nomuse as nom_usuel,
10
+ auteur.autmat as matricule,
11
+ ecr.ecrnumtri::text as ordre,
12
+ ecr.ecrnumtri as ordre_num,
13
+ rolsig.rolsiglib as role,
14
+ ecr.ecrqua as qualite
15
+ from senat.dosleg_auteur as auteur
16
+ left join senat.dosleg_ecr as ecr on ecr.autcod = auteur.autcod
17
+ left join senat.dosleg_rolsig as rolsig on rolsig.signataire = ecr.signataire
18
+ where ecr.rapcod = ${rapportIdSql}
19
+ ) as author_rows
20
+ )
21
+ `;
7
22
  }
8
- function orderOrdreOrigineTexte(expr) {
9
- return sql `array_position(array['0','2','1'], ${expr})`;
23
+ function buildDocumentsAttachesSql(rapportIdSql) {
24
+ return `
25
+ (
26
+ select coalesce(json_agg(attached_rows), '[]'::json)
27
+ from (
28
+ select
29
+ docatt.docatturl as url,
30
+ typatt.typattlib as type_document
31
+ from senat.dosleg_docatt as docatt
32
+ left join senat.dosleg_typatt as typatt on docatt.typattcod = typatt.typattcod
33
+ where docatt.rapcod = ${rapportIdSql}
34
+ ) as attached_rows
35
+ )
36
+ `;
10
37
  }
11
- function auteursRapport(rapportId) {
12
- return jsonArrayFrom(dbSenat
13
- .withSchema("dosleg")
14
- .selectFrom("dosleg.auteur")
15
- .leftJoin("dosleg.ecr", "dosleg.ecr.autcod", "dosleg.auteur.autcod")
16
- .leftJoin("dosleg.rolsig", "dosleg.rolsig.signataire", "dosleg.ecr.signataire")
17
- .where("dosleg.ecr.rapcod", "=", rapportId)
18
- .select([
19
- "dosleg.auteur.prenom as prenom",
20
- "dosleg.auteur.nomuse as nom_usuel",
21
- "dosleg.auteur.autmat as matricule",
22
- "dosleg.ecr.ecrnumtri as ordre",
23
- "dosleg.rolsig.rolsiglib as role",
24
- "dosleg.ecr.ecrqua as qualite",
25
- ])
26
- .orderBy("dosleg.ecr.ecrnumtri", "asc"));
38
+ function buildAuteursTexteSql(texteIdSql) {
39
+ return `
40
+ (
41
+ select coalesce(json_agg(author_rows order by author_rows.ordre_num nulls last), '[]'::json)
42
+ from (
43
+ select
44
+ auteur.prenom as prenom,
45
+ auteur.nomuse as nom_usuel,
46
+ auteur.autmat as matricule,
47
+ ecr.ecrnumtri::text as ordre,
48
+ ecr.ecrnumtri as ordre_num,
49
+ rolsig.rolsiglib as role,
50
+ ecr.ecrqua as qualite
51
+ from senat.dosleg_auteur as auteur
52
+ left join senat.dosleg_ecr as ecr on ecr.autcod = auteur.autcod
53
+ left join senat.dosleg_rolsig as rolsig on rolsig.signataire = ecr.signataire
54
+ where ecr.texcod = ${texteIdSql}
55
+ ) as author_rows
56
+ )
57
+ `;
27
58
  }
28
- function documentsAttaches(rapportId) {
29
- return jsonArrayFrom(dbSenat
30
- .withSchema("dosleg")
31
- .selectFrom("docatt")
32
- .leftJoin("typatt", "docatt.typattcod", "typatt.typattcod")
33
- .where("docatt.rapcod", "=", rapportId)
34
- .select(["docatt.docatturl as url", "typatt.typattlib as type_document"]));
59
+ function stripTrailingHashesSql(expr) {
60
+ return `regexp_replace(${expr}, '#+$', '')`;
35
61
  }
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(stripTrailingHashes(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(stripTrailingHashes(concat(val("https://www.senat.fr/rap/"), rtrim(ref("rap.rapurl")))))
51
- .else(stripTrailingHashes(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
+ function rapportIdSql() {
63
+ return `
64
+ case
65
+ when rap.rapurl is not null then
66
+ ${stripTrailingHashesSql("regexp_replace(trim(rap.rapurl), '^(.*/)?(.*?)(\\.html)?$', '\\2')")}
67
+ else null
68
+ end
69
+ `;
62
70
  }
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) => ["loi.signet as signet_dossier", ...selectRapportAttributes(args)]);
74
- export function rapports(lectureAssembleeId) {
75
- return jsonArrayFrom(baseQueryRapports.select(selectRapportAttributes).where("lecassrap.lecassidt", "=", lectureAssembleeId));
71
+ function rapportUrlSql() {
72
+ return `
73
+ case
74
+ when rap.typurl = 'I' then ${stripTrailingHashesSql("'https://www.senat.fr/rap/' || rtrim(rap.rapurl)")}
75
+ else ${stripTrailingHashesSql("rtrim(rap.rapurl)")}
76
+ end
77
+ `;
76
78
  }
77
- function auteursTexte(texteId) {
78
- return jsonArrayFrom(dbSenat
79
- .withSchema("dosleg")
80
- .selectFrom("auteur")
81
- .leftJoin("ecr", "ecr.autcod", "auteur.autcod")
82
- .leftJoin("rolsig", "rolsig.signataire", "ecr.signataire")
83
- .where("ecr.texcod", "=", texteId)
84
- .select([
85
- "auteur.prenom as prenom",
86
- "auteur.nomuse as nom_usuel",
87
- "auteur.autmat as matricule",
88
- "ecr.ecrnumtri as ordre",
89
- "rolsig.rolsiglib as role",
90
- "ecr.ecrqua as qualite",
91
- ])
92
- .orderBy("ecr.ecrnumtri", "asc"));
79
+ function texteIdSql() {
80
+ return `
81
+ case
82
+ when texte.texurl is not null then
83
+ ${stripTrailingHashesSql("regexp_replace(trim(texte.texurl), '^(.*/)?(.*?)(\\.html)?$', '\\2')")}
84
+ else null
85
+ end
86
+ `;
93
87
  }
94
- function selectTexteAttributes({ eb, ref, val }) {
95
- return [
96
- "texte.texnum as numero",
97
- "texte.orgcod as code_organisme",
98
- eb
99
- .case()
100
- .when("texte.texurl", "is not", null)
101
- .then(stripTrailingHashes(sql `regexp_replace(trim(${ref("texte.texurl")}), '^(.*/)?(.*?)(\\.html)?$', '\\2')`))
102
- .else(null)
103
- .end()
104
- .as("id"),
105
- eb
106
- .case()
107
- .when("texte.typurl", "=", "I")
108
- .then(stripTrailingHashes(concat(val("https://www.senat.fr/leg/"), rtrim(ref("texte.texurl")))))
109
- .else(stripTrailingHashes(rtrim(ref("texte.texurl"))))
110
- .end()
111
- .as("url"),
112
- rtrim(ref("oritxt.oritxtlib")).as("origine"),
113
- "oritxt.oriordre as ordre_origine",
114
- "oritxt.oritxtado as code_adoption",
115
- "oritxt.oritxtmod as modification",
116
- rtrim(ref("typtxt.typtxtlib")).as("type"),
117
- toDateString(ref("texte.txtoritxtdat")).as("date"),
118
- "texte.sesann as session",
119
- auteursTexte(ref("texte.texcod")).as("auteurs"),
120
- ];
88
+ function texteUrlSql() {
89
+ return `
90
+ case
91
+ when texte.typurl = 'I' then ${stripTrailingHashesSql("'https://www.senat.fr/leg/' || rtrim(texte.texurl)")}
92
+ else ${stripTrailingHashesSql("rtrim(texte.texurl)")}
93
+ end
94
+ `;
121
95
  }
122
- const baseQueryTextes = dbSenat
123
- .withSchema("dosleg")
124
- .selectFrom("texte")
125
- .leftJoin("oritxt", "oritxt.oritxtcod", "texte.oritxtcod")
126
- .leftJoin("typtxt", "typtxt.typtxtcod", "texte.typtxtcod")
127
- .orderBy(({ ref }) => orderOrdreOrigineTexte(ref("oritxt.oriordre")));
128
- const queryTextes = baseQueryTextes
129
- .leftJoin("lecass", "lecass.lecassidt", "texte.lecassidt")
130
- .leftJoin("lecture", "lecture.lecidt", "lecass.lecidt")
131
- .leftJoin("loi", "loi.loicod", "lecture.loicod")
132
- .select((args) => ["loi.signet as signet_dossier", ...selectTexteAttributes(args)]);
133
- export function textes(lectureAssembleeId) {
134
- return jsonArrayFrom(baseQueryTextes.select(selectTexteAttributes).where("texte.lecassidt", "=", lectureAssembleeId));
96
+ function baseRapportsSelect(includeSignetDossier) {
97
+ const signet = includeSignetDossier ? "loi.signet as signet_dossier," : "";
98
+ return `
99
+ select
100
+ ${signet}
101
+ rap.rapnum as numero,
102
+ raporg.orgcod as code_organisme,
103
+ ${rapportIdSql()} as id,
104
+ ${rapportUrlSql()} as url,
105
+ rtrim(denrap.libdenrap) as type,
106
+ rtrim(rtrim(rap.raptil)) as titre,
107
+ rtrim(rtrim(rap.rapsoustit)) as sous_titre,
108
+ to_char(rap.date_depot, 'YYYY-MM-DD') as date,
109
+ rap.sesann::int as session,
110
+ ${buildAuteursRapportSql("rap.rapcod")} as auteurs,
111
+ ${buildDocumentsAttachesSql("rap.rapcod")} as documents_annexes
112
+ `;
135
113
  }
136
- export function findAllTextes() {
137
- return queryTextes.stream();
114
+ function baseTextesSelect(includeSignetDossier) {
115
+ const signet = includeSignetDossier ? "loi.signet as signet_dossier," : "";
116
+ return `
117
+ select
118
+ ${signet}
119
+ texte.texnum as numero,
120
+ texte.orgcod as code_organisme,
121
+ ${texteIdSql()} as id,
122
+ ${texteUrlSql()} as url,
123
+ rtrim(oritxt.oritxtlib) as origine,
124
+ oritxt.oriordre as ordre_origine,
125
+ oritxt.oritxtado as code_adoption,
126
+ oritxt.oritxtmod as modification,
127
+ rtrim(typtxt.typtxtlib) as type,
128
+ to_char(texte.txtoritxtdat, 'YYYY-MM-DD') as date,
129
+ texte.sesann::int as session,
130
+ ${buildAuteursTexteSql("texte.texcod")} as auteurs,
131
+ null::text as titre
132
+ `;
138
133
  }
139
- export function findAllRapports() {
140
- return queryRapports.stream();
134
+ function buildFindAllRapportsQuery() {
135
+ return {
136
+ params: [],
137
+ query: `
138
+ ${baseRapportsSelect(true)}
139
+ from senat.dosleg_rap as rap
140
+ left join senat.dosleg_raporg as raporg on raporg.rapcod = rap.rapcod
141
+ left join senat.dosleg_denrap as denrap on denrap.coddenrap = rap.coddenrap
142
+ left join senat.dosleg_lecassrap as lecassrap on lecassrap.rapcod = rap.rapcod
143
+ left join senat.dosleg_lecass as lecass on lecass.lecassidt = lecassrap.lecassidt
144
+ left join senat.dosleg_lecture as lecture on lecture.lecidt = lecass.lecidt
145
+ left join senat.dosleg_loi as loi on loi.loicod = lecture.loicod
146
+ `,
147
+ };
148
+ }
149
+ function buildFindAllTextesQuery() {
150
+ return {
151
+ params: [],
152
+ query: `
153
+ ${baseTextesSelect(true)}
154
+ from senat.dosleg_texte as texte
155
+ left join senat.dosleg_oritxt as oritxt on oritxt.oritxtcod = texte.oritxtcod
156
+ left join senat.dosleg_typtxt as typtxt on typtxt.typtxtcod = texte.typtxtcod
157
+ left join senat.dosleg_lecass as lecass on lecass.lecassidt = texte.lecassidt
158
+ left join senat.dosleg_lecture as lecture on lecture.lecidt = lecass.lecidt
159
+ left join senat.dosleg_loi as loi on loi.loicod = lecture.loicod
160
+ order by array_position(array['0','2','1'], oritxt.oriordre)
161
+ `,
162
+ };
163
+ }
164
+ export async function* findAllTextes() {
165
+ const { query, params } = buildFindAllTextesQuery();
166
+ for await (const row of streamUnsafeQuery(query, params)) {
167
+ yield {
168
+ ...row,
169
+ auteurs: row.auteurs ?? [],
170
+ };
171
+ }
172
+ }
173
+ export async function* findAllRapports() {
174
+ const { query, params } = buildFindAllRapportsQuery();
175
+ for await (const row of streamUnsafeQuery(query, params)) {
176
+ yield {
177
+ ...row,
178
+ auteurs: row.auteurs ?? [],
179
+ documents_annexes: row.documents_annexes ?? [],
180
+ };
181
+ }
141
182
  }
@@ -1,7 +1,144 @@
1
- import { InferResult, SelectQueryBuilder } from "kysely";
2
- declare const findAllDossiersQuery: SelectQueryBuilder<any, any, any>;
3
- export declare function findAllDossiers(): AsyncIterableIterator<DossierLegislatifResult>;
1
+ export interface DossierThemeRow {
2
+ libelle: string;
3
+ }
4
+ type DossierAuteurRow = {
5
+ matricule: string | null;
6
+ nom_usuel: string;
7
+ ordre: string | null;
8
+ prenom: string | null;
9
+ qualite: string | null;
10
+ role: string | null;
11
+ };
12
+ type DossierDocumentAnnexeRow = {
13
+ type_document: string;
14
+ url: string | null;
15
+ };
16
+ type DossierTexte = {
17
+ auteurs?: DossierAuteurRow[] | null;
18
+ code_adoption?: string | null;
19
+ code_organisme?: string | null;
20
+ date?: string | null;
21
+ id?: string | null;
22
+ modification?: string | null;
23
+ numero?: number | string | null;
24
+ ordre_origine?: string | null;
25
+ origine?: string | null;
26
+ session?: number | null;
27
+ titre?: string | null;
28
+ type?: string | null;
29
+ url?: string | null;
30
+ };
31
+ type DossierRapport = {
32
+ auteurs?: DossierAuteurRow[] | null;
33
+ code_organisme?: string | null;
34
+ date?: string | null;
35
+ documents_annexes?: DossierDocumentAnnexeRow[] | null;
36
+ id?: string | null;
37
+ numero?: number | string | null;
38
+ session?: number | null;
39
+ sous_titre?: string | null;
40
+ titre?: string | null;
41
+ type?: string | null;
42
+ url?: string | null;
43
+ };
44
+ type DossierDateSeance = {
45
+ date?: string | null;
46
+ };
47
+ type DossierLectureAssemblee = {
48
+ assemblee?: string | null;
49
+ code_organisme?: string | null;
50
+ date_publication_amendements_commission?: string | null;
51
+ date_publication_amendements_seance?: string | null;
52
+ dates_seances?: DossierDateSeance[] | null;
53
+ libelle_organisme?: string | null;
54
+ loi_intitule_modifie?: string | null;
55
+ numero_petite_loi?: number | null;
56
+ ordre_lecture_assemblee?: string | null;
57
+ origine_proposition?: string | null;
58
+ rapports?: DossierRapport[] | null;
59
+ session?: number | null;
60
+ textes?: DossierTexte[] | null;
61
+ url_cr_debats?: string | null;
62
+ url_petite_loi?: string | null;
63
+ };
64
+ type DossierLecture = {
65
+ lectures_assemblee?: DossierLectureAssemblee[] | null;
66
+ libelle?: string | null;
67
+ ordre_lecture?: number | string | null;
68
+ type_lecture?: string | null;
69
+ };
70
+ export interface DossierLegislatifResult {
71
+ code: string | null;
72
+ code_dossier_an: string | null;
73
+ code_nature_dossier: string | null;
74
+ code_organisme_resolution: string | null;
75
+ condition_saisine_CoC: string | null;
76
+ date_decision_CoC: string | null;
77
+ date_opposition_procedure_acceleree: string | null;
78
+ date_procedure_acceleree: string | null;
79
+ date_publication_JO: string | null;
80
+ date_publication_JO_correctif_1: string | null;
81
+ date_publication_JO_correctif_2: string | null;
82
+ date_promulgation: string | null;
83
+ date_retrait_procedure_acceleree: string | null;
84
+ date_saisine_CoC: string | null;
85
+ etat_dossier: string | null;
86
+ lectures: DossierLecture[];
87
+ libelle_decision_CoC: string | null;
88
+ libelle_type_dossier: string | null;
89
+ mot_cle: string | null;
90
+ num_decision_CoC: string | null;
91
+ numero: string | null;
92
+ numero_JO: string | null;
93
+ numero_JO_correctif_1: string | null;
94
+ numero_JO_correctif_2: string | null;
95
+ signet: string;
96
+ signet_alternatif: string | null;
97
+ themes: DossierThemeRow[];
98
+ titre: string | null;
99
+ titre_JO: string;
100
+ titre_court: string | null;
101
+ titre_long: string | null;
102
+ titre_long_original: string | null;
103
+ urgence: string | null;
104
+ url: string;
105
+ url_JO: string | null;
106
+ url_JO_correctif_1: string | null;
107
+ url_JO_correctif_2: string | null;
108
+ url_decision_CoC: string | null;
109
+ url_dossier_assemblee_nationale: string | null;
110
+ url_dossier_CoC: string | null;
111
+ url_ordonnance: string | null;
112
+ url_presentation_articles: string | null;
113
+ }
114
+ export type DossierWithLectures = DossierLegislatifResult & {
115
+ actes_legislatifs?: ActeLegislatif[] | null;
116
+ lectures?: DossierLecture[] | null;
117
+ numero_JO?: string | number | null;
118
+ signet: string;
119
+ themes?: DossierThemeRow[] | null;
120
+ url_JO?: string | null;
121
+ url_decision_CoC?: string | null;
122
+ url_dossier_CoC?: string | null;
123
+ };
124
+ export type ActeLegislatif = {
125
+ adoption?: string;
126
+ chambre: "AN" | "SN";
127
+ code_acte: string;
128
+ code_organisme: string | null;
129
+ date: string;
130
+ date_publication_JO?: string | null;
131
+ id?: string | null;
132
+ libelle: string;
133
+ numero?: string | number | null;
134
+ numero_JO?: string | number | null;
135
+ session?: number | null;
136
+ signet_dossier: string;
137
+ texte_url?: string | null;
138
+ uid: string;
139
+ url_legifrance?: string | null;
140
+ };
141
+ export declare function findAllDossiers(): AsyncGenerator<DossierLegislatifResult, void, unknown>;
4
142
  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[];
143
+ export declare function buildActesLegislatifs(dossier: DossierWithLectures): ActeLegislatif[];
7
144
  export {};