HandyCafe Docs
owner

Tarification des sessions

HandyCafe utilise un moteur de tarification par segments pour calculer les coûts de session dans votre cybercafé ou centre de jeux. Au lieu d'appliquer un tarif forfaitaire unique pour toute la session, le moteur divise chaque session en segments, chacun avec son propre contexte tarifaire. Cette approche garantit une facturation précise même lorsque les sessions chevauchent plusieurs créneaux horaires, changements de tarifs, pauses ou déconnexions.

Concepts cles

Avant d'entrer dans les details, voici les termes essentiels :

Terme Definition
Tarif horaire de base Le prix par heure avant application de tout multiplicateur. Defini dans Parametres > Tarification.
Creneau tarifaire Une periode horaire nommee avec un multiplicateur specifique. Il y a 8 creneaux, chacun code par couleur.
Multiplicateur Un facteur applique au tarif de base. 1.0 = tarif standard, 0.5 = moitie prix, 2.0 = tarif double.
Segment Une periode continue au sein d'une session durant laquelle le contexte tarifaire (creneau, multiplicateur, tarif de base) reste inchange.
Reglement Le calcul final qui determine le montant du au client lorsqu'une session se termine.

Tarif horaire de base

Le tarif horaire de base est la fondation de tous les calculs tarifaires. Il est defini dans Parametres > Tarification et represente le prix standard par heure d'utilisation d'un PC.

