Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / İş modülleri

Modül

BOM modülü (bom)

Ürün kırılımı başına ürün ağaçlarını, versiyonlarını, kalemlerini, şablonlarını, patlatmayı ve rotaları besleyen okumaları içeren bom modülü sayfası.

src/cluster_erp/modules/bom/ içindeki bom modülü, üretilen her ürün kırılımının ürün ağacını (BOM) tutar. Bir ürün ağacı kartı inşa ettiği ürünü, modeli ve versiyonu belirtir; taslaktan etkine, etkinden yerini almışa geçen numaralı versiyonları vardır ve her versiyonun bir kalem ağacı bulunur. Modül bir versiyonu maliyetlendirme, üretim ve planlama için etkin miktarlara patlatır ve production modülünün rota iskeletinin operasyon ürün ağacını (eBOM) türetmek için okuduğu ürün ağacını sunar.

Bir bakışta

Öğe Değer Kaynak
Paket src/cluster_erp/modules/bom/ klasör
Modül sınıfı Module src/cluster_erp/modules/bom/module.py:19
name / version bom / 0.1.0 src/cluster_erp/modules/bom/module.py:20-26
API öneki /api/v1/bom (ModuleBase.api_prefix) src/cluster_erp/core/module_base.py:37-38
Alt modüller 4: boms, bom_versions, bom_items, bom_templates klasör listesi
Tablolar 5: bom_boms, bom_bom_versions, bom_bom_items, bom_bom_templates, bom_bom_template_items dört models.py dosyasındaki __tablename__
Metadata'daki varlıklar 5: bom, bom_version, bom_item, bom_template, bom_template_item src/cluster_erp/modules/bom/module.py:898-904
Uçlar Pakette 39 uç dekoratörü @router. için grep
Web uygulamasında yeri Kapılı bir paketten gelen bom_explorer özel bileşeniyle katalog uygulaması bom src/cluster_erp/modules/app_store/catalog.json (bom girdisi), gated_apps/bom/app.js
Masaüstünde yeri src/cluster_erp/desktop/modules/bom/ (bom_explorer.py, bom_builder.py) klasör

Modül ne yapar

  • Her ürün kırılımı için temel miktar, kullanım türü ve durumla tek bir ürün ağacı kartı tutar (src/cluster_erp/modules/bom/boms/models.py:17-79).
  • Yapıyı sürümler: yalnızca taslaklar düzenlenebilir ve bir ürün ağacının en çok bir versiyonu etkindir (src/cluster_erp/modules/bom/bom_versions/models.py:19-42).
  • Kalemleri bir versiyon içinde ağaç olarak saklar; kalem numarası, miktar, birim, fire katsayısı, kesim ölçüleri, üret-ya-da-satın-al seçimi, stok malzemesi, geçerlilik tarihleri ve birim başına işçilik ve maliyet değerleriyle (src/cluster_erp/modules/bom/bom_items/models.py:18-142).
  • Yeniden kullanılabilir şablonları bir taslak versiyona kopyalar (src/cluster_erp/modules/bom/bom_versions/services.py:544-651).
  • Bir versiyonu etkin miktarlara ve kırılım başına bir toplama patlatır (src/cluster_erp/modules/bom/bom_versions/services.py:722-820).
  • Gezgin ağacını, nerede kullanıldığı verisini ve bir satın alma kapsama özetini sunar (src/cluster_erp/modules/bom/bom_versions/services.py:822-836, src/cluster_erp/modules/bom/bom_versions/services.py:1141-1151, src/cluster_erp/modules/bom/bom_versions/services.py:1519-1520).
  • Parçası olan bir tasarım onaylandığında ilk taslak versiyonuyla bir ürün ağacı kartı oluşturur (src/cluster_erp/modules/bom/module.py:667-775).

Alt modüller

