fix: Détection intelligente de l'année suivante pour les dates en janvier/février/mars

Problème: Quand on sélectionnait des dates en janvier 2026 depuis un contrat en décembre 2025, les dates étaient converties en janvier 2025.

Solution: Amélioration de la fonction parseFrenchedDate pour détecter automatiquement si une date est dans l'année suivante:
- Si le mois de la date est janvier/février/mars (1-3)
- ET que le mois du contexte (dateDebut/dateFin) est oct/nov/déc (10-12)
- Alors on utilise l'année suivante

Exemple: Contrat du 15/12/2025 au 20/01/2026
- Les dates de janvier seront correctement converties en 2026 au lieu de 2025
This commit is contained in:
odentas 2025-12-19 17:48:59 +01:00
parent c148c46796
commit ec3d0b3ad7

View file

@ -33,6 +33,10 @@ export function formatDateFr(isoStr: string): string {
/**
* Convertit une date française (DD/MM) en ISO (YYYY-MM-DD)
* Nécessite l'année de contexte
*
* Logique intelligente : si le mois de la date est janvier/février/mars (1-3)
* et que le mois du contexte est octobre/novembre/décembre (10-12),
* on suppose que c'est l'année suivante.
*/
export function parseFrenchedDate(frStr: string, yearContext: string): string {
const cleaned = frStr.trim();
@ -41,7 +45,16 @@ export function parseFrenchedDate(frStr: string, yearContext: string): string {
const [day, month] = cleaned.split("/");
if (!day || !month) return "";
const year = yearContext.split("-")[0];
let year = yearContext.split("-")[0];
const monthNum = parseInt(month, 10);
const contextMonthNum = parseInt(yearContext.split("-")[1], 10);
// Si la date est en janvier/février/mars ET que le contexte est en oct/nov/déc
// alors c'est probablement l'année suivante
if (monthNum >= 1 && monthNum <= 3 && contextMonthNum >= 10 && contextMonthNum <= 12) {
year = String(parseInt(year, 10) + 1);
}
return `${year}-${month.padStart(2, "0")}-${day.padStart(2, "0")}`;
}