@tricoteuses/senat
Version:
Handle French Sénat's open data
448 lines (447 loc) • 17.4 kB
JavaScript
import { jsonArrayFrom, jsonObjectFrom } from "kysely/helpers/postgres";
import { dbSens } from "../databases";
import { concat, nullIf, rtrim, toDateString } from "./util";
function circonscription(dptNum) {
return jsonObjectFrom(dbSens
.selectFrom("dpt")
.leftJoin("reg", "dpt.regcod", "reg.regcod")
.where("dpt.dptnum", "=", dptNum)
.select([
"dpt.dptcod as code",
"dpt.dptlib as libelle_departement",
"reg.reglib as libelle_region",
]));
}
function textes(actId) {
return jsonArrayFrom(dbSens
.selectFrom("activite_loi")
.where("actid", "=", actId)
.select(({ ref }) => [
rtrim(ref("loicod")).as("loicod"),
]));
}
function delegations(actId) {
return jsonArrayFrom(dbSens
.selectFrom("activite_delegation")
.where("actid", "=", actId)
.orderBy("delegidx asc"));
}
function activites(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("activite")
.leftJoin("activite_participant", "activite.actid", "activite_participant.actid")
.leftJoin("type_activite", "activite.typactcod", "type_activite.typactcod")
.leftJoin("categorie_activite", "activite.catactcod", "categorie_activite.catactcod")
.where("activite_participant.senmat", "=", senMat)
.select(({ ref }) => [
delegations(ref("activite.actid")).as("delegations"),
textes(ref("activite.actid")).as("textes"),
])
.orderBy("activite.datdeb desc"));
}
function activitesPerso(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("activite_senateur")
.leftJoin("type_activite_senateur", "activite_senateur.typactsencod", "type_activite_senateur.typactsencod")
.where("activite_senateur.senmat", "=", senMat)
.orderBy("activite_senateur.datdeb desc"));
}
function fonctionsBureau(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("senbur")
.leftJoin("bur", "senbur.burcod", "bur.burcod")
.where("senbur.senmat", "=", senMat)
.select(({ eb, ref }) => [
toDateString(ref("senbur.senburdatdeb")).as("date_debut"),
toDateString(ref("senbur.senburdatfin")).as("date_fin"),
eb.fn.coalesce(nullIf(ref("bur.burlib")), nullIf(ref("bur.burlil")), nullIf(ref("bur.burlic"))).as("libelle"),
])
.orderBy("senbur.senburdatdeb desc"));
}
function mandatsEluConseillerGeneral(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("elucan")
.leftJoin("typman", "elucan.typmancod", "typman.typmancod")
.where("elucan.senmat", "=", senMat)
.select(({ ref }) => [
circonscription(ref("elucan.dptnum").$notNull()).as("circonscription"),
])
.orderBy("elucan.eludatdeb desc"));
}
function mandatsEluDepute(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("eludep")
.leftJoin("typman", "eludep.typmancod", "typman.typmancod")
.where("eludep.senmat", "=", senMat)
.select(({ ref }) => [
circonscription(ref("eludep.circo").$notNull()).as("circonscription"),
])
.orderBy("eludep.eludatdeb desc"));
}
function mandatsEluDivers(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("eludiv")
.leftJoin("typman", "eludiv.typmancod", "typman.typmancod")
.where("eludiv.senmat", "=", senMat)
.orderBy("eludiv.eludatdeb desc"));
}
function mandatsEluEuropeen(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("elueur")
.leftJoin("nation", "elueur.nationcod", "nation.nationcod")
.leftJoin("typman", "elueur.typmancod", "typman.typmancod")
.where("elueur.senmat", "=", senMat)
.orderBy("elueur.eludatdeb desc"));
}
function mandatsEluConseillerRegional(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("elureg")
.leftJoin("reg", "elureg.regcod", "reg.regcod")
.leftJoin("typman", "elureg.typmancod", "typman.typmancod")
.where("elureg.senmat", "=", senMat)
.orderBy("elureg.eludatdeb desc"));
}
function mandatsEluSenateur(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("elusen")
.leftJoin("etadebman", "elusen.etadebmancod", "etadebman.etadebmancod")
.leftJoin("etafinman", "elusen.etafinmancod", "etafinman.etafinmancod")
.leftJoin("typman", "elusen.typmancod", "typman.typmancod")
.where("elusen.senmat", "=", senMat)
.select(({ ref }) => [
"elusen.dptnum as code_circonscription",
toDateString(ref("elusen.eludatdeb")).as("date_debut"),
toDateString(ref("elusen.eludatfin")).as("date_fin"),
"elusen.temvalcod as etat",
"etadebman.etadebmanlib as etat_debut",
"etafinman.etafinman as etat_fin",
])
.orderBy("elusen.eludatdeb desc"));
}
function mandatsEluTerritorial(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("eluter")
.leftJoin("asster", "eluter.asstercod", "asster.asstercod")
.leftJoin("typman", "eluter.typmancod", "typman.typmancod")
.where("eluter.senmat", "=", senMat)
.orderBy("eluter.eludatdeb desc"));
}
function mandatsEluConseillerMunicipal(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("eluvil")
.leftJoin("typman", "eluvil.typmancod", "typman.typmancod")
.where("eluvil.senmat", "=", senMat)
.orderBy("eluvil.eludatdeb desc"));
}
function fonctionsMembreCommission(memComId) {
return jsonArrayFrom(dbSens
.selectFrom("fonmemcom")
.leftJoin("foncom", "fonmemcom.foncomcod", "foncom.foncomcod")
.where("fonmemcom.memcomid", "=", memComId)
.select(({ eb, ref }) => [
toDateString(ref("fonmemcom.fonmemcomdatdeb")).as("date_debut"),
toDateString(ref("fonmemcom.fonmemcomdatfin")).as("date_fin"),
eb.fn.coalesce(nullIf(ref("foncom.foncomlib")), nullIf(ref("foncom.foncomlil")), nullIf(ref("foncom.foncomlic"))).as("libelle"),
])
.orderBy("fonmemcom.fonmemcomdatdeb desc"));
}
function mandatsMembreCommission(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("memcom")
.leftJoin("com", "memcom.orgcod", "com.orgcod")
.leftJoin("typorg", "com.typorgcod", "typorg.typorgcod")
.where("memcom.senmat", "=", senMat)
.select(({ ref }) => [
"com.typorgcod as type_code_organisme",
"memcom.orgcod as code_organisme",
"typorg.typorglib as type_organisme",
"com.comlilmin as libelle",
toDateString(ref("memcom.memcomdatdeb")).as("date_debut"),
toDateString(ref("memcom.memcomdatfin")).as("date_fin"),
"memcom.temvalcod as etat",
fonctionsMembreCommission(ref("memcom.memcomid")).as("fonctions"),
])
.orderBy("memcom.memcomdatdeb desc"));
}
function fonctionsMembreDelegation(memDelegaId) {
return jsonArrayFrom(dbSens
.selectFrom("fonmemdelega")
.leftJoin("fondelega", "fonmemdelega.fondelcod", "fondelega.fondelcod")
.where("fonmemdelega.memdelegaid", "=", memDelegaId)
.select(({ eb, ref }) => [
toDateString(ref("fonmemdelega.fonmemdeldatdeb")).as("date_debut"),
toDateString(ref("fonmemdelega.fonmemdeldatfin")).as("date_fin"),
eb.fn.coalesce(nullIf(ref("fondelega.fondellib")), nullIf(ref("fondelega.fondellil")), nullIf(ref("fondelega.fondellic"))).as("libelle"),
])
.orderBy("fonmemdelega.fonmemdeldatdeb desc"));
}
function mandatsMembreDelegation(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("memdelega")
.leftJoin("delega", "memdelega.orgcod", "delega.orgcod")
.leftJoin("designorg", "memdelega.designcod", "designorg.designcod")
.leftJoin("typorg", "delega.typorgcod", "typorg.typorgcod")
.where("memdelega.senmat", "=", senMat)
.select(({ ref }) => [
"delega.typorgcod as type_code_organisme",
"memdelega.orgcod as code_organisme",
"typorg.typorglib as type_organisme",
"delega.evelib as libelle",
toDateString(ref("memdelega.memdelegadatdeb")).as("date_debut"),
toDateString(ref("memdelega.memdelegadatfin")).as("date_fin"),
"memdelega.temvalcod as etat",
fonctionsMembreDelegation(ref("memdelega.memdelegaid")).as("fonctions"),
])
.orderBy("memdelega.memdelegadatdeb desc"));
}
function mandatsMembreExtraParlementaire(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("memextpar")
.leftJoin("orgext", "memextpar.orgcod", "orgext.orgcod")
.leftJoin("design", "memextpar.designcod", "design.designcod")
.where("memextpar.senmat", "=", senMat)
.orderBy("memextpar.memextpardatdeb desc"));
}
function fonctionsMembreGroupePolitique(memGrpPolId) {
return jsonArrayFrom(dbSens
.selectFrom("fonmemgrppol")
.leftJoin("fongrppol", "fonmemgrppol.fongrppolcod", "fongrppol.fongrppolcod")
.where("fonmemgrppol.memgrppolid", "=", memGrpPolId)
.select(({ eb, ref }) => [
toDateString(ref("fonmemgrppol.fonmemgrppoldatdeb")).as("date_debut"),
toDateString(ref("fonmemgrppol.fonmemgrppoldatfin")).as("date_fin"),
eb.fn.coalesce(nullIf(ref("fongrppol.fongrppollib")), nullIf(ref("fongrppol.fongrppollil")), nullIf(ref("fongrppol.fongrppollic"))).as("libelle"),
])
.orderBy("fonmemgrppol.fonmemgrppoldatdeb desc"));
}
function mandatsMembreGroupePolitique(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("memgrppol")
.leftJoin("grppol", "memgrppol.grppolcod", "grppol.grppolcod")
.leftJoin("typapppol", "memgrppol.typapppolcod", "typapppol.typapppolcod")
.leftJoin("typorg", "grppol.typorgcod", "typorg.typorgcod")
.where("memgrppol.senmat", "=", senMat)
.select(({ ref }) => [
"grppol.typorgcod as type_code_organisme",
"memgrppol.grppolcod as code_organisme",
"typorg.typorglib as type_organisme",
"grppol.grppollibcou as libelle",
toDateString(ref("memgrppol.memgrppoldatdeb")).as("date_debut"),
toDateString(ref("memgrppol.memgrppoldatfin")).as("date_fin"),
"memgrppol.temvalcod as etat",
fonctionsMembreGroupePolitique(ref("memgrppol.memgrppolid")).as("fonctions"),
])
.orderBy("memgrppol.memgrppoldatdeb desc"));
}
function fonctionsMembreGroupeSenatorial(memGrpSenId) {
return jsonArrayFrom(dbSens
.selectFrom("fonmemgrpsen")
.leftJoin("fongrpsen", "fonmemgrpsen.fongrpsencod", "fongrpsen.fongrpsencod")
.where("fonmemgrpsen.memgrpsenid", "=", memGrpSenId)
.orderBy("fonmemgrpsen.fonmemgrpsendatdeb desc"));
}
function mandatsMembreGroupeSenatorial(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("memgrpsen")
.leftJoin("grpsenami", "memgrpsen.orgcod", "grpsenami.orgcod")
.leftJoin("typgrpsen", "grpsenami.typgrpsencod", "typgrpsen.typgrpsencod")
.where("memgrpsen.senmat", "=", senMat)
.select(({ ref }) => [
fonctionsMembreGroupeSenatorial(ref("memgrpsen.memgrpsenid")).as("fonctions"),
])
.orderBy("memgrpsen.memgrpsendatent desc"));
}
function fonctionsMembreOrganisme(memOrgId) {
return jsonArrayFrom(dbSens
.selectFrom("fonmemorg")
.leftJoin("fonorg", "fonmemorg.fonorgcod", "fonorg.fonorgcod")
.where("fonmemorg.memorgid", "=", memOrgId)
.orderBy("fonmemorg.fonmemorgdatdeb desc"));
}
function mandatsMembreOrganisme(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("memorg")
.leftJoin("org", "memorg.orgcod", "org.orgcod")
.leftJoin("typorg", "org.typorgcod", "typorg.typorgcod")
.leftJoin("designorg", "memorg.designcod", "designorg.designcod")
.where("memorg.senmat", "=", senMat)
.select(({ ref }) => [
fonctionsMembreOrganisme(ref("memorg.memorgid")).as("fonctions"),
])
.orderBy("memorg.memorgdatdeb desc"));
}
function mandatsMinistre(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("minind")
.where("minind.senmat", "=", senMat)
.orderBy("minind.mindatdeb desc"));
}
function contacts(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("poicon")
.leftJoin("adresse", "poicon.poiconid", "adresse.poiconid")
.leftJoin("mel", "poicon.poiconid", "mel.poiconid")
.leftJoin("telephone", "poicon.poiconid", "telephone.poiconid")
.where("poicon.senmat", "=", senMat)
.orderBy("poicon.poiconnumtri asc"));
}
function urls(senMat) {
return jsonArrayFrom(dbSens
.selectFrom("senurl")
.where("senurl.senmat", "=", senMat)
.select([
"senurl.typurlcod as code_url",
"senurl.senurlurl as url",
])
.orderBy("senurl.senurlnumtri asc"));
}
const findAllQuery = dbSens
.selectFrom("sen")
.leftJoin("etasen", "sen.etasencod", "etasen.etasencod")
.leftJoin("pcs", "sen.pcscod", "pcs.pcscod")
.leftJoin("pcs42", "pcs.pcs42cod", "pcs42.pcs42cod")
.leftJoin("pcs24", "pcs42.pcs24cod", "pcs24.pcs24cod")
.leftJoin("pcs8", "pcs24.pcs8cod", "pcs8.pcs8cod")
.leftJoin("grppol", "sen.sengrppolcodcou", "grppol.grppolcod")
.leftJoin("com", "sen.sencomcodcou", "com.orgcod")
.select(({ ref }) => [
"sen.senmat as matricule",
"sen.quacod as qualite",
"sen.sennomuse as nom_usuel",
"sen.senprenomuse as prenom_usuel",
"sen.etasencod as etat",
toDateString(ref("sen.sendatnai")).as("date_naissance"),
toDateString(ref("sen.sendatdec")).as("date_deces"),
"sen.sengrppolcodcou as code_groupe_politique",
"sen.sengrppolliccou as groupe_politique",
"sen.sencomcodcou as code_commission_permanente",
"com.comlilmin as commission_permanente",
"sen.sencirnumcou as code_circonscription",
"sen.sencircou as circonscription",
"sen.senburliccou as fonction_bureau_senat",
"sen.senema as courrier_electronique",
"pcs.pcslil as PCS_INSEE",
"pcs42.pcs42lib as PCS_INSEE_42",
"pcs24.pcs24lib as PCS_INSEE_24",
"pcs8.pcs8lil as PCS_INSEE_8",
"sen.sendespro as description_profession",
"sen.sennumsie as siege",
"sen.sendaiurl as url_hatvp",
urls(ref("sen.senmat")).as("urls"),
mandatsEluSenateur(ref("sen.senmat")).as("mandats_senateur"),
mandatsMembreCommission(ref("sen.senmat")).as("commissions"),
mandatsMembreDelegation(ref("sen.senmat")).as("delegations"),
mandatsMembreGroupePolitique(ref("sen.senmat")).as("groupes"),
fonctionsBureau(ref("sen.senmat")).as("fonctions_bureau"),
]);
const findAllCirconscriptionsQuery = dbSens
.selectFrom("dpt")
.leftJoin("reg", "dpt.regcod", "reg.regcod")
.select(({ ref }) => [
"dpt.dptnum as identifiant",
"dpt.dptcod as code",
"dpt.dptlib as libelle_departement",
"dpt.dptart as article",
"reg.reglib as libelle_region",
"dpt.temvalcod as etat",
toDateString(ref("dpt.dptdatdeb")).as("date_debut"),
toDateString(ref("dpt.dptdatfin")).as("date_fin"),
"dpt.dptnbrsen as nombre_senateurs",
"dpt.dpturlcmp as url",
]);
const findAllOrganismesQuery = dbSens
.selectFrom((eb) => eb
.selectFrom("com")
.select([
"orgcod",
"evelic",
"evelib",
"evelil",
"typorgcod",
"orgurlsim",
"orgdatcre",
"orgdatfin",
"temvalcod",
])
.union(eb
.selectFrom("delega")
.select([
"orgcod",
"evelic",
"evelib",
"evelil",
"typorgcod",
"orgurlsim",
"orgdatcre",
"orgdatfin",
"temvalcod",
]))
.union(eb
.selectFrom("grppol")
.select([
"grppolcod as orgcod",
"grppolliccou as evelic",
"grppollibcou as evelib",
"grppollilcou as evelil",
"typorgcod",
"grppolurlsim as orgurlsim",
"grppoldatcre as orgdatcre",
"grppoldatfin as orgdatfin",
"temvalcod",
]))
.union(eb
.selectFrom("grpsenami")
.select([
"orgcod",
"evelic",
"evelib",
"evelil",
"typorgcod",
"orgurlsim",
"orgdatcre",
"orgdatfin",
"temvalcod",
]))
.union(eb
.selectFrom("org")
.select([
"orgcod",
"evelic",
"evelib",
"evelil",
"typorgcod",
"orgurlsim",
"orgdatcre",
"orgdatfin",
"temvalcod",
]))
.as("all_organismes"))
.leftJoin("typorg", "all_organismes.typorgcod", "typorg.typorgcod")
.select(({ ref, val }) => [
"all_organismes.orgcod as code",
"all_organismes.evelic as libelle_court",
"all_organismes.evelib as libelle",
rtrim(ref("all_organismes.evelil")).as("libelle_long"),
"all_organismes.typorgcod as type_code",
rtrim(ref("typorg.typorglib")).as("type_libelle"),
concat(val("https://www.senat.fr"), ref("all_organismes.orgurlsim")).as("url"),
toDateString(ref("all_organismes.orgdatcre")).as("date_debut"),
toDateString(ref("all_organismes.orgdatfin")).as("date_fin"),
"all_organismes.temvalcod as etat",
]);
export function findAll() {
return findAllQuery.stream();
}
export function findAllCirconscriptions() {
return findAllCirconscriptionsQuery.stream();
}
export function findAllOrganismes() {
return findAllOrganismesQuery.stream();
}
export function findActif() {
return dbSens
.selectFrom("sen")
.where("etasencod", "=", "ACTIF")
.select(["senmat", "sennomuse", "senprenomuse"])
.stream();
}