feat: adapte au statut Allié

This commit is contained in:
Sébastien Arod 2025-09-24 15:50:03 +02:00
parent f979398936
commit a0f0841e99
10 changed files with 58 additions and 22 deletions

View file

@ -5,6 +5,7 @@ import { isPeriodContaining } from "../period/isPeriodContaining";
import { ContexteEntreeDC } from "./ContexteEntreeDC";
import { EvenementFamille } from "./EvenementFamille";
import {
statutAllie,
statutExResistant,
StatutFamille,
statutResistant,
@ -50,6 +51,7 @@ export function periodOfResistance(
): Period | null {
if (
family.Statut !== statutResistant &&
family.Statut !== statutAllie &&
family.Statut !== statutExResistant
) {
return null;
@ -72,7 +74,7 @@ export function isResistant(
return por !== null && isPeriodContaining(por, date);
}
export function isExResistant(
export function isExResistantOrAllie(
family: Famille,
date: Date = new Date(Date.now())
): boolean {

View file

@ -11,10 +11,12 @@ export const statutsPreIntegration = ["en réflexion"] as const;
export const statutsIntegrationEnEchec = ["Abandon", "Incompatible"] as const;
export const statutResistant = "Résistant·e";
export const statutExResistant = "Ex résistant·e";
export const statutAllie = "Allié·e";
export const statutsFamille = [
...statutsPreIntegration,
statutResistant,
statutExResistant,
statutAllie,
...statutsIntegrationEnCours,
...statutsIntegrationEnEchec,
] as const;

View file

@ -1,5 +1,9 @@
import { Famille } from "../../Famille";
import { integrationAFinaliser, statutExResistant } from "../../StatutFamille";
import {
integrationAFinaliser,
statutAllie,
statutExResistant,
} from "../../StatutFamille";
import { DonneesNettoyees } from "../fwk/DonneesNettoyees";
import { nettoyerFamilles } from "./nettoyerFamilles";
import { msgDonneeCorrigee } from "../fwk/MessageDeNettoyage";
@ -9,11 +13,13 @@ export function corrigerFamilleExResistanteSansDateIntegration(
): DonneesNettoyees {
return nettoyerFamilles(
familles,
(f) => f.Statut === statutExResistant && f.Integration === null,
(f) =>
(f.Statut === statutExResistant || f.Statut === statutAllie) &&
f.Integration === null,
(f) => ({ ...f, Statut: integrationAFinaliser }),
(f) =>
msgDonneeCorrigee(
`Famille ${f.Titre} - avec un statut Ex Résistant maos sans date d'intégration => Le statut est remplacé par "${integrationAFinaliser}" pour le calcul des statistics`
`Famille ${f.Titre} - avec un statut "${f.Statut}" mais sans date d'intégration => Le statut est remplacé par "${integrationAFinaliser}" pour le calcul des statistics`
)
);
}

View file

@ -1,5 +1,9 @@
import { Famille } from "../../Famille";
import { statutExResistant, statutResistant } from "../../StatutFamille";
import {
statutAllie,
statutExResistant,
statutResistant,
} from "../../StatutFamille";
import { DonneesNettoyees } from "../fwk/DonneesNettoyees";
import { msgDonneeCorrigee } from "../fwk/MessageDeNettoyage";
import { nettoyerFamilles } from "./nettoyerFamilles";
@ -9,11 +13,13 @@ export function corrigerFamilleExResistanteSansDateSortie(
): DonneesNettoyees {
return nettoyerFamilles(
familles,
(f) => f.Statut === statutExResistant && f.Sortie === null,
(f) =>
(f.Statut === statutExResistant || f.Statut === statutAllie) &&
f.Sortie === null,
(f) => ({ ...f, Statut: statutResistant }),
(f) =>
msgDonneeCorrigee(
`Famille ${f.Titre} - avec un statut Ex Résistant maos sans date de Sortie => Le statut est remplacé par "${statutResistant}" pour le calcul des statistics`
`Famille ${f.Titre} - avec un statut "${f.Statut}" mais sans date de Sortie => Le statut est remplacé par "${statutResistant}" pour le calcul des statistics`
)
);
}

View file

@ -1,11 +1,15 @@
import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import {
Famille,
isExResistantOrAllie,
isResistant,
} from "../../../data/Famille";
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
import { StatsAutres } from "./StatsAutres";
export function computeStatsAutres(familles: Famille[]): StatsAutres {
const famillesResistantesOuEx = familles.filter(
(f) => isResistant(f) || isExResistant(f)
(f) => isResistant(f) || isExResistantOrAllie(f)
);
const statsAutres: StatsAutres = {
nbFamillesControleFiscal: nbFamillesAvecPagesLiees(

View file

@ -4,7 +4,11 @@ import {
isInformationPreoccupante,
isProcedureCivile,
} from "../../../data/EvenementFamille";
import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import {
Famille,
isExResistantOrAllie,
isResistant,
} from "../../../data/Famille";
import {
isEvtTypeProcedurePenale,
isEvtTypeProcedurePenaleHorsGendarmerie,
@ -22,7 +26,7 @@ export function computeStatsDepartementales(
departements: Departement[]
): StatDepartementales {
const famillesResistantesOuEx = familles.filter(
(f) => isResistant(f) || isExResistant(f)
(f) => isResistant(f) || isExResistantOrAllie(f)
);
const famillesByDepartement: Record<string, Famille[]> = groupBy(
famillesResistantesOuEx,

View file

@ -1,7 +1,7 @@
import {
dureeResistanceInDays,
Famille,
isExResistant,
isExResistantOrAllie,
isResistant,
} from "../../../data/Famille";
import { average } from "../math/average";
@ -13,7 +13,7 @@ import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
export function computeStatsGenerales(familles: Famille[]): StatsGenerales {
const famillesResistantesOrEx = familles.filter(
(f) => isResistant(f) || isExResistant(f)
(f) => isResistant(f) || isExResistantOrAllie(f)
);
const famillesResistantes = familles.filter((f) => isResistant(f));

View file

@ -1,4 +1,8 @@
import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import {
Famille,
isExResistantOrAllie,
isResistant,
} from "../../../data/Famille";
import { generateELMonths } from "../../../period/generateELMonths";
import { isPeriodContaining } from "../../../period/isPeriodContaining";
import { Period } from "../../../period/Period";
@ -45,7 +49,7 @@ export function computeStatsGeneralesMensuelles(
function nbEntreeSurPeriode(familles: Famille[], period: Period): number {
return familles.filter(
(f) =>
(isResistant(f) || isExResistant(f)) &&
(isResistant(f) || isExResistantOrAllie(f)) &&
f.Integration &&
isPeriodContaining(period, f.Integration)
).length;
@ -54,7 +58,7 @@ function nbEntreeSurPeriode(familles: Famille[], period: Period): number {
function nbSortieSurPeriode(familles: Famille[], period: Period): number {
return familles.filter(
(f) =>
(isResistant(f) || isExResistant(f)) &&
(isResistant(f) || isExResistantOrAllie(f)) &&
f.Sortie &&
isPeriodContaining(period, f.Sortie)
).length;
@ -66,7 +70,7 @@ function nbFamillesResistanteAFinPeriode(
): number {
return familles.filter(
(f) =>
(isResistant(f) || isExResistant(f)) &&
(isResistant(f) || isExResistantOrAllie(f)) &&
f.Integration &&
f.Integration < period.end &&
(!f.Sortie || f.Sortie > period.end)
@ -79,7 +83,7 @@ function nbFamillesExResistanteAFinPeriode(
): number {
return familles.filter(
(f) =>
(isResistant(f) || isExResistant(f)) &&
(isResistant(f) || isExResistantOrAllie(f)) &&
f.Integration &&
f.Integration < period.end &&
f.Sortie &&

View file

@ -6,7 +6,11 @@ import {
EvenementFamille,
isProcedurePenaleHorsGendarmerie,
} from "../../../data/EvenementFamille";
import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import {
Famille,
isExResistantOrAllie,
isResistant,
} from "../../../data/Famille";
import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEvenements";
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { StatsPenales } from "./StatsPenales";
@ -30,7 +34,7 @@ export type FamilleAvecInfoTribunaux = Famille & {
export function computeStatsPenales(familles: Famille[]): StatsPenales {
const famillesResistantesOuEx = familles.filter(
(f) => isResistant(f) || isExResistant(f)
(f) => isResistant(f) || isExResistantOrAllie(f)
);
const famillesMisesEnDemeure = filterFamillesWithOneOfEvenementsOfType(
famillesResistantesOuEx,

View file

@ -3,7 +3,11 @@ import {
isInformationPreoccupante,
isProcedureCivile,
} from "../../../data/EvenementFamille";
import { Famille, isExResistant, isResistant } from "../../../data/Famille";
import {
Famille,
isExResistantOrAllie,
isResistant,
} from "../../../data/Famille";
import { filterFamillesWithOneOfEvenements } from "../filterFamillesWithOneOfEvenements";
import { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
@ -11,7 +15,7 @@ import { StatsSociales } from "./StatsSociales";
export function computeStatsSociales(familles: Famille[]): StatsSociales {
const famillesResistantesOuEx = familles.filter(
(f) => isResistant(f) || isExResistant(f)
(f) => isResistant(f) || isExResistantOrAllie(f)
);
const now = new Date();
const statsCiviles: StatsSociales = {