mirror of
https://framagit.org/enfance-libre/statistiques
synced 2025-12-07 13:53:45 +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",
|
"Enquête en cours",
|
||||||
"Poursuivi à tort",
|
"Poursuivi à tort",
|
||||||
"Tribunal de police",
|
"Tribunal de police",
|
||||||
|
"Relaxe TC",
|
||||||
] as const;
|
] as const;
|
||||||
export type StatutPenal = (typeof optionsStatutPenal)[number];
|
export type StatutPenal = (typeof optionsStatutPenal)[number];
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ export const typesEvenementsPenal = [
|
||||||
"Appel du 2ème jugement", // placeholder
|
"Appel du 2ème jugement", // placeholder
|
||||||
"Tribunal de police judiciaire",
|
"Tribunal de police judiciaire",
|
||||||
"Administrateur AD'HOC",
|
"Administrateur AD'HOC",
|
||||||
|
"Relaxe Tribunal correctionnel",
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
export function isEvtTypeProcedurePenale(evtType: TypeEvenement): boolean {
|
export function isEvtTypeProcedurePenale(evtType: TypeEvenement): boolean {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,20 @@
|
||||||
import { StatsType } from "../desc/StatsDesc";
|
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 = {
|
export const statsPenalesDesc = {
|
||||||
label: "Stats Pénales",
|
label: "Stats Pénales",
|
||||||
stats: {
|
stats: {
|
||||||
|
|
@ -70,31 +85,15 @@ export const statsPenalesDesc = {
|
||||||
|
|
||||||
tribunalCorrectionnel1: {
|
tribunalCorrectionnel1: {
|
||||||
label: "Tribunal Correctionnel 1er passage",
|
label: "Tribunal Correctionnel 1er passage",
|
||||||
stats: {
|
stats: statsTribunalDesc,
|
||||||
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",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
tribunalCorrectionnel2: {
|
tribunalCorrectionnel2: {
|
||||||
label: "Tribunal Correctionnel 2eme passage",
|
label: "Tribunal Correctionnel 2eme passage",
|
||||||
stats: {
|
stats: statsTribunalDesc,
|
||||||
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",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
tribunalCorrectionnel3: {
|
||||||
|
label: "Tribunal Correctionnel 3eme passage",
|
||||||
|
stats: statsTribunalDesc,
|
||||||
},
|
},
|
||||||
|
|
||||||
nbFamilleAvecStageParentalité: {
|
nbFamilleAvecStageParentalité: {
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,17 @@ import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEve
|
||||||
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
|
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
|
||||||
import { StatsPenales } from "./StatsPenales";
|
import { StatsPenales } from "./StatsPenales";
|
||||||
import { nbFamillesAvecPagesLiees } from "./nbFamillesAvecPagesLiees";
|
import { nbFamillesAvecPagesLiees } from "./nbFamillesAvecPagesLiees";
|
||||||
|
import { info } from "console";
|
||||||
|
|
||||||
type FamilleAvecInfoTribunaux = Famille & {
|
type FamilleAvecInfoTribunaux = Famille & {
|
||||||
evtTribunal1?: EvenementFamille;
|
infoTribunaux: InfoTribunalCorrectionnel[];
|
||||||
evtTribunal2?: EvenementFamille;
|
};
|
||||||
|
|
||||||
|
type InfoTribunalCorrectionnel = {
|
||||||
|
evtTribunal: EvenementFamille;
|
||||||
|
evtRelaxe?: EvenementFamille;
|
||||||
|
evtAdminAdhoc?: EvenementFamille;
|
||||||
|
evtAppel?: EvenementFamille;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
||||||
|
|
@ -51,11 +58,10 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
||||||
|
|
||||||
const famillesAvecInfoTribunaux: FamilleAvecInfoTribunaux[] =
|
const famillesAvecInfoTribunaux: FamilleAvecInfoTribunaux[] =
|
||||||
famillesResistantesOuEx.map((f) => {
|
famillesResistantesOuEx.map((f) => {
|
||||||
const evtTribunaux = f.EvenementsEL.filter(isTribunalCorrectionnel);
|
const infoTribunaux = buildInfoTribunaux(f);
|
||||||
return {
|
return {
|
||||||
...f,
|
...f,
|
||||||
evtTribunal1: evtTribunaux.length > 0 ? evtTribunaux[0] : undefined,
|
infoTribunaux: infoTribunaux,
|
||||||
evtTribunal2: evtTribunaux.length > 1 ? evtTribunaux[1] : undefined,
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -96,11 +102,17 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
tribunalCorrectionnel1: computeTribunalCorrectionnel1(
|
tribunalCorrectionnel1: computeTribunalCorrectionnel(
|
||||||
famillesAvecInfoTribunaux
|
famillesAvecInfoTribunaux,
|
||||||
|
0
|
||||||
),
|
),
|
||||||
tribunalCorrectionnel2: computeTribunalCorrectionnel2(
|
tribunalCorrectionnel2: computeTribunalCorrectionnel(
|
||||||
famillesAvecInfoTribunaux
|
famillesAvecInfoTribunaux,
|
||||||
|
1
|
||||||
|
),
|
||||||
|
tribunalCorrectionnel3: computeTribunalCorrectionnel(
|
||||||
|
famillesAvecInfoTribunaux,
|
||||||
|
2
|
||||||
),
|
),
|
||||||
|
|
||||||
nbFamilleAvecRequisitionJudiciaire: nbFamillesAvecPagesLiees(
|
nbFamilleAvecRequisitionJudiciaire: nbFamillesAvecPagesLiees(
|
||||||
|
|
@ -176,51 +188,41 @@ function computeCompositionPenales(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function computeTribunalCorrectionnel1(
|
function computeTribunalCorrectionnel(
|
||||||
famillesResistantesOuEx: FamilleAvecInfoTribunaux[]
|
famillesResistantesOuEx: FamilleAvecInfoTribunaux[],
|
||||||
|
indexTribunal: number
|
||||||
): StatsPenales["tribunalCorrectionnel1"] {
|
): StatsPenales["tribunalCorrectionnel1"] {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const famillesPassees = famillesResistantesOuEx.filter(
|
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(
|
const famillesConvoquees = famillesResistantesOuEx.filter(
|
||||||
(f) => f.evtTribunal1 && !isEvenementBefore(f.evtTribunal1, now)
|
(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 {
|
return {
|
||||||
nbFamillesPassees: nbFamillesAvecPagesLiees(famillesPassees),
|
nbFamillesPassees: nbFamillesAvecPagesLiees(famillesPassees),
|
||||||
nbFamillesConvoquees: nbFamillesAvecPagesLiees(famillesProgrammees),
|
nbFamillesConvoquees: nbFamillesAvecPagesLiees(famillesConvoquees),
|
||||||
|
nbFamillesRelaxees: nbFamillesAvecPagesLiees(famillesRelaxees),
|
||||||
nbFamilleAppelDuJugement: nbFamillesAvecPagesLiees(
|
nbFamillesAppelDuJugement: nbFamillesAvecPagesLiees(
|
||||||
filterFamillesWithOneOfEvenementsOfType(
|
famillesAppelDuJugement
|
||||||
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"
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -284,3 +286,35 @@ function computeIntervalProcureurTribunalCorrectionnel(
|
||||||
function isTribunalCorrectionnel(e: EvenementFamille): boolean {
|
function isTribunalCorrectionnel(e: EvenementFamille): boolean {
|
||||||
return e.Type === "Tribunal correctionnel";
|
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