diff --git a/src/statistiques/v2/autres/computeStatsAutres.ts b/src/statistiques/v2/autres/computeStatsAutres.ts index bf16c0e..b2bcbcf 100644 --- a/src/statistiques/v2/autres/computeStatsAutres.ts +++ b/src/statistiques/v2/autres/computeStatsAutres.ts @@ -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 { diff --git a/src/statistiques/v2/generales/computeStatsGenerales.ts b/src/statistiques/v2/generales/computeStatsGenerales.ts index 2b2a3b2..71ae4dd 100644 --- a/src/statistiques/v2/generales/computeStatsGenerales.ts +++ b/src/statistiques/v2/generales/computeStatsGenerales.ts @@ -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( diff --git a/src/statistiques/v2/penales/nbFamillesAvecPagesLiees.ts b/src/statistiques/v2/nbFamillesAvecPagesLiees.ts similarity index 64% rename from src/statistiques/v2/penales/nbFamillesAvecPagesLiees.ts rename to src/statistiques/v2/nbFamillesAvecPagesLiees.ts index 784cb0d..77b7eeb 100644 --- a/src/statistiques/v2/penales/nbFamillesAvecPagesLiees.ts +++ b/src/statistiques/v2/nbFamillesAvecPagesLiees.ts @@ -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 { diff --git a/src/statistiques/v2/penales/StatsPenales.ts b/src/statistiques/v2/penales/StatsPenales.ts index ec75b76..752bb7e 100644 --- a/src/statistiques/v2/penales/StatsPenales.ts +++ b/src/statistiques/v2/penales/StatsPenales.ts @@ -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: { diff --git a/src/statistiques/v2/penales/buildInfoTribunauxCorrectionnel.ts b/src/statistiques/v2/penales/buildInfoTribunauxCorrectionnel.ts deleted file mode 100644 index f745530..0000000 --- a/src/statistiques/v2/penales/buildInfoTribunauxCorrectionnel.ts +++ /dev/null @@ -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" - ), - }; - }); -} diff --git a/src/statistiques/v2/penales/computeStatsPenales.ts b/src/statistiques/v2/penales/computeStatsPenales.ts index 4c9ce09..f61f89a 100644 --- a/src/statistiques/v2/penales/computeStatsPenales.ts +++ b/src/statistiques/v2/penales/computeStatsPenales.ts @@ -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)); diff --git a/src/statistiques/v2/penales/InfoTribunalCorrectionnel.ts b/src/statistiques/v2/penales/tc/InfoTribunalCorrectionnel.ts similarity index 63% rename from src/statistiques/v2/penales/InfoTribunalCorrectionnel.ts rename to src/statistiques/v2/penales/tc/InfoTribunalCorrectionnel.ts index 6418e1a..7ee51e9 100644 --- a/src/statistiques/v2/penales/InfoTribunalCorrectionnel.ts +++ b/src/statistiques/v2/penales/tc/InfoTribunalCorrectionnel.ts @@ -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; }; diff --git a/src/statistiques/v2/penales/tc/buildInfoTribunauxCorrectionnel.ts b/src/statistiques/v2/penales/tc/buildInfoTribunauxCorrectionnel.ts new file mode 100644 index 0000000..49ae20b --- /dev/null +++ b/src/statistiques/v2/penales/tc/buildInfoTribunauxCorrectionnel.ts @@ -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" + ), + }; + }); +} diff --git a/src/statistiques/v2/penales/tc/computeTribunalCorrectionnel.ts b/src/statistiques/v2/penales/tc/computeTribunalCorrectionnel.ts new file mode 100644 index 0000000..ef1a9e9 --- /dev/null +++ b/src/statistiques/v2/penales/tc/computeTribunalCorrectionnel.ts @@ -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 + ), + }; +} diff --git a/src/statistiques/v2/penales/tp/computeTribunalPolice.ts b/src/statistiques/v2/penales/tp/computeTribunalPolice.ts new file mode 100644 index 0000000..144b7df --- /dev/null +++ b/src/statistiques/v2/penales/tp/computeTribunalPolice.ts @@ -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" + ) + ), + }; +} diff --git a/src/statistiques/v2/sociales/computeStatsSociales.ts b/src/statistiques/v2/sociales/computeStatsSociales.ts index 21aab30..8eedb15 100644 --- a/src/statistiques/v2/sociales/computeStatsSociales.ts +++ b/src/statistiques/v2/sociales/computeStatsSociales.ts @@ -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 {