APIs
Guides d'intégration
Accéder à l'entrepôt FHIR

Entrepôt FHIR

Introduction

Posos met à disposition, en lecture-seule, un entrepôt FHIR contenant les ordonnances scannées.

Cet entrepôt est hébergé en Europe avec le service Google Cloud Healthcare API (opens in a new tab) et son accès est protégé. Il répond au standard FHIR R4.

Cette documentation ne vise pas à décrire l’interface exposée qui correspond en tout point au protocole décrit par FHIR, suivant la déclaration de conformité suivante : https://cloud.google.com/healthcare-api/docs/fhir (opens in a new tab).

Nous évoquerons ici les modalités de connexion à l’entrepôt proposé par Posos et donnerons quelques exemples de contenu.

Référence vers les documentations standard et Google

URL d’accès à l’entrepôt

L’url de base est :

https://healthcare.googleapis.com/v1/projects/posos-prod/locations/europe-west2/datasets/posos-on-fhir/fhirStores/:slug
ParamètreDescription
slugNom de l’entrepôt FHIR. Il correspond au nom qui vous a été communiqué avec la clé.

Obtention d’un jeton d’identité

L’API n’est accessible que pour les utilisateurs authentifiés. Le mécanisme d’authentification est celui proposé d’emblée par Google Cloud, à base de protocole OAuth2 et de clé privée de compte de service.

La suite de cette documentation mentionne un fichier key.json que vous pouvez obtenir auprès de Posos. C’est une clé privée personnelle qui vous permettra d’avoir accès à l’environnement de démonstration. Ne partagez jamais cette clé.

Pour que la requête soit acceptée, elle doit être accompagnée, dans ses en-têtes HTTP, d’un jeton d’authentification obtenu lors d’une phase préalable d’échange suivant le protocole OAuth2 résumé ici:

  1. Le service utilisateur construit un jeton JWT signé avec sa clé privée contenant ses demandes d’accès
  2. Le service échange ce jeton JWT signé contre un jeton d’accès opaque auprès de l’API Google Auth.
  3. Le service utilise ce jeton d’accès comme Bearer token auprès de ses requêtes suivantes

Obtention d’un jeton d’accès

La procédure est écrite ici https://developers.google.com/identity/protocols/oauth2/service-account#httprest (opens in a new tab) et est facilitée par l’utilisation de librairies ad-hoc. Si Google n’en propose pas pour votre langage de programmation, il existe des implémentations tierces, et sinon il faut implémenter soi-même l’échange qui n’est pas très complexe.

Les claims / scope à demander pour accéder à l’API Cloud Healthcare sont les suivants:

https://www.googleapis.com/auth/cloud-platform

Utilisation du jeton

Les requêtes à l’entrepôt FHIR doivent ensuite contenir le jeton d’accès obtenu précédemment dans leur en-tête Authorization selon le principe du Bearer token. Cela donnerait un en-tête de la forme suivante:

Authorization: Bearer <jeton d'accès>

Utilisation de l’API

Il s’agit ensuite d’utiliser l’API REST de l’entrepôt soit directement avec un client REST soit via un client FHIR dédié. La seule condition est de pouvoir fournir le Bearer token comme évoqué précédemment.

Exemple

Récupération de la dernière ordonnance scannée d’un patient avec la commande httpie.

Request

GET
/:slug/fhir/RequestGroup
curl --request GET \
  --url "https://healthcare.googleapis.com/v1/projects/posos-prod/locations/europe-west2/datasets/posos-on-fhir/fhirStores/:slug/fhir/RequestGroup?subject:Patient.identifier=id://partner|3f76b58d-26ea-458a-8992-a0740aa0c0f4&_count=1&_sort=-_lastUpdated" \
  --header 'Authorization: Bearer <token>'

Response

