MTES-MCT / dialog

Intégration de la réglementation de circulation dans les solutions numériques
https://dialog.beta.gouv.fr
GNU Affero General Public License v3.0
9 stars 0 forks source link

Gestion plus fine des horaires #455

Closed johanricher closed 11 months ago

johanricher commented 1 year ago

Contexte

La transposition d'horaires écrits par des humains en données lisibles par des machines, et de façon à gérer tous les cas particuliers, est un sujet par nature complexe. Voir par exemple la spécification opening_hours d'OpenStreetMap.

DiaLog expose actuellement ses données au format Datex II uniquement. A ce sujet, voir la documentation du projet :

Il est indispensable que toutes les caractéristiques des restrictions de circulation paramétrées avec DiaLog soient transposables avec Datex II, afin que ce qui apparaît au final dans les GPS respecte l'intégrité des arrêtés d'origine.

Les arrêtés de circulations disposent de restrictions avec des horaires et temporalités parfois complexes (voir exemples ci-dessous).

Exemples

Arrêté (Savenay T-SN2022-05-154) avec des exceptions (week-ends et jours fériés, les week-ends étant définis avec un début à 16h30 le vendredi et une fin à 9h le lundi) :

image

Autres arrêtés sur kDrive (dossier "horaires").

Voir également les exemples recensés ici

Critères d'acceptation

Exploration

Implémentation

La gestion des horaires doit être implémentée sur 3 niveaux à la fois et de façon iso :

Suite à la première phase d'exploration, on décide une première implémentation qui vise à améliorer l'UI "Créneaux horaires" lors de la création d'un arrêté :

Dépendances :

Notes suite aux réunions dev/design des 2-4 octobre

PR :

mmarchois commented 1 year ago

@johanricher Quelques éléments de réponses

Question posées par https://github.com/MTES-MCT/dialog/issues/435 (l'exploration doit permettre de trouver une piste de résolution)

L'export des créneaux horaires au format DATEX a été laissé de côté pour pouvoir se concentrer sur l'implémentation "UI". La maquette que nous avons aujourd'hui en production est compatible. Il est donc tout à fait possible de reprendre ce chantier pour exporter les données.

Est-ce qu'il y a des éléments de l'interface actuellement souhaitée qui ne peuvent pas être implémentés en Datex II ? lesquels ?

La question que je me posais était surtout sur le fait d'appliquer plusieurs créneaux horaires pour une même sélection de jours applicables. En creusant un peu plus, cela me parait possible d'implémenter la maquette cible en spécifiant plusieurs ValidityCondition dans lesquels on pourra spécifier les périodes. @florimondmanca est-ce que ça te parait juste ?

Le design actuel de création d'un arrêté dans DiaLog demande d'abord (page /add) une date de début et une date de fin, puis (page suivante) un ou plusieurs créneaux horaires pour chaque restriction attachée à un arrêté. Est-ce que cela est implémentable dans Datex II ?

Il y a une date de début et de fin pour indiquer la plage de validité "globale" de l'arrêté qui est implémenté en production. (cf https://dialog.beta.gouv.fr/api/regulations.xml) :

<com:validityTimeSpecification>
    <com:overallStartTime>2023-08-11T18:00:00+02:00</com:overallStartTime>
    <com:overallEndTime>2023-08-15T06:00:00+02:00</com:overallEndTime>
 </com:validityTimeSpecification>

que se passe-t-il si les 2 se contredisent ? (par exemple un créneau qui commence avant la date de début)

Aucune idée, encore une question de comment les GPS consomment nos données. Après, nous pouvons sécuriser l'intégration de nos données en mettant des règles de validité côté applicatif. Aujourd'hui, ce n'est pas encore le cas.

Quelle est la spécification des horaires de Datex II ? Est-ce qu'il existe un moyen technique (par exemple une librairie) pour créer et/ou valider ces données sur la partie spécifique aux horaires ?

Je ne comprends pas très bien ta question. Aujourd'hui la seule façon que nous avons pour valider l'export DATEX est le schéma XSD. Pour s'assurer de la bonne validité des données (chevauchement de créneaux, par exemple) nous pouvons poser des règles de validité côté applicatif (même remarque que plus haut). Bonjour le mal de crâne ! :smile:

johanricher commented 1 year ago

Notes de la réunion du jour

johanricher commented 1 year ago

Notes de l'atelier du jour

johanricher commented 1 year ago

On part sur l'option 4 proposé par @aureliebaton :

https://www.figma.com/file/YuT6Uh4wxe90U8LaPLlDzO/Dialog?type=design&node-id=3554-15591&mode=design&t=dXAoKXIBT1OWAHlW-4

Des petits changements vont être apportés mais sans que ça remette en question les fondements.

Prochaines étapes : D'abord, à partir des choix faits pendant l'exploration, définir un nouveau modèle de données de la base et le documenter

Une fois que le nouveau modèle est défini :

johanricher commented 1 year ago

Petit point depuis mon commentaire précédent qui listait les étapes à venir :

