issueForAppointment
La secrétaire pointe une arrivée dans votre agenda, sans passage borne : demandez le numéro à ApiBorne pour que la séquence reste partagée avec les check-ins borne — et que le ticket apparaisse au Cockpit.
/api/kioskTicket/issueForAppointmentPourquoi ce service existe
Dans un établissement équipé, un patient peut être accueilli de deux façons : à la borne (qui réserve son ticket auprès d'ApiBorne au check-in) ou au guichet, quand la secrétaire pointe l'arrivée directement dans votre agenda. Si votre système numérotait seul ces arrivées guichet, il y aurait deux séquences divergentes : doublons de numéros, ordre d'appel faux sur les écrans, Cockpit incohérent.
Ce service vous donne un numéro pris dans la même séquence que les bornes — préfixe du type d'examen et décalage du lieu inclus — et rend le ticket immédiatement visible au Cockpit, comme un check-in borne.
Authentification : AUTH_KEY et licenceUuid
AUTH_KEY est la « Clé d'autorisation compte » : le secret partagé de l'intégration, affiché dans l'admin ApiBorne → page Connectivité (champ copiable) et remis à votre système à l'installation. C'est la même clé que celle que vous validez en X-Kiosk-Auth-Key sur les appels entrants — ici elle s'envoie dans le header Authorization, brute (sans préfixe Bearer).
Le licenceUuid vient de la même page Connectivité : c'est l'identifiant (pas un secret) qui désigne la licence cible dans le corps de chaque appel.
Requête et réponse
# AUTH_KEY = la clé d'autorisation compte (la même que X-Kiosk-Auth-Key), envoyée BRUTE
curl -sS "$APIBORNE/api/kioskTicket/issueForAppointment" \
-H "Authorization: $AUTH_KEY" -H 'Content-Type: application/json' -d '{
"licenceUuid": "ecdb8b76-…",
"officePlaceId": 1,
"requestUid": "ris:1001:6f2c…",
"prefix": "SC",
"examTypeId": 2,
"examTypeLabel": "SCANNER",
"contractAppointmentId": "1001~8f3a…",
"patientDisplayName": "Marie DURAND",
"examLabel": "SCANNER THORACIQUE"
}'
# → 200 { "number": 12, "formattedNumber": "SC-12", "day": "2026-07-21" }officePlaceId: le lieu du RDV (référentiel partagé/config/office-places) — il détermine la séquence et le décalage ;prefix: optionnel — sans lui, ApiBorne calcule le préfixe depuis sa configuration (préfixes par type d'examen) à partir d'examTypeId/examTypeLabel;patientDisplayName/examLabel: affichés au Cockpit sur la ligne du ticket.
Ce que vous récupérez et devez en faire
- Adoptez le numéro :
number/formattedNumberdeviennent le ticket d'appel du RDV chez vous — stockez-les sur le RDV et affichez-les dans votre agenda (c'est ce numéro que les écrans d'appel montreront) ; - Renvoyez-le ensuite sur le contrat : ce ticket est celui que vous exposez dans
ticketNumber/ticketNumberFormatteddu RDV — la borne dira « enregistrement déjà effectué, ticket N°SC-12 » si le patient repasse ; - En cas d'échec (réseau, serveur indisponible) : basculez sur votre numérotation locale — pointer une arrivée ne doit jamais échouer à cause d'ApiBorne.
requestUid : unique par génération
requestUid protège un rejeu réseau du même appel — pas plus. Annuler l'arrivée puis re-pointer doit consommer un nouveau uid, donc un nouveau numéro.Implémentation de référence
// src/server/apiborne/client.ts (démo) — extrait
const data = await post("/api/kioskTicket/issueForAppointment", {
...payload, // licenceUuid
officePlaceId: Number(getSetting("officeId") ?? 0),
requestUid: `demo-ris:${contractAppointmentId}:${crypto.randomUUID()}`,
prefix: ticketPrefix,
contractAppointmentId,
patientDisplayName,
examLabel: appointment.exam_label,
});
if (!data?.number || !data.formattedNumber) {
return null; // ← repli : numérotation LOCALE, jamais bloquer
}Voir le fichier complet sur GitHub → (déclenché dans actions.ts au pointage d'une arrivée).
