# 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.

  1. Dans la section Intégrations de l'application Curecall, cliquez sur le bouton + Nouvelle application et indiquez le nom.
  2. Récupérez vos identifiants : un nom d'application à mettre dans le header x-app-name et une clé à mettre dans le header x-api-key de vos requêtes.
  3. 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

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.