Durum: Kabul edildi; projenin yazılı mühendislik kurallarında belirtilir. Bu kayıt; bir belge satırının, stok satırının, ürün ağacının, rezervasyonun veya hareketin asla yalın bir ürünü adlandırmadığı, ürünü, modellerinden birini ve o modelin versiyonlarından birini adlandırdığı kuralı kapsar. Ortak yardımcılar src/cluster_erp/core/product_breakdown.py içindedir; stok tarafı ürün kırılımı ve stok dönüşümü sayfasında açıklanır.
Bağlam¶
Stok ürün versiyonu başına tutulur; bu yüzden yalnız ürüne yapılan başvuru belirsizdir. Projenin yazılı mühendislik kuralları üç düzeyli kırılımı tüm ERP'de zorunlu kılar ve "model veya versiyon yoksa ürünü kullan" biçiminde sessiz bir geri düşmeyi yasaklar. Yardımcı modül amacı belirtir: ERP "deterministic about what a product reference means" (src/cluster_erp/core/product_breakdown.py:1-9). Başka bir gerekçe koddan belirlenemez.
Karar¶
- Bir satırda ürün varsa model ve versiyon da olmalıdır; ürün yoksa ikisi de olmaz (
src/cluster_erp/core/product_breakdown.py:94-118). - Model ürüne, versiyon modele ait olmalıdır. Bu denetim products modülüne ihtiyaç duyduğundan EventBus üzerinden bir
ValidateProductBreakdownsorgusudur (src/cluster_erp/core/product_breakdown.py:120-147,src/cluster_erp/core/contracts.py:218-226). - Formlar bağımlı bir seçici sunar: model listesi seçilen ürüne, versiyon listesi seçilen modele göre süzülür (
src/cluster_erp/core/product_breakdown.py:31-83).
Sıra şeması bir belge satırındaki denetimi gösterir.
sequenceDiagram participant Svc as Modül servisi participant Core as ensure_product_breakdown participant Bus as EventBus participant PS as products_and_services Svc->>Core: product_id, product_model_id, product_version_id Core->>Core: hepsi boş mu, ya da üçü de var mı? Core->>Bus: ValidateProductBreakdown sorgusu Bus->>PS: _handle_validate_breakdown PS-->>Core: ok veya bir hata kodu Core-->>Svc: dön veya AppError 422 fırlat
Düzyazıyla: servis ensure_product_breakdown çağırır. Ürünsüz bir model veya versiyon ya da ikisi birden olmayan bir ürün hemen HTTP 422 ile AppError fırlatır. Aksi halde yardımcı sorguyu gönderir; products modülü ok ya da PRODUCT_MODEL_PRODUCT_MISMATCH veya PRODUCT_VERSION_MODEL_MISMATCH ile yanıt verir ve bir uyuşmazlık 422 fırlatır (src/cluster_erp/core/product_breakdown.py:103-147, src/cluster_erp/modules/products_and_services/module.py:131).
Sonuçlar¶
- Stok düzeyleri, mal hareketleri, kullanım kararları, rezervasyonlar ve proje stok ödünçleri
product_model_idveproduct_version_idalanlarını boş olamaz sütunlar olarak bildirir (src/cluster_erp/modules/inventory/stock/models.py:54-63,src/cluster_erp/modules/inventory/stock/models.py:144-153,src/cluster_erp/modules/inventory/stock/models.py:289-297,src/cluster_erp/modules/inventory/stock/models.py:355-364,src/cluster_erp/modules/inventory/stock/models.py:445-453). - Stok düzeylerinin canlı satır benzersiz indeksi modeli ve versiyonu içerir (
src/cluster_erp/modules/inventory/stock/models.py:28-46). src/cluster_erp/modulesaltında 23 dosyadaki 49 servis çağrısı denetimi ürün ağacı, envanter, satın alma, üretim, projeler, teklifler, satış siparişleri, yerleşim ve filo genelinde çalıştırır (grep -rn "ensure_product_breakdown("ile sayıldı).- MRP gibi bir kişinin seçim yapmadığı belge oluşturan akışlar, ürünün varsayılan modelini ve versiyonunu
GetProductDefaultBreakdownile ister ve açıkça kaydeder (src/cluster_erp/core/contracts.py:229-235). Varsayılan belgeye yazılır; okuma anında sessiz bir geri düşme değildir.
Kodun uyguladığı yerler¶
| Mekanizma | Neyi denetler | Kaynak |
|---|---|---|
ensure_product_breakdown |
Her yazmada üç kimliğin varlığı ve tutarlılığı | src/cluster_erp/core/product_breakdown.py:86-147 |
| Boş olamaz kırılım sütunları | Stok satırları model ve versiyon olmadan saklanamaz | src/cluster_erp/modules/inventory/stock/models.py:54-63 |
_e2e_product_model_versions.mjs |
Ürün formu, model kartı ve versiyon listesi tarayıcıda zinciri izler | web-client/_e2e_product_model_versions.mjs:1-4 |
Koddan belirlenemedi: ensure_product_breakdown işlevini doğrudan çağıran bir pytest testi. tests/ içinde bulunmadı (product_breakdown arandı).
İlgili sayfalar¶
- Karar kayıtları
- Ürün kırılımı ve stok dönüşümü
- Products and services modülü (products_and_services)
- Inventory modülü (inventory)
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.