{
  "entry": [
    {
      "fullUrl": "https://healthcare.googleapis.com/v1/projects/posos-prod/locations/europe-west2/datasets/posos-on-fhir/fhirStores/:slug/fhir/RequestGroup/acfaed53-ea82-4970-be08-34ddd4385e65",
      "resource": {
        "action": [
          {
            "resource": {
              "reference": "#b8751a34-956a-4f7c-95f7-feb9f1b96b7f-0"
            }
          },
          {
            "resource": {
              "reference": "#b8751a34-956a-4f7c-95f7-feb9f1b96b7f-1"
            }
          },
          {
            "resource": {
              "reference": "#b8751a34-956a-4f7c-95f7-feb9f1b96b7f-2"
            }
          },
          {
            "resource": {
              "reference": "#b8751a34-956a-4f7c-95f7-feb9f1b96b7f-3"
            }
          },
          {
            "resource": {
              "reference": "#b8751a34-956a-4f7c-95f7-feb9f1b96b7f-4"
            }
          }
        ],
        "author": {
          "reference": "#author"
        },
        "authoredOn": "2022-05-12T18:16:03.467Z",
        "contained": [
          {
            "code": {
              "coding": [
                {
                  "code": "ramipril",
                  "display": "ramipril",
                  "system": "http://posos.on.fhir/shortname"
                },
                {
                  "code": "ramipril",
                  "display": "ramipril",
                  "system": "http://posos.on.fhir/dci"
                },
                {
                  "code": "C09AA05",
                  "display": "RAMIPRIL",
                  "system": "http://www.whocc.no/atc"
                },
                {
                  "code": "60489841",
                  "display": "RAMIPRIL ZYDUS FRANCE 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "60834757",
                  "display": "RAMIPRIL BOUCHARA RECORDATI 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "62387714",
                  "display": "RAMIPRIL ZENTIVA 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "63386309",
                  "display": "RAMIPRIL SUN 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "63506242",
                  "display": "RAMIPRIL SANDOZ 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "64227441",
                  "display": "RAMIPRIL BIOGARAN 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "64687386",
                  "display": "RAMIPRIL EVOLUGEN 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "65542746",
                  "display": "RAMIPRIL EG 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "66216041",
                  "display": "RAMIPRIL CRISTERS 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "66285105",
                  "display": "RAMIPRIL VIATRIS 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "66487797",
                  "display": "RAMIPRIL ALTER 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "67791290",
                  "display": "RAMIPRIL ARROW LAB 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "68604085",
                  "display": "RAMIPRIL ALMUS 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "68929602",
                  "display": "RAMIPRIL ARROW GENERIQUES 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "69048652",
                  "display": "RAMIPRIL KRKA 2,5 mg, comprimé",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "69868248",
                  "display": "RAMIPRIL TEVA SANTE 2,5 mg, comprimé sécable",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "2,5 mg",
                  "display": "2,5 mg",
                  "system": "http://posos.on.fhir/dose"
                },
                {
                  "code": "comprimé",
                  "display": "comprimé",
                  "system": "http://posos.on.fhir/form"
                }
              ]
            },
            "id": "UmFtaXByaWw=",
            "ingredient": [
              {
                "itemCodeableConcept": {
                  "coding": [
                    {
                      "code": "ramipril",
                      "display": "ramipril",
                      "system": "http://posos.on.fhir/dci"
                    }
                  ]
                }
              }
            ],
            "resourceType": "Medication"
          },
          {
            "code": {
              "coding": [
                {
                  "code": "monoprost",
                  "display": "monoprost",
                  "system": "http://posos.on.fhir/shortname"
                },
                {
                  "code": "latanoprost",
                  "display": "latanoprost",
                  "system": "http://posos.on.fhir/dci"
                },
                {
                  "code": "S01EE01",
                  "display": "LATANOPROST",
                  "system": "http://www.whocc.no/atc"
                },
                {
                  "code": "66287654",
                  "display": "MONOPROST 50 microgrammes/ml, collyre en solution",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "67303969",
                  "display": "MONOPROST 50 microgrammes/ml, collyre en solution en récipient unidose",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "collyre en solution",
                  "display": "collyre en solution",
                  "system": "http://posos.on.fhir/form"
                }
              ]
            },
            "id": "TW9ub3Byb3N0",
            "ingredient": [
              {
                "itemCodeableConcept": {
                  "coding": [
                    {
                      "code": "latanoprost",
                      "display": "latanoprost",
                      "system": "http://posos.on.fhir/dci"
                    }
                  ]
                }
              }
            ],
            "resourceType": "Medication"
          },
          {
            "code": {
              "coding": [
                {
                  "code": "bromazepam",
                  "display": "bromazepam",
                  "system": "http://posos.on.fhir/shortname"
                },
                {
                  "code": "bromazépam",
                  "display": "bromazépam",
                  "system": "http://posos.on.fhir/dci"
                },
                {
                  "code": "N05BA08",
                  "display": "BROMAZEPAM",
                  "system": "http://www.whocc.no/atc"
                },
                {
                  "code": "61084408",
                  "display": "BROMAZEPAM ARROW 1,5 mg, comprimé",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "1,5 mg",
                  "display": "1,5 mg",
                  "system": "http://posos.on.fhir/dose"
                },
                {
                  "code": "comprimé",
                  "display": "comprimé",
                  "system": "http://posos.on.fhir/form"
                }
              ]
            },
            "id": "QnJvbWF6ZXBhbQ==",
            "ingredient": [
              {
                "itemCodeableConcept": {
                  "coding": [
                    {
                      "code": "bromazépam",
                      "display": "bromazépam",
                      "system": "http://posos.on.fhir/dci"
                    }
                  ]
                }
              }
            ],
            "resourceType": "Medication"
          },
          {
            "code": {
              "coding": [
                {
                  "code": "tamsulosine",
                  "display": "tamsulosine",
                  "system": "http://posos.on.fhir/shortname"
                },
                {
                  "code": "tamsulosine",
                  "display": "tamsulosine",
                  "system": "http://posos.on.fhir/dci"
                },
                {
                  "code": "G04CA02",
                  "display": "TAMSULOSINE",
                  "system": "http://www.whocc.no/atc"
                },
                {
                  "code": "65795735",
                  "display": "TAMSULOSINE ARROW LAB LP 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "65823679",
                  "display": "TAMSULOSINE BIOGARAN L.P. 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "65869609",
                  "display": "TAMSULOSINE SUN LP 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "66281345",
                  "display": "TAMSULOSINE ZENTIVA LAB LP 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "66305159",
                  "display": "TAMSULOSINE KRKA LP 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "67486011",
                  "display": "TAMSULOSINE ALMUS L.P. 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "68655083",
                  "display": "TAMSULOSINE TEVA LP 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "68735615",
                  "display": "TAMSULOSINE SANDOZ LP 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "68840153",
                  "display": "TAMSULOSINE MYLAN L.P. 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "68843466",
                  "display": "TAMSULOSINE EG L.P. 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "69181268",
                  "display": "TAMSULOSINE EVOLUGEN L.P. 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "69284407",
                  "display": "TAMSULOSINE ARROW LP 0,4 mg, gélule à libération prolongée",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "0,4 mg",
                  "display": "0,4 mg",
                  "system": "http://posos.on.fhir/dose"
                },
                {
                  "code": "gélule à libération prolongée",
                  "display": "gélule à libération prolongée",
                  "system": "http://posos.on.fhir/form"
                }
              ]
            },
            "id": "VGFtc3Vsb3NpbmU=",
            "ingredient": [
              {
                "itemCodeableConcept": {
                  "coding": [
                    {
                      "code": "tamsulosine",
                      "display": "tamsulosine",
                      "system": "http://posos.on.fhir/dci"
                    }
                  ]
                }
              }
            ],
            "resourceType": "Medication"
          },
          {
            "code": {
              "coding": [
                {
                  "code": "doliprane",
                  "display": "doliprane",
                  "system": "http://posos.on.fhir/shortname"
                },
                {
                  "code": "paracétamol",
                  "display": "paracétamol",
                  "system": "http://posos.on.fhir/dci"
                },
                {
                  "code": "N02BE01",
                  "display": "PARACETAMOL",
                  "system": "http://www.whocc.no/atc"
                },
                {
                  "code": "67119691",
                  "display": "DOLIPRANE 500 mg, gélule",
                  "system": "http://bdpm/cis"
                },
                {
                  "code": "500 mg",
                  "display": "500 mg",
                  "system": "http://posos.on.fhir/dose"
                },
                {
                  "code": "gélule",
                  "display": "gélule",
                  "system": "http://posos.on.fhir/form"
                }
              ]
            },
            "id": "RG9saXByYW5l",
            "ingredient": [
              {
                "itemCodeableConcept": {
                  "coding": [
                    {
                      "code": "paracétamol",
                      "display": "paracétamol",
                      "system": "http://posos.on.fhir/dci"
                    }
                  ]
                }
              }
            ],
            "resourceType": "Medication"
          },
          {
            "dosageInstruction": [
              {
                "text": "SP 28 jour(s)."
              }
            ],
            "id": "b8751a34-956a-4f7c-95f7-feb9f1b96b7f-0",
            "intent": "order",
            "medicationReference": {
              "reference": "#UmFtaXByaWw="
            },
            "resourceType": "MedicationRequest",
            "status": "draft",
            "subject": {
              "reference": "Patient/cc508c17-051b-42e9-bf8e-4205ea6183d9"
            },
            "text": {
              "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Ramipril - SP 28 jour(s).</div>",
              "status": "generated"
            }
          },
          {
            "dosageInstruction": [
              {
                "text": "récipient unidose le soir À partir du 30/11/2021"
              }
            ],
            "id": "b8751a34-956a-4f7c-95f7-feb9f1b96b7f-1",
            "intent": "order",
            "medicationReference": {
              "reference": "#TW9ub3Byb3N0"
            },
            "resourceType": "MedicationRequest",
            "status": "draft",
            "subject": {
              "reference": "Patient/cc508c17-051b-42e9-bf8e-4205ea6183d9"
            },
            "text": {
              "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Monoprost - récipient unidose le soir À partir du 30/11/2021</div>",
              "status": "generated"
            }
          },
          {
            "dosageInstruction": [
              {
                "text": ""
              }
            ],
            "id": "b8751a34-956a-4f7c-95f7-feb9f1b96b7f-2",
            "intent": "order",
            "medicationReference": {
              "reference": "#QnJvbWF6ZXBhbQ=="
            },
            "resourceType": "MedicationRequest",
            "status": "draft",
            "subject": {
              "reference": "Patient/cc508c17-051b-42e9-bf8e-4205ea6183d9"
            },
            "text": {
              "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Bromazepam - </div>",
              "status": "generated"
            }
          },
          {
            "dosageInstruction": [
              {
                "text": ""
              }
            ],
            "id": "b8751a34-956a-4f7c-95f7-feb9f1b96b7f-3",
            "intent": "order",
            "medicationReference": {
              "reference": "#VGFtc3Vsb3NpbmU="
            },
            "resourceType": "MedicationRequest",
            "status": "draft",
            "subject": {
              "reference": "Patient/cc508c17-051b-42e9-bf8e-4205ea6183d9"
            },
            "text": {
              "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Tamsulosine - </div>",
              "status": "generated"
            }
          },
          {
            "dosageInstruction": [
              {
                "text": "IV. Paracétamol 500 mg gélule (DOLIPRANE 500MG GELULE 100) Par voie orale  2 gélules le matin la nuit si besoin À partir du 30/11/2021 QSP 28 jour(s)."
              }
            ],
            "id": "b8751a34-956a-4f7c-95f7-feb9f1b96b7f-4",
            "intent": "order",
            "medicationReference": {
              "reference": "#RG9saXByYW5l"
            },
            "resourceType": "MedicationRequest",
            "status": "draft",
            "subject": {
              "reference": "Patient/cc508c17-051b-42e9-bf8e-4205ea6183d9"
            },
            "text": {
              "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Doliprane - IV. Paracétamol 500 mg gélule (DOLIPRANE 500MG GELULE 100) Par voie orale  2 gélules le matin la nuit si besoin À partir du 30/11/2021 QSP 28 jour(s).</div>",
              "status": "generated"
            }
          },
          {
            "id": "author",
            "identifier": [
              {
                "system": "id://partner",
                "value": "john-doe"
              },
              {
                "system": "id://posos",
                "value": "3cc53d9f-c82c-4038-9869-a1b8b6d43ddf"
              }
            ],
            "resourceType": "Practitioner"
          }
        ],
        "id": "acfaed53-ea82-4970-be08-34ddd4385e65",
        "identifier": [
          {
            "system": "id://posos",
            "value": "b8751a34-956a-4f7c-95f7-feb9f1b96b7f"
          }
        ],
        "intent": "order",
        "meta": {
          "lastUpdated": "2022-05-12T18:16:06.503802+00:00",
          "versionId": "MTY1MjM3OTM2NjUwMzgwMjAwMA"
        },
        "resourceType": "RequestGroup",
        "status": "draft",
        "subject": {
          "reference": "Patient/cc508c17-051b-42e9-bf8e-4205ea6183d9"
        },
        "text": {
          "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\"><ul><li>Ramipril - SP 28 jour(s).</li><li>Monoprost - récipient unidose le soir À partir du 30/11/2021</li><li>Bromazepam - </li><li>Tamsulosine - </li><li>Doliprane - IV. Paracétamol 500 mg gélule (DOLIPRANE 500MG GELULE 100) Par voie orale  2 gélules le matin la nuit si besoin À partir du 30/11/2021 QSP 28 jour(s).</li></ul></div>",
          "status": "generated"
        }
      },
      "search": {
        "mode": "match"
      }
    }
  ],
  "link": [
    {
      "relation": "search",
      "url": "https://healthcare.googleapis.com/v1/projects/posos-prod/locations/europe-west2/datasets/posos-on-fhir/fhirStores/:slug/fhir/RequestGroup/?_count=1&_sort=-_lastUpdated&subject%3APatient.identifier=id%3A%2F%2Fpartner%7C3f76b58d-26ea-458a-8992-a0740aa0c0f4"
    },
    {
      "relation": "first",
      "url": "https://healthcare.googleapis.com/v1/projects/posos-prod/locations/europe-west2/datasets/posos-on-fhir/fhirStores/:slug/fhir/RequestGroup/?_count=1&_sort=-_lastUpdated&subject%3APatient.identifier=id%3A%2F%2Fpartner%7C3f76b58d-26ea-458a-8992-a0740aa0c0f4"
    },
    {
      "relation": "self",
      "url": "https://healthcare.googleapis.com/v1/projects/posos-prod/locations/europe-west2/datasets/posos-on-fhir/fhirStores/:slug/fhir/RequestGroup/?_count=1&_sort=-_lastUpdated&subject%3APatient.identifier=id%3A%2F%2Fpartner%7C3f76b58d-26ea-458a-8992-a0740aa0c0f4"
    }
  ],
  "resourceType": "Bundle",
  "total": 1,
  "type": "searchset"
}