Documentation — Catalogue produits

Catalogue e-commerce / inventaire : modèle produit et variante, statut de stock dérivé, codes-barres EAN-13 et points d'intégration.

Modèle de données

Un produit porte une référence interne unique (P-1001…), une catégorie parmi quatre (Mobilier, Éclairage, Accessoires, Tech), un prix de vente, un stock et un EAN-13. Le statut n'est jamais stocké : il est dérivé du stock (Rupture = 0, Stock faible ≤ 5, En stock sinon), ce qui évite toute désynchronisation. Un produit décliné (coloris, dimension) embarque ses variantes, chacune avec référence suffixée, prix et stock propres.

{
  "ref": "P-1001",
  "nom": "Chaise Oslo",
  "categorie": "Mobilier",        // Mobilier | Éclairage | Accessoires | Tech
  "prix": 149.0,                  // EUR
  "stock": 24,                    // statut dérivé : 0 = rupture, ≤ 5 = stock faible
  "ean": "3761234010018",         // EAN-13, clé de contrôle GS1 valide
  "description": "Chaise de bureau ergonomique…",
  "variantes": [
    { "ref": "P-1001-GR", "libelle": "Coloris gris",  "prix": 149.0, "stock": 10 },
    { "ref": "P-1001-NO", "libelle": "Coloris noir",  "prix": 149.0, "stock": 9 },
    { "ref": "P-1001-BE", "libelle": "Coloris beige", "prix": 159.0, "stock": 5 }
  ]
}

Codes-barres EAN-13

Chaque produit reçoit un EAN-13 à la création : préfixe GS1 figé (3761234, plage France 376) + compteur sur 5 chiffres + clé de contrôle calculée (somme pondérée 1/3 des 12 premiers chiffres, complément à 10). La génération est déterministe : un même compteur produit toujours le même code. La fiche produit affiche le code-barres (bpm.barcode, format EAN13) pour l'étiquetage et un QR code (bpm.qrCode) encodant la référence interne pour les scans en entrepôt.

def generer_ean13(compteur: int) -> str:
    base = "3761234" + str(compteur).zfill(5)        # 12 chiffres
    somme = sum(int(c) * (1 if i % 2 == 0 else 3) for i, c in enumerate(base))
    return base + str((10 - somme % 10) % 10)        # + clé de contrôle

Cycle de vie

  • Créer — nom requis, catégorie, prix et stock initial ; référence et EAN-13 générés automatiquement, ajout en tête de catalogue.
  • Consulter — clic sur une ligne (ou bouton « Fiche ») : description, codes, variantes et actions dans un panneau latéral.
  • Ajuster le stock — « +1 / −1 stock » depuis la fiche ; le statut, le tableau et les métriques (dont la valeur du stock) se recalculent immédiatement.
  • Supprimer — confirmation explicite (bpm.confirmModal), variantes retirées avec le produit, notification bpm.toast.

Intégration en production

Le simulateur fonctionne en local (état React seedé, déterministe). Pour brancher un vrai backend : persister produits et variantes (tables products / product_variants, contrainte d'unicité sur ref et ean), exposer la recherche et les filtres côté API (paramètres q, category, sort), déléguer les mouvements de stock à votre WMS/ERP (journal des mouvements plutôt qu'écrasement de la valeur) et réserver la génération d'EAN à votre plage GS1 officielle.

Ouvrir le simulateur