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