Closed johanricher closed 11 months 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:
On part sur l'option 4 proposé par @aureliebaton :
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 :
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 :
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.
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.)
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é".
Je comprends cette option comme "la restriction s'applique 24h sur 24 sur toute la période (de la restriction)", c'est à dire "tout le temps" (pendant la période indiquée dans la restriction).
Ce qui me met le doute c'est le "sinon on est obligé de définir une période d'application et de la garder à jour par rapport à l'arrêté" : est-ce que cela veut dire que j'ai mal compris et que, en fait, ce dont on a besoin est de pouvoir exprimer : "sur toute la pépiode de l'arrêté même si elle vient à être modifiée" - en gros on veut pouvoir faire en sorte que la période se mette systématiquement à jour par rapport à la date de l'arrêté. Ce qui reviendrait à dire dans la restriction "s'applique toujours sur la période "globale" de l'arrêté.
J'espère que c'est assez clair ;)
@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 :
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 :
Discuté en réunion aujourd'hui :
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.
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) :
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
DailyRange
avec un seulTimeSlot
Measure
TimeSlot
WeeklyRange
avec le design puis l'implémenterPR :
507
529 #532