diff --git a/docs/documentStatuses.md b/docs/documentStatuses.md index 85e8b3d42..cf835f2aa 100644 --- a/docs/documentStatuses.md +++ b/docs/documentStatuses.md @@ -4,7 +4,7 @@ A `document` is supposed to follow a specific flow once it enters the label data - `loaded`: the document has only been imported in LABEL. No treatment has been done on it. - `nlpAnnotating`: the document is currently being annotated by the NLP annotator. -- `free`: the document is ready to be annotated by a working user. There are already several `treatments` related to that document (one by the `NLP`, one by the `postProcess`, maybe one with the `supplementaryAnnotations` if asked by the clerk) +- `free`: the document is ready to be annotated by a working user. There are already several `treatments` related to that document (one by the `NLP`, maybe one with the `supplementaryAnnotations` if decision is partially public) - `pending`: the document is proposed to a working user. An `assignation` and a corresponding empty `treatment` have been created. The document won't be proposed to another working user. - `saved`: the document is being annotated by a working user. - `toBeConfirmed`: the document needs to be proof-read a second time by an administrator diff --git a/package.json b/package.json index 12282275f..13ec90ca2 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,5 @@ "workspaces": [ "packages/generic/*", "packages/courDeCassation/" - ], - "dependencies": {} + ] } diff --git a/packages/courDeCassation/src/annotator/fetcher/api/nlpApi.ts b/packages/courDeCassation/src/annotator/fetcher/api/nlpApi.ts index dbc4b73c6..063b372b8 100644 --- a/packages/courDeCassation/src/annotator/fetcher/api/nlpApi.ts +++ b/packages/courDeCassation/src/annotator/fetcher/api/nlpApi.ts @@ -25,6 +25,7 @@ function buildNlpApi(nlpApiBaseUrl: string): nlpApiType { document.decisionMetadata.additionalTermsToAnnotate, document.decisionMetadata.computedAdditionalTerms, document.decisionMetadata.additionalTermsParsingFailed, + document.decisionMetadata.debatPublic, ); const nlpCategories = settingsModule.lib.getCategories(filteredSettings, { status: ['visible', 'alwaysVisible', 'annotable'], diff --git a/packages/courDeCassation/src/annotator/fetcher/api/nlpLocalApi.ts b/packages/courDeCassation/src/annotator/fetcher/api/nlpLocalApi.ts index 89aeaf47e..6977390a6 100644 --- a/packages/courDeCassation/src/annotator/fetcher/api/nlpLocalApi.ts +++ b/packages/courDeCassation/src/annotator/fetcher/api/nlpLocalApi.ts @@ -15,6 +15,7 @@ function buildNlpLocalApi(): nlpApiType { document.decisionMetadata.additionalTermsToAnnotate, document.decisionMetadata.computedAdditionalTerms, document.decisionMetadata.additionalTermsParsingFailed, + document.decisionMetadata.debatPublic, ); const annotations = JSON.parse( await fs.readFile( diff --git a/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts b/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts index 55acc406c..6c90f1989 100644 --- a/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts +++ b/packages/courDeCassation/src/connector/mapper/mapCourtDecisionToDocument.ts @@ -99,6 +99,90 @@ async function mapCourtDecisionToDocument( source, ); + let moyens = undefined; + if (sderCourtDecision.originalTextZoning?.zones?.moyens) { + if (Array.isArray(sderCourtDecision.originalTextZoning.zones.moyens)) { + moyens = sderCourtDecision.originalTextZoning.zones.moyens; + } else { + moyens = [sderCourtDecision.originalTextZoning.zones.moyens]; + } + } + + let expose_du_litige = undefined; + if (sderCourtDecision.originalTextZoning?.zones?.['expose du litige']) { + if ( + Array.isArray( + sderCourtDecision.originalTextZoning.zones['expose du litige'], + ) + ) { + expose_du_litige = + sderCourtDecision.originalTextZoning.zones['expose du litige']; + } else { + expose_du_litige = [ + sderCourtDecision.originalTextZoning.zones['expose du litige'], + ]; + } + } + + let motivations = undefined; + if (sderCourtDecision.originalTextZoning?.zones?.motivations) { + if (Array.isArray(sderCourtDecision.originalTextZoning.zones.motivations)) { + motivations = sderCourtDecision.originalTextZoning.zones.motivations; + } else { + motivations = [sderCourtDecision.originalTextZoning.zones.motivations]; + } + } + + const zoningZones = { + introduction: + sderCourtDecision.originalTextZoning?.zones?.introduction || undefined, + moyens: moyens, + 'expose du litige': expose_du_litige, + motivations: motivations, + dispositif: + sderCourtDecision.originalTextZoning?.zones?.dispositif || undefined, + 'moyens annexes': + sderCourtDecision.originalTextZoning?.zones?.['moyens annexes'] || + undefined, + }; + + const introduction_subzonage = { + n_arret: + sderCourtDecision.originalTextZoning?.introduction_subzonage?.n_arret || + undefined, + formation: + sderCourtDecision.originalTextZoning?.introduction_subzonage?.formation || + undefined, + publication: + sderCourtDecision.originalTextZoning?.introduction_subzonage + ?.publication || undefined, + juridiction: + sderCourtDecision.originalTextZoning?.introduction_subzonage + ?.juridiction || undefined, + chambre: + sderCourtDecision.originalTextZoning?.introduction_subzonage?.chambre || + undefined, + pourvoi: + sderCourtDecision.originalTextZoning?.introduction_subzonage?.pourvoi || + undefined, + composition: + sderCourtDecision.originalTextZoning?.introduction_subzonage + ?.composition || undefined, + }; + + let zoning = undefined; + if (sderCourtDecision.originalTextZoning) { + zoning = { + zones: zoningZones || undefined, + introduction_subzonage: introduction_subzonage || undefined, + visa: sderCourtDecision.originalTextZoning?.visa || undefined, + is_public: sderCourtDecision.originalTextZoning?.is_public || undefined, + is_public_text: + sderCourtDecision.originalTextZoning?.is_public_text || undefined, + arret_id: sderCourtDecision.originalTextZoning?.arret_id, + }; + } + return documentModule.lib.buildDocument({ creationDate: creationDate?.getTime(), decisionMetadata: { @@ -120,6 +204,7 @@ async function mapCourtDecisionToDocument( occultationBlock: sderCourtDecision.blocOccultation || undefined, session, solution, + debatPublic: sderCourtDecision.debatPublic ?? undefined, }, documentNumber: sderCourtDecision.sourceId, externalId: idModule.lib.convertToString(sderCourtDecision._id), @@ -131,6 +216,7 @@ async function mapCourtDecisionToDocument( source, title, text: sderCourtDecision.originalText, + zoning: zoning, }); } function getNumberPrefix( diff --git a/packages/courDeCassation/src/lib/parametersHandler/parametersHandler.ts b/packages/courDeCassation/src/lib/parametersHandler/parametersHandler.ts index cb9b20b76..74a90d613 100644 --- a/packages/courDeCassation/src/lib/parametersHandler/parametersHandler.ts +++ b/packages/courDeCassation/src/lib/parametersHandler/parametersHandler.ts @@ -20,8 +20,10 @@ async function getParameters() { }); const parsedSettings = settingsModule.lib.parseFromJson(settings); - const enhancedSettings = settingsModule.lib.additionalAnnotationCategoryHandler.addCategoryToSettings( - parsedSettings, + const enhancedSettings = settingsModule.lib.motivationCategoryHandler.addCategoryToSettings( + settingsModule.lib.additionalAnnotationCategoryHandler.addCategoryToSettings( + parsedSettings, + ), ); return { diff --git a/packages/generic/backend/package.json b/packages/generic/backend/package.json index 3d201e61f..8002ae5d7 100644 --- a/packages/generic/backend/package.json +++ b/packages/generic/backend/package.json @@ -10,7 +10,7 @@ "jsonwebtoken": "^8.5.1", "lodash": "^4.17.21", "mongodb": "^3.6.1", - "sder": "https://github.com/Cour-de-cassation/sder#8d2dc027782d040e67d1164cdacdb85800b396b2", + "sder": "https://github.com/Cour-de-cassation/sder#760b00baa45633387f4bc359fd220aff5147bd4f", "sder-core": "https://github.com/Cour-de-cassation/sder-core#f19400e5832d88b48d076b99bbea3e4cfd6803f4" }, "devDependencies": { diff --git a/packages/generic/backend/src/app/scripts/deployment/migrationTests/29_617030daf3651cbef0d7bbe2.spec.ts b/packages/generic/backend/src/app/scripts/deployment/migrationTests/29_617030daf3651cbef0d7bbe2.spec.ts index c2492c4f9..5d8cd0612 100644 --- a/packages/generic/backend/src/app/scripts/deployment/migrationTests/29_617030daf3651cbef0d7bbe2.spec.ts +++ b/packages/generic/backend/src/app/scripts/deployment/migrationTests/29_617030daf3651cbef0d7bbe2.spec.ts @@ -5,7 +5,7 @@ import { up, down } from '../migrations/29_617030daf3651cbef0d7bbe2'; /* eslint-disable @typescript-eslint/no-unsafe-assignment */ describe('add civil code matter in document model', () => { - const decisionMetadata = { + const decisionMetadata = documentModule.decisionMetadataGenerator.generate({ appealNumber: '', chamberName: 'Civile', civilMatterCode: '', @@ -22,7 +22,7 @@ describe('add civil code matter in document model', () => { solution: '', NACCode: '', endCaseCode: '', - } as any; + }); const documentsWithNewModel = [ documentModule.generator.generate({ decisionMetadata: { diff --git a/packages/generic/backend/src/app/scripts/deployment/migrationTests/31_61ae1328673817451d5bfd0e.spec.ts b/packages/generic/backend/src/app/scripts/deployment/migrationTests/31_61ae1328673817451d5bfd0e.spec.ts index 8270ec245..3d76ed177 100644 --- a/packages/generic/backend/src/app/scripts/deployment/migrationTests/31_61ae1328673817451d5bfd0e.spec.ts +++ b/packages/generic/backend/src/app/scripts/deployment/migrationTests/31_61ae1328673817451d5bfd0e.spec.ts @@ -5,7 +5,7 @@ import { up, down } from '../migrations/31_61ae1328673817451d5bfd0e'; /* eslint-disable @typescript-eslint/no-unsafe-assignment */ describe('add NACCode in document model', () => { - const decisionMetadata = { + const decisionMetadata = documentModule.decisionMetadataGenerator.generate({ appealNumber: '', chamberName: 'Civile', civilMatterCode: '', @@ -21,7 +21,7 @@ describe('add NACCode in document model', () => { session: '', solution: '', endCaseCode: '', - } as any; + }); const documentsWithNewModel = [ documentModule.generator.generate({ decisionMetadata: { diff --git a/packages/generic/backend/src/app/scripts/deployment/migrationTests/34_61c2f20f5f28c12d9b54c762.spec.ts b/packages/generic/backend/src/app/scripts/deployment/migrationTests/34_61c2f20f5f28c12d9b54c762.spec.ts index f789ad3d3..36b63dff2 100644 --- a/packages/generic/backend/src/app/scripts/deployment/migrationTests/34_61c2f20f5f28c12d9b54c762.spec.ts +++ b/packages/generic/backend/src/app/scripts/deployment/migrationTests/34_61c2f20f5f28c12d9b54c762.spec.ts @@ -5,7 +5,7 @@ import { up, down } from '../migrations/34_61c2f20f5f28c12d9b54c762'; /* eslint-disable @typescript-eslint/no-unsafe-assignment */ describe('add endCaseCode in document model', () => { - const decisionMetadata = { + const decisionMetadata = documentModule.decisionMetadataGenerator.generate({ appealNumber: '', chamberName: 'Civile', civilMatterCode: '', @@ -21,7 +21,7 @@ describe('add endCaseCode in document model', () => { session: '', solution: '', NACCode: '', - } as any; + }); const documentsWithNewModel = [ documentModule.generator.generate({ decisionMetadata: { diff --git a/packages/generic/backend/src/lib/annotator/buildAnnotator.ts b/packages/generic/backend/src/lib/annotator/buildAnnotator.ts index 4149e91c5..45b6fb407 100644 --- a/packages/generic/backend/src/lib/annotator/buildAnnotator.ts +++ b/packages/generic/backend/src/lib/annotator/buildAnnotator.ts @@ -7,6 +7,7 @@ import { idModule, settingsType, treatmentModule, + annotationModule, } from '@label/core'; import { buildAnnotationReportRepository } from '../../modules/annotationReport'; import { documentService } from '../../modules/document'; @@ -212,6 +213,39 @@ function buildAnnotator( msg: 'NLP treatment created in DB', }); + if (document.decisionMetadata.debatPublic === false) { + if ( + document.zoning != undefined && + document.zoning.zones?.motivations != undefined && + document.zoning.zones.motivations.length > 0 + ) { + logger.log({ + operationName: 'annotateDocument', + msg: 'Annotate motivation zone because decision debat are not public', + }); + + createMotivationOccultationTreatment( + documentId, + document.zoning.zones.motivations, + document.text, + document.documentNumber, + annotations, + ); + } else { + logger.error({ + operationName: 'annotateDocument', + msg: `Annotate zone for non public debat decision impossible because motication zone was not found for document ${formatDocumentInfos( + document, + )}`, + }); + throw new Error( + `Annotate zone for non public debat decision impossible because motication zone was not found for document ${formatDocumentInfos( + document, + )}`, + ); + } + } + //Todo : create report only if report is not null await createReport(report); logger.log({ @@ -311,6 +345,44 @@ function buildAnnotator( ); } + async function createMotivationOccultationTreatment( + documentId: documentType['_id'], + motivations: { start: number; end: number }[], + documentText: string, + documentNumber: number, + previousAnnotations: annotationType[], + ) { + const motivationAnnotations: annotationType[] = []; + motivations.forEach((motivation, index) => { + motivationAnnotations.push( + annotationModule.lib.buildAnnotation({ + start: motivation.start + 1, + text: documentText.substring( + motivation.start + 1, + motivation.end - 1, + ), + category: 'motivations', + certaintyScore: 1, + entityId: `motivations${index}_${documentNumber}`, + }), + ); + }); + + const annotationWithoutOverlapping = annotationModule.lib.removeOverlappingAnnotations( + [...previousAnnotations, ...motivationAnnotations], + ); + + await treatmentService.createTreatment( + { + documentId, + previousAnnotations: previousAnnotations, + nextAnnotations: annotationWithoutOverlapping, + source: 'supplementaryAnnotations', + }, + settings, + ); + } + async function createReport(report: annotationReportType) { const annotationReportRepository = buildAnnotationReportRepository(); await annotationReportRepository.insert(report); diff --git a/packages/generic/backend/src/lib/exporter/buildExporter.ts b/packages/generic/backend/src/lib/exporter/buildExporter.ts index 054e6fdb4..daa3f6943 100644 --- a/packages/generic/backend/src/lib/exporter/buildExporter.ts +++ b/packages/generic/backend/src/lib/exporter/buildExporter.ts @@ -199,6 +199,7 @@ function buildExporter( document.decisionMetadata.additionalTermsToAnnotate, document.decisionMetadata.computedAdditionalTerms, document.decisionMetadata.additionalTermsParsingFailed, + document.decisionMetadata.debatPublic, ); const anonymizer = buildAnonymizer(settingsForDocument, annotations, seed); diff --git a/packages/generic/backend/src/modules/document/service/documentService/fetchAllJurisdictions.spec.ts b/packages/generic/backend/src/modules/document/service/documentService/fetchAllJurisdictions.spec.ts index 93140e4da..87fc642bc 100644 --- a/packages/generic/backend/src/modules/document/service/documentService/fetchAllJurisdictions.spec.ts +++ b/packages/generic/backend/src/modules/document/service/documentService/fetchAllJurisdictions.spec.ts @@ -13,7 +13,7 @@ describe('fetchAllJurisdictions', () => { "cour d'appel de Bordeaux", ].map((jurisdiction) => documentModule.generator.generate({ - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ appealNumber: '', additionalTermsToAnnotate: '', boundDecisionDocumentNumbers: [], @@ -30,7 +30,7 @@ describe('fetchAllJurisdictions', () => { jurisdiction, NACCode: '', endCaseCode: '', - } as any, + }), }), ); await documentRepository.insertMany(documents); diff --git a/packages/generic/backend/src/modules/document/service/documentService/fetchAnonymizedDocumentText.ts b/packages/generic/backend/src/modules/document/service/documentService/fetchAnonymizedDocumentText.ts index e24d8d594..83bdfee8c 100644 --- a/packages/generic/backend/src/modules/document/service/documentService/fetchAnonymizedDocumentText.ts +++ b/packages/generic/backend/src/modules/document/service/documentService/fetchAnonymizedDocumentText.ts @@ -24,6 +24,7 @@ async function fetchAnonymizedDocumentText(documentId: documentType['_id']) { document.decisionMetadata.additionalTermsToAnnotate, document.decisionMetadata.computedAdditionalTerms, document.decisionMetadata.additionalTermsParsingFailed, + document.decisionMetadata.debatPublic, ); const seed = documentModule.lib.computeCaseNumber(document); const anonymizer = buildAnonymizer(settingsForDocument, annotations, seed); diff --git a/packages/generic/backend/src/modules/document/service/documentService/fetchPublishableDocuments.spec.ts b/packages/generic/backend/src/modules/document/service/documentService/fetchPublishableDocuments.spec.ts index bc5c63a25..eb865122a 100644 --- a/packages/generic/backend/src/modules/document/service/documentService/fetchPublishableDocuments.spec.ts +++ b/packages/generic/backend/src/modules/document/service/documentService/fetchPublishableDocuments.spec.ts @@ -12,7 +12,7 @@ describe('fetchPublishableDocuments', () => { { status: 'done' as const, publicationCategory: ['P'], - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ additionalTermsToAnnotate: '', appealNumber: '08-16.486', boundDecisionDocumentNumbers: [], @@ -29,7 +29,7 @@ describe('fetchPublishableDocuments', () => { solution: '', NACCode: '', endCaseCode: '', - } as any, + }), route: 'confirmation' as documentType['route'], }, { diff --git a/packages/generic/backend/src/modules/treatment/service/createTreatment.ts b/packages/generic/backend/src/modules/treatment/service/createTreatment.ts index 1bed0f488..5f6481965 100644 --- a/packages/generic/backend/src/modules/treatment/service/createTreatment.ts +++ b/packages/generic/backend/src/modules/treatment/service/createTreatment.ts @@ -52,6 +52,7 @@ async function createTreatment( document.decisionMetadata.additionalTermsToAnnotate, document.decisionMetadata.computedAdditionalTerms, document.decisionMetadata.additionalTermsParsingFailed, + document.decisionMetadata.debatPublic, ); const treatment = treatmentModule.lib.build( diff --git a/packages/generic/backend/src/modules/treatment/service/updateTreatment.ts b/packages/generic/backend/src/modules/treatment/service/updateTreatment.ts index de89ff379..2bd4780d8 100644 --- a/packages/generic/backend/src/modules/treatment/service/updateTreatment.ts +++ b/packages/generic/backend/src/modules/treatment/service/updateTreatment.ts @@ -44,6 +44,7 @@ async function updateTreatment({ document.decisionMetadata.additionalTermsToAnnotate, document.decisionMetadata.computedAdditionalTerms, document.decisionMetadata.additionalTermsParsingFailed, + document.decisionMetadata.debatPublic, ); const actionToPerform = `update treatment for documentId ${idModule.lib.convertToString( diff --git a/packages/generic/client/package.json b/packages/generic/client/package.json index 976aaa3e3..3de8c22ab 100644 --- a/packages/generic/client/package.json +++ b/packages/generic/client/package.json @@ -19,7 +19,7 @@ "axios": "^0.24.0", "dateformat": "^5.0.3", "http2": "^3.3.7", - "pelta-design-system": "https://github.com/Cour-de-cassation/pelta-design-system#f33fe593261a4873b165a34466ba75cc2ee67e1c", + "pelta-design-system": "https://github.com/Cour-de-cassation/pelta-design-system#e508f818ac443ad048e5cd1b74f42ec7f0bd046d", "react": "^17.0.2", "react-dom": "^17.0.2", "react-router-dom": "^5.2.0", diff --git a/packages/generic/client/src/pages/Admin/DocumentInspector/DocumentInspector.tsx b/packages/generic/client/src/pages/Admin/DocumentInspector/DocumentInspector.tsx index f2910cc7d..2c8b12671 100644 --- a/packages/generic/client/src/pages/Admin/DocumentInspector/DocumentInspector.tsx +++ b/packages/generic/client/src/pages/Admin/DocumentInspector/DocumentInspector.tsx @@ -50,6 +50,7 @@ function DocumentInspector(props: { settings: settingsType }) { document.decisionMetadata.additionalTermsToAnnotate, document.decisionMetadata.computedAdditionalTerms, document.decisionMetadata.additionalTermsParsingFailed, + document.decisionMetadata.debatPublic, ); const applyAutoSave = buildApplyAutoSave(document._id); diff --git a/packages/generic/client/src/pages/Home/DocumentAnnotator/AnnotationsPanel/AnnotationsPanel.tsx b/packages/generic/client/src/pages/Home/DocumentAnnotator/AnnotationsPanel/AnnotationsPanel.tsx index 9885ba5be..4591309c7 100644 --- a/packages/generic/client/src/pages/Home/DocumentAnnotator/AnnotationsPanel/AnnotationsPanel.tsx +++ b/packages/generic/client/src/pages/Home/DocumentAnnotator/AnnotationsPanel/AnnotationsPanel.tsx @@ -42,6 +42,12 @@ function AnnotationsPanel(props: {
+ {props.document.decisionMetadata.debatPublic === false && ( +
+ {renderPartiallyPublicWarning()} +
+ )} + {props.checklist && props.checklist.length > 0 && (
{renderChecklist(props.checklist)} @@ -164,6 +170,19 @@ function AnnotationsPanel(props: { ); } + function renderPartiallyPublicWarning() { + return ( +
+
+ +
+
+ {wordings.homePage.debatNotPublic} +
+
+ ); + } + function buildStyles(theme: customThemeType) { return { panel: { @@ -194,6 +213,23 @@ function AnnotationsPanel(props: { height: heights.annotatorPanel, paddingRight: theme.spacing * 2, }, + partiallyPublicContainer: { + padding: theme.spacing * 2, + marginBottom: theme.spacing, + display: 'flex', + flex: 1, + justifyContent: 'space-between', + borderRadius: theme.shape.borderRadius.l, + backgroundColor: getColor(settingsModule.lib.motivationCategoryHandler.getCategoryColor(displayMode)), + }, + partiallyPublicLeftContainer: { + marginRight: theme.spacing * 3, + }, + partiallyPublicRightContainer: { + display: 'flex', + flex: 1, + flexDirection: 'column', + }, additionalAnnotationTermsContainer: { padding: theme.spacing * 2, marginBottom: theme.spacing, diff --git a/packages/generic/client/src/pages/Home/DocumentSelector/DocumentSelector.tsx b/packages/generic/client/src/pages/Home/DocumentSelector/DocumentSelector.tsx index 3f0db5bfd..646f79b51 100644 --- a/packages/generic/client/src/pages/Home/DocumentSelector/DocumentSelector.tsx +++ b/packages/generic/client/src/pages/Home/DocumentSelector/DocumentSelector.tsx @@ -65,6 +65,7 @@ function DocumentSelector(props: { choice.document.decisionMetadata.additionalTermsToAnnotate, choice.document.decisionMetadata.computedAdditionalTerms, choice.document.decisionMetadata.additionalTermsParsingFailed, + choice.document.decisionMetadata.debatPublic, ); return ( diff --git a/packages/generic/client/src/pages/Home/DocumentSelector/computeSpecificDocumentInfoEntries.spec.ts b/packages/generic/client/src/pages/Home/DocumentSelector/computeSpecificDocumentInfoEntries.spec.ts index 3f85465a7..69332fa0f 100644 --- a/packages/generic/client/src/pages/Home/DocumentSelector/computeSpecificDocumentInfoEntries.spec.ts +++ b/packages/generic/client/src/pages/Home/DocumentSelector/computeSpecificDocumentInfoEntries.spec.ts @@ -7,7 +7,7 @@ describe('computeSpecificDocumentInfoEntries', () => { const decisionDate = new Date().getTime(); const document = documentModule.generator.generate({ documentNumber: 1234567, - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ appealNumber: '', chamberName: 'Civile', civilCaseCode: '', @@ -24,7 +24,7 @@ describe('computeSpecificDocumentInfoEntries', () => { parties: [], session: '', solution: '', - } as any, + }), }); const specificDocumentInfoEntries = computeSpecificDocumentInfoEntries(document); diff --git a/packages/generic/client/src/pages/Home/DocumentSwitcher.tsx b/packages/generic/client/src/pages/Home/DocumentSwitcher.tsx index a13851d8a..86b9fcd90 100644 --- a/packages/generic/client/src/pages/Home/DocumentSwitcher.tsx +++ b/packages/generic/client/src/pages/Home/DocumentSwitcher.tsx @@ -53,6 +53,7 @@ function DocumentSwitcher(props: { documentState.choice.document.decisionMetadata.additionalTermsToAnnotate, documentState.choice.document.decisionMetadata.computedAdditionalTerms, documentState.choice.document.decisionMetadata.additionalTermsParsingFailed, + documentState.choice.document.decisionMetadata.debatPublic, ); return ( { const userId = idModule.lib.buildId(); const decisionDate = new Date().getTime(); const document = documentModule.generator.generate({ - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ additionalTermsToAnnotate: '', appealNumber: 'MACHIN', boundDecisionDocumentNumbers: [], @@ -36,7 +36,7 @@ describe('statisticsCreator', () => { parties: [], session: 'FRH', solution: '', - } as any, + }), documentNumber, externalId: documentExternalId, publicationCategory: documentPublicationCategory, diff --git a/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.spec.ts b/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.spec.ts index e1d79bd8d..bb9b24fde 100644 --- a/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.spec.ts +++ b/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.spec.ts @@ -25,4 +25,16 @@ describe('removeOverlappingAnnotations', () => { expect(result).toEqual(annotations); }); + + it('should return annotations without overlaping ones and keeping longest text annotation', () => { + const annotations = [ + { text: 'TEST', start: 1 }, + { text: 'TRUC MACHIN', start: 10 }, + { text: 'MACHIN CHOSE BIDULE', start: 15 }, + ].map(annotationGenerator.generate); + + const result = removeOverlappingAnnotations(annotations); + + expect(result).toEqual([annotations[0], annotations[2]]); + }); }); diff --git a/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.ts b/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.ts index d45222a41..ff656278f 100644 --- a/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.ts +++ b/packages/generic/core/src/modules/annotation/lib/removeOverlappingAnnotations.ts @@ -8,9 +8,14 @@ function removeOverlappingAnnotations(annotations: annotationType[]): annotation const cleanedAnnotations = []; cleanedAnnotations.push(sortedAnnotations[0]); for (let i = 1, l = sortedAnnotations.length; i < l; i++) { - const annotationA = sortedAnnotations[i - 1]; + const annotationA = cleanedAnnotations[cleanedAnnotations.length - 1]; const annotationB = sortedAnnotations[i]; - if (!areOverlapping(annotationA, annotationB)) { + if (areOverlapping(annotationA, annotationB)) { + if (annotationA.text.length < annotationB.text.length) { + cleanedAnnotations.pop(); + cleanedAnnotations.push(annotationB); + } + } else { cleanedAnnotations.push(annotationB); } } diff --git a/packages/generic/core/src/modules/document/documentType.ts b/packages/generic/core/src/modules/document/documentType.ts index 7d6b77dfb..28ab8872d 100644 --- a/packages/generic/core/src/modules/document/documentType.ts +++ b/packages/generic/core/src/modules/document/documentType.ts @@ -5,6 +5,202 @@ export { documentModel, fetchedDocumentModel }; export type { documentType, fetchedDocumentType }; +const zoningZones = { + introduction: { + kind: 'or', + content: [ + { + kind: 'object', + content: { + start: { kind: 'primitive', content: 'number' }, + end: { kind: 'primitive', content: 'number' }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + moyens: { + kind: 'or', + content: [ + { + kind: 'array', + content: { + kind: 'object', + content: { + start: { kind: 'primitive', content: 'number' }, + end: { kind: 'primitive', content: 'number' }, + }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + 'expose du litige': { + kind: 'or', + content: [ + { + kind: 'array', + content: { + kind: 'object', + content: { + start: { kind: 'primitive', content: 'number' }, + end: { kind: 'primitive', content: 'number' }, + }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + motivations: { + kind: 'or', + content: [ + { + kind: 'array', + content: { + kind: 'object', + content: { + start: { kind: 'primitive', content: 'number' }, + end: { kind: 'primitive', content: 'number' }, + }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + dispositif: { + kind: 'or', + content: [ + { + kind: 'object', + content: { + start: { kind: 'primitive', content: 'number' }, + end: { kind: 'primitive', content: 'number' }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + 'moyens annexes': { + kind: 'or', + content: [ + { + kind: 'object', + content: { + start: { kind: 'primitive', content: 'number' }, + end: { kind: 'primitive', content: 'number' }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], + }, +} as const; + +const introduction_subzonage = { + n_arret: { + kind: 'or', + content: [ + { kind: 'primitive', content: 'string' }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + formation: { + kind: 'or', + content: [ + { kind: 'primitive', content: 'string' }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + publication: { + kind: 'or', + content: [ + { kind: 'array', content: { kind: 'primitive', content: 'string' } }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + juridiction: { + kind: 'or', + content: [ + { kind: 'primitive', content: 'string' }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + chambre: { + kind: 'or', + content: [ + { kind: 'primitive', content: 'string' }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + pourvoi: { + kind: 'or', + content: [ + { kind: 'array', content: { kind: 'primitive', content: 'string' } }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + composition: { + kind: 'or', + content: [ + { + kind: 'object', + content: { + start: { kind: 'primitive', content: 'number' }, + end: { kind: 'primitive', content: 'number' }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], + }, +} as const; + +const zoning = { + kind: 'or', + content: [ + { + kind: 'object', + content: { + zones: { + kind: 'or', + content: [ + { kind: 'object', content: zoningZones }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + introduction_subzonage: { + kind: 'or', + content: [ + { kind: 'object', content: introduction_subzonage }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + visa: { + kind: 'or', + content: [ + { kind: 'array', content: { kind: 'primitive', content: 'string' } }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + is_public: { + kind: 'or', + content: [ + { kind: 'primitive', content: 'number' }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + is_public_text: { + kind: 'or', + content: [ + { kind: 'array', content: { kind: 'primitive', content: 'string' } }, + { kind: 'primitive', content: 'undefined' }, + ], + }, + arret_id: { kind: 'primitive', content: 'number' }, + }, + }, + { kind: 'primitive', content: 'undefined' }, + ], +} as const; + const documentModelCommonFields = { creationDate: { kind: 'or', @@ -64,6 +260,13 @@ const documentModelCommonFields = { parties: { kind: 'array', content: { kind: 'primitive', content: 'string' } }, session: { kind: 'primitive', content: 'string' }, solution: { kind: 'primitive', content: 'string' }, + debatPublic: { + kind: 'or', + content: [ + { kind: 'primitive', content: 'boolean' }, + { kind: 'primitive', content: 'undefined' }, + ], + }, }, }, documentNumber: { kind: 'primitive', content: 'number' }, @@ -109,6 +312,7 @@ const documentModelCommonFields = { }, title: { kind: 'primitive', content: 'string' }, text: { kind: 'primitive', content: 'string' }, + zoning: zoning, } as const; const fetchedDocumentModel = buildModel({ diff --git a/packages/generic/core/src/modules/document/generator/documentGenerator.ts b/packages/generic/core/src/modules/document/generator/documentGenerator.ts index 697880127..8ad3d65c6 100644 --- a/packages/generic/core/src/modules/document/generator/documentGenerator.ts +++ b/packages/generic/core/src/modules/document/generator/documentGenerator.ts @@ -23,6 +23,7 @@ const decisionMetadataGenerator: generatorDecisionMetadataType ({ additionalTermsToAnnotate: additionalTermsToAnnotate ?? '', computedAdditionalTerms: computedAdditionalTerms ?? undefined, @@ -42,6 +43,7 @@ const decisionMetadataGenerator: generatorDecisionMetadataType = { title, text, updateDate, + zoning, } = {}) => ({ creationDate: creationDate ? creationDate : new Date().getTime(), decisionMetadata: decisionMetadata ? decisionMetadata : decisionMetadataGenerator.generate(), @@ -80,5 +83,6 @@ const documentGenerator: generatorType = { title: title ?? `TITLE_${Math.random()}`, text: text ?? `TEXT_${Math.random()}`, updateDate: updateDate ?? new Date().getTime(), + zoning: zoning ?? undefined, }), }; diff --git a/packages/generic/core/src/modules/document/lib/computeCaseNumber.spec.ts b/packages/generic/core/src/modules/document/lib/computeCaseNumber.spec.ts index 2418017f2..ff3b51336 100644 --- a/packages/generic/core/src/modules/document/lib/computeCaseNumber.spec.ts +++ b/packages/generic/core/src/modules/document/lib/computeCaseNumber.spec.ts @@ -1,3 +1,4 @@ +import { documentModule } from '..'; import { documentGenerator } from '../generator'; import { computeCaseNumber } from './computeCaseNumber'; @@ -9,7 +10,7 @@ describe('computeCaseNumber', () => { const decisionDate = new Date().getTime(); it('should return the first boundDocumentNumber', () => { const document = documentGenerator.generate({ - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ additionalTermsToAnnotate: '', appealNumber: '', boundDecisionDocumentNumbers: [boundDocumentNumber, otherBoundDocumentNumber], @@ -26,7 +27,7 @@ describe('computeCaseNumber', () => { categoriesToOmit: [], parties: [], occultationBlock: undefined, - } as any, + }), documentNumber, }); @@ -36,7 +37,7 @@ describe('computeCaseNumber', () => { }); it('should return the documentNumber if no bound document number found', () => { const document = documentGenerator.generate({ - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ additionalTermsToAnnotate: '', appealNumber: '', boundDecisionDocumentNumbers: [], @@ -53,7 +54,7 @@ describe('computeCaseNumber', () => { categoriesToOmit: [], parties: [], occultationBlock: undefined, - } as any, + }), documentNumber, }); diff --git a/packages/generic/core/src/modules/ressourceFilter/lib/filterTreatedDocuments.spec.ts b/packages/generic/core/src/modules/ressourceFilter/lib/filterTreatedDocuments.spec.ts index ee991225e..2be24bbc8 100644 --- a/packages/generic/core/src/modules/ressourceFilter/lib/filterTreatedDocuments.spec.ts +++ b/packages/generic/core/src/modules/ressourceFilter/lib/filterTreatedDocuments.spec.ts @@ -145,7 +145,7 @@ describe('filterTreatedDocuments', () => { const decisionDate = new Date().getTime(); const documents = [{ jurisdiction: 'JURISDICTION1' }, { jurisdiction: 'JURISDICTION2' }].map(({ jurisdiction }) => documentModule.generator.generate({ - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ jurisdiction, solution: '', session: '', @@ -161,7 +161,7 @@ describe('filterTreatedDocuments', () => { endCaseCode: '', parties: [], appealNumber: '', - } as any, + }), }), ); const ressourceFilter = ressourceFilterGenerator.generate({ diff --git a/packages/generic/core/src/modules/settings/index.ts b/packages/generic/core/src/modules/settings/index.ts index 4aaa43b41..637a12958 100644 --- a/packages/generic/core/src/modules/settings/index.ts +++ b/packages/generic/core/src/modules/settings/index.ts @@ -8,6 +8,7 @@ import { getAnnotationCategoryStatus, getAnnotationCategoryText, getCategories, + motivationCategoryHandler, } from './lib'; import { colorType, @@ -35,5 +36,6 @@ const settingsModule = { getAnnotationCategoryStatus, getAnnotationCategoryText, getCategories, + motivationCategoryHandler, }, }; diff --git a/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.spec.ts b/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.spec.ts index 5fed75298..5b6680ad1 100644 --- a/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.spec.ts +++ b/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.spec.ts @@ -1,20 +1,24 @@ import { additionalAnnotationCategoryHandler } from './additionalAnnotationCategoryHandler'; import { buildSettings } from './buildSettings'; import { computeFilteredSettings } from './computeFilteredSettings'; +import { motivationCategoryHandler } from './motivationCategoryHandler'; describe('computeFilteredSettings', () => { const additionalAnnotationCategory = additionalAnnotationCategoryHandler.getCategoryName(); + const motivationCategory = motivationCategoryHandler.getCategoryName(); const settings = buildSettings({ prenom: { order: 1, text: 'Prénom', status: 'hidden' }, professionnelMagistratGreffier: { order: 2, text: 'Magistrat et membre du greffe', status: 'visible' }, professionnelAvocat: { order: 3, text: 'Avocat', status: 'alwaysVisible' }, [additionalAnnotationCategory]: { order: 4, text: 'Occultation supplémentaire', status: 'hidden' }, + [motivationCategory]: { order: 5, text: 'Motivations de la décision', status: 'hidden' }, }); it('should compute filtered settings for an omitted hidden category', () => { const categoriesToOmit = ['prenom']; const additionalTermsToAnnotate = ''; const computedAdditionalTerms = undefined; const additionalTermsParsingFailed = undefined; + const debatPublic = undefined; const filteredSettings = computeFilteredSettings( settings, @@ -22,6 +26,7 @@ describe('computeFilteredSettings', () => { additionalTermsToAnnotate, computedAdditionalTerms, additionalTermsParsingFailed, + debatPublic, ); expect(filteredSettings['prenom'].status).toBe('hidden'); expect(filteredSettings['professionnelMagistratGreffier'].status).toBe('annotable'); @@ -34,6 +39,7 @@ describe('computeFilteredSettings', () => { const additionalTermsToAnnotate = ''; const computedAdditionalTerms = undefined; const additionalTermsParsingFailed = undefined; + const debatPublic = undefined; const filteredSettings = computeFilteredSettings( settings, @@ -41,6 +47,7 @@ describe('computeFilteredSettings', () => { additionalTermsToAnnotate, computedAdditionalTerms, additionalTermsParsingFailed, + debatPublic, ); expect(filteredSettings['prenom'].status).toBe('annotable'); @@ -54,6 +61,7 @@ describe('computeFilteredSettings', () => { const additionalTermsToAnnotate = ''; const computedAdditionalTerms = undefined; const additionalTermsParsingFailed = undefined; + const debatPublic = undefined; const filteredSettings = computeFilteredSettings( settings, @@ -61,6 +69,7 @@ describe('computeFilteredSettings', () => { additionalTermsToAnnotate, computedAdditionalTerms, additionalTermsParsingFailed, + debatPublic, ); expect(filteredSettings['prenom'].status).toBe('annotable'); @@ -74,6 +83,7 @@ describe('computeFilteredSettings', () => { const additionalTermsToAnnotate = 'thing'; const computedAdditionalTerms = undefined; const additionalTermsParsingFailed = undefined; + const debatPublic = undefined; const filteredSettings = computeFilteredSettings( settings, @@ -81,6 +91,7 @@ describe('computeFilteredSettings', () => { additionalTermsToAnnotate, computedAdditionalTerms, additionalTermsParsingFailed, + debatPublic, ); expect(filteredSettings['prenom'].status).toBe('hidden'); @@ -94,6 +105,7 @@ describe('computeFilteredSettings', () => { const additionalTermsToAnnotate = 'thing'; const computedAdditionalTerms = undefined; const additionalTermsParsingFailed = true; + const debatPublic = undefined; const filteredSettings = computeFilteredSettings( settings, @@ -101,6 +113,7 @@ describe('computeFilteredSettings', () => { additionalTermsToAnnotate, computedAdditionalTerms, additionalTermsParsingFailed, + debatPublic, ); expect(filteredSettings['prenom'].status).toBe('hidden'); @@ -114,6 +127,7 @@ describe('computeFilteredSettings', () => { const additionalTermsToAnnotate = 'thing'; const computedAdditionalTerms = { additionalTermsToAnnotate: [], additionalTermsToUnAnnotate: ['toUnanotate'] }; const additionalTermsParsingFailed = false; + const debatPublic = undefined; const filteredSettings = computeFilteredSettings( settings, @@ -121,6 +135,7 @@ describe('computeFilteredSettings', () => { additionalTermsToAnnotate, computedAdditionalTerms, additionalTermsParsingFailed, + debatPublic, ); expect(filteredSettings['prenom'].status).toBe('hidden'); @@ -137,6 +152,7 @@ describe('computeFilteredSettings', () => { additionalTermsToUnAnnotate: ['toUnanotate'], }; const additionalTermsParsingFailed = false; + const debatPublic = undefined; const filteredSettings = computeFilteredSettings( settings, @@ -144,6 +160,7 @@ describe('computeFilteredSettings', () => { additionalTermsToAnnotate, computedAdditionalTerms, additionalTermsParsingFailed, + debatPublic, ); expect(filteredSettings['prenom'].status).toBe('hidden'); @@ -151,4 +168,48 @@ describe('computeFilteredSettings', () => { expect(filteredSettings['professionnelAvocat'].status).toBe('alwaysVisible'); expect(filteredSettings[additionalAnnotationCategory].status).toBe('annotable'); }); + + it('should compute filtered settings for motivation when decision debat is not public', () => { + const categoriesToOmit = ['prenom', 'professionnelAvocat', 'professionnelMagistratGreffier']; + const additionalTermsToAnnotate = 'thing'; + const computedAdditionalTerms = undefined; + const additionalTermsParsingFailed = false; + const debatPublic = false; + + const filteredSettings = computeFilteredSettings( + settings, + categoriesToOmit, + additionalTermsToAnnotate, + computedAdditionalTerms, + additionalTermsParsingFailed, + debatPublic, + ); + + expect(filteredSettings['prenom'].status).toBe('hidden'); + expect(filteredSettings['professionnelMagistratGreffier'].status).toBe('visible'); + expect(filteredSettings['professionnelAvocat'].status).toBe('alwaysVisible'); + expect(filteredSettings['motivations'].status).toBe('annotable'); + }); + + it('should compute filtered settings for motivation when decision debat is public', () => { + const categoriesToOmit = ['prenom', 'professionnelAvocat', 'professionnelMagistratGreffier']; + const additionalTermsToAnnotate = 'thing'; + const computedAdditionalTerms = undefined; + const additionalTermsParsingFailed = false; + const debatPublic = true; + + const filteredSettings = computeFilteredSettings( + settings, + categoriesToOmit, + additionalTermsToAnnotate, + computedAdditionalTerms, + additionalTermsParsingFailed, + debatPublic, + ); + + expect(filteredSettings['prenom'].status).toBe('hidden'); + expect(filteredSettings['professionnelMagistratGreffier'].status).toBe('visible'); + expect(filteredSettings['professionnelAvocat'].status).toBe('alwaysVisible'); + expect(filteredSettings['motivations'].status).toBe('hidden'); + }); }); diff --git a/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.ts b/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.ts index ba952909c..e810bce7f 100644 --- a/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.ts +++ b/packages/generic/core/src/modules/settings/lib/computeFilteredSettings.ts @@ -1,6 +1,7 @@ import { documentType } from '../../document'; import { settingsType } from '../settingsType'; import { additionalAnnotationCategoryHandler } from './additionalAnnotationCategoryHandler'; +import { motivationCategoryHandler } from './motivationCategoryHandler'; export { computeFilteredSettings }; @@ -10,6 +11,7 @@ function computeFilteredSettings( additionalTermsToAnnotate: documentType['decisionMetadata']['additionalTermsToAnnotate'], computedAdditionalTerms: documentType['decisionMetadata']['computedAdditionalTerms'], additionalTermsParsingFailed: documentType['decisionMetadata']['additionalTermsParsingFailed'], + debatPublic: documentType['decisionMetadata']['debatPublic'], ) { const settingsForDocument = Object.entries(settings).reduce((accumulator, [category, categorySetting]) => { if (categorySetting.status === 'alwaysVisible') { @@ -28,6 +30,15 @@ function computeFilteredSettings( }; } } + } else if (category === motivationCategoryHandler.getCategoryName()) { + if (debatPublic === false) { + return { + ...accumulator, + [category]: { ...categorySetting, status: 'annotable' as const }, + }; + } else { + return { ...accumulator, [category]: categorySetting }; + } } else if (!categoriesToOmit.includes(category)) { return { ...accumulator, diff --git a/packages/generic/core/src/modules/settings/lib/index.ts b/packages/generic/core/src/modules/settings/lib/index.ts index fafb90822..86ef117ed 100644 --- a/packages/generic/core/src/modules/settings/lib/index.ts +++ b/packages/generic/core/src/modules/settings/lib/index.ts @@ -7,6 +7,7 @@ import { getAnnotationCategoryIconName } from './getAnnotationCategoryIconName'; import { getAnnotationCategoryStatus } from './getAnnotationCategoryStatus'; import { getAnnotationCategoryText } from './getAnnotationCategoryText'; import { getCategories } from './getCategories'; +import { motivationCategoryHandler } from './motivationCategoryHandler'; export { additionalAnnotationCategoryHandler, @@ -18,4 +19,5 @@ export { getAnnotationCategoryStatus, getAnnotationCategoryText, getCategories, + motivationCategoryHandler, }; diff --git a/packages/generic/core/src/modules/settings/lib/motivationCategoryHandler.ts b/packages/generic/core/src/modules/settings/lib/motivationCategoryHandler.ts new file mode 100644 index 000000000..524f4d175 --- /dev/null +++ b/packages/generic/core/src/modules/settings/lib/motivationCategoryHandler.ts @@ -0,0 +1,45 @@ +import { max } from 'lodash'; +import { colorType, displayModeType, settingsType } from '../settingsType'; + +export { motivationCategoryHandler }; +const motivationCategoryHandler = buildMotivationCategoryHandler(); + +function buildMotivationCategoryHandler() { + const MOTIVATION_CATEGORY_NAME = 'motivations'; + const MOTIVATION_CATEGORY_ICON_NAME = 'eyeoff' as const; + const MOTIVATION_CATEGORY_COLOR = { + lightMode: ['yellow', '300'] as colorType, + darkMode: ['yellow', '800'] as colorType, + }; + + return { getCategoryName, getCategoryColor, getCategoryIconName, addCategoryToSettings }; + + function getCategoryName() { + return MOTIVATION_CATEGORY_NAME; + } + + function getCategoryColor(displayMode: displayModeType) { + return MOTIVATION_CATEGORY_COLOR[displayMode]; + } + + function getCategoryIconName() { + return MOTIVATION_CATEGORY_ICON_NAME; + } + + function addCategoryToSettings(settings: settingsType): settingsType { + const order = (max(Object.values(settings).map((setting) => setting.order)) || 0) + 1; + return { + ...settings, + [MOTIVATION_CATEGORY_NAME]: { + autoLinkSensitivity: [{ kind: 'caseInsensitive' }], + anonymization: '[DÉBATS NON PUBLICS – Motivation de la décision occultée]', + color: MOTIVATION_CATEGORY_COLOR, + iconName: MOTIVATION_CATEGORY_ICON_NAME, + order: order, + status: 'hidden', + text: 'Motifs de la décision', + canBeAnnotatedBy: 'human', + }, + }; + } +} diff --git a/packages/generic/core/src/modules/settings/settingsType.ts b/packages/generic/core/src/modules/settings/settingsType.ts index 5835cd9e2..dd3e77eec 100644 --- a/packages/generic/core/src/modules/settings/settingsType.ts +++ b/packages/generic/core/src/modules/settings/settingsType.ts @@ -52,6 +52,7 @@ const categoryIconNames = [ 'store', 'web', 'work', + 'eyeoff', ] as const; type categoryIconNameType = typeof categoryIconNames[number]; diff --git a/packages/generic/core/src/modules/statistic/lib/buildStatistic.spec.ts b/packages/generic/core/src/modules/statistic/lib/buildStatistic.spec.ts index 5905b4116..cc4140495 100644 --- a/packages/generic/core/src/modules/statistic/lib/buildStatistic.spec.ts +++ b/packages/generic/core/src/modules/statistic/lib/buildStatistic.spec.ts @@ -19,7 +19,7 @@ describe('buildStatistic', () => { const userId = idModule.lib.buildId(); const decisionDate = new Date().getTime(); const document = documentModule.generator.generate({ - decisionMetadata: { + decisionMetadata: documentModule.decisionMetadataGenerator.generate({ additionalTermsToAnnotate: '', appealNumber: 'TRUC', boundDecisionDocumentNumbers: [], @@ -36,7 +36,7 @@ describe('buildStatistic', () => { parties: [], session: 'FRH', solution: '', - } as any, + }), documentNumber, externalId: documentExternalId, publicationCategory: documentPublicationCategory, diff --git a/yarn.lock b/yarn.lock index ba3fa584d..110e8d4d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12815,9 +12815,9 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -"pelta-design-system@https://github.com/Cour-de-cassation/pelta-design-system#f33fe593261a4873b165a34466ba75cc2ee67e1c": +"pelta-design-system@https://github.com/Cour-de-cassation/pelta-design-system#e508f818ac443ad048e5cd1b74f42ec7f0bd046d": version "0.0.1" - resolved "https://github.com/Cour-de-cassation/pelta-design-system#f33fe593261a4873b165a34466ba75cc2ee67e1c" + resolved "https://github.com/Cour-de-cassation/pelta-design-system#e508f818ac443ad048e5cd1b74f42ec7f0bd046d" dependencies: "@material-ui/core" "^4.12.3" "@material-ui/icons" "^4.11.2" @@ -14905,9 +14905,9 @@ schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6 jsonwebtoken "^8.5.1" lodash "^4.17.21" -"sder@https://github.com/Cour-de-cassation/sder#8d2dc027782d040e67d1164cdacdb85800b396b2": +"sder@https://github.com/Cour-de-cassation/sder#760b00baa45633387f4bc359fd220aff5147bd4f": version "1.0.0" - resolved "https://github.com/Cour-de-cassation/sder#8d2dc027782d040e67d1164cdacdb85800b396b2" + resolved "https://github.com/Cour-de-cassation/sder#760b00baa45633387f4bc359fd220aff5147bd4f" dependencies: bcryptjs "^2.4.3" body-parser "^1.19.0"