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
où {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
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.
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
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 !