/// Stammdatensatz für einen Artikel (Ware). /// /// Der Domain-Artikel kennt — anders als das alte ERPframe-Modell — keine /// Eltern-Kind-Beziehungen mehr. Stücklisten (BOM/Komponenten) werden im /// neuen Backend als gleichrangige `DeliveryItem`s mit gesetztem /// `komponentenArtikelNr` modelliert; der Treiber scannt einfach jedes Item /// separat. Hier deshalb absichtlich kein `components`/`parent`-Feld. class Article { const Article({ required this.id, required this.articleNumber, required this.name, required this.scannable, this.defaultWarehouseId, }); final String id; final String articleNumber; final String name; /// Nicht-scanbar = wird nicht über den Scanner durchgereicht (z. B. /// Dienstleistung, Versandkosten). In der Loading-Phase ausgeblendet. final bool scannable; /// Lager-Default für diesen Artikel; das tatsächlich relevante Lager pro /// Lieferung steht aber am `DeliveryItem.warehouseId`. Wird nur als /// UX-Hinweis verwendet. final String? defaultWarehouseId; Article copyWith({ String? id, String? articleNumber, String? name, bool? scannable, String? defaultWarehouseId, }) { return Article( id: id ?? this.id, articleNumber: articleNumber ?? this.articleNumber, name: name ?? this.name, scannable: scannable ?? this.scannable, defaultWarehouseId: defaultWarehouseId ?? this.defaultWarehouseId, ); } }