diff --git a/docs/404.html b/docs/404.html index 086a5c9e..5f813f61 100644 --- a/docs/404.html +++ b/docs/404.html @@ -18,8 +18,9 @@
-

404

+

ERREUR 404

+

Cette page n'existe pas ou n'existe plus +

-

Page not found :(

-

The requested page could not be found.

+

Nous vous prions de nous excuser pour la gêne occasionnée. Pour continuer votre visite, tapez votre requête directement dans le moteur de recherche ou retournez sur la page d'accueil de notre site !

diff --git a/docs/pages/changelog/changelog.md b/docs/pages/changelog/changelog.md index 49d239e4..af4ea702 100644 --- a/docs/pages/changelog/changelog.md +++ b/docs/pages/changelog/changelog.md @@ -3,11 +3,11 @@ layout: default title: Changelog --- -Le changelog documente les modifications associées à une version de l’API FHIR Annuaire Santé. +Le changelog documente les modifications associées à une version de l’API FHIR Annuaire Santé. Chaque version de l'API FHIR est développé en prenant en compte la version du guide d'implémentation. **Versions disponibles de l'API FHIR Annuaire Santé** -| Version | Date de lancement | Disponible jusqu'à | -| --- | --- | --- | -| 0.1 (Beta) | 02 septembre 2022 | TBD | -| 1.0 | TBD | TBD | +| Version API FHIR | Version IG | Date de lancement | Disponible jusqu'à | +| --- | --- | --- | --- | +| 1 (Beta) | 0.1.0 - trial use | 5 septembre 2022 | TBD | +| 2 | 1.0.1 | TBD | TBD | diff --git a/docs/pages/documentation/resources/_source-ref.md b/docs/pages/documentation/resources/_source-ref.md index f31def62..3134df60 100644 --- a/docs/pages/documentation/resources/_source-ref.md +++ b/docs/pages/documentation/resources/_source-ref.md @@ -3,7 +3,7 @@ Vous retrouverez le code source de ces exemples sur notre repository git:
-* [JAVA](https://github.com/ansforge/annuaire-sante-fhir-documentation/tree/feature/documentation-jekyll/samples/asaf-openfhir-java/modules/api-usage-tests/src/test/java/fr/ans/asaf/demo){:target="_blank"} -* [PHP](https://github.com/ansforge/annuaire-sante-fhir-documentation/tree/feature/documentation-jekyll/samples/afas-openfhir-php/samples){:target="_blank"} -* [C#](https://github.com/ansforge/annuaire-sante-fhir-documentation/tree/feature/documentation-jekyll/samples/afas-openfhir-dotnet/){:target="_blank"} +* [JAVA](https://github.com/ansforge/annuaire-sante-fhir-documentation/tree/9cbfea28350878da45a2e01bdc8daf661ecb7202/samples/asaf-openfhir-java){:target="_blank"} +* [PHP](https://github.com/ansforge/annuaire-sante-fhir-documentation/tree/9cbfea28350878da45a2e01bdc8daf661ecb7202/samples/afas-openfhir-php){:target="_blank"} +* [C#](https://github.com/ansforge/annuaire-sante-fhir-documentation/tree/9cbfea28350878da45a2e01bdc8daf661ecb7202/samples/afas-openfhir-dotnet){:target="_blank"}
diff --git a/docs/pages/documentation/starters/postman-starter.md b/docs/pages/documentation/starters/postman-starter.md index 721000bd..05a6a0ac 100644 --- a/docs/pages/documentation/starters/postman-starter.md +++ b/docs/pages/documentation/starters/postman-starter.md @@ -20,5 +20,5 @@ Voici les variables utilisées dans le projet Postman: | Variable | Description | Valeur | |----------|--------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------| -| api_key | Clé d'API (Si vous n'avez pas de clé, veuillez suivre la procédure décrite [ici](/annuaire-sante-fhir-documentation/pages/quick-start/readme)) | Saisissez votre clé | +| api_key | Clé d'API (Si vous n'avez pas de clé, veuillez suivre la procédure décrite [ici](/annuaire-sante-fhir-documentation/pages/quick-start/quick-start.html)) | Saisissez votre clé | | api_url | L'url d'accès à l'API | https://gateway.api.esante.gouv.fr/fhir | diff --git a/docs/pages/use-cases/segur/uc-segur-draft.md b/docs/pages/use-cases/segur/uc-segur-draft.md deleted file mode 100644 index 3526e526..00000000 --- a/docs/pages/use-cases/segur/uc-segur-draft.md +++ /dev/null @@ -1,1017 +0,0 @@ ---- -layout: default -title: "Extraction des acteurs du Ségur du Numérique en Santé" -subTitle: Cas d'utilisation ---- - - #### Dans cette page -
-- [1) LE SEGUR](#se-header) -- [2) LES COULOIRS](#co-header) - - [2.1) Le couloir ESMS](#es-header) - - [2.1.1) Définition](#es-header-1) - - [2.1.2) Requêtes](#es-header-2) - - [2.1.2.1) MS1](#es-header-21) - - [2.1.2.2) MS2](#es-header-22) - - [2.1.2.3) MS3](#es-header-23) - - [2.2) Le couloir Hôpital](#ho-header) - - [2.1.1) Définition](#ho-header-1) - - [2.1.2) Requêtes](#ho-header-2) - - [2.3) Le couloir biologie médicale](#bi-header) - - [2.1.1) Définition](#bi-header-1) - - [2.1.2) Requêtes](#bi-header-2) - - [2.4) Le couloir Radiologie](#ra-header) - - [2.1.1) Définition](#ra-header-1) - - [2.1.2) Requêtes](#ra-header-2) - - [2.4) Le couloir Médecine de Ville](#me-header) - - [2.1.1) Définition](#me-header-1) - - [2.1.2) Requêtes](#me-header-2) - - [2.6) Le couloir Officine](#of-header) - - [2.1.1) Définition](#of-header-1) - - [2.1.2) Requêtes](#of-header-2) -
-
- -## 1) LE SEGUR -Le Ségur du numérique vise à développer le partage des données de santé entre les différents acteurs de la prise en charge et les patients, par le financement d’une mise à jour logicielle prise en charge par l’Etat pour favoriser l’augmentation des usages numériques dans les établissements. - -Les établissements de santé peuvent être accompagnés par les acteurs régionaux (ARS, GRADeS) dans leur déploiement, le pilotage de services socles nationaux et leur mise en conformité réglementaire. - -Le Ségur du Numérique en Santé s’articule autour de 6 types de d'acteurs appelés couloirs. -Nous allons vous détailler ci-dessous comment interroger l'API pour identifier les acteurs présents dans chaque couloir : [segurnumerique.sante-idf.fr](https://segurnumerique.sante-idf.fr/segur-et-services-socles/les-couloirs/). - - -## 2) LES COULOIRS - -### 2.1) Le couloir ESMS - -#### 2.1.1) Définition - -Ce Couloir est défini par des types d’activité regroupés en sous-domaines et est en fonction de catégories d’établissement FINESS [CEF] : -
- * Liste sous-domaines > Types d’activités : - * MS1 > PA / PH / DOM : Personnes Agées / Personnes en situation de Handicap / DOMicile - * MS2 > PDE / PDS : Protection De l'Enfance / Personnes concernées par des Difficultés Spécifiques - * MS3 > AHI : Accueil l’Hébergement et l’Insertion - * Liste sous-domaines > Types d’activité > codes de catégorie d’établissement : - * MS1 : - * PA : 202 ; 207 ; 381 ; 500 ; 501 ; 502 - * PH : 182 ; 183 ; 186 ; 188 ; 189 ; 190 ; 192 ; 194 ; 195 ; 196 ; 198 ; 221 ; 238 ; 246 ; 247 ; 249 ; 252 ; 253 ; 255 ; 370 ; 377 ; 379 ; 382 ; 390 ; 395 ; 396 ; 402 ; 437 ; 445 ; 446 ; 448 ; 449 - * DOM : 209 ; 354 ; 460 ; 462 - * MS2 : - * PDS : 165 ; 178 ; 180 ; 197 ; 213 ; 608 - * PDE : 159 ; 166 ; 172 ; 175 ; 176 ; 177 ; 236 ; 241 ; 286 ; 295 ; 344 ; 378 ; 411 ; 418 ; 427 ; 440 ; 441 ; 453 - * MS3 : - * AHI : 214 ; 216 ; 219 ; 258 ; 259 ; 442 -
-
- -#### 2.1.2) Requêtes : - -Afin de récupérer les ESMS, il faut interroger l'endpoint Organization. - -Nous appliquerons deux filtres aux requêtes afin d'obtenir le résultats attendus : - -
- * la catégorie d'Organization parmi la liste ci-dessous (point 2 sur l'image ci-dessous) - * l'Identifier : [finess.sante.gouv.fr](http://finess.sante.gouv.fr) (point 1 sur l'image ci-dessous) -
-
- -#### 2.1.2.1 ) MS1 - -Liste des codes catégorie MS1 : -* [PA] : 202 ; 207 ; 381 ; 500 ; 501 ; 502 -* [PH] : 182 ; 183 ; 186 ; 188 ; 189 ; 190 ; 192 ; 194 ; 195 ; 196 ; 198 ; 221 ; 238 ; 246 ; 247 ; 249 ; 252 ; 253 ; 255 ; 370 ; 377 ; 379 ; 382 ; 390 ; 395 ; 396 ; 402 ; 437 ; 445 ; 446 ; 448 ; 449 -* [DOM] : 209 ; 354 ; 460 ; 462 - -![Schéma montrant les champs de filtre](img/focus-json-couloir-medi-soc.png){:style="max-width:670px"} - -Pour information, ces codes font partie de la [TRE-R66-CategorieEtablissement](https://mos.esante.gouv.fr/NOS/TRE_R66-CategorieEtablissement/FHIR/TRE-R66-CategorieEtablissement). - - -
-
-{% highlight bash %} -1) Faire un appel sur le endpoint Organization en filtrant sur les Organization qui ont : -- un identifier Finess (identifier=http%3A%2F%2Ffiness.sante.gouv.fr%7C) -- et qui ont un "type" parmi la liste ci-dessus -(&type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C202...) -2) Répeter l'opération sur toutes les pages (1) -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - -X POST "{{site.ans.api_url}}/fhir/Organization/_search?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C202%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C207%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C381%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C463%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C500%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C501%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C502%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C182%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C183%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C186%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C188%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C189%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C190%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C192%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C194%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C195%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C196%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C198%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C221%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C238%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C246%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C247%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C249%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C252%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C253%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C255%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C370%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C377%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C379%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C382%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C390%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C395%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C396%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C402%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C437%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C445%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C446%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C448%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C449%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C209%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C354%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C460%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C462" - -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); - -// construct category search clause -var codes = Arrays.asList("202","207","381","463","500","501","502","182","183","186","188","189","190","192","194","195","196","198","221","238","246","247","249","252","253","255","370","377","379","382","390","395","396","402","437","445","446","448","449","209","354","460","462"); -var activityClause = Organization.TYPE.exactly() - .systemAndValues("https://mos.esante.gouv.fr/NOS/TRE_R66-CategorieEtablissement/FHIR/TRE-R66-CategorieEtablissement", codes); - -// construct identifier search clause -var identifierClause = Organization.IDENTIFIER.hasSystemWithAnyCode("http://finess.sante.gouv.fr"); - -// create and execute request -var bundle = client - .search() - .forResource(Organization.class) - .where(activityClause) - .and(identifierClause) - .returnBundle(Bundle.class) - .execute(); - -var hasNext = true; -var finessOrganizations = new LinkedList<>(); - -// for each page -do { - logger.info("Total result {}", bundle.getTotal()); - - // extract data from bundle - finessOrganizations.add(bundle.getEntry()); - - if (bundle.getLink("next") != null) { - // get the next page - bundle = client - .loadPage() - .byUrl(bundle.getLink("next").getUrl()) - .andReturnBundle(Bundle.class) - .execute(); - } else { - hasNext = false; - } -} while(hasNext); -{% endhighlight %} -
- -
- -Le résultat retourné est un Bundle contenant la première page de résultat. Il contient aussi le nombre total d'éléments retournés par la requête qui peuvent être récupérés sur les pages suivantes. - -#### 2.1.2.2 ) MS2 - -Liste des codes catégorie MS2 : - * [PDS] : 165 ; 178 ; 180 ; 197 ; 213 ; 608 - * [PDE] : 159 ; 166 ; 172 ; 175 ; 176 ; 177 ; 236 ; 241 ; 286 ; 295 ; 344 ; 378 ; 411 ; 418 ; 427 ; 440 ; 441 ; 453 - -
-
-{% highlight bash %} -1) Faire un appel sur le endpoint Organization en filtrant sur les Organization qui ont : -- un identifier Finess (identifier=http%3A%2F%2Ffiness.sante.gouv.fr%7C) -- et qui ont un "type" parmi la liste ci-dessus -(&type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C165...) -2) Répeter l'opération sur toutes les pages (1) -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - -X POST "{{site.ans.api_url}}/fhir/Organization/_search?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C165%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C178%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C180%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C197%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C213%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C159%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C166%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C172%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C175%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C176%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C177%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C236%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C241%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C286%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C295%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C344%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C378%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C411%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C418%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C427%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C440%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C441%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C453%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C608" - -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); - -// construct category search clause -var codes = Arrays.asList("165","178","180","197","213","159","166","172","175","176","177","236","241","286","295","344","378","411", "418","427","440","441","453","608"); -var activityClause = Organization.TYPE.exactly() - .systemAndValues("https://mos.esante.gouv.fr/NOS/TRE_R66-CategorieEtablissement/FHIR/TRE-R66-CategorieEtablissement", codes); - -// construct identifier search clause -var identifierClause = Organization.IDENTIFIER.hasSystemWithAnyCode("http://finess.sante.gouv.fr"); - -// create and execute request -var bundle = client - .search() - .forResource(Organization.class) - .where(activityClause) - .and(identifierClause) - .returnBundle(Bundle.class) - .execute(); - -var hasNext = true; -var finessOrganizations = new LinkedList<>(); - -// for each page -do { - logger.info("Total result {}", bundle.getTotal()); - - // extract data from bundle - finessOrganizations.add(bundle.getEntry()); - - if (bundle.getLink("next") != null) { - // get the next page - bundle = client - .loadPage() - .byUrl(bundle.getLink("next").getUrl()) - .andReturnBundle(Bundle.class) - .execute(); - } else { - hasNext = false; - } -} while(hasNext); -{% endhighlight %} -
- -
- -Le résultat retourné est un Bundle contenant la première page de résultat. Il contient aussi le nombre total d'éléments retournés par la requête qui peuvent être récupérés sur les pages suivantes. - -#### 2.1.2.3 ) MS3 - -Liste des codes catégorie MS3 : - * [AHI] : 214 ; 216 ; 219 ; 258 ; 259 ; 442 - -
-
-{% highlight bash %} -1) Faire un appel sur le endpoint Organization en filtrant sur les Organization qui ont : -- un identifier Finess (identifier=http%3A%2F%2Ffiness.sante.gouv.fr%7C) -- et qui ont un "type" parmi la liste ci-dessus -(&type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C214...) -2) Répeter l'opération sur toutes les pages (1) -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - -X POST "{{site.ans.api_url}}/fhir/Organization/_search?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C214%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C216%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C219%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C258%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C259%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R66-CategorieEtablissement%2FFHIR%2FTRE-R66-CategorieEtablissement%7C442" - -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); - -// construct category search clause -var codes = Arrays.asList("214","216","219","258","259","442"); -var activityClause = Organization.TYPE.exactly() - .systemAndValues("https://mos.esante.gouv.fr/NOS/TRE_R66-CategorieEtablissement/FHIR/TRE-R66-CategorieEtablissement", codes); - -// construct identifier search clause -var identifierClause = Organization.IDENTIFIER.hasSystemWithAnyCode("http://finess.sante.gouv.fr"); - -// create and execute request -var bundle = client - .search() - .forResource(Organization.class) - .where(activityClause) - .and(identifierClause) - .returnBundle(Bundle.class) - .execute(); - -var hasNext = true; -var finessOrganizations = new LinkedList<>(); - -// for each page -do { - logger.info("Total result {}", bundle.getTotal()); - - // extract data from bundle - finessOrganizations.add(bundle.getEntry()); - - if (bundle.getLink("next") != null) { - // get the next page - bundle = client - .loadPage() - .byUrl(bundle.getLink("next").getUrl()) - .andReturnBundle(Bundle.class) - .execute(); - } else { - hasNext = false; - } -} while(hasNext); -{% endhighlight %} -
- -
- -Le résultat retourné est un Bundle contenant la première page de résultat. Il contient aussi le nombre total d'éléments retournés par la requête qui peuvent être récupérés sur les pages suivantes. - - -### 2.2) Le couloir Hôpital - -#### 2.2.1) Définition - -Ce Couloir est défini par les secteurs d’activité suivants : -
- * SA01 ; SA02 ; SA03 ; SA04 ; SA30 ; SA34 ; SA36 - * Dans le cas d’une EG, sont exclues les catégories d’établissements FINESS du secteur médico-social (voir ci-dessus) -
-
- - -#### 2.2.2) Requête - -Afin de récupérer les établissements sanitaires, nous devons interroger l'endpoint de recherche transactionnel en deux étapes : -
- * Récupérer les établissements sanitaires (champs 1 dans l'image ci-dessous) - * Vérifier que le type de l'établissement ne correspond pas à un établissement médico-social (champs 2 dans l'image ci-dessous) -
- -
- - -Liste des secteurs d'activité: SA01;SA02;SA03;SA04;SA30;SA34;SA36 - - -![Schéma montrant les champs de filtre](img/focus-json-couloir-hopitaux.png){:style="max-width:670px"} - - -Note : La liste des codes des établissements sanitaires (ex: SA01, SA02, etc...) se trouve dans le référentiel : [TRE-R02-SecteurActivite](https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite/) - - -
-
-{% highlight bash %} -1) Faire un appel sur le endpoint Organization en filtrant sur les Organization qui ont un secteur d'activité parmi la liste ci-dessus -(&type=https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite/%7CSA01&type=https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite/%7CSA02 ...). -2) Vérifier que pour chaque établissement, son type n'est pas présent dans la liste des catégories "médico-sociaux" -(voir la liste dans le use case précédent). -3) Répeter l'opération sur toutes les pages (1) -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - "{{site.ans.api_url}}/fhir/v1?_getpages=b109ca26-32eb-416f-8c8a-fee6c6597bb9&_pageId=lZg9MO8QrAVQZoT5uxjWir7vNAEr7AGfqD_nysfrz5wl53MhYmudRGTxjJfwUVMYuYOdvQq4OASgzZbCGJjhb7EH19BN-GH2uG5r5q9ZT680D729MuB8AQowHOP0m-nlaq5JQ3eWKdOAc4z6ZlPQSKRIa2LDXto2BFdF4cEs2TVtK1uJsLVSBVq6JJElmJv5vrd0wkQaaf9H5HNBJG_W1g4gIxbflOSdm8MMyIAvA_Jm6tKvrcC9kFA5Rqn0_FawrKQJbmA2hi0ZbTJaZmaNHJSRA05shFi4vQMBSL0jqs1vo3bZCgFquO5qHyghvwrqmanzRhMjWzSGwanYS4jdpuScMd-btLsRIobeF9bNhGS3bcAVcS3a6SuUkya1H-nfd5XP957ZzPFP-hPsjHuSk4oXbbxYirHZFaKHMrdM3dmXbOdHzPsbgxA9-6RhJgwtlXzOuBToLIQ9VPQrL5F1Z0VeDkpHN50pG445m9Y6zL-YmKruLhsEvfnW0f3PgDKnIUZsFQNMmTetD7vRMlfxiPBws5J7d0HJB1WFG-Qk0n6q6hW4PStx9lsvmSS5Ggkg5At7ko005tiVj50SjbvTz9Bgj-4MfVHpmzY5og8avqHwci6Vo4iE57W4QaGuEQFKkFp2aDF6kBpY8SmKAbYGS08NjjiXqHSpsaj0PxGaS5NMX0vf69eQSd1X8HVQtFlbZubcKQs-F3wrZwp4J9a_Tfhd913wZB5wDHA1C226GfnhFQ5jx2BilMUjw-sVDb-_RmWsDYPG&_bundletype=searchset" -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); - -// hospital: -var bHospital = client.search().forResource(Organization.class) - .where(Organization.TYPE.exactly().codes("SA01","SA02","SA03","SA04","SA30","SA34","SA36")) - .returnBundle(Bundle.class).execute(); -var totalHospital = bHospital.getTotal(); -var typesAsStringList = Arrays.asList("159","165","166","172","175","176","177", "178","180","182","183","186","188","189","190","192","194","195","196","197","198","202","207","209","213","221","236","238","241","246","247","249","252","253","255","286","295","344","354","370","377","378","379","381","382","390","395","396","402","411","418","427","437","440","441","445","446","448","449","453","460","462","500","501","502"); -var goodElements = new ArrayList<>(); -var hasNext = true; -var treated = 0; - -logger.info("Total results - {}", bHospital.getTotal()); - -do { - var bundleContent = bHospital.getEntry(); - logger.info("Treat {} entry(ies)", bundleContent.size()); - - for (var e : bundleContent) { - var org = (Organization) e.getResource(); - var isHospital = true; - - // check hospital system & code - for (var type : org.getType()) { - for (var coding : type.getCoding()) { - if ("https://mos.esante.gouv.fr/NOS/TRE_R66-CategorieEtablissement/FHIR/TRE-R66-CategorieEtablissement".equals(coding.getSystem()) && - typesAsStringList.contains(coding.getCode())) { - isHospital = false; - break; - } - } - } - - // filter good elements - if(isHospital) { - goodElements.add(org); - } - } - - // check if result has a next page - if (bHospital.getLink("next")!=null) { - bHospital = client.loadPage().byUrl(bHospital.getLink("next").getUrl()).andReturnBundle(Bundle.class).execute(); - } else { - hasNext = false; - } - - treated += bundleContent.size(); - logger.info("Progress treated - {} / {}", treated, bHospital.getTotal()); -} while (hasNext); - -logger.info("Total global - {}", totalHospital); -logger.info("Total Hospital - {}", goodElements.size()); -{% endhighlight %} -
- -
- -L'exécution de l'exemple de code peut donner un résultat équivalent : - -```bash -Progress treated - 11650 / 11722 -Treat 50 entry(ies) -Progress treated - 11700 / 11722 -Treat 22 entry(ies) -Progress treated - 11722 / 11722 -Total global - 11722 -Total Hospital - 11722 -``` -
- -### 2.3) Le couloir Biologie Médicale - -#### 2.3.1) Définition - -Ce Couloir est défini par les secteurs d’activité suivants : -
- * SA25 ; SA29 -
-
- -**NOS :** -
- * Secteurs d’activité : [TRE-R02-SecteurActivite](https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite/). -
-
- -#### 2.3.2) Requête - -Afin de récupérer les laboratoires de biologie médicale de ville et en établissements de santé, nous devons interroger l'endpoint Organization : -
- * En filtrant sur le type = SA25, SA29 -
- -
- -![Schéma montrant comment relier les Organization et les PractitionerRole](img/focus-json-couloir-bio-med.png){:style="max-width:670px"} - -
-
-{% highlight bash %} -1) Faire un appel sur le endpoint Organization en filtrant sur les Organization qui ont un type SA25 ou SA29 (&type=SA25,SA29). -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - "{{site.ans.api_url}}/fhir/Organization?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R02-SecteurActivite%2FFHIR%2FTRE-R02-SecteurActivite%7CSA25%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R02-SecteurActivite%2FFHIR%2FTRE-R02-SecteurActivite%7CSA29" -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); - -// construct type search clause -var codes = Arrays.asList("SA25","SA29"); -var activityClause = Organization.TYPE.exactly() - .systemAndValues("https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite", codes); - -// construct identifier search clause -var identifierClause = Organization.IDENTIFIER.hasSystemWithAnyCode("http://finess.sante.gouv.fr"); - -// create and execute request -var bundle = client - .search() - .forResource(Organization.class) - .where(activityClause) - .and(identifierClause) - .returnBundle(Bundle.class) - .execute(); - -var hasNext = true; -var finessOrganizations = new LinkedList<>(); - -// for each page -do { - logger.info("Total result {}", bundle.getTotal()); - - // extract data from bundle - finessOrganizations.add(bundle.getEntry()); - - if (bundle.getLink("next") != null) { - // get the next page - bundle = client - .loadPage() - .byUrl(bundle.getLink("next").getUrl()) - .andReturnBundle(Bundle.class) - .execute(); - } else { - hasNext = false; - } -} while(hasNext); -{% endhighlight %} -
- -
- -L'exécution de l'exemple de code peut donner un résultat équivalent : - -```bash -Organization has 14 roles -Organization has 0 roles -Total global - 4312 -Total filtered - 523 -``` -
- - -### 2.4) Le couloir Radiologie - -#### 2.4.1) Définition - -Ce Couloir est défini par les secteurs d’activité suivants : -
- * SA07 ; SA08 ; SA09 - * Avec au moins un PS - * dont le code profession = 10 - * qui possède un savoir-faire parmi : SM28 ; SM44 ; SM45 ; SM55 -
-
- -#### 2.4.2) Requête - -Afin de récupérer les cabinets de médecins radiologues libéraux et les plateaux d’imagerie des établissements de santé., nous devons interroger l'endpoint Organization : -
- * En filtrant sur le paramètre de recherche type = SA07, SA08, SA09 - * En incluant les PractitionerRole liés aux Organizations afin de pouvoir filtrer ensuite sur le paramètre de recherche speciality = SM28,SM44,SM45,SM55 -
- -
- - -Une fois l’ensemble des données récupéré, procédez aux filtres suivant : - -Les PractitionerRoles doivent correspondre à la profession de santé "Médecin" (10) (champs code du PractitionerRole comme le montre le point 3 sur l'image ci-dessous). - -Ensuite les PractitionerRoles souhaités doivent correspondre aux spécialités : SM28, SM44, SM45, SM55 (champs specialty du PractitionerRole comme le montre le point 2 sur l'image ci-dessous). - -Enfin, faut regrouper les PractitionerRoles pour les lier aux bonnes Organizations (champ organization du PractitionerRole comme le montre le point 1 sur l’image ci-dessous) - - -Nous pouvons finalement ne récupérer que les Organizations contenant des PractitionerRoleRoles selon les filtres que nous avons appliqués. - - - -![Schéma montrant comment relier et filter les Organization et les PractitionerRole](img/focus-json-couloir-radio.png){:style="max-width:670px"} - - - -Note: la liste des codes des établissements sanitaires (ex: SA07, etc...) se trouve dans le référentiel : [TRE-R02-SecteurActivite](https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite/). -La liste des profession est disponible dans le référentiel [TRE-G15-ProfessionSante](https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante). -La liste des code spécialités est disponibles dans le référentiel [TRE_R38-SpecialiteOrdinale](https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale) - - -
-
-{% highlight bash %} -1) Faire un appel sur l'endpoint Organization en filtrant sur les Organization ayant un type = SA07, SA08 ou SA09. -Cet appel devra inclure les PractitionerRoles attachés (&_revinclude=PractitionerRole:organization) -2) Pour chacun des PractitionerRole retournés, vérifier qu'il y a au moins 1 Role (champs role) avec pour : -- system = "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante" -- et un code = 10 (médecin) -3) Pour chacun des PractitionerRole filtrés, vérifier qu'il y a au moins 1 Spécialité (champs speciality) avec pour : -- system = "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale" -- et un code = SM28, SM44, SM45 ou SM55 -4) Pour chacun des PractitionerRole trouvés et filtrés, récupérer les Organization qui ont le même id que le champs organization du PractitionerRole -5) Répeter l'opération sur toutes les pages (1) -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - "{{site.ans.api_url}}/fhir/Organization?type=SA07%2CSA08%2CSA09&_revinclude=PractitionerRole%3Aorganization" -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); -var hasNext = true; -Bundle orgBundle = null; -var totalElements = 0; -var goodElements = new ArrayList<>(); -var treated = 0; -var nbRoles = 0; - -// construct radiology facility request -try { -orgBundle = client.search().forResource(Organization.class) -.where(Organization.TYPE.exactly().codes("SA07", "SA08", "SA09")) -.revInclude(PractitionerRole.INCLUDE_ORGANIZATION) -.returnBundle(Bundle.class).execute(); - - totalElements = orgBundle.getTotal(); -} catch (Exception e) { -e.printStackTrace(); -hasNext = false; -} - -logger.info("Total results - {}", orgBundle.getTotal()); - -do { -var bundleContent = orgBundle.getEntry(); -var organizationMap = new LinkedHashMap(); - - for (var e : bundleContent) { - // store the organization inside a map - if(e.getResource() instanceof Organization) { - var org = (Organization) e.getResource(); - organizationMap.put(org.getId(), org); - treated++; - } - - if(e.getResource() instanceof PractitionerRole) { - var role = (PractitionerRole) e.getResource(); - var medic = false; - var radiologist = false; - - nbRoles++; - - // check if the Role contains a medic - for(var code : role.getCode()) { - for(var coding : code.getCoding()) { - if (coding.getSystem().equals("https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante") && - coding.getCode().equals("10")) { - medic = true; - break; - } - } - } - - if(medic) { - var specialtyStringList = Arrays.asList("SM28", "SM44", "SM45", "SM55"); - - // if a medic was found, check its specialties to filter only radiologist - for (var code : role.getSpecialty()) { - for (var coding : code.getCoding()) { - logger.info("Specialty Coding {} - {}", coding.getSystem(), coding.getCode()); - if (coding.getSystem().equals("https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale") && - specialtyStringList.contains(coding.getCode())) { - radiologist = true; - break; - } - } - } - } - - // if the Role is right and still practicing, link it to the right Organization - if(radiologist && !role.getPeriod().hasEnd() && role.getOrganization() != null) { - var org = (Organization) role.getOrganization().getResource(); - - if(organizationMap.containsKey(org.getId())) { - organizationMap.get(org.getId()).addContained(role); - } - } - } - } - - // loop over Organization and keep only those with roles - for(var org : organizationMap.values()) { - if(!org.getContained().isEmpty()) { - goodElements.add(org); - } - } - - // check if result has a next page - if (orgBundle.getLink("next")!=null) { - try { - orgBundle = client.loadPage().byUrl(orgBundle.getLink("next").getUrl()).andReturnBundle(Bundle.class).execute(); - } catch (Exception e) { - logger.error("Error getting next page"); - e.printStackTrace(); - hasNext = false; - } - } else { - hasNext = false; - } - - logger.info("Progress treated - {} / {} / {} role(s)", treated, orgBundle.getTotal(), nbRoles); -} while (hasNext); - -logger.info("Total organization - {}", totalElements); -logger.info("Total radiology - {}", goodElements.size()); -{% endhighlight %} -
- -
- -L'exécution de l'exemple de code peut donner un résultat équivalent : - -```bash -Progress treated 466000 / 466040 / 445524 role(s) -Progress treated 466040 / 466040 / 445562 role(s) -Total global - 466040 -Total filtered - 0 -``` - -
- - -### 2.5) Le couloir Médecine de ville - -#### 2.5.1) Définition - -
-Ce Couloir est défini par les secteurs d’activité suivants : -* SA07 ; SA08 ; SA09 -* Pour SA07 ; SA08 ; SA09 avec au moins un PS - * dont le code profession = 10 - * qui possède un savoir-faire différent de : SM28, SM44, SM45, SM55 - -**NOS :** -* Ensemble des professions : [JDV_J106-EnsembleProfession-RASS](https://mos.esante.gouv.fr/NOS/JDV_J106-EnsembleProfession-RASS) -* Ensemble des savoir-faires : [JDV_J107-EnsembleSavoirFaire-RASS](https://mos.esante.gouv.fr/NOS/JDV_J107-EnsembleSavoirFaire-RASS) - -
-
- -#### 2.5.2) Requête - -Afin de récupérer les cabinets de médecins qui ne sont pas des cabinets de radiologie, nous devons interroger l'endpoint Organization : -
- * En filtrant sur le paramètre de recherche type = SA07, SA08, SA09 - * En incluant les PractitionerRole liés aux Organizations afin de pouvoir filtrer ensuite sur paramètre de recherche speciality -
- -
- -Une fois l’ensemble des données récupéré, procédez aux filtres suivants : - -Les PractitionerRoles doivent correspondre à la profession de santé "Médecin" (10) (champs code du PractitionerRole comme le montre le point 3 sur l'image ci-dessous). - -Ensuite les PractitionerRoles souhaités ***NE DOIVENT PAS correspondre*** aux spécialités : SM28, SM44, SM45, SM55 (champs specialty du PractitionerRole comme le montre le point 2 sur l'image ci-dessous) - -Enfin, il faut regrouper les PractitionerRoles pour les lier aux bonnes Organization (champ organization du PractitionerRole comme le montre le point 1 sur l’image ci-dessous) - -Nous pouvons finalement ne récupérer que les Organizations contenant des PractitionerRoleRoles selon les filtres que nous avons appliqués. - - -![Schéma montrant comment relier et filter les Organization et les PractitionerRole](img/focus-json-couloir-med-ville.png){:style="max-width:670px"} - - - -
-
-{% highlight bash %} -1) Faire un appel sur l'endpoint Organization en filtrant sur les Organization qui ont un type = SA07, SA08 ou SA09. -Cet appel devra inclure les PractitionerRoles attachés (&_revinclude=PractitionerRole:organization) -2) Pour chacun des PractitionerRole retournés, vérifier qu'il y a au moins 1 Role (champs role) avec pour : -- system = "https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante" -- et un code = 10 (médecin) -3) Pour chacun des PractitionerRole filtrés, vérifier qu'il ne dispose pas des spécialités de radiologie (champs speciality) avec pour : -- system = "https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale" -- et un code = SM28, SM44, SM45 ou SM55 -4) Pour chacun des PractitionerRole filtrés, vérifier qu'il est toujours en activité -5) Pour chacun des PractitionerRole trouvés et filtrés, récupérer les Organization qui ont le même id que le champs organization du PractitionerRole -6) Répeter l'opération sur toutes les pages (1) -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - "{{site.ans.api_url}}/fhir/Organization?type=SA05%2C%20SA07%2C%20SA08%2C%20SA09%2C%20SA52&_revinclude=PractitionerRole%3Aorganization" -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); -var hasNext = true; -Bundle orgBundle = null; -var totalElements = 0; -var goodElements = new ArrayList<>(); -var treated = 0; -var nbRoles = 0; - -// construct radiology facility request -try { -orgBundle = client.search().forResource(Organization.class) -.where(Organization.TYPE.exactly().codes("SA07", "SA08", "SA09")) -.revInclude(PractitionerRole.INCLUDE_ORGANIZATION) -.returnBundle(Bundle.class).execute(); - - totalElements = orgBundle.getTotal(); -} catch (Exception e) { -e.printStackTrace(); -hasNext = false; -} - -logger.info("Total results - {}", orgBundle.getTotal()); - -do { -var bundleContent = orgBundle.getEntry(); -var organizationMap = new LinkedHashMap(); - - for (var e : bundleContent) { - // store the organization inside a map - if(e.getResource() instanceof Organization) { - var org = (Organization) e.getResource(); - organizationMap.put(org.getId(), org); - treated++; - } - - if(e.getResource() instanceof PractitionerRole) { - var role = (PractitionerRole) e.getResource(); - var medic = false; - var radiologist = false; - - nbRoles++; - - // check if the Role contains a medic - for(var code : role.getCode()) { - for(var coding : code.getCoding()) { - if (coding.getSystem().equals("https://mos.esante.gouv.fr/NOS/TRE_G15-ProfessionSante/FHIR/TRE-G15-ProfessionSante") && - coding.getCode().equals("10")) { - medic = true; - break; - } - } - } - - if(medic) { - var specialtyStringList = Arrays.asList("SM28", "SM44", "SM45", "SM55"); - - // if a medic was found, check its specialties to filter only radiologist - for (var code : role.getSpecialty()) { - for (var coding : code.getCoding()) { - logger.info("Specialty Coding {} - {}", coding.getSystem(), coding.getCode()); - if (coding.getSystem().equals("https://mos.esante.gouv.fr/NOS/TRE_R38-SpecialiteOrdinale/FHIR/TRE-R38-SpecialiteOrdinale") && - specialtyStringList.contains(coding.getCode())) { - radiologist = true; - break; - } - } - } - } - - // if the Role is right and still practicing, link it to the right Organization - if(medic && !radiologist && !role.getPeriod().hasEnd() && role.getOrganization() != null) { - var org = (Organization) role.getOrganization().getResource(); - - if(organizationMap.containsKey(org.getId())) { - organizationMap.get(org.getId()).addContained(role); - } - } - } - } - - // loop over Organization and keep only those with roles - for(var org : organizationMap.values()) { - if(!org.getContained().isEmpty()) { - goodElements.add(org); - } - } - - // check if result has a next page - if (orgBundle.getLink("next")!=null) { - try { - orgBundle = client.loadPage().byUrl(orgBundle.getLink("next").getUrl()).andReturnBundle(Bundle.class).execute(); - } catch (Exception e) { - logger.error("Error getting next page"); - e.printStackTrace(); - hasNext = false; - } - } else { - hasNext = false; - } - - logger.info("Progress treated - {} / {} / {} role(s)", treated, orgBundle.getTotal(), nbRoles); -} while (hasNext); - -logger.info("Total organization - {}", totalElements); -logger.info("Total radiology - {}", goodElements.size()); -{% endhighlight %} -
- -
- -L'exécution de l'exemple de code peut donner un résultat équivalent : - -```bash -Progress treated 472050 / 472077 / 454524 role(s) -Progress treated 472077 / 472077 / 454561 role(s) -Total global - 466040 -Total filtered - 0 -``` - -
- - -### 2.6) Le couloir Officine - -#### 2.6.1) Définition - -Ce Couloir est défini par les secteurs d’activité suivants : SA33, SA38, SA39, SA56. - -**NOS** : Secteurs d’activité [TRE-R02-SecteurActivite](https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite/) - - -#### 2.6.2) Requête - -Afin de récupérer les officines, nous devons interroger l'endpoint Organization : -
- En filtrant sur le paramètre type : - - system = "https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite" - - et code = SA33, SA38, SA39, SA56 -
-
- - -Les données récupérées sont déjà pré-filtrées selon notre besoin et ne sont que des officines. - - -
-
-{% highlight bash %} -1) Faire un appel sur l'endpoint Organization en filtrant sur les Organization ayant un type parmi SA33, SA38, SA39 ou SA56. -Cet appel devra également inclure le filtre sur le system (&type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R02-SecteurActivite%2FFHIR%2FTRE-R02-SecteurActivite|SA33...) -2) L'ensembles des Organization récupérées sont des pharmacies -{% endhighlight %} -
-
-{% highlight bash %} -curl \ - -H "ESANTE-API-KEY: {{site.ans.demo_key }}" \ - "{{site.ans.api_url}}/fhir/Organization?type=https%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R02-SecteurActivite%2FFHIR%2FTRE-R02-SecteurActivite%7CSA33%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R02-SecteurActivite%2FFHIR%2FTRE-R02-SecteurActivite%7CSA38%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R02-SecteurActivite%2FFHIR%2FTRE-R02-SecteurActivite%7CSA39%2Chttps%3A%2F%2Fmos.esante.gouv.fr%2FNOS%2FTRE_R02-SecteurActivite%2FFHIR%2FTRE-R02-SecteurActivite%7CSA56" -{% endhighlight %} -
-
-{% highlight java %} -var client = createClient(); -var hasNext = true; -Bundle orgBundle = null; -var totalElements = 0; -var treated = 0; -var goodElements = new ArrayList<>(); - -// construct radiology facility request -try { - var pharmacyCodesList = Arrays.asList("SA33", "SA38", "SA39", "SA56"); - orgBundle = client.search().forResource(Organization.class) - .where(Organization.TYPE.exactly().systemAndValues("https://mos.esante.gouv.fr/NOS/TRE_R02-SecteurActivite/FHIR/TRE-R02-SecteurActivite", pharmacyCodesList)) - .returnBundle(Bundle.class).execute(); - - totalElements = orgBundle.getTotal(); -} catch (Exception e) { - e.printStackTrace(); - hasNext = false; -} - -logger.info("Total results - {}", totalElements); - -do { - var bundleContent = orgBundle.getEntry(); - - for (var e : bundleContent) { - // store the organization inside a map - if(e.getResource() instanceof Organization) { - var org = (Organization) e.getResource(); - goodElements.add(org); - treated++; - } - } - - // check if result has a next page - if (orgBundle.getLink("next")!=null) { - try { - orgBundle = client.loadPage().byUrl(orgBundle.getLink("next").getUrl()).andReturnBundle(Bundle.class).execute(); - } catch (Exception e) { - logger.error("Error getting next page"); - e.printStackTrace(); - hasNext = false; - } - } else { - hasNext = false; - } - - logger.info("Progress treated - {} / {}", treated, totalElements); -} while (hasNext); - -logger.info("Total organization - {}", goodElements.size()); -{% endhighlight %} -
- -
- -L'exécution de l'exemple de code peut donner un résultat équivalent : - -```bash -Progress treated 472050 / 472077 / 454524 role(s) -Progress treated 472077 / 472077 / 454561 role(s) -Total global - 466040 -Total filtered - 0 - - -``` -
- - - -(1) Plus d'informations sur la pagination [ici]()