Guide de migration MCM.ApiProxy - Sync V2
- MCM.ApiProxy utilise toujours les derniers endpoints. Ce guide vous aide à migrer votre code client.
- Les changements concernent principalement l'interface
ISyncClientet les DTOs associés.
Changement majeur : Interface ISyncClient.Sync() modifiée
La signature de la méthode Sync a été mise à jour pour supporter l'API V2 avec les Syndicats avec Employeurs imbriqués et les Adhésions imbriquées.
Avant
Task<ErrorOr<B2BSyncEmployesResult>> Sync(
ICollection<B2BUpdateEmployeurDto> employeursDtos,
ICollection<B2BUpsertEmployeDto> employeDtos,
ICollection<B2BUpdateObjetConsentementDto> objetConsentementDtos);
Après
Task<ErrorOr<B2BSyncEmployesResultV2>> Sync(
ICollection<B2BUpdateSyndicatDtoV2> syndicatDtos,
ICollection<B2BUpsertEmployeDtoV2> employeDtos,
ICollection<B2BUpdateObjetConsentementDto> objetConsentementDtos);
Changements principaux
| # | Changement | Description |
|---|---|---|
| 1 | Employeurs imbriqués dans les Syndicats | Les employeurs sont maintenant des propriétés des syndicats (B2BUpdateSyndicatDtoV2.Employeurs) au lieu d'être un paramètre séparé |
| 2 | Suppression de SyndicatIdExterne sur Employeur | Le lien syndicat-employeur est maintenant implicite par l'imbrication |
| 3 | Emplois maintenant imbriqués dans l'employé | Utiliser B2BUpsertEmployeDtoV2.Emplois au lieu de IdExterneEmployeur/Matricule |
| 4 | Adhésions imbriquées dans l'employé | Utiliser B2BUpsertEmployeDtoV2.Adhesions au lieu de DateAdhesion |
| 5 | Nouveau résultat Adhésions | B2BSyncEmployesResultV2 inclut maintenant un résultat pour les adhésions |
Gestion des syndicats
Dans l'API V2, il n'y a pas de concept de syndicat par défaut. Chaque employeur doit être explicitement lié à un syndicat en étant imbriqué dans la collection Employeurs d'un syndicat.
Si vous avez besoin qu'un employeur soit synchronisé, vous devez :
- Inclure le syndicat dans
syndicatDtos - Imbriquer l'employeur dans
syndicatDto.Employeurs
Exemple de migration
Avant
var employes = new List<B2BUpsertEmployeDto>
{
new()
{
IdExterne = "EMP001",
IdExterneEmployeur = "EMPLOYER1",
Matricule = "M123",
Nom = "Tremblay",
Prenom = "Jean",
DateAdhesion = new DateTime(2024, 1, 15),
}
};
await syncClient.Sync(employeurs, employes, objetsConsentement);
Après (avec syndicats et employeurs imbriqués)
var syndicats = new List<B2BUpdateSyndicatDtoV2>
{
new()
{
IdentifiantExterne = "SYND001",
Nom = "Syndicat des travailleurs",
Employeurs =
[
new B2BUpdateEmployeurDtoV2
{
IdentifiantExterne = "EMPLOYER1",
Nom = "Entreprise ABC"
// Plus de SyndicatIdExterne - le lien est implicite
}
]
}
};
var employes = new List<B2BUpsertEmployeDtoV2>
{
new()
{
IdExterne = "EMP001",
Nom = "Tremblay",
Prenom = "Jean",
Emplois =
[
new B2BEmploiDtoV2
{
IdentifiantExterne = "EMPLOI001",
IdentifiantExterneEmployeur = "EMPLOYER1",
Matricule = "M123",
}
],
Adhesions =
[
new B2BAdhesionDtoV2
{
SyndicatIdExterne = "SYND001",
DateAdhesion = new DateTime(2024, 1, 15)
}
]
}
};
await syncClient.Sync(
syndicats,
employes,
objetsConsentement);
Correction du format de date (ISO 8601)
Les méthodes GetSignaturesDepuis et GetConsentementsDepuis utilisaient ToShortDateString() pour formater la date dans l'URL, ce qui produisait un format dépendant de la locale du système.
Avant
$"{BaseUrl}?Apres={depuis.ToShortDateString()}"
// Résultat selon la locale :
// - FR: "2025-02-01" ou "01/02/2025"
// - US: "2/1/2025"
Après
$"{BaseUrl}?Apres={depuis:O}"
// Résultat ISO 8601 : "2025-02-01T14:30:00.0000000Z"
Pourquoi ce changement?
Le format ISO 8601 garantit un format cohérent indépendamment de la configuration régionale du serveur/client, évitant ainsi des erreurs de parsing côté API.
| Problème | Solution ISO 8601 |
|---|---|
02/03/2026 ambigu (2 mars ou 3 février?) | 2026-03-02T00:00:00Z clair |
| Format varie selon la culture | Format universel |
| Pas d'info sur le fuseau horaire | Inclut le Z (UTC) ou offset |
Si vous utilisez MCM.ApiProxy, cette conversion est automatique. Aucune modification de votre côté n'est nécessaire.
Résumé des DTOs modifiés
| Ancien DTO | Nouveau DTO | Changements |
|---|---|---|
B2BUpsertEmployeDto | B2BUpsertEmployeDtoV2 | Suppression de IdExterneEmployeur et Matricule, ajout de Emplois et Adhesions |
B2BUpdateEmployeurDto | B2BUpdateEmployeurDtoV2 | Suppression de SyndicatIdExterne (lien implicite par imbrication) |
B2BUpdateSyndicatDto | B2BUpdateSyndicatDtoV2 | Ajout de Employeurs (liste imbriquée) |
B2BSyncEmployesResult | B2BSyncEmployesResultV2 | Ajout de Syndicats, Emplois et Adhesions dans le résultat |
| (nouveau) | B2BEmploiDtoV2 | Représente un emploi imbriqué dans un employé |
| (nouveau) | B2BAdhesionDtoV2 | Représente une adhésion imbriquée dans un employé |
Propriétés B2BUpdateSyndicatDtoV2
| Propriété | Type | Requis | Description |
|---|---|---|---|
IdentifiantExterne | string | ✅ | Identifiant unique du syndicat |
Nom | string | ✅ | Nom du syndicat |
Employeurs | List<B2BUpdateEmployeurDtoV2> | ❌ | Liste des employeurs appartenant à ce syndicat |
Propriétés B2BUpdateEmployeurDtoV2
| Propriété | Type | Requis | Description |
|---|---|---|---|
IdentifiantExterne | string | ✅ | Identifiant unique de l'employeur |
Nom | string | ✅ | Nom de l'employeur |
Le lien entre un employeur et son syndicat est maintenant implicite : un employeur appartient au syndicat qui le contient dans sa collection Employeurs.
Propriétés B2BEmploiDtoV2
| Propriété | Type | Requis | Description |
|---|---|---|---|
IdentifiantExterne | string | ✅ | Identifiant unique de l'emploi |
IdentifiantExterneEmployeur | string | ✅ | Identifiant externe de l'employeur |
Matricule | string | ❌ | Numéro d'employé chez cet employeur |
DateDebut | DateTime? | ❌ | Date de début d'emploi |
DateFin | DateTime? | ❌ | Date de fin d'emploi (null = en cours) |
Propriétés B2BAdhesionDtoV2
| Propriété | Type | Requis | Description |
|---|---|---|---|
SyndicatIdExterne | string | ✅ | Identifiant externe du syndicat |
DateAdhesion | DateTime | ✅ | Date d'adhésion au syndicat |
Un employé peut avoir plusieurs adhésions à différents syndicats, chacune avec sa propre date d'adhésion.
Résultat de synchronisation V2
Le résultat B2BSyncEmployesResultV2 contient maintenant :
public class B2BSyncEmployesResultV2
{
public B2BSyncResult Syndicats { get; init; }
public B2BSyncResult Employeurs { get; init; }
public B2BSyncResult Employes { get; init; }
public B2BSyncResult Emplois { get; init; }
public B2BSyncResult Adhesions { get; init; } // Nouveau
public B2BSyncResult ObjetsConsentement { get; init; }
}
Chaque B2BSyncResult contient :
AddCount: Nombre d'éléments ajoutésUpdateCount: Nombre d'éléments mis à jourErreurs: Liste des erreurs avecIdUniqueetMessage
Questions fréquentes
Que se passe-t-il si je n'envoie pas d'emplois?
Si Emplois est vide ou null, l'employé sera créé/mis à jour sans modifier ses emplois existants.
Puis-je supprimer un emploi?
Oui, en n'incluant pas l'emploi dans la collection lors d'une mise à jour. Les emplois non présents seront désactivés (DateFin = aujourd'hui) mais pas supprimés.
Comment gérer les adhésions?
Les adhésions sont maintenant gérées via la collection Adhesions de l'employé. Chaque adhésion contient :
- Le
SyndicatIdExternedu syndicat concerné - La
DateAdhesioncorrespondante
Un employé peut avoir plusieurs adhésions (historique ou adhésions multiples simultanées).
Que se passe-t-il si je n'envoie pas d'adhésions?
Si Adhesions est vide ou null, les adhésions existantes de l'employé ne seront pas modifiées.
Comment savoir si un employé a plusieurs employeurs?
Utilisez l'endpoint GET /api/b2b/v2/employes/{idExterne} qui retourne la liste complète des emplois.
L'ancienne API V1 fonctionne-t-elle encore?
Oui, les endpoints V1 (/api/b2b/employes) restent disponibles pour la compatibilité ascendante. Cependant, nous recommandons de migrer vers V2 pour bénéficier du support multi-employeurs et des adhésions multiples.