UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

486 lines (485 loc) 19.3 kB
import { jsonArrayFrom, jsonObjectFrom } from "kysely/helpers/postgres"; import { dbSenat } from "../databases"; import { concat, nullIf, rtrim, toDateString } from "./util"; function circonscription(dptNum) { return jsonObjectFrom(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .selectFrom("activite_loi") .where("actid", "=", actId) .select(({ ref }) => [rtrim(ref("loicod")).as("loicod")])); } function delegations(actId) { return jsonArrayFrom(dbSenat.withSchema("sens").selectFrom("activite_delegation").where("actid", "=", actId).orderBy("delegidx", "asc")); } function activites(senMat) { return jsonArrayFrom(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .selectFrom("eludiv") .leftJoin("typman", "eludiv.typmancod", "typman.typmancod") .where("eludiv.senmat", "=", senMat) .orderBy("eludiv.eludatdeb", "desc")); } function mandatsEluEuropeen(senMat) { return jsonArrayFrom(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .selectFrom("eluvil") .leftJoin("typman", "eluvil.typmancod", "typman.typmancod") .where("eluvil.senmat", "=", senMat) .orderBy("eluvil.eludatdeb", "desc")); } function fonctionsMembreCommission(memComId) { return jsonArrayFrom(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .selectFrom("fonmemgrpsen") .leftJoin("fongrpsen", "fonmemgrpsen.fongrpsencod", "fongrpsen.fongrpsencod") .where("fonmemgrpsen.memgrpsenid", "=", memGrpSenId) .orderBy("fonmemgrpsen.fonmemgrpsendatdeb", "desc")); } function mandatsMembreGroupeSenatorial(senMat) { return jsonArrayFrom(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .selectFrom("fonmemorg") .leftJoin("fonorg", "fonmemorg.fonorgcod", "fonorg.fonorgcod") .where("fonmemorg.memorgid", "=", memOrgId) .orderBy("fonmemorg.fonmemorgdatdeb", "desc")); } function mandatsMembreOrganisme(senMat) { return jsonArrayFrom(dbSenat .withSchema("sens") .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(dbSenat .withSchema("sens") .selectFrom("minind") .where("minind.senmat", "=", senMat) .orderBy("minind.mindatdeb", "desc")); } function adressesPoicon(poiconId) { return jsonArrayFrom(dbSenat .withSchema("sens") .selectFrom("adresse") .where("adresse.poiconid", "=", poiconId) .select([ "adresse.adrnumvoi as numero_voie", "adresse.adrnomvoi as nom_voie", "adresse.adrcmp as complement", "adresse.adrcmp2 as complement2", "adresse.adrcodpos as code_postal", "adresse.adrcom as commune", "adresse.adrcdxcod as code_cedex", "adresse.adrcdxlib as libelle_cedex", "adresse.adrburdis as bureau_distributeur", ]) .orderBy("adresse.adrnumtri", "asc")); } function telephonesPoicon(poiconId) { return jsonArrayFrom(dbSenat .withSchema("sens") .selectFrom("telephone") .where("telephone.poiconid", "=", poiconId) .select(["telephone.typtelcod as type", "telephone.telnum as numero"]) .orderBy("telephone.telnumtri", "asc")); } function pointsContact(senMat) { return jsonArrayFrom(dbSenat .withSchema("sens") .selectFrom("poicon") .where("poicon.senmat", "=", senMat) .select(({ ref }) => [ "poicon.poiconid as id", "poicon.typpoiconcod as type", "poicon.poiconlib as libelle", adressesPoicon(ref("poicon.poiconid")).as("adresses"), telephonesPoicon(ref("poicon.poiconid")).as("telephones"), ]) .orderBy("poicon.poiconnumtri", "asc")); } function urls(senMat) { return jsonArrayFrom(dbSenat .withSchema("sens") .selectFrom("senurl") .where("senurl.senmat", "=", senMat) .select(["senurl.typurlcod as code_url", "senurl.senurlurl as url"]) .orderBy("senurl.senurlnumtri", "asc")); } const findAllQuery = dbSenat .withSchema("sens") .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"), pointsContact(ref("sen.senmat")).as("points_contact"), ]); const findAllCirconscriptionsQuery = dbSenat .withSchema("sens") .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 = dbSenat .withSchema("sens") .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 dbSenat .withSchema("sens") .selectFrom("sen") .where("etasencod", "=", "ACTIF") .select(["senmat", "sennomuse", "senprenomuse"]) .stream(); }