Vaccinations : Note et Historiques

Support des Notes et Historiques de Vaccination défini dans le Cadre d’Intéropérablité SIS de l’ANS

@Since DMP-5.0

Note de vaccination

Il est possible désormais de soumettre des notes de vaccinations dans le DMP et d’en récupérer l’historique simplement. Les spécifications de ce volet vaccination sont disponibles sur le site de l’ANS :  https://esante.gouv.fr/volet-vac-vaccination

Description

Générer une Note de Vaccination (cda_note_vaccination.xml) consiste à générer une entête similaire à l’ensemble des volets définis par le CI-SIS dont le volet à structuration minimale, mais aussi un corps dit structuré contenant une et une seule note de vaccination. Cette section structurée est composée de deux parties.

  • Une partie commentaire lisible en html facilement transposable avec une feuille de style XSLT:
<text>
    <table border="1">
        <thead align="center">
            <tr>
                <th align="center">Date de l'acte</th>
                <th align="center">Nom du vaccin</th>
                <th align="center">Type d'administration</th>
                <th align="center">Numéro de lot</th>
                <th align="center">Voie d'administration</th>
                <th align="center">Site d'administration</th>
                <th align="center">Vaccinateur</th>
                <th align="center">Vaccin ajouté ou modifié par</th>
                <th align="center">Commentaire</th>
            </tr>
        </thead>
        <tbody>
            <tr ID="uuid-87dd18c7-a980-43f7-93bd-2b6620aa8c80">
                <td align="left">29/10/2022</td>
                <td ID="uuid-0f88f638-469d-400d-86e5-3424e4956b28" align="left">VACCIN TETANIQUE PASTEUR, suspension injectable en seringue préremplie vaccin tétanique adsorbé</td>
                <td align="left">1ère série vaccinante - 2</td>
                <td align="left">870343</td>
                <td align="left">intra musculaire</td>
                <td ID="uuid-d4657f99-d007-4429-a9ae-3787abb26e20" align="left">LD</td>
                <td align="left">Dr MEDECIN RPPS0022297 VIRGINIE - Médecin - Qualifié en Médecine Générale (SM)</td>
                <td align="left">Dr MEDECIN RPPS0022297 VIRGINIE - Médecin - Qualifié en Médecine Générale (SM)</td>
                <td ID="uuid-1f57e117-0315-4f13-9079-028126f29e84" align="left">Commentaire de la vaccination</td>
            </tr>
        </tbody>
    </table>
</text>
  • une partie structurée interprétable par la machine :