Alt modül Amaç Ana varlıklar Yönlendirici Kaynak
boms Ürün ağacı kartları Bom /api/v1/bom/boms src/cluster_erp/modules/bom/boms/routes.py:31
bom_versions Versiyonlar, yaşam döngüsü, patlatma, ağaç, kapsama, nerede kullanıldığı BomVersion /api/v1/bom/bom-versions src/cluster_erp/modules/bom/bom_versions/routes.py:26
bom_items Bir versiyonun kalemleri BomItem /api/v1/bom/bom-items src/cluster_erp/modules/bom/bom_items/routes.py:31
bom_templates Şablonlar ve kalemleri BomTemplate, BomTemplateItem /api/v1/bom/bom-templates src/cluster_erp/modules/bom/bom_templates/routes.py:29

Veri modeli

Varlık Tablo Anahtar alanlar Notlar Kaynak
Bom bom_boms bom_code, name, product_id, product_model_id, product_version_id, owner_design_id, base_quantity, usage_type, status, extra üç kırılım kimliği zorunlu src/cluster_erp/modules/bom/boms/models.py:17-79
BomVersion bom_bom_versions bom_id, version_no, status, created_from_template_id, total_weight_kg, total_labor_min, total_material_cost, total_labor_cost, approved_by, approved_at, valid_from ürün ağacı başına bir canlı etkin versiyon; version_no ürün ağacı başına benzersiz src/cluster_erp/modules/bom/bom_versions/models.py:19-98
BomItem bom_bom_items bom_version_id, parent_item_id, part_id, part_model_id, part_version_id, find_number, qty, uom, level, effective_from, effective_to, cut_length_mm, cut_width_mm, sourcing, stock_material_id üçlüsü, scrap_factor, is_phantom, birim başına maliyet ve işçilik, source part_id bir ürün kimliğidir src/cluster_erp/modules/bom/bom_items/models.py:18-142
BomTemplate bom_bom_templates template_code, name, family, description src/cluster_erp/modules/bom/bom_templates/models.py:13-31
BomTemplateItem bom_bom_template_items template_id, parent_item_id, part_id, find_number, qty, uom, cut_length_mm, is_phantom model veya versiyon sütunu yok src/cluster_erp/modules/bom/bom_templates/models.py:34-81

Miktarlar ve para Numeric türündedir: kalem miktarı Numeric(18, 4), maliyetler Numeric(18, 4), fire katsayısı Numeric(6, 4) (src/cluster_erp/modules/bom/bom_items/models.py:62-128). Ürün kimlikleri düz UUID sütunlarıdır; bom modülü bunları veritabanı yabancı anahtarlarıyla değil EventBus üzerinden denetler (src/cluster_erp/modules/bom/boms/services.py:203-213).

Ekranlar ve metadata

get_metadata dört bölümlü bir Ürün Ağacı Yönetimi (İngilizce BOM Management) kenar çubuğu grubu bildirir: Ürün Ağacı Gezgini (bom_explorer özel bileşeni), Ürün Ağaçları, Ürün Ağacı Versiyonları ve Ürün Ağacı Şablonları (src/cluster_erp/modules/bom/module.py:838-905). Gezgin sekmelerinin etiketleri Ürün Ağacı · BOM (webapp/i18n/tr.json anahtarı bom_explorer.tab.cs03) ve Operasyon Ürün Ağacı · eBOM (webapp/i18n/tr.json anahtarı bom_explorer.tab.ca03) olur. Ürün kartı üretilebilir ürünler için salt okunur bir Ürün Ağaçları sekmesi gösterir (src/cluster_erp/modules/products_and_services/products/metadata.py:276-285). Kapılı paketler kapılı uygulama paketleri, masaüstü gezgini masaüstü modül ekranları sayfasında anlatılır.

Durumlar ve aksiyonlar

Bir ürün ağacı kartı active veya archived olur; kullanım türü manufacturing, engineering veya costing olur (src/cluster_erp/modules/bom/boms/schemas.py:10-11). Bir versiyon draft durumundan active durumuna, oradan superseded durumuna geçer (src/cluster_erp/modules/bom/bom_versions/models.py:20-24).

