Maquette · module « Pilotage » du socle · v3.38 (numéro provisoire) · données d'exemple · à valider jusque dans la disposition avant tout prompt

« Ma journée » v2 — l'écran qui s'ouvre sur le téléphone. Geste tâches d'abord : une seule tâche « en cours » à la fois ; à « Terminé » l'app propose les heures à pointer. Une tâche peut venir de la direction, d'un chef de projet ou du collaborateur lui-même : même écran, même geste — seule l'origine s'affiche. Un chef de projet voit en plus son bloc « Mon équipe ».

IRADA · Espace Salma B. · Chargée de com
mercredi 2 septembreaujourd'hui

Aujourd'hui

Ma semaine 31 août → 4 sept.

Mes heures

1,25 hpointées aujourd'hui
Feuille de temps ›

Ce que l'écran fait

  1. Maintenant — la seule tâche en cours, le chrono, deux boutons : Terminé ou Bloqué. Si la tâche vient d'un autre, un lien discret « Demander un report » ; si elle est à soi, « Déplacer ».
  2. Aujourd'hui — les tâches dues aujourd'hui (et les retards), avec ▶ Commencer. Chaque ligne porte son origine : Direction, Hamza · chef CCIS-TTA, ou rien quand c'est à soi. Une tâche reçue reste « nouvelle » jusqu'au premier geste (Vu ou Commencer).
  3. Ma semaine — ce qui est prévu jour par jour, quelle que soit l'origine. C'est ce qui répond à « ce qu'il fera ».
  4. Mon équipe — chefs de marché seulement : ses collaborateurs sur ses marchés, leur « maintenant », et + Assigner une tâche (limité à ses marchés et à son équipe).
  5. Mes heures — le total pointé du jour, inchangé ; la feuille de temps existante reste accessible.
  6. + Nouvelle tâche pour moi — titre, marché, échéance : le collaborateur se planifie lui-même. Le chef de marché la voit dans « Mon équipe », la direction dans le cockpit — sans notification.
  7. Ma prime — la ligne sous la date (points du jour · série · niveau du mois) et, tout en bas, le bloc complet : montant projeté, jauge des niveaux, les 5 points du jour cochés ou non, la série, les badges, l'objectif d'équipe. Détail dans l'onglet Primes · gamifiées.
  8. Mission renfort — quand un chef ou la direction a besoin de quelqu'un un soir, un week-end ou un jour férié, la demande apparaît comme une quête, avec sa récompense affichée avant d'accepter : majoration légale, prime renfort, points, badge, et le repos compensateur proposé. « Je prends » → le chef confirme.

Essaie : touche Vu ou ▶ Commencer sur la tâche « nouvelle » (reçue de Hamza) → le badge disparaît ; dans le cockpit, « non vue » disparaît aussi.

Touche Terminé → l'app propose 1,50 h sur CCIS-TTA, modifiable ou refusable. Touche Bloqué → motif obligatoire, chef de marché prévenu.

Passe en « Hamza E. · chef de projet » → + Assigner une tâche à Salma → reviens sur Salma : la tâche est là, « nouvelle », « par Hamza ».

Touche Terminé puis Pointer : un +3 s'envole vers la ligne « Ma prime », qui pulse. Touche Je prends sur la mission renfort : la quête se confirme, avec le repos compensateur proposé.

« Cockpit équipe » — la page direction (panneau admin). Une carte par personne, trois zones : Maintenant / Fait aujourd'hui / Ensuite. Le bandeau ne compte que les exceptions. Dans « Ensuite », chaque tâche dit qui l'a donnée et si elle a été vue. « + Nouvelle tâche » assigne à n'importe qui, sur n'importe quel marché.

Cockpit équipe

mer. 02/09/2026 · 15:50

Par marché — ce qui est ouvert, ce qui accroche, ce qui est dû cette semaine

MarchéChef de marchéOuvertesEn retardBloquéesLivrables sem.Prochain livrable
Mis à jour en continu · aucune IA automatique · rapport PDF = même mécanique que la fiche AO

Le moteur derrière les deux écrans — ce qui entrera tel quel dans le prompt Claude Code : objets, états, qui assigne quoi, règles gravées, signaux, notifications, dispositions à respecter, recette.

