feat(prepared-trip-candidates): implement allowChaining rules and improve...
Implémentation de la logique métier de sélection des chauffeurs candidats pour les trajets préparés, avec priorité sur le chaînage (allowChaining) et amélioration du contexte de calcul du trajet.
Logique allowChaining
- Si allowChaining = false : seuls les chauffeurs sans affectation sur les jours et créneaux horaires ciblés sont considérés disponibles.
- Si allowChaining = true : un chauffeur peut être retenu en enchaînement uniquement si : il n’y a pas de chevauchement horaire bloquant,
- le gap temporel entre trajets respecte la limite (maxDurationMinutes, défaut 60 min),
- la distance entre fin/début de trajets respecte le seuil (maxDistanceKm, défaut 15 km, calcul haversine).
- En cas de données horaires ou géographiques manquantes, la décision reste prudente (non-éligible au chaînage).
Logique de récupération des chauffeurs
- Construction du pool de chauffeurs sur la fenêtre de préparation (dates de service min/max).
- Préfiltrage optionnel selon les paramètres d’optimisation (notamment distance max domicile → départ du trajet).
- Préchargement des absences par jour de service distinct pour éviter des appels répétitifs et fiabiliser le scoring multi-jours.
Mises à jour liées à la polyline / géométrie de trajet
- Renforcement de la résolution des points de départ/arrivée du trajet cible (persisté ou preview) pour alimenter correctement les contrôles de distance de chaînage.
- Harmonisation de l’exploitation de la géométrie du trajet (sens départ/retour, extrémités) afin d’évaluer le chaînage sur des points cohérents avec le parcours calculé.