APIs
Guides d'intégration
Analyse d'ordonnance

API d'analyse d'ordonnance

Introduction

Ces APIs permettent de détecter des problèmes liés aux médicaments pris par un patient et de proposer des traitements alternatifs.

Ce guide va vous permettre très rapidement de réaliser vos premiers appels !

L'information ci-dessous détaille l'intégration de l'application complète d'import et de validation de la prescription, pour intégrer directement par API, merci d'aller sur la documentation dédiée des interactions ou des contre-indications

Comment ça fonctionne ?

Autorisation

L'application demande un jeton d'identité à l'API d'authentification (voir Authentification par jeton d'identité)

Bon à savoir : La clé privée de compte de service est différente pour chaque environnement. Nous vous transmettrons la clé de production une fois les tests terminés.

Récupération d'identifiants de médicaments virtuels

Notre algorithme utilise comme paramètre principal des médicaments virtuels, c'est-à-dire une vision du médicament dénuée de noms de marque ou de laboratoire. L'ensemble des médicaments sur le marché sont présents sous cette forme dans notre base.

Les requêtes à nos algorithmes utilisent ces identifiants. Pour en récupérer, plusieurs possibilités :

  • Soit vous en disposez déjà suite à l'utilisation d'une autre API comme celle du Scan d'ordonnance
  • Soit vous utilisez déjà notre base et vous disposez de cette information dans votre application
  • Ou vous pouvez utiliser très facilement notre API d'Autocomplétion pour récupérer l'identifiant d'un médicament à partir d'un nom de médicament en toutes lettres.

Pour ce guide, nous utiliserons cette dernière façon de faire.

Appel de l'API d'analyse

Une fois muni des identifiants de médicament virtuel nécessaires, vous pouvez appeler notre API GraphQL d'analyse.

URL des appels d'API

L'url de base est https://api.{env}.posos.co{env} est l'environnement suivant : preprod pour la validation, production pour le live.

https://api.preprod.posos.co

Bon à savoir : La clé privée de compte de service est différente pour chaque environnement. Nous vous transmettrons la clé de production une fois les tests terminés.

Fonctionnement détaillé

Autorisation et appels d'API

Ce guide part du principe que vous avez lu et testé les pages Appels des APIs et Authentification par jeton d'identité. Dans la suite, le jeton d'identité récupéré sera simplement appelé jeton.

Récupération d'identifiants de médicaments virtuels

Comme évoqué, nous utilisons l'API d'Autocompletion pour obtenir les identifiants nécessaires. Suivez la documentation et réalisez un appel à l'API avec les paramètres d'URL suivants :

Paramètres

query: <le nom du médicament en toutes lettres>
entity_type: DRUG
k: 5
thresh: 0.4
drug_concept_levels: CLINICAL_DRUG
drug_concept_levels: BRANDED_DRUG
drug_concept_levels: INGREDIENT

Vous obtiendrez une réponse sous la forme :

Réponse

{
  "query": "contramal 50",
  "entity_type": "CLINICAL_DRUG",
  "candidates": [
    {
      "id": "61644643",
      "name": "tramadol chlorhydrate 50 mg gélule",
      "type": "CLINICAL_DRUG",
      "similarity": 0.91,
      "form": {
        //...
      },
      "text_preprocessed": "contramal 50 mg gelule",
      "ingredients": [
        //...
      ],
      "codings": {
        //...
        "posos": [
          {
            "code": "MV00001771",
            "label": "TRAMADOL BIOGARAN 50 mg, gélule",
            "terminology": "posos"
          }
        ]
        //...
      }
    }
  ]
}

Bon à savoir : Si vous cherchez juste le nom du médicament ou son nom associé à un dosage et/ou une forme, cela fonctionnera de la même manière.

L'identifiant de médicament virtuel (type = CLINICAL_DRUG) se trouve dans le champ code de l'objet posos de la liste de codings contenu dans le résultat. Le JSONPath pour l'obtenir est $.candidates[0].codings.posos[0].code.

L'identifiant recommandé pour les spécialités (type = BRANDED_DRUG) se trouve dans le champ code de l'objet CIS de la liste de codings contenu dans le résultat.

L'identifiant recommandé pour les ingrédients (type = INGREDIENT) se trouve dans le champ code de l'objet inn de la liste de codings contenu dans le résultat. Si l'objet inn est vide, utilisez l'objet SMS.

Testez par exemple avec la simvastatine et la clarithromycine :

Requête

GET
/autocomplete-api/autocomplete
curl --request GET -s \
  --url "https://api.preprod.posos.co/autocomplete-api/autocomplete?query=simvastatine&entity_type=CLINICAL_DRUG&k=1&thresh=0.4&drug_concept_levels=CLINICAL_DRUG" \
  --header 'Authorization: Bearer <token>' \
  | jq -r '.candidates[0].codings.posos[0].code'

Vous devriez récupérer les identifiants MV00001165 et MV00000271.

Appel de l'API d'analyse

Utilisez votre client GraphQL préféré pour interroger notre API à l'URL suivante : https://api.preprod.posos.co/aort/v1/graphql. Pensez à joindre à la requête l'en-tête d'authentification !

Si vous n'êtes pas familier avec GraphQL, il n'est pas trop tard pour découvrir ce protocole très en vogue (opens in a new tab).

Voici la requête à faire en langage GQL :

Requête

query getInteractions($drugs: DrugInput) {
  getInteractions(drugs: $drugs) {
    designation
    type
    source {
      author
      url
    }
    drugs {
      clinicalDrugs {
        code
        inn
        label
      }
    }
    warnings {
      risk
      guidelines
      modifiers
    }
  }
}

Et la valeur des variables utilisées :

Variables

{
  "drugs": {
    "clinicalDrugs": ["MV00001165", "MV00000271"]
  }
}

Voici une version interactive :

Request

POST
/aort/v1/graphql
curl --request POST -s \
  --url "https://api.preprod.posos.co/aort/v1/graphql" \
  --data-raw $'{"query":"query getInteractions($drugs: DrugInput) {\n getInteractions(drugs: $drugs) {\n designation\n type\n source {\n author\n url\n }\n drugs {\n clinicalDrugs {\n code\n inn\n label\n }\n }\n warnings {\n risk\n guidelines\n modifiers\n }\n }\n}", variables:{{ "drugs": { "clinicalDrugs": [ "MV00001165", "MV00000271", ] } }}, "operationName:"getInteractions"}' \
  --header 'Authorization: Bearer <token>'

Et voici le résultat que vous devez obtenir :

Réponse

{
  "data": {
    "getInteractions": [
      {
        "designation": "inhibiteurs puissants du CYP3A4 <> simvastatine",
        "type": "Contre-indication",
        "source": {
          "author": "Thesaurus - ANSM",
          "url": "https://ansm.sante.fr/uploads/2020/10/27/20201027-thesaurus-referentiel-national-des-interactions-medicamenteuses-20102020.pdf"
        },
        "drugs": {
          "clinicalDrugs": [
            {
              "code": "MV00000271",
              "inn": "clarithromycine",
              "label": "Clarithromycine 500 mg comprimé"
            },
            {
              "code": "MV00001165",
              "inn": "simvastatine",
              "label": "Simvastatine 20 mg comprimé"
            }
          ]
        },
        "warnings": [
          {
            "risk": "Risque majoré d'effets indésirables (concentration-dépendants) à type de rhabdomyolyse par diminution du métabolisme de la simvastatine.",
            "guidelines": [],
            "modifiers": []
          }
        ]
      },
      {
        "designation": "inhibiteurs puissants du CYP3A4 <> substrats à risque du CYP3A4",
        "type": "A prendre en compte",
        "source": {
          "author": "Thesaurus - ANSM",
          "url": "https://ansm.sante.fr/uploads/2020/10/27/20201027-thesaurus-referentiel-national-des-interactions-medicamenteuses-20102020.pdf"
        },
        "drugs": {
          "clinicalDrugs": [
            {
              "code": "MV00000271",
              "inn": "clarithromycine",
              "label": "Clarithromycine 500 mg comprimé"
            },
            {
              "code": "MV00001165",
              "inn": "simvastatine",
              "label": "Simvastatine 20 mg comprimé"
            }
          ]
        },
        "warnings": [
          {
            "risk": "Majoration des effets indésirables propres à chaque substrat, avec conséquences souvent sévères.",
            "guidelines": [],
            "modifiers": []
          }
        ]
      }
    ]
  }
}

La réponse contient, pour chaque médicament passé en paramètre, les interactions détectées avec les autres médicaments de la requête. Ici, une contre-indication importante a été renvoyée !