mirror of
https://framagit.org/enfance-libre/statistiques
synced 2025-12-07 13:03:44 +00:00
feat: stats tribunal de police Relaxe et Appel
This commit is contained in:
parent
e6cbd790aa
commit
2a202fc126
5 changed files with 108 additions and 73 deletions
|
|
@ -27,13 +27,13 @@ export const typesEvenementsPenal = [
|
||||||
"Administrateur AD'HOC",
|
"Administrateur AD'HOC",
|
||||||
"Relaxe Tribunal correctionnel",
|
"Relaxe Tribunal correctionnel",
|
||||||
"Vice de procédure tribunal correctionnel",
|
"Vice de procédure tribunal correctionnel",
|
||||||
"Procès appel TC",
|
|
||||||
"Appel du parquet",
|
"Appel du parquet",
|
||||||
|
"Procès appel TC",
|
||||||
// Tribunal de police
|
// Tribunal de police
|
||||||
"Tribunal de police judiciaire",
|
"Tribunal de police judiciaire",
|
||||||
|
"Relaxe Tribunal de police",
|
||||||
|
"Appel Tribunal Police opposition ordonnance pénale",
|
||||||
"Procès appel TP",
|
"Procès appel TP",
|
||||||
"Relaxe Tribunal de police",
|
|
||||||
"Appel Tribunal Police opposition ordonnance pénale"
|
|
||||||
// [,,,"Amendes",,,,"Classement sous condition","Information non médico-sociale"]
|
// [,,,"Amendes",,,,"Classement sous condition","Information non médico-sociale"]
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
|
|
|
||||||
10
src/statistiques/v2/penales/InfoTribunalCorrectionnel.ts
Normal file
10
src/statistiques/v2/penales/InfoTribunalCorrectionnel.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
import { EvenementFamille } from "../../../data/EvenementFamille";
|
||||||
|
|
||||||
|
|
||||||
|
export type InfoTribunalCorrectionnel = {
|
||||||
|
evtTribunal: EvenementFamille;
|
||||||
|
evtRelaxe?: EvenementFamille;
|
||||||
|
evtAdminAdhoc?: EvenementFamille;
|
||||||
|
evtViceDeProcedure?: EvenementFamille;
|
||||||
|
evtAppel?: EvenementFamille;
|
||||||
|
};
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import { StatsType } from "../desc/StatsDesc";
|
import { StatsType } from "../desc/StatsDesc";
|
||||||
|
|
||||||
export const statsTribunalDesc = {
|
export const statsTribunalCorrectionnelDesc = {
|
||||||
nbFamillesConvoquees: {
|
nbFamillesConvoquees: {
|
||||||
label: "Nb familles convoquées mais pas encore passées",
|
label: "Nb familles convoquées mais pas encore passées",
|
||||||
},
|
},
|
||||||
|
|
@ -91,15 +91,15 @@ export const statsPenalesDesc = {
|
||||||
|
|
||||||
tribunalCorrectionnel1: {
|
tribunalCorrectionnel1: {
|
||||||
label: "Tribunal Correctionnel 1er passage",
|
label: "Tribunal Correctionnel 1er passage",
|
||||||
stats: statsTribunalDesc,
|
stats: statsTribunalCorrectionnelDesc,
|
||||||
},
|
},
|
||||||
tribunalCorrectionnel2: {
|
tribunalCorrectionnel2: {
|
||||||
label: "Tribunal Correctionnel 2eme passage",
|
label: "Tribunal Correctionnel 2eme passage",
|
||||||
stats: statsTribunalDesc,
|
stats: statsTribunalCorrectionnelDesc,
|
||||||
},
|
},
|
||||||
tribunalCorrectionnel3: {
|
tribunalCorrectionnel3: {
|
||||||
label: "Tribunal Correctionnel 3eme passage",
|
label: "Tribunal Correctionnel 3eme passage",
|
||||||
stats: statsTribunalDesc,
|
stats: statsTribunalCorrectionnelDesc,
|
||||||
},
|
},
|
||||||
|
|
||||||
nbFamilleAvecStageParentalité: {
|
nbFamilleAvecStageParentalité: {
|
||||||
|
|
@ -108,8 +108,18 @@ export const statsPenalesDesc = {
|
||||||
nbFamilleAvecRequisitionJudiciaire: {
|
nbFamilleAvecRequisitionJudiciaire: {
|
||||||
label: "Nb Familles avec Réquisition Judiciaire",
|
label: "Nb Familles avec Réquisition Judiciaire",
|
||||||
},
|
},
|
||||||
nbFamillesTribunalDePolice: {
|
tribunalDePolice: {
|
||||||
label: "Nb familles avec Tribunal de police",
|
label: "Tribunal de Police",
|
||||||
|
stats: {
|
||||||
|
nbFamilles: {
|
||||||
|
label: "Nb familles avec Tribunal de police",
|
||||||
|
},
|
||||||
|
nbFamillesAppel: {
|
||||||
|
label: "Nb familles ayant fait appel",
|
||||||
|
},nbFamillesRelaxee: {
|
||||||
|
label: "Nb familles relaxées",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
intervalGendarmerieProcureur: {
|
intervalGendarmerieProcureur: {
|
||||||
label: "Délai moyen entre Gendarmerie et Procureur",
|
label: "Délai moyen entre Gendarmerie et Procureur",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
import { Famille } from "../../../data/Famille";
|
||||||
|
import { isTribunalCorrectionnel } from "./computeStatsPenales";
|
||||||
|
import { InfoTribunalCorrectionnel } from "./InfoTribunalCorrectionnel";
|
||||||
|
|
||||||
|
export function buildInfoTribunauxCorrectionnel(f: Famille): InfoTribunalCorrectionnel[] {
|
||||||
|
const evtTribunaux = f.EvenementsEL.filter(isTribunalCorrectionnel);
|
||||||
|
|
||||||
|
return evtTribunaux.map((evtTribunal, index) => {
|
||||||
|
const prevEvtTrib = (index - 1 >= 0) ? evtTribunaux[index - 1] : null;
|
||||||
|
const nextEvtTrib = index + 1 < evtTribunaux.length ? evtTribunaux[index + 1] : null;
|
||||||
|
|
||||||
|
const eventsBetweenPreviousTribAndCurrentTrib = f.EvenementsEL.filter(
|
||||||
|
(e) => evtTribunal.Date != null &&
|
||||||
|
e.Date != null &&
|
||||||
|
e.Date <= evtTribunal.Date &&
|
||||||
|
(prevEvtTrib?.Date == null || e.Date > prevEvtTrib.Date)
|
||||||
|
);
|
||||||
|
|
||||||
|
const eventsBetweenCurrentTribAndNextTrib = 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: eventsBetweenPreviousTribAndCurrentTrib.find(
|
||||||
|
(e) => e.Type === "Administrateur AD'HOC"
|
||||||
|
),
|
||||||
|
evtAppel: eventsBetweenCurrentTribAndNextTrib.find(
|
||||||
|
(e) => (index === 0 && e.Type === "Appel jugement Tribunal Correctionnel") ||
|
||||||
|
(index === 1 && e.Type == "Appel du 2ème jugement TC")
|
||||||
|
),
|
||||||
|
evtViceDeProcedure: eventsBetweenCurrentTribAndNextTrib.find(
|
||||||
|
(e) => e.Type === "Vice de procédure tribunal correctionnel"
|
||||||
|
),
|
||||||
|
evtRelaxe: eventsBetweenCurrentTribAndNextTrib.find(
|
||||||
|
(e) => e.Type === "Relaxe Tribunal correctionnel"
|
||||||
|
),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
@ -15,19 +15,13 @@ 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 { buildInfoTribunauxCorrectionnel } from "./buildInfoTribunauxCorrectionnel";
|
||||||
|
import { InfoTribunalCorrectionnel } from "./InfoTribunalCorrectionnel";
|
||||||
|
|
||||||
type FamilleAvecInfoTribunaux = Famille & {
|
type FamilleAvecInfoTribunaux = Famille & {
|
||||||
infoTribunaux: InfoTribunalCorrectionnel[];
|
infoTribunaux: InfoTribunalCorrectionnel[];
|
||||||
};
|
};
|
||||||
|
|
||||||
type InfoTribunalCorrectionnel = {
|
|
||||||
evtTribunal: EvenementFamille;
|
|
||||||
evtRelaxe?: EvenementFamille;
|
|
||||||
evtAdminAdhoc?: EvenementFamille;
|
|
||||||
evtViceDeProcedure?: EvenementFamille;
|
|
||||||
evtAppel?: 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)
|
||||||
|
|
@ -58,7 +52,7 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
||||||
|
|
||||||
const famillesAvecInfoTribunaux: FamilleAvecInfoTribunaux[] =
|
const famillesAvecInfoTribunaux: FamilleAvecInfoTribunaux[] =
|
||||||
famillesResistantesOuEx.map((f) => {
|
famillesResistantesOuEx.map((f) => {
|
||||||
const infoTribunaux = buildInfoTribunaux(f);
|
const infoTribunaux = buildInfoTribunauxCorrectionnel(f);
|
||||||
return {
|
return {
|
||||||
...f,
|
...f,
|
||||||
infoTribunaux: infoTribunaux,
|
infoTribunaux: infoTribunaux,
|
||||||
|
|
@ -128,12 +122,7 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
nbFamillesTribunalDePolice: nbFamillesAvecPagesLiees(
|
tribunalDePolice: computeTribunalPolice(famillesResistantesOuEx),
|
||||||
filterFamillesWithOneOfEvenementsOfType(
|
|
||||||
famillesResistantesOuEx,
|
|
||||||
"Tribunal de police judiciaire"
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
intervalGendarmerieProcureur: computeIntervalGendarmerieProcureur(familles),
|
intervalGendarmerieProcureur: computeIntervalGendarmerieProcureur(familles),
|
||||||
intervalProcureurTribunalCorrectionnel:
|
intervalProcureurTribunalCorrectionnel:
|
||||||
|
|
@ -142,6 +131,31 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
|
||||||
return statsPenales;
|
return statsPenales;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function computeTribunalPolice(
|
||||||
|
famillesResistantesOuEx: Famille[]
|
||||||
|
): StatsPenales["tribunalDePolice"] {
|
||||||
|
return {
|
||||||
|
nbFamilles: nbFamillesAvecPagesLiees(
|
||||||
|
filterFamillesWithOneOfEvenementsOfType(
|
||||||
|
famillesResistantesOuEx,
|
||||||
|
"Tribunal de police judiciaire"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
nbFamillesAppel: nbFamillesAvecPagesLiees(
|
||||||
|
filterFamillesWithOneOfEvenementsOfType(
|
||||||
|
famillesResistantesOuEx,
|
||||||
|
"Appel Tribunal Police opposition ordonnance pénale"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
nbFamillesRelaxee: nbFamillesAvecPagesLiees(
|
||||||
|
filterFamillesWithOneOfEvenementsOfType(
|
||||||
|
famillesResistantesOuEx,
|
||||||
|
"Relaxe Tribunal de police"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function computeCrpc(
|
function computeCrpc(
|
||||||
famillesResistantesOuEx: Famille[]
|
famillesResistantesOuEx: Famille[]
|
||||||
): StatsPenales["procureur"]["crpc"] {
|
): StatsPenales["procureur"]["crpc"] {
|
||||||
|
|
@ -235,9 +249,12 @@ function computeTribunalCorrectionnel(
|
||||||
nbFamillesAppelDuJugement: nbFamillesAvecPagesLiees(
|
nbFamillesAppelDuJugement: nbFamillesAvecPagesLiees(
|
||||||
famillesAppelDuJugement
|
famillesAppelDuJugement
|
||||||
),
|
),
|
||||||
nbFamillesAdministrateurAdhoc: nbFamillesAvecPagesLiees(famillesAdministrateurAdhoc),
|
nbFamillesAdministrateurAdhoc: nbFamillesAvecPagesLiees(
|
||||||
nbFamillesViceDeProcedure: nbFamillesAvecPagesLiees(famillesViceDeProcedure),
|
famillesAdministrateurAdhoc
|
||||||
|
),
|
||||||
|
nbFamillesViceDeProcedure: nbFamillesAvecPagesLiees(
|
||||||
|
famillesViceDeProcedure
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -297,51 +314,6 @@ function computeIntervalProcureurTribunalCorrectionnel(
|
||||||
return average(intervals);
|
return average(intervals);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isTribunalCorrectionnel(e: EvenementFamille): boolean {
|
export 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 prevEvtTrib = ( index - 1 >= 0) ? evtTribunaux[index - 1] : null;
|
|
||||||
const nextEvtTrib =
|
|
||||||
index + 1 < evtTribunaux.length ? evtTribunaux[index + 1] : null;
|
|
||||||
|
|
||||||
const eventsBetweenPreviousTribAndCurrentTrib = f.EvenementsEL.filter(
|
|
||||||
(e) =>
|
|
||||||
evtTribunal.Date != null &&
|
|
||||||
e.Date != null &&
|
|
||||||
e.Date <= evtTribunal.Date &&
|
|
||||||
(prevEvtTrib?.Date == null || e.Date > prevEvtTrib.Date)
|
|
||||||
);
|
|
||||||
|
|
||||||
const eventsBetweenCurrentTribAndNextTrib = 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: eventsBetweenPreviousTribAndCurrentTrib.find(
|
|
||||||
(e) => e.Type === "Administrateur AD'HOC"
|
|
||||||
),
|
|
||||||
evtAppel: eventsBetweenCurrentTribAndNextTrib.find(
|
|
||||||
(e) =>
|
|
||||||
(index === 0 && e.Type === "Appel jugement Tribunal Correctionnel") ||
|
|
||||||
(index === 1 && e.Type == "Appel du 2ème jugement TC")
|
|
||||||
),
|
|
||||||
evtViceDeProcedure: eventsBetweenCurrentTribAndNextTrib.find(
|
|
||||||
(e) => e.Type === "Vice de procédure tribunal correctionnel"
|
|
||||||
),
|
|
||||||
evtRelaxe: eventsBetweenCurrentTribAndNextTrib.find(
|
|
||||||
(e) => e.Type === "Relaxe Tribunal correctionnel"
|
|
||||||
),
|
|
||||||
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue