Vaccinations

Format d’une vaccination

Chaque vaccination est identifiée par un identifiant numérique et comporte les attributs suivants :

Vaccin
Vaccin identifié par son code MesVaccins.net id, son code UCD ucd_code, ou son code CIP icp_code (cf. la nomenclature des vaccins)
Date
Date d'administration de la vaccination
Numéro de lot
Garantit la traçabilité du vaccin administré
Rappel
Indique si la vaccination est une dose de rappel
Voie d'injection
Voie d'injection de la vaccination au format HL7v3. Peut prendre l'une des valeurs suivantes :
  • IM : injection intramusculaire
  • SQ : injection sous-cutanée
  • IDINJ : injection intradermique
  • NASINHL : inhalation nasale
  • PO : administration orale
Site d'injection
Site d'injection de la vaccination au format HL7v3. Peut prendre l'une des valeurs suivantes :
  • LD : deltoïde gauche
  • RD : deltoïde droit
  • LT : cuisse gauche
  • RT : cuisse droite
Commentaires
Commentaires publiés par le patient ou des professionnels de santé
Validation
Validation du vaccin par un professionnel de santé, qui soit valide une injection qu'il administre lui-même, soit valide sur présentation d'un document (certificat de vaccination ou carnet de vaccination).

Lecture d’une vaccination

  • GET /records/:uuid/vaccinations/1.json renvoie la vaccination d'identifiant 1
{
  "id": 1,
  "created_at": "2012-03-22T16:56:48-05:00",
  "updated_at": "2012-03-22T16:56:48-05:00",
  "vaccine": {
    "id": 1,
    "name": "REVAXIS",
    "cid_codes": ["3400936876293"],
    "ucd_code": "9289545",
    "diseases":[
      { "id":2, "name":"T\u00e9tanos"},
      { "id":4, "name":"Poliomy\u00e9lite"},
      { "id":1,"name":"Dipht\u00e9rie"}
    ]
  },
  "date": "2010-02-01",
  "age": "5 mois",
  "batch": "ABC123",
  "injection_route": "IM",
  "injection_site": "LD",
  "creator": {
    "id": 75876,
    "name": "Jean-Louis Koeck",
    "first_name": "Jean-Louis",
    "last_name": "Koeck"
  },
  "validation": {
    "creator": {
      "id": 75876,
      "name": "Jean-Louis Koeck",
      "first_name": "Jean-Louis",
      "last_name": "Koeck"
    },
    "administered": true
  },
  "has_comments": true,
  "comments": [
    {
      "id": "6567",
      "content": "Légère inflammation au niveau de l'épaule droite",
      "created_at": "2012-03-22T16:56:48-05:00",
      "updated_at": "2012-03-22T16:56:48-05:00",
      "creator": {
        "id": 75876,
        "name": "Jean-Louis Koeck"
      }
    }
  ],
  "booster": true
}

On a une vaccination à Revaxis réalisée le 1er février 2010, enregistrée par le docteur Jean-Louis Koeck. L’attribut batch donne le numéro de lot : 24. C’est une vaccination de rappel car l’attribut booster a la valeur true.

L’attribut validation indique le statut de la validation de la vaccination, et peut prendre les formes suivantes :

null
Vaccination non validée.
{
  "creator": {
    "id": 75876,
    "name": "Jean-Louis Koeck"
  },
  "administered": false
}
Vaccination validée sur preuve documentaire par le professionnel de santé Jean-Louis Koeck.
{
  "creator": {
    "id": 75876,
    "name": "Jean-Louis Koeck"
  },
  "administered": true
}
Vaccination validée et administrée par le professionnel de santé Jean-Louis Koeck.

Lecture de toutes les vaccinations

  • GET /records/:uuid/vaccinations.json renvoie l'historique entier des vaccinations du patient sous la forme d'un tableau
[
  {
    "id": "...",
    "created_at": "...",
    "updated_at": "...",
    "vaccine": "...",
    "date": "...",
    "age": "...",
    "batch": "...",
    "injection_route": "...",
    "injection_site": "...",
    "creator": "...",
    "validation": "...",
    "has_comments": "...",
    "comments": "...",
    "booster": "..."
  },
  "..."
]

Récupérer l’historique vaccinal d’un patient en pdf

  • GET /records/:uuid/vaccinations.pdf renvoie l'historique entier des vaccinations du patient sous la forme d'un fichier pdf

Historique vaccinal en pdf

