NAV Navbar
Logo
json xml

Introduction

L'API Lifen vous permet d'envoyer de manière sécurisée un document médical à n'importe quel professionnel de santé français. Actuellement nous proposons quatre canaux d'envoi :

Canal Description
MS Santé
MS Santé
messagerie de santé officielle. Plus d'informations sur https://www.mssante.fr/home
Lifen est opérateur MSSanté (certifié par l'ASIP Santé)
Apicrypt
Apicrypt
messagerie de santé la plus utilisée. Plus d'informations sur https://www.apicrypt.org/
LIFEN
Lifen
messagerie de santé disponible uniquement pour les utilisateurs de Lifen
La Poste
La Poste
quand un envoi dématérialisé n'est pas disponible, Lifen peut utiliser des canaux plus traditionnels

Si vous avez la moindre question concernant l'API, n'hésitez pas à nous contacter à api@lifen.fr.

Présentation

L'API est actuellement conçue pour le flow suivant qui se déroule en deux étapes :

Etape 1 : identification de l'émetteur et du destinataire du compte-rendu ainsi que du canal de communication

Etape 2 : création des informations du patient, relatif au document envoyé

Etape 3 : envoi d'un courrier médical à partir des identifiants précédemment obtenus : l'upload du document PDF se fait dans l'appel API

Une fois l'envoi d'un courrier médical effectué, il est alors possible suivre l'évolution de cet envoi.

Accès à notre Sandbox

Nous mettons à disposition un environnement de démonstration pour vous permettre de tester et d'intégrer notre API.

Différences entre la Sandbox et l'environnement de production

Points d'accès

Pour commencer 🚀

1 - Récupération du token

Ici, le flow applicatif est présenté pour vous permettre de tester rapidement mais vous conseillons fortement de mettre en place un flow utilisateur.

curl -XPOST -u 'CLIENTID':'SECRET' 'https://oauth-demo.lifen.fr/oauth/token?grant_type=client_credentials' 

2 - Recherche dans l'annuaire

curl -X GET \
 'https://api-demo.lifen.fr/fhir/Practitioner?name=eclancher' \
 -H 'authorization: bearer TOKEN' \
 -H 'content-type: application/json' \
 -H 'X-API-VERSION: 2' \

3 - Upload de pièce jointe

curl -X POST \
  https://api-demo.lifen.fr/fhir/Binary \
  -H 'Authorization: bearer TOKEN' \
  -H 'Content-Type: application/fhir+json' \
  -H 'Prefer: return=representation' \
  -H 'X-API-VERSION: 2' \
  -d '{
  "resourceType": "Binary",
    "contentType": "{application/pdf; charset=UTF-8}",
    "content": "BASE64CONTENT"
  }'

4 - Création d'un document

curl -X POST \
 https://api-demo.lifen.fr/fhir/DocumentReference \
 -H 'Authorization: bearer TOKEN' \
 -H 'Cache-Control: no-cache' \
 -H 'Content-Type: application/fhir+json' \
 -H 'Postman-Token: ee5b61d9-a3ae-4f42-9b7e-1806633ed3f6' \
 -H 'Prefer: return=representation' \
 -H 'X-API-VERSION: 2' \
 -d '{"resourceType":"DocumentReference",
"status":"current",
"docStatus":"final",
"type":{"coding":{"system":"http://loinc.org","code":"81222-2","display":"Consultation note"}},
"description":"Test_Patient__01_01_1950__16.pdf",
"indexed":"2018-02-09T16:00:44+01:00",
"content":[{"attachment":{"url":"Binary/{{binary_id}}","title":"Test_Patient__01_01_1950__16.pdf"}}]}'

5 - Création d'un patient

curl -X POST \
  https://api-demo.lifen.fr/fhir/Patient \
  -H 'Authorization: bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Prefer: return=representation' \
  -H 'X-API-VERSION: 2' \
  -d '{
  "resourceType": "Patient",
  "name": [
    {
      "family": "Michu",
      "given": [
        "Paulette"
      ]
    }
  ]
}'

6 - Emission du document

curl -X POST \
  https://api-demo.lifen.fr/fhir/CommunicationRequest \
  -H 'Authorization: bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Prefer: return=representation' \
  -H 'X-API-VERSION: 2' \
  -d '{
  "resourceType": "CommunicationRequest",
  "status": "active",
  "category": [
    {
      "coding": [
        {
          "system": "http://honestica.com/fhir/communication/category",
          "code": "MEDICAL_REPORT_COLOR"
        }
      ]
    }
  ],
  "subject": {
    "reference": "Patient/ID"
  },
  "recipient": [
    {
      "extension": [
        {
          "url": "http://honestica.com/fhir/structuredefinition/communicationrequest-recipient-details",
          "valueAddress": {
            "id": "668144",
            "use": "work",
            "line": [
              "CABINET DU DR SERGE BOUHANNA",
              "S O S MEDECINS",
              "87 BOULEVARD DE PORT ROYAL"
            ],
            "city": "Paris",
            "postalCode": "75013",
            "country": "FRA",
            "period": {
              "start": "2018-02-22"
            }
          }
        }
      ],
      "reference": "Practitioner/93661"
    }
  ],
  "payload": [
    {
      "contentReference": {
        "reference": "DocumentReference/ID"
      }
    }
  ],
  "sender": {
    "reference": "Practitioner/505436"
  }
}'

Représentation FHIR

L'API Lifen utilise plusieurs objets construits à partir du standard de santé FHIR (version actuelle : DSTU 3.0.1).

Practitioner

{
                "resourceType": "Practitioner",
                "id": "8030",
                "identifier": [
                    {
                        "system": "http://lifen.fr/fhir/Identifier/practitioner-rpps",
                        "value": "10004085790"
                    },
                    {
                        "system": "urn:oid:1.2.250.1.71.4.2.1",
                        "value": "810004085790"
                    }
                ],
                "active": true,
                "name": [
                    {
                        "use": "official",
                        "text": "William Eclancher",
                        "family": "Eclancher",
                        "given": [
                            "William"
                        ],
                        "prefix": [
                            "DR"
                        ]
                    }
                ],
                "telecom": [
                    {
                        "id": "4008833",
                        "extension": [
                            {
                                "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                "valueCoding": {
                                    "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                    "code": "mssante",
                                    "display": "MSSanté"
                                }
                            }
                        ],
                        "system": "email",
                        "value": "william.eclancher@medecin.mssante.fr",
                        "use": "work",
                        "period": {
                            "start": "2018-02-06"
                        }
                    },
                    {
                        "id": "3890596",
                        "extension": [
                            {
                                "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                "valueCoding": {
                                    "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                    "code": "apicrypt",
                                    "display": "Apicrypt"
                                }
                            }
                        ],
                        "system": "email",
                        "value": "William.ECLANCHER@medical75.apicrypt.org",
                        "use": "work",
                        "period": {
                            "start": "2018-02-06"
                        }
                    }
                ],
                "address": [
                    {
                        "id": "4440976",
                        "use": "work",
                        "line": [
                            "CABINET DU DR WILLIAM ECLANCHER",
                            "DR WILLIAM ECLANCHER",
                            "11 RUE CHARLES TELLIER",
                            "75016 PARIS"
                        ],
                        "city": "Paris",
                        "postalCode": "75016",
                        "country": "FRA",
                        "period": {
                            "start": "2018-02-07"
                        }
                    }
                ],
                "qualification": [
                    {
                        "code": {
                            "coding": [
                                {
                                    "system": "urn:oid:1.2.250.1.71.1.2.7",
                                    "code": "10",
                                    "display": "Médecin"
                                }
                            ],
                            "text": "Médecin"
                        }
                    },
                    {
                        "code": {
                            "coding": [
                                {
                                    "system": "urn:oid:1.2.250.1.213.2.28",
                                    "code": "SM53",
                                    "display": "Spécialiste en Médecine Générale"
                                }
                            ],
                            "text": "Spécialiste en Médecine Générale"
                        }
                    }
                ]
            }
