Lien contextuel Colibri

Colibri est une plateforme web de gestion de la vaccination utilisée par des centres de vaccination, centres de santé, services de santé au travail et établissements médico-sociaux. Le lien contextuel permet à un système d’information de santé d’ouvrir directement le dossier d’un patient dans Colibri, dans le contexte d’une équipe Colibri donnée.

Cette page décrit le mécanisme d’intégration basé sur un jeton signé au format EVC, pour transmettre les informations nécessaires à l’identification du patient et éviter la double saisie.

L’interopérabilité repose sur les standards JWT, le profil EVC et TLS pour le chiffrement des données en transit. Le lien contextuel doit être ouvert en HTTPS.

Dans la suite du document, le terme SIH appelant désigne le système tiers qui génère le lien contextuel vers Colibri. Il peut notamment s’agir d’un DPI.

Objectifs

Le lien contextuel doit permettre de :

  • ouvrir Colibri depuis le SIH appelant avec le patient courant ;
  • rattacher le dossier patient Colibri au dossier patient du SIH appelant ;
  • créer un dossier patient Colibri lorsque le patient n’existe pas encore ;
  • sécuriser la transmission des données par une signature du jeton ;
  • limiter les doubles saisies dans les parcours de vaccination.

Séquence d’intégration

  1. L’utilisateur final, depuis le SIH appelant, clique sur le bouton Ouvrir dans Colibri.
  2. Le SIH appelant génère un JWT au format EVC contenant les informations personnelles du patient, dont l’IPP.
  3. Le SIH appelant produit une URL vers Colibri contenant le jeton EVC.
  4. Colibri valide le jeton : signature, structure et contenu.
  5. Si Colibri trouve un dossier patient correspondant sur la base stricte de l’IPP ou de l’INS, il rattache le dossier patient puis l’ouvre pour l’utilisateur.
  6. Si Colibri trouve un dossier patient avec des traits d’identito-vigilance proches, il propose à l’utilisateur de rattacher ce dossier patient Colibri au dossier patient du SIH appelant.
  7. Si Colibri ne trouve pas de dossier patient à partir des informations envoyées, ou si l’utilisateur refuse tout rattachement, Colibri guide l’utilisateur dans la création d’un nouveau dossier patient qui sera mis en correspondance avec le dossier patient du SIH appelant.

Diagramme de séquence du lien contextuel patient Colibri

Jeton EVC

Qu’est-ce que l’EVC ?

L’European Vaccination Card, ou EVC, est un document numérique portable et autoportant, dérivé du Digital COVID Certificate, conçu pour permettre aux citoyens de conserver et partager leur historique vaccinal.

Ses usages principaux sont :

  • la continuité des soins et l’accès fiable à l’historique vaccinal ;
  • la traduction automatique dans différentes langues ;
  • l’intégration dans les DPI ou SIH ;
  • l’alimentation de systèmes d’aide à la décision clinique ;
  • la vérification de l’authenticité des données.

Le profil EVC est décrit dans la documentation du schéma EVC. Un démonstrateur EVC permet aussi de générer et de lire des jetons EVC.

Adaptation pour Colibri

Le format EVC étant extensible, il est réutilisé comme format du jeton JWT, avec des adaptations spécifiques :

  • ajout de métadonnées propres au lien contextuel Colibri dans le champ metadata, notamment l’IPP et l’INS.

Structure du JWT

L’algorithme de signature attendu est ES256. Le header JWT doit contenir un champ kid identifiant la clé de signature utilisée.

Champs obligatoires :

  • dob : date de naissance au format ISO 8601 ;
  • nam : objet contenant l’identité du patient. Le champ fn contient le nom de naissance ou le nom légal du patient. Le champ gn contient le ou les prénoms du patient ;
  • ver : version du schéma EVC, actuellement 1.0.0 ;
  • iss : émetteur du jeton ;
  • iat : date d’émission du jeton ;
  • metadata.ipp ou metadata.ins : au moins un de ces deux identifiants doit être présent. metadata.ipp contient l’identifiant patient permanent dans le SIH appelant, sous forme de chaîne libre. metadata.ins contient le matricule INS du patient, c’est-à-dire le NIR ou le NIA sur 15 caractères numériques, clé de contrôle incluse et sans espace ;
  • metadata.sex : sexe administratif du patient, actuellement M ou F.

Champs facultatifs :

  • exp : date d’expiration du jeton ;
  • v : actes de vaccination codés, utilisés par Colibri et fusionnés avec l’historique vaccinal existant. La structure complète de ce claim est décrite dans la documentation du schéma EVC et peut être visualisée dans le démonstrateur EVC.

Exemple de payload :

{
  "dob": "1989-03-15",
  "nam": { "fn": "Dupont", "gn": "Marie" },
  "ver": "1.0.0",
  "iss": "sih-hopital.example",
  "iat": 1737000000,
  "metadata": {
    "ipp": "IPP-123456",
    "ins": "185057512345678",
    "sex": "F"
  }
}

Génération du lien

Le SIH appelant doit produire une URL vers l’hôte colibri.mesvaccins.net, avec le chemin suivant :

/teams/[TEAM_ID]/contextual-patient-link?evc=[EVC]

Où :

  • [EVC] doit être remplacé par le jeton EVC représentant le dossier patient courant, encodé comme valeur de paramètre de requête URL ;
  • [TEAM_ID] doit être remplacé par l’identifiant de l’équipe Colibri associée à l’utilisateur ou au contexte du SIH appelant.

Le bouton d’ouverture dans Colibri doit ouvrir l’URL de lien contextuel dans un navigateur.

Le jeton EVC identifie le patient et le contexte d’ouverture, mais ne constitue pas une authentification utilisateur. L’utilisateur doit être authentifié dans Colibri et autorisé à accéder à l’équipe [TEAM_ID].

Les éléments de configuration du SIH appelant sont donc :

  • la clé privée permettant de signer le jeton EVC ;
  • l’identifiant de l’équipe Colibri des utilisateurs.

Signature et clés publiques

Le SIH appelant signe le jeton EVC avec une clé privée associée à son émetteur.

Le claim iss identifie l’émetteur du jeton. Colibri utilise cette valeur pour retrouver la clé publique autorisée pour cet émetteur et vérifier la signature ES256.

Les clés publiques des émetteurs autorisés sont publiées dans le dépôt GitHub public euvabeco/pub. La clé publique doit être publiée avant toute mise en production de l’intégration.

Les clés publiques sont publiées au format JWK, sous pub_keys/[ÉMETTEUR]/[KID].json, puis agrégées dans un JWKS exposé à l’adresse https://keys.euvabeco.eu/.well-known/jwks.json. Par exemple, pour un émetteur iss valant SYA, les clés sont publiées sous pub_keys/SYA/.

Chaque clé publique doit être une clé elliptique P-256 utilisable avec ES256, et contenir au minimum les propriétés JWK kty, crv, x, y et kid.

Le header JWT doit contenir un champ kid permettant d’identifier la clé à utiliser dans le JWKS.

Traitement côté Colibri

Colibri prend en charge les responsabilités suivantes :

  • vérification de la signature ES256 ;
  • contrôle de la structure du payload ;
  • vérification des champs obligatoires ;
  • vérification de l’expiration du jeton lorsque le claim exp est présent ;
  • refus de l’ouverture du dossier et affichage d’un message d’erreur en cas de jeton invalide, de signature non vérifiable ou d’utilisateur non autorisé ;
  • rattachement à un dossier patient existant ;
  • création d’un dossier patient correspondant lorsqu’aucun rattachement n’est possible.

Annexes