Objets (migrations additives)

tasks
project_id (nul = fonctionnement interne) · employee_id responsable unique · titre · description · statut · priorite · echeance (date, heure optionnelle) · prevu_le (jour planifié) · estimation_h · commence_le · termine_le · motif_blocage · livrable (bool) · assigne_par (user) · origine (direction | chef_de_marche | soi_meme) · vu_le · ordre
task_updates
le journal, écrit à chaque geste : task_id · user_id · de → vers · commentaire · heures_pointees · cree_le. L'affectation elle-même est un geste (« a reçu de Direction »). C'est lui qui répond à « ce qu'il a fait » — sans saisie supplémentaire.
Pont heures
« Terminé » ⇒ proposition d'heures (écart arrondi au ¼ h, modifiable, refusable) ⇒ si acceptée, une ligne timesheets (date, marché, heures, remarque = titre de la tâche). La répartition des coûts RH continue de fonctionner.
Existant réutilisé
employees, projects (chef de marché = lead_employee_id), project_assignments (= l'équipe d'un marché), push_subscriptions, panneau Employé (/espace), panneau Admin, vue imprimable → PDF.

États d'une tâche

À faire→En cours→Terminé
En cours→Bloqué→ reprise →En cours
En cours→ Commencer une autre →À reprendre
Nouvelle= reçue d'un autre, aucun geste encore (drapeau vu_le vide), quel que soit le statut

Phase 2 : En attente de validation pour les livrables vus par le client (modèle CCIS-TTA).

Signaux (seuils dans Réglages)

🔴 En retard
échéance dépassée et tâche non terminée
🟠 Bloqué
statut « Bloqué », avec son motif et depuis quand
⚪ Planning vide
aucune tâche prévue sur les 2 prochains jours ouvrés
⏱ Silence
aucun geste (journal) depuis 48 h ouvrées
✅ Terminées
compte du jour — le seul signal « positif », pour voir que ça avance
« non vue »
pas une tuile : une mention sur la tâche dans « Ensuite », tant que le collaborateur n'a fait aucun geste dessus

Qui assigne quoi — trois origines, un seul écran pour celui qui reçoit

QuiDepuis oùPeut créer pourSur quels marchésChange l'échéance / le responsableNotification
Direction (gérant, admin)Cockpit → « + Nouvelle tâche » ; fiche marché ; fiche collaborateurn'importe quitous, interne comprisoui, toujourspush immédiat au collaborateur : « Nouvelle tâche de Direction : … — échéance jeu. »
Chef de marché (lead_employee_id)« Mon équipe » sur son téléphone ou dans /espaceles collaborateurs affectés à ses marchés (project_assignments)ses marchés seulementoui, sur ses propres affectations ; la direction peut reprendre la mainpush immédiat au collaborateur ; la direction ne reçoit rien (elle voit dans le cockpit)
Collaborateur« + Nouvelle tâche pour moi »lui-même seulementses marchés + interneoui sur ses propres tâches ; sur une tâche reçue : « Demander un report » (motif) → l'assignant trancheaucune ; visible dans « Mon équipe » du chef et dans le cockpit

Point de vigilance : un collaborateur ne peut ni supprimer ni réassigner une tâche reçue ; il la termine, la bloque (motif) ou demande un report. La suppression reste à l'assignant ou à la direction, toujours journalisée.

Règles gravées

  1. Responsable unique + échéance obligatoires. Une tâche sans l'un des deux est refusée à l'enregistrement, quelle que soit l'origine.
  2. Une seule tâche « en cours » par personne. Commencer une autre remet la précédente « à reprendre » — jamais deux chronos.
  3. « Bloqué » exige un motif et notifie le chef de marché (et le gérant) immédiatement.
  4. « Terminé » propose les heures, ne les impose pas. Refuser ne crée aucune ligne de temps.
  5. Trois origines, mêmes gestes. L'écran du collaborateur ne change pas selon qui a donné la tâche ; seules l'origine et « nouvelle » s'affichent. Le chef de marché n'assigne que sur ses marchés, à son équipe.
  6. Une tâche reçue ne se supprime pas et ne se réassigne pas par celui qui la reçoit. Il demande un report avec motif ; l'assignant tranche, rien ne bouge tout seul.
  7. Rien ne se ferme ni ne se déplace tout seul. Le logiciel propose, le gérant tranche.
  8. Silence sur la masse, alerte sur l'exception. Une tâche reçue vaut un push (elle s'adresse à quelqu'un) ; une tâche qu'on se donne n'en vaut aucun ; une tâche terminée non plus.
  9. Multi-tenant, base vide. Aucun « IRADA » en dur ; sans tâche, le cockpit affiche « Aucune tâche — planifiez la semaine », zéro erreur.

