Collection articles

Collection articles

Stocke les articles du catalogue Vekteur. Un article est unique par brand + normalized_reference. Les données enrichies (alias, documents joints, relations inter-articles, spécifications) sont stockées dans des sous-collections dédiées et populées en virtuel.

Métadonnées

Service propriétaire

backend

Tenant scope

Partiel (champ company optionnel)

Soft delete

Oui (champ is_active)

Index principaux

brand + normalized_reference (unique), normalized_reference, ean, archetype, type, company + is_active + created_at

Schéma

interface Article {
  _id: ObjectId;

  company?: ObjectId;                   // tenant propriétaire (absent = article global)
  is_active: boolean;                   // défaut : true
  type: "auto_part" | "oem" | "tyre"; // requis
  reference: string;                    // requis
  normalized_reference: string;         // généré automatiquement
  source: "vekteur" | "tecdoc" | "company";  // défaut : "company"

  brand: ObjectId;                      // ref: Brand (requis)
  archetype: ObjectId;                  // ref: Archetype (requis)

  ean?: string;
  customs_code?: string;
  sku?: string;
  supplier_url?: string;
  description?: string;
  short_description?: string;
  long_description?: string;
  tags?: string[];
  badges?: string[];

  created_by?: ObjectId;
  updated_by?: ObjectId;
  created_at: Date;
  updated_at: Date;

  // Virtuels populés
  aliases?: ArticleAlias[];
  documents?: ArticleDocument[];
  relations?: ArticleRelation[];
  specifications?: ArticleSpecification[];
  public_prices?: PublicPrice[];
  purchase_prices?: PurchasePrice[];
  net_prices?: NetPrice[];
  kits?: Kit[];
  promotions?: Promotion[];
  depreciations?: Depreciation[];
  stocks?: Stock[];
}

Collection article_aliases

Alias d’un article (références croisées, codes EAN supplémentaires, références courtes).

Schéma

interface ArticleAlias {
  _id: ObjectId;
  company?: ObjectId;
  article: ObjectId;            // ref: Article
  type: "ean" | "reference" | "short_reference" | "complementary_reference" | "qr_code" | "description";
  is_primary: boolean;          // défaut : false
  alias: string;
  normalized_alias: string;
  created_by?: ObjectId;
  updated_by?: ObjectId;
  created_at: Date;
  updated_at: Date;
}

Index : article, normalized_alias, type + article

Collection article_documents

Documents et médias associés à un article (images, fiches sécurité, notices).

Schéma

interface ArticleDocument {
  _id: ObjectId;
  company?: ObjectId;
  article: ObjectId;
  type: "image" | "security" | "information";
  url: string;
  format?: string;
  is_primary: boolean;
  source: "vekteur" | "tecdoc" | "company";
  created_by?: ObjectId;
  updated_by?: ObjectId;
  created_at: Date;
  updated_at: Date;
}

Collection article_relations

Relations entre articles (références croisées, équivalences OEM, remplacements).

Schéma

interface ArticleRelation {
  _id: ObjectId;
  company?: ObjectId;
  from: ObjectId;               // ref: Article
  to: ObjectId;                 // ref: Article
  type: "cross" | "oem" | "replaces" | "replaced_by" | "complementary";
  source: "vekteur" | "tecdoc" | "company";
  confidence_level: number;     // défaut : 1
  created_by?: ObjectId;
  updated_by?: ObjectId;
  created_at: Date;
  updated_at: Date;
}

Index : from, to

Collection article_specifications

Valeurs de spécifications techniques liées à un article.

Schéma

interface ArticleSpecification {
  _id: ObjectId;
  company?: ObjectId;
  article: ObjectId;
  specification: ObjectId;       // ref: Specification
  value: string;
  source: "vekteur" | "tecdoc" | "company";
  created_by?: ObjectId;
  updated_by?: ObjectId;
  created_at: Date;
  updated_at: Date;
}

Index : article, specification + article

Règles d’intégrité

  1. brand + normalized_reference est unique.

  2. is_active: false masque l’article sans le supprimer (soft delete).

  3. Un article déjà existant retourné par POST /api/articles (code 200) n’est pas dupliqué.

  4. source: "tecdoc" identifie les articles importés depuis le catalogue TecDoc.

Features qui consomment ces collections

  • Catalogue articles (CAT)

  • Recherche pièces compatibles TecDoc (VEH)

  • Tarification (calcul prix net, promotions)

  • Gestion des stocks (STK)