feat: supprime stats v1

wip-related-pages
Sébastien Arod 2024-09-07 15:18:54 +02:00
parent 7890af10d8
commit d82268779b
6 changed files with 6 additions and 357 deletions

View File

@ -6,7 +6,7 @@ import { publishPeriodStats } from "./publishPeriodStats";
import { publishStatsActuelles } from "./publishStatsActuelles"; import { publishStatsActuelles } from "./publishStatsActuelles";
export const statsPageId = "2b91cd90e3694e96bb196d69aeca59b1"; export const statsPageId = "2b91cd90e3694e96bb196d69aeca59b1";
export const currentStatsHeading = "Statistiques actuelles"; export const currentStatsHeading = "Statistiques v1";
const yearStatsDb = "4b19a72aa07840eab948525ea41878ee"; const yearStatsDb = "4b19a72aa07840eab948525ea41878ee";
const monthStatsDb = "8418a8a4a7544f6a8c54e6003be7efe5"; const monthStatsDb = "8418a8a4a7544f6a8c54e6003be7efe5";

View File

@ -10,112 +10,6 @@ export function statPublishOptions(
const statPropsPublishOptions: { const statPropsPublishOptions: {
[jsPropName in AllStatsPropNames]: StatPublishOptions; [jsPropName in AllStatsPropNames]: StatPublishOptions;
} = { } = {
nbFamilleResistantes: {
notionPropName: "Nb familles résistantes",
},
nbFamilleResistantesSurPeriode: {
notionPropName: "Nb familles résistantes sur période",
},
nbFamilleResistantesOrEx: {
notionPropName: "Nb familles résistantes ou ex-résistantes",
},
dureeResistanceMoyenne: {
notionPropName: "Durée résistance moyenne",
unit: "j",
},
dureeResistanceMediane: {
notionPropName: "Durée résistance médiane",
unit: "j",
},
pourcentageEntreeApresMiseEnDemeure: {
notionPropName: "% d'entrées après mises en demeure",
unit: "%",
},
nbFamillesMisesEnDemeure: {
notionPropName: "Nb familles mises en demeure",
},
pourcentageFamillesMisesEnDemeure: {
notionPropName: "% de familles mises en demeure",
unit: "%",
},
pourcentageEntreeApresMiseEnDemeureSurPeriode: {
notionPropName: "% d'entrées après mises en demeure sur période",
},
nbFamillesCompositionPenale: {
notionPropName: "Nb familles avec composition pénale",
},
pourcentageFamillesCompositionPenale: {
notionPropName: "% familles avec composition pénale",
unit: "%",
},
nbFamillesCompositionPenaleAcceptee: {
notionPropName: "Nb familles avec composition pénale acceptée",
},
pourcentageCompositionPenaleAcceptee: {
notionPropName: "% des composition pénale qui sont acceptée",
unit: "%",
},
pourcentageFamillesCompositionPenaleAcceptee: {
notionPropName: "% familles avec composition pénale acceptée",
unit: "%",
},
nbFamillesCompositionPenaleRefusee: {
notionPropName: "Nb familles avec composition pénale refusée",
},
pourcentageCompositionPenaleRefusee: {
notionPropName: "% des composition pénale qui sont refusée",
unit: "%",
},
pourcentageFamillesCompositionPenaleRefusee: {
notionPropName: "% familles avec composition pénale refusée",
unit: "%",
},
nbFamillesCRPC: {
notionPropName: "Nb familles avec CRPC",
},
pourcentageFamillesCRPC: {
notionPropName: "% familles avec CRPC",
unit: "%",
},
nbFamillesCRPCAcceptee: {
notionPropName: "Nb familles avec CRPC acceptée",
},
pourcentageCRPCAcceptee: {
notionPropName: "% des CRPC qui sont acceptée",
unit: "%",
},
pourcentageFamillesCRPCAcceptee: {
notionPropName: "% familles avec CRPC acceptée",
unit: "%",
},
nbFamillesCRPCRefusee: {
notionPropName: "Nb familles avec CRPC refusée",
},
pourcentageCRPCRefusee: {
notionPropName: "% des CRPC qui sont refusée",
unit: "%",
},
pourcentageFamillesCRPCRefusee: {
notionPropName: "% familles avec CRPC refusée",
unit: "%",
},
nbFamillesTribunalCorrectionnel: {
notionPropName: "Nb familles passées au tribunal correctionnel",
},
nbFamillesTribunalCorrectionnelProgramme: {
notionPropName: "Nb familles tribunal correctionnel programmé",
unit: "%",
},
pourcentageFamillesTribunalCorrectionnel: {
notionPropName: "% familles passées au tribunal correctionnel",
unit: "%",
},
nbFamillesProcedureCivile: { nbFamillesProcedureCivile: {
notionPropName: "Nb familles avec procédure civile", notionPropName: "Nb familles avec procédure civile",
}, },

View File

@ -6,42 +6,6 @@ export type ELStats = {
}; };
export type ELStatsAtDate<V> = { export type ELStatsAtDate<V> = {
// Résistance
nbFamilleResistantes: V;
nbFamilleResistantesOrEx: V;
dureeResistanceMoyenne: V;
dureeResistanceMediane: V;
pourcentageEntreeApresMiseEnDemeure: V;
// Pénale
nbFamillesMisesEnDemeure: V;
pourcentageFamillesMisesEnDemeure: V;
// Pénale > Composition Pénale
nbFamillesCompositionPenale: V;
pourcentageFamillesCompositionPenale: V;
nbFamillesCompositionPenaleAcceptee: V;
pourcentageCompositionPenaleAcceptee: V;
pourcentageFamillesCompositionPenaleAcceptee: V;
nbFamillesCompositionPenaleRefusee: V;
pourcentageCompositionPenaleRefusee: V;
pourcentageFamillesCompositionPenaleRefusee: V;
// Pénale > CRPC
nbFamillesCRPC: V;
pourcentageFamillesCRPC: V;
nbFamillesCRPCAcceptee: V;
pourcentageCRPCAcceptee: V;
pourcentageFamillesCRPCAcceptee: V;
nbFamillesCRPCRefusee: V;
pourcentageCRPCRefusee: V;
pourcentageFamillesCRPCRefusee: V;
// Pénale > Tribunal Correctionnel
nbFamillesTribunalCorrectionnel: V;
pourcentageFamillesTribunalCorrectionnel: V;
nbFamillesTribunalCorrectionnelProgramme: V;
// Civile // Civile
nbFamillesProcedureCivile: V; nbFamillesProcedureCivile: V;
pourcentageFamillesProcedureCivile: V; pourcentageFamillesProcedureCivile: V;
@ -65,12 +29,7 @@ export type ELStatsPeriod = {
stats: PeriodStatsValues<ValueWithEvol>; stats: PeriodStatsValues<ValueWithEvol>;
}; };
export type PeriodStatsValues<V> = ELStatsAtDate<V> | ELStatsOverPeriod<V>; export type PeriodStatsValues<V> = ELStatsAtDate<V>;
export type ELStatsOverPeriod<V> = {
pourcentageEntreeApresMiseEnDemeureSurPeriode: V;
nbFamilleResistantesSurPeriode: V;
};
export type ValueWithEvol = { export type ValueWithEvol = {
value: number; value: number;
@ -78,6 +37,4 @@ export type ValueWithEvol = {
evolPercent: number; evolPercent: number;
}; };
export type AllStatsPropNames = export type AllStatsPropNames = keyof ELStatsAtDate<number>;
| keyof ELStatsOverPeriod<number>
| keyof ELStatsAtDate<number>;

View File

@ -1,14 +1,8 @@
import { Famille } from "../../data/Famille"; import { Famille } from "../../data/Famille";
import { IdentifiedPeriod } from "../../period/IdentifiedPeriod"; import { IdentifiedPeriod } from "../../period/IdentifiedPeriod";
import { Period } from "../../period/Period"; import { Period } from "../../period/Period";
import { import { ELStatsPeriod, PeriodStatsValues, ValueWithEvol } from "./ELStats";
ELStatsOverPeriod,
ELStatsPeriod,
PeriodStatsValues,
ValueWithEvol,
} from "./ELStats";
import { computeELStatsAtDate } from "./computeELStatsAtDate"; import { computeELStatsAtDate } from "./computeELStatsAtDate";
import { computeELStatsOverPeriod } from "./computeELStatsOverPeriod";
export function computeELPeriodStats( export function computeELPeriodStats(
familles: Famille[], familles: Famille[],
@ -37,16 +31,7 @@ function computePeriodStatsNumberValues(
familles: Famille[], familles: Famille[],
period: Period period: Period
): PeriodStatsValues<number> { ): PeriodStatsValues<number> {
const statsAtPeriodEnd = computeELStatsAtDate(familles, period.end); return computeELStatsAtDate(familles, period.end);
const statsOverPeriod: ELStatsOverPeriod<number> = computeELStatsOverPeriod(
familles,
period
);
return {
...statsAtPeriodEnd,
...statsOverPeriod,
};
} }
function computeStatsEvol( function computeStatsEvol(

View File

@ -1,104 +1,19 @@
import { import {
isCRPC,
isCompositionPenale,
isEvenementBefore, isEvenementBefore,
isProcedureCivile, isProcedureCivile,
} from "../../data/EvenementFamille"; } from "../../data/EvenementFamille";
import { import { Famille, isExResistant, isResistant } from "../../data/Famille";
Famille,
dureeResistanceInDays,
isExResistant,
isResistant,
} from "../../data/Famille";
import { average } from "../../utils/math/average";
import { median } from "../../utils/math/median";
import { percent } from "../../utils/math/percent"; import { percent } from "../../utils/math/percent";
import { notNull } from "../../utils/notNull";
import { ELStatsAtDate } from "./ELStats"; import { ELStatsAtDate } from "./ELStats";
import { computePourcentageEntreeApresMiseEnDemeure } from "./computePourcentageEntreeApresMiseEnDemeure";
export function computeELStatsAtDate( export function computeELStatsAtDate(
familles: Famille[], familles: Famille[],
asOfDate: Date asOfDate: Date
): ELStatsAtDate<number> { ): ELStatsAtDate<number> {
const familleResistantes = familles.filter((f) => isResistant(f, asOfDate));
const familleResistantesOrEx = familles.filter( const familleResistantesOrEx = familles.filter(
(famille) => (famille) =>
isResistant(famille, asOfDate) || isExResistant(famille, asOfDate) isResistant(famille, asOfDate) || isExResistant(famille, asOfDate)
); );
const dureesResistances = familles
.map((famille) => dureeResistanceInDays(famille, asOfDate))
.filter(notNull);
const nbFamillesMiseEnDemeure = familleResistantesOrEx.filter((f) =>
f.Evenements.find((e) => e.Type === "Mise en demeure de scolarisation")
).length;
const famillesAvecCompositionPenale = familleResistantesOrEx.filter(
(famille) =>
famille.Evenements.find(
(evt) => isCompositionPenale(evt) && isEvenementBefore(evt, asOfDate)
)
);
const famillesAvecCompositionPenaleAcceptee = familleResistantesOrEx.filter(
(famille) =>
famille.Evenements.find(
(evt) =>
isCompositionPenale(evt) &&
evt.Type === "Composition pénale acceptée" &&
isEvenementBefore(evt, asOfDate)
)
);
const famillesAvecCompositionPenaleRefusee = familleResistantesOrEx.filter(
(famille) =>
famille.Evenements.find(
(evt) =>
isCompositionPenale(evt) &&
evt.Type === "Composition pénale refusée" &&
isEvenementBefore(evt, asOfDate)
)
);
const famillesAvecCRPC = familleResistantesOrEx.filter((famille) =>
famille.Evenements.find(
(evt) => isCRPC(evt) && isEvenementBefore(evt, asOfDate)
)
);
const famillesAvecCRPCAcceptee = familleResistantesOrEx.filter((famille) =>
famille.Evenements.find(
(evt) =>
isCRPC(evt) &&
evt.Type === "Acceptation CRPC" &&
isEvenementBefore(evt, asOfDate)
)
);
const famillesAvecCRPCRefusee = familleResistantesOrEx.filter((famille) =>
famille.Evenements.find(
(evt) =>
isCRPC(evt) &&
evt.Type === "Refus CRPC" &&
isEvenementBefore(evt, asOfDate)
)
);
const famillesPasseesTribunalCorrectionnel = familleResistantesOrEx.filter(
(famille) =>
famille.Evenements.find(
(evt) =>
evt.Type === "Tribunal correctionnel" &&
isEvenementBefore(evt, asOfDate)
)
);
const famillesTribunalCorrectionnelProgramme = familleResistantesOrEx.filter(
(famille) =>
famille.Evenements.find(
(evt) =>
evt.Type === "Tribunal correctionnel" &&
!isEvenementBefore(evt, asOfDate)
)
);
const famillesAvecProcedureCivile = familleResistantesOrEx.filter((famille) => const famillesAvecProcedureCivile = familleResistantesOrEx.filter((famille) =>
famille.Evenements.find( famille.Evenements.find(
@ -133,79 +48,6 @@ export function computeELStatsAtDate(
f.Evenements.find((e) => e.Type === "Contrôle URSSAF") f.Evenements.find((e) => e.Type === "Contrôle URSSAF")
); );
const elStats: ELStatsAtDate<number> = { const elStats: ELStatsAtDate<number> = {
nbFamilleResistantes: familleResistantes.length,
nbFamilleResistantesOrEx: familleResistantesOrEx.length,
dureeResistanceMoyenne: average(dureesResistances),
dureeResistanceMediane: median(dureesResistances),
pourcentageEntreeApresMiseEnDemeure:
computePourcentageEntreeApresMiseEnDemeure(familleResistantesOrEx),
nbFamillesMisesEnDemeure: nbFamillesMiseEnDemeure,
pourcentageFamillesMisesEnDemeure: percent(
nbFamillesMiseEnDemeure,
familleResistantesOrEx.length
),
nbFamillesCompositionPenale: famillesAvecCompositionPenale.length,
pourcentageFamillesCompositionPenale: percent(
famillesAvecCompositionPenale.length,
familleResistantesOrEx.length
),
nbFamillesCompositionPenaleAcceptee:
famillesAvecCompositionPenaleAcceptee.length,
pourcentageCompositionPenaleAcceptee: percent(
famillesAvecCompositionPenaleAcceptee.length,
famillesAvecCompositionPenale.length
),
pourcentageFamillesCompositionPenaleAcceptee: percent(
famillesAvecCompositionPenaleAcceptee.length,
familleResistantesOrEx.length
),
nbFamillesCompositionPenaleRefusee:
famillesAvecCompositionPenaleRefusee.length,
pourcentageCompositionPenaleRefusee: percent(
famillesAvecCompositionPenaleRefusee.length,
famillesAvecCompositionPenale.length
),
pourcentageFamillesCompositionPenaleRefusee: percent(
famillesAvecCompositionPenaleRefusee.length,
familleResistantesOrEx.length
),
nbFamillesCRPC: famillesAvecCRPC.length,
pourcentageFamillesCRPC: percent(
famillesAvecCRPC.length,
familleResistantesOrEx.length
),
nbFamillesCRPCAcceptee: famillesAvecCRPCAcceptee.length,
pourcentageCRPCAcceptee: percent(
famillesAvecCRPCAcceptee.length,
famillesAvecCRPC.length
),
pourcentageFamillesCRPCAcceptee: percent(
famillesAvecCRPCAcceptee.length,
familleResistantesOrEx.length
),
nbFamillesCRPCRefusee: famillesAvecCRPCRefusee.length,
pourcentageCRPCRefusee: percent(
famillesAvecCRPCRefusee.length,
famillesAvecCRPC.length
),
pourcentageFamillesCRPCRefusee: percent(
famillesAvecCRPCRefusee.length,
familleResistantesOrEx.length
),
nbFamillesTribunalCorrectionnel:
famillesPasseesTribunalCorrectionnel.length,
pourcentageFamillesTribunalCorrectionnel: percent(
famillesPasseesTribunalCorrectionnel.length,
familleResistantesOrEx.length
),
nbFamillesTribunalCorrectionnelProgramme:
famillesTribunalCorrectionnelProgramme.length,
nbFamillesProcedureCivile: famillesAvecProcedureCivile.length, nbFamillesProcedureCivile: famillesAvecProcedureCivile.length,
pourcentageFamillesProcedureCivile: percent( pourcentageFamillesProcedureCivile: percent(
famillesAvecProcedureCivile.length, famillesAvecProcedureCivile.length,

View File

@ -1,29 +0,0 @@
import {
Famille,
isResistantOverPeriod,
periodOfResistance,
} from "../../data/Famille";
import { Period } from "../../period/Period";
import { isPeriodContaining } from "../../period/isPeriodContaining";
import { ELStatsOverPeriod } from "./ELStats";
import { computePourcentageEntreeApresMiseEnDemeure } from "./computePourcentageEntreeApresMiseEnDemeure";
export function computeELStatsOverPeriod(
familles: Famille[],
period: Period
): ELStatsOverPeriod<number> {
const famillesEntreesSurPeriode = familles.filter((f) => {
const por = periodOfResistance(f);
return por != null && isPeriodContaining(period, por.start);
});
const nbFamilleResistantesSurPeriode = familles.filter((famille) =>
isResistantOverPeriod(famille, period)
).length;
const pourcentageEntreeApresMiseEnDemeureSurPeriode =
computePourcentageEntreeApresMiseEnDemeure(famillesEntreesSurPeriode);
return {
nbFamilleResistantesSurPeriode,
pourcentageEntreeApresMiseEnDemeureSurPeriode,
};
}