Embedded : Premier Pas

Intégrer directement dans votre application spring-boot

Un projet de démonstration d’utilisation de la DevBox-santé DMP en mode embedded se trouve : https://bitbucket.org/devbox-sante/dmpc-demo

Installer

l’utilisation de cette API ne nécessite pas d’installation. Il suffit d’ajouter les dépendances adequates dans votre projet Maven / Gradle.

<dependencies>
  <dependency>
      <groupId>fr.devboxsante.dmp</groupId>
      <artifactId>dmp-api</artifactId>
      <version>${dmp-api.version}</version>
  </dependency>
  <dependency>
      <groupId>fr.devboxsante.dmp</groupId>
      <artifactId>dmp-client-impl</artifactId>
      <version>${dmp.version}</version>
  </dependency>

Écrire votre première intégration

Initialisation du client

La DevBox-Santé DMP est une application spring, pour obtenir un client DMP, il faut injecter dans l’application la classe implémentant l’interface DMPCClient par les mécanismes CDI de spring.

@Component
public class MonComposantDMP {

  @Autowired
  private DMPCClient client;

}

Une méthode dans le composant


// Initialisation d'un PS auteur des différentes transactions
DMPCAuthor ps1 = new DMPCAuthor("1234", "Dupont", "Pierre");
ps1.setRole("Médecin");
ps1.setStructureNom("Clinique du beau Soleil");

// Test d'existence (recherche) d'un patient
DMPCPatient patient = client.td02Exist(new TD02Request("0404312364978044945679")).getPatient();

// Initialisation d'un document à soumettre au DMP
DMPCDocument document =  new DMPCDocument();
document.setTitle("Titre du document concernant l'hépatite virale");
document.setContent("Contenu textuel");
document.addEvent(new DMPCCode("B18", "2.16.840.1.113883.6.3", "Hépatite virale chronique"));
document.setFormat(client.getCodesFor(DMPCCode.ANSJeuxValeurs.FORMAT_CODE).get(1).getCode());
// …

// Création de l'enveloppe de soumission
DMPCSubmission submission = new DMPCSubmission();
submission.addDocument(document);
submission.setPatient(patient);
// Envoi vers le DMP de la soumission.
TD21Response td21Response = client.td21SubmitDocuments(context, new TD21Request(submission));
System.out.println("Soumission enregistré avec l'uuid :" + td21Response.getSubmission().getUuid());

Diagrammme de séquences correspondant

!theme aws-orange
!define DEVBOX_COLOR #278ef5
!define DMP_COLOR #35D9C0
!define MSS_COLOR #DE5D80
!define INS_COLOR #07A2CF
!define CPS_COLOR #D34A3C
!define VITALE_COLOR #5FD67A
!define PSC_COLOR #ff7765
!define APCV_COLOR #c6e66d
!define ANNUAIRE_COLOR #7613e0
!define DATA_COLOR #ffa800

== Initialisation ==
DMPCClient -> DMPCClient : readCertificates
DMPCClient -> DMPCClient : generate VIHF
DMPCClient -> DMP: init TLS connexion(securise)

== Test d'existence ==
DMPCClient -> DMP : td02Exist("279035121518989")
DMP --> DMPCClient : retourne un patient
== Soumission ==
DMPCClient -> DMP : td21SubmitDocuments(new Document("hepatite virale")
DMP --> DMPCClient : acknowledge

Les différents objets du modèle

Afin de transmettre les métadonnées nécessaires aux DMP pendant les différentes transactions, la DevBox-Santé DMP contient un modèle métier dont les classes principales suivantes :

  • DMPCCode
  • DMPCPersonnelSante
  • DMPCPatient
  • DMPCDocument
  • DMPCSubmission
DMPCCode

Un DMPCCode est la structure de base pour toute codification. Une fois un DMPCClient initialisé, il est possible d’obtenir toutes les nomenclatures standard depuis l’enum DMPCCode.ANSJeuxValeurs.

Exemple de récupération d’un DMPCCode :

// Je m'intéresse à la nomenclature SubjectRole

List<DMPCCode> roles = client.getCodesFor(DMPCCode.ANSJeuxValeurs.SUBJECT_ROLE);
// liste de tous les codes SubjetRole
for (DMPCCode role : roles) {
    System.out.println("role :" + role);
}

Initialisation du contexte

L’API étant stateless un contexte doit être rappelé pour chaque transaction vers le DMP. Un contexte peut être définit de la manière suivante :

DMPCContext context = new DMPCContext();
DMPCPersonnelSante ps1 = // initialisation d'un personnel de santé responsable de la transaction vers le DMP
context.setAuthor(ps1);

Exemple d’utilisation du contexte dans le cadre d’un test d’existence

client.td02Exist(context, new TD02Request(patient));
Transactions

L’ensemble des transactions sont décrites dans le document transactions