Ce projet est un moteur de calcul de paie en Python, conçu pour générer des bulletins de paie conformes à la législation française. Il est modulaire, piloté par les données, et capable de gérer plusieurs employés et conventions collectives.
L'objectif de ce logiciel est de produire des bulletins de paie PDF précis et justes, en automatisant les calculs complexes liés au salaire brut, aux cotisations sociales, aux réductions de charges, et à l'impôt sur le revenu.
Le projet est structuré en quatre parties principales : les données (data), le moteur de calcul (moteur_paie), la présentation (templates), et les scripts (scripts).
.
├── data/
│ ├── employes/
│ │ └── [NOM_EMPLOYE]/
│ │ ├── contrat.json
│ │ ├── horaires_MM.json
│ │ ├── saisie_du_mois.json
│ │ └── cumuls.json
│ │
│ ├── conventions_collectives.json
│ ├── cotisations.json
│ └── ... (autres barèmes légaux)
│
├── moteur_paie/
│ ├── __init__.py
│ ├── bulletin.py
│ ├── calcul_brut.py
│ ├── calcul_conges.py
│ ├── calcul_cotisations.py
│ └── ... (autres modules de calcul)
│
├── scripts/
│ └── smic/
│ ├── orchestrator.py
│ ├── scraper_ia.py
│ ├── scraper_legisocial.py
│ └── ...
│
├── templates/
│ ├── template_bulletin.html
│ └── style.css
│
├── generateur_fiche_paie.py
└── requirements.txt
Le processus de génération d'un bulletin est orchestré par generateur_fiche_paie.py et suit un flux logique :
- Configuration : On choisit l'employé et la période à calculer dans
generateur_fiche_paie.py. - Chargement des Données :
moteur_paie/contexte.pycharge toutes les données pertinentes (contrat, entreprise, barèmes, cumuls, convention collective) dans un objet central. - Calcul du Brut :
moteur_paie/calcul_brut.pycalcule le salaire brut en intégrant le salaire de base, les primes, les congés payés, et les heures supplémentaires (avec un décompte hebdomadaire strict). - Calcul des Cotisations :
moteur_paie/calcul_cotisations.pygénère toutes les lignes de cotisations sociales (salariales et patronales) en appliquant les taux aux bonnes assiettes. Les réductions (Fillon, etc.) sont également calculées. - Calcul des Nets :
moteur_paie/calcul_net.pycalcule la cascade des nets : Net Social, Net Imposable (avec défiscalisation des HS) et le Net à Payer final après impôt et ajustements. - Assemblage et Rendu :
moteur_paie/bulletin.pyassemble toutes ces informations dans un dictionnaire final, qui est ensuite passé au templatetemplates/template_bulletin.htmlpour générer le PDF via WeasyPrint.
- Clonez le dépôt.
- Créez un environnement virtuel :
python -m venv venv source venv/bin/activate # Sur macOS/Linux venv\Scripts\activate # Sur Windows
- Installez les dépendances :
pip install -r requirements.txt
- Préparez les données : Assurez-vous que le dossier
data/employes/[NOM_EMPLOYE]/contient les fichierscontrat.json,horaires_MM.json,saisie_du_mois.jsonetcumuls.jsonpour l'employé désiré. - Configurez le calcul : Ouvrez
generateur_fiche_paie.pyet modifiez les variables en haut de la fonctiongenerer_une_fiche_de_paiepour choisir l'employé (nom_dossier_employe) et la période (annee_paie,mois_paie). - Lancez le script :
python generateur_fiche_paie.py
- Le bulletin PDF sera généré dans le dossier de l'employé correspondant.
Ce dossier contient des outils pour maintenir les barèmes légaux et conventionnels (SMIC, taux de cotisations, etc.) à jour dans le dossier data/.
L'objectif est d'automatiser la collecte des taux et des valeurs depuis des sources externes et de ne mettre à jour les fichiers de données que lorsque l'information est confirmée par plusieurs sources, garantissant ainsi la fiabilité.
Chaque sous-dossier (ex: smic/, cotisations/) correspond à un fichier de données à mettre à jour et contient quatre scripts :
scraper_site_A.py: Un script de scraping ciblé sur une source fiable (ex: le site de l'URSSAF).scraper_site_B.py: Un second script de scraping sur une autre source (ex: LegiSocial).scraper_ia.py: Un script plus flexible qui utilise une recherche Google ou une IA pour trouver la valeur sur des sources moins structurées.orchestrator.py: Le script principal qui pilote les trois autres.
- L'utilisateur lance l'orchestrateur pour une donnée spécifique (ex:
python scripts/smic/orchestrator.py). - L'
orchestrator.pyexécute les trois scripts de scraping pour récupérer la même information depuis trois sources différentes. - Il compare les trois résultats obtenus.
- Règle de consensus : Si, et seulement si, les trois sources retournent une valeur rigoureusement identique, la donnée est considérée comme fiable et validée.
- En cas de consensus, l'orchestrateur met à jour automatiquement le fichier JSON correspondant dans
data/avec la nouvelle valeur. En cas de divergence, une erreur est levée, nécessitant une vérification manuelle.