<Practitioner xmlns="http://hl7.org/fhir">
    <id value="8030"/>
    <identifier>
        <system value="http://lifen.fr/fhir/Identifier/practitioner-rpps"/>
        <value value="10004085790"/>
    </identifier>
    <identifier>
        <system value="urn:oid:1.2.250.1.71.4.2.1"/>
        <value value="810004085790"/>
    </identifier>
    <active value="true"/>
    <name>
        <use value="official"/>
        <text value="William Eclancher"/>
        <family value="Eclancher"/>
        <given value="William"/>
        <prefix value="DR"/>
    </name>
    <telecom id="4008833">
        <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
            <valueCoding>
                <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                <code value="mssante"/>
                <display value="MSSanté"/>
            </valueCoding>
        </extension>
        <system value="email"/>
        <value value="william.eclancher@medecin.mssante.fr"/>
        <use value="work"/>
        <period>
            <start value="2018-02-06"/>
        </period>
    </telecom>
    <telecom id="3890596">
        <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
            <valueCoding>
                <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                <code value="apicrypt"/>
                <display value="Apicrypt"/>
            </valueCoding>
        </extension>
        <system value="email"/>
        <value value="William.ECLANCHER@medical75.apicrypt.org"/>
        <use value="work"/>
        <period>
            <start value="2018-02-06"/>
        </period>
    </telecom>
    <address id="4440976">
        <use value="work"/>
        <line value="CABINET DU DR WILLIAM ECLANCHER"/>
        <line value="DR WILLIAM ECLANCHER"/>
        <line value="11 RUE CHARLES TELLIER"/>
        <line value="75016 PARIS"/>
        <city value="Paris"/>
        <postalCode value="75016"/>
        <country value="FRA"/>
        <period>
            <start value="2018-02-07"/>
        </period>
    </address>
    <qualification>
        <code>
            <coding>
                <system value="urn:oid:1.2.250.1.71.1.2.7"/>
                <code value="10"/>
                <display value="Médecin"/>
            </coding>
            <text value="Médecin"/>
        </code>
    </qualification>
    <qualification>
        <code>
            <coding>
                <system value="urn:oid:1.2.250.1.213.2.28"/>
                <code value="SM53"/>
                <display value="Spécialiste en Médecine Générale"/>
            </coding>
            <text value="Spécialiste en Médecine Générale"/>
        </code>
    </qualification>
</Practitioner>

Un Practitioner est un professionnel de santé. Les professions présentes sont : Médecin, Sage-Femme, Masseur-Kinésithérapeute, Pharmacien, Chirurgien-Dentiste résidant en France et inscrits à l'Ordre National.

Attribut Description
id identifiant interne
identifier identifiants connus (ex : RPPS)
telecom canaux de communication dématérialisés et sécurisés
address adresses postales disponibles (en général une par activité déclarée)
qualification profession et spécialité (jeux de valeurs utilisés : http://esante.gouv.fr/sites/default/files/asset/document/tre_g15-professionsante.tabs et http://esante.gouv.fr/sites/MOS/PDF2/TRE_R38-SpecialiteOrdinale.tabs.pdf )

Cette modélisation est basée sur https://www.hl7.org/fhir/practitioner.html.

Organization

 {
  "resourceType": "Organization",
  "id": "568493",
  "identifier": [
    {
      "system": "http://finess.sante.gouv.fr/fhir/Identifier/finessEt",
      "value": "570026682"
    },
    {
      "system": "http://insee.fr/fhir/Identifier/siret",
      "value": "26570280300510"
    }
  ],
  "active": true,
  "type": [
    {
      "coding": [
        {
          "system": "http://drees.solidarites-sante.gouv.fr/fhir/valueSet/nature",
          "code": "ET",
          "display": "Etablissement"
        }
      ]
    },
    {
      "coding": [
        {
          "system": "http://hl7.org/fhir/organization-type",
          "code": "prov",
          "display": "Healthcare Provider"
        }
      ]
    },
    {
      "coding": [
        {
          "system": "https://www.insee.fr/fhir/valueSet/NAFNiv5",
          "version": "rev2",
          "code": "8610Z"
        }
      ]
    },
    {
      "coding": [
        {
          "system": "http://finess.sante.gouv.fr/fhir/valueSet/cat",
          "code": "101",
          "display": "Centre Hospitalier Régional (C.H.R.)"
        }
      ]
    },
    {
      "coding": [
        {
          "system": "http://finess.sante.gouv.fr/fhir/valueSet/catAg",
          "code": "1101",
          "display": "Centres Hospitaliers Régionaux"
        }
      ]
    },
    {
      "coding": [
        {
          "system": "http://finess.sante.gouv.fr/fhir/valueSet/sph",
          "code": "1",
          "display": "Etablissement public de santé"
        }
      ]
    },
    {
      "coding": [
        {
          "system": "http://finess.sante.gouv.fr/fhir/valueSet/mft",
          "code": "03",
          "display": "ARS établissements Publics de santé dotation globale"
        }
      ]
    }
  ],
  "name": "CHR METZ - THIONVILLE - HOPITAL DE MERCY",
  "telecom": [
    {
      "id": "213118",
      "system": "phone",
      "value": "+33387553131",
      "use": "work",
      "period": {
        "start": "2018-02-22"
      }
    }
  ],
  "address": [
    {
      "id": "1087296",
      "use": "work",
      "line": [
        "SITE PRINCIPAL A LILLEBONNE",
        "DR HENRI MENARD",
        "1 ALL DU CHATEAU",
        "CS 45001",
        "57530 ARS LAQUENEXY"
      ],
      "city": "ARS LAQUENEXY",
      "postalCode": "57530",
      "period": {
        "start": "2018-02-22"
      }
    }
  ]
}
<Organization xmlns="http://hl7.org/fhir">
    <id value="568493"/>
    <identifier>
        <system value="http://finess.sante.gouv.fr/fhir/Identifier/finessEt"/>
        <value value="570026682"/>
    </identifier>
    <identifier>
        <system value="http://insee.fr/fhir/Identifier/siret"/>
        <value value="26570280300510"/>
    </identifier>
    <active value="true"/>
    <type>
        <coding>
            <system value="http://drees.solidarites-sante.gouv.fr/fhir/valueSet/nature"/>
            <code value="ET"/>
            <display value="Etablissement"/>
        </coding>
    </type>
    <type>
        <coding>
            <system value="http://hl7.org/fhir/organization-type"/>
            <code value="prov"/>
            <display value="Healthcare Provider"/>
        </coding>
    </type>
    <type>
        <coding>
            <system value="https://www.insee.fr/fhir/valueSet/NAFNiv5"/>
            <version value="rev2"/>
            <code value="8610Z"/>
        </coding>
    </type>
    <type>
        <coding>
            <system value="http://finess.sante.gouv.fr/fhir/valueSet/cat"/>
            <code value="101"/>
            <display value="Centre Hospitalier Régional (C.H.R.)"/>
        </coding>
    </type>
    <type>
        <coding>
            <system value="http://finess.sante.gouv.fr/fhir/valueSet/catAg"/>
            <code value="1101"/>
            <display value="Centres Hospitaliers Régionaux"/>
        </coding>
    </type>
    <type>
        <coding>
            <system value="http://finess.sante.gouv.fr/fhir/valueSet/sph"/>
            <code value="1"/>
            <display value="Etablissement public de santé"/>
        </coding>
    </type>
    <type>
        <coding>
            <system value="http://finess.sante.gouv.fr/fhir/valueSet/mft"/>
            <code value="03"/>
            <display value="ARS établissements Publics de santé dotation globale"/>
        </coding>
    </type>
    <name value="CHR METZ - THIONVILLE - HOPITAL DE MERCY"/>
    <telecom id="213118">
        <system value="phone"/>
        <value value="+33387553131"/>
        <use value="work"/>
        <period>
            <start value="2018-02-22"/>
        </period>
    </telecom>
    <address id="1087296">
        <use value="work"/>
        <line value="SITE PRINCIPAL A LILLEBONNE"/>
        <line value="DR HENRI MENARD"/>
        <line value="1 ALL DU CHATEAU"/>
        <line value="CS 45001"/>
        <line value="57530 ARS LAQUENEXY"/>
        <city value="ARS LAQUENEXY"/>
        <postalCode value="57530"/>
        <period>
            <start value="2018-02-22"/>
        </period>
    </address>
</Organization>

La ressource Organization représente un groupe de personnes ou un groupe d'organisations. En les distinguant par le champ type, l'API propose plusieurs entités :

Type Display Description
prov Healthcare Provider établissements de santé présents dans le répertoire FINESS et structures libérales présentes dans le répertoire RPPS
dept Hospital Department service, pôle ou département au sein d'un établissement
bus Non-Healthcare Business or Corporation entreprise
other Other organisation de type inconnu (type utilisé pour émettre un compte rendu vers une adresse absente de l'annuaire)

À partir du moment où l'organisation possède une adresse, il est possible de lui envoyer un document de santé via l'API. Nous vous conseillons toutefois d'utiliser préférentiellement l'entité Practitioner pour émettre un compte rendu à destination d'un médecin et non pas son cabinet libéral associé afin de permettre un envoi dématerialisé.

Patient


     {
                "resourceType": "Patient",
                "id": "894288",
                "name": [
                    {
                        "family": "Durand",
                        "given": [
                            "Jean"
                        ]
                    }
                ],
                "birthDate": "2003-03-03",
                "address": [
                    {
                        "id": "4440976",
                        "line": [
                            "M. et Mme DURAND",
                            "142 RUE MONTMARTRE",
                            "75002 PARIS"
                        ],
                        "city": "Paris",
                        "postalCode": "75002",
                        "country": "FRA",
                        "period": {
                            "start": "2018-02-07"
                        }
                    }
                ]
       }

<Patient xmlns="http://hl7.org/fhir">
    <id value="894288"/>
    <name>
        <family value="Durand"/>
        <given value="Jean"/>
    </name>
    <birthDate value="2003-03-03"/>
    <address id="4440976">
        <line value="M. et Mme DURAND"/>
        <line value="DR WILLIAM ECLANCHER"/>
        <line value="142 RUE MONTMARTRE"/>
        <line value="75002 PARIS"/>
        <city value="Paris"/>
        <postalCode value="75002"/>
        <country value="FRA"/>
        <period>
            <start value="2018-02-07"/>
        </period>
    </address>
</Patient>

Le Patient correspond aux informations administratives d'un patient cité dans la communication médicale (DocumentReference, CommunicationRequest et Communication). Un “carnet d'adresse” des patients est disponible sur Lifen mais limité à chaque compte (applicatif ou utilisateur).

Renseigner le patient n'est pas nécessairement obligatoire mais vivement conseillé car cela permet d'une part de lui adresser un courrier (seulement par la Poste pour le moment) et d'autre part cela permet au logiciel métier de vos correspondants de ranger automatiquement le document envoyé.

Vous pouvez ajouter le champ identifier au patient qui permet de le lier à un identifiant unique de votre système et de pouvoir le retrouver ultérieurement (exemple numéro de séjour ou de sécurité sociale).

Attribut Obligatoire ? Description
name oui nom et prénoms
birthDate non date de naissance
address non adresses postales disponibles

Cette modélisation est basée sur https://www.hl7.org/fhir/patient.html.

DocumentReference

Exemple d'un DocumentReference :

{
  "resourceType": "DocumentReference",
  "id": "569378",
  "status": "current",
  "docStatus": "final",
  "type": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "81222-2",
        "display": "Consultation note"
      }
    ]
  },
  "indexed": "2018-04-04T09:58:09+02:00",
  "description": "764379b5-b113-433a-8983-e78863a9d020.pdf",
  "content": [
    {
      "attachment": {
        "url": "Binary/569376",
        "title": "nomDeFichier.pdf"
      }
    }
  ]
}
<DocumentReference xmlns="http://hl7.org/fhir">
    <id value="569378"/>
    <status value="current"/>
    <docStatus value="final"/>
    <type>
        <coding>
            <system value="http://loinc.org"/>
            <code value="81222-2"/>
            <display value="Consultation note"/>
        </coding>
    </type>
    <indexed value="2018-04-04T09:58:09+02:00"/>
    <content>
        <attachment>
            <url value="Binary/569376"/>
            <title value="nomDeFichier.pdf"/>
        </attachment>
    </content>
