← Retour à l'index

5. Mission

Cycle de vie complet de la mission KORIDO : 8 états, transitions manuelles et automatiques, démarrage à 2 étages, pause/reprise, light missions, suppression d'alertes pendant pause. 19 cas d'usage.

5.1 Automate 8 états

La mission passe par 8 états. Les transitions combinent des déclencheurs manuels (propriétaire, chauffeur) et des détections automatiques (moteur GPS). Le propriétaire peut annuler depuis n'importe quel état.

Diagramme 1 created assigned en_route_to_origin active paused arrived complèted cancelled owner assigne auto: mouvement vers origin >50km chauffeur: "chargement terminé" auto: sortie origin waypoint chauffeur confirmé à l'origine owner/driver signale problème #R WhatsApp auto: mouvement + corridor auto: entre dernier waypoint owner ferme manuellement owner annule depuis n'importe quel état (toujours manuel) Légende Déclencheur chauffeur / démarrage auto Détection automatique moteur Pause / problème signale Annulation (depuis tout état) Fermeture manuelle owner états terminaux

Table des transitions

TransitionDéclencheur préféréDétection automatique
created → assignedOwner assigne véhicule + chauffeur
assigned → en_route_to_originMouvement vers l'origine, distance > 50 km
assigned → activeChauffeur confirmé "chargement terminé"Camion sort du waypoint origin
en_route_to_origin → activeChauffeur confirmé à l'origineCamion entre dans le waypoint origin
active → pausedOwner ou chauffeur signale problèmeSystème détecte arrêt prolongé inhabituel, demande aux 2 acteurs
paused → activeOwner envoie #R sur WhatsAppMouvement repris + réentrée dans le corridor
active → arrived— (toujours auto)Camion entre dans le rayon du dernier waypoint destination
arrived → complètedOwner ferme manuellement— (toujours manuel)
* → cancelledOwner annule— (toujours manuel)

Schema : missions.status enum a 8 états. Colonnes ajoutees : paused_at, paused_reason, arrived_at, pause_count, total_pause_seconds.

UC 5.1 — Cycle 8 états

La mission traverse 8 états de created a complèted ou cancelled. Chaque transition a un déclencheur préféré (manuel) et une détection automatique de secours.

D-mission-lifecycle

UC 5.2 — Une seule mission active par véhicule

Index unique partiel sur missions(vehicle_id) WHERE status IN ('assigned','en_route_to_origin','active','paused'). Rejet API : "Ce véhicule a deja une mission active."

D-one-active-mission

UC 5.3 — Auto-detect en_route

Le moteur détecte un mouvement vers l'origine quand la distance diminue sous 50 km. Transition assigned → en_route_to_origin : ETA vers le point de chargement, prédiction carburant à l'arrivée.

auto-detect

5.2 Démarrage à 2 étages

Le démarrage de mission utilise deux couches de détection basées sur les waypoints imbriqués. Le port/entrepôt (rayon ~500m-1km) est imbriqué dans la ville (rayon 3-5km, rattachée au premier segment).

Diagramme 2 VILLE (waypoint city, 3-5 km) PORT / ENTREPÔT ~500m-1km K12 ÉTAPE 1 : suspected_start Notification owner + chauffeur Status mission : PAS de changement Réentrée port = reset à assigned DANS LA VILLE Chaque arrêt→mouvement : Push: "Départ mission?" Si confirm → active | sinon attendre ÉTAPE 2 : démarrage auto confirmé Sortie ville = départ confirmé Status → active "Mission K12 démarrée automatiquement (départ de Douala confirmé)." FAUX DÉPART (recovery) Owner signale un faux départ après démarrage auto Mission → reset à assigned Trips préservés, mission_id délié des trips Les données GPS restent dans le journal véhicule DÉCLENCHEUR PRÉFÉRÉ Chauffeur confirmé "chargement terminé" sur l'app → active

UC 5.4 — Démarrage manuel

Déclencheur préféré : le chauffeur confirme "chargement terminé" sur l'app. Transition directe assigned → active. Aucune ambiguïté.

chauffeur

UC 5.5 — Auto-start fallback

Si le chauffeur ne confirme pas : démarrage auto quand le camion sort du waypoint origin. Combinaison de 2 étages de détection pour éviter les faux positifs.

auto-detect

UC 5.6 — 2 étages de détection

(1) Sortie port = suspected_start : notification, PAS de changement de status. Réentrée port = reset. (2) Sortie ville = confirmed : status → active.

D-two-stage-autostart

