Distinguer romans et BD par un type de document

Format disait physique ou numérique, jamais roman ou BD. Trois valeurs
seulement : une valeur s'ajoute sans migration, la renommer une fois posée
sur des centaines de fiches, non.

Le défaut est « non précisé », pas « roman » : les fiches existantes n'ont
pas été saisies avec cette question en tête, et un AddColumn suffit
justement parce que la valeur par défaut ne prétend rien. L'interface
n'affiche donc que ce qui a été choisi, comme pour le format.

Filtre ajouté aux DEUX implémentations, serveur et hors-ligne, avec quatre
jeux de critères de plus dans le test qui les confronte.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-19 21:45:37 +02:00
co-authored by Claude Opus 5
parent a49125ddc3
commit 49eb8e1c98
21 changed files with 631 additions and 27 deletions
+48
View File
@@ -686,6 +686,7 @@ Livre
├── TitreNormalise (index — minuscules sans accents, recalculé à chaque écriture)
├── Editeur
├── Format : Physique | Numerique
├── TypeDocument : NonPrecise | Roman | BandeDessinee (défaut = NonPrecise, PAS Roman)
├── CoverUrl
├── DateAjout
└── AjoutePar (YNH_USER — traçabilité, PAS un cloisonnement)
@@ -835,6 +836,53 @@ livre sorti depuis six mois qu'on avait oublié, pas celui prêté hier.
(`ServiceLivresApi.EnUtc`). Sans cela le prêt se décalerait d'un jour pour la moitié du globe.
Vérifié en exécution : saisie du 12/08 → `2026-08-11 22:00` en base (CEST).
## Type de document — migration `TypeDeDocument` (2026-08-19)
Besoin remonté : distinguer une BD d'un roman. Une BD était déjà catalogable telle quelle (elle
a un ISBN, la BnF la connaît), mais rien ne permettait de la **reconnaître**`Format` dit
physique ou numérique, pas roman ou bande dessinée.
`Livre.TypeDocument` : **`NonPrecise` (0), `Roman`, `BandeDessinee`**. Trois valeurs, et c'est
délibéré : une valeur s'ajoute **sans migration** (une énumération se stocke en entier), alors
que renommer ou fusionner des valeurs déjà posées sur des centaines de fiches, non. Dans le
doute, on n'ajoute pas.
### ⚠️ Le défaut est « non précisé », et surtout pas « roman »
C'est ce qui distingue cette migration de `RangDesEnvies`, qui avait dû reconduire un ordre en
SQL : ici un simple `AddColumn` suffit, **parce que la valeur par défaut ne prétend rien**. Un
défaut « Roman » aurait écrit quelque chose de faux sur chaque fiche existante — elles n'ont
pas été saisies avec cette question en tête.
Deux conséquences tenues partout :
- **l'interface n'affiche que ce qui a été choisi** — étiquette au catalogue et ligne sur la
fiche seulement si `TypeDocument != NonPrecise`, dans le prolongement exact de « le format ne
s'affiche que pour les ebooks ». Sans cela, presque chaque ligne porterait « Non précisé » ;
- **le formulaire ne présélectionne rien d'autre** que « Non précisé ». ⚠️ Symétrique inverse du
format, qui **doit** rester sur *Physique* : là-bas l'absence d'étiquette signifie « physique »,
ici elle signifie « on ne sait pas ».
### `NonPrecise` est une valeur de filtre à part entière
Contrairement au statut de lecture, dont l'absence n'est **pas** un statut. « Qu'est-ce que je
n'ai pas encore rangé ? » est précisément la question qui se pose après avoir introduit ce champ,
et c'est la seule façon d'y répondre. Le filtre suit pour le reste les règles déjà actées : la
ligne se replie derrière « Filtrer », compte dans le compteur du bouton, et **disparaît tant que
le fonds n'a qu'un seul type** — comme la ligne des formats, et avec la même précaution (les
types présents ne se déduisent que d'un chargement `EstSansCritere`).
⚠️ **Le filtre existe en deux exemplaires** (`FiltreLivres` côté base, `FiltreLivresLocal` côté
navigateur) : toute nouvelle dimension doit être ajoutée **aux deux**, et au test qui les
confronte — quatre jeux de critères ont été ajoutés à `FiltreLivresLocalTests`, dont un croisant
type, format et recherche. Une divergence silencieuse ferait chercher hors-ligne autre chose
qu'en ligne.
**Ce qui n'est délibérément pas fait** : ni « magazine » dans l'énumération — le catalogage des
périodiques demande un ISSN et une table de numéros, pas une étiquette de plus (voir IDEES.md) —
ni les champs propres à la BD (série, tome, scénariste/dessinateur), le modèle mettant tous les
auteurs dans `LivreAuteur` sans distinguer les rôles.
## Doublons du catalogue — avertir, jamais refuser (2026-08-19)
Défaut remonté en usage : rien n'empêchait de rescanner un livre déjà catalogué, et