Hub Rdv ANTS

Avoir un service pour servir à l'ANTS les RdV pour les demandes de CNI et passeports disponibles de nos clients. Il doit aussi permettre de lister les RdV pris pour des identifiants de pré-demande ANTS. Il sera alimenté par une application "optionnelle" (activé par la configuration d'une apikey) dans chrono.

Le besoin

API ANTS: https://rendez-vous-api.france-identite.fr/docs

Tous les appels sont authentifiés via un entête HTTP "X-Hub-Rdv-Auth-Token".

Endpoints à exposer :

Le hub

Le but du hub est d'aggréger les données des clients pour :
1. éviter que le hub de l'ANTS ne vienne charger l'infra Publik à moissonner tous nos clients avec beaucoup de requêtes
2. mutualiser les réponses entre clients
3. avoir du code pas tellement pertinent dans Publik
4. avoir un modèle économique pour la fourniture du service (abonnement)
5. permettre au client à nous de ne pas avoir à gérer le raccordement pour chacun d'entre eux (un seul token pour Entr'ouvert)

Modèle de donnée

left to right direction
skinparam linetype ortho

title Modèle de donnée Hub RdV ANTS


class "Raccordement" as raccordement
class "Collectivité" as coll
class "Lieu" as lieu
class "Plage horaire" as plage
class "Type de rendez-vous" as type
class "Rendez-vous" as rdv

raccordement "1" -- "*" coll
coll "1" -- "*" lieu
lieu "1" -- "*" plage
plage "*" -- "1" type
lieu "1" -- "*" rdv
coll "1" -- "*" type
lieu "1" -- "*" type

class raccordement {
  nom* : str, unique
  ==
  apikey : str, unique
}

class coll {
  nom : str, unique in raccordement
  id : slug, unique in raccordement
  ==
  url : url
  logo_url : url
  rdv_url : url
  gestion_url : url
  annulation_url : url
}

class type {
  nom : str -- one of CNI, PASSPORT, CNI-PASSPORT, RETRIEVAL
}


Class "Lieu de RdV" as lieu {
  id : slug, unique in collectivité
  nom : str
  ==
  numero_rue : str
  code_postal : str
  ville : str
  longitude : float
  latitude : float
  url : url
  rdv_url : url
  gestion_url : url
  annulation_url : url
}


class plage {
  date : date
  heure_debut : time
  heure_fin : time
  duree : integer, minutes
  ==
}


class rdv {
  id : str, identifiant de prédemande, unique pour la collectivité
  ==
  date : datetime
  gestion_url : str
  annulation_url : str
}

Implémentation

Fonctionnement

Le hub expose deux blocs d'APIs:

API pour l'ANTS

URL de prise de rendez-vous ou de gestion: le hub fera relai pour ne pas exposer les URLs réelles des raccordements :

https://ants.entrouvert.com/rdv/10-ville-de-machin/11-lieux-truc/CNI/20200110T1200/
https://ants.entrouvert.com/gestion/10-ville-de-machin/11-lieux-truc/CNI/20200110T1200/
https://ants.entrouvert.com/annulation/10-ville-de-machin/11-lieux-truc/CNI/20200110T1200/

API pour les sites de prise de rendez-vous raccordés

Il y a aura deux endpoints :

Application chrono

Nouvelle application dans chrono permettant l'alimentation du HuB. Une nouvelle entrée dans le menu hamburger "RdV ANTS" vers /manage/ants/.

Par défaut l'écran n'affiche rien à part un champ demandant l'API key, si le champ est rempli, on teste l'API key sur l'URL /api/push/ du hub, si ça renvoie {"err": 0}, l'apikey est valide, on l'enregistre en base et on affiche l'écran de configuration.

L'écran de configuration propose :

Modèle de donnée

Le même que plus haut pour la partie configuration des lieux/collectivités/types de RdV, ça se synchronise avec le hub à chaque modification et régulièrement avec en plus :

Fonctionnement