diff --git a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.spec.ts b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.spec.ts index 29eeb6713..86f122f6c 100644 --- a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.spec.ts +++ b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.spec.ts @@ -1,8 +1,8 @@ import { extractRoute } from '.'; describe('extractRoute', () => { - it('should return exhaustive because it is juritj', async () => { - const route = extractRoute( + it('should return default because it is juritj', async () => { + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: '', @@ -19,11 +19,11 @@ describe('extractRoute', () => { 'juritj', ); - expect(route).toBe('exhaustive'); + expect(route).toBe('default'); }); it('should return default if no endCaseCode & no NACCode', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'non-admission', @@ -44,7 +44,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if jurica with endCaseCode 44E & NACCode 10A', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'non-admission', @@ -65,7 +65,7 @@ describe('extractRoute', () => { }); it('should return automatic if jurica with endCaseCode 11A', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'non-admission', @@ -86,7 +86,7 @@ describe('extractRoute', () => { }); it('should return simple if jurica with NACCode 55L', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'non-admission', @@ -107,7 +107,7 @@ describe('extractRoute', () => { }); it('should return default if jurica with endCaseCode 33G (not in csv)', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'non-admission', @@ -128,7 +128,7 @@ describe('extractRoute', () => { }); it('should return automatic if NA', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'non-admission', @@ -149,7 +149,7 @@ describe('extractRoute', () => { }); it('should return confirmation if C', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -170,7 +170,7 @@ describe('extractRoute', () => { }); it('should return confirmation if AVIS', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -191,7 +191,7 @@ describe('extractRoute', () => { }); it('should return confirmation if Assemblée plénière', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -212,7 +212,7 @@ describe('extractRoute', () => { }); it('should return confirmation if chambre mixte', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -233,7 +233,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if category published', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -254,7 +254,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if category published', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -275,7 +275,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if category published', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -296,7 +296,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if QPC', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -317,7 +317,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if QPC', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -338,7 +338,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if QPC', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'QPC incidente', @@ -359,7 +359,7 @@ describe('extractRoute', () => { }); it('should return automatic if Désistement', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Desistement par arret', @@ -380,7 +380,7 @@ describe('extractRoute', () => { }); it('should return automatic if Déchéance', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Decheance', @@ -401,7 +401,7 @@ describe('extractRoute', () => { }); it('should return simple if formation restreinte', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Cassation partielle', @@ -422,7 +422,7 @@ describe('extractRoute', () => { }); it('should return simple if Rejet non spécialement motivé', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -443,7 +443,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if has additionalTermsToAnnotate', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: 'Something', solution: 'Rejet non spécialement motivé', @@ -464,7 +464,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if has more than 50 parties', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -556,7 +556,7 @@ describe('extractRoute', () => { }); it('should return exhaustive if has more than 50 parties', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: '', solution: 'Rejet non spécialement motivé', @@ -648,7 +648,7 @@ describe('extractRoute', () => { }); it('should return exhaustive even if Rejet non spécialement motivé because has additionalTermsToAnnotate', async () => { - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate: 'Something', solution: 'Rejet non spécialement motivé', diff --git a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.ts b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.ts index 8811bedde..6bb96a4c8 100644 --- a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.ts +++ b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRoute.ts @@ -3,10 +3,12 @@ import { documentType } from '@label/core'; import { extractRouteForJurica } from './extractRouteForJurica'; import { extractRouteForJurinet } from './extractRouteForJurinet'; import { extractRouteForJuritj } from './extractRouteForJuritj'; +import { extractRouteForJuritcom } from './extractRouteForJuritcom'; +import { Sources } from 'dbsder-api-types'; export { extractRoute }; -function extractRoute( +async function extractRoute( routeInfos: { additionalTermsToAnnotate: documentType['decisionMetadata']['additionalTermsToAnnotate']; session: documentType['decisionMetadata']['session']; @@ -22,34 +24,27 @@ function extractRoute( status?: documentType['status']; }, source: documentType['source'], -): documentType['route'] { +): Promise { let route: documentType['route'] = 'default'; - switch (source) { - case 'jurinet': - try { - route = extractRouteForJurinet({ ...routeInfos }); - } catch (e) { - logger.error({ operationName: 'extractRouteForJurinet', msg: `${e}` }); - route = 'exhaustive'; - } - break; - case 'jurica': - try { - route = extractRouteForJurica({ ...routeInfos }); - } catch (e) { - logger.error({ operationName: 'extractRouteForJurica', msg: `${e}` }); - route = 'exhaustive'; - } - break; - case 'juritj': - try { - route = extractRouteForJuritj({ ...routeInfos }); - } catch (e) { - logger.error({ operationName: 'extractRouteForJuritj', msg: `${e}` }); - route = 'exhaustive'; - } - break; + const extractRouteFunctions = { + [Sources.CC]: extractRouteForJurinet, + [Sources.CA]: extractRouteForJurica, + [Sources.TJ]: extractRouteForJuritj, + [Sources.TCOM]: extractRouteForJuritcom, + }; + + try { + if (source in extractRouteFunctions) { + route = await extractRouteFunctions[source as Sources]({ + ...routeInfos, + }); + } else { + throw new Error('Source non prise en charge'); + } + } catch (e) { + logger.error({ operationName: `extractRouteFor ${source}`, msg: `${e}` }); + route = 'default'; } if ( diff --git a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJurica.ts b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJurica.ts index 2655ed811..7e686ec7b 100644 --- a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJurica.ts +++ b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJurica.ts @@ -1,71 +1,78 @@ import { documentType } from '@label/core'; import { transformLetterCodeToDec } from '.'; +import { sderApi } from '../../../../sderApi'; import * as fs from 'fs'; export { extractRouteForJurica }; -function extractRouteForJurica({ +async function extractRouteForJurica({ NACCode, endCaseCode, }: { - session: documentType['decisionMetadata']['session']; - solution: documentType['decisionMetadata']['solution']; - parties: documentType['decisionMetadata']['parties']; - publicationCategory: documentType['publicationCategory']; - chamberName: documentType['decisionMetadata']['chamberName']; - civilMatterCode: documentType['decisionMetadata']['civilMatterCode']; - civilCaseCode: documentType['decisionMetadata']['civilCaseCode']; - criminalCaseCode: documentType['decisionMetadata']['criminalCaseCode']; NACCode: documentType['decisionMetadata']['NACCode']; endCaseCode: documentType['decisionMetadata']['endCaseCode']; -}): documentType['route'] { - const decEndCaseCode: number = transformLetterCodeToDec({ - code: endCaseCode, - }); - // Les codes de fin d'affaire 11A à 22X inclus + 33A à 33C priment sur les codes NAC - // Les codes NAC priment sur les codes de fin d'affaire à partir du code de fin d'affaire 33D - if ( - (decEndCaseCode >= 11.01 && decEndCaseCode <= 22.24) || - (decEndCaseCode >= 33.01 && decEndCaseCode <= 33.03) - ) { - const endCaseCodeCsv = fs.readFileSync('./static/endCaseRoutes.csv', { +}): Promise { + try { + const routeFromMetadata = await sderApi.getDecisionRoute({ + codeNac: NACCode, + codeDecision: endCaseCode, + source: 'jurica', + }); + if (routeFromMetadata) { + return routeFromMetadata as documentType['route']; + } else { + return 'default'; + } + } catch { + // Historical extract route for CA + const decEndCaseCode: number = transformLetterCodeToDec({ + code: endCaseCode, + }); + // Les codes de fin d'affaire 11A à 22X inclus + 33A à 33C priment sur les codes NAC + // Les codes NAC priment sur les codes de fin d'affaire à partir du code de fin d'affaire 33D + if ( + (decEndCaseCode >= 11.01 && decEndCaseCode <= 22.24) || + (decEndCaseCode >= 33.01 && decEndCaseCode <= 33.03) + ) { + const endCaseCodeCsv = fs.readFileSync('./static/endCaseRoutes.csv', { + encoding: 'utf8', + }) as string; + + const endCaseCodeData = {} as Array; + + endCaseCodeCsv.split('\n').forEach((line) => { + const l = line.split(','); + if (l[1]) { + endCaseCodeData[ + transformLetterCodeToDec({ code: l[0] }) + ] = l[1].toLowerCase() as documentType['route']; + } + }); + + if (endCaseCodeData[decEndCaseCode]) { + return endCaseCodeData[decEndCaseCode] as documentType['route']; + } + } + + const NACCodeCsv = fs.readFileSync('./static/NACCodeRoutes.csv', { encoding: 'utf8', }) as string; - const endCaseCodeData = {} as Array; + const NACCodeData = {} as Array; - endCaseCodeCsv.split('\n').forEach((line) => { + NACCodeCsv.split('\n').forEach((line) => { const l = line.split(','); if (l[1]) { - endCaseCodeData[ + NACCodeData[ transformLetterCodeToDec({ code: l[0] }) ] = l[1].toLowerCase() as documentType['route']; } }); - if (endCaseCodeData[decEndCaseCode]) { - return endCaseCodeData[decEndCaseCode] as documentType['route']; - } + return ( + (NACCodeData[ + transformLetterCodeToDec({ code: NACCode }) + ] as documentType['route']) ?? 'default' + ); } - - const NACCodeCsv = fs.readFileSync('./static/NACCodeRoutes.csv', { - encoding: 'utf8', - }) as string; - - const NACCodeData = {} as Array; - - NACCodeCsv.split('\n').forEach((line) => { - const l = line.split(','); - if (l[1]) { - NACCodeData[ - transformLetterCodeToDec({ code: l[0] }) - ] = l[1].toLowerCase() as documentType['route']; - } - }); - - return ( - (NACCodeData[ - transformLetterCodeToDec({ code: NACCode }) - ] as documentType['route']) ?? 'default' - ); } diff --git a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJuritcom.ts b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJuritcom.ts new file mode 100644 index 000000000..11433de3c --- /dev/null +++ b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJuritcom.ts @@ -0,0 +1,7 @@ +import { documentType } from '@label/core'; + +export { extractRouteForJuritcom }; + +function extractRouteForJuritcom(): documentType['route'] { + return 'default'; +} diff --git a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJuritj.ts b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJuritj.ts index 9c47abae4..a9a746070 100644 --- a/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJuritj.ts +++ b/packages/courDeCassation/src/connector/mapper/extractors/extractRoute/extractRouteForJuritj.ts @@ -1,18 +1,27 @@ import { documentType } from '@label/core'; +import { sderApi } from '../../../../sderApi'; export { extractRouteForJuritj }; -function extractRouteForJuritj({}: { - session: documentType['decisionMetadata']['session']; - solution: documentType['decisionMetadata']['solution']; - parties: documentType['decisionMetadata']['parties']; - publicationCategory: documentType['publicationCategory']; - chamberName: documentType['decisionMetadata']['chamberName']; - civilMatterCode: documentType['decisionMetadata']['civilMatterCode']; - civilCaseCode: documentType['decisionMetadata']['civilCaseCode']; - criminalCaseCode: documentType['decisionMetadata']['criminalCaseCode']; +async function extractRouteForJuritj({ + NACCode, + endCaseCode, +}: { NACCode: documentType['decisionMetadata']['NACCode']; endCaseCode: documentType['decisionMetadata']['endCaseCode']; -}): documentType['route'] { - return 'exhaustive'; +}): Promise { + try { + const routeFromMetadata = await sderApi.getDecisionRoute({ + codeNac: NACCode, + codeDecision: endCaseCode, + source: 'juritj', + }); + if (routeFromMetadata) { + return routeFromMetadata as documentType['route']; + } else { + return 'default'; + } + } catch { + return 'default'; + } } diff --git a/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts b/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts index 54608ec7a..d011d690f 100644 --- a/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts +++ b/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts @@ -88,7 +88,7 @@ async function mapCourtDecisionToDocument( importer, ); - const route = extractRoute( + const route = await extractRoute( { additionalTermsToAnnotate, solution, diff --git a/packages/courDeCassation/src/scripts/updateRoute.ts b/packages/courDeCassation/src/scripts/updateRoute.ts index f0918606a..a9cfa1d8a 100644 --- a/packages/courDeCassation/src/scripts/updateRoute.ts +++ b/packages/courDeCassation/src/scripts/updateRoute.ts @@ -43,7 +43,7 @@ async function updateRouteForFreeDocuments() { }); for (let index = 0; index < documentsToUpdate.length; index++) { - const newRoute = extractRoute( + const newRoute = await extractRoute( { additionalTermsToAnnotate: documentsToUpdate[index].decisionMetadata.additionalTermsToAnnotate, diff --git a/packages/courDeCassation/src/sderApi/sderApi.ts b/packages/courDeCassation/src/sderApi/sderApi.ts index 9b6152979..cdc45d7e8 100644 --- a/packages/courDeCassation/src/sderApi/sderApi.ts +++ b/packages/courDeCassation/src/sderApi/sderApi.ts @@ -121,4 +121,24 @@ const sderApi = { }, }); }, + + async getDecisionRoute({ + codeNac, + codeDecision, + source, + }: { + codeNac: string; + codeDecision: string; + source: string; + }) { + return ((await fetchApi({ + method: 'get', + path: 'decision-route', + body: { + codeNac, + codeDecision, + source, + }, + })) as unknown) as Promise; + }, };