Documentation J+SERVICES Guides Référence API

Note de réalignement — Starlink Priority, côté application mobile

Cette note corrige trois malentendus du briefing d’origine et dit ce que l’application doit changer. Le contrat détaillé reste CONTRAT-API-STARLINK-PRIORITY.


1. Ce qui a changé, en trois phrases

Le briefing disait La réalité
« le backend facture les blocs, configurez Stripe/Wave » Nous ne vendons rien. Starlink facture le client. Nous n’encaissons pas un franc.
« le backend exécute un script MikroTik pour brider » Le backend pose un plafond, le moteur de bridage existant l’applique. Effet jusqu’à 5 min plus tard.
Nous avons un second rôle : dire au gérant si son mois est rentable.

Tout écran qui affiche un montant Starlink doit porter la mention facture_par: "STARLINK". Sans elle, le gérant croit qu’il paie chez nous.


2. Le parc a DEUX populations — c’est le point le plus important

Certains gérants vendent via notre RADIUS : leurs ventes arrivent dans nos registres. D’autres font tourner Mikhmon en local sur le routeur : leurs ventes n’arrivent jamais chez nous.

[!WARNING] Le backend ne peut pas deviner ce qu’un gérant Mikhmon a encaissé. Sans vous, son bilan l’affiche comme déficitaire alors qu’il gagne sa vie.

L’application, elle, sait lire Mikhmon sur le routeur. C’est à elle de combler le trou.

Comment le backend le signale

GET /starlink/priority/{nasId}/rentabilite → objet recettes :

connu motif Ce que l’app fait
true null rien : nos registres suffisent
true AUCUNE_VENTE_CE_CYCLE affiche un vrai zéro — ce routeur vend d’habitude par nous
false VENTES_HORS_MIKHMOAI lit Mikhmon et remonte le montant
false REGISTRE_INDISPONIBLE n’affiche aucun bilan, réessaie plus tard

connu: false ne veut pas dire zéro. Quand il vaut false, bilan.benefice_xof, bilan.recettes_xof et bilan.rentable valent null : n’affichez ni « 0 F », ni « non rentable », mais recettes.avertissement.

Ce que l’application doit remonter

PUT /api/v1/radius/starlink/priority/{nasId}/recettes
{ "recettes_xof": 61000, "source": "MIKHMON_LOCAL" }

La fenêtre à utiliser pour interroger Mikhmon

N’utilisez pas le mois calendaire. Prenez cycle.debut et cycle.renouvellement rendus par GET /starlink/priority/{nasId} : le cycle Starlink démarre au jour de facturation du client (le 9, le 17…), pas le 1er, et il est calculé dans le fuseau du routeur. Un total calculé sur le mois calendaire ne correspondra à rien.

recettes_xof = somme des ventes Mikhmon entre cycle.debut (inclus) et cycle.renouvellement (exclu)

Ne les additionnez pas

Les recettes déclarées remplacent les recettes enregistrées, elles ne s’y ajoutent pas. Un gérant en mode mixte verrait sinon ses ventes RADIUS comptées deux fois. Règle de la maison : on n’additionne jamais deux registres.


3. La page « rentabilité » — ce qui doit y figurer

"bilan": {
  "cout_xof": 24400, "recettes_xof": 61000, "benefice_xof": 36600,
  "marge_pct": 60, "rentable": true,
  "cout_par_go": 488, "recette_par_go": 1220
}

4. Rappels de fin de cycle — ce que l’app doit faire du push

Deux notifications de type STARLINK_CYCLE arrivent : à J-3 avant la fin du cycle, et au renouvellement.

Un appui doit ouvrir l’écran de mise à jour du forfait, pas la page d’accueil. C’est l’action qu’on demande au gérant : son abonnement a peut-être changé, et nous ne pouvons pas le savoir.

Affichez la règle de reconduction tacite sur cet écran : sans mise à jour de votre part, le cycle repart à l’identique. Le silence est une réponse — encore faut-il qu’il le sache.


5. Trois nombres, trois natures — à ne jamais confondre à l’écran

Champ Nature Étiquette à afficher
forfait.base_quota_gb déclaré par le gérant « votre forfait »
consommation.cycle_gb mesuré par nous au WAN « estimation MikhmoAI »
consommation.declare_gb relevé par lui chez Starlink « relevé Starlink »

consommation.source vaut toujours MESURE_JSERVICES. Nous ne lisons pas le compte Starlink : nous comptons ce qui passe par le routeur, Starlink compte ce qui passe par la parabole — donc aussi ce qui la partage sans passer par nous. consommation.ecart_gb expose la différence dès que le gérant saisit son relevé.


6. Récapitulatif des appels

Appel Quand
GET /starlink/priority/{nasId} ouverture de la page
GET /starlink/priority/{nasId}/qos · PUT …/qos écran de réglage du pilotage
GET /starlink/priority/{nasId}/rentabilite onglet rentabilité
PUT /starlink/priority/{nasId}/recettes 1×/jour si connu: false, et la veille du renouvellement
POST /starlink/priority/{nasId}/upgrade le gérant déclare un changement de forfait
GET /starlink/priority/grille pour afficher les forfaits — aucun prix en dur

7. À cocher avant publication