30 lines
1.2 KiB
Markdown
30 lines
1.2 KiB
Markdown
# Architecture des profils de locaux — checkpoint B
|
|
|
|
## Décision
|
|
|
|
`RoomType` reste le type structurel d'un local (classe, couloir, sanitaire,
|
|
etc.) et conserve ses usages existants, notamment l'identification des salles
|
|
d'enseignement. Il ne devient pas un catalogue d'équipements.
|
|
|
|
Un `RoomProfile` séparé porte une proposition réutilisable :
|
|
|
|
- `RoomProfileItem` : libellé, quantité, catégorie facultative, lot suggéré,
|
|
mode groupe/individuel et sélection par défaut ;
|
|
- `RoomSurface` : composition facultative mur/sol/plafond, matériau, finition
|
|
et repère.
|
|
|
|
L'association `Room.room_profile_id` mémorise le profil utilisé comme point de
|
|
départ. Elle ne crée aucun équipement. L'application d'un profil passe par une
|
|
prévisualisation et le service commun `create_equipment`.
|
|
|
|
## Progressivité
|
|
|
|
Un local peut être créé sans `RoomType`, sans profil et sans équipement. Les
|
|
ouvrages sont facultatifs. Les lignes d'un profil sont des suggestions et les
|
|
quantités peuvent être modifiées avant validation.
|
|
|
|
## Migration
|
|
|
|
`k6f7a8b9c0d1_room_profiles.py` crée les tables de profils, propositions et
|
|
surfaces. `l7a8b9c0d1e2_assign_room_profiles.py` ajoute l'association nullable
|
|
du profil à `rooms`. Les deux migrations sont non destructives.
|