Contrat API — Prêt à vendre TiketMOMO
Routes concernées :
GET /api/v1/clients/store/pointsGET /api/v1/clients/store/points/:pointIdGET /api/v1/admin/tiketmomo/store-ready/summary(admin)
Sens de ready_to_sell
alignment.ready_to_sell signifie : le premier achat de test sur ce point de vente doit pouvoir réussir maintenant.
La valeur vient du feu vert strict TiketmomoStoreReadyService.evaluateGreenLight(managerId), par routeur. Elle vaut true uniquement quand le routeur du point (allocation_id) a green: true.
Le backend met ce verdict en cache mémoire 60 secondes par vendeur. Le cache est invalidé après une déclaration NAS, une synchronisation de forfaits depuis l’app et un remplissage de stock.
Si la vérification stricte est indisponible, la route répond quand même 200 et renvoie :
{
"alignment": {
"ready_to_sell": false,
"readiness": {
"green": false,
"blocking": [
{ "code": "READINESS_UNAVAILABLE", "detail": "Vérification prêt à vendre indisponible." }
],
"warnings": []
}
}
}
Champ readiness
Chaque point expose :
{
"alignment": {
"status": "NEEDS_ATTENTION",
"ready_to_sell": false,
"readiness": {
"green": false,
"blocking": [
{
"code": "DELIVERY_PATH_AVAILABLE",
"detail": "Aucune voie de livraison : routeur non joignable et aucun ticket en stock."
}
],
"warnings": [{ "code": "OFFER_WITHOUT_STOCK", "detail": "300F-2d : stock 0, minimum 5." }]
}
}
}
green: même valeur métier queready_to_sell.blocking: vérifications globales ou du routeur en échec. L’app affichedetailtel quel.warnings: avertissements non bloquants.
Statut de gestion du routeur
Chaque routeur store-ready expose statut_gestion. Chaque point de vente expose le même objet à sa racine :
{
"code": "GERE",
"gere": true,
"action_vendeur": null,
"action_plateforme": [],
"nas_tm_pose": true,
"radius_nas_manquant": false
}
Codes possibles : VPN_JAMAIS_MONTE, HORS_LIGNE, IDENTIFIANTS_REFUSES, VPN_SANS_IDENTIFIANTS, GERE, GERE_PAR_APP. Les quatre premiers portent une action_vendeur (code, message_fr). GERE peut porter action_plateforme: [{ code: "RADIUS_NAS_A_DECLARER", message_fr: "NAS RADIUS à déclarer." }]; cette action est destinée à la plateforme. nas_tm_pose et radius_nas_manquant sont des indicateurs de GERE. Le statut GERE_PAR_APP signifie que le stock est distribué depuis l’application.
Si tunnel_status vaut AUTH_FAILED, le statut est IDENTIFIANTS_REFUSES, même lorsque les identifiants chiffrés sont absents : l’échec d’authentification donne l’action la plus précise.
La synthèse admin GET /api/v1/admin/tiketmomo/store-ready/summary renvoie les compteurs de toutes les allocations ACTIVE dans data.total et data.par_statut. La lecture parcourt les allocations par pages et groupe les lectures RADIUS.
Statuts alignment.status
NO_ROUTER: aucun routeur associé au point. Action : associer un routeur.NAS_NOT_ALIGNED: routeur associé mais NAS sans le suffixe attendu. Action : renommer le serveur hotspot avec le suffixe affiché.NEEDS_ATTENTION: NAS aligné, mais le feu vert strict n’est pas atteint. Action : afficher les éléments dereadiness.blocking.ALIGNED: routeur aligné et prêt à vendre.
Codes de blocage
| Code | Signification | Action conseillée |
|---|---|---|
LICENSE_ACTIVE_3D |
Licence TiketMOMO active depuis au moins 3 jours. | Activer ou attendre la maturité de la licence. |
STORE_PROFILE_PRESENT |
Boutique TiketMOMO trouvée. | Créer ou restaurer le profil boutique. |
STORE_SLUG_PRESENT |
Slug public de boutique présent. | Renseigner le slug boutique. |
ROUTER_ACTIVE_PRESENT |
Au moins un routeur actif existe. | Associer ou réactiver un routeur. |
PAYMENT_MERCHANT_CONFIGURED |
Encaissement vendeur configuré. | Configurer l’agrégateur marchand du vendeur. |
PAYMENT_PLATFORM_OK |
Encaissement plateforme disponible en repli. | Corriger la configuration plateforme si elle est absente. |
NAS_ID_PRESENT |
NAS du routeur présent. | Déclarer ou corriger le NAS depuis l’app. |
NAS_APPLIED |
NAS appliqué dans le registre. | Finaliser la déclaration NAS. |
DELIVERY_PATH_AVAILABLE |
Livraison directe possible ou au moins un ticket en stock sur ce routeur. | Remettre le routeur joignable ou pousser des tickets. |
READINESS_UNAVAILABLE |
Vérification stricte indisponible. | Réessayer ; signaler si le blocage persiste. |
BATCH_TOO_LARGE |
POST /api/v1/clients/vouchers/sync reçoit plus de 2 000 tickets. |
Découper le stock en plusieurs appels. |
Warnings
| Code | Signification | Action conseillée |
|---|---|---|
PAYMENT_WEBHOOK_UNPROVEN |
Le webhook d’encaissement n’est pas encore prouvé. | Vérifier le webhook marchand, sans bloquer l’affichage. |
PROFILE_NAME_RECOMMENDATION |
Nom de profil vendable mais non conventionnel. | Renommer au format prix-durée ou prix-data pour fiabiliser les liens. |
OFFER_WITHOUT_STOCK |
Un forfait commercial existe mais n’a pas les 5 tickets requis. | Ne pas proposer ce forfait dans le portail tant que son stock n’est pas rechargé. |
ROUTER_REACHABLE |
La livraison directe n’est pas disponible (APP_BRIDGE, tunnel/cible ou identifiants manquants). | Rétablir la liaison ou garder au moins un ticket en stock. |
ROUTER_SEEN_RECENTLY |
La dernière activité tunnel est ancienne ou absente. | Vérifier le routeur ; ce signal ne bloque pas si une voie de livraison existe. |
ROUTER_CREDENTIALS_PRESENT |
Identifiants routeur absents. | Les ajouter pour activer la livraison directe ; le stock peut assurer la vente. |
MIN_3_OFFERS_STOCKED |
Moins de 3 forfaits distincts ont chacun 5 tickets disponibles. | Augmenter le stock pour accélérer les ventes ; avertissement seulement. |