UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

546 lines (485 loc) 15.1 kB
import { TxtAmeli } from "./types/ameli" import { Debat } from "./types/debats" import { Ass, Aud, Auteur, DateSeance, DecCoc, DenRap, DocAtt, Ecr, EtaLoi, LecAss, LecAssRap, Lecture, Loi, Org, OriTxt, Qua, Rap, Scr, Texte, TypAtt, TypLec, TypLoi, TypTxt, TypUrl, } from "./types/dosleg" import { Question } from "./types/questions" import { Sen } from "./types/sens" export interface OutputData { readonly ass?: { [id: string]: Ass } readonly aud?: { [id: string]: Aud } readonly auteur?: { [id: string]: Auteur } readonly date_seance?: { [id: string]: DateSeance } readonly debats?: { [id: string]: Debat } readonly deccoc?: { [id: string]: DecCoc } readonly denrap?: { [id: string]: DenRap } readonly docatt?: { [id: string]: DocAtt } readonly ecr?: { [id: string]: Ecr } readonly etaloi?: { [id: string]: EtaLoi } readonly lecass?: { [id: string]: LecAss } readonly lecassrap?: { [id: string]: LecAssRap } readonly lecture?: { [id: string]: Lecture } readonly loi?: { [id: string]: Loi } readonly org?: { [id: string]: Org } readonly oritxt?: { [id: string]: OriTxt } readonly qua?: { [id: string]: Qua } readonly rap?: { [id: string]: Rap } readonly scr?: { [id: string]: Scr } readonly texte?: { [id: string]: Texte } readonly typatt?: { [id: string]: TypAtt } readonly typlec?: { [id: string]: TypLec } readonly typloi?: { [id: string]: TypLoi } readonly typtxt?: { [id: string]: TypTxt } readonly typurl?: { [id: string]: TypUrl } readonly txt_ameli?: { [id: string]: TxtAmeli } } type VisitedIdsByTableName = { [tableName: string]: Set<number | string> } export function insertAudReferences( aud: Aud, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.aud if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.aud = new Set() } if (!visitedIds.has(aud.audcle)) { visitedIds.add(aud.audcle) if (aud.orgcod !== null && data.org !== undefined) { const org = data.org[aud.orgcod] if (org !== undefined) { aud.org = org // insertOrgReferences(org, data, visitedIdsByTableName) } } // TODO } return aud } export function insertAuteurReferences( auteur: Auteur, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.auteur if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.auteur = new Set() } if (!visitedIds.has(auteur.autcod)) { visitedIds.add(auteur.autcod) if (data.qua !== undefined) { const qua = data.qua[auteur.quacod] if (qua !== undefined) { auteur.qua = qua // insertQuaReferences(qua, data, visitedIdsByTableName) } } // TODO } return auteur } export function insertDateSeanceReferences( dateSeance: DateSeance, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.date_seance if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.date_seance = new Set() } if (!visitedIds.has(dateSeance.code)) { visitedIds.add(dateSeance.code) if (dateSeance.date_s !== null && data.debats !== undefined) { const dateString = dateSeance.date_s instanceof Date ? dateSeance.date_s.toISOString() : dateSeance.date_s const debat = data.debats[dateString] if (debat !== undefined) { dateSeance.debat = debat // insertDebatReferences(debat, data, visitedIdsByTableName) } } dateSeance.scrs = [] if (dateSeance.scrids !== undefined && data.scr !== undefined) { for (const scrid of dateSeance.scrids) { const scr = data.scr[scrid] if (scr !== undefined) { dateSeance.scrs.push(scr) // insertScrReferences(scr, data, visitedIdsByTableName) } } } } return dateSeance } export function insertDocAttReferences( docatt: DocAtt, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, performInsertRapReferences=true ) { let visitedIds = visitedIdsByTableName.docatt if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.docatt = new Set() } if (!visitedIds.has(docatt.docattcle)) { visitedIds.add(docatt.docattcle) if (performInsertRapReferences && docatt.rapcod !== null && data.rap !== undefined) { const rap = data.rap[docatt.rapcod] if (rap !== undefined) { docatt.rap = rap insertRapReferences(rap, data, visitedIdsByTableName) } } if (docatt.typattcod !== null && data.typatt !== undefined) { const typatt = data.typatt[docatt.typattcod] if (typatt !== undefined) { docatt.typatt = typatt // insertTypAttReferences(typatt, data, visitedIdsByTableName) } } } return docatt } export function insertEcrReferences( ecr: Ecr, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.ecr if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.ecr = new Set() } if (!visitedIds.has(ecr.ecrnum)) { visitedIds.add(ecr.ecrnum) if (ecr.autcod !== null && data.auteur !== undefined) { const aut = data.auteur[ecr.autcod] if (aut !== undefined) { ecr.aut = aut insertAuteurReferences(aut, data, visitedIdsByTableName) } } // TODO } return ecr } export function insertLecassrapReferences( lecassrap: LecAssRap, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.lecassrap if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.lecassrap = new Set() } const lecasrapid = `${lecassrap.lecassidt} ${lecassrap.rapcod}` if (!visitedIds.has(lecasrapid)) { visitedIds.add(lecasrapid) if (lecassrap.rapcod !== null && data.rap !== undefined) { const rap = data.rap[lecassrap.rapcod] if (rap !== undefined) { lecassrap.rap = rap insertRapReferences(rap, data, visitedIdsByTableName) } } } return lecassrap } export function insertLecassReferences( lecass: LecAss, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.lecass if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.lecass = new Set() } if (!visitedIds.has(lecass.lecassidt)) { visitedIds.add(lecass.lecassidt) if (lecass.codass !== null && data.ass !== undefined) { const ass = data.ass[lecass.codass] if (ass !== undefined) { lecass.ass = ass // insertAssReferences(ass, data, visitedIdsByTableName) } } if (lecass.orgcod !== null && data.org !== undefined) { const org = data.org[lecass.orgcod] if (org !== undefined) { lecass.org = org // insertOrgReferences(org, data, visitedIdsByTableName) } } lecass.auds = [] if (lecass.audcles !== undefined && data.aud !== undefined) { for (const audcle of lecass.audcles) { const aud = data.aud[audcle] if (aud !== undefined) { lecass.auds.push(aud) insertAudReferences(aud, data, visitedIdsByTableName) } } } lecass.datesSeances = [] if (lecass.datesSeancesCodes !== undefined && data.date_seance !== undefined) { for (const dateSeanceCode of lecass.datesSeancesCodes) { const dateSeance = data.date_seance[dateSeanceCode] if (dateSeance !== undefined) { lecass.datesSeances.push(dateSeance) insertDateSeanceReferences(dateSeance, data, visitedIdsByTableName) } } } lecass.lecassraps = [] if (lecass.lecassrapids !== undefined && data.lecassrap !== undefined) { for (const lecassrapid of lecass.lecassrapids) { const lecassrap = data.lecassrap[lecassrapid] if (lecassrap !== undefined) { lecass.lecassraps.push(lecassrap) insertLecassrapReferences(lecassrap, data, visitedIdsByTableName) } } } lecass.textes = [] if (lecass.texcods !== undefined && data.texte !== undefined) { for (const texcod of lecass.texcods) { const texte = data.texte[texcod] if (texte !== undefined) { lecass.textes.push(texte) insertTexteReferences(texte, data, visitedIdsByTableName) } } } } return lecass } export function insertLectureReferences( lecture: Lecture, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.lecture if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.lecture = new Set() } if (!visitedIds.has(lecture.lecidt)) { visitedIds.add(lecture.lecidt) if (lecture.typleccod !== null && data.typlec !== undefined) { const typlec = data.typlec[lecture.typleccod] if (typlec !== undefined) { lecture.typlec = typlec // insertTyplecReferences(typlec, data, visitedIdsByTableName) } } lecture.lecasss = [] if (lecture.lecassidts !== undefined && data.lecass !== undefined) { for (const lecassidt of lecture.lecassidts) { const lecass = data.lecass[lecassidt] if (lecass !== undefined) { lecture.lecasss.push(lecass) insertLecassReferences(lecass, data, visitedIdsByTableName) } } } } return lecture } export function insertLoiReferences( loi: Loi, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.loi if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.loi = new Set() } if (!visitedIds.has(loi.loicod)) { visitedIds.add(loi.loicod) if (loi.typloicod !== null && data.typloi !== undefined) { const typloi = data.typloi[loi.typloicod] if (typloi !== undefined) { loi.typloi = typloi // insertTyploiReferences(typloi, data, visitedIdsByTableName) } } if (loi.etaloicod !== null && data.etaloi !== undefined) { const etaloi = data.etaloi[loi.etaloicod] if (etaloi !== undefined) { loi.etaloi = etaloi // insertEtaloiReferences(etaloi, data, visitedIdsByTableName) } } if (loi.deccoccod !== null && data.deccoc !== undefined) { const deccoc = data.deccoc[loi.deccoccod] if (deccoc !== undefined) { loi.deccoc = deccoc // insertDeccocReferences(deccoc, data, visitedIdsByTableName) } } loi.lectures = [] if (loi.lecidts !== undefined && data.lecture !== undefined) { for (const lecidt of loi.lecidts) { const lecture = data.lecture[lecidt] if (lecture !== undefined) { loi.lectures.push(lecture) insertLectureReferences(lecture, data, visitedIdsByTableName) } } } } return loi } export function insertQuestionReferences( question: Question, // @ts-ignore TO BE REMOVED WHEN DONE data: OutputData, // @ts-ignore TO BE REMOVED WHEN DONE visitedIdsByTableName: VisitedIdsByTableName, ) { // TODO return question } export function insertRapReferences( rap: Rap, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.rap if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.rap = new Set() } if (!visitedIds.has(rap.rapcod)) { visitedIds.add(rap.rapcod) if (rap.coddenrap !== null && data.denrap !== undefined) { const denrap = data.denrap[rap.coddenrap] if (denrap !== undefined) { rap.denrap = denrap // insertDenrapReferences(denrap, data, visitedIdsByTableName) } } rap.docatts = [] if (rap.docattcles !== undefined && data.docatt !== undefined) { for (const docattcle of rap.docattcles) { const docatt = data.docatt[docattcle] if (docatt !== undefined) { rap.docatts.push(docatt) insertDocAttReferences(docatt, data, visitedIdsByTableName, false) } } } rap.ecrs = [] if (rap.ecrnums !== undefined && data.ecr !== undefined) { for (const ecrnum of rap.ecrnums) { const ecr = data.ecr[ecrnum] if (ecr !== undefined) { rap.ecrs.push(ecr) insertEcrReferences(ecr, data, visitedIdsByTableName) } } } rap.orgs = [] if (rap.orgcods !== undefined && data.org !== undefined) { for (const orgcod of rap.orgcods) { const org = data.org[orgcod] if (org !== undefined) { rap.orgs.push(org) // insertOrgReferences(org, data, visitedIdsByTableName) } } } } return rap } export function insertSenReferences( sen: Sen, // @ts-ignore TO BE REMOVED WHEN DONE data: OutputData, // @ts-ignore TO BE REMOVED WHEN DONE visitedIdsByTableName: VisitedIdsByTableName, ) { // TODO return sen } export function insertTexteReferences( texte: Texte, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, ) { let visitedIds = visitedIdsByTableName.texte if (visitedIds === undefined) { visitedIds = visitedIdsByTableName.texte = new Set() } if (!visitedIds.has(texte.texcod)) { visitedIds.add(texte.texcod) texte.ecrs = [] if (texte.ecrnums !== undefined && data.ecr !== undefined) { for (const ecrnum of texte.ecrnums) { const ecr = data.ecr[ecrnum] if (ecr !== undefined) { texte.ecrs.push(ecr) insertEcrReferences(ecr, data, visitedIdsByTableName) } } } if (texte.orgcod !== null && data.org !== undefined) { const org = data.org[texte.orgcod] if (org !== undefined) { texte.org = org // insertOrgReferences(org, data, visitedIdsByTableName) } } if (texte.oritxtcod !== null && data.oritxt !== undefined) { const oritxt = data.oritxt[texte.oritxtcod] if (oritxt !== undefined) { texte.oritxt = oritxt // insertOritxtReferences(oritxt, data, visitedIdsByTableName) } } if (texte.txtAmeliId !== undefined && data.txt_ameli !== undefined) { const txtAmeli = data.txt_ameli[texte.txtAmeliId] if (txtAmeli !== undefined) { texte.txtAmeli = txtAmeli } } if (texte.typtxtcod !== null && data.typtxt !== undefined) { const typtxt = data.typtxt[texte.typtxtcod] if (typtxt !== undefined) { texte.typtxt = typtxt // insertTyptxtReferences(typtxt, data, visitedIdsByTableName) } } if (texte.typurl !== null && data.typurl !== undefined) { const typurl = data.typurl[texte.typurl] if (typurl !== undefined) { texte.libtypurl = typurl.libtypurl // insertTypurlReferences(typurl, data, visitedIdsByTableName) } } // TODO } return texte }