UC 5.7 — Prompt chauffeur en ville

À chaque transition arrêt→mouvement dans la ville : push notification "K12 en mouvement dans Douala. Départ mission ?" Si confirmation → active. Sinon, attente du prochain cycle.

push notification

UC 5.8 — Faux départ (recovery)

L'owner signale un faux départ après le démarrage auto. Mission reset à assigned. Les trips sont préservés dans le journal mais mission_id est délié. Pas de perte de données GPS.

owner recovery

UC 5.17 — Camion s'éloigne de l'origine

Cron détecte : >2h après assignation, le camion ne s'approche pas du point de chargement (statique ou s'éloigne). Événement mission_delayed_start (info).

info

"K12 s'éloigne du point de chargement depuis 2h."

5.3 Pause et reprise

Scenario : Panne sur la route

  1. Le moteur détecte un arrêt prolongé inhabituel (hors corridor, moteur OFF, >2h)
  2. WhatsApp au propriétaire + push au chauffeur : "Camion K12 arrêté depuis 2h à [location]. Que se passe-t-il ?"
  3. Options de réponse : Panne / Route barree / Attente ordres / Controle / Personnel / Autre
  4. Sur réponse : mission → paused avec confirmation + liste des alertes supprimées + code de reprise #R
  5. Sans réponse : l'arrêt reste non labellisé, PAS d'auto-pause. Escalade après durée plus longue.

UC 5.9 — Pause mission

6 raisons de pause : Panne / Route barree / Attente ordres / Controle / Personnel / Autre. La pause génère un événement mission_paused (info) dans vehicle_events.

owner/driver D-mission-pause

UC 5.10 — Alertes pendant pause

Supprimées : corridor_deviation, unauthorized_stop (séquence). Actives : speeding, fuel_drain_anomaly, off_station_refueling, device_offline, towing_detected, power_disconnection.

suppression partielle

UC 5.11 — Reprise mission

3 déclencheurs : (1) Owner envoie #R sur WhatsApp, (2) chauffeur via l'app, (3) auto-detect : mouvement repris + réentrée dans le corridor. Événement mission_resumed.

owner auto-detect

Matrice de suppression pendant pause

Diagramme 3 Comportement des alertes quand mission.status = 'paused' SUPPRIMÉES (liées au corridor/séquence) corridor_deviation SUPPRIME unauthorized_stop (séquence waypoint) SUPPRIME Le camion est immobilise pour une raison connue. Les déviations de corridor ne sont plus pertinentes. ACTIVES (sécurité / matériel / carburant) speeding ACTIF fuel_drain_anomaly ACTIF off_station_refueling ACTIF device_offline / vehicle_offline_extended ACTIF towing_detected ACTIF power_disconnection ACTIF Le matériel, le carburant et la vitesse restent surveilles. Un camion en panne peut quand même être remorqué ou volé.

5.4 Arrivée, complétion et annulation

UC 5.12 — Arrived (toujours auto)

Le camion entre dans le rayon du dernier waypoint destination. Transition automatique active → arrived. L'owner est notifié. Événement destination_reached.

auto-detect

Le propriétaire voit "K12 arrivé à N'Djamena" sur le dashboard et WhatsApp.

UC 5.13 — Completed (toujours manuel)

L'owner ferme la mission manuellement après vérification : paiement reçu, documents signés. La fermeture automatique balayerait les tickets d'action non résolus.

owner

États terminaux : complèted, cancelled

UC 5.14 — Cancelled (toujours manuel)

L'owner annule depuis n'importe quel état non-terminal. Les données (trips, stops, positions) restent dans le journal. Seul le lien mission est clos.

owner depuis tout état

5.5 Light missions

Une light mission se crée en 10 secondes : choisir un véhicule, choisir une destination. Tout le reste est optionnel. Si la destination est sur un corridor connu, le système assigne automatiquement la séquence de waypoints et le polygone corridor.

UC 5.15 — Light mission sur corridor

Vehicle_id + 1 destination. Auto-route si corridor connu : le système détermine la position actuelle, cherche les routes connues vers la destination, assigne la séquence de waypoints + polygone corridor.

D-light-missions

Évolutive vers une mission complète à tout moment (ajouter waypoints, corridor, dates). Même mission_id, pas de perte de données.

UC 5.16 — Light mission hors corridor

Destination inconnue → journal uniquement. Pas de corridor, pas de segments, pas d'ETA. Le pin-drop est sauvegarde comme waypoint custom pour une utilisation future.

D-light-mission-off-corridor