<substanceAdministration classCode="SBADM" moodCode="EVN" negationInd="false">
    <templateId root="2.16.840.1.113883.10.20.1.24"/>
    <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.12"/>
    <templateId root="1.2.250.1.213.1.1.3.45"/>
    <id root="0e2111cf-44fd-4ed3-a5bd-0a19de0faa2a"/>
    <code code="INITIMMUNIZ" codeSystem="2.16.840.1.113883.5.4" codeSystemName="HL7:ActCode" displayName="1ère série vaccinante"/>
    <text>
        <reference value="#uuid-87dd18c7-a980-43f7-93bd-2b6620aa8c80"/>
    </text>
    <statusCode code="completed"/>
    <effectiveTime value="20221029"/>
    <routeCode code="IM" codeSystem="2.16.840.1.113883.5.112" codeSystemName="routeOfAdministration" displayName="intra musculaire"/>
    <approachSiteCode code="LD" codeSystem="2.16.840.1.113883.5.1052" codeSystemName="HumanSubstanceAdministrationSite" displayName="LD">
        <originalText>
            <reference value="#uuid-d4657f99-d007-4429-a9ae-3787abb26e20"/>
        </originalText>
    </approachSiteCode>
    <doseQuantity value="1"/>
    <consumable typeCode="CSM">
        <manufacturedProduct>
            <templateId root="2.16.840.1.113883.10.20.1.53"/>
            <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.7.2"/>
            <templateId root="1.2.250.1.213.1.1.3.43"/>
            <manufacturedMaterial>
                <code code="67718545" codeSystem="1.2.250.1.213.2.3.1" codeSystemName="CIS" displayName="VACCIN TETANIQUE PASTEUR, suspension injectable en seringue préremplie vaccin tétanique adsorbé">
                    <originalText>
                        <reference value="#uuid-0f88f638-469d-400d-86e5-3424e4956b28"/>
                    </originalText>
                    <translation code="J07CA06" codeSystem="2.16.840.1.113883.6.73" codeSystemName="ATC" displayName="Diphtérie - Haemophilus influenzae B - coqueluche - poliomyélite - tétanos"/>
                    <translation code="3400932857241" codeSystem="1.2.250.1.213.2.3.2" codeSystemName="Nomenclature CIP" displayName="1 seringue(s) préremplie(s) en verre de 0,5 ml"/>
                </code>
                <name>vaccin tetanique pasteur</name>
                <lotNumberText>870343</lotNumberText>
            </manufacturedMaterial>
        </manufacturedProduct>
    </consumable>
    <performer typeCode="PRF">
        <time/>
        <assignedEntity>
            <id extension="3380784801/123456" root="1.2.250.1.71.4.2.1"/>
            <code code="G15_10/SM26" codeSystem="1.2.250.1.213.1.1.4.5" displayName="Médecin - Qualifié en Médecine Générale (SM)"/>
            <addr nullFlavor="NASK"/>
            <telecom nullFlavor="NASK"/>
            <assignedPerson>
                <name>
                    <given>VIRGINIE</given>
                    <family>MEDECIN RPPS0022297</family>
                </name>
            </assignedPerson>
            <representedOrganization>
                <id extension="1380784801" root="1.2.250.1.71.4.2.2"/>
                <name>centre de dialyse</name>
                <telecom nullFlavor="NASK"/>
                <addr nullFlavor="NASK"/>
                <standardIndustryClassCode code="AMBULATOIRE" codeSystem="1.2.250.1.213.1.1.4.9" displayName="Ambulatoire"/>
            </representedOrganization>
        </assignedEntity>
    </performer>
    <author>
        <time value="20221029"/>
        <assignedAuthor>
            <id extension="3380784801/123456" root="1.2.250.1.71.4.2.1"/>
            <code code="G15_10/SM26" codeSystem="1.2.250.1.213.1.1.4.5" displayName="Médecin - Qualifié en Médecine Générale (SM)"/>
            <addr nullFlavor="NASK"/>
            <telecom nullFlavor="NASK"/>
            <assignedPerson>
                <name>
                    <given>VIRGINIE</given>
                    <family>MEDECIN RPPS0022297</family>
                </name>
            </assignedPerson>
            <representedOrganization>
                <id extension="1380784801" root="1.2.250.1.71.4.2.2"/>
                <name>centre de dialyse</name>
                <telecom nullFlavor="NASK"/>
                <addr nullFlavor="NASK"/>
            </representedOrganization>
        </assignedAuthor>
    </author>
    <entryRelationship typeCode="SUBJ">
        <observation classCode="OBS" moodCode="EVN">
            <templateId root="2.16.840.1.113883.10.20.1.46"/>
            <templateId root="1.2.250.1.213.1.1.3.82"/>
            <code code="30973-2" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="Rang de la vaccination"/>
            <statusCode code="completed"/>
            <value value="2" xsi:type="INT"/>
        </observation>
    </entryRelationship>
    <entryRelationship typeCode="SUBJ">
        <act classCode="ACT" moodCode="EVN">
            <templateId root="2.16.840.1.113883.10.20.1.40"/>
            <templateId root="1.3.6.1.4.1.19376.1.5.3.1.4.2"/>
            <code code="48767-8" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="Commentaire"/>
            <text>
                <reference value="#uuid-1f57e117-0315-4f13-9079-028126f29e84"/>
                Commentaire de la vaccination</text>
            <statusCode code="completed"/>
        </act>
    </entryRelationship>
