Cœur du parcours client. Deux types de parcours : A (Standard — admin propose des artisans) et B (Grands travaux — artisans soumettent des devis). Workflow complet avec propositions, devis et missions.
Le client décrit son besoin : catégorie, prestation, description, adresse, type d'intervention (urgente/planifiée), parcours souhaité (A ou B), photos éventuelles.
POST /api/v1/demandes Parcours: A_standard | B_grands_travauxTypeIntervention: urgente | planifieeOrigine: parcours_guide | navigation_directeScénario : Kofi a une fuite d'eau. Il crée une demande en catégorie 'Plomberie', prestation 'Débouchage évier', parcours A, intervention urgente.
La demande est créée en statut brouillon, puis soumise (en_attente_validation). L'administrateur valide la demande et choisit le mode d'attribution.
PATCH /api/v1/demandes/{id}/soumettrePUT /api/v1/admin/demandes/{id}/statut StatutDemande: brouillon → en_attente_validation → valideeModeAttribution: standard | direct_premiumScénario : Kofi soumet sa demande. L'admin vérifie que la description est claire, valide la demande, et choisit le mode standard pour que des artisans puissent être proposés.
L'administrateur sélectionne des artisans vérifiés et disponibles dans la zone géographique de la demande, et les propose au client.
GET /api/v1/admin/demandes/{id}/propositionsPOST /api/v1/admin/demandes/{id}/propositionsScénario : L'admin trouve 3 plombiers disponibles à Cotonou. Il les propose à Kofi. Le statut de la demande passe à 'liste_proposee'.
Les artisans consultent la demande, évaluent le travail et soumettent un devis détaillé avec montant main-d'œuvre et lignes de matériaux.
POST /api/v1/demandes/{id}/solliciter StatutDevis: en_attente | accepte | refuseScénario : Pour des grands travaux, 3 artisans soumettent leurs devis. Chacun détaille le coût de la main-d'œuvre et le prix des matériaux nécessaires.
Le client consulte les propositions ou devis et sélectionne l'artisan de son choix.
PUT /api/v1/demandes/{id}/propositions/{propositionId}/selectionnerGET /api/v1/demandes/{id}/propositions StatutProposition: proposee | selectionnee | non_retenueScénario : Kofi compare les 3 propositions. Il sélectionne le plombier avec le meilleur rapport qualité-prix. La proposition passe à 'selectionnee', les autres à 'non_retenue'.
Une mission est automatiquement créée. Le travail commence. L'artisan marque la mission comme terminée quand le travail est fini.
POST /api/v1/missions/{id}/terminer StatutMission: en_cours → en_attente_reception → terminee/litigeScénario : Le plombier intervient chez Kofi, répare la fuite. Il marque la mission 'terminée' (en_attente_reception). Kofi doit confirmer ou contester.
Le client inspecte le travail. Si satisfait, il confirme (mission → terminee). Sinon, il conteste (mission → litige, l'admin intervient).
POST /api/v1/missions/{id}/confirmerPOST /api/v1/missions/{id}/contesterScénario : Kofi vérifie la réparation. Tout est en ordre. Il confirme. La mission est 'terminee'. L'artisan reçoit sa note et évaluation.
Le client peut annuler sa demande à tout moment avant la sélection de l'artisan.
PUT /api/v1/demandes/{id}/annuler StatutDemande: annuleeScénario : Kofi a trouvé un plombier par lui-même. Il annule sa demande. Celle-ci passe à 'annulee'.