Création d’une vaccination

  • POST /records/:uuid/vaccinations.json enregistre une nouvelle vaccination à partir de l'objet JSON envoyé
{
  "vaccine": {
    "id": "01"
  },
  "date": "2012-01-01",
  "batch": "RX49",
  "booster": false,
  "injection_route": "IM",
  "injection_site": "LD",
  "validation": {
    "administered": false
  }
}

Le serveur renvoie 201 Created et un objet JSON représentant la vaccination créée (au même format que les données renvoyées par GET /records/:uuid/vaccinations/1.json).

En cas de détection de doublon (vaccination déjà existante pour la même date et le même vaccin), le serveur renvoie 409 Conflict. Toutefois, il est possible de forcer la création en ajoutant le header MVX-Bypass-Duplicate-Check=1 à la requête.

Les paramètres batch (numéro de lot), booster, injection_route, injection_site, et validation sont optionnels.

Le paramètre id dans l’objet vaccine désigne l’identifiant du vaccin dans la base de données de MesVaccins.net. Ce même identifiant est retourné pour chaque vaccin par le service qui liste les vaccins.

L’attribut validation indique le statut de la validation de la vaccination, et peut prendre les formes suivantes :

null
Vaccination non validée.
{
  "administered": false
}
Vaccination validée sur preuve documentaire.
{
  "administered": true
}
Vaccination validée et administrée.

Dans tous les cas, le professionnel de santé inscrit comme créateur (et validateur si applicable) de la vaccination sera le professionnel de santé authentifié sur MesVaccins.net, il n’est actuellement pas possible d’indiquer explicitement le champ creator dans ce message.

À partir d’une délivrance

Il est aussi possible de créer une vaccination à partir d’une délivrance donnée : le vaccin utilisé et le numéro de lot sont alors récuperés, et la délivrance référencée est marquée comme injectée (cf. la documentation des délivrances).

{
  "date": "2016-12-19",
  "vaccine_issue": {
    "id": "817"
  }
}

Modification d’une vaccination

  • PUT /records/:uuid/vaccinations/1.json met à jour la vaccination d'identifiant 1

On peut se contenter d’envoyer les paramètres qui ont changé. Ici, on corrige le vaccin enregistré :

{
  "vaccine": { "id": 4}
}

En envoyant un objet d’attribut validation nul, on invalide la vaccination :

{
  "validation": null
}

De la meme manière, on peut valider une vaccination :

{
  "validation": {
    "administered": true
  }
}

Le service renvoie 200 OK en cas de succès.

Le service renvoie 400 Bad Request si le format des données d’entrée est erroné.

Le service renvoie 403 Forbidden si l’utilisateur tente de modifier une vaccination validée par un autre professionnel de santé.

Suppression d’une vaccination

  • DELETE /records/:uuid/vaccinations/1.json supprime la vaccination d'identifiant 1.

Le service renvoie 204 No Content en cas de succès.

Le service renvoie 403 Forbidden si l’utilisateur tente de supprimer une vaccination sans en avoir le droit.

Le professionnel a le droit de supprimer une vaccination dans les cas suivants :

  • la vaccination n’est pas validée,
  • la vaccination est validée sur preuve par un autre professionnel,
  • la vaccination est validée sur administration par le professionnel lui même ou un membre de son équipe de soin.

Donc le seul cas ou la suppression est impossible est si la vaccination est validée sur administration par un professionnel hors de l’équipe de soin du professionnel connecté.

Synchronisation des vaccinations

  • POST /records/:uuid/vaccinations/sync.json synchronise les vaccins client avec les vaccins serveur
Le processus de synchronisation est décrit dans le manuel d'intégration.
{
  "last_sync_at": "2014-08-13T17:16:20+02:00",
  "vaccinations": [

    // VACCINATION NON MODIFIÉE LOCALEMENT
    {
      "id": 404623905,
      "local_id": 1,
      "date": "1993-12-07",
      "vaccine": {
        "id": 548234118
      },
      "updated_at": "2014-06-18T14:33:57+02:00"
    },

    // VACCINATION AVEC MÊME DATE/VACCIN : POTENTIEL DOUBLON
    {
      "id": null,
      "local_id": 4,
      "date": "1993-12-07",
      "vaccine": {
        "id": 548234118
      },
      "creator": {
        "email": "mdavis@chu.fr",
        "first_name": "Miles",
        "last_name": "Davis",
        "profession": "doctor",
        "rpps": "19590000000"
      },
      "updated_at": null
    },

    // VACCINATION MODIFIÉE LOCALEMENT
    {
      "id": 18301861,
      "local_id": 2,
      "date": "1995-06-03",
      "validation": {
        "administered": false,
        "creator": {
          "email": "mdavis@chu.fr"
        }
      },
      "vaccine": {
        "id": 285359524
      },
      "updated_at": "2014-06-18T14:35:34+02:00",
      "modified": true
    },

    // NOUVELLE VACCINATION
    {
      "id": null,
      "local_id": 3,
      "vaccine": {
        "id": 734318381
      },
      "date": "2005-02-02",
      "creator": {
        "email": "mdavis@chu.fr",
        "first_name": "Miles",
        "last_name": "Davis",
        "profession": "doctor",
        "rpps": "19590000000"
      },
      "updated_at": null
    }
  ]
}

