Volet Compte rendu d'examens de biologie

@Since DMP-3.0

La DevBox-Santé DMP prend également en charge la soumission de document structure comme le CR d’examens biologie.

Ce format de document est spécifié par l’ANS : https://esante.gouv.fr/volet-cr-bio-compte-rendu-dexamens-de-biologie-medicale

Un exemple de création de document conforme à la spécification est :

private void createCRBiologie(DMPCStructureSante structureSante) {
    final String creationTime = "20111020194600";
    final String startTime = "20140520174600";
    final String stopTime = "20140520184600";

    DMPCDocumentCRBiologie template = new DMPCDocumentCRBiologie();
    template.setClassCode("10");
    template.addConfidentiality("N");
    template.setComments("Commentaire du document");
    template.setFormat("urn:ihe:lab:xd-lab:2008");  // format obligatoire
    template.setPracticeSetting("AMBULATOIRE");
    template.setServiceStartTime(startTime);
    template.setServiceStopTime(stopTime);
    template.setTitle("Titre CRBiologie");
    template.setType("11502-2");
    template.setCreationTime(creationTime);

    template.addEvent(new DMPCCode("16915-1", OIDs.LOINC.getRepresentation(), "Glucose post prandial [Masse/Volume] Sérum/Plasma ; Numérique"));

    final Participation prescription = new Participation();
    final DMPCPersonnelSante prescripteur = new DMPCPersonnelSante();
    prescripteur.setAdeli("801234567897");
    prescripteur.setNom("Gynecon");
    prescripteur.setPrenom("Eve");
    prescripteur.setStructureSante(structureSante);
    prescripteur.setTelephone("0147150000");

    prescription.setPersonnelSante(prescripteur);
    prescription.setStopTime(startTime);
    template.setPrescription(prescription);

    final Participation prelevement = new Participation();
    final DMPCPersonnelSante preleveur = new DMPCPersonnelSante();
    preleveur.setAdeli("801234567897");
    preleveur.setNom("Bleeder");
    preleveur.setPrenom("Roberta");
    preleveur.setStructureSante(structureSante);
    prelevement.setPersonnelSante(preleveur);
    prelevement.setStopTime(stopTime);
    template.setPrelevement(prelevement);

    template.setId("1234");
    template.setVersionNumber(0);

    final StructuredBody.ChapterSection chapterSection = new StructuredBody.ChapterSection();
    chapterSection.setLoincCode(ChapterSectionLoincCode.BIOLOGIE.getCode());
    template.getBody().getChapterSections().add(chapterSection);

    final StructuredBody.Section section = new StructuredBody.Section();
    chapterSection.getSections().add(section);
    section.setAuthenticator(prescripteur);
    section.setAuthenticatorInterpretation("Commentaire habituel");
    final StructuredBody.Observation observation = new StructuredBody.Observation();
    observation.setCode(new DMPCCode("16915-1", OIDs.LOINC.getRepresentation(), "Glucose post prandial [Masse/Volume] Sérum/Plasma ; Numérique"));
    observation.setStatus("completed");
    observation.setTime(stopTime);
    final StructuredBody.Value value = new StructuredBody.Value();
    value.setValue("1.5");
    value.setUnit("g/L");
    observation.setValue(value);
    observation.setInterpretation(new DMPCCode("H", Hl7OIDs.OBSERVATION_INTERPRETATION.getRepresentation(), "Anormalement haut"));
    final StructuredBody.RangeValue rangeValue = new StructuredBody.RangeValue();
    rangeValue.setLow("0.8");
    rangeValue.setHigh("1.26");
    rangeValue.setUnit("g/L");
    observation.setReferenceRange(rangeValue);
    section.getObservations().add(observation);
}

