TD3.1 (depuis version 3.2)
Il est possible de faire des recherches de document ainsi que des recherches des documentation
GetDocuments
Permet la recherche par identifiant :
Exemple de Requête en Java :
TD31Response td31Response = client.td31Find(context, TD31Request.GetDocuments.builder()
.matriculeINS(patient.getMatriculeINS())
.documentEntryUniqueId(uniqueId)
.build());
En Rest
curl --location 'http://localhost:9999/dmp/td31Find' \
--header 'Content-Type: application/json' \
--data '{
"context": {
},
"request": {
"query": "GetDocuments",
"matriculeINS": {
"valeur": "279035121518989",
"identifiantSysteme": "1.2.250.1.213.1.4.10"
},
"statuses": [
"APPROVED"
],
"documentEntryUniqueId": "2.25.120152820330539744963703480707082727589.2401081046.1.1.1"
}
}'
FindDocuments
Permet la recherce de documents sur l’ensemble des critères possibles en XDS, et ceux demandés par les différents test CNDA
Exemple de Requête en Java :
final TD31Request.FindDocuments request = new TD31Request.FindDocuments();
request.setMatriculeINS(patient.getMatriculeINS());
request.setConfidentialityCode(Arrays.asList("N"));
request.setTypeCode(List.of("11488-4", "15507-7"));
request.setStatuses(Collections.singletonList(AvailabilityStatus.APPROVED));
final TD31Response response = client.td31Find(context, request);
En Rest
curl --location 'http://localhost:9999/dmp/td31Find' \
--header 'Content-Type: application/json' \
--data '{
"context": {
},
"request": {
"query": "FindDocuments",
"matriculeINS": {
"valeur": "279035121518989",
"identifiantSysteme": "1.2.250.1.213.1.4.10"
},
"statuses": [
"APPROVED"
],
"typeCode": ["11488-4", "15507-7"]
}
}'
FindSubmissionSetsAndGetContents
Cette transaction permet de faire la recherche par date de soumission demandé dans le guide d’intégration du DMP :
Recherche de document soumis dans un intervalle temporel par rapport à une date de soumission Dans XDS, il n’existe pas de requête « Stored Query » pour rechercher les documents soumis au Repository du système DMP dans un intervalle temporel donné. Plusieurs approches permettent néanmoins de le faire, en combinant plusieurs requêtes.
Combinaison de
FindSubmissionSetet deGetSubmissionSetAndContents(soit N+1 appels de fonctions, en fonction du nombre N de lots retournés).a. Utilisation de la requête
FindSubmissionSetspour rechercher les lots de soumission en spécifiant un intervalle temporel de soumission (date de soumission dans le DMP, critères$XDSSubmissionSetSubmissionTimeFromet$XDSSubmissionSetSubmissionTimeTo) : retourne les lots de soumission.b. Pour chaque lot retourné, faire un
GetSubmissionSetAndContentsqui retourne le lot et ses documents.Combinaison de
FindSubmissionSet, deGetAssociationset deGetDocuments(soit 3 appels de fonctions).a. Utilisation de la requête
FindSubmissionSetspour rechercher les lots de soumission en spécifiant un intervalle temporel de soumission (date de soumission dans le DMP, critère°$XDSSubmissionSetSubmissionTimeFromet$XDSSubmissionSetSubmissionTimeTo`) : retourne les lots de soumission.b. Récupérer l’ensemble des entryUUID des lots retournés.
c. Passer cette liste d’entryUUID à la fonction
GetAssociations.d. Filtrer les retours sur les Associations de type
HasMember, et récupérer la liste destargetObject(documents du lot).e. Appel de
GetDocumentsavec la liste des entryUUID des documents.
Rem : les deux implémentations ont été réalisées dans la DevBox-Santé. La deuxième est positionnée par défaut pour des raisons de performances.
Exemple en Java :
TD31Request.FindSubmissionSetsAndGetContents request = new TD31Request.FindSubmissionSetsAndGetContents();
request.setMatriculeINS(patient.getMatriculeINS());
request.setSubmissionTimeFrom("20200925033000");
request.setStatuses(List.of(AvailabilityStatus.APPROVED));
client.td31Find(context, request);
Exemple en REST
curl --location 'http://localhost:9999/dmp/td31Find' \
--header 'Content-Type: application/json' \
--data '{
"context": {
},
"request": {
"query": "FindSubmissionSetsAndGetContents",
"matriculeINS": {
"valeur": "279035121518989",
"identifiantSysteme": "1.2.250.1.213.1.4.10"
},
"statuses": [
"APPROVED"
],
"submissionTimeFrom": "20200925033000"
}
}'
FindAndRetrieveContent (depuis version 5.1)
Cette recherche pour des documents spécifiques comme l’Historique de remboursement et l’historique de vaccinations permet de récupérer directement le contenu du document.
Exemple en Java :
var request = TD31Request.FindHistoriqueVaccinations.builder().matriculeINS(patient.getMatriculeINS()).build();
var historiqueVaccinations = (DMPCHistoriqueVaccinations) client.td31_32findAndRetrieve(context, request).getDocument();
var request = TD31Request.FindHistoriqueRemboursements
.builder().matriculeINS(patient.getMatriculeINS())
.serviceStartTimeFrom("20200801")
.serviceStopTimeTo("20210731")
.build();
var historiqueRemboursements = client.td31_32findAndRetrieve(context, request).getDocument();
en Rest :
curl --location 'http://localhost:9999/dmp/td31_32FindAndRetrieveContent' \
--header 'Content-Type: application/json' \
--data '{
"context": {
"modeAcces": {
"acces": "NORMAL"
}
},
"request": {
"query": "FindHistoriqueVaccinations",
"matriculeINS": {
"valeur": "279035121518989",
"identifiantSysteme": "1.2.250.1.213.1.4.10"
}
}
}'
td31DocumentsRefresh (depuis version 6.1, experimental version 6.0.15)
Requête spécifique SÉGUR (exigence CDA/DD15.02) permettant de récupérer les statuts supprimés ou remplacés d’une liste de documents Son implémentation s’appuie sur la recherche d’associations sur les documents.
Exemple en REST sur 3 documents :
curl --request POST \
--url http://localhost:8080/dmp/td31DocumentsRefresh \
--header 'content-type: application/json' \
--data '{
"context": {},
"request": {
"query": "GetDocumentsRefreshRequest",
"matriculeINS": {
"valeur": "133061764035249",
"identifiantSysteme": "1.2.250.1.213.1.4.10"
},
"documentEntryUuids": [
"098875e-f7cd-4bfb-96be-a08651ddeb0e",
"5098875e-f7cd-4bfb-96be-a08651ddeb0e",
"7639e053-c219-4c08-993e-f48eca94b4c4"
]
}
}'
Retourne 1 indisponible dans le DMP pour le professionnel (supprimé, masqué au PS, …) , 1 remplacé par. Le troisième est toujours disponible sur cette version :
{
"indisponibles": [
"0098875e-f7cd-4bfb-96be-a08651ddeb0e"
],
"remplacesPar": {
"5098875e-f7cd-4bfb-96be-a08651ddeb0e": "a5218e7d-3936-4036-b9c7-93b4b446cd6a"
}
"documents": [{
...
}]
}
GetSubmissionSets et GetSubmissionSetAndContent (depuis version 6.1)
Ces deux recherches peuvent permettre de récupérer l’ensemble des documents soumis en même temns qu’un document.
Par exemple, le code java suivant met en œuvre ces deux recherches afin de retrouver ces documents :
var documentUuid = "10cfb08b-5bfc-4347-a50a-0f462a5766bd";
log.debug("recherche de la soumission correspondant au document");
var response = client.td31Find(context, TD31Request.GetSubmissionSets.builder()
.matriculeINS(patient.getMatriculeINS())
.documentEntryUuid(documentUuid)
.build()
);
var soumissionUuid = response.getSoumissions().getFirst().getUuid();
log.debug("récupération de la soumission et de son contenu");
response = client.td31Find(context, TD31Request.GetSubmissionSetAndContents.builder()
.matriculeINS(patient.getMatriculeINS())
.submissionSetUuid(soumissionUuid)
.build()
);
assertThat(response.getSoumissions().getFirst().getDocuments().getFirst().getEntryUuid()).isEqualTo(documentUuid);
en REST : deux appels successifs sur la route /dmp/td31Find
Recherche de la soumission par documentEntryUuid
{
"context": {},
"request": {
"query": "GetSubmissionSets",
"matriculeINS": {
"valeur": "133061764035249",
"identifiantSysteme": "1.2.250.1.213.1.4.10"
},
"documentEntryUuids": [
"10cfb08b-5bfc-4347-a50a-0f462a5766bd"
]
}
}
puis récupération du contenu de la soumission :
{
"context": {},
"request": {
"query": "GetSubmissionSetAndContents",
"matriculeINS": {
"valeur": "133061764035249",
"identifiantSysteme": "1.2.250.1.213.1.4.10"
},
"submissionSetUuid": "efa23d24-9557-45cc-ac95-5442d95f8f42"
}
}