# 3.4- Détail des priorités dans la définission des règles de commission

####   
**3.4.1- Gestion des dates**

  
 • Si l'utilisateur a soumis une date de début via le formulaire, on l'utilise ; sinon, par défaut : le 1er jour du mois courant.   
 • Même logique pour la date de fin, mais par défaut : le dernier jour du mois courant (date('m')+1, 0 → jour "0" du mois suivant = dernier jour du mois en cours).   
 • L'heure est fixée à 12h00 (midi) pour éviter les problèmes de fuseaux horaires.

#### **3.4.2- Choix de la méthode de calcul**

  
COMMISSION\_METHOD (base de calcul)

<table border="1" id="bkmrk-valeur-signification" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 45.635%;"></col><col style="width: 54.4445%;"></col></colgroup><tbody><tr><td>Valeur</td><td>Signification</td></tr><tr><td>ORDER</td><td>Commission sur les commandes (dès la commande)</td></tr><tr><td>PAYMENT</td><td>Commission sur les paiements reçus (au prorata)</td></tr><tr><td>FULLPAYMENT</td><td>Commission uniquement une fois la facture entièrement payée</td></tr></tbody></table>

  
COMMISSION\_BASE (assiette de commission)

<table border="1" id="bkmrk-valeur-signification-1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 45.5159%;"></col><col style="width: 54.5635%;"></col></colgroup><tbody><tr><td>Valeur</td><td>Signification</td></tr><tr><td>TURNOVER</td><td>Commission sur le chiffre d'affaires</td></tr><tr><td>MARGIN</td><td>Commission sur la marge</td></tr></tbody></table>

####  **3.4.3- Boucle de calcul et logique de "rupture"**

  
**a) Option COMMISSION\_RESTRICT\_TO\_CONTACT**  
Avant d'afficher une ligne, on vérifie si un autre contact de type "commissionné" existe sur la facture. Si oui → le commercial "générique" n'est pas commissionné sur cette facture (seul le contact dédié l'est).  
**b) La logique de rupture (saut à chaque sous total)**  
 • Rupture par agent : quand on change d'agent commercial, on affiche le sous-total du précédent, on cumule dans les totaux généraux, puis on réinitialise les compteurs et on mémorise les infos du nouvel agent.   
 • Rupture par client : idem quand un agent a plusieurs clients.   
 • Sinon : on mémorise simplement les infos (société, facture, paiement, bases de commission) sans cumul.

Résultat par (agent, client, facture, ligne, date)  
 ├─ 1 → 1ère itération : mémorise agent/client/facture + calcule taux  
 ├─ 2 → même agent/client → cumul silencieux (ou ligne détail)  
 ├─ 3 → changement de CLIENT → rupture client : sous-total client affiché  
 ├─ 4 → cumul...  
 ├─ 5 → changement d'AGENT → rupture agent : sous-total agent affiché  
 ├─ 6 → cumul...  
 └─ Fin de boucle → affichage du DERNIER sous-total + ligne des TOTAUX GÉNÉRAUX

  
À chaque rupture, la commission est calculée : taux de commission (%) × base (CA ou marge).

#### **3.4.4- Taux simple ou cumulé**

  
 • Sans COMMISSION\_CUMUL : la première règle correspondante donne le taux.  
 • Avec COMMISSION\_CUMUL : on continue de parcourir toutes les règles et on additionne les taux. Permet par exemple : 2% de base + 3% si catégorie produit premium + 1% si client fidèle = 6%

#### **3.4.5- Priorités règle de commissionnement**

  
Une règle est sélectionnée par 7 tests successifs :

  
Tableau des règles de commission :  
 └── Niveau 1 : fk\_user → À QUI s'applique la règle (agent/commercial) ou -1 (tous)  
 └── Niveau 2 : fk\_contact\_type → TYPE DE CONTACT concerné ou -1 (tous types)  
 └── Niveau 3 : fk\_soc → CLIENT (tiers) précis ou -1 (tous)  
 └── Niveau 4 : fk\_prodcat → CATÉGORIE de PRODUIT ou -1 (toutes)  
 └── Niveau 5 : fk\_custcat → CATÉGORIE de CLIENT ou -1 (toutes)  
 └── Niveau 6 : fk\_product\_type → 0 = PRODUIT, 1 = SERVICE, -1 = les deux  
 └── Niveau 7 : limite → SEUIL (montant ou % de remise)  
 └── = valeur : le TAUX de commission (ex: 8 pour 8%)

Au sein de chaque règle, la priorité est accordée selon les critères :

  
1\. QUI est commissionné : le contact commissionné &gt; le commercial du tiers &gt; tous (-1)  
2\. TYPOLOGIE : type de contact précis &gt; tous types (-1)  
3\. CLIENT : client précis &gt; tous (-1)  
4\. CATÉGORIE PRODUIT : catégorie précise &gt; toutes (-1)  
5\. CATÉGORIE CLIENT : catégorie précise &gt; toutes (-1)  
6\. TYPE PRODUIT/SERVICE : produit OU service &gt; les deux (-1)  
7\. SEUIL : traité séparément (barème à l'intérieur d'une règle)

Exemple pour 5 cas: (du plus prioritaire au moins prioritaire)

<table border="1" id="bkmrk-cat.-prod-cat.-clien" style="border-collapse: collapse; width: 100%; height: 206.267px;"><colgroup><col style="width: 5.12281%;"></col><col style="width: 10.9604%;"></col><col style="width: 9.88821%;"></col><col style="width: 9.53081%;"></col><col style="width: 10.9875%;"></col><col style="width: 53.5837%;"></col></colgroup><tbody><tr style="height: 29.4667px;"><td style="height: 29.4667px;">  
</td><td style="height: 29.4667px;">cat. prod</td><td style="height: 29.4667px;">cat. client</td><td style="height: 29.4667px;">client</td><td style="height: 29.4667px;">type prod</td><td style="height: 29.4667px;">Interprétation</td></tr><tr style="height: 29.4667px;"><td style="height: 29.4667px;">(A)</td><td style="height: 29.4667px;">✔ précise</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">✔ précis</td><td style="height: 29.4667px;">✔ précis</td><td style="height: 29.4667px;">Très spécifique : catégorie produit + client + type</td></tr><tr style="height: 29.4667px;"><td style="height: 29.4667px;">(B)</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">✔ précis</td><td style="height: 29.4667px;">✔ précis</td><td style="height: 29.4667px;">Moins spécifique : pas de catégorie produit</td></tr><tr style="height: 29.4667px;"><td style="height: 29.4667px;">(C)</td><td style="height: 29.4667px;">✔ précise</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">✔ précis</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">Pas de type produit</td></tr><tr style="height: 29.4667px;"><td style="height: 29.4667px;">(D)</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">✔ précis</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">Pas de catégorie produit ni de type</td></tr><tr style="height: 29.4667px;"><td style="height: 29.4667px;">(E)</td><td style="height: 29.4667px;">✔ précise</td><td style="height: 29.4667px;">✔ précise</td><td style="height: 29.4667px;">—</td><td style="height: 29.4667px;">✔ précis</td><td style="height: 29.4667px;">On remet les catégories et type mais on enlève le client et on ajoute la catégorie client</td></tr></tbody></table>

  
Nb : si 2 règles arrivent à égalité c’est la plus anciennement créée qui s’applique.