Check-list de conformité
Deux listes complémentaires : les engagements du contrat à respecter dans votre code, et les tests concrets à dérouler contre votre implémentation — tous passent contre la démo de référence.
Conformité au contrat
- Base path exact
/api/apiborneIntegrationService/v1/, JSON camelCase, dates ISO 8601. - Les 2 headers d'auth validés sur toutes les routes (401 typés, device d'abord).
context.confighonoré ; aucun appel sortant vers le serveur ApiBorne pendant un parcours.- Propriétés inconnues de
context.config.*ignorées silencieusement. - Erreurs au format
{ "error": { code, message, details } }avec les statuts du contrat. - Identifiants opaques stables pendant tout un parcours ; un
appointment.idne doit jamais valoir littéralementby-code(collision de route). identify: tous critères combinés, NIR prioritaire,patients: []si rien.by-ticket:404 UNKNOWN_APPOINTMENTindifférencié (ticket inconnu ou naissance non concordante) ; la limitation de débit du parcours Pass est assurée par le serveur ApiBorne, pas par vous.- Identifiants de RDV non énumérables (pas de séquence) : l'app Pass recharge un RDV par
GET /appointments/{id}sans date de naissance. - Upload : ≥ 10 Mo acceptés, réponse en moins de 60 s, 413 typé au-delà de votre limite.
- Check-in idempotent (rejeu après timeout → même ticket).
notification-readinessrépond toujours (au pire{ "ready": true }).deferExternalNotificationhonoré (arrivée enregistrée, notification reportée,awaitingExternalNotification: true) — ou ignoré, jamais rejeté.PUT statusaccepteclosed; un système à un seul état final le mappe surclosedet traitedonecomme intermédiaire.downloadAppointmentDocument: pages en base64 sans préfixedata:, ou404 UNKNOWN_DOCUMENTsystématique si vous ne servez pas les contenus.- Les extensions passent par
vendorData— la spec de référence n'est jamais modifiée.
Tests exécutables
Comment dérouler ces tests (curl en local, ngrok, sonde config-check, banc de test des endpoints de l'admin avec vos propres entrées) : voir le guide Tester votre implémentation.
identifysans headers →401avec un corps normalisé.identifyavec un NIR contenant des espaces → le patient est trouvé.by-codeavec un code inconnu →404 UNKNOWN_APPOINTMENT.check-inavec unproposedTicket→ la réponse reprend ce ticket.- Le même
check-inrejoué →200avec le même ticket (pas de doublon). check-ind'un RDV terminé/annulé →409 ALREADY_CHECKED_IN.- Upload au-delà de votre limite →
413 UPLOAD_TOO_LARGE. PUT statusen arrière (inCare → checkedIn) →200sans effet.staff/sign-inavec de mauvais identifiants →401 INVALID_CREDENTIALS.PUT statusclosedpuisdone→200sans effet (progression avant uniquement).notify-external-systemsur un RDV non accueilli →409; rejoué sur un RDV déjà notifié →200sans renotifier.
Ces tests passent contre l'implémentation de référence (sauf la notification différée, pas encore couverte par la démo) : lancez-la en local (port 3020) et comparez vos réponses aux siennes, à l'octet près.
