DiddiFood — décisions à prendre avant le gel du code du 18 novembre 2026
Résolutions validées le 27 octobre 2026
Les décisions suivantes remplacent les questions historiques encore visibles plus bas dans ce document :
- Courriel paiement : ne pas le rendre obligatoire à la commande. Le champ
de préparation online est optionnel; Food utilise le téléphone du payeur
authentifié et transmet une valeur technique
<digits>@diddifree.comsi aucun e-mail fiable n'est disponible. - Non-réponse restaurant :
respond_byest fixé à cinq minutes par défaut; Food annule automatiquement une commandeplacedéchue avecrestaurant_unresponsive. - Suivi et échec de livraison : DiddiSend reste la source de vérité et décide de la suite. Food expose uniquement une projection client et ne décide pas de nouvelle tentative, d'annulation ou de remboursement.
- Remboursement : tout remboursement approuvé passe par DiddiPay, y compris une commande initialement cash. Aucun règlement cash manuel dans Food.
- Images, idempotence plat et lecture de note : inclus dans le MVP du lot du 27 octobre 2026.
- Filtres avancés, rayon géographique et ventilation détaillée par commande : V1, pas un blocage MVP.
Relevé du 11 octobre 2026 : code relu et statuts Jira revérifiés ce jour. Même méthode et mêmes consignes de triage que le relevé Common et DiddiGo du 9 octobre.
Écart de classification, à signaler avant lecture. Les 31 use cases DiddiFood portent la phase
Latersur les quatre axes du backlog du 14/09. Le planning du 09/10 place pourtant PAR-024 à PAR-027 au MVP, avec les livrables BE020 à BE023 en priorité P0 et P1 sur la fenêtre du 14 au 23 octobre, etPROD-001énonce que Go, Send et Food lancent leurs parcours essentiels à Abidjan. Ce document suit le planning, source de spécification principale, et ne filtre donc pas sur la phase du backlog. La divergence elle-même est portée en question ci-dessous.
28 questions restent à trancher, sur 59 points relevés. Les trois critères du focus MVP :
- une contradiction bloquante entre le code existant et le parcours utilisateur ;
- un comportement métier qui bloque le déroulement d'une commande ou d'une course ;
- un cas limite qui empêche d'aller au bout d'un parcours principal.
Le reste est fermé : 7 questions de valeur dont le défaut du code fait foi et part en variable d'environnement, 0 sujets légaux traités par procédure manuelle au support, 24 hors des trois critères. Tout est listé en fin de document, rien n'est écarté en silence.
| Axe | Questions |
|---|---|
| Décisions produit | 22 |
| Décisions techniques | 6 |
| Total | 28 |
| Parcours | Attendu | Questions |
|---|---|---|
PAR-024 |
Choisir et commander un repas | 9 |
PAR-025 |
Livrer avec DiddiSend | 12 |
PAR-026 |
Recevoir ses gains et retirer | 3 |
PAR-027 |
Litiges Food | 4 |
Décisions produit
PAR-024 — Choisir et commander un repas
Ce que le planning attend. Trouve un restaurant, voit plats/prix/dispos, panier, adresse, détail plats vs livraison, paiement. Restaurant accepte ou refuse, cuisine suit la préparation et signale « prêt ». Managers gèrent dispos et accès du personnel ; la cuisine n'accède ni aux retraits ni à la finance.
Décisions produit applicables. PROD-023 restaurant · PROD-044 disponibilité Food · PROD-005 moyens de paiement visibles
Livrable backend BE020 — Restaurants, carte des plats et commande client. Priorité P1, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Publier disponibilité, panier, prix plats/livraison, paiement et reprise d’échec sur la même commande.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-25 Terminé(e) · SCRUM-26 Terminé(e) · SCRUM-27 Terminé(e) · SCRUM-28 Terminé(e) · SCRUM-29 Terminé(e) · SCRUM-523 Terminé(e) · SCRUM-528 Terminé(e) · SCRUM-547 A tester
Livrable backend BE021 — Restaurant, cuisine, catalogue et temps de préparation. Priorité P0, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Finaliser images publiques catalogue, droits cuisine/manager, filtres commandes, ouvert/fermé et temps de préparation.
Blocage déclaré par le planning : Contrat/intégration à fermer sur staging ; voir tickets liés.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-35 Terminé(e) · SCRUM-36 Terminé(e) · SCRUM-37 Terminé(e) · SCRUM-38 Terminé(e) · SCRUM-39 Terminé(e) · SCRUM-468 A tester · SCRUM-525 À faire · SCRUM-540 A tester · SCRUM-541 A tester · SCRUM-542 À faire · SCRUM-543 À faire · SCRUM-544 À faire · SCRUM-545 À faire · SCRUM-546 En cours · SCRUM-551 A tester · SCRUM-570 À faire
Confluence. Lot — DiddiFood / Client (753665) · Lot — DiddiFood / Restaurant (786433) · DiddiFood — Contrat API, proposition (720898)
État du code au 11/10, relu dans diddi-food. Partiel. Modules catalog, restaurants, ordering, payments présents, 57 opérations exposées : GET /restaurants, /menu, /dishes, PATCH /dishes/{id}/availability, POST /orders, GET /orders/{id}/payment. food_commission_bps = 1500 et restaurant_min_withdrawal_xof = 5000 (app/core/config.py:73,80) correspondent aux 15 % et aux 5 000 F du planning. delivery_time_minutes_default = 30 tient lieu de délai affiché faute de source par restaurant. PlaceOrderIn ne collecte toujours aucun courriel client, que le prestataire de paiement exige : la route de préparation du paiement le réclame donc dans son corps de requête. Nouveau depuis le 29/09 : l'adaptateur DiddiFiles est réellement implémenté (commit e8b8d3c) — DiddiFilesAdapter en S2S client_credentials, audience diddifiles, portées files:read et files:write ; confirm_upload à la création d'un plat et à l'enregistrement d'un restaurant ; photo_url et logo_url résolus par get_public_url sans jamais faire échouer la lecture ; colonne Restaurant.logo_file_id ajoutée par la migration 0020 et route PUT /restaurants/{id}/logo réservée au gérant.
1. Les use cases DiddiFood sont tous classés Later au backlog alors que le planning les met au MVP : quelle classification fait foi pour le gel du 18 novembre ?
- Nature · Contradiction à arbitrer
- Décideur désigné · Direction
- Pourquoi retenue · Contradiction code / parcours
- Contexte · Les 31 use cases Food portent
Latersur les quatre axes du backlog du 14/09. Le planning du 09/10 place PAR-024 à PAR-027 au MVP avec BE020 à BE023 en priorité P0 et P1, etPROD-001dit que Food lance ses parcours essentiels. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
2. Le courriel du client doit-il être collecté à la création de commande, dans le profil, ou rester demandé au moment du paiement ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Contexte ·
PlaceOrderInne le collecte pas, alors que le prestataire de paiement l'exige pour le paiement en ligne. La route de préparation du paiement le réclame donc dans son corps de requête. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
3. Quelle est la conséquence d'un refus de commande par un restaurant ?
- Nature · Décision à prendre
- Décideur désigné · Administration
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Concerne aussi ·
PAR-027 - Rattachement et Jira · UC-230 Le restaurant reçoit une commande et peut l'accepter ou la refuser →
SCRUM-35Terminé(e) · phase backlog Later - Contexte · Le rôle cuisine reçoit une nouvelle commande dans sa file et l'accepte ou la refuse dans un délai décidé.
- Source · Fiche UC-230 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
4. Quelle est la fenêtre d'annulation d'une commande alimentaire ?
- Nature · Décision à prendre
- Décideur désigné · Administration
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-353 Le client annule sa commande dans la fenêtre autorisée → aucun ticket cité par le planning · phase backlog Later
- Contexte · Un client food annule sa commande, gratuitement dans une fenêtre autorisée, ou en connaissant le coût au-delà.
- Source · Fiche UC-353 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
5. Qui paie un repas annulé après acceptation, et qui paie un plat refusé à la livraison ?
- Nature · Décision à prendre
- Décideur désigné · Administration
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-351 Le client paie sa commande alimentaire en espèces à la livraison → aucun ticket cité par le planning · phase backlog Later
- Contexte · Un client food choisit de payer en espèces au moment de la livraison plutôt que via DiddiPay.
- Source · Fiche UC-351 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
6. Un temps de préparation annoncé engage-t-il le restaurant, et que se passe-t-il s'il est dépassé ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-231 Le restaurant indique un temps de préparation →
SCRUM-36Terminé(e) · phase backlog Later - Contexte · Le rôle cuisine annonce un temps de préparation, qui alimente l'heure d'arrivée estimée montrée au client.
- Source · Fiche UC-231 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
7. À quelle heure exactement un plat basculé en indisponible pour la journée est-il réactivé ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Empêche d’aller au bout d’un parcours principal
- Rattachement et Jira · UC-355 Le poste cuisine bascule un plat en indisponible pour la journée, avec réactivation automatique le lendemain → aucun ticket cité par le planning · phase backlog Later
- Contexte · Le rôle cuisine bascule un plat en indisponible pour le reste de la journée, en un geste, sans devoir penser à le réactiver le lendemain.
- Source · Fiche UC-355 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
PAR-025 — Livrer avec DiddiSend
Ce que le planning attend. La commande crée une livraison Send liée à la même référence. Contraintes véhicule et exclusivité. États remontés à Food. Timeout : pas de doublon de mission. Événement tardif ou répété : cohérence conservée. Restaurant fermé, refus, retard, pas de coursier, échec de remise : décision visible puis support / annulation / remboursement.
Décisions produit applicables. PROD-022 livraison Food exclusive · PROD-029 engagement Food et incidents
Livrable backend BE022 — Livraison repas exclusive, préparation et heure d’arrivée estimée. Priorité P0, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Lier commande et livraison unique ; coursier/véhicule compatible ; synchroniser préparation, collecte, remise et estimation.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-44 Terminé(e) · SCRUM-45 Terminé(e) · SCRUM-46 Terminé(e) · SCRUM-47 À faire · SCRUM-54 À faire · SCRUM-55 À faire · SCRUM-404 A tester · SCRUM-414 A tester · SCRUM-469 Terminé(e) · SCRUM-552 A tester
Confluence. Lot — DiddiFood / Livreur (819201) · Lot — DiddiFood / Systeme (884737)
État du code au 11/10, relu dans diddi-food. Partiel. Module delivery avec l'adaptateur diddisend_adapter.py. La charge envoyée est complète au regard du schéma de DiddiSend : recipient_name, recipient_phone, sender_phone, package, delivery_mode = door_to_door, payment_method, quoted_price, origin_module = diddifood, order_reference, idempotency_key, ready_at, required_vehicle_type = motorcycle, exclusive = True, financial_breakdown (diddisend_adapter.py:69-104). Deux limites réelles : le déclenchement à l'acceptation est best-effort, enveloppé dans un try/except pour qu'une panne Send ne transforme pas une acceptation réussie en 503 — l'échec est journalisé delivery.request_failed_at_acceptance, GET /orders/{id}/delivery renvoie 404 et la reprise est manuelle par POST /orders/{id}/delivery/request ; et delivery_status_sync_enabled vaut False par défaut (app/core/config.py:68), donc la remontée des états de DiddiSend vers Food ne tourne pas tant qu'elle n'est pas activée.
1. Comment le temps d'arrivée estimé total se compose-t-il, et que voit le client si l'un des termes est inconnu ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Empêche d’aller au bout d’un parcours principal
- Use cases que la source dit bloqués · UC-238
- Source · management/specs/etat/a-trancher.md · section « Portée Later » · 14/09/2026
Réponse :
2. L'engagement de délai d'arrivée du coursier est figé à la commande et jamais recalculé. Est-ce acceptable pour le lancement, ou faut-il un recalcul minimal quand le restaurant met à jour son estimation de préparation ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Contexte · Deux défaillances en découlent : une préparation plus longue laisse le coursier attendre à vide, une préparation plus courte laisse le plat prêt avant son arrivée.
- Source · Relevé dans les dépôts le 11/10/2026
Réponse :
3. La preuve de remise d'un repas est-elle une photo, comme pour un colis, ou un geste plus léger ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-237 Le livreur livre la commande au client avec confirmation de remise →
SCRUM-46Terminé(e) · phase backlog Later - Contexte · Le livreur remet la commande au client, avec une preuve, et encaisse en espèces si c'est le mode de paiement choisi.
- Source · Fiche UC-237 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
4. Pour un paiement en ligne, l'attribution du coursier attend-elle le succès du paiement, ou part-elle en parallèle avec annulation en cas d'échec ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Contexte · L'attribution se déclenche à l'acceptation du restaurant. En ligne, acceptation et création de l'intention de paiement arrivent au même instant : si la recherche démarre et que le paiement échoue, un coursier est en route pour une commande à annuler.
- Source · Relevé dans les dépôts le 11/10/2026
Réponse :
5. Que fait le livreur d'un repas qu'il n'a pas pu remettre ?
- Nature · Décision à prendre
- Décideur désigné · Administration
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course · Empêche d’aller au bout d’un parcours principal
- Rattachement et Jira · UC-237 Le livreur livre la commande au client avec confirmation de remise →
SCRUM-46Terminé(e) · phase backlog Later - Contexte · Le livreur remet la commande au client, avec une preuve, et encaisse en espèces si c'est le mode de paiement choisi.
- Source · Fiche UC-237 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
6. Que se passe-t-il quand un restaurant est en retard sur son temps annoncé et que le livreur attend ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-236 Le livreur confirme son arrivée au restaurant et la récupération de la commande →
SCRUM-45Terminé(e) · phase backlog Later - Contexte · Le livreur confirme son arrivée au restaurant, patiente si la commande n'est pas prête, puis confirme la récupération.
- Source · Fiche UC-236 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
7. Que se passe-t-il si aucun livreur n'est disponible au moment où la commande est prête ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-239 Le système crée ou réserve une livraison quand la commande est acceptée, ou quand elle approche d'être prête →
SCRUM-55À faire · phase backlog Later - Contexte · Le système déclenche la création ou la réservation d'une livraison au bon moment, ni trop tôt (coursier immobilisé) ni trop tard (aucun livreur trouvé).
- Source · Fiche UC-239 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
8. Une acceptation de commande doit-elle rester valide quand la demande de livraison échoue, ou faut-il la refuser pour éviter une commande sans coursier ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Contexte · Le déclenchement est best-effort : une panne DiddiSend ne transforme pas une acceptation réussie en 503. L'échec est journalisé et
GET /orders/{id}/deliveryrenvoie 404, avec reprise manuelle. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
PAR-026 — Recevoir ses gains et retirer
Ce que le planning attend. Commission restaurant 15 % (livraison à part). Voit écritures, montants en attente / disponibles / réservés. Gain numérique dispo après paiement confirmé + collecte confirmée par Send. Cash : régularisation Send confirmée. Retrait : minimum, frais, net, montant réservé pendant le payout ; pas de double dépense du même solde.
Limite que le planning déclare. Minimum 5 000 XOF à maintenir ou changer explicitement.
Décisions produit applicables. PROD-004 commission restaurant sur les plats · PROD-003 socle financier · PROD-032 retraits
Livrable backend BE023 — Wallet restaurant et demande de retrait par le manager. Priorité P0, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Vérifier 15 %, minimum 5 000 F, fonds en attente/disponibles/réservés, bénéficiaire et transfert ; cash confirmé avant disponibilité.
Blocage déclaré par le planning : Contrat/intégration à fermer sur staging ; voir tickets liés.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-456 À faire · SCRUM-471 A tester · SCRUM-472 À faire · SCRUM-484 Terminé(e) · SCRUM-500 A tester · SCRUM-522 A tester · SCRUM-525 À faire
Confluence. Lot — DiddiFood / Partenaire (950273) · Décision — Wallet restaurant, commission et retraits DiddiFood (5537793)
État du code au 11/10, relu dans diddi-food. Présent. Modules wallets et payouts : /entries, /withdrawals, /withdrawal-quote, /withdrawals/{id}. Le partage financier est contrôlé par invariant : courier_earning + send_commission == delivery_fee et customer_total == order_total + delivery_fee (ordering/domain/entities.py:95-97). Or delivery_fee_xof et send_commission_bps valent 0 par défaut (app/core/config.py:74,78) : la livraison d'une commande Food est donc gratuite et le coursier touche zéro tant que ces valeurs ne sont pas posées. restaurant_advance_limit_xof = 25000, restaurant_withdrawal_fee_xof = 0.
1. Le backlog introduit un partenaire alimentaire que le glossaire de la section 3 ne définit pas, et qui ne correspond ni au pro ni au partenaire
- Nature · Contradiction à arbitrer
- Décideur désigné · Produit
- Pourquoi retenue · Contradiction code / parcours
- Rattachement et Jira · UC-243 Le partenaire consulte ses ventes, commissions, reversements et performances de préparation → aucun ticket cité par le planning · phase backlog Later
- Contexte · Un partenaire alimentaire consulte ses ventes, ses commissions, ses reversements et ses performances de préparation, par point de vente et consolidés.
- Source · Fiche UC-243 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
2. Le tarif de livraison d'une commande Food est-il porté par DiddiFood ou par le devis de DiddiSend ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Contradiction code / parcours · Bloque le déroulement d’une commande ou d’une course
- Contexte · Food impose
courier_earning + send_commission == delivery_feeet posedelivery_fee_xof = 0etsend_commission_bps = 0par défaut ; DiddiSend calcule de son côté un prix complet et une commission de 10 %. Les deux chemins coexistent sans règle de préséance. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
3. Par quel mécanisme le restaurant est-il payé sur une commande encaissée en espèces ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Contexte · La première moitié de la question est tranchée par le code depuis le 10/10 : le coursier reverse à la plateforme, DiddiSend suivant son encours cash en brut. Reste à dire si la part du restaurant suit le même circuit de versement DiddiPay qu'une commande en ligne, et à quel moment elle devient disponible.
- Source · Relevé dans les dépôts le 11/10/2026
Réponse :
PAR-027 — Litiges Food
Ce que le planning attend. Plat manquant, erreur, retard, restaurant fermé → support + décision humaine tracée.
Limite que le planning déclare. Exclus du MVP : retrait sur place, remplacement de plat, recharge du wallet restaurant.
Décisions produit applicables. PROD-029 incidents Food · PROD-034 autorité de remboursement · PROD-017 support
Livrable backend BE010 — Reprise humaine et suivi des tickets. Priorité P0, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Créer et relier ticket, mission et conversation ; notifier agent ; suivre traitement et réouverture.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-58 V2 · SCRUM-383 À faire · SCRUM-385 À faire · SCRUM-527 En cours · SCRUM-532 À faire · SCRUM-535 À faire
Confluence. Lot — DiddiFood / Support (917505) · Lot — DiddiAdmin (1114113)
État du code au 11/10, relu dans diddi-food. Partiel, et au-delà de la limite déclarée. POST /orders/{id}/refund-requests puis POST /admin/refund-requests/{id}/approve|reject et GET /admin/refund-requests : la forme en deux temps est réelle et appliquée. Mais aucun acteur « support » n'est autorisé à soumettre — le code le dit lui-même : « DiddiFreeID's roles are strictly global (user/admin) with no support role today » (payments/presentation/router.py:297-299). Et le retrait sur place est désormais codé alors que la limite du planning l'exclut : PickupMode.PICKUP (ordering/domain/entities.py:64), champ pickup_mode dans PlaceOrderIn, frais de livraison mis à zéro quand le mode est pickup (entities.py:173), et complete_pickup_order avec sa route de complétion (commit 6e84484).
1. Le retrait sur place est codé alors que la limite du planning l'exclut du MVP : on l'ouvre au lancement, ou on le ferme par configuration ?
- Nature · Contradiction à arbitrer
- Décideur désigné · Produit
- Pourquoi retenue · Contradiction code / parcours
- Contexte · La limite de
PAR-027énonce « Exclus du MVP : retrait sur place, remplacement de plat, recharge du wallet restaurant ». OrPickupMode.PICKUPexiste,PlaceOrderInportepickup_mode, les frais de livraison tombent à zéro en mode retrait etcomplete_pickup_orderexpose sa route (commit6e84484du 01/10). - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
2. Quelle preuve un client doit-il fournir pour un plat manquant ou impropre ?
- Nature · Décision à prendre
- Décideur désigné · Administration
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-242 Le support traite les litiges food : plat manquant, erreur de commande, retard, restaurant fermé →
SCRUM-58V2 · phase backlog Later - Contexte · Un agent de support traite un litige sur une commande alimentaire (plat manquant, erreur, retard, restaurant fermé), dans la même file qu'un litige de course ou de livraison.
- Source · Fiche UC-242 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
3. Qui peut soumettre une demande de remboursement, tant qu'aucun acteur support n'existe dans DiddiFood ?
- Nature · Décision à prendre
- Décideur désigné · Produit
- Pourquoi retenue · Empêche d’aller au bout d’un parcours principal
- Contexte · La forme en deux temps — soumission puis approbation — est réelle et appliquée. Seul qui est autorisé à soumettre reste un emplacement réservé, en attente d'une capacité support locale ou d'une intégration DiddiAdmin.
- Source · Relevé dans les dépôts le 11/10/2026
Réponse :
4. Qui supporte le coût d'un repas non livré, et celui d'un plat refusé à la livraison ?
- Nature · Décision à prendre
- Décideur désigné · Administration
- Pourquoi retenue · Bloque le déroulement d’une commande ou d’une course
- Rattachement et Jira · UC-359 L'administrateur arbitre qui supporte le coût d'un repas non livré ou refusé → aucun ticket cité par le planning · phase backlog Later
- Contexte · Un administrateur décide qui supporte le coût d'un repas non livré ou refusé — plateforme, restaurant, livreur ou client — et produit un mouvement d'argent réel.
- Source · Fiche UC-359 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
Décisions techniques
PAR-024 — Choisir et commander un repas
Ce que le planning attend. Trouve un restaurant, voit plats/prix/dispos, panier, adresse, détail plats vs livraison, paiement. Restaurant accepte ou refuse, cuisine suit la préparation et signale « prêt ». Managers gèrent dispos et accès du personnel ; la cuisine n'accède ni aux retraits ni à la finance.
Décisions produit applicables. PROD-023 restaurant · PROD-044 disponibilité Food · PROD-005 moyens de paiement visibles
Livrable backend BE020 — Restaurants, carte des plats et commande client. Priorité P1, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Publier disponibilité, panier, prix plats/livraison, paiement et reprise d’échec sur la même commande.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-25 Terminé(e) · SCRUM-26 Terminé(e) · SCRUM-27 Terminé(e) · SCRUM-28 Terminé(e) · SCRUM-29 Terminé(e) · SCRUM-523 Terminé(e) · SCRUM-528 Terminé(e) · SCRUM-547 A tester
Livrable backend BE021 — Restaurant, cuisine, catalogue et temps de préparation. Priorité P0, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Finaliser images publiques catalogue, droits cuisine/manager, filtres commandes, ouvert/fermé et temps de préparation.
Blocage déclaré par le planning : Contrat/intégration à fermer sur staging ; voir tickets liés.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-35 Terminé(e) · SCRUM-36 Terminé(e) · SCRUM-37 Terminé(e) · SCRUM-38 Terminé(e) · SCRUM-39 Terminé(e) · SCRUM-468 A tester · SCRUM-525 À faire · SCRUM-540 A tester · SCRUM-541 A tester · SCRUM-542 À faire · SCRUM-543 À faire · SCRUM-544 À faire · SCRUM-545 À faire · SCRUM-546 En cours · SCRUM-551 A tester · SCRUM-570 À faire
Confluence. Lot — DiddiFood / Client (753665) · Lot — DiddiFood / Restaurant (786433) · DiddiFood — Contrat API, proposition (720898)
État du code au 11/10, relu dans diddi-food. Partiel. Modules catalog, restaurants, ordering, payments présents, 57 opérations exposées : GET /restaurants, /menu, /dishes, PATCH /dishes/{id}/availability, POST /orders, GET /orders/{id}/payment. food_commission_bps = 1500 et restaurant_min_withdrawal_xof = 5000 (app/core/config.py:73,80) correspondent aux 15 % et aux 5 000 F du planning. delivery_time_minutes_default = 30 tient lieu de délai affiché faute de source par restaurant. PlaceOrderIn ne collecte toujours aucun courriel client, que le prestataire de paiement exige : la route de préparation du paiement le réclame donc dans son corps de requête. Nouveau depuis le 29/09 : l'adaptateur DiddiFiles est réellement implémenté (commit e8b8d3c) — DiddiFilesAdapter en S2S client_credentials, audience diddifiles, portées files:read et files:write ; confirm_upload à la création d'un plat et à l'enregistrement d'un restaurant ; photo_url et logo_url résolus par get_public_url sans jamais faire échouer la lecture ; colonne Restaurant.logo_file_id ajoutée par la migration 0020 et route PUT /restaurants/{id}/logo réservée au gérant.
1. L'extension DiddiFiles est livrée mais SCRUM-542 est encore « À faire » : qui reprend l'état des tickets catalogue ?
- Nature · Fait à établir
- Décideur désigné · Technique
- Pourquoi retenue · Contradiction code / parcours
- Contexte · Le commit
e8b8d3cdu 29/09 implémente l'adaptateur, la colonnelogo_file_id, la migration0020et la route de logo. En Jira au 11/10,SCRUM-542reste « À faire »,SCRUM-543àSCRUM-545aussi, tandis queSCRUM-540etSCRUM-541sont « A tester ». Le code est en avance sur le tableau. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
2. Le contrat HTTP avec DiddiPay n'a jamais été exercé de bout en bout : qui provisionne la clé de service et quand la recette est-elle planifiée ?
- Nature · Fait à établir
- Décideur désigné · Technique
- Pourquoi retenue · Empêche d’aller au bout d’un parcours principal
- Contexte ·
DIDDIPAY_SERVICE_KEYn'est pas provisionné. Le paiement en ligne, le webhook et le remboursement sont vérifiés avec une passerelle factice contre la vraie base, jamais contre l'environnement de recette de DiddiPay. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
PAR-025 — Livrer avec DiddiSend
Ce que le planning attend. La commande crée une livraison Send liée à la même référence. Contraintes véhicule et exclusivité. États remontés à Food. Timeout : pas de doublon de mission. Événement tardif ou répété : cohérence conservée. Restaurant fermé, refus, retard, pas de coursier, échec de remise : décision visible puis support / annulation / remboursement.
Décisions produit applicables. PROD-022 livraison Food exclusive · PROD-029 engagement Food et incidents
Livrable backend BE022 — Livraison repas exclusive, préparation et heure d’arrivée estimée. Priorité P0, fenêtre 2026-10-14 au 2026-10-23, état planning « À engager ». Lier commande et livraison unique ; coursier/véhicule compatible ; synchroniser préparation, collecte, remise et estimation.
Tickets Jira, statuts relevés en direct le 11/10 — SCRUM-44 Terminé(e) · SCRUM-45 Terminé(e) · SCRUM-46 Terminé(e) · SCRUM-47 À faire · SCRUM-54 À faire · SCRUM-55 À faire · SCRUM-404 A tester · SCRUM-414 A tester · SCRUM-469 Terminé(e) · SCRUM-552 A tester
Confluence. Lot — DiddiFood / Livreur (819201) · Lot — DiddiFood / Systeme (884737)
État du code au 11/10, relu dans diddi-food. Partiel. Module delivery avec l'adaptateur diddisend_adapter.py. La charge envoyée est complète au regard du schéma de DiddiSend : recipient_name, recipient_phone, sender_phone, package, delivery_mode = door_to_door, payment_method, quoted_price, origin_module = diddifood, order_reference, idempotency_key, ready_at, required_vehicle_type = motorcycle, exclusive = True, financial_breakdown (diddisend_adapter.py:69-104). Deux limites réelles : le déclenchement à l'acceptation est best-effort, enveloppé dans un try/except pour qu'une panne Send ne transforme pas une acceptation réussie en 503 — l'échec est journalisé delivery.request_failed_at_acceptance, GET /orders/{id}/delivery renvoie 404 et la reprise est manuelle par POST /orders/{id}/delivery/request ; et delivery_status_sync_enabled vaut False par défaut (app/core/config.py:68), donc la remontée des états de DiddiSend vers Food ne tourne pas tant qu'elle n'est pas activée.
1. Le moteur de sélection de DiddiSend est conçu pour grouper les livraisons selon la charge restante ; UC-360 exige une mission repas exclusive et non groupable
- Nature · Contradiction à arbitrer
- Décideur désigné · Technique
- Pourquoi retenue · Contradiction code / parcours
- Rattachement et Jira · UC-360 Le livreur reçoit une mission repas exclusive, non groupable →
SCRUM-47À faire · phase backlog Later - Contexte · Un livreur en mission repas ne reçoit aucune autre offre tant qu'il ne l'a pas terminée — la mission repas ne se groupe pas avec d'autres livraisons.
- Source · Fiche UC-360 · section « Questions ouvertes » · corpus du 14/09/2026
Réponse :
2. La configuration croisée des jetons de service DiddiFood / DiddiSend est-elle alignée en recette ?
- Nature · Fait à établir
- Décideur désigné · Technique
- Pourquoi retenue · Empêche d’aller au bout d’un parcours principal
- Contexte ·
DIDDISEND_SERVICE_TOKENdoit être égal auDIDDIFOOD_SERVICE_TOKENentrant de DiddiSend, qui doit tourner avecAUTH_ENABLED=trueet des réglages JWKS DiddiFreeID fonctionnels. Sinondelivery_gateway()renvoieNoneet l'appel échoue enDELIVERY_GATEWAY_NOT_CONFIGURED. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
3. La remontée des états de livraison vers Food est désactivée par défaut : qui l'active, et avec quel flux Redis ?
- Nature · Fait à établir
- Décideur désigné · Technique
- Pourquoi retenue · Empêche d’aller au bout d’un parcours principal
- Contexte ·
delivery_status_sync_enabledvautFalse(app/core/config.py:68) et conditionne le worker, le démarrage de l'application et le rapport de pilotage. Sans activation, le client ne voit jamais la livraison avancer. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
4. Le dépôt DiddiFood écrit qu'un appel de création de livraison « répondra probablement 4xx » : ce constat est-il encore vrai ?
- Nature · Fait à établir
- Décideur désigné · Technique
- Pourquoi retenue · Contradiction code / parcours
- Contexte · La charge de
diddisend_adapter.py:69-104couvre tous les champs exigés par leDeliveryCreateRequestde DiddiSend, et ce dernier dispense même les commandesdiddifoodde l'obligation de courriel payeur.KNOWN_ISSUES.mdn'a pas été relu depuis. - Source · Relevé dans les dépôts le 11/10/2026
Réponse :
Valeurs fermées — à reporter en variable d'environnement
Consigne de lancement : toute question de durée, de seuil, de limite ou de valeur numérique est fermée. Le défaut actuel du code fait foi et part en variable d'environnement — aucune valeur modifiable à chaud, pour qu'un changement de comportement passe par un redéploiement traçable.
| Question fermée | Parcours | Source |
|---|---|---|
| Quel taux d'indisponibilité et quel taux de retard font descendre un restaurant, et de combien ? | PAR-025 |
Fiche UC-358 · section « Questions ouvertes » · corpus du 14/09/2026 |
| À quelle fréquence un partenaire alimentaire est-il payé, et selon quel délai après la vente ? | PAR-026 |
Fiche UC-243 · section « Questions ouvertes » · corpus du 14/09/2026 |
| Combien de temps avant la fin de la préparation la mission est-elle proposée à un livreur ? | PAR-025 |
Fiche UC-235 · section « Questions ouvertes » · corpus du 14/09/2026 |
| Quelle est la durée de conservation d'une photo de plat après le retrait du plat du menu ? | PAR-024 |
management/specs/etat/a-trancher.md · section « Portée Later » · 14/09/2026 |
| Pendant combien de temps après la livraison un litige alimentaire est-il recevable ? | PAR-027 |
Fiche de lot « DiddiFood / Support » · section « Questions ouvertes » · corpus du 14/09/2026 |
| Combien de temps un restaurant a-t-il pour accepter ou refuser une commande ? | PAR-024 |
Fiche UC-230 · section « Questions ouvertes » · corpus du 14/09/2026 |
| Minimum 5 000 XOF à maintenir ou changer explicitement. | PAR-026 |
Planning de lancement, onglet « Parcours sources » · 09/10/2026 |
Fermées — légal et conformité
Non bloquant pour le code MVP. Procédure manuelle au support pour le lancement.
| Question | Parcours | Nature | Décideur |
|---|---|---|---|
| aucun sujet légal relevé sur ce périmètre | — | — | — |
Hors des trois critères du focus MVP
24 questions conservées pour après le gel.
| Question | Parcours | Axe | Nature | Décideur |
|---|---|---|---|---|
| DiddiFiles peut-il servir des fichiers publics de façon durable, ou son modèle d'adresse temporaire impose-t-il un autre dispositif pour les photos de catalogue ? | PAR-024 |
Technique | Fait à établir | Technique |
| Le cloisonnement entre rôle gérant et rôle cuisine sera-t-il porté par DiddiFood, ou l'identité évoluera-t-elle pour porter des rôles par ressource ? | PAR-024 |
Technique | Fait à établir | Technique |
| Le partenaire alimentaire doit-il être un type supplémentaire du partenaire DiddiSend, ou un objet propre à DiddiFood ? | PAR-026 |
Technique | Fait à établir | Technique |
| Une photo de plat est-elle publique, ou passe-t-elle par une adresse temporaire comme les pièces sensibles ? | PAR-024 |
Technique | Décision à prendre | Technique |
| Quelles finalités de fichier DiddiFood déclare-t-il — photo de plat, logo, document de restaurant, autre ? | PAR-024 |
Technique | Décision à prendre | Technique |
| Un remboursement alimentaire est-il imputé au restaurant, au livreur ou à la plateforme, selon le motif ? | PAR-027 |
Produit | Décision à prendre | Administration |
| Le partenaire alimentaire relève-t-il du même objet partenaire que la flotte, ou d'un objet distinct ? | PAR-026 |
Produit | Décision à prendre | Produit |
| Existe-t-il un montant minimum de commande, et des frais de livraison distincts du prix des plats ? | PAR-024 |
Produit | Décision à prendre | Produit |
| Quelles performances de préparation sont mesurées, et lesquelles sont exposées au partenaire ? | PAR-026 |
Produit | Décision à prendre | Produit |
| Le client food est-il le même compte que le passager et l'expéditeur, ou un persona distinct ? | PAR-024 |
Produit | Fait à établir | Produit |
| UC-242 et UC-359 décrivent-ils deux étapes d'un même processus, ou deux processus distincts ? | PAR-027 |
Produit | Fait à établir | Produit |
| Quelles exigences de qualité s'appliquent à une photo de plat — dimensions, cadrage, poids ? | PAR-024 |
Produit | Décision à prendre | Produit |
| Un partenaire alimentaire peut-il exploiter plusieurs points de vente sous un même compte ? | PAR-026 |
Produit | Décision à prendre | Produit |
| Quelles sont les règles de remboursement d'une commande alimentaire, par type de litige ? | PAR-027 |
Produit | Décision à prendre | Administration |
| Exclus du MVP : retrait sur place, remplacement de plat, recharge du wallet restaurant. | PAR-027 |
Produit | Point flou à fermer | Produit |
| Quelles pièces et quelles conditions un restaurant doit-il réunir pour être validé ? | PAR-027 |
Produit | Décision à prendre | Juridique |
| L'absence de contrôle d'authentification relevée sur DiddiFiles est-elle résolue ? | PAR-024 |
Technique | Fait à établir | Technique |
| Un restaurant est-il informé de son rang et de ce qui le fait varier ? | PAR-025 |
Produit | Décision à prendre | Produit |
| Le menu d'un restaurant est-il validé avant publication, et par qui ? | PAR-024 |
Produit | Décision à prendre | Produit |
| Quelle capacité opérationnelle minimale est exigée d'un restaurant ? | PAR-027 |
Produit | Décision à prendre | Administration |
| Combien de restaurants l'équipe peut-elle intégrer par semaine ? | PAR-027 |
Produit | Décision à prendre | Administration |
| Quels indicateurs composent le suivi des commandes food ? | PAR-027 |
Produit | Décision à prendre | Produit |
| Le retrait sur place fait-il partie du périmètre ? | PAR-024 |
Produit | Décision à prendre | Produit |
| Qui valide une photo de plat avant publication ? | PAR-024 |
Produit | Décision à prendre | Produit |
Sources
| Source | Date | Rôle |
|---|---|---|
DIDDIFREE_Planning_Lancement_19_Decembre_2026.xlsx |
lu le 09/10/2026 | source de spécification principale : parcours, livrables, tickets |
management/specs — fiches de use case et de lot, registres etat/ |
14/09/2026 | complément : les questions ouvertes |
diddi-scope-document — registre PROD-xxx |
09/10/2026 | cible produit |
dépôt diddi-food |
branche main au 11/10/2026 |
état du code, relu ce jour |
Jira diddifree |
11/10/2026, lecture seule | statuts des 70 tickets relevés en direct, inchangés depuis le 09/10 |
Confluence espace DIDDIFREE |
09/10/2026, lecture seule | pages de lot |
Les parcours Common et DiddiPay, partagés entre les trois services, sont traités dans le
relevé Common et DiddiGo, conservé dans le dépôt diddi-go sous
docs/archive/2026-10-10-pre-code-derived-regeneration/mapping/archive/.
Ce document est un recueil de questions, pas un registre de décisions : il n'arbitre rien et ne définit aucun périmètre. Les réponses, une fois prises, ont leur place dans la référence produit du service concerné.