</DocumentReference>

L'objet DocumentReference permet de stocker toutes les informations liées à un document. On retrouve l'auteur, le patient, la date de rédaction, le type de document, le statut du document par exemple. C'est l'objet central de notre système de gestion des documents.

Attribut Obligatoire ? Description
status oui statut technique (fixé à la valeur current)
docStatus oui statut métier utile pour gérer la phase de validation du document par le médecin après rédaction (final ou preliminary). Attention, l'envoi d'un document preliminary sera refusé par l'API.
type oui type de document basé sur la nomenclature LOINC. Actuellement, trois types sont pris en compte par l'API : Hospital discharge studies summary 11493-4, Surgery Surgical operation note 34874-8, Consultation Note 81222-2
indexed non  rempli par notre serveur lors de la création de la ressource
content  oui fichier représenté par la ressource DocumentReference (référence vers l'objet Binary précédemment créé)

Cette modélisation est basée sur https://www.hl7.org/fhir/documentReference.html.

Binary

Le Binary correspond à un document qui sera communiqué lors d'un DocumentReference. Il ne possède pas de représentation JSON ou XML, le payload correspond à la représentation binaire du fichier.

Cette modélisation est basée sur https://www.hl7.org/fhir/binary.html.

CommunicationRequest

Exemple d'une CommunicationRequest avec le fichier intégré au payload :

{
    "resourceType": "CommunicationRequest",
    "status": "active",
    "category": [
        {
            "coding": [
                {
                    "system": "http://lifen.fr/fhir/ValueSet/communication-category",
                    "code": "MEDICAL_REPORT"
                }
            ]
        }
    ],
    "subject": {
        "reference": "Patient/570953"
    },
    "recipient": [
        {
            "extension": [
                {
                    "url": "http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details",
                    "valueContactPoint": {
                        "id": "100011",
                        "extension": [
                            {
                                "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                "valueCoding": {
                                    "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                    "code": "apicrypt",
                                    "display": "Apicrypt"
                                }
                            }
                        ],
                        "system": "email",
                        "value": "david.parlier.aphp@medical75.apicrypt.org",
                        "use": "work",
                        "period": {
                            "start": "2018-02-22"
                        }
                    }
                }
            ],
            "reference": "Practitioner/15190"
        },
        {
            "extension": [
                {
                    "url": "http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details",
                    "valueAddress": {
                        "id": "624819",
                        "use": "work",
                        "line": [
                            "CLINIQUE BIZET",
                            "DR DAVID PARLIER",
                            "23 RUE GEORGES BIZET",
                            "75016 PARIS"
                        ],
                        "city": "Paris 16e Arrondissement",
                        "postalCode": "75016",
                        "period": {
                            "start": "2018-02-22"
                        }
                    }
                }
            ],
            "reference": "Practitioner/15190"
        }
    ],
    "payload": [
        {
            "contentReference": {
                "reference": "DocumentReference/570775"
            }
        }
    ],
    "authoredOn": "2018-04-13T13:09:13+00:00",
    "sender": {
        "reference": "Practitioner/72188"
    },
    "requester": {
        "agent": {
            "reference": "Practitioner/72188"
        }
    }
}
<CommunicationRequest xmlns="http://hl7.org/fhir">
    <status value="active"/>
    <category>
        <coding>
            <system value="http://lifen.fr/fhir/ValueSet/communication-category"/>
            <code value="MEDICAL_REPORT"/>
        </coding>
    </category>
    <subject>
        <reference value="Patient/570953"/>
    </subject>
    <recipient>
        <extension url="http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details">
            <valueContactPoint id="100011">
                <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
                    <valueCoding>
                        <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                        <code value="apicrypt"/>
                        <display value="Apicrypt"/>
                    </valueCoding>
                </extension>
                <system value="email"/>
                <value value="david.parlier.aphp@medical75.apicrypt.org"/>
                <use value="work"/>
                <period>
                    <start value="2018-02-22"/>
                </period>
            </valueContactPoint>
        </extension>
        <reference value="Practitioner/15190"/>
    </recipient>
    <recipient>
        <extension url="http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details">
            <valueAddress id="624819">
                <use value="work"/>
                <line value="CLINIQUE BIZET"/>
                <line value="DR DAVID PARLIER"/>
                <line value="23 RUE GEORGES BIZET"/>
                <line value="75016 PARIS"/>
                <city value="Paris 16e Arrondissement"/>
                <postalCode value="75016"/>
                <period>
                    <start value="2018-02-22"/>
                </period>
            </valueAddress>
        </extension>
        <reference value="Practitioner/15190"/>
    </recipient>
    <payload>
        <contentReference>
            <reference value="DocumentReference/570775"/>
        </contentReference>
    </payload>
    <authoredOn value="2018-04-13T13:09:13+00:00"/>
    <sender>
        <reference value="Practitioner/72188"/>
    </sender>
    <requester>
        <agent>
            <reference value="Practitioner/72188"/>
        </agent>
    </requester>