</substanceAdministration>

Le support de la note de vaccination dans la DevBox-Santé vous affranchit de la génération de ces deux structures ainsi que d’en gérer les liens entre ces deux structures.

Dans le modèle de la DevBox-Santé une note de vaccination est :

"vaccination": {
    "id": "be9fdb2a-af27-47e0-92da-a00628f640e0",
    "code": {
        "valeur": "INITIMMUNIZ",
        "identifiantNomenclature": "2.16.840.1.113883.5.4",
        "libelle": "1ère série vaccinante",
    },
    "status": "completed",
    "dateTimeAdministration": "2022-11-10T12:18:44.982Z",
    "doseAdministree": {
    "value": "1"
    },
    "voieAdministration": {
        "valeur": "IM",
        "identifiantNomenclature": "2.16.840.1.113883.5.112",
        "libelle": "intra musculaire",
    },
    "regionAdministration": {
        "valeur": "LD",
        "identifiantNomenclature": "2.16.840.1.113883.5.1052",
        "libelle": "Deltoïde gauche",
    },
    "consommable": {
        "nom": "vaccin tetanique pasteur",
        "code": {
            "valeur": "67718545",
            "identifiantNomenclature": "1.2.250.1.213.2.3.1",
            "libelle": "VACCIN TETANIQUE PASTEUR, suspension injectable en seringue préremplie vaccin tétanique adsorbé",
        },
        "traductions": [
            {
                "valeur": "J07CA06",
                "identifiantNomenclature": "2.16.840.1.113883.6.73",
                "libelle": "Diphtérie - Haemophilus influenzae B - coqueluche - poliomyélite - tétanos",
            },
            {
                "valeur": "3400932857241",
                "identifiantNomenclature": "1.2.250.1.213.2.3.2",
                "libelle": "1 seringue(s) préremplie(s) en verre de 0,5 ml",
            }
        ],
        "numeroLot": "926018"
    }
}

En Java

Pour génerer un CDA note de vaccination et le soumettre dans le DMP avec l’API Java, il faut initialiser une DMPCNoteVaccination à l’aide de son builder puis l’associer comme tout autre document à une requête de soumission :

    ZonedDateTime now = clock.getUtc();
    var noteVaccination = DMPCNoteVaccination.builder()
            .legalAuthenticator(auteur)
            .patient(patient)
            .confidentialities(List.of("N"))
            .practiceSetting("AMBULATOIRE")
            .creationDateTime(now)
            .serviceStartDateTime(now.minusHours(3))
            .serviceStopDateTime(now.minusHours(2))
            .vaccination(DMPCNoteVaccination.Vaccination.builder()
                .id(UUID.randomUUID().toString())
                .code(DMPCCode.builder().valeur("INITIMMUNIZ").identifiantNomenclature(Oids.HL7_2_16_840_1_113883._5_4_ACT_CODE.val()).libelle("1ère série vaccinante").build())
                .status("completed")
                .dateTimeAdministration(document.getCreationDateTime().minusHours(2))
                .voieAdministration(DMPCCode.builder().valeur("IM").identifiantNomenclature(Oids.HL7_2_16_840_1_113883._5_112_ROUTE_OF_ADMINISTRATION.val()).libelle("intra musculaire").build())
                .regionAdministration(DMPCCode.builder().valeur("LD").identifiantNomenclature(Oids.HL7_2_16_840_1_113883._5_1052_HUMAN_SUBSTANCE_ADMINISTRATION_SITE.val()).libelle("Deltoïde gauche").build())
                .doseAdministree(DMPCCorpsStructure.Mesure.builder().valeur("1").build())
                .consommable(DMPCCorpsStructure.Consommable.builder()
                        .code(DMPCCode.builder().valeur("67718545").identifiantNomenclature(Oids.ANS_1_2_250_1_213._2_3_1_CIS.val()).libelle("VACCIN TETANIQUE PASTEUR, suspension injectable en seringue préremplie vaccin tétanique adsorbé").build())
                        .traduction(DMPCCode.builder().valeur("J07CA06").identifiantNomenclature(Oids.HL7_2_16_840_1_113883._6_73_ATC.val()).libelle("Diphtérie - Haemophilus influenzae B - coqueluche - poliomyélite - tétanos").build())
                        .traduction(DMPCCode.builder().valeur("3400932857241").identifiantNomenclature(Oids.ANS_1_2_250_1_213._2_3_2_CIP.val()).libelle("1 seringue(s) préremplie(s) en verre de 0,5 ml").build())
                        .nom("vaccin tetanique pasteur")
                        .numeroLot("123456")
                        .build()
                )
                .auteur(DMPCParticipation.builder().personnelSante(auteur).build())
                .executant(DMPCParticipation.builder().personnelSante(executant).build())
                .rangVaccination(DMPCCorpsStructure.Mesure.builder().valeur("1").build())
                .commentaire("Commentaire de la vaccination")
                .build()
            ).build();


    client.td21SubmitDocuments(context, new TD21Request(DMPCSoumission.builder()
            .document(noteVaccination)
            .title("Exemple de soumission wrapped")
            .contentType("04")
            .patient(patient).build()));

