API données ouvrier — aide-mémoire de séance

Bureau des Métiers · Globaz · APCOM — instance centrale / guichet ouvrier · séance du 17.09.2026
Grégory Liand · 15.09.2026

Composants. Instance centrale : master.mybmapp.ch. Guichet ouvrier : mybmapp.ch (accès web, poste ouvrier) et l'application mobile MyBM.

Flux descendant — WebMétiers (ServiceNow) → MyBM · pull

1Compléments demandés au flux affilié (données ouvrier)

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) :

GroupeChampsPrécision
CoordonnéesemailAbsent du payload. Le téléphone (address.phone) existe déjà — à confirmer qu'il s'agit du mobile.
PermisresidencePermitType de permis de séjour (sélection selon le référentiel Globaz).
Photo & pièce d'identitéphoto · idDocumentFront · idDocumentBackPhoto 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'appmobileAppAccessBooléen — droit à l'application mobile (oui / non).
AffiliationaffiliationAppStatusAvancement 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érencesnotifPush · notifEmail · interestWorkSafety · interestTrainingCenter · interestAdmin · interestDocumentsCanaux et centres d'intérêt (booléens ; certains forçables par le BM).

2Nouveau flux « entreprises »

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)
Flux montant — MyBM → WebMétiers (ServiceNow) · pull

3Remontée exposée — request_update_team

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 :

FormeAuteurCléContenu
Profil ouvrierworkernssAdresse, 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 + jobIdNouvelle 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" }
  }
]

4Référentiels

Reçus : état civil, permis, sexe. À confirmer avec Globaz :

5Points ouverts et pistes — APCOM / Globaz

Points ouverts (côté Globaz) :

Pistes proposées par APCOM — elles répondent aux deux points ci-dessus :

6À confirmer — BM (Delphine)