</CommunicationRequest>

Une CommunicationRequest est une demande de communication entre deux professionnels de santé (Practitioner). Son traitement par Lifen a pour résultat la création d'une ou plusieurs Communication.

Attribut Obligatoire ? Description
sender non obligatoire dans le cas d'un flow applicatif
recipient oui on identifie le (ou les) Practitioner, Organization ainsi qu'éventuellement le Patient, l'adresse ou l'email de destination souhaitée est renseigné dans l'extension communicationrequest-recipient-details
category oui catégorie interne obligatoire, doit être présent parmi la liste : MEDICAL_REPORT, MEDICAL_REPORT_COLOR
subject non permet de référencer un patient
payload oui il s'agit du fichier correspondant au courrier à envoyer. Seulement les types de fichiers ‘pdf’ sont acceptés.

Cette modélisation est basée sur https://www.hl7.org/fhir/communicationrequest.html.

Communication

Exemple d'une Communication :

{
    "resourceType": "Communication",
    "id": "570956",
    "basedOn": [
        {
            "reference": "CommunicationRequest/570952"
        }
    ],
    "status": "completed",
    "category": [
        {
            "coding": [
                {
                    "system": "https://api-demo.lifen.fr/fhir/ValueSet/communication-category",
                    "code": "MEDICAL_REPORT"
                }
            ]
        }
    ],
    "subject": {
        "reference": "Patient/570953"
    },
    "recipient": [
        {
            "extension": [
                {
                    "url": "http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details",
                    "valueContactPoint": {
                        "id": "17684",
                        "extension": [
                            {
                                "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                "valueCoding": {
                                    "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                    "code": "apicrypt",
                                    "display": "Apicrypt"
                                }
                            }
                        ],
                        "system": "email",
                        "value": "David.PARLIER@medical75.apicrypt.org",
                        "use": "work",
                        "period": {
                            "start": "2018-02-22"
                        }
                    }
                }
            ],
            "reference": "Practitioner/15190"
        }
    ],
    "sent": "2018-04-13T13:20:32+00:00",
    "sender": {
        "reference": "Practitioner/72188"
    },
    "payload": [
        {
            "contentReference": {
                "reference": "DocumentReference/570775"
            }
        }
    ]
}
<Communication xmlns="http://hl7.org/fhir">
    <id value="570956"/>
    <basedOn>
        <reference value="CommunicationRequest/570952"/>
    </basedOn>
    <status value="completed"/>
    <category>
        <coding>
            <system value="http://lifen.fr/fhir/ValueSet/communication-category"/>
            <code value="MEDICAL_REPORT"/>
        </coding>
    </category>
    <subject>
        <reference value="Patient/570953"/>
    </subject>
    <recipient>
        <extension url="http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details">
            <valueContactPoint id="17684">
                <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
                    <valueCoding>
                        <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                        <code value="apicrypt"/>
                        <display value="Apicrypt"/>
                    </valueCoding>
                </extension>
                <system value="email"/>
                <value value="David.PARLIER@medical75.apicrypt.org"/>
                <use value="work"/>
                <period>
                    <start value="2018-02-22"/>
                </period>
            </valueContactPoint>
        </extension>
        <reference value="Practitioner/15190"/>
    </recipient>
    <sent value="2018-04-13T13:20:32+00:00"/>
    <sender>
        <reference value="Practitioner/72188"/>
    </sender>
    <payload>
        <contentReference>
            <reference value="DocumentReference/570775"/>
        </contentReference>
    </payload>
</Communication>

Une Communication est le résultat du traitement d'une CommunicationRequest. On ne peut donc pas “créer” une Communication directement.

Attribut Description
status Etat d'avancement, parmi la liste : preparation, in-progress, suspended, aborted, completed, entered-in-error
sender Référence du Practitionner en émission
recipient Référence du Practitionner en réception
payload Information concernant le document communiqué
based-on Référence de la CommunicationRequest initiale

Cette modélisation est basée sur https://www.hl7.org/fhir/communication.html.

OperationOutcome

{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "processing",
      "diagnostics": "diagnostics"
    }
  ]
}
<OperationOutcome xmlns="http://hl7.org/fhir">
   <issue>
      <severity value="error"/>
      <code value="processing"/>
      <diagnostics value="diagnostics"/>
   </issue>
</OperationOutcome>

Une OperationOutcome est un résultat d'opération, obtenu suite à une demande de communication (CommunicationRequest) ou à l'obtention d'une erreur.

Attribut Description
severity Le niveau d'alerte
fatal, error, warning, information
code Code d'erreur voir la liste complète
diagnostics Informations détaillées (message plus “humain”)
location XPath dans le payload envoyé de l'erreur détectée

Cette modélisation est basée sur https://www.hl7.org/fhir/operationoutcome.html.

Points d'accès

L'API est basé sur le standard REST, la plupart des points d'accès spécifiés par la documentation FHIR sont disponibles. Certaines actions ne sont pas accessibles pour les utilisateurs API par mesure de sécurité (exemple la suppression d'un patient, ou la modification d'un médecin).

Voici la liste des points d'accès les plus utilisés sur l'API dont l'URL de base sur la plateforme de démo est https://api-demo.lifen.fr/fhir.

Practitioner

Méthode URL Usage
GET Practitioner Recherche d'un médecin
GET Practitioner/me Affichage du médecin connecté
GET Practitioner/id Affichage du médecin avec cet identifiant
GET Practitioner Recherche d'un médecin ( liste complète des paramètres de recherche )

Patient

Méthode URL Usage
POST Patient Ajout d'un patient
GET Patient Recherche d'un patient ( liste complète des paramètres de recherche )
GET Patient/id Consultation d'un patient

Binary

Méthode URL Usage
POST Binary Ajout d'un fichier
GET Binary/id Consultation d'un fichier

DocumentReference

Méthode URL Usage
POST DocumentReference Ajout d'un document
GET DocumentReference/id Consultation d'un document
GET DocumentReference Recherche d'un document ( liste complète des paramètres de recherche )

CommunicationRequest & Communication

Méthode URL Usage
POST CommunicationRequest Envoi d'un document médical
GET CommunicationRequest Recherche des demandes de communication ( liste complète des paramètres de recherche )
GET CommunicationRequest/id Consultation d'une demande de communication
GET Communication Recherche des communications ( liste complète des paramètres de recherche )
GET Communication/id Consultation d'une communication

Erreurs

Exemple d'erreur :

{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "processing",
      "diagnostics": "diagnostics"
    }
  ]
}
<OperationOutcome xmlns="http://hl7.org/fhir">
   <issue>
      <severity value="error"/>
      <code value="processing"/>
      <diagnostics value="diagnostics"/>
   </issue>
