Data Model: Importation de photos depuis une carte mémoire
Entités dérivées de spec.md § Key Entities et Functional Requirements. Réutilise sans les redéfinir : RootLocation (specs/004-categorisation-dossiers), CameraTags/CollisionResolution/boitiers (specs/002-profil-boitiers-optionnel).
Fichier candidat à l'import
| Champ |
Type |
Règles |
chemin_source |
Path |
Emplacement sur la carte mémoire |
checksum |
str (SHA-256) |
Calculé au fil de la copie (FR-001) |
deja_importe |
bool |
True si ce checksum figure déjà dans un import précédent (FR-004) — exclu de l'analyse si True |
date_prise_vue |
datetime | None |
Tag EXIF DateTimeOriginal ; None si absent ou aberrant (FR-003) |
date_aberrante |
bool |
True si date_prise_vue est hors plage plausible (ex. avant 1990) — exclu du calcul de plage (FR-003) |
type |
énumération : maitre | associe |
Fichier maître (RAW/JPEG/TIFF issu du boîtier) ou fichier associé (sidecar) — cf. constitution Principe I |
Groupe d'import
| Champ |
Type |
Règles |
fichiers |
list[FichierCandidat] |
Sous-ensemble de fichiers nouveaux partageant une plage de dates contiguë (FR-005) |
plage_dates |
(date, date) |
Bornes de la plage couverte par le groupe |
titre |
str | None |
Saisi par l'utilisateur (FR-010) |
destination |
DestinationChoisie |
Résultat de l'étape FR-007 |
DestinationChoisie
| Champ |
Type |
Règles |
type |
énumération : nouveau_dossier | nouveau_sous_dossier | fusion | nouveau_parent |
Choix explicite de l'utilisateur (FR-007) |
dossier_cible |
Path | None |
Requis si type in {nouveau_sous_dossier, fusion} |
root_location |
RootLocation | None |
Résolu via regine_core.dossier.root.determine_root (specs/004) uniquement si type in {nouveau_dossier, nouveau_parent} ; hérité du parent sinon (FR-006 de specs/004) |
necessite_checkout_archive |
bool |
True si type == fusion et dossier_cible n'existe qu'archivé, pas en local (FR-009) — déclenche un appel à regine_core.archive.checkout (specs/005-checkout-reconciliation) avant d'intégrer les nouveaux fichiers |
Créé à la demande lors du classement (FR-020), pas une entité stockée — un simple sous-répertoire résultant du déplacement d'un fichier maître déjà renommé.
| Champ |
Type |
Règles |
nom |
str |
raw, jpeg, tiff, ou le nom de l'extension elle-même pour un format maître marginal — cf. regine_core.import_carte.copie.dossier_de_format (partagée avec specs/006-gui-tri-consultation, jamais redéfinie ici) |
fichiers |
list[FichierCandidat] |
Fichiers maîtres de ce format, plus leurs fichiers associés (même dossier que leur maître, cf. classement.py) |
Renommage
| Champ |
Type |
Règles |
nom_origine |
str |
Nom donné par le boîtier (avant import) |
nom_final |
str |
date_titre_nomOrigine.ext (FR-013) |
fichiers_lies |
list[Path] |
Fichiers associés (JPEG jumeau, sidecars) renommés de façon synchronisée (FR-014) |
Historique des imports (FR-004 révisé, 2026-09-22)
Persisté dans la base de contexte centralisée (regine_core.config.db, specs/003), table checksums_importes — un enregistrement par somme de contrôle déjà importée, alimenté à chaque import réussi.
| Champ |
Type |
Règles |
checksum |
str (SHA-256), clé primaire |
Un enregistrement par fichier distinct déjà importé, tous imports confondus |
dossier_destination |
str (chemin) |
Dossier de l'espace de travail local où ce fichier a été publié (push.publier_localement) |
date_import |
str (ISO 8601) |
Horodatage de l'enregistrement — mis à jour si le même checksum est réimporté vers un nouveau dossier |
Identifiant pérenne
| Champ |
Type |
Règles |
valeur |
str (UUID) |
Généré à l'import, un par fichier maître (FR-017) |
champ_xmp |
"xmpMM:DocumentID" |
Champ standard réutilisé (cf. research.md § 3), écrit via exiftool |
Relations
Carte mémoire ──▶ FichierCandidat (checksum, date) ──▶ Historique des imports (détection doublon, FR-004)
│
▼
Groupe d'import (découpage jour par jour)
│
▼
DestinationChoisie ──▶ RootLocation (specs/004)
│
▼
Renommage (par fichier maître + fichiers liés)
│
▼
Dossier de format (classement, FR-020)
│
▼
Identifiant pérenne (écrit en XMP) ──▶ Confirmation ──▶ Copie de travail locale
│
(plus tard, séparément)
▼
regine reconcile ──▶ Archive
Collision de nom d'origine entre deux FichierCandidat de même nom_origine mais checksum différent → déléguée à regine_core.camera_profile.resolve_collision (specs/002-profil-boitiers-optionnel), pas redéfinie ici.
État / transitions (par groupe d'import)
[Groupe d'import]
Proposé (découpage automatique, titre non saisi)
│ utilisateur détache des jours (FR-005/006)
▼
Découpé en sous-groupes (chacun redevient "Proposé")
│ utilisateur saisit titre + destination (+ catégorie si nouveau_dossier/nouveau_parent)
▼
Destination résolue (RootLocation déterminé ou hérité — chemin d'archive calculé, pas encore écrit)
│ renommage local (FR-013/014) + classement par format (FR-020) + identifiant pérenne (FR-017)
▼
Prêt pour publication locale (résumé affiché, FR-018)
│ confirmation explicite de l'utilisateur
▼
Copie de travail locale (FR-019) — dossier terminal de l'import
│ (hors périmètre de ce module) sélection/retouche par le photographe,
│ puis `regine reconcile` déclenché explicitement quand prêt
▼
Archivé (specs/005-checkout-reconciliation)