@tricoteuses/senat 2.22.5 → 2.22.6

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 (246) hide show
  1. package/lib/src/model/ameli.d.ts +4 -0
  2. package/lib/src/model/ameli.js +3 -3
  3. package/package.json +1 -1
  4. package/lib/aggregates.d.ts +0 -52
  5. package/lib/aggregates.js +0 -930
  6. package/lib/aggregates.mjs +0 -713
  7. package/lib/aggregates.ts +0 -833
  8. package/lib/config.d.ts +0 -10
  9. package/lib/config.js +0 -16
  10. package/lib/config.mjs +0 -16
  11. package/lib/config.ts +0 -26
  12. package/lib/databases.d.ts +0 -2
  13. package/lib/databases.js +0 -26
  14. package/lib/databases.mjs +0 -57
  15. package/lib/databases.ts +0 -71
  16. package/lib/datasets.d.ts +0 -34
  17. package/lib/datasets.js +0 -233
  18. package/lib/datasets.mjs +0 -78
  19. package/lib/datasets.ts +0 -118
  20. package/lib/fields.d.ts +0 -10
  21. package/lib/fields.js +0 -68
  22. package/lib/fields.mjs +0 -22
  23. package/lib/fields.ts +0 -29
  24. package/lib/git.d.ts +0 -26
  25. package/lib/git.js +0 -167
  26. package/lib/index.d.ts +0 -13
  27. package/lib/index.js +0 -1
  28. package/lib/index.mjs +0 -7
  29. package/lib/index.ts +0 -64
  30. package/lib/inserters.d.ts +0 -98
  31. package/lib/inserters.js +0 -500
  32. package/lib/inserters.mjs +0 -360
  33. package/lib/inserters.ts +0 -521
  34. package/lib/legislatures.json +0 -38
  35. package/lib/loaders.d.ts +0 -58
  36. package/lib/loaders.js +0 -286
  37. package/lib/loaders.mjs +0 -158
  38. package/lib/loaders.ts +0 -271
  39. package/lib/model/agenda.d.ts +0 -6
  40. package/lib/model/agenda.js +0 -148
  41. package/lib/model/ameli.d.ts +0 -51
  42. package/lib/model/ameli.js +0 -149
  43. package/lib/model/ameli.mjs +0 -84
  44. package/lib/model/ameli.ts +0 -100
  45. package/lib/model/commission.d.ts +0 -18
  46. package/lib/model/commission.js +0 -269
  47. package/lib/model/debats.d.ts +0 -67
  48. package/lib/model/debats.js +0 -95
  49. package/lib/model/debats.mjs +0 -43
  50. package/lib/model/debats.ts +0 -68
  51. package/lib/model/documents.d.ts +0 -12
  52. package/lib/model/documents.js +0 -151
  53. package/lib/model/dosleg.d.ts +0 -7
  54. package/lib/model/dosleg.js +0 -326
  55. package/lib/model/dosleg.mjs +0 -196
  56. package/lib/model/dosleg.ts +0 -240
  57. package/lib/model/index.d.ts +0 -7
  58. package/lib/model/index.js +0 -7
  59. package/lib/model/index.mjs +0 -5
  60. package/lib/model/index.ts +0 -15
  61. package/lib/model/questions.d.ts +0 -45
  62. package/lib/model/questions.js +0 -89
  63. package/lib/model/questions.mjs +0 -71
  64. package/lib/model/questions.ts +0 -93
  65. package/lib/model/scrutins.d.ts +0 -13
  66. package/lib/model/scrutins.js +0 -114
  67. package/lib/model/seance.d.ts +0 -3
  68. package/lib/model/seance.js +0 -267
  69. package/lib/model/sens.d.ts +0 -146
  70. package/lib/model/sens.js +0 -454
  71. package/lib/model/sens.mjs +0 -415
  72. package/lib/model/sens.ts +0 -516
  73. package/lib/model/texte.d.ts +0 -7
  74. package/lib/model/texte.js +0 -256
  75. package/lib/model/texte.mjs +0 -208
  76. package/lib/model/texte.ts +0 -229
  77. package/lib/model/util.d.ts +0 -9
  78. package/lib/model/util.js +0 -38
  79. package/lib/model/util.mjs +0 -19
  80. package/lib/model/util.ts +0 -32
  81. package/lib/parsers/texte.d.ts +0 -7
  82. package/lib/parsers/texte.js +0 -228
  83. package/lib/raw_types/ameli.d.ts +0 -914
  84. package/lib/raw_types/ameli.js +0 -5
  85. package/lib/raw_types/ameli.mjs +0 -163
  86. package/lib/raw_types/debats.d.ts +0 -207
  87. package/lib/raw_types/debats.js +0 -5
  88. package/lib/raw_types/debats.mjs +0 -58
  89. package/lib/raw_types/dosleg.d.ts +0 -1619
  90. package/lib/raw_types/dosleg.js +0 -5
  91. package/lib/raw_types/dosleg.mjs +0 -438
  92. package/lib/raw_types/questions.d.ts +0 -419
  93. package/lib/raw_types/questions.js +0 -5
  94. package/lib/raw_types/questions.mjs +0 -11
  95. package/lib/raw_types/senat.d.ts +0 -11368
  96. package/lib/raw_types/senat.js +0 -5
  97. package/lib/raw_types/sens.d.ts +0 -8248
  98. package/lib/raw_types/sens.js +0 -5
  99. package/lib/raw_types/sens.mjs +0 -508
  100. package/lib/raw_types_kysely/ameli.d.ts +0 -915
  101. package/lib/raw_types_kysely/ameli.js +0 -7
  102. package/lib/raw_types_kysely/ameli.mjs +0 -5
  103. package/lib/raw_types_kysely/ameli.ts +0 -951
  104. package/lib/raw_types_kysely/debats.d.ts +0 -207
  105. package/lib/raw_types_kysely/debats.js +0 -7
  106. package/lib/raw_types_kysely/debats.mjs +0 -5
  107. package/lib/raw_types_kysely/debats.ts +0 -222
  108. package/lib/raw_types_kysely/dosleg.d.ts +0 -3532
  109. package/lib/raw_types_kysely/dosleg.js +0 -7
  110. package/lib/raw_types_kysely/dosleg.mjs +0 -5
  111. package/lib/raw_types_kysely/dosleg.ts +0 -3621
  112. package/lib/raw_types_kysely/questions.d.ts +0 -414
  113. package/lib/raw_types_kysely/questions.js +0 -7
  114. package/lib/raw_types_kysely/questions.mjs +0 -5
  115. package/lib/raw_types_kysely/questions.ts +0 -426
  116. package/lib/raw_types_kysely/sens.d.ts +0 -4394
  117. package/lib/raw_types_kysely/sens.js +0 -7
  118. package/lib/raw_types_kysely/sens.mjs +0 -5
  119. package/lib/raw_types_kysely/sens.ts +0 -4499
  120. package/lib/raw_types_schemats/ameli.d.ts +0 -539
  121. package/lib/raw_types_schemats/ameli.js +0 -2
  122. package/lib/raw_types_schemats/ameli.mjs +0 -2
  123. package/lib/raw_types_schemats/ameli.ts +0 -601
  124. package/lib/raw_types_schemats/debats.d.ts +0 -127
  125. package/lib/raw_types_schemats/debats.js +0 -2
  126. package/lib/raw_types_schemats/debats.mjs +0 -2
  127. package/lib/raw_types_schemats/debats.ts +0 -145
  128. package/lib/raw_types_schemats/dosleg.d.ts +0 -977
  129. package/lib/raw_types_schemats/dosleg.js +0 -2
  130. package/lib/raw_types_schemats/dosleg.mjs +0 -2
  131. package/lib/raw_types_schemats/dosleg.ts +0 -2193
  132. package/lib/raw_types_schemats/questions.d.ts +0 -235
  133. package/lib/raw_types_schemats/questions.js +0 -2
  134. package/lib/raw_types_schemats/questions.mjs +0 -2
  135. package/lib/raw_types_schemats/questions.ts +0 -249
  136. package/lib/raw_types_schemats/sens.d.ts +0 -6915
  137. package/lib/raw_types_schemats/sens.js +0 -2
  138. package/lib/raw_types_schemats/sens.mjs +0 -2
  139. package/lib/raw_types_schemats/sens.ts +0 -2907
  140. package/lib/scripts/convert_data.d.ts +0 -1
  141. package/lib/scripts/convert_data.js +0 -354
  142. package/lib/scripts/convert_data.mjs +0 -181
  143. package/lib/scripts/convert_data.ts +0 -243
  144. package/lib/scripts/data-download.d.ts +0 -1
  145. package/lib/scripts/data-download.js +0 -12
  146. package/lib/scripts/datautil.d.ts +0 -8
  147. package/lib/scripts/datautil.js +0 -34
  148. package/lib/scripts/datautil.mjs +0 -16
  149. package/lib/scripts/datautil.ts +0 -19
  150. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  151. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  152. package/lib/scripts/parse_textes.d.ts +0 -1
  153. package/lib/scripts/parse_textes.js +0 -44
  154. package/lib/scripts/parse_textes.mjs +0 -46
  155. package/lib/scripts/parse_textes.ts +0 -65
  156. package/lib/scripts/retrieve_agenda.d.ts +0 -1
  157. package/lib/scripts/retrieve_agenda.js +0 -132
  158. package/lib/scripts/retrieve_cr_commission.d.ts +0 -1
  159. package/lib/scripts/retrieve_cr_commission.js +0 -364
  160. package/lib/scripts/retrieve_cr_seance.d.ts +0 -6
  161. package/lib/scripts/retrieve_cr_seance.js +0 -347
  162. package/lib/scripts/retrieve_documents.d.ts +0 -3
  163. package/lib/scripts/retrieve_documents.js +0 -219
  164. package/lib/scripts/retrieve_documents.mjs +0 -249
  165. package/lib/scripts/retrieve_documents.ts +0 -298
  166. package/lib/scripts/retrieve_open_data.d.ts +0 -1
  167. package/lib/scripts/retrieve_open_data.js +0 -315
  168. package/lib/scripts/retrieve_open_data.mjs +0 -217
  169. package/lib/scripts/retrieve_open_data.ts +0 -268
  170. package/lib/scripts/retrieve_senateurs_photos.d.ts +0 -1
  171. package/lib/scripts/retrieve_senateurs_photos.js +0 -147
  172. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -147
  173. package/lib/scripts/retrieve_senateurs_photos.ts +0 -177
  174. package/lib/scripts/retrieve_videos.d.ts +0 -1
  175. package/lib/scripts/retrieve_videos.js +0 -461
  176. package/lib/scripts/shared/cli_helpers.d.ts +0 -95
  177. package/lib/scripts/shared/cli_helpers.js +0 -91
  178. package/lib/scripts/shared/cli_helpers.ts +0 -36
  179. package/lib/scripts/shared/util.d.ts +0 -4
  180. package/lib/scripts/shared/util.js +0 -35
  181. package/lib/scripts/shared/util.ts +0 -33
  182. package/lib/scripts/test_iter_load.d.ts +0 -1
  183. package/lib/scripts/test_iter_load.js +0 -12
  184. package/lib/strings.d.ts +0 -1
  185. package/lib/strings.js +0 -18
  186. package/lib/strings.mjs +0 -18
  187. package/lib/strings.ts +0 -26
  188. package/lib/types/agenda.d.ts +0 -44
  189. package/lib/types/agenda.js +0 -1
  190. package/lib/types/ameli.d.ts +0 -5
  191. package/lib/types/ameli.js +0 -1
  192. package/lib/types/ameli.mjs +0 -13
  193. package/lib/types/ameli.ts +0 -21
  194. package/lib/types/compte_rendu.d.ts +0 -83
  195. package/lib/types/compte_rendu.js +0 -1
  196. package/lib/types/debats.d.ts +0 -2
  197. package/lib/types/debats.js +0 -1
  198. package/lib/types/debats.mjs +0 -2
  199. package/lib/types/debats.ts +0 -6
  200. package/lib/types/dosleg.d.ts +0 -70
  201. package/lib/types/dosleg.js +0 -1
  202. package/lib/types/dosleg.mjs +0 -151
  203. package/lib/types/dosleg.ts +0 -284
  204. package/lib/types/questions.d.ts +0 -2
  205. package/lib/types/questions.js +0 -1
  206. package/lib/types/questions.mjs +0 -1
  207. package/lib/types/questions.ts +0 -3
  208. package/lib/types/sens.d.ts +0 -10
  209. package/lib/types/sens.js +0 -1
  210. package/lib/types/sens.mjs +0 -1
  211. package/lib/types/sens.ts +0 -12
  212. package/lib/types/sessions.d.ts +0 -5
  213. package/lib/types/sessions.js +0 -84
  214. package/lib/types/sessions.mjs +0 -43
  215. package/lib/types/sessions.ts +0 -42
  216. package/lib/types/texte.d.ts +0 -74
  217. package/lib/types/texte.js +0 -16
  218. package/lib/types/texte.mjs +0 -16
  219. package/lib/types/texte.ts +0 -76
  220. package/lib/typings/windows-1252.d.js +0 -2
  221. package/lib/typings/windows-1252.d.mjs +0 -2
  222. package/lib/typings/windows-1252.d.ts +0 -11
  223. package/lib/utils/cr_spliting.d.ts +0 -28
  224. package/lib/utils/cr_spliting.js +0 -265
  225. package/lib/utils/date.d.ts +0 -10
  226. package/lib/utils/date.js +0 -100
  227. package/lib/utils/nvs-timecode.d.ts +0 -7
  228. package/lib/utils/nvs-timecode.js +0 -79
  229. package/lib/utils/reunion_grouping.d.ts +0 -9
  230. package/lib/utils/reunion_grouping.js +0 -361
  231. package/lib/utils/reunion_odj_building.d.ts +0 -5
  232. package/lib/utils/reunion_odj_building.js +0 -154
  233. package/lib/utils/reunion_parsing.d.ts +0 -23
  234. package/lib/utils/reunion_parsing.js +0 -209
  235. package/lib/utils/scoring.d.ts +0 -14
  236. package/lib/utils/scoring.js +0 -147
  237. package/lib/utils/string_cleaning.d.ts +0 -7
  238. package/lib/utils/string_cleaning.js +0 -57
  239. package/lib/validators/config.d.ts +0 -9
  240. package/lib/validators/config.js +0 -10
  241. package/lib/validators/config.mjs +0 -54
  242. package/lib/validators/config.ts +0 -79
  243. package/lib/validators/senat.d.ts +0 -0
  244. package/lib/validators/senat.js +0 -28
  245. package/lib/validators/senat.mjs +0 -24
  246. package/lib/validators/senat.ts +0 -26