</OperationOutcome>

L'API Lifen utilise les codes d'erreur ci-dessous. Les erreurs sont représentées par des OperationOutcome.

Code Description
403 Not Authorized
Le token utilisé n'est pas ou plus valide
404 Not Found
La resource demandée n'a pu être identifiée
422 Unprocessable Entity
La requête ne correspond pas aux attentes du serveur ou à la spécification FHIR
500 Internal Server Error
Une erreur serveur a été identifiée

OAuth

L'API Lifen utilise le protocole OAuth 2.0. Nous proposons actuellement deux scénarios d'usage :

Flow utilisateur

Ce flow peut s'apparenter à un Lifen Connect : l'utilisateur, une fois connecté à Lifen, va autoriser l'accès de son compte à une application tierce. Le consentement d'usage est donc géré par Lifen. Par la suite les appels API qui utilisent ce token seront nécessairement liés à cet utilisateur.

Il se déroule en deux étapes :

1. Obtention du code

Il faut pour cela rediriger vos utilisateurs vers l'adresse URL ci-dessous. Une fois connectés, ils devront accepter l'usage de votre application puis seront redirigés vers votre application avec un code secret.

Requête HTTP

GET https://api.lifen.fr/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE

Paramètre Obligatoire ? Description
client_id oui il s'agit du client ID communiqué par Lifen
response_type oui l'usage de ce flow nécessite la valeur code
redirect_uri oui Détermine l'URL de redirection. La valeur doit correspondre à celle fournie lors de la création de l'application. Le code et le state seront présents dans les paramètres URL
state fortement recommandé Une chaine de caractères aléatoire, permet d'éviter les attaques CSRF

2. Echange du code contre un access token

Une fois le code récupéré, vous devez l'échanger contre un access token. Pour cela, votre serveur doit effectuer la requête suivante :

Exemple de réponse : (JSON uniquement)

{
  "access_token" : "bbf926bd-3383-4260-9403-cab4a09a9946",
  "refresh_token" : "466d345d-5a6e-4eb3-9bba-d7f2cb69affc",
  "token_type" : "bearer",
  "expires_in" : 86400,
  "scope" : "scope1 scope2"
}

Requête HTTP

POST https://oauth-demo.lifen.fr/oauth/token?grant_type=authorization_code&redirect_uri=REDIRECT_URI&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=CODE

Paramètre Obligatoire ? Description
client_id oui il s'agit du client ID communiqué par Lifen
client_secret oui il s'agit du client secret communiqué par Lifen
grant_type oui l'usage de ce flow nécessite la valeur authorization_code
redirect_uri oui la valeur doit être identique à celle envoyée précédemment
code oui il s'agit du code obtenu à l'étape précédente

Flow applicatif

Ce flow permet à des applications tierces d'utiliser l'API sans être dépendantes d'un utilisateur. Dans le cas des actions qui peuvent être liées à un utilisateur (ex : envoi d'un courrier médical), il est possible de choisir l'émetteur cependant l'application tierce doit au préalable recueillir le consentement du professionnel de santé.

Il se déroule en une seule étape :

Exemple de réponse : (JSON uniquement)

{
  "access_token" : "bbf926bd-3383-4260-9403-cab4a09a9946",
  "token_type" : "bearer",
  "expires_in" : 86400,
  "scope" : "scope1 scope2"
}

1. Obtention de l'access token

Requête HTTP

POST https://oauth-demo.lifen.fr/oauth/token?grant_type=client_credentials&client_id=<CLIENT_ID&client_secret=CLIENT_SECRET

Paramètre Obligatoire ? Description
client_id oui il s'agit du client ID communiqué par Lifen
client_secret oui il s'agit du client secret communiqué par Lifen
grant_type oui l'usage de ce flow nécessite la valeur client

Authentification

Une fois un token obtenu, il est nécessaire de l'utiliser pour accéder aux points d'accès de l'API. L'usage de ce token, sous réserve qu'il soit valide, peut se faire de deux manières différentes :

via un header HTTP

Authorization: Bearer VALID_TOKEN

Ex : curl -X GET -H "Authorization: bearer VALID_TOKEN" "https://api-demo.lifen.fr/fhir/Practitioner"

via un paramètre d'URL

?access_token=VALID_TOKEN

Ex : curl -X GET "https://api-demo.lifen.fr/fhir/Practitioner?access_token=VALID_TOKEN"

Si le token n'est pas ou plus valide, une erreur 403 sera renvoyée.

Formats

XML ou JSON

L'API propose deux formats de données : XML (format par défaut) et JSON. Ce choix peut-être renseigné de deux manières différentes :

via un header HTTP

Accept : application/xml ou Accept : application/json

Ex : curl -X GET -H "Accept : application/json" "https://api-demo.lifen.fr/fhir/Practitioner"

via un paramètre d'URL

?_format=xml" ou ?_format=json"

Ex : curl -X GET "https://api-demo.lifen.fr/fhir/Practitioner?_format=json"

Réponse lors de la création de ressource

L'API propose deux formats de réponse lors d'un POST. Le format est sélectionable via un header HTTP.

Header Réponse du serveur
Prefer: return=OperationOutcome Ressource OperationOutcome
Prefer: return=representation Ressource complète créée lors de l'appel

Usage

Rechercher un professionnel de santé

