diff --git a/src/data/TypeEvenementsPenal.ts b/src/data/TypeEvenementsPenal.ts index 9fc11ad..f94af96 100644 --- a/src/data/TypeEvenementsPenal.ts +++ b/src/data/TypeEvenementsPenal.ts @@ -16,6 +16,10 @@ export const typesEvenementsPenal = [ "Administrateur AD'HOC", "Appel du 1er jugement", + // placeholder + "Appel du 2eme jugement", + + "Tribunal de police judiciaire", "Classement pénal sans suite", diff --git a/src/statistiques/v2/penales/StatsPenales.ts b/src/statistiques/v2/penales/StatsPenales.ts index 990656b..c6d6cf4 100644 --- a/src/statistiques/v2/penales/StatsPenales.ts +++ b/src/statistiques/v2/penales/StatsPenales.ts @@ -60,24 +60,32 @@ export const statsPenalesDesc = { }, }, - tribunalCorrectionnel: { - label: "Tribunal Correctionnel", + tribunalCorrectionnel1: { + label: "Tribunal Correctionnel 1er passage", stats: { + + nbFamillesConvoquees: { + label: "Nb familles convoquées mais pas encore passées", + }, nbFamillesPassees: { - label: "Nb familles passées", - }, - nbFamillesProgrammees: { - label: "Nb familles programmées", - }, - nbFamillesRecidive: { - label: "Nb familles récidive", + label: "Nb familles passées au tribunal", }, nbFamilleAppelDuJugement: { - label: "Nb familles appel du jugement", + label: "Nb familles ayant fait appel du jugement", }, - - nbFamillesAdministrateurAdhoc: { - label: "Nb familles avec Administrateur AD'HOC", + }, + }, + tribunalCorrectionnel2: { + label: "Tribunal Correctionnel 2eme passage", + stats: { + nbFamillesConvoquees: { + label: "Nb familles convoquées mais pas encore passées", + }, + nbFamillesPassees: { + label: "Nb familles passées au tribunal", + }, + nbFamilleAppelDuJugement: { + label: "Nb familles ayant fait appel du jugement", }, }, }, diff --git a/src/statistiques/v2/penales/computeStatsPenales.ts b/src/statistiques/v2/penales/computeStatsPenales.ts index 073c3b1..da628ef 100644 --- a/src/statistiques/v2/penales/computeStatsPenales.ts +++ b/src/statistiques/v2/penales/computeStatsPenales.ts @@ -6,6 +6,7 @@ import { isProcureur, isGendarmerie, isProcedurePenale, + EvenementFamille, } from "../../../data/EvenementFamille"; import { Famille, isExResistant, isResistant } from "../../../data/Famille"; import { average } from "../../../utils/math/average"; @@ -13,6 +14,12 @@ import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEve import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType"; import { StatsPenales } from "./StatsPenales"; + +type FamilleAvecInfoTribunaux = Famille & { + evtTribunal1?: EvenementFamille + evtTribunal2?: EvenementFamille +} + export function computeStatsPenales(familles: Famille[]): StatsPenales { const famillesResistantesOuEx = familles.filter( (f) => isResistant(f) || isExResistant(f) @@ -25,6 +32,17 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales { famillesResistantesOuEx, isGendarmerie ); + + const famillesAvecInfoTribunaux: FamilleAvecInfoTribunaux[] = famillesResistantesOuEx.map( + f => { + const evtTribunaux = f.Evenements.filter(isTribunalCorrectionnel); + return { + ...f, + evtTribunal1: evtTribunaux.length > 0 ? evtTribunaux[0] : undefined, + evtTribunal2: evtTribunaux.length > 1 ? evtTribunaux[1] : undefined + }; + } + ); const statsPenales: StatsPenales = { nbFamillesMisesEnDemeure: famillesMisesEnDemeure.length, nbFamillesAvecGendarmerie: famillesAvecGendarmerie.length, @@ -48,7 +66,8 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales { "Acceptation avertissement pénal probatoire" ).length, }, - tribunalCorrectionnel: computeTribunalCorrectionnel(familles), + tribunalCorrectionnel1: computeTribunalCorrectionnel1(famillesAvecInfoTribunaux), + tribunalCorrectionnel2: computeTribunalCorrectionnel2(famillesAvecInfoTribunaux), nbFamillesTribunalDePolice: filterFamillesWithOneOfEvenementsOfType( famillesResistantesOuEx, @@ -108,33 +127,22 @@ function computeCompositionPenales( }; } -function computeTribunalCorrectionnel( - famillesResistantesOuEx: Famille[] -): StatsPenales["tribunalCorrectionnel"] { - const now = new Date(); - const famillesPassees = filterFamillesWithOneOfEvenements( - famillesResistantesOuEx, - (e) => e.Type === "Tribunal correctionnel" && isEvenementBefore(e, now) - ); - const famillesProgrammees = filterFamillesWithOneOfEvenements( - famillesResistantesOuEx, - (e) => e.Type === "Tribunal correctionnel" && !isEvenementBefore(e, now) - ); - const famillesRecidiveTribunal = famillesResistantesOuEx.filter((f) => { - return ( - f.Evenements.filter((e) => e.Type === "Tribunal correctionnel").length > 1 - ); - }); + +function computeTribunalCorrectionnel1( + famillesResistantesOuEx: FamilleAvecInfoTribunaux[] +): StatsPenales["tribunalCorrectionnel1"] { + const now = new Date(); + const famillesPassees = famillesResistantesOuEx.filter(f => f.evtTribunal1 + && isEvenementBefore(f.evtTribunal1, now)); + + const famillesProgrammees = famillesResistantesOuEx.filter(f => f.evtTribunal1 + && !isEvenementBefore(f.evtTribunal1, now)); return { nbFamillesPassees: famillesPassees.length, - nbFamillesProgrammees: famillesProgrammees.length, - nbFamillesRecidive: famillesRecidiveTribunal.length, - nbFamillesAdministrateurAdhoc: filterFamillesWithOneOfEvenementsOfType( - famillesResistantesOuEx, - "Administrateur AD'HOC" - ).length, + nbFamillesConvoquees: famillesProgrammees.length, + nbFamilleAppelDuJugement: filterFamillesWithOneOfEvenementsOfType( famillesResistantesOuEx, "Appel du 1er jugement" @@ -142,6 +150,27 @@ function computeTribunalCorrectionnel( }; } +function computeTribunalCorrectionnel2( + famillesResistantesOuEx: FamilleAvecInfoTribunaux[] +): StatsPenales["tribunalCorrectionnel2"] { + const now = new Date(); + const famillesPassees = famillesResistantesOuEx.filter(f => f.evtTribunal2 + && isEvenementBefore(f.evtTribunal2, now)); + + const famillesProgrammees = famillesResistantesOuEx.filter(f => f.evtTribunal2 + && !isEvenementBefore(f.evtTribunal2, now)); + + return { + nbFamillesPassees: famillesPassees.length, + nbFamillesConvoquees: famillesProgrammees.length, + + nbFamilleAppelDuJugement: filterFamillesWithOneOfEvenementsOfType( + famillesResistantesOuEx, + "Appel du 2eme jugement" + ).length, + }; +} + function computeIntervalGendarmerieProcureur(familles: Famille[]): number { const intervals = familles.flatMap((f) => { const evtGendarmerie = f.Evenements.find((e) => isGendarmerie(e)); @@ -197,3 +226,8 @@ function computeIntervalProcureurTribunalCorrectionnel( }); return average(intervals); } + + +function isTribunalCorrectionnel(e: EvenementFamille): boolean { + return e.Type === "Tribunal correctionnel" +}