Les paramètres sont les suivants :

Champ Valeur
last_sync_at

timestamp de dernière synchronisation renvoyé par le serveur à la synchronisation précédente

OU null si la première synchronisation n'a pas encore eu lieu pour le dossier courant

vaccinations tableau des vaccinations locales, chacune étant représentée par un objet JSON

Les paramètres des vaccinations sont :

En cas de modification, il est possible de ne fournir que les champs ayant été modifiés !

Champ Type Valeur
id number identifiant de la vaccination serveur correspondante
null si la vaccination cliente n'a jamais été synchronisée
local_id number identifiant local de la vaccination dans la base de données du client
vaccine > id number identifiant du vaccin dans la nomenclature de MesVaccins.net
date date date d'administration du vaccin
batch string Numéro de lot
  • chaîne de caractères arbitraire, exemple : "AHAVB725AA"
  • null si le numéro de lot n'a pas été enregistré
booster boolean true si le vaccin est un rappel, false sinon
validation statut de validation de la vaccination, ou null si la vaccination n'est pas validée
ce paramètre peut être omis dans le cas d'une mise à jour si le de la validation est inchangé
creator identité du professionnel de santé ayant saisi la vaccination dans le système (utilisé pour la traçabilité des informations)
cet attribut n'est utilisé que lors de la création de la vaccination
updated_at datetime

  • timestamp de dernière mise à jour de la vaccination serveur récupéré lors de la synchronisation précédente
  • null si la vaccination n'a jamais été synchronisée

modified boolean

true si la vaccination a été modifiée par l'utilisateur depuis la synchronisation précédente, sinon false

Les paramètres du champ de validation sont :

Champ Valeur
administered true si la vaccination est validée sur administration, sinon false
creator identité du professionnel de santé ayant effectué la validation (cf. ci-dessous)

Les paramètres du professionnel de santé sont :

Champ Valeur
email/id email ou identifiant du professionnel de santé. Obligatoire.
first_name prénom du professionnel. Facultatif si l'information n'a pas changé.
last_name nom du professionnel. Facultatif si l'information n'a pas changé.
profession profession du professionnel parmi doctor, pharmacist, nurse, midwife, other_authorised_to_access_vacc_records, other_not_authorised_to_access_vacc_records. Facultatif si l'information n'a pas changé.
rpps numéro RPPS du professionnel. Facultatif.

Le service renvoie 200 OK en cas de succès, et retourne la liste des vaccinations accompagnée de la date effective de synchronisation calculée sur le serveur last_sync_at et de la liste des identifiants des vaccinations plus présentes du serveur deleted_vaccinations :

{
  "last_sync_at": "2015-02-02T16:12:37+02:00",
  "deleted_vaccinations": [],
  "vaccinations": [
    {
      "id": 404623905,
      "date": "1993-12-09",
      "batch": "",
      "created_at": "2014-06-18T14:33:57+02:00",
      "updated_at": "2014-08-13T18:05:07+02:00",
      "validation": {
        "creator": {
          "id": 421868113,
          "name": "Jean-Louis KOECK",
          "first_name": "Jean-Louis",
          "last_name": "KOECK"
        },
        "administered": false
      },
      "booster": false,
      "vaccine": {
        "id": 548234118,
        "name": "A.D.T."
      },
      "creator": {
        "id": 421868113,
        "name": "Jean-Louis KOECK",
        "first_name": "Jean-Louis",
        "last_name": "KOECK"
      },
      "local_id": 1
    },
    {
      "id": 404623666,
      "date": "1996-06-12",
      "batch": "",
      "created_at": "2014-06-18T14:33:57+02:00",
      "updated_at": "2014-08-13T18:05:07+02:00",
      "validation": {
        "creator": {
          "id": 421868113,
          "name": "Jean-Louis KOECK",
          "first_name": "Jean-Louis",
          "last_name": "KOECK"
        },
        "administered": false
      },
      "booster": false,
      "vaccine": {
        "id": 548234992,
        "name": "Revaxis"
      },
      "creator": {
        "id": 421868113,
        "name": "Jean-Louis KOECK",
        "first_name": "Jean-Louis",
        "last_name": "KOECK"
      },
      "local_id": 2
    }
  ]
}

