Cluster ERP'de bir ürünü adlandıran her belge satırı onun modelini ve versiyonunu da adlandırmalıdır. Bu sayfa core/product_breakdown.py içindeki ortak form alanlarını ve doğrulamayı ve core/stock_conversion.py içindeki parça adedinden stok birimine (boy veya levha) dönüşümü anlatır. Ürünler, modeller ve versiyonlar ürünler ve hizmetler sayfasında belgelenir.
Kısaca¶
- Bir ürün başvurusu yalnızca
product_id,product_model_idveproduct_version_idüçü birlikte varsa ya da hiçbiri yoksa tamdır (src/cluster_erp/core/product_breakdown.py:94-118). - Bir modelin ürüne ve bir versiyonun modele ait olup olmadığını
products_and_servicesmodülü EventBus üzerindenValidateProductBreakdownile denetler (src/cluster_erp/core/product_breakdown.py:120-147,src/cluster_erp/modules/products_and_services/module.py:131). product_breakdown_fields()herhangi bir form için, her biri kendinden önceki alana göre kapsanan model ve versiyon seçici alanlarını döndürür (src/cluster_erp/core/product_breakdown.py:31-83).core/stock_conversion.py, bir boya veya levhaya kaç parça sığdığını ve bir siparişin kaç stok birimine ihtiyaç duyduğunuDecimalhesabıyla bulur (src/cluster_erp/core/stock_conversion.py:19-67).
Nasıl çalışır¶
Kırılım kuralı¶
ensure_product_breakdown(bus, product_id, product_model_id, product_version_id, source_module=...) şu denetimleri çalıştırır:
- Ürün yok: model ve versiyon da boş olmalıdır, aksi halde HTTP 422 ile
VALIDATION_ERROR(src/cluster_erp/core/product_breakdown.py:103-110). - Modeli veya versiyonu olmayan bir ürün: HTTP 422 ile
VALIDATION_ERROR(src/cluster_erp/core/product_breakdown.py:112-118). - Üçü de var: işlev
ValidateProductBreakdownsorgusunu gönderir. Yanıtokdeğilse dönen kodu,PRODUCT_MODEL_PRODUCT_MISMATCHveyaPRODUCT_VERSION_MODEL_MISMATCH, HTTP 422 ile yükseltir (src/cluster_erp/core/product_breakdown.py:120-147).
Sıra şeması üçüncü durumu gösterir.
sequenceDiagram participant S as Belge servisi participant C as ensure_product_breakdown participant B as EventBus participant P as products_and_services S->>C: ürün, model, versiyon kimlikleri C->>B: query(ValidateProductBreakdown) B->>P: işleyici P-->>B: ok ya da kodla ok false B-->>C: sonuç C-->>S: dön ya da AppError 422 yükselt
Düz metinle: bir servis üç kimliği çekirdek yardımcıya verir. Yardımcı sahip modüle EventBus üzerinden sorar ve ya döner ya da dönen kodla 422 hatası yükseltir.
11 modüldeki 23 Python dosyası ensure_product_breakdown çağırır (grep -rln ensure_product_breakdown src/cluster_erp/modules ile sayıldı): bom, fleet, inventory, nesting, procurement, production, products_and_services, projects, purchasing_quotations, quotations ve sales_orders.
Ortak form alanları¶
product_model_source(product_field) ve product_version_source(model_field), products_and_services modülünün /models/ ve /versions/ rotaları için, kardeş alana ve active_only değerine göre süzülen ForeignKeySource nesneleri kurar (src/cluster_erp/core/product_breakdown.py:31-48). product_breakdown_fields(...) bunları varsayılan olarak zorunlu iki FieldMeta nesnesine sarar (src/cluster_erp/core/product_breakdown.py:55-83). {field:...} parametre sözdizimi istemcinin süzgeci formdan doldurmasını sağlar; bkz. genel form.
Stok dönüşümü¶
| İşlev | Hesapladığı | Kaynak |
|---|---|---|
pieces_per_length_unit(stock_length_mm, piece_length_mm, kerf_mm) |
floor((stock + kerf) / (piece + kerf)); hiç parça sığmıyorsa None |
src/cluster_erp/core/stock_conversion.py:19-32 |
pieces_per_sheet(sheet_length_mm, sheet_width_mm, piece_length_mm, piece_width_mm, gap_mm, edge_mm) |
Kenar payı ve aralıklı bir ızgara; düz ve 90 derece döndürülmüş denenir, büyük sayı kazanır | src/cluster_erp/core/stock_conversion.py:35-62 |
stock_units_needed(pieces, per_unit) |
ROUND_CEILING ile yukarı yuvarlanmış pieces / per_unit |
src/cluster_erp/core/stock_conversion.py:65-67 |
pieces_per_stock_unit_from_planning(part_plan, stock_plan, kerf_default_mm, sheet_gap_mm, sheet_edge_mm,...) |
Stokun stock_form değerinden boy veya levha formülünü seçer; parça ölçülerine yalnızca birimleri mm ise güvenir; bir BOM satırından gelen açık kesim boyu veya eni kazanır |
src/cluster_erp/core/stock_conversion.py:77-120 |
Kesim payı, levha aralığı ve kenar payı varsayılanları mrp_default_cut_kerf_mm, mrp_sheet_part_gap_mm ve mrp_sheet_edge_margin_mm ayarlarından gelir (src/cluster_erp/config/settings.py:596-598). Modülü üç dosya çağırır: src/cluster_erp/modules/bom/bom_versions/services.py, src/cluster_erp/modules/procurement/mrp/engine.py ve src/cluster_erp/modules/production/production_orders/services.py (grep -rln stock_conversion ile sayıldı).
Neden böyle kurulmuştur¶
- Projenin yazılı mühendislik kuralları ürün, model ve versiyon kırılımını tüm ERP'de zorunlu kılar ve model veya versiyon eksikken sessizce ürüne düşmeyi yasaklar.
- Modül belge dizgisi kırılımın stokun tutulduğu ayrıntı düzeyi olduğunu ve ürünler modülü içe aktarılamayacağı için doğrulamanın EventBus üzerinden gittiğini belirtir (
src/cluster_erp/core/product_breakdown.py:1-14). - Stok dönüşümü belge dizgisi bunun MRP motoru, BOM ağacı ve üretim emirleri için tek kaynak olduğunu, hesabın muhafazakâr olduğunu ve hesap yapılamadığında varsayım yerine
Nonedöndürdüğünü belirtir (src/cluster_erp/core/stock_conversion.py:1-8).
Kurallar ve sınırlar¶
- Geri düşme yok: modeli ve versiyonu olmayan bir ürün tamamlanmaz, reddedilir (
src/cluster_erp/core/product_breakdown.py:112-118). - Stok dönüşümü yalnızca
Decimalolarak milimetre değerleri kullanır (src/cluster_erp/core/stock_conversion.py:1-8,src/cluster_erp/core/stock_conversion.py:70-74).
Diğer parçalarla etkileşim¶
- Olay veri yolu,
ValidateProductBreakdownsorgusunu taşır (src/cluster_erp/core/contracts.py:219). - Metadata modeli,
FieldMetaveForeignKeySourcesınıflarını tanımlar. - MRP MRP sayfasında belgelenir.
Sınırlar ve açık noktalar¶
pieces_per_stock_unit_from_planning,lengthveyasheetdışındaki bir stok biçimi ve boyut birimimmolmayan bir levha içinNonedöndürür (src/cluster_erp/core/stock_conversion.py:103-120). Her çağıranınNonedeğerini nasıl ele aldığı bu sayfa için izlenmedi.
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| product breakdown | ensure_product_breakdown |
Bir ürün başvurusunun ürün, model ve versiyonu birlikte taşıması kuralı. | ürün kırılımı | src/cluster_erp/core/product_breakdown.py:86 |
| kerf | kerf_mm |
Bir kesimde kaybolan malzeme genişliği. | kesim payı | src/cluster_erp/core/stock_conversion.py:19-32 |
| stock form | stock_form |
Bir stok kaleminin boy (length) ya da levha (sheet) olması. |
stok biçimi | src/cluster_erp/core/stock_conversion.py:103-108 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.