Notifications (push existantes)

Collaborateur
tâche reçue : immédiat, avec l'origine et l'échéance. 08:30 « Ta journée : 3 tâches » (seulement si le planning n'est pas vide) ; rappel 17:30 si une tâche est encore « en cours ».
Chef de marché
blocage sur son marché : immédiat. Demande de report : immédiat (il tranche). Retard sur son marché : dans le récap du soir.
Gérant
18:00 un seul récap — retards, blocages, silences, tâches non vues depuis 24 h — uniquement s'il y a une exception. Vendredi 17:00 : rapport hebdo PDF + push.
WhatsApp
Phase 1 : bouton « Copier pour WhatsApp » (texte brut du récap). Pas d'API. Phase 3 : WhatsApp Cloud API si le besoin se confirme.
IA
À la demande seulement : « Rédiger le compte rendu hebdo » depuis le journal. Jamais automatique.

Disposition à respecter (le prompt l'épellera)

Téléphone
Colonne unique, ordre exact : navigation du jour → Maintenant (carte accentuée, 2 boutons pleine largeur, lien report/déplacer à droite) → Aujourd'hui (liste, origine sous le titre, ▶ à droite, ligne « nouvelle » surlignée) → Ma semaine (5 colonnes Lun→Ven, aujourd'hui accentué) → Mission renfort (seulement s'il y en a une ouverte ou prise, carte indigo) → Mon équipe (chefs de marché seulement, sinon absent) → Mes heures → Ma prime → bouton « + Nouvelle tâche pour moi » centré. Aucune section vide affichée, aucune 2ᵉ colonne.
Cockpit
Bandeau titre + filtre marché → 5 tuiles de signaux (cliquables = filtres) → grille de cartes 3 colonnes (2 en tablette, 1 en mobile), liseré de couleur = pire signal, « Ensuite » avec origine et « non vue » → panneau détail pleine largeur sous la grille (journal du jour · semaine · charge) → tableau « Par marché » → pied d'actions ; « + Nouvelle tâche » = formulaire en ligne (titre · responsable · marché · échéance · prévu le · livrable), jamais une page à part.
Hors phase 1
Espace client (livrables validés en ligne) · vue groupe IRADA + RUWAD (flux JSON par jeton, comme l'ingest) · WhatsApp API · sous-tâches · dépendances entre tâches · affectation à plusieurs (un responsable, toujours).

Recette exigée dans le prompt

  1. Tâche sans responsable ou sans échéance ⇒ refusée, message clair (pour les 3 origines).
  2. Commencer B alors que A est en cours ⇒ A « à reprendre », une seule « en cours » par personne (test sur 2 tâches, 2 personnes).
  3. Bloqué sans motif ⇒ refusé ; bloqué avec motif ⇒ notification au chef de marché et au gérant, une seule.
  4. Terminé ⇒ proposition d'heures = écart arrondi au ¼ h ; acceptée ⇒ 1 ligne timesheet ; ajustée ⇒ la valeur ajustée ; refusée ⇒ aucune ligne.
  5. Direction assigne à X ⇒ origine = direction, push à X, « nouvelle » chez X et « non vue » au cockpit ; premier geste de X ⇒ vu_le rempli, les deux mentions disparaissent.
  6. Chef de marché assigne : accepté pour un collaborateur affecté à son marché ; refusé (403 + message) hors de son marché ou hors de son équipe ; jamais de push à la direction.
  7. Collaborateur : « pour moi » seulement (un employee_id ≠ le sien ⇒ refusé) ; sur une tâche reçue, supprimer/réassigner ⇒ refusé ; « Demander un report » ⇒ notification à l'assignant, échéance inchangée tant qu'il n'a pas tranché.
  8. Signaux calculés sur un jeu témoin : 1 retard, 1 bloqué, 1 planning vide, 1 silence, N terminées — compte exact.
  9. Cockpit et « Ma journée » sur base vide (RUWAD) ⇒ messages d'accueil, zéro erreur ; « Mon équipe » absent pour qui n'est chef d'aucun marché.
  10. Rapport hebdo ⇒ PDF généré (instance dompdf fraîche par rendu), contenu = par personne + par marché + signaux.
  11. Aucune chaîne « IRADA » en dur ; aucune dépendance composer ; migrations additives idempotentes ; pint, suite complète, npm run build, tag.

Primes gamifiées, journalières — chaque jour, le journal des tâches rapporte des points (barème fixe, 10 max) ; les points font une série, des badges et, en fin de mois, un niveau (Bronze · Argent · Or) qui donne un % de la prime cible fixée par collaborateur. Le moteur propose, tu valides, la paie ou le virement existants paient. Le collaborateur voit tout en direct sur son téléphone ; toi, la page « Primes du mois ».

IRADA · EspaceSalma B. · Chargée de com

↑ Le même bloc « Ma prime » qu'en bas de « Ma journée », vu ici en entier. Rien n'est saisi : tout vient des gestes de la journée.

Ce que le collaborateur voit

  1. Le montant projeté et la cible : « 480 DH projetés si tu tiens ce rythme · cible 800 DH ». Pas une promesse : une projection, recalculée chaque soir.
  2. La jauge des niveaux — où il en est dans le mois, et les trois seuils Bronze · Argent · Or à atteindre.
  3. Les 5 points du jour — cochés ✓ (acquis), ✕ (perdus), … (encore à prendre), – (sans objet). Il sait à 15 h ce qu'il peut encore gagner avant 18 h.
  4. La série — 14 cases, son joker du mois, et ce que la série rapporte (5 j = badge, 10 j = +20 pts).
  5. Les badges du mois et l'objectif d'équipe de la semaine (fixé par le chef de marché) — la part collective, pour que chacun aide les autres.
  6. Les moments de fête — un badge débloqué, un niveau franchi, une série de 10 jours : une carte plein écran, une seconde de confettis, et on revient au travail. Jamais de fête pour les autres, jamais de honte publique.
Simuler sur le téléphone :

Ce que ça change côté direction : tu ne calcules rien. Le 1ᵉʳ du mois, la page « Primes du mois » ci-dessous te propose une ligne par personne, avec le calcul en clair. Tu valides, tu ajustes (motif obligatoire) ou tu refuses — en bloc ou ligne par ligne. Le reste (bulletin, virement) existe déjà.

Essaie : dans le tableau, Ajuster Yassine à 350 DH avec un motif, puis Valider Salma : le total se recalcule, le message dit où part l'argent.

Primes du mois

août 2026 · clôturé le 01/09 · propositions du moteur
21 jours ouvrés · 210 pts max6 propositions · 2 780 DH
CollaborateurPointsNiveauCibleProposéDétail du calculDécision
Proposée → Due (paie ou virement selon le régime) · Refusée → aucune ligne · tout est journalisé

Temps extra · week-end · fériés — 1) le dû légal — salariés, code du travail, pas une prime

Heure supplémentaire validéeMajoration
Jour de semaine, 6 h – 21 h+25 %
Nuit, 21 h – 6 h+50 %
Repos hebdomadaire ou jour férié, de jour+50 %
Repos hebdomadaire ou jour férié, de nuit+100 %
Taux horaire
salaire de base ÷ 191. Ex. 6 000 DH → 31,41 DH/h ; un dimanche de 6 h de jour = 6 × 31,41 × 150 % = 283 DH, même si un repos compensateur est accordé (art. 201, loi 65-99).
Sur le bulletin
nouvelle ligne overtime_total (+ détail heures jour / nuit / repos / férié) calculée depuis les renforts validés — jamais saisie à la main, jamais oubliée.
Auto-entrepreneur
hors code du travail : taux contractuel réglable (défaut : +50 % du tarif journalier le week-end et les fériés) → facture complémentaire. Stagiaire : pas de renfort (protégé) ; si exception, gratification.
Repos
24 h de repos hebdomadaire obligatoires : l'app propose le jour de repos compensateur dans la semaine qui suit, le chef confirme. Aucun contingent annuel légal, mais alerte direction au-delà de 2 renforts/mois.
À vérifier
avec ton comptable : modalités de paie des majorations et des jours fériés chômés payés. Je ne suis ni comptable ni avocat.

Temps extra — 2) la prime « renfort », gamifiée — par-dessus le dû légal, réglable

Le flux
un chef de marché ou la direction publie une mission renfort (date, marché, heures, pourquoi) → elle apparaît comme une quête sur les téléphones de l'équipe du marché, récompense affichée avant d'accepter → « Je prends » → le chef confirme → le jour J, les heures se pointent dans « Ma journée » (marquées renfort) → le chef valide le soir → paie (majoration) + prime renfort + points + badge, d'un coup.
Prime renfort
montant fixe par mission validée, réglable : soir (≥ 2 h après 19 h) 50 DH · week-end 200 DH/jour · jour férié 300 DH/jour. Payée avec la prime du mois (même circuit : proposée → validée → paie ou virement).
Points
soir +2 · week-end +5 · férié +5 (en plus des 10 du jour) ; une mission renfort accomplie ne casse jamais la série et compte comme journée à ≥ 7 pts.
Badges
« Pompier » (3 soirs dans le mois) · « Gardien du week-end » (un week-end validé) · « Toujours là » (un férié) · « Bras droit » (a pris une mission que personne ne voulait — publiée depuis plus de 48 h).
Gardes santé
2 missions week-end/férié max par mois comptées en points et prime (au-delà : le dû légal seulement + alerte direction « surcharge ») · repos compensateur proposé automatiquement · jamais deux week-ends de suite sans validation direction · rien pour un travail non demandé ni validé (un samedi passé au bureau sans mission = 0, et la direction en est informée).
Équité
la mission part à celui qui accepte en premier parmi l'équipe du marché ; le chef peut choisir quelqu'un d'autre avec un motif ; l'historique des renforts de chacun est visible du chef (pour tourner).

L'expérience gamifiée — cinq moments, une règle : célébrer, jamais humilier

08:30 · matin
Ta journée
Push unique : « 3 tâches · 10 pts à prendre · série 4 j ». L'écran s'ouvre sur Maintenant. Zéro réglage, zéro menu.
dans la journée
Chaque geste répond
Terminé → +3 qui s'envole vers la ligne prime, qui pulse ; livrable validé par le chef → carte « Badge débloqué » 1 s ; une vibration courte sur le téléphone. Jamais de son.
18:00 · soir
Récap du jour
« 9/10 pts · série 5 j 🔥 · il te manquait : blocage non signalé ». Un conseil, pas un reproche. Silence total si la journée est vide (congé, terrain).
vendredi 17:00
Ma semaine
Carte partageable (image) : 47 pts, badges, objectif d'équipe 3/3 → bouton « Partager sur WhatsApp ». C'est le collaborateur qui choisit de montrer, jamais l'app.
1ᵉʳ du mois
Révélation
Après ta validation : plein écran, la jauge monte jusqu'au niveau, le montant s'affiche, les badges du mois défilent. Puis la prime est sur le bulletin. Une fois par mois, c'est un vrai moment.
  1. Une main, un pouce, 3 boutons. Cibles ≥ 48 px, tout l'important dans le premier écran, la prime en un geste vers le bas.
  2. Instantané et hors ligne. PWA : Ma journée s'ouvre en moins d'une seconde et fonctionne sans réseau (Oued Amlil, Khémisset) ; les gestes se synchronisent au retour du réseau, avec l'heure réelle du geste.
  3. La récompense avant l'effort. Chaque quête (tâche, mission renfort) montre ce qu'elle rapporte avant qu'on la prenne : points, prime, badge, repos.
  4. Fêter, jamais humilier. Les fêtes sont privées ; pas de classement par argent ; le tableau d'équipe est une option, et il montre les séries, pas les primes.
  5. Pas de piège. Aucune notification de points, aucune relance culpabilisante, aucune « perte » affichée en rouge : un point non pris est « à prendre », pas « perdu ».
  6. Bilingue et sobre. Français / arabe (interface miroir RTL), mode sombre, animations < 1 s et coupées si « réduire les animations » est activé.
  7. Le joker, un vrai droit. Un jour raté par mois ne casse rien — la vie existe. L'app le dit clairement : « joker utilisé, série sauvée ».
  8. Tout est explicable. Chaque point, chaque dirham a sa ligne de journal ; le collaborateur peut la lire, le gérant peut l'annuler avec un motif.

Barème journalier — 10 points max par jour, réglable, aucun point négatif

Geste (calculé le soir à 18:00 depuis le journal)Points
Planning tenu — toutes les tâches reçues dues aujourd'hui terminées, ou reportées avant l'échéance avec motif accepté3
Livrable validé conforme et à l'heure par le chef de marché (1 seul compte par jour — découper ne rapporte rien)3
Zéro tâche en retard ce soir2
Journée à jour — aucune tâche « en cours » fantôme à 18:00, heures pointées1
Blocage signalé à temps, motif validé par le chef (compte POUR, jamais contre)1
Objectif d'équipe de la semaine atteint (fixé par le chef, ex. « 3 livrables CCIS-TTA rendus ») — à chaque membre, le vendredi+5
Coup de pouce direction (motif obligatoire, journalisé, 2 par mois max)+5
Mission renfort validée — soir / week-end / férié (hors des 10 du jour ; 2 week-ends-fériés max par mois)+2 / +5 / +5

Un retard = 0 point de « planning tenu » ce jour-là et la série s'arrête — c'est toute la sanction. Jours de congé et fériés : ni points ni pénalité, retirés du maximum du mois.

Niveaux, séries, badges

Niveau du mois
points ÷ maximum du mois (jours ouvrés × 10) : < 60 % rien · 60–74 % Bronze = 25 % de la cible · 75–89 % Argent = 60 % · ≥ 90 % Or = 100 %. Seuils et pourcentages dans Réglages.
Prime cible
montant fixe par collaborateur, dans sa fiche (ex. 800 DH). Ni % du salaire, ni montant par livrable.
Série
jours ouvrés consécutifs à ≥ 7 points. 5 jours → badge ; 10 jours → +20 pts au mois ; 20 jours → +40 pts. 1 joker par mois : une journée ratée ne casse pas la série (Ramadan, urgence terrain).
Badges (mensuels)
« Livreur J-J » (100 % des livrables à l'heure) · « Zéro retard » · « Toujours à jour » (aucune journée sans geste) · « Bon coéquipier » (a débloqué un collègue ou rendu un livrable pour l'objectif d'équipe). Un badge = de la fierté, pas des dirhams — sauf « Livreur J-J » : +10 pts.
Classement
désactivé par défaut. Option « Tableau d'équipe » (séries et niveaux de chacun, visible par l'équipe) activable par la direction. Jamais de classement par montant.
Chef de marché
ses propres points + ponctualité de son équipe (poids réglable, défaut 20 % de sa cible) + les primes marché déjà existantes (marge, décompte encaissé).

Gardes anti-triche — gravées, non réglables

  1. Seules les tâches reçues comptent pour « planning tenu » et « livrable » ; celles qu'on se donne ne comptent que dans « journée à jour ».
  2. Un livrable par jour au maximum dans les points : découper un travail en dix tâches ne rapporte rien de plus.
  3. Un blocage à motif validé suspend le chrono (attente client, attente gérant) : on ne perd rien pour un retard causé par d'autres.
  4. Un report accordé déplace l'échéance sans pénalité ; 3 reports dans le mois ⇒ signal au chef, pas de points en moins.
  5. Base insuffisante (moins de 5 tâches reçues échues dans le mois, ou arrivée en cours de mois) ⇒ pas de niveau automatique, prime manuelle seulement.
  6. Le chef ne valide pas ses propres livrables ; la direction peut annuler toute validation (motif, journalisé).
  7. Rien n'est versé sans validation : le moteur propose, le gérant tranche, ligne par ligne ou en bloc.

Objets & moteur — on réutilise BonusEngine, pas un second système

bonus_points
le grand livre journalier : employee_id · date · points · detail (json : quel geste a compté) · serie · joker_utilise. Calculé par le planificateur à 18:00, recalculable (idempotent) pour un jour donné.
bonus_rules
nouveau déclencheur cloture_mensuelle et base bareme_niveaux ; colonne params (json) = barème, seuils, joker, poids équipe du chef. Les règles marché existantes (soumission_retenue, decompte_encaisse, fin_de_marche) restent intactes.
bonuses
nouveau statut proposee avant due ; colonnes periode (2026-08) et details (json : points, niveau, cible, coups de pouce, ajustement + motif). Puis le circuit existant : pay_with_payroll → bonus_total du bulletin, ou virement par transaction.
employees
prime_cible (DH) · prime_active (bool) · taux_renfort_ae (auto-entrepreneurs). Rien d'autre.
extra_missions
les missions renfort : project_id · date · type (soir | week_end | ferie) · heures_prevues · motif · publiee_par · employee_id (qui l'a prise) · statut (publiee → prise → confirmee → validee) · heures_jour / heures_nuit pointées · repos_compensateur_le. Une mission validée alimente d'un coup : timesheets (marquées renfort), la ligne overtime_total de la paie, une prime renfort (bonuses) et bonus_points.
payrolls
overtime_total + overtime_detail (json : heures et taux par catégorie). Calcul : base ÷ 191 × heures × (1 + majoration).
Paiement par régime
salarié → avec la paie (imposable, CNSS/AMO) · auto-entrepreneur → virement sur facture complémentaire · stagiaire → gratification par virement · contractuel non déclaré → virement, à régulariser avec le comptable.
À vérifier avec le comptable
traitement fiscal/social de la prime de rendement ; risque de « droit acquis » si la prime devient fixe et régulière → règlement de primes écrit, variable et conditionnel, remis à chaque collaborateur. Je ne suis ni comptable ni avocat.

Disposition & recette

Téléphone
une ligne « Ma prime » sous la navigation du jour (points du jour · série · niveau) → touche = descend au bloc « Ma prime » placé après « Mes heures » : montant projeté + cible · jauge des niveaux · 5 points du jour cochés · série (14 cases) · badges · objectif d'équipe. Aucune notification de points ; un seul push à la validation mensuelle (« Prime d'août validée : 480 DH »).
Direction
page « Primes du mois » : bandeau (jours ouvrés, max, total proposé) → tableau 1 ligne par collaborateur (points, niveau, cible, proposé, détail du calcul en clair, décision Valider / Ajuster (montant + motif) / Refuser) → pied : valider tout, coup de pouce, règlement PDF. Accessible aussi depuis le cockpit (bouton « Primes du mois »).
Recette
1) journée témoin : 5 gestes → 10 pts exacts, recalcul idempotent ; 2) tâche auto-créée terminée ⇒ 0 pt planning/livrable ; 3) blocage validé ⇒ pas de retard compté ; 4) 2 livrables le même jour ⇒ 3 pts, pas 6 ; 5) série 5 jours ⇒ badge, joker consomme 1 jour raté, 2ᵉ jour raté ⇒ série rompue ; 6) mois témoin 21 jours : 182 pts ⇒ 87 % ⇒ Argent ⇒ 60 % × 800 = 480 ; 7) base insuffisante ⇒ aucune proposition automatique ; 8) Valider ⇒ due + bonus_total du bulletin (salarié) ou transaction (AE) ; Refuser ⇒ aucune ligne ; Ajuster sans motif ⇒ refusé ; 9) chef validant son propre livrable ⇒ refusé ; 10) base vide (RUWAD) ⇒ « Aucune prime proposée », zéro erreur ; 11) mission renfort dimanche 6 h de jour, base 6 000 ⇒ overtime_total = 283 DH, prime renfort 200, +5 pts, série intacte, repos compensateur proposé ; 12) 3ᵉ week-end du mois ⇒ majoration due, 0 pt, 0 prime, alerte direction ; 13) heures pointées un samedi sans mission ⇒ rien, direction informée ; 14) stagiaire ⇒ aucune mission proposable ; 15) « réduire les animations » activé ⇒ aucune animation, mêmes informations.