@@ -1,74 +0,0 @@
1
- export declare enum DivisionType {
2
- tome = 1,
3
- part = 2,
4
- book = 3,
5
- title = 4,
6
- subtitle = 5,
7
- chapter = 6,
8
- section = 7,
9
- subsection = 8,
10
- paragraph = 9,
11
- article = 10,
12
- alinea = 11,
13
- division = 12
14
- }
15
- export type DivisionTag = keyof typeof DivisionType;
16
- export interface DocumentMetadata {
17
- name: string;
18
- session: number | null | undefined;
19
- date?: string | null;
20
- url_expose_des_motifs?: URL;
21
- url_xml?: URL;
22
- url_html: URL;
23
- url_pdf: URL;
24
- }
25
- export interface FlatTexte {
26
- titre: string | null;
27
- titreCourt: string | null;
28
- signetDossier: string | null;
29
- urlDossierSenat: string | null;
30
- urlDossierAssemblee: string | null;
31
- type: string | null;
32
- session: string | null;
33
- numero: number | null;
34
- datePresentation: Date | null;
35
- dateDepot: Date | null;
36
- datePublicationXml: Date | null;
37
- version: Version | null;
38
- workflow: Step[];
39
- divisions: Division[];
40
- exposeDesMotifs?: ExposeDesMotifs | null;
41
- }
42
- export type Version = "RECT" | "RECT_BIS" | "RECT_TER" | "RECT_QUATER" | "RECT_QUINQUIES";
43
- export interface Step {
44
- eId: string;
45
- date: Date | null;
46
- type: string | null;
47
- session: string | null;
48
- numero: string | null;
49
- version: Version | null;
50
- outcome: string | null;
51
- }
52
- export interface Division {
53
- index: number;
54
- eId: string;
55
- tag: DivisionTag;
56
- level: number;
57
- headings: DivisionContent[];
58
- }
59
- export interface Article extends Division {
60
- alineas: Alinea[];
61
- }
62
- export interface DivisionContent {
63
- text: string | null;
64
- html?: string | null;
65
- }
66
- export interface Alinea extends DivisionContent {
67
- eId: string;
68
- heading: DivisionContent;
69
- pastille: string | null;
70
- }
71
- export interface ExposeDesMotifs {
72
- text: string | null;
73
- html: string | null;
74
- }
@@ -1,16 +0,0 @@
1
- /* eslint no-use-before-define: 0 */
2
- export var DivisionType;
3
- (function (DivisionType) {
4
- DivisionType[DivisionType["tome"] = 1] = "tome";
5
- DivisionType[DivisionType["part"] = 2] = "part";
6
- DivisionType[DivisionType["book"] = 3] = "book";
7
- DivisionType[DivisionType["title"] = 4] = "title";
8
- DivisionType[DivisionType["subtitle"] = 5] = "subtitle";
9
- DivisionType[DivisionType["chapter"] = 6] = "chapter";
10
- DivisionType[DivisionType["section"] = 7] = "section";
11
- DivisionType[DivisionType["subsection"] = 8] = "subsection";
12
- DivisionType[DivisionType["paragraph"] = 9] = "paragraph";
13
- DivisionType[DivisionType["article"] = 10] = "article";
14
- DivisionType[DivisionType["alinea"] = 11] = "alinea";
15
- DivisionType[DivisionType["division"] = 12] = "division";
16
- })(DivisionType || (DivisionType = {}));
@@ -1,16 +0,0 @@
1
- /* eslint no-use-before-define: 0 */
2
- export var DivisionType;
3
- (function (DivisionType) {
4
- DivisionType[DivisionType["tome"] = 1] = "tome";
5
- DivisionType[DivisionType["part"] = 2] = "part";
6
- DivisionType[DivisionType["book"] = 3] = "book";
7
- DivisionType[DivisionType["title"] = 4] = "title";
8
- DivisionType[DivisionType["subtitle"] = 5] = "subtitle";
9
- DivisionType[DivisionType["chapter"] = 6] = "chapter";
10
- DivisionType[DivisionType["section"] = 7] = "section";
11
- DivisionType[DivisionType["subsection"] = 8] = "subsection";
12
- DivisionType[DivisionType["paragraph"] = 9] = "paragraph";
13
- DivisionType[DivisionType["article"] = 10] = "article";
14
- DivisionType[DivisionType["alinea"] = 11] = "alinea";
15
- DivisionType[DivisionType["division"] = 12] = "division"; // TODO annexe
16
- })(DivisionType || (DivisionType = {}));
@@ -1,76 +0,0 @@
1
- /* eslint no-use-before-define: 0 */
2
-
3
- export enum DivisionType {
4
- tome = 1,
5
- part,
6
- book,
7
- title,
8
- subtitle,
9
- chapter,
10
- section,
11
- subsection,
12
- paragraph,
13
- article,
14
- alinea,
15
- division // TODO annexe
16
- }
17
-
18
- export type DivisionTag = keyof typeof DivisionType;
19
-
20
- export interface FlatTexte {
21
- titre: string | null
22
- titreCourt: string | null
23
- signetDossier: string | null
24
- urlDossierSenat: string | null
25
- urlDossierAssemblee: string | null
26
- type: string | null
27
- session: string | null
28
- numero: number | null
29
- datePresentation: Date | null,
30
- dateDepot: Date | null,
31
- datePublicationXml: Date | null,
32
- version: Version | null
33
- workflow: Step[]
34
- divisions: Division[]
35
- exposeDesMotifs?: ExposeDesMotifs | null
36
- }
37
-
38
- export type Version = "RECT" | "RECT_BIS" | "RECT_TER" | "RECT_QUATER" | "RECT_QUINQUIES"
39
-
40
- export interface Step {
41
- eId: string
42
- date: Date | null
43
- type: string | null
44
- session: string | null
45
- numero: string | null
46
- version: Version | null
47
- outcome: string | null
48
- }
49
-
50
- export interface Division {
51
- index: number
52
- eId: string
53
- tag: DivisionTag
54
- level: number
55
- headings: DivisionContent[]
56
- }
57
-
58
- export interface Article extends Division {
59
- alineas: Alinea[]
60
- }
61
-
62
- export interface DivisionContent {
63
- text: string | null
64
- html?: string | null
65
- }
66
-
67
- export interface Alinea extends DivisionContent {
68
- eId: string
69
- heading: DivisionContent
70
- pastille: string | null
71
- }
72
-
73
- export interface ExposeDesMotifs {
74
- text: string | null
75
- html: string | null
76
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGluZ3Mvd2luZG93cy0xMjUyLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBtb2R1bGUgXCJ3aW5kb3dzLTEyNTJcIiB7XG4gIC8qKiBEZWNsYXJhdGlvbiBmaWxlIGdlbmVyYXRlZCBieSBkdHMtZ2VuICovXG5cbiAgZXhwb3J0IGNvbnN0IGxhYmVsczogc3RyaW5nW11cblxuICBleHBvcnQgY29uc3QgdmVyc2lvbjogc3RyaW5nXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShpbnB1dDogYW55LCBvcHRpb25zPzogYW55KTogYW55XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShpbnB1dDogYW55LCBvcHRpb25zPzogYW55KTogYW55XG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGluZ3Mvd2luZG93cy0xMjUyLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZGVjbGFyZSBtb2R1bGUgXCJ3aW5kb3dzLTEyNTJcIiB7XG4gIC8qKiBEZWNsYXJhdGlvbiBmaWxlIGdlbmVyYXRlZCBieSBkdHMtZ2VuICovXG5cbiAgZXhwb3J0IGNvbnN0IGxhYmVsczogc3RyaW5nW11cblxuICBleHBvcnQgY29uc3QgdmVyc2lvbjogc3RyaW5nXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShpbnB1dDogYW55LCBvcHRpb25zPzogYW55KTogYW55XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShpbnB1dDogYW55LCBvcHRpb25zPzogYW55KTogYW55XG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,11 +0,0 @@
1
- declare module "windows-1252" {
2
- /** Declaration file generated by dts-gen */
3
-
4
- export const labels: string[]
5
-
6
- export const version: string
7
-
8
- export function decode(input: any, options?: any): any
9
-
10
- export function encode(input: any, options?: any): any
11
- }
@@ -1,28 +0,0 @@
1
- import { Reunion } from "../types/agenda";
2
- export declare function parseCommissionMetadataFromHtml(html: string, sourceFileName?: string): {
3
- sourceFile: string | null;
4
- organeTitleRaw: string | null;
5
- organeDetected: string | null;
6
- organeCode: string | null;
7
- weekStart: string | null;
8
- days: {
9
- date: string;
10
- openTime?: string;
11
- h2Index: number;
12
- }[];
13
- };
14
- export declare function loadAgendaForDate(dataDir: string, yyyymmdd: string, session: number): Promise<Reunion[]>;
15
- export declare function linkCRtoCommissionGroup(opts: {
16
- dataDir: string;
17
- dateISO: string;
18
- organeDetected: string | null;
19
- hourShort: string | null;
20
- crUid: string;
21
- titreGuess?: string | null;
22
- groupUid?: string | null;
23
- }): Promise<{
24
- uid: string;
25
- filePath: string;
26
- created: boolean;
27
- updated: boolean;
28
- }>;
@@ -1,265 +0,0 @@
1
- import path from "path";
2
- import * as cheerio from "cheerio";
3
- import { AGENDA_FOLDER, DATA_TRANSFORMED_FOLDER } from "../loaders";
4
- import fs from "fs-extra";
5
- import { sessionStartYearFromDate } from "../model/seance";
6
- import { frDateToISO, hourShortToStartTime } from "./date";
7
- import { normalizeSpaces } from "./string_cleaning";
8
- // Convert "quinze heures trente", "15 heures 30", "dix-sept heures moins le quart", etc. en "HHMM"
9
- function parseFrenchClockToHHMM(input) {
10
- const s = (input || "")
11
- .toLowerCase()
12
- .normalize("NFKD")
13
- .replace(/[\u0300-\u036f]/g, "")
14
- .trim();
15
- if (!s)
16
- return undefined;
17
- const digitMatch = s.match(/(\d{1,2})\s*heures?(?:\s*(\d{1,2}))?/);
18
- if (digitMatch) {
19
- const h = Math.min(24, Math.max(0, parseInt(digitMatch[1], 10)));
20
- const m = digitMatch[2] ? Math.min(59, Math.max(0, parseInt(digitMatch[2], 10))) : 0;
21
- return `${String(h).padStart(2, "0")}${String(m).padStart(2, "0")}`;
22
- }
23
- const NUM = new Map([
24
- ["zero", 0],
25
- ["une", 1],
26
- ["un", 1],
27
- ["deux", 2],
28
- ["trois", 3],
29
- ["quatre", 4],
30
- ["cinq", 5],
31
- ["six", 6],
32
- ["sept", 7],
33
- ["huit", 8],
34
- ["neuf", 9],
35
- ["dix", 10],
36
- ["onze", 11],
37
- ["douze", 12],
38
- ["treize", 13],
39
- ["quatorze", 14],
40
- ["quinze", 15],
41
- ["seize", 16],
42
- ["dix-sept", 17],
43
- ["dix sept", 17],
44
- ["dix-huit", 18],
45
- ["dix huit", 18],
46
- ["dix-neuf", 19],
47
- ["dix neuf", 19],
48
- ["vingt", 20],
49
- ["vingt et une", 21],
50
- ["vingt-et-une", 21],
51
- ["vingt et un", 21],
52
- ["vingt-et-un", 21],
53
- ["vingt-deux", 22],
54
- ["vingt deux", 22],
55
- ["vingt-trois", 23],
56
- ["vingt trois", 23],
57
- ["vingt-quatre", 24],
58
- ["vingt quatre", 24],
59
- ]);
60
- const hourWordMatch = s.match(/([a-z\- ]+?)\s*heures?/);
61
- if (!hourWordMatch)
62
- return undefined;
63
- const hourWord = hourWordMatch[1].trim();
64
- let hour = NUM.get(hourWord);
65
- if (hour == null) {
66
- const cleaned = hourWord.replace(/\s+/g, " ");
67
- hour = NUM.get(cleaned);
68
- }
69
- if (hour == null)
70
- return undefined;
71
- let minutes = 0;
72
- if (/\bet (demie|demi)\b/.test(s))
73
- minutes = 30;
74
- else if (/\bet quart\b/.test(s))
75
- minutes = 15;
76
- else if (/\bmoins le quart\b/.test(s)) {
77
- hour = (hour + 23) % 24;
78
- minutes = 45;
79
- }
80
- else {
81
- const MIN = new Map([
82
- ["cinq", 5],
83
- ["dix", 10],
84
- ["quinze", 15],
85
- ["vingt", 20],
86
- ["vingt-cinq", 25],
87
- ["vingt cinq", 25],
88
- ["trente", 30],
89
- ["trente-cinq", 35],
90
- ["trente cinq", 35],
91
- ["quarante", 40],
92
- ["quarante-cinq", 45],
93
- ["quarante cinq", 45],
94
- ["cinquante", 50],
95
- ["cinquante-cinq", 55],
96
- ["cinquante cinq", 55],
97
- ]);
98
- const minWordMatch = s.match(/heures?\s+([a-z\- ]+?)(?:[).,;]|$)/);
99
- if (minWordMatch) {
100
- const mw = minWordMatch[1].trim();
101
- const m1 = MIN.get(mw);
102
- if (m1 != null)
103
- minutes = m1;
104
- }
105
- }
106
- return `${String(hour).padStart(2, "0")}${String(minutes).padStart(2, "0")}`;
107
- }
108
- function extractWeekStartFromHead($) {
109
- const og = $('meta[property="og:title"]').attr("content") || $("title").text();
110
- const m = (og ?? "").toLowerCase().match(/semaine du\s+(\d{1,2}\s+\w+\s+\d{4})/i);
111
- if (m)
112
- return frDateToISO(m[1]);
113
- return undefined;
114
- }
115
- function detectOrganeFromTitle(s) {
116
- const t = (s ?? "").trim();
117
- if (!t)
118
- return { organeTitleRaw: undefined, organeDetected: undefined };
119
- const lower = t.toLowerCase();
120
- const m = lower.match(/commission(?:\s+des|\s+de|)\s+([^:]+)$/i);
121
- let organeDetected;
122
- if (m && m[1]) {
123
- organeDetected = ("Commission " + m[1])
124
- .replace(/\s+/g, " ")
125
- .replace(/\s+:? comptes? rendus?$/i, "")
126
- .trim();
127
- organeDetected = organeDetected[0].toUpperCase() + organeDetected.slice(1);
128
- }
129
- return { organeTitleRaw: t, organeDetected };
130
- }
131
- function extractDaysAndOpenings($) {
132
- const days = [];
133
- const h2s = $("h2").toArray();
134
- for (let i = 0; i < h2s.length; i++) {
135
- const h = h2s[i];
136
- const txt = normalizeSpaces($(h).text());
137
- const m = txt.match(/^(?:Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi|Dimanche)\s+(.+?)$/i);
138
- if (!m)
139
- continue;
140
- const iso = frDateToISO(m[1]);
141
- if (!iso)
142
- continue;
143
- let openTime;
144
- let cur = $(h).next();
145
- while (cur.length && cur[0].tagName !== "h2") {
146
- const t = normalizeSpaces(cur.text());
147
- const mt = t.match(/La réunion est ouverte à\s+(\d{1,2})\s*h(?:\s*(\d{2}))?/i);
148
- if (mt) {
149
- openTime = `${mt[1].padStart(2, "0")}:${(mt[2] ?? "00").padStart(2, "0")}`;
150
- break;
151
- }
152
- cur = cur.next();
153
- }
154
- days.push({ date: iso, openTime, h2Index: i });
155
- }
156
- return days;
157
- }
158
- function extractOrganeCode($) {
159
- const names = $("a[name]")
160
- .toArray()
161
- .map((a) => ($(a).attr("name") || "").trim());
162
- return names.find((n) => /^[A-Z]{3,6}$/.test(n));
163
- }
164
- export function parseCommissionMetadataFromHtml(html, sourceFileName) {
165
- const $ = cheerio.load(html);
166
- const h1 = $("h1.page-title").first().text().trim() || undefined;
167
- const headTitle = $('meta[property="og:title"]').attr("content") || $("title").text() || undefined;
168
- const { organeTitleRaw, organeDetected } = detectOrganeFromTitle(h1 || headTitle);
169
- let weekStart = extractWeekStartFromHead($);
170
- const days = extractDaysAndOpenings($);
171
- if (!weekStart && days.length > 0)
172
- weekStart = days[0].date;
173
- const organeCode = extractOrganeCode($);
174
- return {
175
- sourceFile: sourceFileName ?? null,
176
- organeTitleRaw: organeTitleRaw ?? null,
177
- organeDetected: organeDetected ?? null,
178
- organeCode: organeCode ?? null,
179
- weekStart: weekStart ?? null,
180
- days, // [{date, openTime?, h2Index}]
181
- };
182
- }
183
- function isGroupedReunion(o) {
184
- return o && typeof o === "object" && typeof o.uid === "string" && typeof o.date === "string";
185
- }
186
- export async function loadAgendaForDate(dataDir, yyyymmdd, session) {
187
- const baseDir = path.join(dataDir, AGENDA_FOLDER, DATA_TRANSFORMED_FOLDER, String(session));
188
- if (!(await fs.pathExists(baseDir)))
189
- return [];
190
- const files = (await fs.readdir(baseDir)).filter((f) => f.startsWith(`RUSN${yyyymmdd}IDC`) && f.toLowerCase().endsWith(".json"));
191
- const out = [];
192
- for (const f of files) {
193
- const p = path.join(baseDir, f);
194
- try {
195
- const raw = await fs.readFile(p, "utf8");
196
- const obj = JSON.parse(raw);
197
- if (!isGroupedReunion(obj)) {
198
- continue;
199
- }
200
- if (!obj.uid.startsWith(`RUSN${yyyymmdd}IDC`)) {
201
- continue;
202
- }
203
- out.push(obj);
204
- }
205
- catch {
206
- // ignore
207
- }
208
- }
209
- return out;
210
- }
211
- export async function linkCRtoCommissionGroup(opts) {
212
- const { dataDir, dateISO, organeDetected, hourShort, crUid, titreGuess, groupUid } = opts;
213
- const computedUid = crUid.replace(/^CRC/, "RU");
214
- const uid = groupUid ?? computedUid;
215
- const session = sessionStartYearFromDate(new Date(dateISO));
216
- const groupedDir = path.join(dataDir, AGENDA_FOLDER, DATA_TRANSFORMED_FOLDER, String(session));
217
- await fs.ensureDir(groupedDir);
218
- const filePath = path.join(groupedDir, `${uid}.json`);
219
- let group = null;
220
- let created = false;
221
- let updated = false;
222
- try {
223
- if (await fs.pathExists(filePath)) {
224
- group = await fs.readJSON(filePath);
225
- }
226
- }
227
- catch (e) {
228
- console.warn(`[AGENDA][COM] Unreadable JSON → ${filePath} (${e?.message}) → will recreate`);
229
- }
230
- if (!group) {
231
- group = {
232
- uid,
233
- chambre: "SN",
234
- date: dateISO,
235
- type: "Commission",
236
- startTime: hourShortToStartTime(hourShort),
237
- endTime: null,
238
- captationVideo: false,
239
- titre: titreGuess ?? "",
240
- organe: organeDetected ?? "Commission",
241
- objet: titreGuess ?? "",
242
- events: [],
243
- compteRenduRefUid: crUid,
244
- };
245
- created = true;
246
- console.log(`[AGENDA][COM] Created new group uid=${uid} for CR uid=${crUid}`);
247
- }
248
- else {
249
- group.compteRenduRefUid = crUid;
250
- updated = true;
251
- console.log(`[AGENDA][COM] Updated group uid=${uid} for CR uid=${crUid}`);
252
- }
253
- // Lien CR
254
- // Enrichir depuis CR si vide
255
- // const sommaire = cr?.metadonnees?.sommaire as Sommaire | undefined;
256
- // if (sommaire) {
257
- // const { titre: dTitre, objet: dObjet } = deriveTitreObjetFromSommaire(sommaire, undefined);
258
- // if (!group.titre && dTitre) group.titre = dTitre;
259
- // if ((!group.objet || !group.objet.trim()) && dObjet) group.objet = dObjet;
260
- // } else if (!group.titre && titreGuess) {
261
- // group.titre = titreGuess;
262
- // }
263
- await fs.writeJSON(filePath, group, { spaces: 2 });
264
- return { uid, filePath, created, updated };
265
- }
@@ -1,10 +0,0 @@
1
- export declare function yyyymmddFromPath(xmlFilePath: string): string;
2
- export declare function parseYYYYMMDD(yyyymmdd: string): Date | null;
3
- export declare function frDateToISO(s?: string): string | undefined;
4
- export declare function hourShortToStartTime(hourShort: string | null): string | null;
5
- export declare function epochToParisDateTime(epochSec: number): {
6
- date: string;
7
- startTime: string;
8
- } | null;
9
- export declare function toTargetEpoch(time: string | null, date?: string | null): number | null;
10
- export declare function toFRDate(dateYYYYMMDD: string): string;
package/lib/utils/date.js DELETED
@@ -1,100 +0,0 @@
1
- import { DateTime } from "luxon";
2
- export function yyyymmddFromPath(xmlFilePath) {
3
- return xmlFilePath.replace(/^.*?(\d{8}).*$/i, "$1");
4
- }
5
- export function parseYYYYMMDD(yyyymmdd) {
6
- if (!/^\d{8}$/.test(yyyymmdd))
7
- return null;
8
- const y = Number(yyyymmdd.slice(0, 4));
9
- const m = Number(yyyymmdd.slice(4, 6)) - 1;
10
- const d = Number(yyyymmdd.slice(6, 8));
11
- const dt = new Date(y, m, d);
12
- return Number.isFinite(dt.getTime()) ? dt : null;
13
- }
14
- export function frDateToISO(s) {
15
- if (!s)
16
- return;
17
- const months = {
18
- janvier: 1,
19
- février: 2,
20
- fevrier: 2,
21
- mars: 3,
22
- avril: 4,
23
- mai: 5,
24
- juin: 6,
25
- juillet: 7,
26
- août: 8,
27
- aout: 8,
28
- septembre: 9,
29
- octobre: 10,
30
- novembre: 11,
31
- décembre: 12,
32
- decembre: 12,
33
- };
34
- const cleaned = s
35
- .trim()
36
- .replace(/\u00A0/g, " ")
37
- .replace(/ +/g, " ");
38
- const m = cleaned.match(/^(\d{1,2})(?:er)?\s+([a-zéèêîïôûùç]+)\s+(\d{4})$/i);
39
- if (!m)
40
- return;
41
- const d = String(parseInt(m[1], 10)).padStart(2, "0");
42
- const mon = months[m[2].toLowerCase()];
43
- if (!mon)
44
- return;
45
- const y = m[3];
46
- return `${y}-${String(mon).padStart(2, "0")}-${d}`;
47
- }
48
- export function hourShortToStartTime(hourShort) {
49
- if (!hourShort || hourShort === "NA")
50
- return null;
51
- if (!/^\d{4}$/.test(hourShort))
52
- return null;
53
- const hh = hourShort.slice(0, 2);
54
- const mm = hourShort.slice(2, 4);
55
- return `${hh}:${mm}`;
56
- }
57
- export function epochToParisDateTime(epochSec) {
58
- if (!Number.isFinite(epochSec))
59
- return null;
60
- const dUtc = new Date(epochSec * 1000);
61
- // Offset heuristic (same logique que parisOffsetForDate)
62
- const m = dUtc.getUTCMonth() + 1; // 1..12
63
- const offsetHours = m >= 4 && m <= 10 ? 2 : 1;
64
- const offsetStr = offsetHours === 2 ? "+02:00" : "+01:00";
65
- // Applique l'offset pour obtenir la date/heure locales Paris
66
- const localMs = dUtc.getTime() + offsetHours * 3600 * 1000;
67
- const dl = new Date(localMs);
68
- const yyyy = String(dl.getUTCFullYear());
69
- const mm = String(dl.getUTCMonth() + 1).padStart(2, "0");
70
- const dd = String(dl.getUTCDate()).padStart(2, "0");
71
- const hh = String(dl.getUTCHours()).padStart(2, "0");
72
- const mi = String(dl.getUTCMinutes()).padStart(2, "0");
73
- const ss = String(dl.getUTCSeconds()).padStart(2, "0");
74
- const ms = String(dl.getUTCMilliseconds()).padStart(3, "0");
75
- return {
76
- date: `${yyyy}-${mm}-${dd}`,
77
- startTime: `${hh}:${mi}:${ss}.${ms}${offsetStr}`,
78
- };
79
- }
80
- export function toTargetEpoch(time, date) {
81
- if (!time)
82
- return null;
83
- let dtLocal;
84
- if (time.includes("T")) {
85
- dtLocal = DateTime.fromISO(time, { zone: "Europe/Paris" });
86
- }
87
- else if (date) {
88
- dtLocal = DateTime.fromISO(`${date}T${time}`, { zone: "Europe/Paris" });
89
- }
90
- else {
91
- return null;
92
- }
93
- if (!dtLocal.isValid)
94
- return null;
95
- return Math.floor(dtLocal.toUTC().toSeconds());
96
- }
97
- export function toFRDate(dateYYYYMMDD) {
98
- const [y, m, d] = dateYYYYMMDD.split("-");
99
- return `${d}/${m}/${y}`; // DD/MM/YYYY
100
- }
@@ -1,7 +0,0 @@
1
- export declare function getAgendaSegmentTimecodes(dataNvs: string, finalPlayerNvs: string, agendaTitleOrObjet: string): {
2
- start: number;
3
- end: number | null;
4
- chapterId: string;
5
- nextChapterId: string | null;
6
- score: number;
7
- } | null;