#
Interopérabilité par API HTTPS
#
Principe de fonctionnement
Le logiciel tiers déverse en continu les informations suivantes pour les patients :
- Numéro unique patient
- Identité : Prénom, Nom, Date de naissance
- Contact : Numéro de téléphone
- Données de rendez-vous : Identifiant unique, motif, date
- Données de séjour, pré-admission : Identifiant unique, date de début, date de fin
- Toute autre donnée souhaitée
Chaque message envoyé à l'API Curecall peut ne contenir qu'une partie de ces données, la seule information requise est l'identifiant unique du patient.
Le logiciel tiers peut donc envoyer un message à Curecall lorsqu'un rendez-vous est créé, modifié, supprimé. Ou bien lorsqu'un patient est mis à jour, etc... En tenant Curecall informé des changements au fur et à mesure, Curecall reste à jour des modifications.
#
Mise en place
Créer une Application Interopérabilité dans Curecall. Cette Application servira de source d'authentification pour les
requêtes effectuées par le logiciel tiers.
- Dans la section Intégrations de l'application Curecall, cliquez sur le bouton + Nouvelle application et indiquez le nom.
- Récupérez vos identifiants : un nom d'application à mettre dans le header
x-app-nameet une clé à mettre dans le headerx-api-keyde vos requêtes. - Testez votre connexion à l'API Curecall en effectuant une requête à l'endpoint GET /v2/interop/patients/. Si vous êtes correctement connecté, cette requête retournera un code 200.
#
Authentification
L'accès à l'API HTTPS de Curecall est protégé par une clé fournie pour chaque client.
Si le logiciel à connecter le permet, la connexion peut être protégée par OAuth2 au lieu d'une clé d'API.
#
Envoyer des informations patient à Curecall
L'envoi d'informations patient à Curecall se fait via la route
PUT https://api.curecall.com/v2/interop/sync-patient
Lorsque le logiciel tiers ne peut se conformer à cette structure de donnée, Curecall met en place un connecteur sur-mesure pour ce logiciel, une autre route sera utilisée.
Cette route attend un payload du type :
type SyncPatientPayload = {
"patient": {
"remoteId": string, // unique ID from source software
"firstname"?: string,
"lastname"?: string,
"phone"?: string,
"mail"?: string,
"birthdate"?: Date,
"locale"?: "fr" | "en",
"gender"?: "UNKNOWN" | "MALE" | "FEMALE" | "NA",
"isArchived"?: boolean // Disables Curecall followups on a Patient
},
"event":
| 'PATIENT_ADMITTED'
| 'PATIENT_TRANSFERRED'
| 'PATIENT_DISCHARGED'
| 'PATIENT_REGISTERED'
| 'PATIENT_PRE_ADMITTED'
| 'PATIENT_CONSULTATION_UPDATED'
| 'PATIENT_CONSULTATION_CANCELLED'
"visit"?: {
"number": string;
"assigningAuthority"?: string | string[];
"numberType"?: string;
"admissionTime"?: Date;
"dischargeTime"?: Date;
"patientClass"?: string;
"admissionType"?: string;
"ufMedId"?: string;
"ufCareId"?: string;
[key: string]: any;
},
"consultation"?: {
"remoteId"?: string, // The unique ID from source software
"date": Date,
[key: string]: any, // Any other properties, like
},
"consultationsToRemove"?: string[], // Array of remoteId from source software to remove in Curecall
}
Les champs non-obligatoires sont marqués par un ?.
Si tout s'est bien passé, cette route renvoie :
{ success: true, message: 'data received' };
Sinon
{ success: false, message: 'data not stored' };
L'état d'importation de chaque donnée patient peut être consulté dans le logiciel Curecall.
#
Récupérer des données récoltée par Curecall
#
Webhook
Curecall envoie automatiquement les compte-rendus PDF générés, au moment où ils sont disponibles, sur les URL fournies à l'avance (webhooks) dans l'Application.
Cette requête est un POST :
curl -X 'POST' \
'${webhook_pdf_url}?patientId=${patient.remoteId}' \
-H 'accept: */*' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@patient-report.pdf;type=application/pdf'
#
Polling
Pour récupérer les compte-rendus PDF disponibles, deux routes sont en place :
La première permet de récupérer une liste des rapports générés entre deux dates (startDate et endDate)
GET https://api.curecall.com/v2/interop/reports?endDate=2023-10-13T20%3A00%3A00&startDate=2023-10-10T20%3A00%3A00
returns:
[
{
"id": 1163, # Report ID
"reportAvailable": true, # Will always be true
"generatedAt": "2023-04-14T12:40:08.000Z", # Date at which the report was generated
"patientRemoteId": "qweqwe" # Patient remoteId
}
]
La seconde permet de récupérer le contenu d'un rapport par son ID (récupéré précédemment) :
GET https://api.dev.curecall.com/v2/interop/reports/{id}
Le PDF est renvoyé en body, avec un header content-type: application/pdf.
Par défaut, le nom du PDF est {patient.remoteId}-{reportId}.pdf.