@tricoteuses/senat
Version:
Handle French Sénat's open data
95 lines (94 loc) • 3.37 kB
JavaScript
import { jsonArrayFrom } from "kysely/helpers/postgres";
import { dbAmeli } from "../databases";
import { concat, toDateString } from "./util";
function auteurs(amendementId) {
return jsonArrayFrom(dbAmeli
.selectFrom("amdsen")
.leftJoin("sen_ameli", "amdsen.senid", "sen_ameli.entid")
.where("amdsen.amdid", "=", amendementId)
.select([
"amdsen.prenomuse as prenom",
"amdsen.nomuse as nom",
"sen_ameli.mat as matricule",
])
.orderBy("amdsen.rng asc"));
}
const findAllQuery = dbAmeli
.selectFrom("amd")
.leftJoin("sub", "amd.subid", "sub.id")
.leftJoin("typsub", "sub.typid", "typsub.id")
.leftJoin("txt_ameli", "amd.txtid", "txt_ameli.id")
.leftJoin("ses", "txt_ameli.sesdepid", "ses.id")
.leftJoin("nat", "txt_ameli.natid", "nat.id")
.leftJoin("lec_ameli", "txt_ameli.lecid", "lec_ameli.id")
.leftJoin("avicom", "amd.avcid", "avicom.id")
.leftJoin("avigvt", "amd.avgid", "avigvt.id")
.leftJoin("sor", "amd.sorid", "sor.id")
.leftJoin("irr", "amd.irrid", "irr.id")
.leftJoin("grppol_ameli", "amd.nomentid", "grppol_ameli.entid")
.leftJoin("com_ameli", "amd.nomentid", "com_ameli.entid")
.leftJoin("cab", "amd.nomentid", "cab.entid")
.select(({ eb, ref, val }) => [
"ses.ann as session",
"txt_ameli.doslegsignet as signet_dossier_legislatif",
"nat.libcourt as nature_texte",
"txt_ameli.numabs as numero_texte",
"txt_ameli.int as intitule_texte",
"lec_ameli.lib as lecture",
eb
.case()
.when("amd.typ", "=", "A")
.then(val("Amendement"))
.when("amd.typ", "=", "M")
.then(val("Motion"))
.when("amd.typ", "=", "S")
.then(val("Sous-amendement"))
.else("")
.end()
.as("nature"),
"amd.id as id",
"amd.amdperid as parent_id",
"amd.num as numero",
"amd.numabs as numero_absolu",
"amd.ord as ordre",
"sub.lib as subdivision_libelle",
"sub.lic as subdivision_libelle_court",
"typsub.lib as subdivision_type",
"amd.alinea as alinea",
toDateString(ref("amd.datdep")).as("date_depot"),
"amd.dis as dispositif",
"amd.obj as objet",
eb
.case()
.when("amd.etaid", "=", 7)
.then(val("Diffusé"))
.when("amd.etaid", "=", 8)
.then(val("Retiré avant réunion ou séance"))
.when("amd.etaid", "=", 9)
.then(val("Examiné en commission ou séance"))
.when("amd.etaid", "=", 10)
.then(val("Irrecevable"))
.when("amd.etaid", "=", 11)
.then(val("Irrecevable"))
.else("")
.end()
.as("etat"),
"avicom.lib as avis_commission",
"avigvt.lib as avis_gouvernement",
eb.fn.coalesce("sor.lib", "irr.libirr").as("sort"),
"amd.rev as revision",
concat(val("https://www.senat.fr/amendements/"), ref("ses.lil"), val("/"), ref("txt_ameli.numabs"), val("/Amdt_"), ref("amd.numabs"), val(".html")).as("url"),
"grppol_ameli.lilcou as au_nom_de_groupe_politique",
"com_ameli.lil as au_nom_de_commission",
eb
.case()
.when("cab.entid", "is not", null)
.then(true)
.else(false)
.end()
.as("auteur_est_gouvernement"),
auteurs(ref("amd.id")).as("auteurs"),
]);
export function findAll() {
return findAllQuery.stream();
}