mirror of
https://framagit.org/enfance-libre/statistiques
synced 2025-12-07 04:03:44 +00:00
feat: admin adhoc => stat globale
This commit is contained in:
parent
2a202fc126
commit
fb9399285d
11 changed files with 144 additions and 144 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
@ -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: {
|
||||
|
|
@ -115,10 +115,11 @@ export const statsPenalesDesc = {
|
|||
label: "Nb familles avec Tribunal de police",
|
||||
},
|
||||
nbFamillesAppel: {
|
||||
label: "Nb familles ayant fait appel",
|
||||
},nbFamillesRelaxee: {
|
||||
label: "Nb familles relaxées",
|
||||
},
|
||||
label: "Nb familles ayant fait appel",
|
||||
},
|
||||
nbFamillesRelaxee: {
|
||||
label: "Nb familles relaxées",
|
||||
},
|
||||
},
|
||||
},
|
||||
intervalGendarmerieProcureur: {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
@ -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"
|
||||
),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
@ -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
|
||||
),
|
||||
};
|
||||
}
|
||||
29
src/statistiques/v2/penales/tp/computeTribunalPolice.ts
Normal file
29
src/statistiques/v2/penales/tp/computeTribunalPolice.ts
Normal 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"
|
||||
)
|
||||
),
|
||||
};
|
||||
}
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue