Aller au contenu principal

Guide de migration MCM.ApiProxy - Sync V2

MCM.ApiProxy vs B2B API
  • MCM.ApiProxy utilise toujours les derniers endpoints. Ce guide vous aide à migrer votre code client.
  • Les changements concernent principalement l'interface ISyncClient et 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

#ChangementDescription
1Employeurs imbriqués dans les SyndicatsLes employeurs sont maintenant des propriétés des syndicats (B2BUpdateSyndicatDtoV2.Employeurs) au lieu d'être un paramètre séparé
2Suppression de SyndicatIdExterne sur EmployeurLe lien syndicat-employeur est maintenant implicite par l'imbrication
3Emplois maintenant imbriqués dans l'employéUtiliser B2BUpsertEmployeDtoV2.Emplois au lieu de IdExterneEmployeur/Matricule
4Adhésions imbriquées dans l'employéUtiliser B2BUpsertEmployeDtoV2.Adhesions au lieu de DateAdhesion
5Nouveau résultat AdhésionsB2BSyncEmployesResultV2 inclut maintenant un résultat pour les adhésions

Gestion des syndicats

Important

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 :

  1. Inclure le syndicat dans syndicatDtos
  2. 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èmeSolution ISO 8601
02/03/2026 ambigu (2 mars ou 3 février?)2026-03-02T00:00:00Z clair
Format varie selon la cultureFormat universel
Pas d'info sur le fuseau horaireInclut le Z (UTC) ou offset
MCM.ApiProxy gère cela automatiquement

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 DTONouveau DTOChangements
B2BUpsertEmployeDtoB2BUpsertEmployeDtoV2Suppression de IdExterneEmployeur et Matricule, ajout de Emplois et Adhesions
B2BUpdateEmployeurDtoB2BUpdateEmployeurDtoV2Suppression de SyndicatIdExterne (lien implicite par imbrication)
B2BUpdateSyndicatDtoB2BUpdateSyndicatDtoV2Ajout de Employeurs (liste imbriquée)
B2BSyncEmployesResultB2BSyncEmployesResultV2Ajout de Syndicats, Emplois et Adhesions dans le résultat
(nouveau)B2BEmploiDtoV2Représente un emploi imbriqué dans un employé
(nouveau)B2BAdhesionDtoV2Représente une adhésion imbriquée dans un employé

Propriétés B2BUpdateSyndicatDtoV2

PropriétéTypeRequisDescription
IdentifiantExternestringIdentifiant unique du syndicat
NomstringNom du syndicat
EmployeursList<B2BUpdateEmployeurDtoV2>Liste des employeurs appartenant à ce syndicat

Propriétés B2BUpdateEmployeurDtoV2

PropriétéTypeRequisDescription
IdentifiantExternestringIdentifiant unique de l'employeur
NomstringNom de l'employeur
Lien Syndicat-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éTypeRequisDescription
IdentifiantExternestringIdentifiant unique de l'emploi
IdentifiantExterneEmployeurstringIdentifiant externe de l'employeur
MatriculestringNuméro d'employé chez cet employeur
DateDebutDateTime?Date de début d'emploi
DateFinDateTime?Date de fin d'emploi (null = en cours)

Propriétés B2BAdhesionDtoV2

PropriétéTypeRequisDescription
SyndicatIdExternestringIdentifiant externe du syndicat
DateAdhesionDateTimeDate d'adhésion au syndicat
Adhésions multiples

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és
  • UpdateCount : Nombre d'éléments mis à jour
  • Erreurs : Liste des erreurs avec IdUnique et Message

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 SyndicatIdExterne du syndicat concerné
  • La DateAdhesion correspondante

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.