Via l’API REST

En Rest, il faut préciser le type de document DMP soumis via dmpcType: "NOTE_VAC" et fournir les informations json

curl --location --request POST 'http://127.0.0.1:8080/dmp/td21SubmitDocuments' \
--header 'Content-Type: application/json' \
--data-raw '{
    "context": {
        ...
    },
    "request": {
        "submission": {
            "title": "soumission d'un document wrapped",
            "contentType": "04",
            "patient": {
                "matriculeINS": {
                    "valeur": "279035121518989",
                    "identifiantSysteme": "1.2.250.1.213.1.4.10"
                }
            },
            "documents": [
                {
                    "dmpcType": "NOTE_VAC",
                    "patient": {
                        "matriculeINS": {
                            "valeur": "279035121518989",
                            "identifiantSysteme": "1.2.250.1.213.1.4.10"
                        }
                    },
                    "classCode": "52",
                    "confidentialities": [
                        "N"
                    ],
                    "creationDateTime": "2022-11-10T14:18:44.982Z",
                    "format": "urn:asip:ci-sis:vac-note:2021",
                    "practiceSetting": "AMBULATOIRE",
                    "serviceStartDateTime": "2022-11-10T11:18:44.982Z",
                    "serviceStopDateTime": "2022-11-10T12:18:44.982Z",
                    "type": "87273-9",
                    "versionNumber": 1,
                    "vaccination": {
                        "id": "be9fdb2a-af27-47e0-92da-a00628f640e0",
                        "code": {
                            "valeur": "INITIMMUNIZ",
                            "identifiantNomenclature": "2.16.840.1.113883.5.4",
                            "libelle": "1ère série vaccinante",
                        },
                        "status": "completed",
                        "dateTimeAdministration": "2022-11-10T12:18:44.982Z",
                        "doseAdministree": {
                        "value": "1"
                        },
                        "voieAdministration": {
                            "valeur": "IM",
                            "identifiantNomenclature": "2.16.840.1.113883.5.112",
                            "libelle": "intra musculaire",
                        },
                        "regionAdministration": {
                            "valeur": "LD",
                            "identifiantNomenclature": "2.16.840.1.113883.5.1052",
                            "libelle": "Deltoïde gauche",
                        },
                        "consommable": {
                        "nom": "vaccin tetanique pasteur",
                        "code": {
                            "valeur": "67718545",
                            "identifiantNomenclature": "1.2.250.1.213.2.3.1",
                            "libelle": "VACCIN TETANIQUE PASTEUR, suspension injectable en seringue préremplie vaccin tétanique adsorbé",
                        },
                        "traductions": [
                            {
                                "valeur": "J07CA06",
                                "identifiantNomenclature": "2.16.840.1.113883.6.73",
                                "libelle": "Diphtérie - Haemophilus influenzae B - coqueluche - poliomyélite - tétanos",
                            },
                            {
                                "valeur": "3400932857241",
                                "identifiantNomenclature": "1.2.250.1.213.2.3.2",
                                "libelle": "1 seringue(s) préremplie(s) en verre de 0,5 ml",
                            }
                        ],
                        "numeroLot": "926018"
                        },
                        "executant": {
                        "personnelSante": {
                            ...
                        }
                        },
                        "auteur": {
                        "personnelSante": {
                            ...
                        }
                        },
                        "rangVaccination": {
                        "value": "2"
                        },
                        "commentaire": "Commentaire de la vaccination"
                    }
                }
            ]
        }
    }
}
Remplacement d’une note de vaccination

