@tricoteuses/senat 3.1.3 → 3.1.5

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 (81) hide show
  1. package/lib/src/config.d.ts +43 -0
  2. package/lib/src/config.js +37 -0
  3. package/lib/src/conversion_textes.d.ts +11 -0
  4. package/lib/src/conversion_textes.js +320 -0
  5. package/lib/src/databases_postgres.d.ts +4 -0
  6. package/lib/src/databases_postgres.js +23 -0
  7. package/lib/src/datasets.d.ts +38 -0
  8. package/lib/src/datasets.js +247 -0
  9. package/lib/src/git.d.ts +27 -0
  10. package/lib/src/git.js +251 -0
  11. package/lib/src/loaders.d.ts +52 -0
  12. package/lib/src/loaders.js +260 -0
  13. package/lib/src/model/agenda.d.ts +6 -0
  14. package/lib/src/model/agenda.js +148 -0
  15. package/lib/src/model/ameli.d.ts +67 -0
  16. package/lib/src/model/ameli.js +150 -0
  17. package/lib/src/model/commission.d.ts +19 -0
  18. package/lib/src/model/commission.js +269 -0
  19. package/lib/src/model/debats.d.ts +39 -0
  20. package/lib/src/model/debats.js +112 -0
  21. package/lib/src/model/documents.d.ts +32 -0
  22. package/lib/src/model/documents.js +182 -0
  23. package/lib/src/model/dosleg.d.ts +144 -0
  24. package/lib/src/model/dosleg.js +468 -0
  25. package/lib/src/model/index.d.ts +7 -0
  26. package/lib/src/model/index.js +7 -0
  27. package/lib/src/model/questions.d.ts +54 -0
  28. package/lib/src/model/questions.js +91 -0
  29. package/lib/src/model/scrutins.d.ts +48 -0
  30. package/lib/src/model/scrutins.js +121 -0
  31. package/lib/src/model/seance.d.ts +3 -0
  32. package/lib/src/model/seance.js +267 -0
  33. package/lib/src/model/sens.d.ts +112 -0
  34. package/lib/src/model/sens.js +385 -0
  35. package/lib/src/model/util.d.ts +1 -0
  36. package/lib/src/model/util.js +15 -0
  37. package/lib/src/raw_types/ameli.d.ts +1762 -0
  38. package/lib/src/raw_types/ameli.js +1074 -0
  39. package/lib/src/raw_types/debats.d.ts +380 -0
  40. package/lib/src/raw_types/debats.js +266 -0
  41. package/lib/src/raw_types/dosleg.d.ts +2954 -0
  42. package/lib/src/raw_types/dosleg.js +2005 -0
  43. package/lib/src/raw_types/questions.d.ts +699 -0
  44. package/lib/src/raw_types/questions.js +493 -0
  45. package/lib/src/raw_types/sens.d.ts +7843 -0
  46. package/lib/src/raw_types/sens.js +4691 -0
  47. package/lib/src/raw_types_schemats/ameli.d.ts +541 -0
  48. package/lib/src/raw_types_schemats/ameli.js +2 -0
  49. package/lib/src/raw_types_schemats/debats.d.ts +127 -0
  50. package/lib/src/raw_types_schemats/debats.js +2 -0
  51. package/lib/src/raw_types_schemats/dosleg.d.ts +977 -0
  52. package/lib/src/raw_types_schemats/dosleg.js +2 -0
  53. package/lib/src/raw_types_schemats/questions.d.ts +237 -0
  54. package/lib/src/raw_types_schemats/questions.js +2 -0
  55. package/lib/src/raw_types_schemats/sens.d.ts +2709 -0
  56. package/lib/src/raw_types_schemats/sens.js +2 -0
  57. package/lib/src/scripts/data-download.js +16 -9
  58. package/lib/src/scripts/debug_dosleg_query.d.ts +6 -0
  59. package/lib/src/scripts/debug_dosleg_query.js +50 -0
  60. package/lib/src/scripts/retrieve_agenda.js +2 -4
  61. package/lib/src/types/agenda.d.ts +45 -0
  62. package/lib/src/types/agenda.js +1 -0
  63. package/lib/src/types/ameli.d.ts +5 -0
  64. package/lib/src/types/ameli.js +1 -0
  65. package/lib/src/types/compte_rendu.d.ts +83 -0
  66. package/lib/src/types/compte_rendu.js +1 -0
  67. package/lib/src/types/debats.d.ts +2 -0
  68. package/lib/src/types/debats.js +1 -0
  69. package/lib/src/types/dosleg.d.ts +70 -0
  70. package/lib/src/types/dosleg.js +1 -0
  71. package/lib/src/types/questions.d.ts +2 -0
  72. package/lib/src/types/questions.js +1 -0
  73. package/lib/src/types/sens.d.ts +8 -0
  74. package/lib/src/types/sens.js +1 -0
  75. package/lib/src/types/sessions.d.ts +6 -0
  76. package/lib/src/types/sessions.js +19 -0
  77. package/lib/src/types/texte.d.ts +72 -0
  78. package/lib/src/types/texte.js +15 -0
  79. package/lib/src/validators/config.d.ts +9 -0
  80. package/lib/src/validators/config.js +10 -0
  81. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ /* tslint:disable */