Aksiyon Etiket Koşul Uç İzin Kaynak
activate Aktifleştir status değeri draft POST /bom-versions/{id}/activate bom.activate src/cluster_erp/modules/bom/bom_versions/metadata.py:48-58, src/cluster_erp/modules/bom/bom_versions/routes.py:145-154
copy_from_template Şablondan Kopyala status değeri draft POST /bom-versions/{id}/copy-from-template bom.create src/cluster_erp/modules/bom/bom_versions/metadata.py:59-85, src/cluster_erp/modules/bom/bom_versions/routes.py:187-201
supersede Değiştir status değeri active POST /bom-versions/{id}/supersede bom.activate src/cluster_erp/modules/bom/bom_versions/metadata.py:86-116, src/cluster_erp/modules/bom/bom_versions/routes.py:170-184

Şema bir versiyonun yaşam döngüsünü gösterir.

stateDiagram-v2
 [*] --> draft: oluşturma, klonlama veya otomatik BOM
 draft --> active: activate
 active --> superseded: taslak bir ardılla supersede
 draft --> [*]: silme
 superseded --> [*]

Düz anlatımla: bir versiyon draft olarak oluşturulur (src/cluster_erp/modules/bom/bom_versions/services.py:231-274). activate, en az bir canlı kalemi olan ve ürün ağacında başka etkin versiyon bulunmayan bir taslak ister (src/cluster_erp/modules/bom/bom_versions/services.py:417-474). supersede tek çağrıda etkin versiyonu superseded yapar ve aynı ürün ağacının bir taslağını active yapar (src/cluster_erp/modules/bom/bom_versions/services.py:476-542). Yalnızca bir taslak silinebilir ve kalemleri de onunla gider (src/cluster_erp/modules/bom/bom_versions/services.py:305-333).

İş kuralları

  • Bir ürün ağacı kartını oluşturmak veya değiştirmek, ürünün var olduğunu ve modelin ve versiyonun ona ait olduğunu denetler (src/cluster_erp/modules/bom/boms/services.py:80-108, src/cluster_erp/modules/bom/boms/services.py:130-139).
  • Arşivlenmiş bir ürün ağacı yalnızca yeniden etkin yapılabilir (src/cluster_erp/modules/bom/boms/services.py:120-124).
  • Etkin veya yerini almış versiyonu olan bir ürün ağacı silinemez; bir ürün ağacını silmek versiyonlarını ve kalemlerini geçici olarak siler (src/cluster_erp/modules/bom/boms/services.py:159-176, src/cluster_erp/modules/bom/boms/services.py:215-267).
  • Kalemler yalnızca taslak bir versiyonda eklenebilir veya değiştirilebilir (src/cluster_erp/modules/bom/bom_items/services.py:135-137).
  • Sıfır miktar reddedilir; negatif miktar bir ko-üründür (src/cluster_erp/modules/bom/bom_items/services.py:139-146).
  • Her kalemin kırılımı doğrulanır; model ve versiyon olmadan verilen bir stok malzemesi ürünün varsayılanlarını alır (src/cluster_erp/modules/bom/bom_items/services.py:91-128, src/cluster_erp/modules/bom/bom_items/services.py:158-169).
  • Kalem seviyesi üst kalem zincirinden gelir; zincir döngü yapamaz ve 10 olan MAX_BOM_DEPTH değerinden derine inemez (src/cluster_erp/modules/bom/bom_items/services.py:32, src/cluster_erp/modules/bom/bom_items/services.py:430-470).
  • Eksik bir fire katsayısı 0.0300 olan DEFAULT_SCRAP_FACTOR değerini alır (src/cluster_erp/modules/bom/bom_items/services.py:33, src/cluster_erp/modules/bom/bom_items/services.py:180-181).
  • clone herhangi bir versiyonu sonraki versiyon numarasıyla ve tüm kalemleriyle yeni bir taslağa kopyalar (src/cluster_erp/modules/bom/bom_versions/services.py:335-415).
  • Versiyon toplamları: işçilik dakikaları ve işçilik maliyeti birim başına değerler çarpı miktardır; malzeme maliyeti birim maliyet çarpı miktar bölü bir eksi fire katsayısıdır; ağırlık, ürün ana verisinden yaprak kalemlerin net ağırlığını toplar (src/cluster_erp/modules/bom/bom_versions/services.py:671-718).
  • bom_code değeri bom yıllık dizisinden, template_code değeri bom_template dizisinden gelir (src/cluster_erp/modules/bom/boms/services.py:89, src/cluster_erp/modules/bom/bom_templates/services.py:101).