{
    "resourceType": "Bundle",
    "id": "2173e03d-8151-409b-9412-ea1096e7aa22",
    "meta": {
        "lastUpdated": "2018-05-17T10:16:53.292+00:00"
    },
    "type": "searchset",
    "total": 1,
    "link": [
        {
            "relation": "self",
            "url": "https://api-demo.lifen.fr/fhir/dstu3/Practitioner?name=eclancher"
        }
    ],
    "entry": [
        {
            "fullUrl": "https://api-demo.lifen.fr/fhir/dstu3/Practitioner/9201",
            "resource": {
                "resourceType": "Practitioner",
                "id": "9201",
                "meta": {
                    "versionId": "3",
                    "lastUpdated": "2018-04-05T14:03:33.000+00:00"
                },
                "identifier": [
                    {
                        "system": "urn:oid:1.2.250.1.71.4.2.1",
                        "value": "810004085790"
                    },
                    {
                        "system": "http://lifen.fr/fhir/Identifier/practitioner-rpps",
                        "value": "10004085790"
                    }
                ],
                "active": true,
                "name": [
                    {
                        "use": "official",
                        "text": "William Eclancher",
                        "family": "Eclancher",
                        "given": [
                            "William"
                        ],
                        "prefix": [
                            "DR"
                        ]
                    }
                ],
                "telecom": [
                    {
                        "id": "1967837",
                        "system": "url",
                        "value": "http://honestica.com/fhir/identifier/lifen",
                        "use": "work",
                        "period": {
                            "start": "2018-04-03"
                        }
                    },
                    {
                        "id": "76407",
                        "extension": [
                            {
                                "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                "valueCoding": {
                                    "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                    "code": "mssante",
                                    "display": "MSSanté"
                                }
                            }
                        ],
                        "system": "email",
                        "value": "william.eclancher@medecin.mssante.fr",
                        "use": "work",
                        "period": {
                            "start": "2018-02-22"
                        }
                    },
                    {
                        "id": "45338",
                        "extension": [
                            {
                                "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                "valueCoding": {
                                    "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                    "code": "mssante",
                                    "display": "MSSanté"
                                }
                            }
                        ],
                        "system": "email",
                        "value": "william.eclancher@aura.mssante.fr",
                        "use": "work",
                        "period": {
                            "start": "2018-02-22"
                        }
                    },
                    {
                        "id": "17288",
                        "extension": [
                            {
                                "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                "valueCoding": {
                                    "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                    "code": "apicrypt",
                                    "display": "Apicrypt"
                                }
                            }
                        ],
                        "system": "email",
                        "value": "William.ECLANCHER@medical75.apicrypt.org",
                        "use": "work",
                        "period": {
                            "start": "2018-02-22"
                        }
                    }
                ],
                "address": [
                    {
                        "id": "1017702",
                        "use": "work",
                        "line": [
                            "CABINET DU DR HOUSE",
                            "DR WILLIAM ECLANCHER",
                            "SERVICE RAPIDE",
                            "37 RUE ::",
                            "RESIDENCE DES RESIDANTS.",
                            "89020 CICHY"
                        ],
                        "city": "cichy",
                        "postalCode": "89020",
                        "period": {
                            "start": "2018-02-22"
                        }
                    },
                    {
                        "id": "371302",
                        "use": "work",
                        "line": [
                            "CABINET DU DR WILLIAM ECLANCHER",
                            "DR WILLIAM ECLANCHER",
                            "11 RUE CHARLES TELLIER",
                            "75016 PARIS"
                        ],
                        "city": "Paris",
                        "postalCode": "75016",
                        "country": "FRA",
                        "period": {
                            "start": "2018-02-22"
                        }
                    }
                ],
                "qualification": [
                    {
                        "code": {
                            "coding": [
                                {
                                    "system": "urn:oid:1.2.250.1.213.2.28",
                                    "code": "SM53",
                                    "display": "Spécialiste en Médecine Générale"
                                }
                            ],
                            "text": "Spécialiste en Médecine Générale"
                        }
                    },
                    {
                        "code": {
                            "coding": [
                                {
                                    "system": "urn:oid:1.2.250.1.71.1.2.7",
                                    "code": "10",
                                    "display": "Médecin"
                                }
                            ],
                            "text": "Médecin"
                        }
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        }
    ]
}
<Bundle xmlns="http://hl7.org/fhir">
    <id value="3d10fad1-ed01-41c3-be08-9045ad948d8f"/>
    <meta>
        <lastUpdated value="2018-05-17T10:18:01.343+00:00"/>
    </meta>
    <type value="searchset"/>
    <total value="1"/>
    <link>
        <relation value="self"/>
        <url value="https://api-demo.lifen.fr/fhir/dstu3//Practitioner?name=eclancher"/>
    </link>
    <entry>
        <fullUrl value="https://api-demo.lifen.fr/fhir/dstu3/Practitioner/9201"/>
        <resource>
            <Practitioner xmlns="http://hl7.org/fhir">
                <id value="9201"/>
                <meta>
                    <versionId value="3"/>
                    <lastUpdated value="2018-04-05T14:03:33.000+00:00"/>
                </meta>
                <identifier>
                    <system value="urn:oid:1.2.250.1.71.4.2.1"/>
                    <value value="810004085790"/>
                </identifier>
                <identifier>
                    <system value="https://api-demo.lifen.fr/fhir/Identifier/practitioner-rpps"/>
                    <value value="10004085790"/>
                </identifier>
                <active value="true"/>
                <name>
                    <use value="official"/>
                    <text value="William Eclancher"/>
                    <family value="Eclancher"/>
                    <given value="William"/>
                    <prefix value="DR"/>
                </name>
                <telecom id="1967837">
                    <system value="url"/>
                    <value value="http://honestica.com/fhir/identifier/lifen"/>
                    <use value="work"/>
                    <period>
                        <start value="2018-04-03"/>
                    </period>
                </telecom>
                <telecom id="76407">
                    <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
                        <valueCoding>
                            <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                            <code value="mssante"/>
                            <display value="MSSanté"/>
                        </valueCoding>
                    </extension>
                    <system value="email"/>
                    <value value="william.eclancher@medecin.mssante.fr"/>
                    <use value="work"/>
                    <period>
                        <start value="2018-02-22"/>
                    </period>
                </telecom>
                <telecom id="45338">
                    <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
                        <valueCoding>
                            <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                            <code value="mssante"/>
                            <display value="MSSanté"/>
                        </valueCoding>
                    </extension>
                    <system value="email"/>
                    <value value="william.eclancher@aura.mssante.fr"/>
                    <use value="work"/>
                    <period>
                        <start value="2018-02-22"/>
                    </period>
                </telecom>
                <telecom id="17288">
                    <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
                        <valueCoding>
                            <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                            <code value="apicrypt"/>
                            <display value="Apicrypt"/>
                        </valueCoding>
                    </extension>
                    <system value="email"/>
                    <value value="William.ECLANCHER@medical75.apicrypt.org"/>
                    <use value="work"/>
                    <period>
                        <start value="2018-02-22"/>
                    </period>
                </telecom>
                <address id="1017702">
                    <use value="work"/>
                    <line value="CABINET DU DR HOUSE"/>
                    <line value="DR WILLIAM ECLANCHER"/>
                    <line value="SERVICE RAPIDE"/>
                    <line value="37 RUE ::"/>
                    <line value="RESIDENCE DES RESIDANTS."/>
                    <line value="89020 CICHY"/>
                    <city value="cichy"/>
                    <postalCode value="89020"/>
                    <period>
                        <start value="2018-02-22"/>
                    </period>
                </address>
                <address id="371302">
                    <use value="work"/>
                    <line value="CABINET DU DR WILLIAM ECLANCHER"/>
                    <line value="DR WILLIAM ECLANCHER"/>
                    <line value="11 RUE CHARLES TELLIER"/>
                    <line value="75016 PARIS"/>
                    <city value="Paris"/>
                    <postalCode value="75016"/>
                    <country value="FRA"/>
                    <period>
                        <start value="2018-02-22"/>
                    </period>
                </address>
                <qualification>
                    <code>
                        <coding>
                            <system value="urn:oid:1.2.250.1.213.2.28"/>
                            <code value="SM53"/>
                            <display value="Spécialiste en Médecine Générale"/>
                        </coding>
                        <text value="Spécialiste en Médecine Générale"/>
                    </code>
                </qualification>
                <qualification>
                    <code>
                        <coding>
                            <system value="urn:oid:1.2.250.1.71.1.2.7"/>
                            <code value="10"/>
                            <display value="Médecin"/>
                        </coding>
                        <text value="Médecin"/>
                    </code>
                </qualification>
            </Practitioner>
        </resource>
        <search>
            <mode value="match"/>
        </search>
    </entry>
</Bundle>

Cette recherche vous permet d'obtenir les informations nécessaires à l'émission d'un document médical (CommunicationRequest) à savoir l'identifiant Lifen des deux professionnels de santé ainsi que l'identifiant Lifen du canal d'envoi sélectionné.

Requête HTTP

GET https://api-demo.lifen.fr/fhir/Practitioner?name=eclancher

GET https://api-demo.lifen.fr/fhir/Practitioner?identifier=810004085790

GET https://api-demo.lifen.fr/fhir/Practitioner?telecom=albert.coeur@medecin.mssante.fr

Paramètre Description
name Recherche sur le nom ou le prénom du médecin
identifier Recherche sur le RPPS complet
Ex: 810004085790 (et non 10004085790)
telecom Recherche par email complet
Ex: albert.coeur@medecin.mssante.fr

Pour l'instant, l'utilisation de ces trois paramètres de recherche est exclusive. Ils ne peuvent pas être combinés pour effectuer une recherche multi-critères.

Réponse

La réponse est une ressource de type Bundle qui liste les professionnels de santé (Practitioner) qui correspondent aux critères de recherche.

Dans certains cas, le destinataire n'est pas présent dans l'annuaire, il est possible de créer une nouvelle entité avec une adresse postale pour lui adresser un courrier.

Ajouter un Patient

Les identifiants des adresses sont générés par l'API.

Il est possible de recevoir en réponse la ressource Patient nouvellement créé. (Voir : Formats. )

Requête HTTP

POST GET https://api-demo.lifen.fr/fhir/Patient


     {
                "resourceType": "Patient",
                "name": [
                    {
                        "family": "Durand",
                        "given": [
                            "Jean"
                        ]
                    }
                ],
                "birthDate": "2003-03-03",
                "address": [
                    {
                        "line": [
                            "M. et Mme DURAND",
                            "142 RUE MONTMARTRE",
                            "75002 PARIS"
                        ],
                        "city": "Paris",
                        "postalCode": "75002",
                        "country": "FRA",
                        "period": {
                            "start": "2018-02-07"
                        }
                    }
                ]
       }

