feat: fiche integration activité récente
parent
d82268779b
commit
a5b2eeca75
|
@ -15,6 +15,7 @@ export type Famille = Readonly<{
|
|||
Sortie: Date | null;
|
||||
// sorted by date asc
|
||||
Evenements: EvenementFamille[];
|
||||
DerniereModification: Date;
|
||||
}>;
|
||||
|
||||
export function periodOfResistance(
|
||||
|
@ -42,6 +43,16 @@ export function isResistant(
|
|||
return por !== null && isPeriodContaining(por, date);
|
||||
}
|
||||
|
||||
export function isIntegration(famille: Famille) {
|
||||
return (
|
||||
famille.Statut === "Se questionne" ||
|
||||
famille.Statut === "Déclaration validée - Attente éléments" ||
|
||||
famille.Statut === "Rédaction Déclaration" ||
|
||||
famille.Statut === "Désobéissance décidée" ||
|
||||
famille.Statut === "À préciser"
|
||||
);
|
||||
}
|
||||
|
||||
export function isExResistant(
|
||||
family: Famille,
|
||||
date: Date = new Date(Date.now())
|
||||
|
|
|
@ -100,6 +100,10 @@ function buildFamily(
|
|||
Integration: datePropertyToDate(pageProperties, "Intégration"),
|
||||
Sortie: datePropertyToDate(pageProperties, "Sortie"),
|
||||
Evenements: familyEvents.filter((fe) => fe.notionIdFamille === page.id),
|
||||
DerniereModification: datePropertyToDate(
|
||||
pageProperties,
|
||||
"Dernière modification"
|
||||
)!,
|
||||
};
|
||||
return family;
|
||||
}
|
||||
|
|
|
@ -6,13 +6,19 @@ export function datePropertyToDate(
|
|||
propName: string
|
||||
): Date | null {
|
||||
const propValue = extractPagePropertyValue(pageProperties, propName);
|
||||
if (propValue.type !== "date") {
|
||||
throw new Error(
|
||||
`Property ${propName} was expected to have type "date" but got "${propValue.type}".`
|
||||
);
|
||||
}
|
||||
if (propValue.type === "date") {
|
||||
if (propValue.date === null) {
|
||||
return null;
|
||||
}
|
||||
return new Date(Date.parse(propValue.date.start));
|
||||
} else if (propValue.type === "last_edited_time") {
|
||||
if (propValue.last_edited_time === null) {
|
||||
return null;
|
||||
}
|
||||
return new Date(Date.parse(propValue.last_edited_time));
|
||||
} else {
|
||||
throw new Error(
|
||||
`Property ${propName} was expected to have type "date" or "last_edited_time" but got "${propValue.type}".`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,34 +3,34 @@ import { StatsType } from "../StatsDesc";
|
|||
export const statsGeneralesDesc = {
|
||||
label: "Stats Générales",
|
||||
stats: {
|
||||
nbFamillesActuellementResistantes: {
|
||||
label: "Nb Familles actuellement Résistantes",
|
||||
nbFamillesResistantesActuelles: {
|
||||
label: "Nb Familles Résistantes actuelles",
|
||||
},
|
||||
nbFamillesResistantesDepuisLeDebut: {
|
||||
label: "Nb Familles Résistantes depuis le début du mouvement",
|
||||
nbFamillesResistantesActuellesOuPassees: {
|
||||
label: "Nb Familles Résistantes actuelles ou passées",
|
||||
},
|
||||
dureeResistanceMoyenne: {
|
||||
label: "Duree de résistantes moyenne",
|
||||
label: "Durée moyenne de résistance",
|
||||
unit: " jours",
|
||||
},
|
||||
dureeResistanceMedianne: {
|
||||
label: "Duree de résistantes médiane",
|
||||
label: "Durée médiane de résistance",
|
||||
unit: " jours",
|
||||
},
|
||||
contexteEntree: {
|
||||
label: "Context d'entrée des familles",
|
||||
label: "Contexte d'entrée des familles",
|
||||
stats: {
|
||||
pasDeDemandePleinDroit: {
|
||||
label: "Nb Familles Pas de demande (Plein droit)",
|
||||
label: "Pas de demande (Plein droit)",
|
||||
},
|
||||
pasDeDemande: {
|
||||
label: "Nb Familles Pas de demande",
|
||||
label: "Pas de demande",
|
||||
},
|
||||
apresRefus: {
|
||||
label: "Nb Familles Après refus - NbFamilles",
|
||||
label: "Après refus",
|
||||
},
|
||||
apresMiseEnDemeure: {
|
||||
label: "Nb Familles Après mise en demeure",
|
||||
label: "Après mise en demeure",
|
||||
},
|
||||
|
||||
apresPoursuiteProcureur: {
|
||||
|
@ -38,6 +38,9 @@ export const statsGeneralesDesc = {
|
|||
},
|
||||
},
|
||||
},
|
||||
nbFicheIntegrationActiviteRecente: {
|
||||
label: "Nb fiche d'intégration avec une activité < 30j",
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import { differenceInDays } from "date-fns";
|
||||
import {
|
||||
dureeResistanceInDays,
|
||||
Famille,
|
||||
isExResistant,
|
||||
isIntegration,
|
||||
isResistant,
|
||||
} from "../../../data/Famille";
|
||||
import { average } from "../../../utils/math/average";
|
||||
|
@ -15,12 +17,18 @@ export function computeStatsGenerales(familles: Famille[]): StatsGenerales {
|
|||
const dureesResistances = famillesResistantesOrEx.map(
|
||||
(f) => dureeResistanceInDays(f)!
|
||||
);
|
||||
const now = new Date();
|
||||
const fichesIntegrationRecementModifiees = familles.filter(
|
||||
(f) =>
|
||||
isIntegration(f) && differenceInDays(now, f.DerniereModification) <= 30
|
||||
);
|
||||
const statsGenerales: StatsGenerales = {
|
||||
nbFamillesActuellementResistantes: familles.filter((f) => isResistant(f))
|
||||
nbFamillesResistantesActuelles: familles.filter((f) => isResistant(f))
|
||||
.length,
|
||||
nbFamillesResistantesDepuisLeDebut: famillesResistantesOrEx.length,
|
||||
nbFamillesResistantesActuellesOuPassees: famillesResistantesOrEx.length,
|
||||
dureeResistanceMedianne: median(dureesResistances),
|
||||
dureeResistanceMoyenne: average(dureesResistances),
|
||||
|
||||
contexteEntree: {
|
||||
pasDeDemandePleinDroit: famillesResistantesOrEx.filter(
|
||||
(f) => f.ContexteEntree === "Pas de demande (Plein droit)"
|
||||
|
@ -38,6 +46,8 @@ export function computeStatsGenerales(familles: Famille[]): StatsGenerales {
|
|||
(f) => f.ContexteEntree === "Après poursuite procureur"
|
||||
).length,
|
||||
},
|
||||
nbFicheIntegrationActiviteRecente:
|
||||
fichesIntegrationRecementModifiees.length,
|
||||
};
|
||||
return statsGenerales;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue