Documentation J+SERVICES Guides Référence API

Note app mobile : alignement manuel et stock avant « Prêt à vendre » (routeur sans VPN)

Date : 2026-10-10 · Destinataire : dev app mobile (MV7) · API : https://live.jmoai.net


1. Le cas

Quand le vendeur n’a pas de VPN actif (mode APP_BRIDGE, sans tunnel), le serveur ne peut jamais joindre le routeur. Deux conséquences :

L’app doit donc garantir les deux, avant que la boutique passe au vert.

2. Le parcours attendu

1. Vérifier l'alignement sur le routeur   (app, en local)
2. Déclarer le NAS                         POST /api/v1/clients/tiketmomo/nas-declaration
3. Lire la réponse du backend              ALIGNED / RECONCILED → continuer ; REFUSED → corriger
4. Générer le stock des forfaits          (app, sur le routeur)
5. Envoyer le stock                        POST /api/v1/clients/vouchers/sync
6. Relire l'état                           GET  /api/v1/clients/store/points/<point_id>
7. Afficher « ✅ Prêt à vendre » UNIQUEMENT si ready_to_sell === true

3. Étape 1 : ce que l’app vérifie sur le routeur

L’alignement est conforme seulement si tout ceci est vrai :

Si un point échoue, affichez ce qu’il faut corriger. N’envoyez la déclaration qu’une fois l’alignement conforme.

4. Étapes 2 et 3 : déclarer et lire la réponse

POST /api/v1/clients/tiketmomo/nas-declaration. Le contrat existant reste valable : il porte le router_serial, les hotspot_servers, et les faits du routeur (modèle, version, identité, DNS, adresse locale).

Réponse Sens Action de l’app
200 ALIGNED le backend et le routeur concordent passer à l’étape 4
200 RECONCILED le backend s’est aligné sur le routeur passer à l’étape 4
200 REFUSED + ROUTER_BOUND_ELSEWHERE ce routeur est rattaché à une autre boutique (bound_store_slug) afficher le nom de cette boutique ; ne pas continuer
200 REFUSED + ROUTER_NOT_OWNED le routeur appartient à un autre compte « Contactez le support »
200 REFUSED + ROUTER_UNKNOWN numéro de série inconnu, ou différent de l’équipement enregistré (expected_serial) vérifier le routeur ; ne pas continuer

Une déclaration acceptée ne suffit pas pour vendre : le stock manque encore.

5. Étapes 4 et 5 : le stock

6. Étapes 6 et 7 : « Prêt à vendre »

GET /api/v1/clients/store/points/<point_id> renvoie ready_to_sell et readiness (contrat détaillé : CONTRAT-API-PRET-A-VENDRE, publié à la livraison backend).

7. Recette

  1. Routeur sans VPN, deux serveurs hotspot → l’app demande de choisir avant de déclarer.
  2. Nom du serveur hotspot différent du NAS → l’app bloque et explique.
  3. Déclaration acceptée sans stock → ready_to_sell=false, avec un blocage de stock.
  4. Stock sur 2 forfaits seulement → toujours false.
  5. Stock sur 3 forfaits → true : « ✅ Prêt à vendre ».
  6. Un envoi de 300 tickets découpé en 3 lots → aucun 413.

Questions et écarts : les remonter avec l’heure, la route appelée et le corps de la réponse.