Patlatma ve operasyon ürün ağacı

Şema bir ürün ağacı versiyonunun diğer modüllerin okuduğu patlatmaya nasıl dönüştüğünü ve rota iskeletinin ağacı nasıl okuduğunu gösterir.

flowchart TD
 V["BomVersion ve BomItem satırları"] --> F["_filter_effective(as_of)"]
 F --> Q["effective_qty = qty / (1 - fire), her üst kalemin qty / (1 - üst fire) değeriyle çarpılır"]
 Q --> A["production atamalarından operation_type ve work_center_id"]
 A --> R["parça, model, versiyon başına toplam"]
 R --> X["GetBomExplosion yanıtı"]
 X --> C["costing"]
 X --> P["production ve MRP"]
 V --> S["GetBomScaffoldTree yanıtı"]
 S --> W["production rota iskeleti"]
 W --> I["products_and_services modülüne CreateScaffoldIntermediate"]

Düz anlatımla: explosion bir versiyonun canlı kalemlerini yükler ve geçerlilik penceresi verilen tarihi içermeyen kalemleri tüm alt ağaçlarıyla düşürür (src/cluster_erp/modules/bom/bom_versions/services.py:136-159, src/cluster_erp/modules/bom/bom_versions/services.py:734-741). Her kalem için etkin miktar, miktarın bir eksi kendi fire katsayısına bölümüdür; sonra her üst kalemin miktarının bir eksi o üstün fire katsayısına bölümüyle çarpılır ve ROUND_HALF_EVEN ile dört basamağa yuvarlanır; negatif bir ko-ürün miktarı fire almaz (src/cluster_erp/modules/bom/bom_versions/services.py:128-133, src/cluster_erp/modules/bom/bom_versions/services.py:748-767). Operasyon türü ve iş merkezi production modülünün bileşen atamalarından gelir (src/cluster_erp/modules/bom/bom_versions/services.py:790-796). Toplam, etkin miktarları parça, model ve versiyon başına toplar (src/cluster_erp/modules/bom/bom_versions/services.py:798-820). Diğer modüller bunu GetBomExplosion ile ister (src/cluster_erp/modules/bom/module.py:217-228). Patlatma tek bir versiyon içindeki üst kalem bağlarını izler; gezgin tree ayrıca kendi etkin ürün ağacı olan kalemleri açar (src/cluster_erp/modules/bom/bom_versions/services.py:1141-1151).

Operasyon ürün ağacı için production modülünün rota iskeleti tam bir ürün kırılımıyla GetBomScaffoldTree sorar. bom modülü tam olarak o kırılımın etkin versiyonuyla veya adı verilen bir versiyonla ve çözülmüş üret-ya-da-satın-al bilgisiyle tüm canlı kalemleriyle yanıt verir; varsayılan bir kırılıma geri dönmez (src/cluster_erp/modules/bom/module.py:363-420, src/cluster_erp/modules/production/routings/scaffold.py:185-192). İskelet hayalet olmayan kalemleri son bir birleştirme operasyonunun girdilerine dönüştürür ve hayalet kalemlerin alt kalemlerini yukarı taşır; bu modül docstring'inde anlatılır (src/cluster_erp/modules/production/routings/scaffold.py:1-43). Bir rotanın bir operasyonunun çıktısı olduğunda iskelet, products_and_services modülünden CreateScaffoldIntermediate ile bir ara ürün oluşturmasını veya yeniden kullanmasını ister (src/cluster_erp/modules/production/routings/scaffold.py:2221-2239). Rota tarafı rotalar ve operasyon türleri sayfasında belgelenir.

