Composants. Instance centrale : master.mybmapp.ch. Guichet ouvrier :
mybmapp.ch (accès web, poste ouvrier) et l'application mobile MyBM.
Les données ouvrier proviennent du flux affilié existant GET /bmaffiliates/{affiliationId} (fiche de l'entreprise contenant employees[]) ; il conserve ses clés. Le volet rémunération et cotisations est déjà couvert par bmjobs/{jobId} (historique salarial complet, taux employé / employeur / total, caisses). Champs à ajouter (clés proposées) :
| Groupe | Champs | Précision |
|---|---|---|
| Coordonnées | email | Absent du payload. Le téléphone (address.phone) existe déjà — à confirmer qu'il s'agit du mobile. |
| Permis | residencePermit | Type de permis de séjour (sélection selon le référentiel Globaz). |
| Photo & pièce d'identité | photo · idDocumentFront · idDocumentBack | Photo du travailleur ; pièce d'identité en deux images distinctes (recto et verso — pas une seule image des deux faces). Transmises en base64. |
| Droit à l'app | mobileAppAccess | Booléen — droit à l'application mobile (oui / non). |
| Affiliation | affiliationAppStatus | Avancement de l'affiliation : welcomeTicketNotIssued (ticket pas encore émis) → welcomeTicketIssued (courrier envoyé) → procedureNotStarted (procédure non débutée par l'ouvrier) → procedureDone (procédure effectuée). |
| Préférences | notifPush · notifEmail · interestWorkSafety · interestTrainingCenter · interestAdmin · interestDocuments | Canaux et centres d'intérêt (booléens ; certains forçables par le BM). |
Aujourd'hui l'accès se fait par affilié unique. Un flux listant les entreprises affiliées est nécessaire pour amorcer le balayage (indépendamment des tenants) :
| Endpoint (proposé) | Retour |
|---|---|
GET /bmaffiliates (collection) | [ { "affiliationId":"…", "name":"…" }, … ] — liste complète des affiliés (le tri, dont l'exclusion caisse 133, est opéré côté APCOM) |
Modèle pull. L'instance centrale ne pousse rien : elle expose un service GET que Globaz interroge par plage from/to. WebMétiers reste l'autorité et applique. Réponse : liste de mutations, chaque champ en { old, new } ("unchanged" sinon) ; champs à référentiel en { code, label } (le code fait foi).
Accès au flux. request_update_team est protégé par clé publique / privée + token
émis par l'instance centrale — un partenaire = une paire de clés (secrets en Vaultwarden). Même modèle
que les caisses partenaires qui déposent des documents.
Deux formes, distinguées par l'auteur :
| Forme | Auteur | Clé | Contenu |
|---|---|---|---|
| Profil ouvrier | worker | nss | Adresse, mobile, e-mail, état civil, nationalité, permis, IBAN, pièce d'identité, photo, préférences, statut d'affiliation. |
| Avenant de poste (campagne CCT) | companyAdmin (+ affiliationId) | nss + jobId | Nouvelle situation historical : salaire, taux, type, classe CCT, qualification. |
GET /request_update_team?from=…&to=… [ // Profil ouvrier (app / web) — clé nss, sans jobId { "mutationId": "…", "nss": "756.1234.5678.97", "timestamp": "…+02:00", "author": { "type": "worker" }, "fields": { "email": { "old": null, "new": "prenom.nom@example.ch" }, "civilStatus": { "old": { "code": "515001", "label": "Célibataire" }, "new": { "code": "515002", "label": "Marié(e)" } }, "residencePermit": { "old": null, "new": { "code": "68004002", "label": "Permis catégorie B" } }, "idDocumentFront": { "old": null, "new": "<image base64 — recto>" }, "idDocumentBack": { "old": null, "new": "<image base64 — verso>" }, "affiliationAppStatus": { "old": "welcomeTicketIssued", "new": "procedureDone" } } }, // Avenant de poste (tenant, campagne CCT) — clé nss + jobId // nouvelle entrée historical ; la précédente clôturée la veille { "mutationId": "…", "nss": "756.9876.5432.10", "jobId": "118324", "timestamp": "…+02:00", "author": { "type": "companyAdmin", "affiliationId": "0001234.00-01" }, "newHistorical": { "startDate": "2027-01-01", "salary": "5200.00", "occupationRate": "100", "salaryType": { "code": "MOIS", "label": "Mensuel" }, "diploma": { "classeCCT": "CL4" } }, "closePrevious": { "endDate": "2026-12-31" } } ]
Reçus : état civil, permis, sexe. À confirmer avec Globaz :
CH, FR, IT…).Points ouverts (côté Globaz) :
Pistes proposées par APCOM — elles répondent aux deux points ci-dessus :
mutationId) → règle le retour / refus.bmaffiliates/{id} (qui déballe toute l'entreprise). Idéalement agrégée (tous les postes, multi-entreprises inclus) et complète (profil + historique + cotisations) : un appel au lieu de trois → allège encore la charge.