Le service renvoie 400 Bad Request si le format des données d’entrée est erroné.

Le service renvoie 409 Conflict en cas de conflit entre les vaccins client et les vaccins serveur. Dans ce cas la réponse contient le détail des conflits au format JSON :

{
  "conflicts": [
    // Cas d'un conflit d'éditions concourantes
    {
      "type": "edit",
      "local_id": 1,
      "vaccination": {
        "id": 404623905,
        "date": "1993-12-09",
        "batch": "",
        "created_at": "2014-06-18T14:33:57+02:00",
        "updated_at": "2014-08-13T18:05:07+02:00",
        "validation": {
          "creator": {
            "id": 421868113,
            "name": "Jean-Louis KOECK",
            "first_name": "Jean-Louis",
            "last_name": "KOECK"
          },
          "administered": false
        },
        "booster": false,
        "vaccine": {
          "id": 548234118,
          "name": "A.D.T."
        },
        "creator": {
          "id": 421868113,
          "name": "Jean-Louis KOECK",
          "first_name": "Jean-Louis",
          "last_name": "KOECK"
        },
        "local_id": null
      }
    },
    // Cas d'une vaccination potentiellement en doublon
    {
      "type": "duplicate",
      "local_id": 4,
      "vaccination": {
        "id": 404623905,
        "date": "1993-12-09",
        "batch": "",
        "created_at": "2014-06-18T14:33:57+02:00",
        "updated_at": "2014-08-13T18:05:07+02:00",
        "validation": {
          "creator": {
            "id": 421868113,
            "name": "Jean-Louis KOECK",
            "first_name": "Jean-Louis",
            "last_name": "KOECK"
          },
          "administered": false
        },
        "booster": false,
        "vaccine": {
          "id": 548234118,
          "name": "A.D.T."
        },
        "creator": {
          "id": 421868113,
          "name": "Jean-Louis KOECK",
          "first_name": "Jean-Louis",
          "last_name": "KOECK"
        }
      }
    },
    // Cas d'une suppression par le client concurremment à une édition distante
    {
      "type": "delete",
      "local_id": null,
      "vaccination": {
        "id": 404623666,
        "date": "1996-06-12",
        "batch": "",
        "created_at": "2014-06-18T14:33:57+02:00",
        "updated_at": "2014-08-13T18:05:07+02:00",
        "validation": {
          "creator": {
            "id": 421868113,
            "name": "Jean-Louis KOECK",
            "first_name": "Jean-Louis",
            "last_name": "KOECK"
          },
          "administered": false
        },
        "booster": false,
        "vaccine": {
          "id": 548234992,
          "name": "Revaxis"
        },
        "creator": {
          "id": 421868113,
          "name": "Jean-Louis KOECK",
          "first_name": "Jean-Louis",
          "last_name": "KOECK"
        },
        "local_id": null
      }
    },
    // Cas d'une édition par le client concurremment à une suppression distante
    {
      "type": "delete",
      "local_id": 1,
      "vaccination": null
    }
  ]
}

Résolution des conflits

Les conflits d’édition et de duplication sont résolus en ajoutant l’attribut "conflict_resolved": true à la vaccination lors du renvoi de la requête.

Le conflit de suppression est résolu en ajoutant la liste des vaccinations à supprimer lors du renvoi de la requête.

{
  "last_sync_at": "2014-08-13T17:16:20+02:00",
  "confirm_deletions": [
    { "id": 404623666 }
  ],
  "vaccinations": [

    // VACCINATION NON MODIFIÉE LOCALEMENT
    {
      "id": 404623905,
      "local_id": 1,
      "date": "1993-12-07",
      "vaccine": {
        "id": 548234118
      },
      "updated_at": "2014-06-18T14:33:57+02:00"
    },

    // VACCINATION MODIFIÉE LOCALEMENT
    {
      "id": 18301861,
      "conflict_resolved": true,
      "local_id": 2,
      "date": "1995-06-03",
      "vaccine": {
        "id": 285359524
      },
      "updated_at": "2014-06-18T14:35:34+02:00",
      "modified": true
    },

    // NOUVELLE VACCINATION
    {
      "id": null,
      "local_id": 3,
      "vaccine": {
        "id": 734318381
      },
      "date": "2005-02-02",
      "updated_at": null
    }
  ]
}