diff --git a/IDEES.md b/IDEES.md index 700f6d9..46c430f 100644 --- a/IDEES.md +++ b/IDEES.md @@ -155,6 +155,92 @@ celui de ZXing.Net : le coût d'une bibliothèque n'est pas le poids de son asse l'EAN-2 est précisément ce qui accompagne les périodiques en `977`. - **Plus de pipeline image maison** à entretenir (capture, réduction, recadrage, `RGBLuminanceSource`). +--- + +# Retours d'usage du 2026-08-19 (3ᵉ série) + +## Bug — un livre déjà catalogué peut être réencodé + +Vérifié dans le code : `ServiceCatalogue.CreerAsync` ne fait **aucun** contrôle de doublon, et +`HasIndex(l => l.Isbn)` n'est **pas** unique. Scanner deux fois le même livre crée deux fiches. + +⚠️ **À trancher avant de coder : refuser, ou avertir ?** Refuser tout net serait un piège, car +posséder deux exemplaires est légitime — on garde le sien et on prête l'autre. Et l'ISBN est +facultatif, donc il ne peut pas être le seul critère. + +Trois critères candidats, de plus en plus large : + +| Critère | Attrape | Rate / gêne | +|---|---|---| +| **ISBN identique** | le rescan du même livre, cas visé | rien si l'ISBN manque ; refuse un second exemplaire | +| **Clé d'œuvre + auteur** (`CleOeuvre`, comme la liste d'envies) | la saisie manuelle sans ISBN | confond le poche et le grand format, qui sont deux éditions possédées | +| **les deux, en avertissement** | tout ce qui précède | demande une confirmation de plus | + +Piste privilégiée : **avertir et laisser confirmer** (« Vous avez déjà *Germinal* — ajouter +quand même ? »), plutôt que l'index unique qui interdirait le second exemplaire. La liste +d'envies, elle, refuse — mais elle décrit une envie, pas un objet, et deux exemplaires d'une +envie n'ont pas de sens. + +## À l'ajout d'un livre, retirer l'envie correspondante + +Demandé : si le livre ajouté figure dans la liste d'envies, l'en retirer. + +⚠️ **La difficulté est la portée, pas le rapprochement.** Le catalogue est **commun**, la liste +d'envies est **personnelle** — ce sont les deux portées que `CLAUDE.md` oppose explicitement. +« Retirer l'envie » n'a donc pas une seule réponse : + +- **la sienne uniquement** : simple, sûr, ne franchit aucune frontière. Mais si Camille souhaitait + le livre et que Mathieu l'ajoute, Camille garde une envie pour un livre que le foyer possède. +- **celle de tout le monde** : cohérent avec « le livre est commun », mais **modifie + silencieusement la liste d'un autre**, et lui fait perdre sa note (« demandé à Noël »). L'API + ne sait pas — délibérément — écrire dans la liste d'autrui : ce serait une brèche à ouvrir + dans un invariant tenu jusqu'ici. +- **ne rien supprimer, mais signaler** : la liste d'envies marque l'entrée « déjà au catalogue ». + Non destructif, respecte la frontière, et l'écran de bibliographie sait déjà distinguer + `Possede` de `Souhaite`. + +⚠️ Le rapprochement se ferait par `CleOeuvre` + auteur, avec les mêmes limites que la +bibliographie (titre retraduit, tome, intégrale — voir `CLAUDE.md`). Une suppression sur un +rapprochement faillible est **irréversible** ; un signalement ne l'est pas. C'est un argument de +poids pour la troisième voie. + +## Bandes dessinées et magazines + +Deux demandes distinctes, de coût très différent. + +### Les BD : surtout une question de type de document + +Une BD est déjà catalogable telle quelle — elle a un ISBN, la BnF la connaît (vérifié au lot 6 : +la BD de Dobbs tirée de *La bête humaine* remonte bien). Ce qui manque est de pouvoir **la +distinguer** : `Format` dit physique ou numérique, pas roman ou BD. + +Piste : un `TypeDocument` (roman / BD / magazine…) à côté de `Format`, avec migration, filtre au +catalogue et étiquette. ⚠️ Suivre la règle déjà actée pour le format : **n'afficher que ce qui +n'est pas le cas par défaut**, sinon chaque ligne du catalogue porte une étiquette qui n'apprend +rien. + +Champs propres à la BD (série, tome, scénariste/dessinateur) : à ne faire que si le besoin se +confirme. Le modèle actuel met tous les auteurs dans `LivreAuteur` sans distinguer les rôles. + +### Les magazines : cela rouvre une décision actée + +⚠️ `CLAUDE.md` (lot 1) écarte **délibérément** le catalogage des périodiques : « le modèle de +données n'a ni numéro ni date de parution, et les deux chiffres de parution du code ne sont pas +exploitables comme numéro fiable — douze numéros d'un même magazine partagent leur ISSN et +créeraient douze fiches identiques ». Le scan d'un code `977` nomme donc la revue et bascule sur +la saisie manuelle, **sans** l'ISBN. + +Les supporter vraiment demande de lever exactement ce qui avait motivé le refus : + +- un **ISSN** distinct de l'ISBN (le ranger dans `Livre.Isbn` casserait tout lookup ultérieur) ; +- un **numéro** et une **date de parution**, seuls capables de distinguer deux exemplaires ; +- de décider si un magazine est **une fiche par numéro** ou **une fiche par revue avec des + numéros rattachés** — c'est le vrai choix de modélisation, et il change la migration ; +- de reprendre le flux `977` pour qu'il crée au lieu d'expliquer. + +À trancher avant tout code. Le reste (filtres, prêts, hors-ligne) suit mécaniquement une fois le +modèle arrêté. + ## Auteurs et bibliographie ### Homonymes : « Between two worlds », un autre Robert Harper