Olaylar ve sorgular

Modül 15 sözleşme tüketir ve 14 sözleşme üretir; sayım parties modülü sayfasındaki gibi yapıldı. Tam liste sözleşmeler başvurusu sayfasındadır.

Yön Sözleşme sınıfı İşleyici veya yayan Kaynak
yayar BomDraftCreated versiyon oluşturma, klonlama, otomatik BOM src/cluster_erp/modules/bom/bom_versions/services.py:256-264, src/cluster_erp/modules/bom/bom_versions/services.py:406-414, src/cluster_erp/modules/bom/module.py:760-768
yayar BomActivated, BomVersionActivated activate, supersede src/cluster_erp/modules/bom/bom_versions/services.py:455-473, src/cluster_erp/modules/bom/bom_versions/services.py:523-541
yayar BomSuperseded supersede src/cluster_erp/modules/bom/bom_versions/services.py:515-522
yayar BomItemChanged kalem oluşturma, güncelleme ve taşıma src/cluster_erp/modules/bom/bom_items/services.py:227, src/cluster_erp/modules/bom/bom_items/services.py:324, src/cluster_erp/modules/bom/bom_items/services.py:516
sorgular GetProductById, GetProductDefaultBreakdown, GetBulkProductDefaultBreakdowns, GetDesignById ve planlama okumaları servisler ve işleyiciler src/cluster_erp/modules/bom/boms/services.py:204-206, src/cluster_erp/modules/bom/bom_versions/services.py:598-608, src/cluster_erp/modules/bom/module.py:686-688
sorguyu yanıtlar GetBomById, CreateBomForProduct, GetPartUsageCounts, IsBomActive, GetBomExplosion, GetActiveBomVersionForProduct, GetBomVersionsUpdatedAt, GetActiveBomItemsForProduct, GetBomScaffoldTree, GetBomItemDisplay, GetBomMaterials, GetBomVersionDisplay module.py içindeki işleyiciler src/cluster_erp/modules/bom/module.py:85-123
abone olur DesignApproved _handle_design_approved src/cluster_erp/modules/bom/module.py:124, src/cluster_erp/modules/bom/module.py:667-775
abone olur ProductDeleted _handle_product_deleted src/cluster_erp/modules/bom/module.py:125, src/cluster_erp/modules/bom/module.py:777-816
abone olur DescribeFieldConsumers _describe_field_consumers src/cluster_erp/modules/bom/module.py:65, src/cluster_erp/modules/bom/module.py:907-937

Aboneliklerin taşıdığı kurallar:

  • DesignApproved olayında modül tasarımın parçasını okur, o ürünün varsayılan modelini ve versiyonunu alır ve tasarımın adını taşıyan, taslak versiyon 1'i olan active bir ürün ağacı kartı oluşturur. Parçası olmayan bir tasarımı, zaten bir ürün ağacına sahip bir tasarımı ve varsayılan kırılımı olmayan bir ürünü atlar (src/cluster_erp/modules/bom/module.py:667-775).
  • ProductDeleted olayında modül silinen ürünün yalnızca taslak versiyonlardaki kalemlerini geçici olarak siler; etkin ve yerini almış versiyonlar satırlarını korur (src/cluster_erp/modules/bom/module.py:777-816).

Yetkiler

