mirror of
https://framagit.org/enfance-libre/statistiques
synced 2025-12-07 04:13:48 +00:00
fix: ajout support de la relaxe dans les stats + support 3eme tribunal
This commit is contained in:
parent
3d3c71c716
commit
52da4d3fbf
4 changed files with 102 additions and 67 deletions
|
|
@ -12,5 +12,6 @@ export const optionsStatutPenal = [
|
|||
"Enquête en cours",
|
||||
"Poursuivi à tort",
|
||||
"Tribunal de police",
|
||||
"Relaxe TC",
|
||||
] as const;
|
||||
export type StatutPenal = (typeof optionsStatutPenal)[number];
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ export const typesEvenementsPenal = [
|
|||
"Appel du 2ème jugement", // placeholder
|
||||
"Tribunal de police judiciaire",
|
||||
"Administrateur AD'HOC",
|
||||
"Relaxe Tribunal correctionnel",
|
||||
] as const;
|
||||
|
||||
export function isEvtTypeProcedurePenale(evtType: TypeEvenement): boolean {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,20 @@
|
|||
import { StatsType } from "../desc/StatsDesc";
|
||||
|
||||
export const statsTribunalDesc = {
|
||||
nbFamillesConvoquees: {
|
||||
label: "Nb familles convoquées mais pas encore passées",
|
||||
},
|
||||
nbFamillesPassees: {
|
||||
label: "Nb familles passées au tribunal",
|
||||
},
|
||||
nbFamillesAppelDuJugement: {
|
||||
label: "Nb familles ayant fait appel du jugement",
|
||||
},
|
||||
nbFamillesRelaxees: {
|
||||
label: "Nb familles relaxées",
|
||||
},
|
||||
} as const;
|
||||
|
||||
export const statsPenalesDesc = {
|
||||
label: "Stats Pénales",
|
||||
stats: {
|
||||
|
|
@ -70,31 +85,15 @@ export const statsPenalesDesc = {
|
|||
|
||||
tribunalCorrectionnel1: {
|
||||
label: "Tribunal Correctionnel 1er 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",
|
||||
},
|
||||
},
|
||||
stats: statsTribunalDesc,
|
||||
},
|
||||
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",
|
||||
},
|
||||
},
|
||||
stats: statsTribunalDesc,
|
||||
},
|
||||
tribunalCorrectionnel3: {
|
||||
label: "Tribunal Correctionnel 3eme passage",
|
||||
stats: statsTribunalDesc,
|
||||
},
|
||||
|
||||
nbFamilleAvecStageParentalité: {
|
||||
|
|
|
|||
|
|
@ -15,10 +15,17 @@ import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEve
|
|||
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
|
||||
import { StatsPenales } from "./StatsPenales";
|
||||
import { nbFamillesAvecPagesLiees } from "./nbFamillesAvecPagesLiees";
|
||||
import { info } from "console";
|
||||
|
||||
type FamilleAvecInfoTribunaux = Famille & {
|
||||
evtTribunal1?: EvenementFamille;
|
||||
evtTribunal2?: EvenementFamille;
|
||||
infoTribunaux: InfoTribunalCorrectionnel[];
|
||||
};
|
||||
|
||||
type InfoTribunalCorrectionnel = {
|
||||
evtTribunal: EvenementFamille;
|
||||
evtRelaxe?: EvenementFamille;
|
||||
evtAdminAdhoc?: EvenementFamille;
|
||||
evtAppel?: EvenementFamille;
|
||||
};
|
||||
|
||||
export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
||||
|
|
@ -51,11 +58,10 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
|||
|
||||
const famillesAvecInfoTribunaux: FamilleAvecInfoTribunaux[] =
|
||||
famillesResistantesOuEx.map((f) => {
|
||||
const evtTribunaux = f.EvenementsEL.filter(isTribunalCorrectionnel);
|
||||
const infoTribunaux = buildInfoTribunaux(f);
|
||||
return {
|
||||
...f,
|
||||
evtTribunal1: evtTribunaux.length > 0 ? evtTribunaux[0] : undefined,
|
||||
evtTribunal2: evtTribunaux.length > 1 ? evtTribunaux[1] : undefined,
|
||||
infoTribunaux: infoTribunaux,
|
||||
};
|
||||
});
|
||||
|
||||
|
|
@ -96,11 +102,17 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
|||
)
|
||||
),
|
||||
},
|
||||
tribunalCorrectionnel1: computeTribunalCorrectionnel1(
|
||||
famillesAvecInfoTribunaux
|
||||
tribunalCorrectionnel1: computeTribunalCorrectionnel(
|
||||
famillesAvecInfoTribunaux,
|
||||
0
|
||||
),
|
||||
tribunalCorrectionnel2: computeTribunalCorrectionnel2(
|
||||
famillesAvecInfoTribunaux
|
||||
tribunalCorrectionnel2: computeTribunalCorrectionnel(
|
||||
famillesAvecInfoTribunaux,
|
||||
1
|
||||
),
|
||||
tribunalCorrectionnel3: computeTribunalCorrectionnel(
|
||||
famillesAvecInfoTribunaux,
|
||||
2
|
||||
),
|
||||
|
||||
nbFamilleAvecRequisitionJudiciaire: nbFamillesAvecPagesLiees(
|
||||
|
|
@ -176,51 +188,41 @@ function computeCompositionPenales(
|
|||
};
|
||||
}
|
||||
|
||||
function computeTribunalCorrectionnel1(
|
||||
famillesResistantesOuEx: FamilleAvecInfoTribunaux[]
|
||||
function computeTribunalCorrectionnel(
|
||||
famillesResistantesOuEx: FamilleAvecInfoTribunaux[],
|
||||
indexTribunal: number
|
||||
): StatsPenales["tribunalCorrectionnel1"] {
|
||||
const now = new Date();
|
||||
const famillesPassees = famillesResistantesOuEx.filter(
|
||||
(f) => f.evtTribunal1 && isEvenementBefore(f.evtTribunal1, now)
|
||||
(f) =>
|
||||
f.infoTribunaux.length > indexTribunal &&
|
||||
isEvenementBefore(f.infoTribunaux[indexTribunal].evtTribunal, now)
|
||||
);
|
||||
|
||||
const famillesProgrammees = famillesResistantesOuEx.filter(
|
||||
(f) => f.evtTribunal1 && !isEvenementBefore(f.evtTribunal1, now)
|
||||
const famillesConvoquees = famillesResistantesOuEx.filter(
|
||||
(f) =>
|
||||
f.infoTribunaux.length > indexTribunal &&
|
||||
!isEvenementBefore(f.infoTribunaux[indexTribunal].evtTribunal, now)
|
||||
);
|
||||
|
||||
const famillesRelaxees = famillesPassees.filter(
|
||||
(f) =>
|
||||
f.infoTribunaux.length > indexTribunal &&
|
||||
f.infoTribunaux[indexTribunal].evtRelaxe
|
||||
);
|
||||
|
||||
const famillesAppelDuJugement = famillesPassees.filter(
|
||||
(f) =>
|
||||
f.infoTribunaux.length > indexTribunal &&
|
||||
f.infoTribunaux[indexTribunal].evtAppel
|
||||
);
|
||||
|
||||
return {
|
||||
nbFamillesPassees: nbFamillesAvecPagesLiees(famillesPassees),
|
||||
nbFamillesConvoquees: nbFamillesAvecPagesLiees(famillesProgrammees),
|
||||
|
||||
nbFamilleAppelDuJugement: nbFamillesAvecPagesLiees(
|
||||
filterFamillesWithOneOfEvenementsOfType(
|
||||
famillesResistantesOuEx,
|
||||
"Appel du 1er jugement"
|
||||
)
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
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: nbFamillesAvecPagesLiees(famillesPassees),
|
||||
nbFamillesConvoquees: nbFamillesAvecPagesLiees(famillesProgrammees),
|
||||
nbFamilleAppelDuJugement: nbFamillesAvecPagesLiees(
|
||||
filterFamillesWithOneOfEvenementsOfType(
|
||||
famillesResistantesOuEx,
|
||||
"Appel du 2ème jugement"
|
||||
)
|
||||
nbFamillesConvoquees: nbFamillesAvecPagesLiees(famillesConvoquees),
|
||||
nbFamillesRelaxees: nbFamillesAvecPagesLiees(famillesRelaxees),
|
||||
nbFamillesAppelDuJugement: nbFamillesAvecPagesLiees(
|
||||
famillesAppelDuJugement
|
||||
),
|
||||
};
|
||||
}
|
||||
|
|
@ -284,3 +286,35 @@ function computeIntervalProcureurTribunalCorrectionnel(
|
|||
function isTribunalCorrectionnel(e: EvenementFamille): boolean {
|
||||
return e.Type === "Tribunal correctionnel";
|
||||
}
|
||||
|
||||
function buildInfoTribunaux(f: Famille): InfoTribunalCorrectionnel[] {
|
||||
const evtTribunaux = f.EvenementsEL.filter(isTribunalCorrectionnel);
|
||||
|
||||
return evtTribunaux.map((evtTribunal, index) => {
|
||||
const nextEvtTrib =
|
||||
index + 1 < evtTribunaux.length ? evtTribunaux[index + 1] : null;
|
||||
|
||||
const eventsBetweenTribAndNextTrib = f.EvenementsEL.filter(
|
||||
(e) =>
|
||||
evtTribunal.Date != null &&
|
||||
e.Date != null &&
|
||||
e.Date >= evtTribunal.Date &&
|
||||
(nextEvtTrib?.Date == null || e.Date < nextEvtTrib.Date)
|
||||
);
|
||||
|
||||
return {
|
||||
evtTribunal: evtTribunal,
|
||||
evtAdminAdhoc: eventsBetweenTribAndNextTrib.find(
|
||||
(e) => e.Type === "Administrateur AD'HOC"
|
||||
),
|
||||
evtAppel: f.Evenements.find(
|
||||
(e) =>
|
||||
(index === 0 && e.Type === "Appel du 1er jugement") ||
|
||||
(index === 1 && e.Type == "Appel du 2ème jugement")
|
||||
),
|
||||
evtRelaxe: eventsBetweenTribAndNextTrib.find(
|
||||
(e) => e.Type === "Relaxe Tribunal correctionnel"
|
||||
),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue