feat: admin adhoc => stat globale

This commit is contained in:
Sébastien Arod 2025-05-27 20:40:43 +02:00
parent 2a202fc126
commit fb9399285d
11 changed files with 144 additions and 144 deletions

View file

@ -1,6 +1,6 @@
import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { nbFamillesAvecPagesLiees } from "../penales/nbFamillesAvecPagesLiees";
import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
import { StatsAutres } from "./StatsAutres";
export function computeStatsAutres(familles: Famille[]): StatsAutres {

View file

@ -9,7 +9,7 @@ import { median } from "../../../utils/math/median";
import { StatsGenerales } from "./StatsGenerales";
import _, { countBy, uniq } from "lodash";
import { isIntegrationEnCours } from "../../../data/StatutFamille";
import { nbFamillesAvecPagesLiees } from "../penales/nbFamillesAvecPagesLiees";
import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
export function computeStatsGenerales(familles: Famille[]): StatsGenerales {
const famillesResistantesOrEx = familles.filter(

View file

@ -1,5 +1,5 @@
import { Famille } from "../../../data/Famille";
import { StatsData } from "../desc/StatsDesc";
import { Famille } from "../../data/Famille";
import { StatsData } from "./desc/StatsDesc";
export function nbFamillesAvecPagesLiees(familles: Famille[]): StatsData {
return {

View file

@ -10,9 +10,6 @@ export const statsTribunalCorrectionnelDesc = {
nbFamillesViceDeProcedure: {
label: "Nb familles pour lesquels il y a eu un vice de procédure",
},
nbFamillesAdministrateurAdhoc: {
label: "Nb familles pour lesquelles un Administrateur ad'hoc à été nommé",
},
nbFamillesAppelDuJugement: {
label: "Nb familles ayant fait appel du jugement",
},
@ -108,6 +105,9 @@ export const statsPenalesDesc = {
nbFamilleAvecRequisitionJudiciaire: {
label: "Nb Familles avec Réquisition Judiciaire",
},
nbFamilleAvecAdministrateurAdhoc: {
label: "Nb familles avec Administrateur ad'hoc",
},
tribunalDePolice: {
label: "Tribunal de Police",
stats: {
@ -116,7 +116,8 @@ export const statsPenalesDesc = {
},
nbFamillesAppel: {
label: "Nb familles ayant fait appel",
},nbFamillesRelaxee: {
},
nbFamillesRelaxee: {
label: "Nb familles relaxées",
},
},

View file

@ -1,43 +0,0 @@
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"
),
};
});
}

View file

@ -2,7 +2,6 @@ import { differenceInDays } from "date-fns";
import {
isCompositionPenale,
isCRPC,
isEvenementBefore,
isProcureur,
isGendarmerie,
isEvtProcedurePenale,
@ -14,11 +13,13 @@ import { average } from "../../../utils/math/average";
import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEvenements";
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { StatsPenales } from "./StatsPenales";
import { nbFamillesAvecPagesLiees } from "./nbFamillesAvecPagesLiees";
import { buildInfoTribunauxCorrectionnel } from "./buildInfoTribunauxCorrectionnel";
import { InfoTribunalCorrectionnel } from "./InfoTribunalCorrectionnel";
import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
import { buildInfoTribunauxCorrectionnel } from "./tc/buildInfoTribunauxCorrectionnel";
import { InfoTribunalCorrectionnel } from "./tc/InfoTribunalCorrectionnel";
import { computeTribunalCorrectionnel } from "./tc/computeTribunalCorrectionnel";
import { computeTribunalPolice } from "./tp/computeTribunalPolice";
type FamilleAvecInfoTribunaux = Famille & {
export type FamilleAvecInfoTribunaux = Famille & {
infoTribunaux: InfoTribunalCorrectionnel[];
};
@ -109,6 +110,12 @@ export function computeStatsPenales(familles: Famille[]): StatsPenales {
2
),
nbFamilleAvecAdministrateurAdhoc: nbFamillesAvecPagesLiees(
filterFamillesWithOneOfEvenementsOfType(
famillesResistantesOuEx,
"Administrateur AD'HOC"
)
),
nbFamilleAvecRequisitionJudiciaire: nbFamillesAvecPagesLiees(
filterFamillesWithOneOfEvenementsOfType(
famillesResistantesOuEx,
@ -131,31 +138,6 @@ export function computeStatsPenales(familles: Famille[]): 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(
famillesResistantesOuEx: Famille[]
): StatsPenales["procureur"]["crpc"] {
@ -202,62 +184,6 @@ function computeCompositionPenales(
};
}
function computeTribunalCorrectionnel(
famillesResistantesOuEx: FamilleAvecInfoTribunaux[],
indexTribunal: number
): StatsPenales["tribunalCorrectionnel1"] {
const now = new Date();
const famillesPassees = famillesResistantesOuEx.filter(
(f) =>
f.infoTribunaux.length > indexTribunal &&
isEvenementBefore(f.infoTribunaux[indexTribunal].evtTribunal, 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
);
const famillesAdministrateurAdhoc = famillesPassees.filter(
(f) =>
f.infoTribunaux.length > indexTribunal &&
f.infoTribunaux[indexTribunal].evtAdminAdhoc
);
const famillesViceDeProcedure = famillesPassees.filter(
(f) =>
f.infoTribunaux.length > indexTribunal &&
f.infoTribunaux[indexTribunal].evtViceDeProcedure
);
return {
nbFamillesPassees: nbFamillesAvecPagesLiees(famillesPassees),
nbFamillesConvoquees: nbFamillesAvecPagesLiees(famillesConvoquees),
nbFamillesRelaxees: nbFamillesAvecPagesLiees(famillesRelaxees),
nbFamillesAppelDuJugement: nbFamillesAvecPagesLiees(
famillesAppelDuJugement
),
nbFamillesAdministrateurAdhoc: nbFamillesAvecPagesLiees(
famillesAdministrateurAdhoc
),
nbFamillesViceDeProcedure: nbFamillesAvecPagesLiees(
famillesViceDeProcedure
),
};
}
function computeIntervalGendarmerieProcureur(familles: Famille[]): number {
const intervals = familles.flatMap((f) => {
const evtGendarmerie = f.EvenementsEL.find((e) => isGendarmerie(e));

View file

@ -1,10 +1,8 @@
import { EvenementFamille } from "../../../data/EvenementFamille";
import { EvenementFamille } from "../../../../data/EvenementFamille";
export type InfoTribunalCorrectionnel = {
evtTribunal: EvenementFamille;
evtRelaxe?: EvenementFamille;
evtAdminAdhoc?: EvenementFamille;
evtViceDeProcedure?: EvenementFamille;
evtAppel?: EvenementFamille;
};

View file

@ -0,0 +1,37 @@
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 nextEvtTrib =
index + 1 < evtTribunaux.length ? evtTribunaux[index + 1] : null;
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,
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"
),
};
});
}

View file

@ -0,0 +1,52 @@
import { isEvenementBefore } from "../../../../data/EvenementFamille";
import { FamilleAvecInfoTribunaux } from "../computeStatsPenales";
import { nbFamillesAvecPagesLiees } from "../../nbFamillesAvecPagesLiees";
import { StatsPenales } from "../StatsPenales";
export function computeTribunalCorrectionnel(
famillesResistantesOuEx: FamilleAvecInfoTribunaux[],
indexTribunal: number
): StatsPenales["tribunalCorrectionnel1"] {
const now = new Date();
const famillesPassees = famillesResistantesOuEx.filter(
(f) =>
f.infoTribunaux.length > indexTribunal &&
isEvenementBefore(f.infoTribunaux[indexTribunal].evtTribunal, 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
);
const famillesViceDeProcedure = famillesPassees.filter(
(f) =>
f.infoTribunaux.length > indexTribunal &&
f.infoTribunaux[indexTribunal].evtViceDeProcedure
);
return {
nbFamillesPassees: nbFamillesAvecPagesLiees(famillesPassees),
nbFamillesConvoquees: nbFamillesAvecPagesLiees(famillesConvoquees),
nbFamillesRelaxees: nbFamillesAvecPagesLiees(famillesRelaxees),
nbFamillesAppelDuJugement: nbFamillesAvecPagesLiees(
famillesAppelDuJugement
),
nbFamillesViceDeProcedure: nbFamillesAvecPagesLiees(
famillesViceDeProcedure
),
};
}

View file

@ -0,0 +1,29 @@
import { Famille } from "../../../../data/Famille";
import { filterFamillesWithOneOfEvenementsOfType } from "../../filterFamillesWithOneOfEvenementsOfType";
import { nbFamillesAvecPagesLiees } from "../../nbFamillesAvecPagesLiees";
import { StatsPenales } from "../StatsPenales";
export 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"
)
),
};
}

View file

@ -6,7 +6,7 @@ import {
import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEvenements";
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { nbFamillesAvecPagesLiees } from "../penales/nbFamillesAvecPagesLiees";
import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
import { StatsSociales } from "./StatsSociales";
export function computeStatsSociales(familles: Famille[]): StatsSociales {