<Patient xmlns="http://hl7.org/fhir">
    <name>
        <family value="Durand"/>
        <given value="Jean"/>
    </name>
    <birthDate value="2003-03-03"/>
    <address>
        <line value="M. et Mme DURAND"/>
        <line value="DR WILLIAM ECLANCHER"/>
        <line value="142 RUE MONTMARTRE"/>
        <line value="75002 PARIS"/>
        <city value="Paris"/>
        <postalCode value="75002"/>
        <country value="FRA"/>
        <period>
            <start value="2018-02-07"/>
        </period>
    </address>
</Patient>

Contraintes d'utilisation de la resource Patient

La référence de Patient peut être utilisée à différents endroits :

CommunicationRequest.subject pour faciliter l'intégration du compte-rendu dans le logiciel métier (page de couverture du compte-rendu pour l'envoi postal ou dans l'entête HPRIM pour l'envoi Apicrypt).

CommunicationRequest.recipient pour émettre le compte-rendu au patient (courrier postal seulement).

Champ Contraintes d'usages
name Obligatoire pour tous les cas d'utilisation
birthDate Vivement conseillé pour faciliter l'intégration du compte rendu dans le logiciel métier du destinataire
address Obligatoire dans le cas de l'utilisation du patient en tant que recipient de la CommunicationRequest

Rechercher un patient

GET https://api-demo.lifen.fr/fhir/Patient?name=durant ( liste complète des paramètres de recherche )