Tous les calculs internes utilisent des unites monetaires mineures (par exemple les centimes pour l'EUR ou les kurus pour le TRY). Si votre tarif de base est de 3,00 $ par heure, la valeur interne est 300. Cela elimine les problemes d'arrondi lies aux nombres a virgule flottante.

Prise en charge de la double devise

HandyCafe prend en charge une devise de base et une devise locale avec un taux de change (FX). Si vous operez dans un pays ou la tarification internationale differe de la tarification locale :

  • Devise de base. La devise utilisee pour les calculs tarifaires internes.
  • Devise locale. La devise affichee aux clients et utilisee pour les paiements.
  • Taux FX. Le facteur de conversion entre la devise de base et la devise locale.

Si les deux devises sont identiques, le taux FX est traite comme 1.0 et n'a aucun effet.

Creneaux tarifaires

Il existe 8 creneaux tarifaires codes par couleur, representant chacun un niveau de tarification different :

Creneau Couleur Utilisation type
Bleu Bleu Tarif standard
Orange Orange Supplement soiree ou week-end
Rouge Rouge Tarif premium heures de pointe
Vert Vert Remise heures creuses
Sarcelle Sarcelle Tarif etudiant ou membre
Gris Gris Tarification jour ferie ou speciale
Cyan Cyan Tarif de nuit
Emeraude Emeraude Tarif promotionnel

Chaque creneau possede trois proprietes :

  1. Nom. Un libelle descriptif (par exemple "Heures de pointe" ou "Remise nocturne").
  2. Multiplicateur. Une valeur decimale qui modifie le tarif de base. Les valeurs courantes incluent 1.0 (standard), 0.5 (moitie prix), 1.5 (supplement de 50 %), 2.0 (tarif double). Le multiplicateur doit etre nul ou positif.
  3. Donnees de la grille. Une representation interne qui definit les heures et jours auxquels le creneau s'applique. Cette donnee est geree automatiquement via la grille de planification.

Les creneaux peuvent etre actives ou desactives individuellement. Les creneaux desactives sont ignores par le moteur de tarification.

La grille de planification

La grille tarifaire est une matrice de 7 jours sur 24 heures (168 blocs d'une heure au total). Chaque bloc est assigne a un creneau tarifaire. La grille determine quel multiplicateur s'applique a un moment donne.

La grille est configuree dans Parametres > Grille tarifaire. Les jours vont du lundi au dimanche et les heures de 00h00 a 23h00. Pour assigner un creneau a un bloc horaire, selectionnez le bloc dans la grille et choisissez la couleur de creneau souhaitee.

Fonctionnement du moteur avec la grille

En interne, chaque bloc horaire correspond a une position dans les donnees de la grille. Le moteur verifie les donnees de chaque creneau active pour determiner quel creneau est actif pour un jour et une heure donnes.

Si aucun creneau n'a son indicateur active pour une heure donnee, le moteur utilise le tarif de base avec un multiplicateur de 1.0 par defaut.

Lorsque la fonctionnalite de grille tarifaire est entierement desactivee (dans Parametres > Tarification), toutes les sessions utilisent le tarif de base avec un multiplicateur de 1.0 quelle que soit l'heure.

Segments tarifaires

Un segment est une periode continue au sein d'une session durant laquelle le contexte tarifaire ne change pas. Le moteur de tarification cree un nouveau segment chaque fois que l'un de ces evenements limites se produit :

Limite Declencheur
session_start Une nouvelle session commence
session_stop La session est arretee
pause Le caissier met la session en pause
resume Le caissier reprend une session en pause
tick L'horloge franchit une limite d'heure vers un creneau tarifaire different
disconnect Le PC client perd sa connexion reseau
offline Le PC client passe hors ligne
load_recovery Le serveur redemarre et recupere une session en cours

Chaque segment enregistre :

Champ Description
session_id La session a laquelle ce segment appartient
segment_start Horodatage Unix du debut du segment
segment_end Horodatage Unix de la fin du segment (nul si encore ouvert)
pricing_slot_id L'identifiant du creneau tarifaire actif (par exemple "blue", "red" ou "base")
multiplier La valeur du multiplicateur du creneau tarifaire
base_price_snapshot Le tarif horaire de base capture au moment de l'ouverture du segment
amount Le cout calcule pour ce segment (defini a la cloture du segment)
boundary_reason La raison de la creation de ce segment

Pourquoi capturer le tarif de base ?

Le base_price_snapshot capture le tarif horaire de base au moment exact de l'ouverture du segment. C'est essentiel car un administrateur pourrait modifier le tarif de base en cours de session. En capturant cette valeur, chaque segment utilise le tarif en vigueur au moment de son demarrage, garantissant une facturation equitable et auditable.

Formule de calcul

Le cout d'un segment unique est calcule ainsi :

montant = arrondi_sup( (base_price_snapshot * multiplicateur * duree_en_secondes) / 3600 )

Plus precisement, le moteur utilise une arithmetique en nombres entiers mis a l'echelle pour eviter les erreurs de virgule flottante :

  1. Le multiplicateur est mis a l'echelle en nombre entier a virgule fixe (multiplie par 1 000 000).
  2. Le calcul est effectue entierement en nombres entiers de 128 bits.
  3. La division est arrondie au plafond. Le resultat est toujours arrondi a l'unite mineure superieure.

Calcul par minutes

Si l'option "calcul par minutes" est activee dans Parametres > Tarification, la formule change legerement :

montant = arrondi_sup( (base_price_snapshot * multiplicateur * minutes_utilisees) / 60 )

Ou minutes_utilisees = arrondi_sup(duree_en_secondes / 60). Cela signifie que toute minute entamee est comptabilisee comme une minute complete.

Calcul du total de la séance

Le cout total de la session est calcule en trois etapes :

Etape 1 : Addition de tous les segments

total_brut = somme des montants de tous les segments clos + montant partiel du segment ouvert

Le montant partiel du segment ouvert est calcule en temps reel en utilisant la formule ci-dessus avec l'horodatage actuel comme fin de segment.

Etape 2 : Application de l'arrondi

total_arrondi = arrondi_sup(total_brut, pas_arrondi)

L'arrondi est toujours au plafond (superieur) pour proteger les revenus. Le pas d'arrondi est configurable dans Parametres > Tarification. Par exemple, si le pas d'arrondi est de 50 (representant 0,50 $ dans une devise a 2 decimales), un total brut de 3,27 $ est arrondi a 3,50 $.

Etape 3 : Application du minimum des frais de demarrage

total_final = max(total_arrondi, frais_demarrage)

Les frais de demarrage constituent la facturation minimale pour toute session, quelle que soit sa duree. Si le total arrondi est inferieur aux frais de demarrage, ce sont les frais de demarrage qui sont factures.

Reglement

Le reglement est le processus de finalisation de la facturation d'une session. Il comporte deux etapes :

Reglement de demarrage (prepaye uniquement)

Lorsqu'une session prepayee commence, un enregistrement de reglement "demarrage" est cree. Il capture :

  • Cout calcule. Le cout calcule par le systeme pour le temps achete.
  • Montant facture. Le montant effectivement paye par le client (generalement identique au cout calcule).

Pour le mode prépayé "Verrouillage à l'achat", ce montant verrouille détermine le coût de la session indépendamment des changements tarifaires pendant la session.

Reglement d'arret

Lorsqu'une session (prepayee ou postpayee) est arretee, un enregistrement de reglement "arret" est cree :

Champ Description
Cout calcule Le total calcule par le systeme a partir de tous les segments tarifaires
Montant facture Le montant effectivement facture (par defaut identique au cout calcule)
Montant ajuste manuellement Si le caissier a ajuste manuellement le prix, le cout calcule d'origine est conserve ici
Taux de commission Taux de commission du mode de paiement (en pourcentage)
commission_fee Le montant de la commission calculee
fixed_fee Frais fixes du mode de paiement
computed_timeline_snapshot Un enregistrement JSON de chaque segment tarifaire de la session

L'instantane de la chronologie fournit une piste d'audit complete montrant exactement comment le cout a ete calcule, segment par segment.

Frais de mode de paiement

Chaque mode de paiement peut avoir deux types de frais :

Commission (points de base)

Le taux de commission est exprime en pourcentage. Les frais de commission sont calcules en appliquant ce taux au montant facture.

Exemple : Si le montant facture est de 10,00 $ (1000 unites mineures) et que le mode de paiement a un taux de commission de 2,5 %, les frais de commission sont de 0,25 $ (25 unites mineures).

Frais fixes

Un montant forfaitaire deduit par transaction, quel que soit le montant. Par exemple, des frais de traitement par carte bancaire de 0,30 $.

Les deux types de frais sont informatifs. Ils representent le cout pour l'entreprise d'accepter ce mode de paiement. Ils sont enregistres dans le reglement mais ne sont pas ajoutes a la facture du client.

TVA (Taxe sur la Valeur Ajoutee)

La TVA est configuree en pourcentage (0 a 100 %) dans Parametres > Tarification. Elle est appliquee en sus du montant calcule de la session :

TVA = montant facture x (taux TVA / 100)

Le montant de la TVA est affiche separement dans la boite de dialogue de paiement pour que le caissier puisse voir la ventilation fiscale.

Modes de tarification prepayee

Comme decrit dans Gestion des sessions, les sessions prepayees prennent en charge deux modes de tarification :

Verrouillage a l'achat

Lorsqu'une session prépayée démarre, le règlement de "démarrage" verrouille le montant de la facture. Pendant toute la durée de la séance :

  • L'heure de fin de la session est fixee en fonction des minutes achetees.
  • Meme si la grille tarifaire change, la session continue jusqu'a l'expiration du temps verrouille.
  • Le reglement d'arret utilise le montant verrouille du reglement de demarrage.

Grille en temps reel

Le temps restant de la session est recalcule en continu au fil des changements de creneaux tarifaires :

  • Si la session entre dans un creneau moins cher, le temps restant s'etend (le client obtient plus de minutes pour son argent).
  • Si la session entre dans un creneau plus cher, le temps restant se reduit.
  • Le reglement d'arret reflete la tarification effectivement appliquee tout au long de la session.

Decimales

Le nombre de decimales utilisees pour l'affichage des montants est configurable (2 a 4 decimales). Cela affecte l'affichage dans l'interface mais ne modifie pas les calculs internes en unites mineures.

Exemple : Avec 2 decimales, 3,50 $ s'affiche comme "3.50". Avec 3 decimales, il s'afficherait comme "3.500".

Exemples pratiques

Exemple 1 : Session post-payée simple

  • Tarif de base : 3,00 $/heure (300 unites mineures)
  • Grille : creneau standard (multiplicateur 1.0) toute la journee
  • Session : de 10h00 a 11h30 (90 minutes)
  • Frais de demarrage : 0,50 $

Calcul :

Segment 1 : (300 * 1.0 * 5400) / 3600 = 450 unites mineures (4,50 $)
Total : max(4,50 $, 0,50 $) = 4,50 $

Exemple 2 : Session chevauchant deux créneaux

  • Tarif de base : 4,00 $/heure (400 unites mineures)
  • Grille : Standard (1.0) de 10h00 à 12h00, Happy Hour (0.5) de 12h00 à 14h00
  • Session : de 11h00 a 13h00 (120 minutes)
  • Frais de demarrage : 1,00 $

Calcul :

Segment 1 (11h00-12h00, standard) : (400 * 1.0 * 3600) / 3600 = 400 (4,00 $)
Segment 2 (12h00-13h00, happy hour) : (400 * 0.5 * 3600) / 3600 = 200 (2,00 $)
Total : 4,00 $ + 2,00 $ = 6,00 $
Final : max(6,00 $, 1,00 $) = 6,00 $

Exemple 3 : Session avec pause

  • Tarif de base : 2,00 $/heure (200 unites mineures)
  • Grille : creneau standard (multiplicateur 1.0) toute la journee
  • Séance : Démarrage 10h00, Pause 10h30, Reprise 11h00, Arrêt 11h45
  • Frais de demarrage : 0,50 $

Calcul :

Segment 1 (10h00-10h30, actif) : (200 * 1.0 * 1800) / 3600 = 100 (1,00 $)
Periode en pause (10h30-11h00) : aucun frais
Segment 2 (11h00-11h45, actif) : (200 * 1.0 * 2700) / 3600 = 150 (1,50 $)
Total : 1,00 $ + 1,50 $ = 2,50 $
Final : max(2,50 $, 0,50 $) = 2,50 $

Etapes suivantes