İzin anahtarı Kullanan Kaynak
bom.read her okuma ucu src/cluster_erp/modules/bom/boms/routes.py:51-99, src/cluster_erp/modules/bom/bom_versions/routes.py:35-295, src/cluster_erp/modules/bom/bom_items/routes.py:61-219, src/cluster_erp/modules/bom/bom_templates/routes.py:38-146
bom.create oluşturma, güncelleme, silme, toplu silme, klonlama, şablondan kopyalama, yeniden hesaplama, kalem taşıma src/cluster_erp/modules/bom/boms/routes.py:131-170, src/cluster_erp/modules/bom/bom_versions/routes.py:109-207, src/cluster_erp/modules/bom/bom_items/routes.py:233-293, src/cluster_erp/modules/bom/bom_templates/routes.py:107-199
bom.activate etkinleştirme ve yerine geçirme src/cluster_erp/modules/bom/bom_versions/routes.py:148, src/cluster_erp/modules/bom/bom_versions/routes.py:174

Gizlilik, saklama ve geçmiş

Modül kişisel veri saklamaz ve privacy_handlers.py dosyası yoktur. Silme baştan sona geçicidir ve versiyon ile kalem silmeleri aynı aktörle zincirlenir (src/cluster_erp/modules/bom/boms/services.py:215-249). Değişiklikler değişiklik geçmişi tarafından kaydedilir.

Analitik olguları

Bu modülün analytics_facts.py dosyası yoktur.

Ayarlar ve başvuru verileri

Modülün ayarlar bölümü yoktur. Stoktan işlenen kalemler için stok birimi hesabı, kesim payı, levha aralığı ve kenar payı ayarlarını core/stock_conversion.py üzerinden okur (src/cluster_erp/modules/bom/bom_versions/services.py:95-125); bkz. ürün kırılımı ve stok dönüşümü.

Testler

tests/ içinde modules.bom için grep ile ve web-client/ içinde dosya adıyla bulundu.

Tür Dosya Kapsam
pytest tests/test_bom_bugfix_batch_2026_10_08.py birim seçicileri, kalem birimi, versiyon toplamları formülü, metadata biçimi (10 test)
pytest tests/test_record_links.py ürün ağacı metadata'sındaki kayıt bağlantıları (3 test)
e2e web-client/_e2e_bom_app.mjs ürün ağacı uygulaması: gezgin ve kayıt listeleri
e2e web-client/_e2e_bom_me2m.mjs, web-client/_e2e_bom_me2m_matrix.mjs satın alma kapsama sekmesi ve hesabı
e2e web-client/_e2e_bom_open_in_explorer.mjs bir ürün ağacını ürün kartından gezginde açma
e2e web-client/_e2e_ebom_scaffold.mjs, web-client/_e2e_ebom_wizard.mjs, web-client/_e2e_ebom_operation_staging.mjs ürün ağacını okuyan rota iskeleti
e2e web-client/_e2e_bom_bugfix_batch.mjs tarayıcıda ürün ağacı formları

Tutarsızlıklar

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
bill of materials Bom Bir yapının inşa ettiği ürün kırılımını belirten kart. Ürün ağacı src/cluster_erp/modules/bom/boms/models.py:17
BOM version BomVersion Bir ürün ağacı yapısının yaşam döngüsü olan numaralı anlık görüntüsü. Ürün ağacı versiyonu src/cluster_erp/modules/bom/bom_versions/models.py:19
BOM item BomItem Bir ürün ağacı versiyonunun tek bir pozisyonu. Ürün ağacı kalemi src/cluster_erp/modules/bom/bom_items/models.py:18
explosion explosion Etkin miktarları ve kırılım başına toplamı olan düz kalem listesi. Patlatma src/cluster_erp/modules/bom/bom_versions/services.py:722
effective quantity effective_qty Fire ve üst kalem çarpımından sonra bitmiş birim başına miktar. Etkin miktar src/cluster_erp/modules/bom/bom_versions/services.py:748-767
co-product negatif qty Negatif miktarlı, beklenen bir çıktı olan ürün ağacı kalemi. Ko-ürün src/cluster_erp/modules/bom/bom_items/services.py:139-146
phantom item is_phantom Alt kalemleri çarpılmış talebi taşıdığı için kapsamanın atladığı kalem. Hayalet kalem src/cluster_erp/modules/bom/bom_versions/services.py:830-831

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

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