- Date : 2022-11-09
- Modifié le : 2023-06-13
- Personnes impliquées : Léa Lefoulon, Florimond Manca, Mathieu Marchois
- Statut : Accepté
Dans le cadre du projet DiaLog, nous sommes amenés à numériser les arrêtés de circulation. Nous avons procédé à une analyse de l'existant afin de mieux cerner la problématique métier et les différents acteurs. Après avoir échangé avec différents calculateurs d'itinéraire comme TomTom, Here (compte rendu disponible ici), il s'avère que le format qui revient le plus souvent est le DATEXII qui est un standard européen qui permet représenter un arrêté de circulation.
Nous avons décidé d'orienter notre modèle conceptuel de données (MCD) de telle manière qu'il puisse stocker les différentes informations relative au format DATEXII en plus de ceux qui sont plus spécifiques au fonctionnement de DiaLog comme User
ou Organization
.
Le diagramme ci-dessous sera modifié au fur et à mesure de l'évolution du MCD.
classDiagram
direction TB
class VisaModel {
uuid*: uuid
organisation_uuid?: uuid
name: varchar[100]
description: varchar[255]
visas: array
}
class User {
uuid*: uuid
}
class Organization {
siret*: char[14]
name: varchar[255]
}
class RegulationOrderRecord {
uuid*: uuid
regulation_order_uuid: varchar[255]
created_at: datetime
status: enum["draft", "published"]
}
class RegulationOrder {
uuid*: uuid
category: varchar[50]
other_category_text: varchar[100]
description: text
issuing_authority: varchar[255]
start_date?: date
end_date?: date
}
class Measure {
uuid*: uuid
type: enum["noEntry", "speedLimitation"]
}
class VehicleSet {
uuid*: uuid
restricted_types: array
other_restricted_type_text?: varchar[100]
exempted_types: array
other_exempted_type_text?: varchar[100]
}
class Location {
uuid*: uuid
road_type: enum["lane", "departmentalRoad"]
geometry?: geometry
}
class NamedStreet {
uuid*: uuid
city_code: varchar[5]
city_label: varchar[255]
road_name: varchar[255]
from_house_number: varchar[8]
to_house_number: varchar[8]
}
class NumberedRoad {
uuid*: uuid
administrator: varchar[255]
road_number: varchar[50]
from_side: enum["U", "G", "D"]
from_abscissa: varchar[5]
from_point_number: integer
to_side: enum["U", "G", "D"]
to_abscissa: varchar[5]
to_point_number: integer
}
class Period {
uuid*: uuid
recurrenceType: enum["everyDay", "certainDays"]
start_datetime: datetimez
end_datetime?: datetimez
}
class DailyRange {
uuid*: uuid
days: ARRAY[enum["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]]
}
class WeeklyRange {
uuid*: uuid
start_day: enum["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
start_time: timez
end_day: enum["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
end_time: timez
}
class TimeSlot {
uuid*: uuid
start_time: timez
end_time: timez
}
class City {
insee_code*: varchar[5]
name: varchar[255]
departement: varchar[3]
}
User "1..N" -- "1..N" Organization
Organization "0..N" -- "1..1" RegulationOrderRecord
RegulationOrderRecord "0..1" -- "1..1" RegulationOrder
RegulationOrder "1..N" -- "1..1" Measure
Measure "1..N" -- "1..1" Location
Location "0..1" -- "1..1" NamedStreet
Location "0..1" -- "1..1" NumberedRoad
Measure "0..1" -- "1..1" VehicleSet
Measure "0..N" -- "1..1" Period: exception_period
Measure "0..N" -- "1..1" Period: valid_period
Period "0..1" -- "1..1" DailyRange
Period "0..1" -- "1..1" WeeklyRange
Period "0..N" -- "1..1" TimeSlot
VisaModel "0..1" -- "1..N" Organization