Data Model: Profil de boîtiers optionnel, déclaré à la demande
Entités dérivées de spec.md § Key Entities et Functional Requirements.
Table boitiers (base de contexte centralisée, specs/003-config-contexte-travail)
Possédée par regine_core.camera_profile (cf. research.md § 2 — corrige le placement provisoire de specs/003-config-contexte-travail/plan.md).
| Champ | Type | Règles |
|---|---|---|
id |
identifiant interne | Clé primaire |
modele |
texte | Tag EXIF Model, obligatoire (un boîtier sans modèle lisible n'est identifiable que par étiquetage manuel, cf. Edge Case) |
numero_serie |
texte, nullable | Tag EXIF BodySerialNumber, quand présent et exploitable (non vide, non valeur générique) |
nom_lisible |
texte, nullable | Attribué par l'utilisateur (via specs/003-config-contexte-travail ou au moment d'un étiquetage manuel) ; NULL tant que non nommé |
premiere_rencontre |
horodatage | Date de la première résolution ayant créé cette entrée |
source |
énumération : modele | numero_serie | manuel |
Méthode ayant permis de créer/distinguer cette entrée |
Règle d'unicité : unique sur (modele, numero_serie) quand numero_serie est renseigné ; sinon unique sur modele seul, jusqu'à ce qu'une collision réelle force une entrée source=manuel distincte pour le même modèle (FR-005).
Objets d'échange (non persistés)
CameraTags (retour de regine_core.metadata.exif.read_camera_tags) :
| Champ | Type |
|---|---|
chemin |
Path |
modele |
str | None |
numero_serie |
str | None |
CollisionResolution (retour de regine_core.camera_profile.resolve_collision) :
| Champ | Type | Description |
|---|---|---|
resolues |
dict[Path, int] |
Fichier → id de boîtier déterminé automatiquement (modèle ou numéro de série) |
a_etiqueter |
list[list[Path]] |
Groupes de fichiers encore indistincts, nécessitant un étiquetage manuel (FR-005) |
Relation avec le reste du système
Fichier en collision (checksum différent, même nom d'origine — détecté par le module import, hors périmètre)
│
▼
CameraTags (lu via exiftool)
│
▼
resolve_collision() ── regroupe par modele ── distingue par numero_serie ── sinon → a_etiqueter
│
▼
boitiers (id réutilisé pour tout import ultérieur du même modèle/numéro de série, FR-006)
État / transitions
[Boîtier]
Détecté (modele connu, numero_serie éventuel, nom_lisible=NULL, source=modele|numero_serie)
│ collision non résolue par modele/numero_serie → étiquetage manuel (FR-005)
▼
Détecté (source=manuel)
│ utilisateur attribue un nom (specs/003, ou au moment de l'étiquetage manuel)
▼
Nommé (nom_lisible défini)
Un boîtier retiré du profil par l'utilisateur (Edge Case) redevient sujet à une nouvelle résolution s'il réapparaît dans une collision future — pas de suppression physique requise par cette spécification, une simple absence de correspondance suffit à redéclencher le flux normal.
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 |
|