Identifier un patient
Le premier appel du parcours : rechercher les patients correspondant aux critères (lecture carte de santé ou saisie manuelle) et renvoyer, pour chacun, ses rendez-vous du jour.
/patients/identify{editorBaseUrl}/api/apiborneIntegrationService/v1Auth : X-Kiosk-Auth-Key + X-Kiosk-Device-IdRoute obligatoirePourquoi cette route existe
C'est la porte d'entrée du parcours : le patient lit sa carte de santé ou saisit ses informations, et la borne doit retrouver chez vous LE bon patient et ses RDV du jour. Tout le reste (vérification d'identité, documents, check-in) s'appuie sur les identifiants renvoyés ici — c'est l'étape 1 de la séquence ci-dessous.
C'est aussi l'appel le plus sensible du contrat : trop laxiste, il expose les RDV d'un homonyme ; trop strict, il renvoie le patient au guichet. D'où les règles de combinaison des critères qui suivent.
Sémantique
- Tous les critères fournis sont combinés ; le NIR prime quand il est présent et doit tolérer les espaces. Attention aux cartes famille : le NIR seul est partagé par tous les bénéficiaires — ce sont les critères d'identité qui les discriminent.
- Aucun résultat n'est pas une erreur :
200avecpatients: []. - Un patient trouvé sans RDV du jour est renvoyé avec
appointments: [](la borne affiche un message adapté). - Avec
config.identification.twoFieldsIdentification: true, tentez aussi les recherches croisées à deux champs (nom+date, prénom+date, nom+prénom) quand la recherche stricte ne donne rien.
Requête
curl -sS "$BASE/patients/identify" "${AUTH[@]}" -d '{
"context": { "locationId": "loc-42", "config": { "identification": { "twoFieldsIdentification": true } } },
"criteria": { "socialSecurityId": "280057510612345", "lastName": "DURAND", "firstName": "MARIE", "birthDate": "1980-05-12" }
}'birthDate en ISO YYYY-MM-DD. Les variables $BASE et $AUTH sont définies dans le démarrage rapide.
Réponse
{
"patients": [
{
"patient": {
"id": "pat-77", "firstName": "Marie", "lastName": "Durand",
"birthDate": "1980-05-12", "sex": "female",
"email": "marie.durand@example.com", "mobilePhone": "+33612345678",
"address": { "line1": "12 rue des Lilas", "line2": null, "zipCode": "75011", "city": "Paris" },
"socialSecurityId": "280057510612345", "heightCm": 168, "weightKg": 62,
"referringPractitioner": { "name": "MARTIN Paul", "rppsId": "10101010101" },
"vendorData": { "patientKey": 77 }
},
"appointments": [
{
"id": "apt-1001", "patientId": "pat-77",
"startDate": "2026-07-19T10:30:00+02:00", "convocationDate": "2026-07-19T10:15:00+02:00",
"locationId": "loc-42", "examId": "exam-77", "examTypeId": "examtype-9",
"examLabel": "IRM lombaire", "status": "scheduled",
"prescriber": null, "ticketNumber": null, "ticketNumberFormatted": null,
"managementPageUrl": "https://ris.example.com/p/apt-1001",
"vendorData": { "appointmentKey": 1001 }
}
]
}
]
}Points d'attention
patients: []. Limitez raisonnablement le nombre de patients renvoyés (10 max recommandé).Ne proposez que des RDV éligibles au parcours : un RDV cancelled ne doit pas apparaître dans appointments — la borne ferait dérouler tout le flux au patient pour échouer au check-in.
Implémentation de référence
src/app/api/apiborneIntegrationService/v1/patients/identify/route.ts → — recherche multi-critères combinés (SQL) avec normalisation du NIR, cap à 10 résultats, RDV annulés exclus.
