Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Platform

Açıklama

Ürün kırılımı ve stok dönüşümü

core/product_breakdown.py içindeki zorunlu ürün, model ve versiyon kırılımı ve core/stock_conversion.py içindeki stok ebadı dönüşüm hesabı.

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_id ve product_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_services modülü EventBus üzerinden ValidateProductBreakdown ile 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ğunu Decimal hesabı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:

  1. Ü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).
  2. Modeli veya versiyonu olmayan bir ürün: HTTP 422 ile VALIDATION_ERROR (src/cluster_erp/core/product_breakdown.py:112-118).
  3. Üçü de var: işlev ValidateProductBreakdown sorgusunu gönderir. Yanıt ok değilse dönen kodu, PRODUCT_MODEL_PRODUCT_MISMATCH veya PRODUCT_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 None dö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 Decimal olarak 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, ValidateProductBreakdown sorgusunu taşır (src/cluster_erp/core/contracts.py:219).
  • Metadata modeli, FieldMeta ve ForeignKeySource sınıflarını tanımlar.
  • MRP MRP sayfasında belgelenir.

Sınırlar ve açık noktalar

  • pieces_per_stock_unit_from_planning, length veya sheet dışındaki bir stok biçimi ve boyut birimi mm olmayan bir levha için None döndürür (src/cluster_erp/core/stock_conversion.py:103-120). Her çağıranın None değ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ı.

Doğrulanan commit 92f8051 · 2026-11-13