A l'état actuel de notre exploration du sujet et des choix à faire sur l'implémentation, les questions que je me pose :

florimondmanca commented 1 year ago

Merci pour les notes

Dans DiaLog on a identifié 2 problèmes liés à la “gestion du temps” qui semblent différents d’un point de vue UI/UX mais qui sont très liés du point de vue données et spec :

  • le choix de date (“date picker”) qui s’appuie sur une gestion robuste des “évenements”
  • la gestion des “règles de récurrence"

Je n'ai pas l'impression qu'on soit tous alignés là-dessus

Cette partie des notes suggère qu'on ait tranché en faveur d'un modèle "événement qui se répète" : 1) on choisit une ou plusieurs plages grâce à un "date picker" correspondant à l'occurrence 0 (il n'y a rien de tel dans la maquette actuellement), 2) on choisit comme cette ou ces plage(s) vont se répéter et jusqu'à quand (récurrence) (la maquette ne parle plus de "répétition" mais de "Quels sont les jours concernés [ sur la période d'application ] ?")

Pour l'instant le Figma montre une approche "une période globale où on précise là où la mesure est applicable", ce qui n'est pas le même modèle.

Le plus simple pour l'implémentation semblerait effectivement d'adopter le modèle "événement + récurrence" des calendriers (car en la matière il y a des specs et des outils). Dans l'idéal l'UI/UX serait proche de ce modèle. Mais @aureliebaton indiquait que côté utilisateur ça ne serait pas forcément le plus intuitif. Je ne pourrais pas résumer aussi bien qu'elle. Mais j'ai retenu que : on ne gère pas des RDV éventuellement récurrents dans un calendrier, mais des dates d'application d'une mesure. Conceptuellement c'est équivalent (on "prend rendez-vous avec la mesure") mais les utilisateurs n'y pensent pas de cette façon (si j'ai bien suivi).

On pourrait peut-être s'appuyer techniquement sur l'approche calendrier, et présenter une UI/UX adaptée au contexte "arrêtés". Il faudrait alors gérer la "conversion" entre les deux, dont l'ampleur ne me paraît pas encore claire.

johanricher commented 1 year ago

Pour l'instant le design Figma est parti sur "une période globale découpée en morceaux applicables",

La notion de "période globale" est secondaire puisqu'elle peut tout à fait être déterminée automatiquement par ce que tu appelles les "morceaux applicables" (ou plutôt ce qu'on appelle "périodes" de validité dans notre modèle de donnée et dans la spec Datex II). Autrement dit : la date de début de la "période globale" est la date de début du premier "morceau applicable" et la date de fin de la "période globale" est la date de fin du dernier "morceau applicable".

Dans notre modèle (qui se veut compatible avec et appuyé sur Datex II), une restriction ("measure") peut avoir plusieurs "period" de validité, chacune définie par une "datetime" de début et une de fin (au format ISO 8601 j'imagine) ou des classes spécifiques ("DayWeekMonth", "SpecialDay", etc.)... et avec des répétitions et des exceptions (périodes "invalid") qui sont possibles.

Bref, je ne vois pas ce qui justifie une distinction entre ce qu'on appelle des "périodes" et la notion d' "événement" (avec ou sans récurrence) qu'on retrouve dans la plupart des UI/UX liés à la gestion du temps (date pickers, etc.)

aureliebaton commented 1 year ago

J'ai encore une interrogation sur l'option "24h/24h" et ce sur quoi elle s'appliquerait. @florimondmanca suggérait "Est-ce qu'il ne faut pas une option / case à cocher pour dire "Applicable 24h/24" ? Car sinon on est obligé de définir une période d'application et de la garder à jour par rapport à l'arrêté".

J'espère que c'est assez clair ;)

aureliebaton commented 1 year ago

@mmarchois @Lealefoulon voici les quelques petites choses de UI à corriger (qui le sont peut-être déjà) basée sur l'état du 31 octobre :

Screenshot 2023-10-31 at 16 26 57 Screenshot 2023-10-31 at 16 34 33
Lealefoulon commented 12 months ago

Je pense que tu n'as pas du voir la dernière version @aureliebaton car la capture ne correspond pas au visuel actuel. Je regarde pour te donner le lien à jour (pour le moment c'est pas possible il y a un problème avec scalingo). Voici les captures d'écran :

Capture d’écran du 2023-11-02 15-58-33

johanricher commented 11 months ago

Discuté en réunion aujourd'hui :

johanricher commented 11 months ago

On a passé en revue aujourd'hui les différents cas pris en exemples comme critères d'acceptation. L'interface actuelle sur dialog.beta.gouv.fr permet de les gérer tous, ce qui était l'objet de ce ticket donc on peut le fermer. Bravo à toute l'équipe pour ce gros chantier ! :tada:

On a identifié par la même occasion un bug et plusieurs améliorations possibles, qu'on a priorisées, et que je vais détailler dans des tickets pour les discuter et les implémenter progressivement.