src/cluster_erp/modules/costing/ içindeki costing modülü bir ürün ağacı versiyonunu maliyetlendirir. Bir maliyet analizi ürün ağacı patlatmasını okur, işçilik ve genel gider oranlarını uygular, isteğe bağlı bir yerleşim maliyeti ekler ve bir maliyet kırılımı, bir toplam, bir hedef marj için önerilen fiyat ve bir düşük marj bayrağı saklar. Bir analiz ardından gönderme, onay veya red aşamalarından geçer ve bir teklife bağlı onaylanmış bir analiz fiyatını geri bildirir. İşçilik oranları ve genel gider oranları modülün kendi başvuru kayıtlarıdır.
Bir bakışta¶
| Öğe | Değer | Kaynak |
|---|---|---|
| Paket | src/cluster_erp/modules/costing/ |
klasör |
| Modül sınıfı | Module |
src/cluster_erp/modules/costing/module.py:15 |
name / version |
costing / 0.1.0 |
src/cluster_erp/modules/costing/module.py:16-22 |
| API öneki | /api/v1/costing (ModuleBase.api_prefix) |
src/cluster_erp/core/module_base.py:37-38 |
| Alt modüller | 3: costing_analyses, labor_rates, overhead_rates |
klasör listesi |
| Tablolar | 5: costing_costing_analyses, costing_cost_breakdown_items, costing_rate_snapshots, costing_labor_rates, costing_overhead_rates |
src/cluster_erp/modules/costing/costing_analyses/models.py:24, src/cluster_erp/modules/costing/costing_analyses/models.py:193, src/cluster_erp/modules/costing/costing_analyses/models.py:294, src/cluster_erp/modules/costing/labor_rates/models.py:15, src/cluster_erp/modules/costing/overhead_rates/models.py:13 |
| Metadata'daki varlıklar | 3: costing_analysis, labor_rate, overhead_rate |
src/cluster_erp/modules/costing/module.py:303-307 |
| Uçlar | Pakette 30 uç dekoratörü | @router. için grep |
| Web uygulamasında yeri | Katalog uygulaması costing |
src/cluster_erp/modules/app_store/catalog.json (costing girdisi) |
| Masaüstünde yeri | Yalnızca genel bileşenler; src/cluster_erp/desktop/modules/ içinde klasör yok |
klasör |
Modül ne yapar¶
- Bir ürün ağacı ve ürün ağacı versiyonu için, isteğe bağlı olarak bir teklife ve bir yerleşim işine bağlı, hedef marj ve para birimiyle bir maliyet analizi kaydeder (
src/cluster_erp/modules/costing/costing_analyses/models.py:23-189). - Maliyet kırılımını katmanlar halinde hesaplar ve maliyet satırı başına bir kırılım satırı saklar (
src/cluster_erp/modules/costing/costing_analyses/services.py:256-708). - Kullanılan her oranın anlık görüntüsünü saklar; böylece sonraki bir oran değişikliği eski bir sonucun açıklamasını değiştirmez (
src/cluster_erp/modules/costing/costing_analyses/services.py:627-662). - Bir kullanıcının son fiyat belirlemesine, göndermesine, onaylamasına, reddetmesine, taslağa döndürmesine ve yerine geçirmesine izin verir (
src/cluster_erp/modules/costing/costing_analyses/services.py:710-896). - İki ile beş analizi karşılaştırır ve bir analizi maliyet çarpanlarıyla bir ne-olursa senaryosu olarak klonlar (
src/cluster_erp/modules/costing/costing_analyses/services.py:957-1159). - İş merkezi ve operasyon türü başına işçilik oranlarını ve bir esas ve uygulama sırasıyla genel gider oranlarını tutar (
src/cluster_erp/modules/costing/labor_rates/models.py:14-68,src/cluster_erp/modules/costing/overhead_rates/models.py:12-54).
Alt modüller¶
| Alt modül | Amaç | Ana varlıklar | Yönlendirici | Kaynak |
|---|---|---|---|---|
costing_analyses |
Analizler, kırılım, anlık görüntüler, yaşam döngüsü | CostingAnalysis, CostBreakdownItem, CostingRateSnapshot |
/api/v1/costing/analyses |
src/cluster_erp/modules/costing/costing_analyses/routes.py:31 |
labor_rates |
İşçilik oranları | LaborRate |
/api/v1/costing/labor-rates |
src/cluster_erp/modules/costing/labor_rates/routes.py:22 |
overhead_rates |
Genel gider oranları | OverheadRate |
/api/v1/costing/overhead-rates |
src/cluster_erp/modules/costing/overhead_rates/routes.py:22 |
Veri modeli¶
| Varlık | Tablo | Anahtar alanlar | Notlar | Kaynak |
|---|---|---|---|---|
CostingAnalysis |
costing_costing_analyses |
analysis_no, bom_id, bom_version_id, quote_id, nesting_job_id, status, is_scenario, parent_analysis_id, superseded_by_id, yedi maliyet toplamı, target_margin_pct, actual_margin_pct, markup_pct, suggested_price, final_price, currency, low_margin_flag, calculation_version, onay damgaları |
para Numeric(19, 4), yüzdeler Numeric(5, 2) |
src/cluster_erp/modules/costing/costing_analyses/models.py:23-189 |
CostBreakdownItem |
costing_cost_breakdown_items |
analysis_id, cost_type, bom_item_id, part_id, work_center_id, operation_type, overhead_category, description, quantity, rate, scrap_factor, base_cost, scrap_cost, total_cost, currency, rate_snapshot_id |
maliyet satırı başına bir satır | src/cluster_erp/modules/costing/costing_analyses/models.py:192-290 |
CostingRateSnapshot |
costing_rate_snapshots |
analysis_id, rate_type, source_rate_id, snapshot_data |
bir oranın JSONB kopyası | src/cluster_erp/modules/costing/costing_analyses/models.py:293-307 |
LaborRate |
costing_labor_rates |
work_center_id, operation_type, rate_type, rate_per_hour, rate_per_unit, pricing_unit_id, currency, valid_from, valid_to, is_active |
iş merkezi ve operasyon türü başına bir açık oran | src/cluster_erp/modules/costing/labor_rates/models.py:14-68 |
OverheadRate |
costing_overhead_rates |
name, rate_type, basis, rate_value, currency, valid_from, valid_to, is_active, apply_order |
rate_type başına bir açık oran |
src/cluster_erp/modules/costing/overhead_rates/models.py:12-54 |
"Açık", valid_to boş ve satır canlı demektir; kısmi benzersiz indeksler bunu zorlar (src/cluster_erp/modules/costing/labor_rates/models.py:16-24, src/cluster_erp/modules/costing/overhead_rates/models.py:14-21). Para Numeric ve Decimal türündedir; bkz. para ve Decimal.
Ekranlar ve metadata¶
get_metadata üç listeli bir Maliyet Yönetimi (İngilizce Costing Management) kenar çubuğu grubu bildirir: Maliyet Analizleri, İşçilik Oranları ve Genel Gider Oranları (src/cluster_erp/modules/costing/module.py:253-308). Analiz listesi numara, durum, toplam maliyet, son fiyat, gerçek marj, para birimi, düşük marj bayrağı ve hesaplama zamanını bir durum süzgeciyle gösterir (src/cluster_erp/modules/costing/costing_analyses/metadata.py:125-200).
Durumlar ve aksiyonlar¶
Durumlar ve izin verilen geçişler serviste sabittir (src/cluster_erp/modules/costing/costing_analyses/services.py:71-80): draft durumundan calculated durumuna; calculated durumundan yeniden calculated veya pending_approval durumuna; pending_approval durumundan approved veya rejected durumuna; approved durumundan superseded durumuna; rejected durumundan geri draft durumuna. approved ve superseded analizler değiştirilemez.
| Aksiyon | Etiket | Koşul | Uç | İzin | Kaynak |
|---|---|---|---|---|---|
calculate |
Hesapla | status değeri draft |
POST /analyses/{id}/calculate |
costing_analysis.calculate |
src/cluster_erp/modules/costing/costing_analyses/metadata.py:41-51, src/cluster_erp/modules/costing/costing_analyses/routes.py:129-141 |
recalculate |
Yeniden Hesapla | status değeri calculated |
POST /analyses/{id}/recalculate |
costing_analysis.calculate |
src/cluster_erp/modules/costing/costing_analyses/metadata.py:52-65, src/cluster_erp/modules/costing/costing_analyses/routes.py:144-156 |
submit_approval |
Onaya Gönder | status değeri calculated |
POST /analyses/{id}/submit-for-approval |
costing_analysis.submit |
src/cluster_erp/modules/costing/costing_analyses/metadata.py:66-79, src/cluster_erp/modules/costing/costing_analyses/routes.py:175-187 |
approve |
Onayla | status değeri pending_approval |
POST /analyses/{id}/approve |
costing_analysis.approve |
src/cluster_erp/modules/costing/costing_analyses/metadata.py:80-93, src/cluster_erp/modules/costing/costing_analyses/routes.py:190-203 |
reject |
Reddet | status değeri pending_approval |
POST /analyses/{id}/reject |
costing_analysis.reject |
src/cluster_erp/modules/costing/costing_analyses/metadata.py:94-107, src/cluster_erp/modules/costing/costing_analyses/routes.py:206-219 |
return_to_draft |
Taslağa Döndür | status değeri rejected |
POST /analyses/{id}/return-to-draft |
costing_analysis.update |
src/cluster_erp/modules/costing/costing_analyses/metadata.py:108-121, src/cluster_erp/modules/costing/costing_analyses/routes.py:222-234 |
İki yaşam döngüsü ucunun ActionMeta girdisi yoktur: POST /analyses/{id}/set-final-price ve POST /analyses/{id}/supersede (src/cluster_erp/modules/costing/costing_analyses/routes.py:159-172, src/cluster_erp/modules/costing/costing_analyses/routes.py:237-250).
İş kuralları¶
Maliyet toplaması¶
Şema calculate içindeki katmanların sırasını gösterir.
flowchart TD E["GetBomExplosion (bom)"] --> M["malzeme katmanı: effective_qty x material_cost_per_unit, artı fire"] E --> L["işçilik katmanı: dakika x saatlik oran veya adet x birim oran, artı fire"] N["GetNestingJobById (nesting)"] --> NT["yerleşim katmanı: net_material_cost"] M --> S["ara toplam"] L --> S NT --> S S --> O["genel gider katmanı, apply_order sırasıyla"] O --> T["total_cost = malzeme + işçilik + genel gider + fire + yerleşim"] T --> P["suggested_price = toplam / (1 - hedef marj)"] P --> F["marj 15 altındaysa low_margin_flag"]
Düz anlatımla, adım adım (src/cluster_erp/modules/costing/costing_analyses/services.py:256-708):
- Analizin
calculateddurumuna geçmesine izin verilmelidir (src/cluster_erp/modules/costing/costing_analyses/services.py:261-262). - Modül
bommodülünden ürün ağacı versiyonunun patlatmasını ister; patlatma yoksa veya kalemi yoksa başarısız olur (src/cluster_erp/modules/costing/costing_analyses/services.py:264-290). - Etkin işçilik ve genel gider oranlarını yükler ve para birimi analizin para biriminden farklı olan her oranı
COSTING_CURRENCY_MISMATCHile reddeder (src/cluster_erp/modules/costing/costing_analyses/services.py:292-313). - Önceki kırılım satırlarını ve anlık görüntüleri kaldırır (
src/cluster_erp/modules/costing/costing_analyses/services.py:315-329). - Malzeme katmanı: malzeme maliyeti olan her kalem için temel maliyet, etkin miktar çarpı birim malzeme maliyetidir; fire maliyeti temel maliyet çarpı fire katsayısıdır (
src/cluster_erp/modules/costing/costing_analyses/services.py:346-404). - İşçilik katmanı: işçilik dakikası olan her kalem için oran önce iş merkezi ve operasyon türüyle, sonra yalnızca iş merkeziyle, sonra yalnızca operasyon türüyle, sonra
generaloperasyon türüyle, sonra ikisi de olmayan bir oranla aranır. Birim fiyat oranı miktarı çarpar; saatlik oran saatleri çarpar. Oran yoksa kalemin kendi birim işçilik maliyeti kullanılır. İşçilik firesi, işçilik maliyeti çarpı fire katsayısıdır (src/cluster_erp/modules/costing/costing_analyses/services.py:406-504). - Yerleşim katmanı: analiz bir yerleşim işini belirttiğinde, işin
net_material_costdeğeri tek bir kırılım satırı olur (src/cluster_erp/modules/costing/costing_analyses/services.py:506-534). - Genel gider katmanı: her etkin genel gider oranı
apply_ordersırasıyla işçiliğin, malzemenin, o ana kadarki toplamın veya yürüyen ara toplamın bir yüzdesini ya da miktar birimi başına sabit bir tutarı alır; her sonuç yürüyen ara toplama eklenir (src/cluster_erp/modules/costing/costing_analyses/services.py:536-587). - Toplam; malzeme artı işçilik artı genel gider artı fire artı yerleşimdir (
src/cluster_erp/modules/costing/costing_analyses/services.py:589-600). - Hedef marj varsa önerilen fiyat, toplamın bir eksi marja bölümüdür ve kâr payı ondan türetilir (
src/cluster_erp/modules/costing/costing_analyses/services.py:602-619). - Marj yüzde 15'in altındaysa düşük marj bayrağı ayarlanır (
src/cluster_erp/modules/costing/costing_analyses/services.py:60,src/cluster_erp/modules/costing/costing_analyses/services.py:621-625). - Oran anlık görüntüleri saklanır, durum
calculatedolur,calculation_versionbir artar veCostingCalculated, bayrak varsa ayrıcaLowMarginAlertyayılır (src/cluster_erp/modules/costing/costing_analyses/services.py:627-706).
Her para sonucu ROUND_HALF_EVEN ile dört basamağa yuvarlanır (src/cluster_erp/modules/costing/costing_analyses/services.py:359-372, src/cluster_erp/modules/costing/costing_analyses/services.py:606-609).
Diğer kurallar¶
- Son fiyat yalnızca
calculatedbir analizde belirlenebilir; gerçek marj (fiyat eksi maliyet) bölü fiyat, kâr payı (fiyat eksi maliyet) bölü maliyet olur (src/cluster_erp/modules/costing/costing_analyses/services.py:710-739). - Gönderme bir son veya önerilen fiyat ister; son fiyat yoksa önerilen fiyat ona kopyalanır (
src/cluster_erp/modules/costing/costing_analyses/services.py:742-759). - Teklifi ve son fiyatı olan bir analizin onayı ayrıca
QuoteCostingCompletedyayar (src/cluster_erp/modules/costing/costing_analyses/services.py:768-808). - Yerine geçirme aynı ürün ağacının yeni bir analizini ister (
src/cluster_erp/modules/costing/costing_analyses/services.py:857-880). - Tek tek yalnızca taslak bir analiz silinebilir (
src/cluster_erp/modules/costing/costing_analyses/services.py:233-244). - Bir senaryo
calculatedveyaapprovedbir analizden klonlanabilir; malzeme ve işçilik satırları verilen çarpanlarla ölçeklenir (src/cluster_erp/modules/costing/costing_analyses/services.py:1031-1104). - Bir işçilik veya genel gider oranının
valid_todeğerivalid_fromdeğerinden önce olamaz (src/cluster_erp/modules/costing/labor_rates/services.py:159-163,src/cluster_erp/modules/costing/overhead_rates/services.py:107-111). Bir işçilik oranı türühourlyveyaunit_priceolur (src/cluster_erp/modules/costing/labor_rates/schemas.py:9). analysis_nodeğericosting_analysisyıllık dizisinden gelir (src/cluster_erp/modules/costing/costing_analyses/services.py:183).
Olaylar ve sorgular¶
Modül 7 sözleşme tüketir ve 10 sözleşme üretir; sayım parties modülü sayfasındaki gibi yapıldı.
| Yön | Sözleşme sınıfı | İşleyici veya yayan | Kaynak |
|---|---|---|---|
| yayar | CostingCreated |
create |
src/cluster_erp/modules/costing/costing_analyses/services.py:200-209 |
| yayar | CostingCalculated, LowMarginAlert |
calculate |
src/cluster_erp/modules/costing/costing_analyses/services.py:660-692 |
| yayar | CostingApproved, QuoteCostingCompleted, CostingRejected, CostingSuperseded |
yaşam döngüsü yöntemleri | src/cluster_erp/modules/costing/costing_analyses/services.py:786-808, src/cluster_erp/modules/costing/costing_analyses/services.py:828-836, src/cluster_erp/modules/costing/costing_analyses/services.py:886-894 |
| yayar | CostingRateUpdated |
oran güncellemeleri | src/cluster_erp/modules/costing/labor_rates/services.py:218, src/cluster_erp/modules/costing/overhead_rates/services.py:157 |
| sorgular | GetBomExplosion, GetNestingJobById |
calculate |
src/cluster_erp/modules/costing/costing_analyses/services.py:262-267, src/cluster_erp/modules/costing/costing_analyses/services.py:508-513 |
| sorguyu yanıtlar | GetCostingById, GetCostingByBomId |
işleyiciler | src/cluster_erp/modules/costing/module.py:66-70, src/cluster_erp/modules/costing/module.py:89-139 |
| sorguyu yanıtlar | GetActiveLaborRate, GetActiveOverheadRates, GetCostBreakdown |
işleyiciler | src/cluster_erp/modules/costing/module.py:71-82, src/cluster_erp/modules/costing/module.py:141-223 |
| abone olur | BomActivated, NestingCostCalculated |
_on_bom_activated, _on_nesting_cost_calculated |
src/cluster_erp/modules/costing/module.py:84-85, src/cluster_erp/modules/costing/module.py:227-231 |
Abone olunan iki işleyicinin gövdesi bu commit'te boştur (src/cluster_erp/modules/costing/module.py:227-231). Tam liste sözleşmeler başvurusu sayfasındadır.
Yetkiler¶
| İzin anahtarı | Kullanan | Kaynak |
|---|---|---|
costing_analysis.read, .create, .update, .delete, .bulk_delete |
analiz uçları, kırılım, karşılaştırma, anlık görüntüler, senaryo | src/cluster_erp/modules/costing/costing_analyses/routes.py:43-295 |
costing_analysis.calculate, .submit, .approve, .reject, .supersede |
yaşam döngüsü uçları | src/cluster_erp/modules/costing/costing_analyses/routes.py:135-244 |
labor_rate.read, .create, .update, .delete, .bulk_delete |
işçilik oranı uçları | src/cluster_erp/modules/costing/labor_rates/routes.py:34-113 |
overhead_rate.read, .create, .update, .delete, .bulk_delete |
genel gider oranı uçları | src/cluster_erp/modules/costing/overhead_rates/routes.py:32-109 |
Gizlilik, saklama ve geçmiş¶
Modül gönderenlerin ve onaylayanların kullanıcı kimliklerini saklar, kendine ait kişisel alanı yoktur; privacy_handlers.py dosyası yoktur. Analizler ve oranlar geçici olarak silinir. 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¶
İşçilik ve genel gider oranları modülün başvuru verileridir; ayarlar bölümü ve tohumu yoktur (src/cluster_erp/modules/costing/module.py:28-30). Düşük marj eşiği _LOW_MARGIN_THRESHOLD modül sabitidir (src/cluster_erp/modules/costing/costing_analyses/services.py:60).
Testler¶
tests/ içinde modules.costing için grep ile ve web-client/ içinde dosya adıyla bulundu.
| Tür | Dosya | Kapsam |
|---|---|---|
| e2e | web-client/_e2e_costing_app.mjs |
maliyet uygulamasının üç metadata listesi ve mağaza kartı |
| e2e | web-client/_e2e_quote_line_bom.mjs, web-client/_e2e_order_shipment_chain.mjs |
maliyet uçlarını çağıran zincirler |
Hiçbir pytest dosyası modülü içe aktarmaz.
Tutarsızlıklar¶
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| costing analysis | CostingAnalysis |
Toplamları, fiyatı, marjı ve yaşam döngüsü olan maliyetlendirilmiş bir ürün ağacı versiyonu. | Maliyet analizi | src/cluster_erp/modules/costing/costing_analyses/models.py:23 |
| cost breakdown item | CostBreakdownItem |
Bir analizin tek bir malzeme, işçilik, yerleşim veya genel gider satırı. | Maliyet kırılım kalemi | src/cluster_erp/modules/costing/costing_analyses/models.py:192 |
| rate snapshot | CostingRateSnapshot |
Bir hesaplamanın kullandığı bir oranın dondurulmuş kopyası. | Oran anlık görüntüsü | src/cluster_erp/modules/costing/costing_analyses/models.py:293 |
| labour rate | LaborRate |
Bir iş merkezi ve operasyon türü için saatlik veya birim fiyat. | İşçilik oranı | src/cluster_erp/modules/costing/labor_rates/models.py:14 |
| overhead rate | OverheadRate |
Bir esas ve uygulama sırasıyla yüzde veya birim başına genel gider. | Genel gider oranı | src/cluster_erp/modules/costing/overhead_rates/models.py:12 |
| scenario | is_scenario |
Ne-olursa karşılaştırması için maliyet çarpanlarıyla klonlanmış bir analiz. | Senaryo | src/cluster_erp/modules/costing/costing_analyses/models.py:61 |
İlgili sayfalar¶
- Modüller dizini
- BOM modülü
- Nesting modülü
- Quotations modülü
- Para ve Decimal
- Bu modülün API başvurusu
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.