Le remplacement d’une note de vaccination est identique au remplacement d’un document à l’exception près qu’il faut préciser la même idVaccination dans la vaccination. remplaçante.

EX_2.1-2030 : Les identifiants des vaccinations (i.e. identifiant des entry/substanceAdministration) dans les notes de vaccination doivent être générés de manière « mondialement unique », via un UUID (voir https://fr.wikipedia.org/wiki/Universally_unique_identifier) dans l’attribut id/@root seulement. Cet identifiant sert ensuite à retrouver la vaccination dans l’historique de vaccinations lors de sa mise à jour par le SI DMP. Il ne doit donc jamais rentrer en conflit avec l’identifiant d’une autre vaccination.

L’identifiant de vaccination est donc utile au DMP pour la bonne génération de l’historique de vaccinations.

Nomenclatures utilisées

Consommable

Les consommables décrivant le vaccin doivent utiliser des nomenclatures spécifiques telle que la CIS, la CIP et l’ATC dans les conditions définies par le guide d’intégration. Elles sont liées aux bases de données scientifiques et nomenclatures standards. Pour plus de renseignements, allez vers https://base-donnees-publique.medicaments.gouv.fr/ ou encore https://smt.esante.gouv.fr/ . Pour information, dans l’annuaire DevBox-Santé, nous proposons un moteur de recherche dans ces nomenclatures accessibles par API.

Type de vaccination, région et voie d’administration

Ces jeux de valeurs sont directement accessibles depuis les APIs de la DevBox-Santé DMP :

note vaccination JDV

Historique de Vaccinations

L’historique de vaccinations peut être récupéré un un seul aller retour grâce à un nouveau point d’entrée dans l’API :

  • En Java :
public interface DMPCClient {
    //...
    TD32Response td31_32findAndRetrieve(DMPCContext context, TD31Request.FindHistoriqueVaccinations request)
}
  • En REST
curl -X POST "http://localhost:8080/dmp/td31_32FindAndRetrieveContent" -H "accept: */*" -H "Content-Type: application/json" -d "{ \"context\": { \"author\": { }, \"modeAcces\": { \"acces\": \"NORMAL\" } }, \"request\": { \"matriculeINS\": { \"identifiantSysteme\": \"string\", \"valeur\": \"string\" }, \"query\": \"FindDocuments\" }}"

La réponse retourné contiendra le document CDA généré par le serveur DMP, le rendu HTML mais aussi et surtout un DMPCHistoriqueVaccinations retournant une liste de vaccination dans le même format que la vaccination envoyé dans une DMPCNoteVaccination.

public class DMPCHistoriqueVaccinations extends DMPCDocument {
    //...
    List<DMPCNoteVaccination.Vaccination> vaccinations; 
}

Voici un exemple d’historique de vaccinations retourné : historique_vaccinations.json