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

View file

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

View file

@ -1,5 +1,9 @@
import { Famille } from "../../Famille"; import { Famille } from "../../Famille";
import { integrationAFinaliser, statutExResistant } from "../../StatutFamille"; import {
integrationAFinaliser,
statutAllie,
statutExResistant,
} from "../../StatutFamille";
import { DonneesNettoyees } from "../fwk/DonneesNettoyees"; import { DonneesNettoyees } from "../fwk/DonneesNettoyees";
import { nettoyerFamilles } from "./nettoyerFamilles"; import { nettoyerFamilles } from "./nettoyerFamilles";
import { msgDonneeCorrigee } from "../fwk/MessageDeNettoyage"; import { msgDonneeCorrigee } from "../fwk/MessageDeNettoyage";
@ -9,11 +13,13 @@ export function corrigerFamilleExResistanteSansDateIntegration(
): DonneesNettoyees { ): DonneesNettoyees {
return nettoyerFamilles( return nettoyerFamilles(
familles, familles,
(f) => f.Statut === statutExResistant && f.Integration === null, (f) =>
(f.Statut === statutExResistant || f.Statut === statutAllie) &&
f.Integration === null,
(f) => ({ ...f, Statut: integrationAFinaliser }), (f) => ({ ...f, Statut: integrationAFinaliser }),
(f) => (f) =>
msgDonneeCorrigee( 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 { Famille } from "../../Famille";
import { statutExResistant, statutResistant } from "../../StatutFamille"; import {
statutAllie,
statutExResistant,
statutResistant,
} from "../../StatutFamille";
import { DonneesNettoyees } from "../fwk/DonneesNettoyees"; import { DonneesNettoyees } from "../fwk/DonneesNettoyees";
import { msgDonneeCorrigee } from "../fwk/MessageDeNettoyage"; import { msgDonneeCorrigee } from "../fwk/MessageDeNettoyage";
import { nettoyerFamilles } from "./nettoyerFamilles"; import { nettoyerFamilles } from "./nettoyerFamilles";
@ -9,11 +13,13 @@ export function corrigerFamilleExResistanteSansDateSortie(
): DonneesNettoyees { ): DonneesNettoyees {
return nettoyerFamilles( return nettoyerFamilles(
familles, familles,
(f) => f.Statut === statutExResistant && f.Sortie === null, (f) =>
(f.Statut === statutExResistant || f.Statut === statutAllie) &&
f.Sortie === null,
(f) => ({ ...f, Statut: statutResistant }), (f) => ({ ...f, Statut: statutResistant }),
(f) => (f) =>
msgDonneeCorrigee( 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 { filterFamillesWithOneOfEvenementsOfType } from "../filterFamillesWithOneOfEvenementsOfType";
import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees"; import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
import { StatsAutres } from "./StatsAutres"; import { StatsAutres } from "./StatsAutres";
export function computeStatsAutres(familles: Famille[]): StatsAutres { export function computeStatsAutres(familles: Famille[]): StatsAutres {
const famillesResistantesOuEx = familles.filter( const famillesResistantesOuEx = familles.filter(
(f) => isResistant(f) || isExResistant(f) (f) => isResistant(f) || isExResistantOrAllie(f)
); );
const statsAutres: StatsAutres = { const statsAutres: StatsAutres = {
nbFamillesControleFiscal: nbFamillesAvecPagesLiees( nbFamillesControleFiscal: nbFamillesAvecPagesLiees(

View file

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

View file

@ -1,7 +1,7 @@
import { import {
dureeResistanceInDays, dureeResistanceInDays,
Famille, Famille,
isExResistant, isExResistantOrAllie,
isResistant, isResistant,
} from "../../../data/Famille"; } from "../../../data/Famille";
import { average } from "../math/average"; import { average } from "../math/average";
@ -13,7 +13,7 @@ import { nbFamillesAvecPagesLiees } from "../nbFamillesAvecPagesLiees";
export function computeStatsGenerales(familles: Famille[]): StatsGenerales { export function computeStatsGenerales(familles: Famille[]): StatsGenerales {
const famillesResistantesOrEx = familles.filter( const famillesResistantesOrEx = familles.filter(
(f) => isResistant(f) || isExResistant(f) (f) => isResistant(f) || isExResistantOrAllie(f)
); );
const famillesResistantes = familles.filter((f) => isResistant(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 { generateELMonths } from "../../../period/generateELMonths";
import { isPeriodContaining } from "../../../period/isPeriodContaining"; import { isPeriodContaining } from "../../../period/isPeriodContaining";
import { Period } from "../../../period/Period"; import { Period } from "../../../period/Period";
@ -45,7 +49,7 @@ export function computeStatsGeneralesMensuelles(
function nbEntreeSurPeriode(familles: Famille[], period: Period): number { function nbEntreeSurPeriode(familles: Famille[], period: Period): number {
return familles.filter( return familles.filter(
(f) => (f) =>
(isResistant(f) || isExResistant(f)) && (isResistant(f) || isExResistantOrAllie(f)) &&
f.Integration && f.Integration &&
isPeriodContaining(period, f.Integration) isPeriodContaining(period, f.Integration)
).length; ).length;
@ -54,7 +58,7 @@ function nbEntreeSurPeriode(familles: Famille[], period: Period): number {
function nbSortieSurPeriode(familles: Famille[], period: Period): number { function nbSortieSurPeriode(familles: Famille[], period: Period): number {
return familles.filter( return familles.filter(
(f) => (f) =>
(isResistant(f) || isExResistant(f)) && (isResistant(f) || isExResistantOrAllie(f)) &&
f.Sortie && f.Sortie &&
isPeriodContaining(period, f.Sortie) isPeriodContaining(period, f.Sortie)
).length; ).length;
@ -66,7 +70,7 @@ function nbFamillesResistanteAFinPeriode(
): number { ): number {
return familles.filter( return familles.filter(
(f) => (f) =>
(isResistant(f) || isExResistant(f)) && (isResistant(f) || isExResistantOrAllie(f)) &&
f.Integration && f.Integration &&
f.Integration < period.end && f.Integration < period.end &&
(!f.Sortie || f.Sortie > period.end) (!f.Sortie || f.Sortie > period.end)
@ -79,7 +83,7 @@ function nbFamillesExResistanteAFinPeriode(
): number { ): number {
return familles.filter( return familles.filter(
(f) => (f) =>
(isResistant(f) || isExResistant(f)) && (isResistant(f) || isExResistantOrAllie(f)) &&
f.Integration && f.Integration &&
f.Integration < period.end && f.Integration < period.end &&
f.Sortie && f.Sortie &&

View file

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

View file

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