"Une light mission sans polygone corridor fournit un suivi journal mais pas une surveillance garde."

Mission complète vs Light mission

FonctionnalitéMission complèteLight mission
Suivi de positionOuiOui
Événements carburantOuiOui
Arrêts + labelsOuiOui
Notification d'arrivéeOuiOui
Polygone corridorOuiSi corridor connu
Corridor deviationOuiNon (si hors corridor)
Enregistrements de segmentOuiNon (si hors corridor)
ETA prédictiveOuiNon (si hors corridor)
Séquence de waypointsComplète1 destination min
ÉvolutiveOui, même mission_id
Temps de creation2-5 min~10 secondes

5.6 Séquence de mission : Douala → N'Djamena

Diagramme 4 D Douala origin (port) DÉPART ~620 km N Ngaoundere étape ~300 km G Garoua étape ~450 km K Kousseri frontière Cameroun → Tchad ~15 km NJ N'Djamena destination ARRIVÉE segment_record 1 segment_record 2 segment_record 3 segment_record 4 role: origin role: waypoint role: waypoint role: waypoint role: destination seq: 10 seq: 20 seq: 30 seq: 40 seq: 50

Séquence de waypoints avec numérotation gappée (10, 20, 30, 40, 50) pour faciliter les insertions. L'entrée dans le dernier waypoint (role: destination) déclenche arrived automatiquement. Chaque paire de waypoints consécutifs génère un segment_record à l'arrivée au second waypoint. Forward-only matching (currentSéquencePosition) pour éviter les faux matchs sur les aller-retours.

5.7 SLA et ETA pendant pause

UC 5.18 — Mission SLA breach

Quand la deadline est dépassée : mission_sla_breach (critical). Ne s'auto-resolve jamais — une violation SLA est un fait. Nécessite une revue humaine.

critical

Cron check | Notification immediate : WhatsApp + Dashboard + Portal

UC 5.19 — ETA pendant pause

Pendant une pause : "ETA en attente — mission en pause" sur le portail de suivi. Si l'historique existe, ETA += durée estimée de réparation (moyenne flotte). Sinon, aucune prédiction.

portail

ETA recalculé = now + sum(p50_driving[restants]) + sum(avg_stop[restants]) + pause_duration

UC 5.18b — Retard prédit

À chaque entrée de waypoint, l'ETA projetée est recalculée. Si elle dépasse la deadline : mission_delay_predicted (immediate). Si le camion rattrape, auto-resolve.

auto-detect auto-resolve

5.8 Notification routing mission

ÉvénementModeWhatsAppDashboardPortalDriver push
mission_sla_breachimmediateouiouioui
mission_delay_predictedimmediateouiouioui
mission_pausedimmediateouiouiouipush
mission_resumednoneouiouipush
destination_reachedimmediateouioui
trip_startednoneouioui
trip_complètednoneouioui
unauthorized_stopimmediateouiouipush
stop_labellednoneoui

Le driver push est indépendant du WhatsApp owner : les deux peuvent se déclencher pour le même événement. Les événements avec Driver = push sont : unauthorized_stop (label prompt), low_fuel_driving, towing_detected, driver_alarm_violation, mission_paused, mission_resumed.

5.9 Philosophie produit

KORIDO surveille pour le propriétaire afin que le propriétaire n'ait pas à surveiller le camion. Le système est proactif : détecter, classifier, notifier, et avertir uniquement quand l'attention est nécessaire.

Phase véhiculeMission ?Ce que KORIDO fait
Transit pré-missionAssignée, pas démarréeETA vers l'origine, alerte si retard, surveillance position
Mission activeEn coursSurveillance complète : corridor, waypoints, carburant, ETA, segments, événements
Ordres informelsAucune (instructions verbales)Position, proximite waypoints, notifications, historique
ReposAucunePosition, batterie, alertes offline, détection de gap

Mission-Optional : le moteur tourne de façon identique avec ou sans mission active. mission_id est nullable partout. Pas de mission = pas de polygone corridor, donc detectCorridorDeviation ne retourne rien. Tout est piloté par des FK nullables, pas des branches if/else.

Deux flux de télémétrie : télémétrie machine (GPS, capteurs, moteur) = automatique, toujours active. Télémétrie humaine (app chauffeur) = manuelle, événementielle. L'app chauffeur est la couche de labellisation — l'humain sur la route qui confirme, annote et classifie ce que la machine détecte. Conception pour dégradation gracieuse : fonctionne sans input chauffeur, fonctionne mieux avec.