Prompt rectifié pour génération automatique de fiches de paie
Contexte
Je suis un expert en paie marocaine et réglementation CNSS.
Je souhaite créer un script Python capable de remplir automatiquement une fiche de paie
Excel existante, en respectant toutes les règles légales, plafonds, priorités et le modèle fourni.
Objectifs principaux
1. Prioriser les primes non soumises à la CNSS.
2. Compléter avec les primes soumises si nécessaire pour atteindre le salaire net cible
fourni dans le fichier salaires_net_mensuel.
3. Assurer une rotation aléatoire mensuelle des primes éligibles pour chaque salarié.
4. Respecter strictement les cellules du modèle Excel, sans écraser les formules
intégrées.
5. Calculer automatiquement :
o Salaire brut
o Salaire brut imposable
o Salaire net imposable
o IR selon le barème 2025
o Retenu CNSS
o Retenu AMO
o IR
o Salaire Net = Salaire Brut - (Retenu CNSS + Retenu AMO + IR)
Base de données des primes
Cat1 :
Primes non soumises :
- prime d'outillage : 100
- prime de salissure : 200
- prime de panier : 250
- indemnité de transport : 500
Primes soumises :
- prime d'assiduité : (pas de plafond)
Cat2 :
Primes non soumises :
- prime d'outillage : 100
- prime de salissure : 200
- prime de panier : 250
- indemnité de caisse : 150
- indemnité de transport : 500
- prime de tournée : 1500
Primes soumises :
- prime d'assiduité : 650
- prime de rendement : 1400
- indemnité d'encadrement : 800
Cat3 :
Primes non soumises :
- prime de panier : 250
- indemnité de caisse : 150
- indemnité de transport : 500
- prime de tournée : 1500
Primes soumises :
- prime d'assiduité : 650
- prime de rendement : 1400
- indemnité de responsabilité : 1400
- indemnité de poste : 1200
- indemnité d'encadrement : 800
Cat4 :
Primes non soumises :
- indemnité de caisse : 150
- indemnité de transport : 500
- prime de tournée : 1500
- indemnité de représentation : 500
Primes soumises :
- prime de rendement : 1400
- indemnité de poste : 1200
- indemnité de responsabilité : 1400
- indemnité d'encadrement : 800
Prime d’ancienneté (soumise) :
Cette prime doit toujours être présente dans la fiche de paie, quelle que soit la
catégorie.
Elle est calculée en pourcentage du salaire de base, selon l’ancienneté de
l’employé :
Plus de 2 ans jusqu’à 5 ans : 5 % du salaire de base
De 5 ans jusqu’à 12 ans : 10 %
De 12 ans jusqu’à 20 ans : 15 %
De 20 ans jusqu’à 25 ans : 20 %
Plus de 25 ans : 25 %
Les primes doivent être sélectionnées aléatoirement chaque mois parmi celles éligibles au
categorie correspondante, priorité non soumise > soumise, en respectant plafonds et
conditions jusqu’à atteinte du salaire net cible.
Objectif :
1-generer les fiche de paie automatiquement en respectant strictement toutes les instructions
jusqu’à atteinte du salaire net cible.
2-Ce n’est pas obligatoire d’utiliser le plafond de la prime, on peut considerer seulement une
partie de montant au cas de besoin pour tomber dans le salaire net cible.
3-le salaire net generer doit etre +/-1 au maximum.
Formules de calcul
1. Salaire brut
Salaire_brut = Salaire_de_base + Σ(Primes non soumises + Primes
soumises)
le montant calculé doit etre stocké dans la cellule E32
2. Salaire brut imposable
Salaire_brut_imposable = Salaire_brut - Σ(Primes exonérées CNSS)
le montant calculé doit etre stocké dans la cellule C33
3. Salaire net imposable
Si Salaire_brut_imposable <= 6500 alors :
Salaire_net_imposable = Salaire_brut_imposable - (CNSS + AMO +
Abattement*41.66 + min(Salaire_brut*0.35, 2500))
Si Salaire_brut_imposable > 6500 alors :
Salaire_net_imposable = Salaire_brut_imposable - (CNSS + AMO +
Abattement*41.66 + min(Salaire_brut*0.25, 2500))
le montant calculé doit etre stocké dans la cellule C36
4. Retenu CNSS = Min (Salaire_brut_imposable ;6000)*0.0448
le montant calculé doit etre stocké dans la cellule F34
5. Retenu AMO = Salaire_brut_imposable * 0.026
le montant calculé doit etre stocké dans la cellule F35
6. IR
if 0 <= Salaire_net_imposable <= 3333:
IR = 0
elif 3334 <= Salaire_net_imposable <= 5000:
IR = Salaire_net_imposable*0.10 - 333.33
elif 5001 <= Salaire_net_imposable <= 6667:
IR = Salaire_net_imposable*0.20 - 833.33
elif 6668 <= Salaire_net_imposable <= 8333:
IR = Salaire_net_imposable*0.30 – 1500
elif 8334 <= Salaire_net_imposable <= 15000:
IR = Salaire_net_imposable*0.34 - 1833.33
else: # Salaire_net_imposable > 15000
IR = Salaire_net_imposable*0.37 - 2283.33
le montant IR calculé doit etre stocké dans la cellule F37
Salaire_net = Salaire_brut – (Retenu CNSS + Retenu AMO + IR)
le montant Salaire net calculé qui doit étre impérativement egal au salaire cible ou +/-1
et doit etre stocké dans la cellule E38
Remplissage strict du modèle Excel
Cellule Contenu / Valeur
E3 Mois et année en cours, format "Month Year"
A6 Matricule salarié
B6 Nom et prénom concaténés
E6 Poste
F6 Lieu d'affectation
B10 Date d'embauche "dd/mm/yyyy"
C10 Situation familiale
D10 Abattement
E10 Numéro C.I.N.
F10 Numéro C.N.S.S.
C12 Salaire de base
D12 Nombre de jours travaillés
Cellule Contenu / Valeur
D13 Nombre de jours fériés
D14 Nombre de jours de congé
D15 Taux d’ancienneté
C40 Mode de paiement
⚠️Les formules existantes dans le modèle doivent rester intactes. Le script doit remplir
uniquement les valeurs.
Fonctionnalités Python attendues
Classe GenerateurFichePaie avec méthodes :
o calculer_plafond_prime()
o verifier_conditions()
o optimiser_primes() → ajuste automatiquement les primes pour
atteindre le salaire net cible fourni dans la base
o remplir_excel_modele()
Rotation aléatoire des primes éligibles chaque mois
Calcul complet CNSS, AMO, abattement, IR 2025
Remplissage exact des cellules du modèle Excel
Export d’une fiche de paie Excel pour chaque salarié portant le nom et prénom
Toutes les fiches stockées dans un dossier fiche_de_paie_<periode_de_la_paie>
Résultat attendu
Fiche de paie remplie exactement comme le modèle, avec toutes les primes et
indemnités calculées.
Respect des priorités légales, plafonds et conditions.
Rotation aléatoire mensuelle des primes.
Calcul correct : salaire brut, brut imposable, net imposable, IR 2025 et salaire net
final.
Le script atteint le salaire net cible pour chaque salarié via l’ajustement des primes.