{
    "resourceType": "Bundle",
    "id": "5d3c2119-c242-48a0-b29c-0d275ffbbf8d",
    "meta": {
        "lastUpdated": "2018-05-17T14:15:05.357+00:00"
    },
    "type": "searchset",
    "total": 1,
    "link": [
        {
            "relation": "self",
            "url": "https://api-demo.lifen.fr/fhir/dstu3/Patient?name=durant"
        }
    ],
    "entry": [
        {
            "fullUrl": "https://api-demo.lifen.fr/fhir/dstu3/Patient/571224",
            "resource": {
                "resourceType": "Patient",
                "id": "571224",
                "meta": {
                    "versionId": "1",
                    "lastUpdated": "2018-04-16T10:28:14.000+00:00"
                },
                "name": [
                    {
                        "family": "Jean",
                        "given": [
                            "Durant"
                        ]
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        }
    ]
}

Ajouter une Organization

Les identifiants des adresses sont générés par l'API.

Il est possible de recevoir en réponse la ressource Organization nouvellement créé. (Voir : Formats. )

Requête HTTP

POST https://api-demo.lifen.fr/fhir/Organization

{
    "resourceType": "Organization",
    "type": [
        {
            "coding": [
                {
                    "system": "http://hl7.org/fhir/organization-type",
                    "code": "other",
                    "display": "Other"
                }
            ]
        }
    ],
    "name": "Service de radiologie",
    "address": [
        {
            "line": [
                "Service de radiologie",
                "18 rue de Paris",
                "Hôpital de Paris",
                "75000 Paris"
            ]
        }
    ]
}
<Organization xmlns="http://hl7.org/fhir">
    <type>
        <coding>
            <system value="http://hl7.org/fhir/organization-type"/>
            <code value="other"/>
            <display value="Other"/>
        </coding>
    </type>
    <name value="Service de radiologie"/>
    <address>
        <line value="Service de radiologie"/>
        <line value="18 rue de Paris"/>
        <line value="Hôpital de Paris"/>
        <line value="75000 Paris"/>
    </address>
</Organization>

Uploader un fichier

Exemple de réponse (201) :

{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "id": "123456",
      "severity": "information",
      "diagnostics": "File uploaded."
    }
  ]
}
<OperationOutcome xmlns="http://hl7.org/fhir">
   <id value="11e71a8e-8965-881f-8652-0242ac110006"/>
   <issue>
      <severity value="information"/>
      <diagnostics value="File uploaded."/>
   </issue>
</OperationOutcome>

Pour ajouter un fichier (Binary) avant d'envoyer une CommunicationRequest il suffit d'effectuer la requête ci-dessous avec comme payload le fichier (représentation binaire).

L'identifiant de l’OperationOutcome correspond à l'identifiant du Binary ainsi créé (dans le cas présent 123456).

Requête HTTP

POST https://api-demo.lifen.fr/fhir/Binary

Consulter un fichier

Il est possible de consulter un fichier (Binary) si l'on connaît son identifiant unique. Le header “Content-Type” permet de spécifier le retour souhaité. Le header application/{"Content-Type":"application/*"} retourne un fichier binaire et le header application/{"Content-Type":"application/fhir+xml"} ou application/{"Content-Type":"application/fhir+json"} retourne le fichier sous format FHIR (avec le fichier encodé en base-64).

Requête HTTP

GET https://api-demo.lifen.fr/fhir/Binary/id

Envoyer un document médical

Exemple de réponse :

{
  "resourceType": "OperationOutcome",
  "id": "156486",
  "issue": [
    {
      "severity": "information",
      "diagnostics": "CommunicationRequest accepted"
    }
  ]
}
<OperationOutcome xmlns="http://hl7.org/fhir">
   <id value="156486"/>
   <issue>
      <severity value="information"/>
      <diagnostics value="CommunicationRequest accepted"/>
   </issue>
</OperationOutcome>

Une fois les identifiants des professionnels de santé et du canal à utiliser récupérés, il suffit de communiquer un payload représentant une CommunicationRequest (exemple).

Gestion de l'émetteur

Dans le cas d'un flow utilisateur, l'émetteur est déterminé automatiquement à partir du token utilisé. Dans le cas d'un flow applicatif, l'émetteur doit être renseigné.

Suivre l'envoi d'un courrier médical

Une CommunicationRequest génère une Communication par destinataire.

Email

Si c'est un email, l'envoi est effectué en temps réel. Le statut va passer à completed immédiatement. Il se peut dans certains cas rares que l'email ne soit pas envoyé (par soucis de stabilité des serveurs Apicrypt et MsSanté par exemple ou car l'adresse déclarée dans l'annuaire est erronée). L'envoi se met alors en état entered-in-error. Lifen traite ces cas d'erreur et renvoit une requête identique.

Courrier papier

Les courriers papiers sont générés quotidiennement, afin de regrouper dans la même enveloppe les éventuels documents addressés à la même adresse. Le statut reste à l'état suspended lorsque que le courrier est en attente d'impression. Il passe à completed lorsque le fichier est envoyé avec succès chez notre prestataire d'éditique pour impression et dépôt à La Poste. Nous traitons aussi les alertes de plis non déposés fournis par La Poste et mettons à jour le courrier dans le status entered-in-error.

Requête HTTP

GET https://api-demo.lifen.fr/fhir/Communication?based-on=CommunicationRequest/570952

Exemple de réponse contenant deux Communication (une Apicrypt et une postale) :

{
    "resourceType": "Bundle",
    "id": "e40b1b0d-109f-494d-a9bb-3807238e7bc1",
    "meta": {
        "lastUpdated": "2018-05-17T15:31:00.608+00:00"
    },
    "type": "searchset",
    "total": 2,
    "link": [
        {
            "relation": "self",
            "url": "https://api-demo.lifen.fr/fhir/dstu3//Communication?based-on=570952"
        }
    ],
    "entry": [
        {
            "fullUrl": "https://api-demo.lifen.fr/fhir/dstu3/Communication/570955",
            "resource": {
                "resourceType": "Communication",
                "id": "570955",
                "basedOn": [
                    {
                        "reference": "CommunicationRequest/570952"
                    }
                ],
                "status": "completed",
                "category": [
                    {
                        "coding": [
                            {
                                "system": "http://lifen.fr/fhir/ValueSet/communication-category",
                                "code": "MEDICAL_REPORT"
                            }
                        ]
                    }
                ],
                "subject": {
                    "reference": "Patient/570953"
                },
                "recipient": [
                    {
                        "extension": [
                            {
                                "url": "http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details",
                                "valueContactPoint": {
                                    "id": "100011",
                                    "extension": [
                                        {
                                            "url": "http://interopsante.org/fhir/structuredefinition/fr-email-domain",
                                            "valueCoding": {
                                                "system": "http://interopsante.org/fhir/valueset/fr-email-domain",
                                                "code": "apicrypt",
                                                "display": "Apicrypt"
                                            }
                                        }
                                    ],
                                    "system": "email",
                                    "value": "david.parlier.aphp@medical75.apicrypt.org",
                                    "use": "work",
                                    "period": {
                                        "start": "2018-02-22"
                                    }
                                }
                            }
                        ],
                        "reference": "Practitioner/15190"
                    }
                ],
                "sent": "2018-04-13T13:20:32+00:00",
                "sender": {
                    "reference": "Practitioner/72188"
                },
                "payload": [
                    {
                        "contentReference": {
                            "reference": "DocumentReference/570775"
                        }
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        },
        {
            "fullUrl": "https://api-demo.lifen.fr/fhir/dstu3/Communication/570957",
            "resource": {
                "resourceType": "Communication",
                "id": "570957",
                "basedOn": [
                    {
                        "reference": "CommunicationRequest/570952"
                    }
                ],
                "status": "suspended",
                "category": [
                    {
                        "coding": [
                            {
                                "system": "http://lifen.fr/fhir/ValueSet/communication-category",
                                "code": "MEDICAL_REPORT"
                            }
                        ]
                    }
                ],
                "subject": {
                    "reference": "Patient/570953"
                },
                "recipient": [
                    {
                        "extension": [
                            {
                                "url": "http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details",
                                "valueAddress": {
                                    "id": "624819",
                                    "use": "work",
                                    "line": [
                                        "CLINIQUE BIZET",
                                        "DR DAVID PARLIER",
                                        "23 RUE GEORGES BIZET",
                                        "75016 PARIS"
                                    ],
                                    "city": "Paris 16e Arrondissement",
                                    "postalCode": "75016",
                                    "period": {
                                        "start": "2018-02-22"
                                    }
                                }
                            }
                        ],
                        "reference": "Practitioner/15190"
                    }
                ],
                "sent": "2018-04-13T13:23:32+00:00",
                "sender": {
                    "reference": "Practitioner/72188"
                },
                "payload": [
                    {
                        "contentReference": {
                            "reference": "DocumentReference/570775"
                        }
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        }
    ]
}
<Bundle xmlns="http://hl7.org/fhir">
    <id value="6c395a98-34cc-4554-bd3b-27284f888ee6"/>
    <type value="searchset"/>
    <total value="2"/>
    <link>
        <relation value="self"/>
        <url value="https://api-demo.lifen.fr/fhir/dstu3//Communication?based-on=570952"/>
    </link>
    <entry>
        <fullUrl value="https://api-demo.lifen.fr/fhir/dstu3/Communication/570955"/>
        <resource>
            <Communication xmlns="http://hl7.org/fhir">
                <id value="570955"/>
                <basedOn>
                    <reference value="CommunicationRequest/570952"/>
                </basedOn>
                <status value="completed"/>
                <category>
                    <coding>
                        <system value="http://lifen.fr/fhir/ValueSet/communication-category"/>
                        <code value="MEDICAL_REPORT"/>
                    </coding>
                </category>
                <subject>
                    <reference value="Patient/570953"/>
                </subject>
                <recipient>
                    <extension url="http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details">
                        <valueContactPoint id="100011">
                            <extension url="http://interopsante.org/fhir/structuredefinition/fr-email-domain">
                                <valueCoding>
                                    <system value="http://interopsante.org/fhir/valueset/fr-email-domain"/>
                                    <code value="apicrypt"/>
                                    <display value="Apicrypt"/>
                                </valueCoding>
                            </extension>
                            <system value="email"/>
                            <value value="david.parlier.aphp@medical75.apicrypt.org"/>
                            <use value="work"/>
                            <period>
                                <start value="2018-02-22"/>
                            </period>
                        </valueContactPoint>
                    </extension>
                    <reference value="Practitioner/15190"/>
                </recipient>
                <sent value="2018-04-13T13:20:32+00:00"/>
                <sender>
                    <reference value="Practitioner/72188"/>
                </sender>
                <payload>
                    <contentReference>
                        <reference value="DocumentReference/570775"/>
                    </contentReference>
                </payload>
            </Communication>
        </resource>
        <search>
            <mode value="match"/>
        </search>
    </entry>
    <entry>
        <fullUrl value="https://api-demo.lifen.fr/fhir/dstu3/Communication/570957"/>
        <resource>
            <Communication xmlns="http://hl7.org/fhir">
                <id value="570957"/>
                <basedOn>
                    <reference value="CommunicationRequest/570952"/>
                </basedOn>
                <status value="completed"/>
                <category>
                    <coding>
                        <system value="http://lifen.fr/fhir/ValueSet/communication-category"/>
                        <code value="MEDICAL_REPORT"/>
                    </coding>
                </category> 
                <subject>
                    <reference value="Patient/570953"/>
                </subject>
                <recipient>
                    <extension url="http://lifen.fr/fhir/StructureDefinition/communicationrequest-recipient-details">
                        <valueAddress id="624819">
                            <use value="work"/>
                            <line value="CLINIQUE BIZET"/>
                            <line value="DR DAVID PARLIER"/>
                            <line value="23 RUE GEORGES BIZET"/>
                            <line value="75016 PARIS"/>
                            <city value="Paris 16e Arrondissement"/>
                            <postalCode value="75016"/>
                            <period>
                                <start value="2018-02-22"/>
                            </period>
                        </valueAddress>
                    </extension>
                    <reference value="Practitioner/15190"/>
                </recipient>
                <sent value="2018-04-13T13:23:32+00:00"/>
                <sender>
                    <reference value="Practitioner/72188"/>
                </sender>
                <payload>
                    <contentReference>
                        <reference value="DocumentReference/570775"/>
                    </contentReference>
                </payload>
            </Communication>
        </resource>
        <search>
            <mode value="match"/>
        </search>
    </entry>
</Bundle>

Une fois la CommunicationRequest validée, il est possible d'accéder aux envois (Communication) réalisés ainsi qu'à l'avancement de leur traitement.

Requête HTTP

GET https://api-demo.lifen.fr/fhir/Communication?based-on=COMMUNICATION_REQUEST_ID

Historique des envois effectués

Il est possible d'effectuer des recherches dans les CommunicationRequest passées par émetteur, patient, destinataire, date… ( liste complète des paramètres de recherche )

Il est par ailleurs possible de consulter toutes les Communication rattachées au token utilisé pour effectuer les CommunicationRequests via le endpoint GET https://api.lifen.fr/fhir/Communication.

Requête HTTP

GET https://api-demo.lifen.fr/fhir/CommunicationRequest

Paramètre Description
id Identifiant de la CommunicationRequest
status  État de la CommunicationRequest
authored Date de la CommunicationRequest (voir https://www.hl7.org/fhir/search.html#date )
_count et _getpagesoffset Paramètres de pagination

Exemple

GET https://api-demo.lifen.fr/fhir/CommunicationRequest?_count=20&_getpagesoffset=0&status=active&authored=gt2017-07-28T00%3A00%3A00%2B00%3A00

Réponse

La réponse est une ressource de type Bundle qui liste les demandes de communication(CommunicationRequest) qui correspondent aux critères de recherche.

Intégrations

La liste des librairies proposées ci-dessous n'a pas vocation à être exclusive, elle ne mentionne que les librairies utilisées en interne ou par d'autres partenaires ayant déjà intégré l'API Lifen.

Clients OAuth Lifen

Clients FHIR