La génération un peu longue certe permet de rajouter les sections et observations nécessaires pour générer le document CDA suivant :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">
    <realmCode code="FR"/>
    <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/>
    <templateId root="2.16.840.1.113883.2.8.2.1" assigningAuthorityName="HL7 France"/>
    <templateId root="1.2.250.1.213.1.1.1.1" assigningAuthorityName="Cadre InteropASIP"/>
    <templateId root="1.3.6.1.4.1.19376.1.2.20" assigningAuthorityName="Template identifier for an XDS-SD document"/>
    <templateId root="1.3.6.1.4.1.19376.1.3.3" assigningAuthorityName="Laboratory Report Summary Specification"/>
    <id root="1.2.250.1.287.1.123456.1400919121980.0"/>
    <code code="11502-2" codeSystem="2.16.840.1.113883.6.1" displayName="CR d'examens biologiques"/>
    <title>document titre</title>
    <effectiveTime value="20140524101200+0200"/>
    <confidentialityCode code="N" codeSystem="2.16.840.1.113883.5.25" displayName="Normal"/>
    <languageCode code="fr-FR"/>
    <versionNumber value="0"/>
    <recordTarget>
        <patientRole>
            <id root="1.2.250.1.213.1.4.2" extension="1164485058822081751070"/>
            <id root="1.2.250.1.287.1.123456" extension="1234"/>
            <addr nullFlavor="NASK"/>
            <telecom nullFlavor="NASK"/>
            <patient>
                <name>
                    <given>prenom</given>
                    <family qualifier="BR">nom</family>
                    <family qualifier="SP">nomEpouse</family>
                </name>
                <administrativeGenderCode code="M" codeSystem="2.16.840.1.113883.5.1"/>
                <birthTime value="19730513"/>
            </patient>
        </patientRole>
    </recordTarget>
    <author>
        <functionCode code="10" codeSystem="1.2.250.1.71.1.2.7" displayName="Médecin"/>
        <time value="20140524101200+0200"/>
        <assignedAuthor>
            <id root="1.2.250.1.71.4.2.1" extension="500000000015644/123"/>
            <code code="G15_10/SM30" codeSystem="1.2.250.1.213.1.1.4.5" displayName="Médecin - Néphrologie (SM)"/>
            <addr nullFlavor="NASK"/>
            <assignedPerson>
                <name>
                    <given>auteurPrenom</given>
                    <family qualifier="BR">auteurNom</family>
                </name>
            </assignedPerson>
            <representedOrganization>
                <id root="1.2.250.1.71.4.2.2" extension="300000000015644"/>
                <name>structureNom</name>
            </representedOrganization>
        </assignedAuthor>
    </author>
    <custodian>
        <assignedCustodian>
            <representedCustodianOrganization>
                <id root="1.2.250.1.71.4.2.2" extension="300000000015644"/>
                <name>structureNom</name>
                <telecom nullFlavor="NASK"/>
                <addr nullFlavor="NASK"/>
            </representedCustodianOrganization>
        </assignedCustodian>
    </custodian>
    <legalAuthenticator>
        <time value="20140524101200+0200"/>
        <signatureCode code="S"/>
        <assignedEntity>
            <id root="1.2.250.1.71.4.2.1" extension="500000000015644/123"/>
            <addr nullFlavor="NASK"/>
            <telecom nullFlavor="NASK"/>
            <assignedPerson>
                <name>
                    <given>auteurPrenom</given>
                    <family qualifier="BR">auteurNom</family>
                </name>
            </assignedPerson>
        </assignedEntity>
    </legalAuthenticator>
    <participant typeCode="REF">
        <functionCode code="TODO"/>
        <time>
            <high value="20091113"/>
        </time>
        <associatedEntity classCode="PROV">
            <id root="1.2.250.1.71.4.2.1" extension="801234567897"/>
            <code nullFlavor="NASK"/>
            <addr nullFlavor="NASK"/>
            <telecom use="EC" value="tel:0147150000"/>
            <associatedPerson>
                <name>
                    <given>Eve</given>
                    <family qualifier="BR">Gynecon</family>
                </name>
            </associatedPerson>
        </associatedEntity>
    </participant>
    <participant typeCode="DIST">
        <functionCode code="PRELV"/>
        <time/>
        <associatedEntity classCode="CAREGIVER">
            <id root="1.2.250.1.71.4.2.1" extension="801234567897"/>
            <code nullFlavor="NASK"/>
            <addr nullFlavor="NASK"/>
            <telecom nullFlavor="NASK"/>
            <associatedPerson>
                <name>
                    <given>Roberta</given>
                    <family qualifier="BR">Bleeder</family>
                </name>
            </associatedPerson>
        </associatedEntity>
    </participant>
    <documentationOf>
        <serviceEvent>
            <code code="H33" codeSystem="2.16.840.1.113883.6.3" displayName="Décollement et déchirement de la rétine"/>
            <effectiveTime>
                <low value="20111025"/>
                <high value="20111125"/>
            </effectiveTime>
            <performer typeCode="PRF">
                <functionCode nullFlavor="UNK"/>
                <assignedEntity>
                    <id root="1.2.250.1.71.4.2.1" extension="500000000015644/123"/>
                    <addr nullFlavor="NASK"/>
                    <telecom nullFlavor="NASK"/>
                    <assignedPerson>
                        <name>
                            <given>auteurPrenom</given>
                            <family qualifier="BR">auteurNom</family>
                        </name>
                    </assignedPerson>
                    <representedOrganization>
                        <id root="1.2.250.1.71.4.2.2" extension="300000000015644"/>
                        <name>structureNom</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>
        </serviceEvent>
    </documentationOf>
    <componentOf>
        <encompassingEncounter>
            <effectiveTime nullFlavor="UNK"/>
            <location>
                <healthCareFacility>
                    <code code="SA41" codeSystem="1.2.250.1.71.4.2.4" displayName="Autre établissement du domaine social "/>
                </healthCareFacility>
            </location>
        </encompassingEncounter>
    </componentOf>
    <component>
        <structuredBody>
            <component>
                <section>
                    <templateId root="1.3.6.1.4.1.19376.1.3.3.2.1"/>
                    <code code="18719-5" codeSystem="2.16.840.1.113883.6.1" displayName="Biochimie"/>
                    <title>Biochimie</title>
                    <component>
                        <section>
                            <templateId root="1.3.6.1.4.1.19376.1.3.3.2.2"/>
                            <code nullFlavor="NASK"/>
                            <text>
                                <table>
                                    <thead>
                                        <tr>
                                            <td>Unité</td>
                                            <td>Date</td>
                                            <td>Valeur</td>
                                            <td>Valeur Référence</td>
                                            <td>Interprétation</td>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <tr>
                                            <td>g/L</td>
                                            <td>24/05/2014</td>
                                            <td>1.5</td>
                                            <td>0.8 - 1.26</td>
                                            <td>&gt;</td>
                                        </tr>
                                    </tbody>
                                </table>
                                <paragraph>Interprétation :  Résultats Validés par : auteurNom auteurPrenom - null</paragraph>
                            </text>
                            <entry>
                                <observation classCode="OBS" moodCode="EVN">
                                    <code xsi:type="CE" code="16915-1" codeSystem="2.16.840.1.113883.6.1" displayName="Glucose post prandial [Masse/Volume] Sérum/Plasma ; Numérique"/>
                                    <statusCode code="completed"/>
                                    <effectiveTime value="20140524101202+0200"/>
                                    <value xsi:type="PQ" value="1.5" unit="g/L"/>
                                    <interpretationCode code="&gt;" codeSystem="2.16.840.1.113883.5.83" displayName="Au dessus, hors échelle de l'instrument de mesure"/>
                                    <methodCode nullFlavor="NASK"/>
                                    <referenceRange typeCode="REFV">
                                        <observationRange>
                                            <value xsi:type="IVL_PQ">
                                                <low value="0.8" unit="g/L"/>
                                                <high value="1.26" unit="g/L"/>
                                            </value>
                                        </observationRange>
                                    </referenceRange>
                                </observation>
                            </entry>
                        </section>
                    </component>
                </section>
            </component>
        </structuredBody>
    </component>
</ClinicalDocument>