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",
"Appel du 1er jugement",
// placeholder
"Appel du 2eme jugement",
"Tribunal de police judiciaire",
"Classement pénal sans suite",

View File

@ -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",
},
},
},

View File

@ -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"
}