Données maîtres (syndicats, employeurs, emplois)
Ce guide détaille la gestion des référentiels MCM : syndicats, employeurs, et emplois (liens employé-employeur). Il pose la stratégie d'identifiants externes (IdentifiantExterne) et les interactions entre ces trois entités.
Module requis : MaCarteDeMembre.
Clients SDK : ISyndicatsClient, IEmployeursClient, IEmploisClient, IObjetsConsentementClient.
1. Modèle de données
Syndicat (1) ───< Employeur (N)
↑
│
Emploi (N) >─── Employe (1)
│
Adhesion (N) >─── Syndicat (1)
- Syndicat — une organisation membre (union, association).
- Employeur — une organisation employant des membres ; rattaché à un syndicat principal.
- Emploi — un lien employé ↔ employeur (un employé peut en avoir plusieurs, simultanés ou successifs).
- Adhésion — un lien employé ↔ syndicat avec une
DateAdhesion. Distinct de l'emploi. - Objet de consentement — un consentement nommable (infolettre, partage d'infos, …) qu'on peut attacher aux employés.
2. Stratégie d'identifiants externes
Toutes les entités exposent un IdentifiantExterne (ou IdExterne) sous votre contrôle. C'est la clé primaire côté MCM, utilisée pour :
- Identifier l'entité dans tous les endpoints B2B
- Router les upserts (
AddXxxvsUpdateXxx) - Dédupliquer les syncs
Règles
- Unique à l'échelle du client MCM pour chaque type d'entité.
- Stable — ne jamais le renommer une fois utilisé côté MCM ; cela crée un doublon, pas un rename.
- Opaque pour MCM mais signifiant pour vous (ex.
EMP-MTL-001,PERSON-423). Préférez un slug lisible à un UUID aléatoire : la maintenance est plus simple. - Pas de dépendance aux ID internes MCM (
IdUniqueest uneGuidgénérée par MCM ; ne la stockez pas comme identifiant source).
Collision et rename
Si vous devez renommer un IdentifiantExterne côté source :
- Créez l'entité avec le nouvel identifiant (
AddXxx). - Mettez à jour les entités enfants pour pointer vers le nouveau parent (
SyncClient.Syncou CRUD unitaire). - Supprimez l'ancienne entité seulement après validation (
DeleteXxx).
Il n'existe pas d'endpoint de « rename atomique » côté API.
3. Syndicats (ISyndicatsClient)
Entité minimale : simplement un nom et un identifiant externe.
Créer
await syndicatsClient.AddSyndicat(new B2BUpdateSyndicatDto
{
IdentifiantExterne = "SYND001",
Nom = "Syndicat des travailleurs"
});
Lister / récupérer / mettre à jour / supprimer
var all = await syndicatsClient.GetAllSyndicats();
var one = await syndicatsClient.GetSyndicatById("SYND001");
await syndicatsClient.UpdateSyndicat(new B2BUpdateSyndicatDto
{
IdentifiantExterne = "SYND001",
Nom = "Nouveau nom"
});
await syndicatsClient.DeleteSyndicat("SYND001");
B2BSyndicatItem hérite aujourd'hui de B2BUpdateSyndicatDto (pas de colonnes en lecture seule additionnelles).
Suppression : bloquée si le syndicat référence des employeurs ou des adhésions actives. Supprimez ou reparentez ces dépendances avant.
4. Employeurs (IEmployeursClient)
Un employeur est porté par un syndicat dans le modèle V2 (structure imbriquée dans B2BUpdateSyndicatDtoV2.Employeurs). En V1 CRUD, le syndicat est implicite (rattachement au syndicat principal du client si non précisé).
Créer via V2 Sync (recommandé)
await syncClient.Sync(
syndicatDtos:
[
new B2BUpdateSyndicatDtoV2
{
IdentifiantExterne = "SYND001",
Nom = "Syndicat",
Employeurs =
[
new() { IdentifiantExterne = "EMP001", Nom = "Entreprise ABC" },
new() { IdentifiantExterne = "EMP002", Nom = "Entreprise XYZ" }
]
}
],
employeDtos: [],
objetConsentementDtos: []);
Créer via CRUD V1
await employeursClient.AddEmployeur(new B2BUpdateEmployeurDto
{
IdentifiantExterne = "EMP001",
Nom = "Entreprise ABC"
});
Lister
var all = await employeursClient.GetAllEmployeurs(); // IEnumerable<B2BUpdateEmployeurDto>
Le
GetAllEmployeursV1 retourne les mêmes DTO que la mise à jour (pas de champs supplémentaires). Pour des queries avancées (filtrer par syndicat, compter les emplois actifs), passez parIEmploisClient.SearchEmploisavecIdExterneEmployeur.
5. Emplois (IEmploisClient)
Un emploi = relation durable employé ↔ employeur (avec éventuellement Matricule, DateDebut, DateFin). Un même employé peut en avoir plusieurs (multi-employeurs ou changements d'emploi).
Clé composite
- Identifiant externe de l'emploi : votre propre ID unique (
IdentifiantExterne). - Relation :
IdentifiantExterneEmploye+IdentifiantExterneEmployeur.
Créer
await emploisClient.AddEmploi(new B2BUpdateEmploiDto
{
IdentifiantExterne = "EMPLOI-001",
IdentifiantExterneEmploye = "PERSON001",
IdentifiantExterneEmployeur = "EMP001",
Matricule = "M12345",
DateDebut = new DateTime(2020, 1, 15),
DateFin = null // null = actif
});