feat: ajoute stat Tribunal Correctionnel 2

wip-related-pages
Sébastien Arod 2024-09-18 21:15:11 +02:00
parent defaac856f
commit 4dba306763
3 changed files with 83 additions and 37 deletions

View File

@ -16,6 +16,10 @@ export const typesEvenementsPenal = [
"Administrateur AD'HOC", "Administrateur AD'HOC",
"Appel du 1er jugement", "Appel du 1er jugement",
// placeholder
"Appel du 2eme jugement",
"Tribunal de police judiciaire", "Tribunal de police judiciaire",
"Classement pénal sans suite", "Classement pénal sans suite",

View File

@ -60,24 +60,32 @@ export const statsPenalesDesc = {
}, },
}, },
tribunalCorrectionnel: { tribunalCorrectionnel1: {
label: "Tribunal Correctionnel", label: "Tribunal Correctionnel 1er passage",
stats: { stats: {
nbFamillesConvoquees: {
label: "Nb familles convoquées mais pas encore passées",
},
nbFamillesPassees: { nbFamillesPassees: {
label: "Nb familles passées", label: "Nb familles passées au tribunal",
},
nbFamillesProgrammees: {
label: "Nb familles programmées",
},
nbFamillesRecidive: {
label: "Nb familles récidive",
}, },
nbFamilleAppelDuJugement: { 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",
}, },
}, },
}, },

View File

@ -6,6 +6,7 @@ import {
isProcureur, isProcureur,
isGendarmerie, isGendarmerie,
isProcedurePenale, isProcedurePenale,
EvenementFamille,
} from "../../../data/EvenementFamille"; } from "../../../data/EvenementFamille";
import { Famille, isExResistant, isResistant } from "../../../data/Famille"; import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import { average } from "../../../utils/math/average"; import { average } from "../../../utils/math/average";
@ -13,6 +14,12 @@ import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEve
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType"; import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { StatsPenales } from "./StatsPenales"; import { StatsPenales } from "./StatsPenales";
type FamilleAvecInfoTribunaux = Famille & {
evtTribunal1?: EvenementFamille
evtTribunal2?: EvenementFamille
}
export function computeStatsPenales(familles: Famille[]): StatsPenales { export function computeStatsPenales(familles: Famille[]): StatsPenales {
const famillesResistantesOuEx = familles.filter( const famillesResistantesOuEx = familles.filter(
(f) => isResistant(f) || isExResistant(f) (f) => isResistant(f) || isExResistant(f)
@ -25,6 +32,17 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
famillesResistantesOuEx, famillesResistantesOuEx,
isGendarmerie 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 = { const statsPenales: StatsPenales = {
nbFamillesMisesEnDemeure: famillesMisesEnDemeure.length, nbFamillesMisesEnDemeure: famillesMisesEnDemeure.length,
nbFamillesAvecGendarmerie: famillesAvecGendarmerie.length, nbFamillesAvecGendarmerie: famillesAvecGendarmerie.length,
@ -48,7 +66,8 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
"Acceptation avertissement pénal probatoire" "Acceptation avertissement pénal probatoire"
).length, ).length,
}, },
tribunalCorrectionnel: computeTribunalCorrectionnel(familles), tribunalCorrectionnel1: computeTribunalCorrectionnel1(famillesAvecInfoTribunaux),
tribunalCorrectionnel2: computeTribunalCorrectionnel2(famillesAvecInfoTribunaux),
nbFamillesTribunalDePolice: filterFamillesWithOneOfEvenementsOfType( nbFamillesTribunalDePolice: filterFamillesWithOneOfEvenementsOfType(
famillesResistantesOuEx, 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 ( function computeTribunalCorrectionnel1(
f.Evenements.filter((e) => e.Type === "Tribunal correctionnel").length > 1 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 { return {
nbFamillesPassees: famillesPassees.length, nbFamillesPassees: famillesPassees.length,
nbFamillesProgrammees: famillesProgrammees.length, nbFamillesConvoquees: famillesProgrammees.length,
nbFamillesRecidive: famillesRecidiveTribunal.length,
nbFamillesAdministrateurAdhoc: filterFamillesWithOneOfEvenementsOfType(
famillesResistantesOuEx,
"Administrateur AD'HOC"
).length,
nbFamilleAppelDuJugement: filterFamillesWithOneOfEvenementsOfType( nbFamilleAppelDuJugement: filterFamillesWithOneOfEvenementsOfType(
famillesResistantesOuEx, famillesResistantesOuEx,
"Appel du 1er jugement" "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 { function computeIntervalGendarmerieProcureur(familles: Famille[]): number {
const intervals = familles.flatMap((f) => { const intervals = familles.flatMap((f) => {
const evtGendarmerie = f.Evenements.find((e) => isGendarmerie(e)); const evtGendarmerie = f.Evenements.find((e) => isGendarmerie(e));
@ -197,3 +226,8 @@ function computeIntervalProcureurTribunalCorrectionnel(
}); });
return average(intervals); return average(intervals);
} }
function isTribunalCorrectionnel(e: EvenementFamille): boolean {
return e.Type === "Tribunal correctionnel"
}