2
+ export {};
@@ -1,13 +1,20 @@
1
1
  import { execSync } from "child_process";
2
2
  const args = process.argv.slice(2).join(" ");
3
- try {
4
- execSync(`tsx src/scripts/retrieve_open_data.ts --all ${args}`, { stdio: "inherit" });
5
- execSync(`tsx src/scripts/convert_data.ts ${args}`, { stdio: "inherit" });
6
- }
7
- catch (error) {
8
- const execError = error;
9
- if (execError.status !== 10) {
10
- console.error("Error during data retrieval:", error);
11
- process.exit(execError.status || 1);
3
+ function runScript(command) {
4
+ try {
5
+ execSync(command, { stdio: "inherit" });
6
+ }
7
+ catch (error) {
8
+ const execError = error;
9
+ if (execError.status !== 10) {
10
+ console.error(`Error during: ${command}`, error);
11
+ process.exit(execError.status || 1);
12
+ }
12
13
  }
13
14
  }
15
+ runScript(`tsx src/scripts/retrieve_open_data.ts --all ${args}`);
16
+ runScript(`tsx src/scripts/convert_data.ts ${args}`);
17
+ runScript(`cross-env TZ='Etc/UTC' tsx src/scripts/retrieve_agenda.ts ${args} --parseAgenda --silent`);
18
+ runScript(`tsx src/scripts/retrieve_cr_seance.ts ${args} --parseDebats --silent`);
19
+ runScript(`tsx src/scripts/retrieve_cr_commission.ts ${args} --parseDebats --silent`);
20
+ runScript(`tsx src/scripts/retrieve_videos.ts ${args} --silent`);
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Debug script to check the DosLeg query compilation
4
+ * Helps identify the "column undefined" error
5
+ */
6
+ export {};
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Debug script to check the DosLeg query compilation
4
+ * Helps identify the "column undefined" error
5
+ */
6
+ import { db } from "../server/databases_postgres.js";
7
+ import { jsonArrayFrom } from "kysely/helpers/postgres";
8
+ import { sql } from "kysely";
9
+ async function debugDoslegQuery() {
10
+ console.log("=== Debugging DosLeg Query ===\n");
11
+ try {
12
+ // Build the same query as findAllDossiers but capture SQL
13
+ const query = db
14
+ .withSchema("senat")
15
+ .selectFrom("dosleg_loi as loi")
16
+ .leftJoin("dosleg_typloi as typloi", "typloi.typloicod", "loi.typloicod")
17
+ .leftJoin("dosleg_etaloi as etaloi", "etaloi.etaloicod", "loi.etaloicod")
18
+ .leftJoin("dosleg_deccoc as deccoc", "deccoc.deccoccod", "loi.deccoccod")
19
+ .select((eb) => [
20
+ sql `rtrim(${eb.ref("loi.loicod")})`.as("code"),
21
+ "loi.numero as numero",
22
+ "loi.signet as signet",
23
+ ]);
24
+ const compiled = query.compile();
25
+ console.log("✓ Query compiled successfully (basic columns)\n");
26
+ console.log("SQL:", compiled.sql);
27
+ console.log("\n");
28
+ // Try with simple lectures first
29
+ const queryWithLectures = db
30
+ .withSchema("senat")
31
+ .selectFrom("dosleg_loi as loi")
32
+ .select((eb) => [
33
+ "loi.signet as signet",
34
+ jsonArrayFrom(eb.withSchema("senat").selectFrom("dosleg_lecture as lecture").select(["lecture.lecidt as id"])).as("lectures"),
35
+ ]);
36
+ const compiledWithLectures = queryWithLectures.compile();
37
+ console.log("✓ Query with simple lectures compiled successfully\n");
38
+ console.log("SQL:", compiledWithLectures.sql);
39
+ console.log("\n");
40
+ console.log("✅ Basic query structures seem valid");
41
+ console.log("\nThe issue is likely in one of the nested subqueries with cross-references.");
42
+ console.log("Try running findAllDossiers with the verbose flag to see exactly where it fails.");
43
+ }
44
+ catch (error) {
45
+ console.error("❌ Error during query compilation:");
46
+ console.error(error instanceof Error ? error.message : String(error));
47
+ process.exit(1);
48
+ }
49
+ }
50
+ debugDoslegQuery().catch(console.error);
@@ -52,13 +52,11 @@ async function retrieveAgendas(options, sessions) {
52
52
  for (const session of sessions) {
53
53
  const originalAgendaSessionDir = path.join(originalAgendaDir, `${session}`);
54
54
  fs.ensureDirSync(originalAgendaSessionDir);
55
- if (!options["keepDir"])
56
- fs.emptyDirSync(originalAgendaSessionDir);
55
+ fs.emptyDirSync(originalAgendaSessionDir);
57
56
  const transformedAgendaSessionDir = path.join(transformedAgendaDir, `${session}`);
58
57
  if (options["parseAgenda"]) {
59
58
  fs.ensureDirSync(transformedAgendaSessionDir);
60
- if (!options["keepDir"])
61
- fs.emptyDirSync(transformedAgendaSessionDir);
59
+ fs.emptyDirSync(transformedAgendaSessionDir);
62
60
  }
63
61
  const fifteenDaysFromNow = new Date();
64
62
  // Don't download agendas more than 15 days in the future.
@@ -0,0 +1,45 @@
1
+ export interface AgendaEvent {
2
+ id: string;
3
+ type: string | null;
4
+ date: string;
5
+ startTime: string | null;
6
+ endTime: string | null;
7
+ timeOriginal: string | null;
8
+ titre: string;
9
+ organe: string | null;
10
+ objet: string | null;
11
+ lieu: string | null;
12
+ captationVideo: boolean;
13
+ urlDossierSenat: string | null;
14
+ quantieme: string | null;
15
+ }
16
+ export type TimeSlot = "MATIN" | "APRES-MIDI" | "SOIR" | "UNKNOWN";
17
+ export interface Reunion {
18
+ uid: string;
19
+ chambre: "SN";
20
+ date: string;
21
+ startTime: string | null;
22
+ endTime: string | null;
23
+ captationVideo: boolean;
24
+ titre: string;
25
+ type: string;
26
+ organe?: string;
27
+ objet?: string;
28
+ lieu?: string;
29
+ events: AgendaEvent[];
30
+ compteRenduRefUid?: string;
31
+ transcriptionRef?: string;
32
+ urlVideo?: string;
33
+ urlPageVideo?: string;
34
+ timecodeDebutVideo?: number;
35
+ timecodeFinVideo?: number;
36
+ odj?: ReunionOdj;
37
+ }
38
+ export interface ReunionOdjPoint {
39
+ objet: string | null;
40
+ dossierLegislatifRef: string | null;
41
+ codeEtape: string | null;
42
+ }
43
+ export interface ReunionOdj {
44
+ pointsOdj: ReunionOdjPoint[];
45
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { TxtAmeli } from "../raw_types/ameli.js";
2
+ import { Sub } from "../raw_types/ameli.js";
3
+ export interface TxtAmeliCustom extends TxtAmeli {
4
+ subids?: Sub["id"][];
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,83 @@
1
+ export interface CompteRendu {
2
+ uid: string;
3
+ seanceRef: string;
4
+ sessionRef: string;
5
+ metadonnees: Metadonnees;
6
+ contenu: Contenu;
7
+ }
8
+ export interface Metadonnees {
9
+ dateSeance: string;
10
+ dateSeanceJour: string;
11
+ numSeanceJour: string;
12
+ numSeance: string;
13
+ typeAssemblee: "AN" | "SN";
14
+ legislature: string;
15
+ session: string;
16
+ nomFichierJo: string;
17
+ validite: string;
18
+ etat: string;
19
+ diffusion: string;
20
+ version: string;
21
+ environnement: string;
22
+ heureGeneration: Date;
23
+ sommaire?: Sommaire;
24
+ }
25
+ export interface Contenu {
26
+ quantiemes: Quantiemes;
27
+ ouvertureSeance?: Point[] | Point;
28
+ point: Point[] | Point;
29
+ finSeance?: FinSeance;
30
+ paragraphe?: Point[];
31
+ }
32
+ export interface FinSeance {
33
+ point: Point;
34
+ }
35
+ export interface Quantiemes {
36
+ journee: string;
37
+ session: string;
38
+ }
39
+ export interface Point {
40
+ ordre_absolu_seance: string;
41
+ code_grammaire: string;
42
+ roledebat?: string;
43
+ orateurs?: {
44
+ orateur: {
45
+ nom: string;
46
+ id: string;
47
+ qualite: string;
48
+ };
49
+ };
50
+ texte: {
51
+ _: string;
52
+ };
53
+ code_style?: string;
54
+ }
55
+ export interface Texte {
56
+ _?: string;
57
+ id_syceron?: string;
58
+ stime?: string;
59
+ sup?: string;
60
+ lienAdt?: Texte[] | Texte;
61
+ }
62
+ export interface Sommaire {
63
+ presidentSeance: Texte;
64
+ sommaire1: SommaireElement[] | SommaireElement;
65
+ sommaire3?: SommaireElement[] | SommaireElement;
66
+ sommaire2?: SommaireElement[] | SommaireElement;
67
+ para?: Texte[] | Texte;
68
+ }
69
+ export interface SommaireElement {
70
+ valeur_pts_odj: string | undefined;
71
+ titreStruct: TitreStruct;
72
+ para?: Array<Texte | string> | Texte;
73
+ sommaire2?: SommaireElement[] | SommaireElement;
74
+ sommaire3?: SommaireElement[] | SommaireElement;
75
+ presidentSeance?: Texte[] | Texte;
76
+ type_debat?: string;
77
+ }
78
+ export interface TitreStruct {
79
+ id_syceron: string;
80
+ intitule?: string;
81
+ sousIntitule?: string;
82
+ type_debat?: string;
83
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { debats as Debat, lecassdeb as LecAssDeb } from "../raw_types_schemats/debats";
2
+ export type { Debat, LecAssDeb };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,70 @@
1
+ import { Ass, Aud as AudRaw, Auteur as AuteurRaw, DateSeance as DateSeanceRaw, Deccoc, Denrap, Docatt as DocattRaw, Ecr as EcrRaw, Etaloi, Lecass as LecassRaw, Lecassrap as LecassrapRaw, Lecture as LectureRaw, Loi as LoiRaw, Org, Oritxt, Qua, Rap as RapRaw, Raporg, Scr, Texte as TexteRaw, Typatt, Typlec, Typloi, Typtxt, Typurl } from "../raw_types/dosleg.js";
2
+ import { TxtAmeli } from "../raw_types/ameli.js";
3
+ import { Debats } from "../raw_types/debats.js";
4
+ import { TxtAmeliCustom } from "./ameli.js";
5
+ export type { Deccoc as DecCoc, Denrap as DenRap, Etaloi as EtaLoi, Oritxt as OriTxt, Raporg as RapOrg, Typatt as TypAtt, Typlec as TypLec, Typloi as TypLoi, Typtxt as TypTxt, Typurl as TypUrl, };
6
+ export interface Aud extends AudRaw {
7
+ org?: Org;
8
+ }
9
+ export interface Auteur extends AuteurRaw {
10
+ qua?: Qua;
11
+ }
12
+ export interface DateSeance extends DateSeanceRaw {
13
+ debat?: Debats;
14
+ scrids?: string[];
15
+ scrs?: Scr[];
16
+ }
17
+ export interface DocAtt extends DocattRaw {
18
+ rap?: RapRaw;
19
+ typatt?: Typatt;
20
+ }
21
+ export interface Ecr extends EcrRaw {
22
+ aut?: Auteur;
23
+ }
24
+ export interface LecAss extends LecassRaw {
25
+ ass?: Ass;
26
+ auds?: Aud[];
27
+ audcles?: AudRaw["audcle"][];
28
+ datesSeances?: DateSeance[];
29
+ datesSeancesCodes?: DateSeanceRaw["code"][];
30
+ debatdatseas: Date[];
31
+ lecassraps?: LecAssRap[];
32
+ lecassrapids?: string[];
33
+ org?: Org;
34
+ texcods: TexteRaw["texcod"][];
35
+ textes?: Texte[];
36
+ }
37
+ export interface LecAssRap extends LecassrapRaw {
38
+ rap?: RapRaw;
39
+ }
40
+ export interface Lecture extends LectureRaw {
41
+ typlec?: Typlec;
42
+ lecassidts?: LecassRaw["lecassidt"][];
43
+ lecasss?: LecAss[];
44
+ }
45
+ export interface Loi extends LoiRaw {
46
+ deccoc?: Deccoc;
47
+ etaloi?: Etaloi;
48
+ lecidts?: LectureRaw["lecidt"][];
49
+ lectures?: Lecture[];
50
+ typloi?: Typloi;
51
+ }
52
+ export interface Rap extends RapRaw {
53
+ denrap?: Denrap;
54
+ docattcles?: DocattRaw["docattcle"][];
55
+ docatts?: DocAtt[];
56
+ ecrnums?: EcrRaw["ecrnum"][];
57
+ ecrs?: Ecr[];
58
+ orgcods?: Raporg["orgcod"][];
59
+ orgs?: Org[];
60
+ }
61
+ export interface Texte extends TexteRaw {
62
+ ecrs?: Ecr[];
63
+ ecrnums?: EcrRaw["ecrnum"][];
64
+ libtypurl?: Typurl["libtypurl"];
65
+ org?: Org;
66
+ oritxt: Oritxt;
67
+ typtxt?: Typtxt;
68
+ txtAmeli?: TxtAmeliCustom;
69
+ txtAmeliId: TxtAmeli["id"];
70
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { TamQuestions } from "../raw_types/questions.js";
2
+ export type { TamQuestions as Question };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ export interface Photo {
2
+ chemin: string;
3
+ cheminMosaique: string;
4
+ hauteur: number;
5
+ largeur: number;
6
+ xMosaique: number;
7
+ yMosaique: number;
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ export declare const UNDEFINED_SESSION = 0;
2
+ export declare const sessionOptions: readonly [1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026];
3
+ export declare const sessionOptionsOrAll: readonly [0, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026];
4
+ export type Session = (typeof sessionOptions)[number];
5
+ export type SessionOrAll = (typeof sessionOptionsOrAll)[number];
6
+ export declare function getSessionsFromStart(startSession: SessionOrAll): (1958 | 1959 | 1960 | 1961 | 1962 | 1963 | 1964 | 1965 | 1966 | 1967 | 1968 | 1969 | 1970 | 1971 | 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | 1978 | 1979 | 1980 | 1981 | 1982 | 1983 | 1984 | 1985 | 1986 | 1987 | 1988 | 1989 | 1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026)[];
@@ -0,0 +1,19 @@
1
+ export const UNDEFINED_SESSION = 0;
2
+ export const sessionOptions = [
3
+ 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976,
4
+ 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
5
+ 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014,
6
+ 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026,
7
+ // TO COMPLETE EVERY YEAR :)
8
+ ];
9
+ export const sessionOptionsOrAll = [UNDEFINED_SESSION, ...sessionOptions];
10
+ export function getSessionsFromStart(startSession) {
11
+ if (startSession === UNDEFINED_SESSION) {
12
+ return Array.from(sessionOptions);
13
+ }
14
+ const sessionIndex = sessionOptions.findIndex((session) => startSession === session);
15
+ if (sessionIndex >= 0) {
16
+ return sessionOptions.slice(sessionIndex);
17
+ }
18
+ return [];
19
+ }
@@ -0,0 +1,72 @@
1
+ import { DocumentResult } from "../loaders.js";
2
+ export declare enum DivisionType {
3
+ tome = 1,
4
+ part = 2,
5
+ book = 3,
6
+ title = 4,
7
+ subtitle = 5,
8
+ chapter = 6,
9
+ section = 7,
10
+ subsection = 8,
11
+ paragraph = 9,
12
+ article = 10,
13
+ alinea = 11,
14
+ division = 12
15
+ }
16
+ export type DivisionTag = keyof typeof DivisionType;
17
+ export interface DocumentMetadata {
18
+ name: string;
19
+ session: number | null | undefined;
20
+ date?: string | null;
21
+ url_expose_des_motifs?: URL;
22
+ url_xml?: URL;
23
+ url_html: URL;
24
+ url_pdf: URL;
25
+ }
26
+ export interface FlatTexte extends Partial<DocumentResult> {
27
+ titre: string | null;
28
+ titre_court: string | null;
29
+ url_dossier_senat: string | null;
30
+ url_dossier_assemblee: string | null;
31
+ date_presentation: Date | null;
32
+ date_depot: Date | null;
33
+ date_publication_xml: Date | null;
34
+ version: Version | null;
35
+ divisions: Division[];
36
+ expose_motifs?: ExposeDesMotifs | null;
37
+ }
38
+ export type Version = "RECT" | "RECT_BIS" | "RECT_TER" | "RECT_QUATER" | "RECT_QUINQUIES";
39
+ export interface Step {
40
+ eId: string;
41
+ date: Date | null;
42
+ type: string | null;
43
+ session: string | null;
44
+ numero: string | null;
45
+ version: Version | null;
46
+ outcome: string | null;
47
+ }
48
+ export interface Division {
49
+ index: number;
50
+ eId: string;
51
+ tag: DivisionTag;
52
+ level: number;
53
+ headings: DivisionContent[];
54
+ }
55
+ export interface Article extends Division {
56
+ alineas: Alinea[];
57
+ }
58
+ export interface DivisionContent {
59
+ text: string | null;
60
+ html?: string | null;
61
+ }
62
+ export interface Alinea extends DivisionContent {
63
+ eId: string;
64
+ heading: DivisionContent;
65
+ pastille: string | null;
66
+ text_avec_liens?: string | null;
67
+ html_avec_liens?: string | null;
68
+ }
69
+ export interface ExposeDesMotifs {
70
+ text: string | null;
71
+ html: string | null;
72
+ }
@@ -0,0 +1,15 @@
1
+ export var DivisionType;
2
+ (function (DivisionType) {
3
+ DivisionType[DivisionType["tome"] = 1] = "tome";
4
+ DivisionType[DivisionType["part"] = 2] = "part";
5
+ DivisionType[DivisionType["book"] = 3] = "book";
6
+ DivisionType[DivisionType["title"] = 4] = "title";
7
+ DivisionType[DivisionType["subtitle"] = 5] = "subtitle";
8
+ DivisionType[DivisionType["chapter"] = 6] = "chapter";
9
+ DivisionType[DivisionType["section"] = 7] = "section";
10
+ DivisionType[DivisionType["subsection"] = 8] = "subsection";
11
+ DivisionType[DivisionType["paragraph"] = 9] = "paragraph";
12
+ DivisionType[DivisionType["article"] = 10] = "article";
13
+ DivisionType[DivisionType["alinea"] = 11] = "alinea";
14
+ DivisionType[DivisionType["division"] = 12] = "division";
15
+ })(DivisionType || (DivisionType = {}));
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ export declare const configSchema: z.ZodObject<{
3
+ db: z.ZodObject<{
4
+ host: z.ZodString;
5
+ password: z.ZodString;
6
+ user: z.ZodString;
7
+ port: z.ZodCoercedNumber<unknown>;
8
+ }, z.core.$strip>;
9
+ }, z.core.$strip>;
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ const dbSchema = z.object({
3
+ host: z.string().trim().min(1, "Must not be empty"),
4
+ password: z.string().trim().min(1, "Must not be empty"),
5
+ user: z.string().trim().min(1, "Must not be empty"),
6
+ port: z.coerce.number().int().min(0).max(65535),
7
+ });
8
+ export const configSchema = z.object({
9
+ db: dbSchema,
10
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tricoteuses/senat",
3
- "version": "3.1.3",
3
+ "version": "3.1.5",
4
4
  "description": "Handle French Sénat's open data",
5
5
  "keywords": [
6
6
  "France",