conventions-collectives 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +322 -2
- package/dist/compiled/0112-industrie-laitiere.2026.1.json +150 -0
- package/dist/compiled/0843-boulangerie-patisserie-artisanale.2026.1.json +257 -0
- package/dist/compiled/1090-services-automobile.2026.1.json +173 -0
- package/dist/compiled/1261-acteurs-lien-social-familial.2026.1.json +73 -0
- package/dist/compiled/1351-prevention-securite.2026.1.json +376 -0
- package/dist/compiled/1486-syntec.2025.1.json +117 -0
- package/dist/compiled/1501-restauration-rapide.2025.1.json +121 -0
- package/dist/compiled/1505-commerce-detail-alimentaire-non-specialise.2026.1.json +128 -0
- package/dist/compiled/1516-organismes-formation.2025.1.json +162 -0
- package/dist/compiled/1516-organismes-formation.2027.1.json +162 -0
- package/dist/compiled/1979-hotels-cafes-restaurants.2024.1.json +95 -0
- package/dist/compiled/1996-pharmacie-officine.2025.1.json +86 -0
- package/dist/compiled/1996-pharmacie-officine.2026.1.json +86 -0
- package/dist/compiled/2216-commerce-detail-gros-predominance-alimentaire.2025.1.json +85 -0
- package/dist/compiled/2216-commerce-detail-gros-predominance-alimentaire.2026.1.json +85 -0
- package/dist/compiled/2941-aide-soins-domicile.2026.1.json +360 -0
- package/dist/compiled/3239-particuliers-employeurs-emploi-domicile.2026.1.json +472 -0
- package/dist/compiled/index.d.ts +4 -0
- package/dist/compiled/index.d.ts.map +1 -0
- package/dist/compiled/index.js +168 -0
- package/dist/compiled/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -4
- package/rules/0112-industrie-laitiere/0112-industrie-laitiere.2026.1.publicodes +111 -0
- package/rules/0112-industrie-laitiere/README.md +18 -0
- package/rules/0843-boulangerie-patisserie-artisanale/0843-boulangerie-patisserie-artisanale.2026.1.publicodes +199 -0
- package/rules/0843-boulangerie-patisserie-artisanale/README.md +35 -0
- package/rules/1090-services-automobile/1090-services-automobile.2026.1.publicodes +132 -0
- package/rules/1090-services-automobile/README.md +22 -0
- package/rules/1261-acteurs-lien-social-familial/1261-acteurs-lien-social-familial.2026.1.publicodes +88 -0
- package/rules/1261-acteurs-lien-social-familial/README.md +9 -0
- package/rules/1351-prevention-securite/1351-prevention-securite.2026.1.publicodes +287 -0
- package/rules/1351-prevention-securite/README.md +27 -0
- package/rules/1486-syntec/1486-syntec.2025.1.publicodes +95 -0
- package/rules/1486-syntec/README.md +11 -0
- package/rules/1501-restauration-rapide/1501-restauration-rapide.2025.1.publicodes +115 -0
- package/rules/1501-restauration-rapide/README.md +30 -0
- package/rules/1505-commerce-detail-alimentaire-non-specialise/1505-commerce-detail-alimentaire-non-specialise.2026.1.publicodes +118 -0
- package/rules/1505-commerce-detail-alimentaire-non-specialise/README.md +22 -0
- package/rules/1516-organismes-formation/1516-organismes-formation.2025.1.publicodes +162 -0
- package/rules/1516-organismes-formation/1516-organismes-formation.2027.1.publicodes +159 -0
- package/rules/1516-organismes-formation/README.md +23 -0
- package/rules/1979-hotels-cafes-restaurants/1979-hotels-cafes-restaurants.2024.1.publicodes +88 -0
- package/rules/1979-hotels-cafes-restaurants/README.md +12 -0
- package/rules/1996-pharmacie-officine/1996-pharmacie-officine.2025.1.publicodes +106 -0
- package/rules/1996-pharmacie-officine/1996-pharmacie-officine.2026.1.publicodes +106 -0
- package/rules/1996-pharmacie-officine/README.md +12 -0
- package/rules/2216-commerce-detail-gros-predominance-alimentaire/2216-commerce-detail-gros-predominance-alimentaire.2025.1.publicodes +80 -0
- package/rules/2216-commerce-detail-gros-predominance-alimentaire/2216-commerce-detail-gros-predominance-alimentaire.2026.1.publicodes +83 -0
- package/rules/2216-commerce-detail-gros-predominance-alimentaire/README.md +12 -0
- package/rules/2941-aide-soins-domicile/2941-aide-soins-domicile.2026.1.publicodes +300 -0
- package/rules/2941-aide-soins-domicile/README.md +19 -0
- package/rules/3239-particuliers-employeurs-emploi-domicile/3239-particuliers-employeurs-emploi-domicile.2026.1.publicodes +326 -0
- package/rules/3239-particuliers-employeurs-emploi-domicile/README.md +30 -0
- package/rules/versions.lock.json +19 -0
package/README.md
CHANGED
|
@@ -1,3 +1,323 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Conventions collectives françaises en publicodes
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
L’objectif de ce projet est de mettre à disposition **l’ensemble des conventions collectives françaises en langage [publicodes](https://publi.codes)**, sous une forme lisible, versionnée et réutilisable dans des outils de calcul.
|
|
4
|
+
|
|
5
|
+
Le dépôt contient les modèles de conventions collectives, leurs références juridiques, leur compilateur et leurs tests. Il produit le package `conventions-collectives`, utilisé notamment par JourDePaye pour compléter les règles de `modele-social`.
|
|
6
|
+
|
|
7
|
+
**Les contributions sont les bienvenues !** Vous pouvez proposer une nouvelle convention, enrichir une convention existante, ajouter des tests, améliorer les références aux textes ou la documentation.
|
|
8
|
+
|
|
9
|
+
## Conventions déjà présentes
|
|
10
|
+
|
|
11
|
+
Treize conventions sont actuellement représentées, avec seize versions de modèles. Leur couverture porte sur les salaires minima, la classification nécessaire à leur calcul et certains compléments de rémunération ; la présence d’une convention ne signifie pas que toutes ses dispositions sont déjà modélisées.
|
|
12
|
+
|
|
13
|
+
| Convention | IDCC | Versions et dates d’effet | Règles présentes |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| [Boulangerie-pâtisserie (entreprises artisanales)](rules/0843-boulangerie-patisserie-artisanale/README.md) | 843 | `2026.1` : 1er février 2026 | Taux horaires minima de 10 coefficients selon trois zones (national, Île-de-France, Bouches-du-Rhône), appliqués aux heures du contrat, et minima annuels des cadres 1 et 2 convertis en minima mensuels ; détection des niveaux hors grille |
|
|
16
|
+
| [Services de l’automobile (commerce, réparation, contrôle technique, écoles de conduite)](rules/1090-services-automobile/README.md) | 1090 | `2026.1` : 1er mai 2026 | Grille de 34 positions pour les ouvriers et employés (échelons 1 à 12), la maîtrise (échelons 17 à 25) et les cadres (niveaux I à V), proratisée selon la quotité de travail ; détection des échelons et niveaux hors grille |
|
|
17
|
+
| [Acteurs du lien social et familial (centres sociaux)](rules/1261-acteurs-lien-social-familial/README.md) | 1261 | `2026.1` : 1er janvier 2026 | Salaire socle annuel, points de pesée et points d'expérience professionnelle, convertis en minimum hiérarchique mensuel |
|
|
18
|
+
| [Entreprises de prévention et de sécurité](rules/1351-prevention-securite/README.md) | 1351 | `2026.1` : 1er juillet 2026 | Grille de 25 positions pour trois catégories, prime d’ancienneté, majorations nuit et dimanche, paniers, indemnités et minimum de six heures par période |
|
|
19
|
+
| [Bureaux d’études techniques, cabinets d’ingénieurs-conseils et sociétés de conseils (Syntec)](rules/1486-syntec/README.md) | 1486 | `2025.1` : 1er janvier 2025 | Minima mensuels des ETAM et des ingénieurs et cadres selon leur coefficient ; détection des coefficients hors grille |
|
|
20
|
+
| [Restauration rapide](rules/1501-restauration-rapide/README.md) | 1501 | `2025.1` : 1er juin 2025 | 11 taux horaires minima des niveaux I à IV, appliqués aux heures du contrat, et 3 minima annuels du niveau V (cadres) convertis en minima mensuels ; détection des niveaux et échelons hors grille |
|
|
21
|
+
| [Commerce de détail alimentaire non spécialisé](rules/1505-commerce-detail-alimentaire-non-specialise/README.md) | 1505 | `2026.1` : 1er août 2026 | Grille mensuelle de 11 niveaux (employés, agents de maîtrise, cadres), proratisée selon la quotité de travail ; minima annuels des cadres au forfait jours selon l’ancienneté dans le niveau ; détection des niveaux hors grille |
|
|
22
|
+
| [Organismes de formation](rules/1516-organismes-formation/README.md) | 1516 | `2025.1` : 1er janvier 2025 ; `2027.1` : 1er janvier 2027 | Grille de 31 paliers par fourchette de coefficient, minima annuels bruts convertis en minima mensuels et proratisés selon la quotité de travail ; détection des coefficients hors grille |
|
|
23
|
+
| [Hôtels, cafés, restaurants (HCR)](rules/1979-hotels-cafes-restaurants/README.md) | 1979 | `2024.1` : 1er décembre 2024 | Minima horaires par niveau et échelon, conversion en minimum mensuel selon la durée du contrat ; détection des niveaux hors grille |
|
|
24
|
+
| [Pharmacie d’officine](rules/1996-pharmacie-officine/README.md) | 1996 | `2025.1` : 24 mai 2025 ; `2026.1` : 17 avril 2026 | Minima selon le coefficient, la valeur du point et le salaire garanti au coefficient 100 ; proratisation selon la quotité de travail |
|
|
25
|
+
| [Commerce de détail et de gros à prédominance alimentaire](rules/2216-commerce-detail-gros-predominance-alimentaire/README.md) | 2216 | `2025.1` : 1er août 2025 ; `2026.1` : 1er août 2026 | Salaire minimum mensuel garanti par niveau, pauses rémunérées comprises ; proratisation selon la quotité de travail |
|
|
26
|
+
| [Aide, accompagnement, soins et services à domicile](rules/2941-aide-soins-domicile/README.md) | 2941 | `2026.1` : 1er juin 2026 (extension publiée le 23 juillet 2026) | Grilles intervention et support, base avec plancher SMIC, ECR diplôme et ancienneté ; tutorat, apprentissage et astreintes |
|
|
27
|
+
| [Particuliers employeurs et emploi à domicile](rules/3239-particuliers-employeurs-emploi-domicile/README.md) | 3239 | `2026.1` : 1er juin 2026 | Minima des 12 niveaux et certifications, socle assistant maternel par enfant, mensualisation, présence responsable de jour, heures additionnelles et prestations en nature |
|
|
28
|
+
|
|
29
|
+
Les références des accords et de leurs arrêtés d’extension figurent dans les métadonnées de chaque fichier source.
|
|
30
|
+
|
|
31
|
+
## Organisation du dépôt
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
rules/
|
|
35
|
+
0843-boulangerie-patisserie-artisanale/
|
|
36
|
+
README.md
|
|
37
|
+
0843-boulangerie-patisserie-artisanale.2026.1.publicodes
|
|
38
|
+
1090-services-automobile/
|
|
39
|
+
README.md
|
|
40
|
+
1090-services-automobile.2026.1.publicodes
|
|
41
|
+
1261-acteurs-lien-social-familial/
|
|
42
|
+
README.md
|
|
43
|
+
1261-acteurs-lien-social-familial.2026.1.publicodes
|
|
44
|
+
1351-prevention-securite/
|
|
45
|
+
README.md
|
|
46
|
+
1351-prevention-securite.2026.1.publicodes
|
|
47
|
+
1486-syntec/
|
|
48
|
+
README.md
|
|
49
|
+
1486-syntec.2025.1.publicodes
|
|
50
|
+
1501-restauration-rapide/
|
|
51
|
+
README.md
|
|
52
|
+
1501-restauration-rapide.2025.1.publicodes
|
|
53
|
+
1505-commerce-detail-alimentaire-non-specialise/
|
|
54
|
+
README.md
|
|
55
|
+
1505-commerce-detail-alimentaire-non-specialise.2026.1.publicodes
|
|
56
|
+
1516-organismes-formation/
|
|
57
|
+
README.md
|
|
58
|
+
1516-organismes-formation.2025.1.publicodes
|
|
59
|
+
1516-organismes-formation.2027.1.publicodes
|
|
60
|
+
1979-hotels-cafes-restaurants/
|
|
61
|
+
README.md
|
|
62
|
+
1979-hotels-cafes-restaurants.2024.1.publicodes
|
|
63
|
+
1996-pharmacie-officine/
|
|
64
|
+
README.md
|
|
65
|
+
1996-pharmacie-officine.2025.1.publicodes
|
|
66
|
+
1996-pharmacie-officine.2026.1.publicodes
|
|
67
|
+
2216-commerce-detail-gros-predominance-alimentaire/
|
|
68
|
+
README.md
|
|
69
|
+
2216-commerce-detail-gros-predominance-alimentaire.2025.1.publicodes
|
|
70
|
+
2216-commerce-detail-gros-predominance-alimentaire.2026.1.publicodes
|
|
71
|
+
2941-aide-soins-domicile/
|
|
72
|
+
README.md
|
|
73
|
+
2941-aide-soins-domicile.2026.1.publicodes
|
|
74
|
+
3239-particuliers-employeurs-emploi-domicile/
|
|
75
|
+
README.md
|
|
76
|
+
3239-particuliers-employeurs-emploi-domicile.2026.1.publicodes
|
|
77
|
+
versions.lock.json
|
|
78
|
+
scripts/
|
|
79
|
+
compile-collective-agreements.ts
|
|
80
|
+
src/
|
|
81
|
+
index.ts
|
|
82
|
+
compiled/ # Generated files
|
|
83
|
+
test/
|
|
84
|
+
compile-collective-agreements.test.ts
|
|
85
|
+
models.test.ts
|
|
86
|
+
aide-soins-domicile.test.ts
|
|
87
|
+
particuliers-employeurs.test.ts
|
|
88
|
+
prevention-securite.test.ts
|
|
89
|
+
services-automobile.test.ts
|
|
90
|
+
organismes-formation.test.ts
|
|
91
|
+
restauration-rapide.test.ts
|
|
92
|
+
commerce-detail-alimentaire-non-specialise.test.ts
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Les répertoires suivent le format `<idcc>-<nom-français-de-la-convention>` et les fichiers le format `<idcc>-<nom>.année.révision.publicodes`. Les noms de chemins utilisent des minuscules et des tirets, sans accents.
|
|
96
|
+
|
|
97
|
+
## Fonctionnement
|
|
98
|
+
|
|
99
|
+
### Sources et métadonnées
|
|
100
|
+
|
|
101
|
+
Chaque fichier `.publicodes` contient deux documents YAML séparés par `---` :
|
|
102
|
+
|
|
103
|
+
1. Les métadonnées de la version : `validFrom`, sa date d’entrée en vigueur, et `sources`, les références juridiques utilisées.
|
|
104
|
+
2. Les règles publicodes : paramètres, grilles et formules de calcul.
|
|
105
|
+
|
|
106
|
+
Les règles restent en français et sont regroupées sous l’espace de noms `salarié . convention collective . <valeur>`. Elles s’appuient sur les règles de `modele-social`, par exemple pour le statut cadre ou le temps de travail du contrat.
|
|
107
|
+
|
|
108
|
+
### Compilation et chargement
|
|
109
|
+
|
|
110
|
+
La commande `npm run compile-rules` :
|
|
111
|
+
|
|
112
|
+
- Vérifie le nom et le répertoire de chaque fichier, sa date d’effet et la présence de références juridiques.
|
|
113
|
+
- Vérifie le verrouillage des versions déjà enregistrées.
|
|
114
|
+
- Convertit les règles YAML en fichiers JSON dans `src/compiled/`.
|
|
115
|
+
- Génère un index des versions, triées par date d’effet puis par année et révision.
|
|
116
|
+
|
|
117
|
+
La commande `npm run build` lance cette compilation, puis produit le JavaScript ESM et les déclarations TypeScript dans `dist/`. Les fichiers générés ne sont pas suivis par Git.
|
|
118
|
+
|
|
119
|
+
Le package expose `COMPILED_VERSIONS`. Chaque version fournit `version`, `validFrom`, `contentHash`, `sources` et une fonction asynchrone `loadRules()`. Les règles JSON sont chargées à la demande : aucun parseur YAML n’est nécessaire dans l’application qui les consomme.
|
|
120
|
+
|
|
121
|
+
### Versions immuables
|
|
122
|
+
|
|
123
|
+
`rules/versions.lock.json` conserve l’empreinte de chaque version. Une version publiée ne doit jamais être modifiée ou supprimée : une correction ou une nouvelle grille donne lieu à un nouveau fichier, par exemple `1486-syntec.2025.2.publicodes`.
|
|
124
|
+
|
|
125
|
+
L’empreinte est calculée à partir de la date d’effet et des règles : SHA-256 de `JSON.stringify({ validFrom, rules })`, tronqué à 16 caractères hexadécimaux. Ce format conserve les empreintes historiques de JourDePaye. Les références juridiques sont exportées, mais ne font pas partie de cette empreinte.
|
|
126
|
+
|
|
127
|
+
Une nouvelle version est ajoutée au verrou lors de sa première compilation. Pendant son développement, vous pouvez retirer son entrée du verrou pour poursuivre les modifications, **uniquement si elle n’a jamais été publiée**. La compilation refuse une modification des règles ou de la date d’effet d’une version verrouillée, ainsi que la disparition de son fichier.
|
|
128
|
+
|
|
129
|
+
La version du package, par exemple `0.1.0`, est distincte des versions des conventions, comme `2025.1` : une distribution du package contient plusieurs conventions et leurs versions historiques.
|
|
130
|
+
|
|
131
|
+
### Intégration avec un moteur de calcul
|
|
132
|
+
|
|
133
|
+
Ces modèles complètent `modele-social`. Le package ne crée pas de moteur Publicodes et ne calcule pas, à lui seul, un bulletin de paie.
|
|
134
|
+
|
|
135
|
+
L’application qui l’utilise choisit la version applicable à la date souhaitée, ajoute si nécessaire la convention aux choix de `salarié . convention collective`, puis fusionne ses règles avec celles de `modele-social`. Elle doit refuser les définitions de règles en double. Pour modifier une règle de base, les modèles utilisent les mécanismes publicodes `remplace` ou `rend non applicable`.
|
|
136
|
+
|
|
137
|
+
Dans JourDePaye, `payroll-core` conserve le catalogue métier, la sélection de la version au premier jour de la période, la correspondance avec les données du salarié et le calcul de paie. Ces choix de période ne sont pas imposés par ce package.
|
|
138
|
+
|
|
139
|
+
## Utiliser le package
|
|
140
|
+
|
|
141
|
+
Le package n’est pas encore publié sur le registre npm. Il peut être installé depuis le dépôt public ; pour une installation reproductible, remplacez `<commit>` par le hash complet du commit choisi :
|
|
142
|
+
|
|
143
|
+
```sh
|
|
144
|
+
npm install "git+https://github.com/JourDePaye/conventions-collectives.git#<commit>"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
L’installation depuis Git construit le package grâce au script `prepare`. Elle nécessite Node.js 24 ou plus récent, npm et Git. Les applications consommatrices doivent également disposer de versions compatibles de `publicodes` et de `modele-social` ; les tests actuels utilisent `publicodes@1.10.3` et `modele-social@11.1.0`.
|
|
148
|
+
|
|
149
|
+
Exemple de chargement d’une version précise :
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
import { COMPILED_VERSIONS } from "conventions-collectives";
|
|
153
|
+
|
|
154
|
+
const version = COMPILED_VERSIONS["1486-syntec"]?.find(
|
|
155
|
+
(candidate) => candidate.version === "2025.1",
|
|
156
|
+
);
|
|
157
|
+
if (!version) throw new Error("Unknown agreement version");
|
|
158
|
+
|
|
159
|
+
const rules = await version.loadRules();
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Le package distribue les règles JSON, le JavaScript, les déclarations TypeScript et les sources `.publicodes`. `npm pack` construit une archive installable localement, sans publication sur le registre npm.
|
|
163
|
+
|
|
164
|
+
## Développer et lancer les tests
|
|
165
|
+
|
|
166
|
+
Avec Node.js 24 ou plus récent :
|
|
167
|
+
|
|
168
|
+
```sh
|
|
169
|
+
git clone https://github.com/JourDePaye/conventions-collectives.git
|
|
170
|
+
cd conventions-collectives
|
|
171
|
+
npm ci
|
|
172
|
+
npm test
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
`npm ci` installe les dépendances verrouillées et construit le package. `npm test` compile d’abord les sources, puis exécute tous les fichiers `test/**/*.test.ts` avec le moteur de tests intégré à Node.js. Une erreur de compilation ou un test en échec fait échouer la commande.
|
|
176
|
+
|
|
177
|
+
Onze ensembles de tests sont présents :
|
|
178
|
+
|
|
179
|
+
- `test/compile-collective-agreements.test.ts` teste le compilateur avec des fichiers temporaires : nommage, métadonnées, dates, ajout d’une version, modification ou suppression d’une version verrouillée.
|
|
180
|
+
- `test/models.test.ts` vérifie les versions exportées et leurs empreintes, la présence des références juridiques, les espaces de noms, l’absence de collisions avec `modele-social` et des calculs de minima pour chacune des seize versions.
|
|
181
|
+
- `test/acteurs-lien-social-familial.test.ts` couvre le socle 2026, les points de pesée, les points d'expérience professionnelle, le temps partiel, les valeurs invalides et l'inapplicabilité hors convention.
|
|
182
|
+
- `test/aide-soins-domicile.test.ts` couvre les 36 positions des deux filières IDCC 2941, les paliers d’ancienneté, les diplômes, le plancher SMIC, le reclassement, le temps partiel et les ECR ponctuels. Les coefficients et montants attendus sont fixés à partir des textes, indépendamment du YAML.
|
|
183
|
+
- `test/particuliers-employeurs.test.ts` couvre les 12 niveaux IDCC 3239 avec et sans certification, les taux et montants mensuels publiés, les deux socles, les planchers légaux, le temps partiel, la présence responsable, l’année incomplète, le mode réel, les heures additionnelles, les prestations en nature, les entrées invalides et l’inapplicabilité hors convention. Les valeurs attendues sont indépendantes du YAML.
|
|
184
|
+
- `test/services-automobile.test.ts` couvre les 34 positions IDCC 1090 (échelons 1 à 12 et 17 à 25, niveaux et degrés des cadres), la quotité, les échelons et niveaux hors grille et l’inapplicabilité hors convention. Les montants attendus sont ceux de l’avenant n° 110, indépendamment du YAML.
|
|
185
|
+
- `test/boulangerie-patisserie-artisanale.test.ts` couvre les 10 coefficients IDCC 843 dans les trois zones, les cadres 1 et 2, la quotité, les formules de l’avenant national, les niveaux hors grille et l’inapplicabilité hors convention. Les montants attendus sont ceux des trois textes, indépendamment du YAML.
|
|
186
|
+
- `test/commerce-detail-alimentaire-non-specialise.test.ts` couvre les 11 niveaux IDCC 1505, la quotité, les minima annuels des cadres au forfait jours (seuil de 36 mois dans le niveau), les niveaux hors grille et l’inapplicabilité hors convention. Les montants attendus sont ceux de l’accord du 10 février 2026, indépendamment du YAML.
|
|
187
|
+
- `test/restauration-rapide.test.ts` couvre les 14 positions IDCC 1501 (taux horaires des niveaux I à IV, minima annuels du niveau V), l’application du taux horaire aux heures du contrat, le temps partiel, les niveaux et échelons hors grille et l’inapplicabilité hors convention. Les montants attendus sont ceux de l’avenant n° 72, indépendamment du YAML.
|
|
188
|
+
- `test/organismes-formation.test.ts` couvre les 31 paliers IDCC 1516 des grilles 2025 et 2027 (bornes de chaque fourchette de coefficient), la conversion en minimum mensuel, la quotité, les coefficients hors grille et l’inapplicabilité hors convention. Les montants attendus sont ceux des avenants, indépendamment du YAML.
|
|
189
|
+
- `test/prevention-securite.test.ts` couvre les 25 positions IDCC 1351, les coefficients présents dans plusieurs catégories, la quotité, les paliers d’ancienneté, les majorations nuit et dimanche, le repos, les indemnités et le complément de rémunération des périodes de travail.
|
|
190
|
+
|
|
191
|
+
Pour exécuter uniquement les tests IDCC 843 :
|
|
192
|
+
|
|
193
|
+
```sh
|
|
194
|
+
npm run compile-rules
|
|
195
|
+
node --test test/boulangerie-patisserie-artisanale.test.ts
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Pour exécuter uniquement les tests IDCC 1505 :
|
|
199
|
+
|
|
200
|
+
```sh
|
|
201
|
+
npm run compile-rules
|
|
202
|
+
node --test test/commerce-detail-alimentaire-non-specialise.test.ts
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Pour exécuter uniquement les tests IDCC 1501 :
|
|
206
|
+
|
|
207
|
+
```sh
|
|
208
|
+
npm run compile-rules
|
|
209
|
+
node --test test/restauration-rapide.test.ts
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Pour exécuter uniquement les tests IDCC 1516 :
|
|
213
|
+
|
|
214
|
+
```sh
|
|
215
|
+
npm run compile-rules
|
|
216
|
+
node --test test/organismes-formation.test.ts
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Pour exécuter uniquement les tests IDCC 1090 :
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
npm run compile-rules
|
|
223
|
+
node --test test/services-automobile.test.ts
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Pour exécuter uniquement les tests IDCC 1351 :
|
|
227
|
+
|
|
228
|
+
```sh
|
|
229
|
+
npm run compile-rules
|
|
230
|
+
node --test test/prevention-securite.test.ts
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Pour exécuter uniquement les tests IDCC 3239 :
|
|
234
|
+
|
|
235
|
+
```sh
|
|
236
|
+
npm run compile-rules
|
|
237
|
+
node --test test/particuliers-employeurs.test.ts
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Pour exécuter uniquement les tests IDCC 2941 :
|
|
241
|
+
|
|
242
|
+
```sh
|
|
243
|
+
npm run compile-rules
|
|
244
|
+
node --test test/aide-soins-domicile.test.ts
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Pour exécuter uniquement les tests des modèles :
|
|
248
|
+
|
|
249
|
+
```sh
|
|
250
|
+
npm run compile-rules
|
|
251
|
+
node --test test/models.test.ts
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Pour exécuter uniquement les tests du compilateur :
|
|
255
|
+
|
|
256
|
+
```sh
|
|
257
|
+
node --test test/compile-collective-agreements.test.ts
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Avant de proposer une contribution, lancez également :
|
|
261
|
+
|
|
262
|
+
```sh
|
|
263
|
+
npm run typecheck
|
|
264
|
+
npm run build
|
|
265
|
+
npm pack --dry-run
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Ces commandes vérifient respectivement les types TypeScript, la construction du package et la liste des fichiers inclus dans son archive. La CI GitHub exécute les tests et ces vérifications à chaque push et pull request.
|
|
269
|
+
|
|
270
|
+
## Publier sur npm
|
|
271
|
+
|
|
272
|
+
Le workflow [Publish to npm](.github/workflows/publish.yml) construit et publie `conventions-collectives` sur le registre npm public. Il exécute les tests, vérifie les types et le verrou des versions, puis construit une archive et vérifie le chargement de toutes ses règles avant de la publier. La publication inclut une attestation de provenance.
|
|
273
|
+
|
|
274
|
+
### Configurer l’authentification
|
|
275
|
+
|
|
276
|
+
Le compte utilisé doit avoir le droit de publier dans le scope npm `@jourdepaye`.
|
|
277
|
+
|
|
278
|
+
Pour la première publication, si le package n’existe pas encore, ajoutez un token npm granulaire dans le secret GitHub **`NPM_TOKEN`** du dépôt (Settings → Secrets and variables → Actions). Le token doit autoriser la création et la publication du package dans ce scope, avec l’option permettant de contourner la 2FA pour la CI.
|
|
279
|
+
|
|
280
|
+
Une fois le package créé, configurez son **Trusted Publisher** dans les paramètres du package sur npmjs.com :
|
|
281
|
+
|
|
282
|
+
- Fournisseur : **GitHub Actions**.
|
|
283
|
+
- Organisation GitHub : **`JourDePaye`**.
|
|
284
|
+
- Dépôt : **`conventions-collectives`**.
|
|
285
|
+
- Nom du workflow : **`publish.yml`** (sans le chemin `.github/workflows/`).
|
|
286
|
+
- Environnement : laissez ce champ vide ; le workflow n’utilise pas d’environnement GitHub.
|
|
287
|
+
|
|
288
|
+
Cette configuration permet les publications suivantes par OIDC, sans token npm stocké. Après vérification d’une publication OIDC réussie, vous pouvez supprimer le secret `NPM_TOKEN` et révoquer le token de démarrage. Voir la [documentation npm du trusted publishing](https://docs.npmjs.com/trusted-publishers/).
|
|
289
|
+
|
|
290
|
+
### Déclencher une publication
|
|
291
|
+
|
|
292
|
+
Depuis la branche `main`, avec un répertoire de travail propre, mettez à jour la version du package et son lockfile, puis poussez le commit et le tag correspondant :
|
|
293
|
+
|
|
294
|
+
```sh
|
|
295
|
+
npm version patch
|
|
296
|
+
git push origin main
|
|
297
|
+
git push origin --tags
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
`npm version patch` crée le commit de version et un tag `vX.Y.Z`. Vous pouvez utiliser `minor` ou `major` selon la nature du changement. Pour publier la version initiale `0.1.0`, déjà renseignée dans le package :
|
|
301
|
+
|
|
302
|
+
```sh
|
|
303
|
+
git tag v0.1.0
|
|
304
|
+
git push origin v0.1.0
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Un tag déclenche la publication seulement si son nom correspond exactement à la version de `package.json`. Les versions stables sont publiées sous le dist-tag npm `latest` ; les préversions, comme `0.2.0-beta.1`, sous `next`. Une version npm déjà publiée ne peut pas être publiée à nouveau : incrémentez la version pour une nouvelle distribution.
|
|
308
|
+
|
|
309
|
+
Vous pouvez aussi ouvrir **Actions → Publish to npm → Run workflow** sur `main` ou sur un tag `v…`. L’option **`dry_run`**, activée par défaut, vérifie le processus sans publier et sans identifiants npm. Désactivez-la pour effectuer une publication réelle de la version choisie.
|
|
310
|
+
|
|
311
|
+
## Contribuer
|
|
312
|
+
|
|
313
|
+
Les contributions sont les bienvenues, qu’il s’agisse d’une nouvelle convention, d’une nouvelle grille, de dispositions encore absentes ou d’une amélioration des tests et de la documentation. Vous pouvez ouvrir une issue pour discuter d’un sujet ou proposer directement une pull request.
|
|
314
|
+
|
|
315
|
+
Pour ajouter ou enrichir un modèle :
|
|
316
|
+
|
|
317
|
+
1. Identifiez la convention, son IDCC, les textes applicables et leur date d’effet. Renseignez les accords et arrêtés d’extension dans `sources`.
|
|
318
|
+
2. Créez le répertoire et le fichier correspondant au nommage du dépôt. Pour une convention existante, ajoutez une nouvelle version sans modifier les versions publiées.
|
|
319
|
+
3. Écrivez les règles dans l’espace de noms de la convention, avec les conditions d’applicabilité nécessaires.
|
|
320
|
+
4. Ajoutez des cas de test dont les montants attendus viennent des textes de référence, indépendamment du fichier YAML. Étendez `test/models.test.ts` pour couvrir la nouvelle version.
|
|
321
|
+
5. Exécutez les tests et les vérifications ci-dessus, puis incluez le verrou mis à jour dans votre pull request.
|
|
322
|
+
|
|
323
|
+
Une nouvelle convention est automatiquement ajoutée à l’index lors de la compilation. Son intégration à une application de paie peut demander des adaptations supplémentaires dans cette application.
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
{
|
|
2
|
+
"salarié . convention collective . industrie laitière": {
|
|
3
|
+
"titre": "Industrie laitière (IDCC 0112)",
|
|
4
|
+
"valeur": "convention collective = 'industrie laitière'"
|
|
5
|
+
},
|
|
6
|
+
"salarié . convention collective . industrie laitière . niveau": {
|
|
7
|
+
"titre": "Niveau et échelon de classification",
|
|
8
|
+
"description": "Saisir le niveau et l'échelon au format « niveau.échelon ». La grille comprend les\nouvriers et employés 1.1 à 5.3, les techniciens et agents de maîtrise 6.1 à 8.3, et les\ncadres 9.1, 9.2, 10, 11 et 12.\n",
|
|
9
|
+
"applicable si": "convention collective = 'industrie laitière'",
|
|
10
|
+
"par défaut": "'non renseigné'"
|
|
11
|
+
},
|
|
12
|
+
"salarié . convention collective . industrie laitière . salaire minimum conventionnel": {
|
|
13
|
+
"titre": "Salaire minimum mensuel conventionnel",
|
|
14
|
+
"description": "Salaire minimum mensuel du niveau et de l'échelon pour un travail à temps complet,\nproratisé pour un temps partiel. Vaut 0 €/mois lorsque la classification n'est pas dans\nla grille (voir « niveau hors grille »).\n",
|
|
15
|
+
"applicable si": "convention collective = 'industrie laitière'",
|
|
16
|
+
"unité": "€/mois",
|
|
17
|
+
"produit": [
|
|
18
|
+
"grille",
|
|
19
|
+
"contrat . temps de travail . quotité"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"salarié . convention collective . industrie laitière . salaire minimum conventionnel . grille": {
|
|
23
|
+
"titre": "Salaire minimum mensuel à temps plein",
|
|
24
|
+
"description": "Montants de l'annexe I modifiée par l'avenant n° 57 du 22 janvier 2026.",
|
|
25
|
+
"unité": "€/mois",
|
|
26
|
+
"variations": [
|
|
27
|
+
{
|
|
28
|
+
"si": "niveau = '1.1'",
|
|
29
|
+
"alors": "1833.26 €/mois"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"si": "niveau = '1.2'",
|
|
33
|
+
"alors": "1843.58 €/mois"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"si": "niveau = '2.1'",
|
|
37
|
+
"alors": "1853.90 €/mois"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"si": "niveau = '2.2'",
|
|
41
|
+
"alors": "1864.23 €/mois"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"si": "niveau = '2.3'",
|
|
45
|
+
"alors": "1874.55 €/mois"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"si": "niveau = '3.1'",
|
|
49
|
+
"alors": "1874.55 €/mois"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"si": "niveau = '3.2'",
|
|
53
|
+
"alors": "1884.87 €/mois"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"si": "niveau = '3.3'",
|
|
57
|
+
"alors": "1895.19 €/mois"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"si": "niveau = '4.1'",
|
|
61
|
+
"alors": "1895.19 €/mois"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"si": "niveau = '4.2'",
|
|
65
|
+
"alors": "1905.52 €/mois"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"si": "niveau = '4.3'",
|
|
69
|
+
"alors": "1916.87 €/mois"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"si": "niveau = '5.1'",
|
|
73
|
+
"alors": "1916.87 €/mois"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"si": "niveau = '5.2'",
|
|
77
|
+
"alors": "1930.29 €/mois"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"si": "niveau = '5.3'",
|
|
81
|
+
"alors": "1943.71 €/mois"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"si": "niveau = '6.1'",
|
|
85
|
+
"alors": "1943.71 €/mois"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"si": "niveau = '6.2'",
|
|
89
|
+
"alors": "2036.61 €/mois"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"si": "niveau = '6.3'",
|
|
93
|
+
"alors": "2129.60 €/mois"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"si": "niveau = '7.1'",
|
|
97
|
+
"alors": "2129.60 €/mois"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"si": "niveau = '7.2'",
|
|
101
|
+
"alors": "2235.92 €/mois"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"si": "niveau = '7.3'",
|
|
105
|
+
"alors": "2342.25 €/mois"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"si": "niveau = '8.1'",
|
|
109
|
+
"alors": "2342.25 €/mois"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"si": "niveau = '8.2'",
|
|
113
|
+
"alors": "2461.32 €/mois"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"si": "niveau = '8.3'",
|
|
117
|
+
"alors": "2628.25 €/mois"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"si": "niveau = '9.1'",
|
|
121
|
+
"alors": "2628.25 €/mois"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"si": "niveau = '9.2'",
|
|
125
|
+
"alors": "2925.95 €/mois"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"si": "niveau = '10'",
|
|
129
|
+
"alors": "3574.50 €/mois"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"si": "niveau = '11'",
|
|
133
|
+
"alors": "4309.18 €/mois"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"si": "niveau = '12'",
|
|
137
|
+
"alors": "4931.15 €/mois"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"sinon": "0 €/mois"
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
"salarié . convention collective . industrie laitière . niveau hors grille": {
|
|
145
|
+
"titre": "Niveau et échelon absents de la grille",
|
|
146
|
+
"description": "Le niveau ou l'échelon n'existe pas dans la grille des salaires minima.",
|
|
147
|
+
"applicable si": "convention collective = 'industrie laitière'",
|
|
148
|
+
"valeur": "salaire minimum conventionnel . grille = 0 €/mois"
|
|
149
|
+
}
|
|
150
|
+
}
|