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"