This repository has been archived by the owner on Dec 11, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
data_model.puml
135 lines (114 loc) · 3.2 KB
/
data_model.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
@startuml Fil'Harmonic
note as N1
Tous les entités auront un champ id,
et pour la plupart des champs created_at et/ou updated_at
end note
note top of User
Besoin de connaître les données renvoyées par l'API Cerbère pour modifier / compléter les champs
end note
class User {
nom : string
email : string
password : string
avatar: string
type : string 'inspecteur' | 'exploitant' | 'valideur'
inspectionsFavorites : [@Inspection]
}
class Etablissement {
id : string # S3IC ex: 0999.00001
nom : string
raisonSociale : string
activite : string
adresse : string
seveso : string 'haut' | 'bas' | 'non'
iedmtd : boolean
}
note top of InspectionPkg
Les inspections n'ont pas besoin d'être normalisées sur plusieurs tables (si SQL)
car tous les fils, messages, constats, etc ne sont récupérés qu'avec l'inspection
end note
package InspectionPkg {
class Inspection {
date : date
type: enum 'approfondi' | 'courant' | 'ponctuel'
annonce : boolean
origine : enum 'plan_de_inspection' | 'circonstancielle'
circonstances : enum 'incident' | 'plainte' | 'autre'
detailCirconstances : string
etat : enum 'encours' | 'valide' | 'clos'
themes : []Theme
inspecteurs : [@User]
etablissement : @Etablissement
pointsDeControle : []PointDeControle
commentaires : []Message
approbation: @Approbation?
}
class Approbation {
auteur : @User
date : Date
}
class PointDeControle {
sujet : string
referencesReglementaires : []string
messages : []Message
constat : @Constat?
}
class Constat {
type : enum 'conforme' | 'non_conforme' | 'mise_en_demeure'
observation: string
echeance : date
}
class Message {
auteur : @User
contenu : string
visibiliteInterne: boolean
lu : boolean
piecesJointes : []PieceJointe
}
class PieceJointe {
nom : string
mime : string
url : string
}
note right of PieceJointe
Les pièces-jointes seront probablement stockées sur un dépôt type Amazon S3 ou Minio
end note
class Suite {
type : enum 'aucune' | 'traitement_par_courrier' | 'suites_administratives' | 'renforcement_prescriptions'
synthese : string
}
}
class Evenement {
type : enum 'message' | 'commentaire_general' | 'commentaire'
auteur : @User
inspection : @Inspection
data : json
created_at : date
}
note right of Evenement
Le champ data permet de recevoir un JSON avec des données diverses.
Par exemple un id vers des messages, données de formulaire, données avant/après, etc
La table permettra de savoir quel utilisateur
end note
class Theme {
nom : string
}
note top of Theme
Les thèmes doivent servir de référence.
Le modification d'un thème de référence ne doit pas impacter les thèmes existants
2 façons de faire :
- copier les thèmes dans le contrôle
- dupliquer le thème de référence à chaque modification
end note
User "1" -- "*" Evenement
User "1..*" -- "*" Inspection
Etablissement *-- "*" Inspection
Inspection *-- "*" Fil
Inspection "1" -- "*" Evenement
Inspection *-- "0..1" Suite
Inspection *-- "*" Message
Inspection *-- "0..1" Approbation
Fil *-- "*" Message
Fil *-- "0..1" Constat
Message *-- "*" PieceJointe
@enduml