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

Modül

Inventory modülü (inventory)

Depoları, stok yerlerini, ürün kırılımı başına stok seviyelerini, mal hareketlerini, rezervasyonları, partileri ve seri numaralarını içeren inventory modülü sayfası.

src/cluster_erp/modules/inventory/ içindeki inventory modülü şirketin stoğunu tutar. Depoları ve stok yerlerini, ürün, model, versiyon, yer, parti, sahip proje ve emanetçi başına bir stok seviyesi satırını ve bu satırları değiştiren mal hareketlerini saklar. Ayrıca stok rezervasyonlarını, teslim alınan mallar için kullanım kararlarını, proje stok ödünçlerini, partileri ve seri numaralarını yönetir. Satın alma, üretim, nesting ve satış stok değişikliklerini bu modüle EventBus üzerinden işler.

Bir bakışta

Öğe Değer Kaynak
Paket src/cluster_erp/modules/inventory/ klasör
Modül sınıfı Module src/cluster_erp/modules/inventory/module.py:16
name / version inventory / 0.1.0 src/cluster_erp/modules/inventory/module.py:17-23
API öneki /api/v1/inventory (ModuleBase.api_prefix) src/cluster_erp/core/module_base.py:37-38
Alt modüller 3: warehouses, stock, batches klasör listesi
Tablolar 9: inventory_warehouses, inventory_storage_locations, inventory_stock_levels, inventory_goods_movements, inventory_usage_decisions, inventory_stock_reservations, inventory_project_stock_loans, inventory_batches, inventory_serial_numbers üç models.py dosyasındaki __tablename__
Metadata'daki varlıklar entities içinde 14 anahtar src/cluster_erp/modules/inventory/module.py:628-643
Uçlar Pakette 51 uç dekoratörü @...router.get/post/put/patch/delete için grep
Aksiyonlar 16 ActionMeta girdisi pakette grep "ActionMeta("
Göçler 17 dosya metni dokuz tablo adından birini içeren migrations/versions/ dosyaları
Web uygulamasında yeri Katalog uygulaması inventory; kapılı bir paketten gelen warehouse_dashboard özel bileşeni src/cluster_erp/modules/app_store/catalog.json (inventory girdisi), gated_apps/inventory/app.js:170
Masaüstünde yeri src/cluster_erp/desktop/modules/inventory/ (warehouse_dashboard.py) klasör

Modül ne yapar

  • Canlı satırlar arasında kodu benzersiz olan depoları ve bunların stok yerlerini tutar (src/cluster_erp/modules/inventory/warehouses/models.py:13-71).
  • Stoğu ürün, model ve versiyon başına tutar. Miktar altı kategoriye bölünür: serbest, rezerve, kalite, blokeli, mal kabulde blokeli ve iadeler (src/cluster_erp/modules/inventory/stock/models.py:25-123).
  • 13 türde mal hareketi işler ve her değişiklik için bir hareket satırı yazar (src/cluster_erp/modules/inventory/stock/services.py:78-92).
  • Serbest stoğu bir referans için rezerve eder; rezervasyonu daha sonra tüketir veya iptal eder (src/cluster_erp/modules/inventory/stock/services.py:1901-2080).
  • Teslim alınan bir miktar için kullanım kararı kaydeder ve izleyen hareketi işler (src/cluster_erp/modules/inventory/stock/services.py:1496-1666).
  • Stoğu bir proje şeridi ile ortak stok arasında taşır ve şeritler arasında geri ödemeli ödünç verir (src/cluster_erp/modules/inventory/stock/services.py:542-800).
  • Partileri köken, son kullanma ve durum ile, seri numaralarını durum ile izler (src/cluster_erp/modules/inventory/batches/models.py:14-125).
  • Bir depo panosu okuma modeli sunar (src/cluster_erp/modules/inventory/warehouses/services.py:145).

Alt modüller

Alt modül Amaç Ana varlıklar Yönlendirici Kaynak
warehouses Depolar, stok yerleri, pano Warehouse, StorageLocation /warehouses, /locations src/cluster_erp/modules/inventory/warehouses/routes.py:33-34
stock Stok seviyeleri, hareketler, rezervasyonlar, kullanım kararları, ödünçler StockLevel, GoodsMovement, StockReservation, UsageDecision, ProjectStockLoan /stock, /movements, /reservations, /usage-decisions src/cluster_erp/modules/inventory/stock/routes.py:47-53
batches Partiler ve seri numaraları Batch, SerialNumber /batches, /serial-numbers src/cluster_erp/modules/inventory/batches/routes.py:33-34

Tüm yönlendiriciler modül önekinin altına, uygulama yetkilendirme bağımlılığı require_app("inventory") ile bağlanır (src/cluster_erp/modules/inventory/module.py:52-62).

Veri modeli

Varlık Tablo Anahtar alanlar Notlar Kaynak
Warehouse inventory_warehouses code, name, address, is_active, extra code canlı satırlar arasında benzersiz src/cluster_erp/modules/inventory/warehouses/models.py:13-46
StorageLocation inventory_storage_locations warehouse_id, code, name, zone, is_active, extra src/cluster_erp/modules/inventory/warehouses/models.py:48-71
StockLevel inventory_stock_levels product_id, product_model_id, product_version_id, warehouse_id, storage_location_id, batch_id, owner_project_id, custodian_party_id, altı miktar sütunu bileşik anahtar başına bir canlı satır src/cluster_erp/modules/inventory/stock/models.py:25-123
GoodsMovement inventory_goods_movements movement_no, movement_type, ürün kırılımı, warehouse_id, to_warehouse_id, qty, batch_id, serial_number_id, owner_project_id, reference_type, reference_id, waybill_no, posted_at, posted_by, is_reversed, original_movement_id movement_no benzersiz src/cluster_erp/modules/inventory/stock/models.py:125-268
UsageDecision inventory_usage_decisions decision_no, movement_id, ürün kırılımı, qty, source_stock_type, decision_code, target_stock_type, follow_up_movement_id src/cluster_erp/modules/inventory/stock/models.py:270-345
StockReservation inventory_stock_reservations ürün kırılımı, warehouse_id, qty, reference_type, reference_id, status (varsayılan active), consumed_at, cancelled_at src/cluster_erp/modules/inventory/stock/models.py:347-413
ProjectStockLoan inventory_project_stock_loans loan_no, lender_project_id, borrower_project_id, ürün kırılımı, qty, qty_paid, status (varsayılan open), due_date src/cluster_erp/modules/inventory/stock/models.py:415-474
Batch inventory_batches ürün kırılımı, batch_number, origin_type, party_id, expiry_date, status batch_number canlı satırlar arasında ürün başına benzersiz src/cluster_erp/modules/inventory/batches/models.py:14-76
SerialNumber inventory_serial_numbers ürün kırılımı, serial_number, batch_id, status serial_number canlı satırlar arasında benzersiz src/cluster_erp/modules/inventory/batches/models.py:78-125

Stok anahtarı her zaman ürün kırılımını taşır. uq_stock_level_composite kısmi benzersiz indeksi ürün, model, versiyon ve depoyu; ayrıca NULL değeri birleştirilmiş yer, parti, sahip proje ve emanetçiyi yalnızca canlı satırlarda kapsar (src/cluster_erp/modules/inventory/stock/models.py:27-47). Miktarlar Numeric(14, 4) türündedir (src/cluster_erp/modules/inventory/stock/models.py:91-122). Modül para sütunu saklamaz; analitik belge dizesi bunu belirtir (src/cluster_erp/modules/inventory/analytics_facts.py:17-18). Ürün kırılımı veritabanı yabancı anahtarlarıyla değil, EventBus üzerinden ensure_product_breakdown ile denetlenir (src/cluster_erp/core/product_breakdown.py:86, src/cluster_erp/modules/inventory/stock/services.py:370-376).

Ekranlar ve metadata

get_metadata sekiz bölümlü bir Envanter (İngilizce Inventory) kenar çubuğu grubu bildirir: Depo Panosu (özel bileşen warehouse_dashboard), Depolar, Stok Seviyeleri, Mal Hareketleri, Lotlar, Seri Numaraları, Kullanım Kararları ve Stok Rezervasyonları (src/cluster_erp/modules/inventory/module.py:536-626). 14 varlık anahtarı warehouse_stock_level, batch_movement ve product_stock_level gibi ayrıntı görünümlerini içerir (src/cluster_erp/modules/inventory/module.py:628-643). Web panosu tek bir okuma modelini çağırır: GET /inventory/warehouses/dashboard (gated_apps/inventory/app.js:7-11, src/cluster_erp/modules/inventory/warehouses/routes.py:99). Web uygulaması geri kalanını genel olarak çizer; bkz. genel liste ve kapılı uygulama paketleri. Masaüstü panosu masaüstü modül ekranları sayfasında anlatılır.

Durumlar ve aksiyonlar

Stoğun durum alanı yoktur; hareketler miktarları değiştirir. Bir rezervasyon active, consumed veya cancelled olur (src/cluster_erp/modules/inventory/stock/services.py:1950, src/cluster_erp/modules/inventory/stock/services.py:2015, src/cluster_erp/modules/inventory/stock/services.py:2068). Bir hareket is_reversed taşır (src/cluster_erp/modules/inventory/stock/models.py:253-257).

Aksiyon Etiket Koşul Uç İzin Kaynak
goods_receipt Mal Girişi yok POST /stock/goods-receipt goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:675-770, src/cluster_erp/modules/inventory/stock/routes.py:156-183
goods_issue Mal Çıkışı yok POST /stock/goods-issue goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:771-866
subcontract_issue, subcontract_return, subcontract_consume Fasoncuya Çıkış, Fasoncudan Dönüş, Fasonda Tüketim yok POST /stock/subcontract-issue, /subcontract-return, /subcontract-consume goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:867-1004, src/cluster_erp/modules/inventory/stock/routes.py:598-633
transfer Transfer yok POST /stock/transfer goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:1005-1083
adjustment Düzeltme yok POST /stock/adjustment goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:1084-1139
gr_blocked_receipt Blokeli Mal Girişi yok POST /stock/gr-blocked-receipt goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:1140-1220
stock_category_transfer Kategori Transferi yok POST /stock/stock-category-transfer goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:1221-1301
return_to_vendor Tedarikçiye İade yok POST /stock/return-to-vendor goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:1302-1390
scrap Hurda yok POST /stock/scrap goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:1391-1456
reverse İptal Et is_reversed false POST /movements/{id}/reverse goods_movement.create src/cluster_erp/modules/inventory/stock/metadata.py:1457-1472
create_reservation Rezervasyon Oluştur yok POST /reservations/ stock_reservation.create src/cluster_erp/modules/inventory/stock/metadata.py:1593-1639
consume, cancel Tüket, İptal Et status değeri active POST /reservations/{id}/consume, /cancel stock_reservation.create src/cluster_erp/modules/inventory/stock/metadata.py:1640-1661
create_usage_decision Kullanım Kararı Kaydet yok POST /usage-decisions/ usage_decision.create src/cluster_erp/modules/inventory/stock/metadata.py:2633-2698, src/cluster_erp/modules/inventory/stock/routes.py:579-597

ActionMeta sınıfının izin alanı yoktur; izin, ucun require_permission bağımlılığından gelir (src/cluster_erp/core/metadata.py:418-434). Sahiplik aktarımı ve proje ödünç uçlarının ActionMeta girdisi yoktur (src/cluster_erp/modules/inventory/stock/routes.py:217-289).

İş kuralları

  • Her kayıt önce GetProductById sorar ve stoklanabilir olmayan ürünü reddeder (src/cluster_erp/modules/inventory/stock/services.py:2119-2134).
  • Parti yönetimli ürün parti, seri takipli ürün seri numarası ister. Blokeli veya süresi geçmiş parti reddedilir (src/cluster_erp/modules/inventory/stock/services.py:2136-2193).
  • Mal girişi eşleşen stok satırının serbest miktarına ekler ve satır yoksa oluşturur. Satır bir satır kilidiyle okunur (src/cluster_erp/modules/inventory/stock/services.py:2195-2286).
  • Referans olarak satın alma siparişi veren bir mal girişi reddedilir; sipariş girişleri satın alma teslim alma akışından geçer (src/cluster_erp/modules/inventory/stock/routes.py:166-178).
  • Bir azaltma istenen miktarı verilen proje şeridinden alır. Mal çıkışı kalanını ortak stoktan alabilir ve her şerit için ayrı hareket yazar; diğer azaltmalar eksikte reddeder (src/cluster_erp/modules/inventory/stock/services.py:2288-2363, src/cluster_erp/modules/inventory/stock/services.py:473-490).
  • İki proje şeridi arasındaki aktarım, allow_project_to_project_stock_transfer ayarı açık değilse reddedilir (src/cluster_erp/modules/inventory/stock/services.py:552-566).
  • Bir proje ödüncü, en az biri proje olan iki farklı taraf ister (src/cluster_erp/modules/inventory/stock/services.py:615-640).
  • Düzeltme serbest miktarı yeni değere eşitler ve farkı hareket miktarı olarak kaydeder (src/cluster_erp/modules/inventory/stock/services.py:1051-1100).
  • Stok kategorileri yalnızca izin verilen dokuz çift boyunca geçer, örneğin gr_blocked → unrestricted veya quality → blocked (src/cluster_erp/modules/inventory/stock/services.py:112-122).
  • Kullanım kararı yalnızca mal girişine veya blokeli mal girişine ve karar verilmemiş miktarı aşmadan uygulanır. accept ve conditional_accept serbeste taşır, reject tedarikçiye iade eder, rework blokeliye taşır, scrap hurda hareketi işler (src/cluster_erp/modules/inventory/stock/services.py:124-135, src/cluster_erp/modules/inventory/stock/services.py:1496-1625).
  • Rezervasyon miktarı serbestten rezerveye taşır. Tüketme rezerveden düşer; iptal serbeste geri verir (src/cluster_erp/modules/inventory/stock/services.py:1901-2080).
  • Bir hareket bir kez iptal edilebilir; iptal hareketinin kendisi iptal edilemez (src/cluster_erp/modules/inventory/stock/services.py:1730-1760).
  • Parti kökeni customer, supplier veya internal olur (src/cluster_erp/modules/inventory/batches/services.py:35).
  • Hareket numaraları goods_movement, kararlar usage_decision, ödünçler stock_loan yıllık dizisinden gelir (src/cluster_erp/modules/inventory/stock/services.py:383).

Olaylar ve sorgular

Modül 14 sözleşme tüketir ve 20 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 GoodsReceived, GoodsIssued, StockTransferred, StockAdjusted, GrBlockedReceived, StockCategoryTransferred, ReturnedToVendor, ScrapPosted, UsageDecisionRecorded, GoodsMovementReversed StockService kayıt yöntemleri src/cluster_erp/modules/inventory/stock/services.py:431-447, src/cluster_erp/modules/inventory/stock/services.py:527-1879
yayar StockReserved, StockReservationConsumed, StockReservationCancelled rezervasyon yöntemleri src/cluster_erp/modules/inventory/stock/services.py:1957, src/cluster_erp/modules/inventory/stock/services.py:2020, src/cluster_erp/modules/inventory/stock/services.py:2073
yayar BatchCreated BatchService.create src/cluster_erp/modules/inventory/batches/services.py:135
sorguyu yanıtlar GetStockLevel, GetWarehouseById, GetBulkStockLevels, GetConsumptionHistory, GetBatchExpirySchedule, GetBatchesByProduct, IsStockAvailable module.py içindeki işleyiciler src/cluster_erp/modules/inventory/module.py:86-110
sorguyu yanıtlar ReserveStock, ConsumeReservation, CancelReservation, PostGoodsReceipt, PostGoodsIssue module.py içindeki işleyiciler src/cluster_erp/modules/inventory/module.py:111-115, src/cluster_erp/modules/inventory/module.py:392-495
abone olur DescribeFieldConsumers _describe_field_consumers src/cluster_erp/modules/inventory/module.py:68, src/cluster_erp/modules/inventory/module.py:646-696
abone olur DescribeAnalyticsFacts describe_analytics_facts src/cluster_erp/modules/inventory/module.py:119-124

Rezervasyon ve kayıt sorgu işleyicileri kendi oturumlarını commit eder (src/cluster_erp/modules/inventory/module.py:410, src/cluster_erp/modules/inventory/module.py:465, src/cluster_erp/modules/inventory/module.py:494). Alan tüketicisi yanıtı ürün bayrağı is_stockable için katı, batch_managed ve serial_tracked için gevşek bağımlılık bildirir (src/cluster_erp/modules/inventory/module.py:646-696); bkz. kiracı alanları.

Yetkiler

İzin anahtarı Kullanan Kaynak
warehouse.read, .create, .update, .delete depo uçları src/cluster_erp/modules/inventory/warehouses/routes.py:73-149
storage_location.read, .create, .update, .delete stok yeri uçları ve depo yer listesi src/cluster_erp/modules/inventory/warehouses/routes.py:168-274
stock_level.read stok seviyesi, kullanılabilirlik ve ödünç okumaları src/cluster_erp/modules/inventory/stock/routes.py:69-136, src/cluster_erp/modules/inventory/stock/routes.py:273
goods_movement.read, goods_movement.create hareket okumaları ve tüm kayıtlar src/cluster_erp/modules/inventory/stock/routes.py:163-437, src/cluster_erp/modules/inventory/stock/routes.py:601-627
stock_reservation.read, stock_reservation.create rezervasyon uçları src/cluster_erp/modules/inventory/stock/routes.py:460-520
usage_decision.read, usage_decision.create kullanım kararı uçları src/cluster_erp/modules/inventory/stock/routes.py:540-586
batch.*, serial_number.* parti ve seri uçları src/cluster_erp/modules/inventory/batches/routes.py:58-217

Gizlilik, saklama ve geçmiş

Modülün privacy_handlers.py dosyası yoktur. Depo, yer, parti ve seri silmeleri deleted_at alanını doldurur (src/cluster_erp/modules/inventory/warehouses/services.py:137-143, src/cluster_erp/modules/inventory/batches/services.py:178-184). Hareketlerin silme ucu yoktur; hatalı hareket karşı hareketle iptal edilir (src/cluster_erp/modules/inventory/stock/routes.py:376-450, src/cluster_erp/modules/inventory/stock/services.py:1730). Değişiklikler değişiklik geçmişi tarafından kaydedilir.

Analitik olguları

analytics_facts.py, inventory_goods_movements üzerinde tek bir olgu kümesi olan goods_movement katkısını verir. Boyutları hareket tipi, ürün, depo, taraf, referans tipi, iptal bayrağı ve kayıt tarihidir. Ölçüleri movement_count ve total_qty olup goods_movement.read ile okunur (src/cluster_erp/modules/inventory/analytics_facts.py:29-104). Stok seviyeleri katkıya eklenmez; gerekçeyi belge dizesi verir (src/cluster_erp/modules/inventory/analytics_facts.py:1-8). Bkz. analitik olguları.

Ayarlar ve başvuru verileri

Modülün ayarlar bölümü yoktur. Projeden projeye aktarım anahtarı, varsayılanı False olan ve Settings üzerinden okunan allow_project_to_project_stock_transfer sunucu ayarıdır (src/cluster_erp/config/settings.py:184, src/cluster_erp/modules/inventory/stock/services.py:561); bkz. ayarlar başvurusu.

Testler

tests/ içinde modules.inventory için (sonuç yok) ve web-client/_e2e_*.mjs içinde /inventory/ yolu için grep ile bulundu.

Tür Dosya Kapsam
e2e web-client/_e2e_inventory_app.mjs envanter uygulaması
e2e web-client/_e2e_procurement_gr.mjs satın alma siparişlerinden mal girişi
e2e web-client/_e2e_project_stock_phase2a.mjs, web-client/_e2e_project_pegging_phase2b.mjs proje stok şeritleri ve bağlama
e2e web-client/_e2e_make_or_buy_stock.mjs stoktan kesim çıkışları
e2e web-client/_e2e_mrp_hygiene_faz0.mjs ve diğer _e2e_mrp_* süitleri MRP koşusunun okuduğu stok
e2e web-client/_e2e_unique_soft_delete.mjs canlı satır benzersizliği

Tutarsızlıklar

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
stock level StockLevel Bir ürün kırılımının bir yer, parti, sahip proje ve emanetçideki stok miktarları. Stok seviyesi src/cluster_erp/modules/inventory/stock/models.py:25
goods movement GoodsMovement Tipi, miktarı ve referansı olan tek bir işlenmiş stok değişikliği. Mal hareketi src/cluster_erp/modules/inventory/stock/models.py:125
stock category _VALID_STOCK_CATEGORIES Bir stok seviyesinin altı miktar kovasından biri. Stok kategorisi src/cluster_erp/modules/inventory/stock/services.py:94-101
usage decision UsageDecision Teslim alınan miktarı bir hedef kategoriye veya stok dışına taşıyan karar. Kullanım kararı src/cluster_erp/modules/inventory/stock/models.py:270
stock reservation StockReservation Bir referans için ayrılan serbest stok. Stok rezervasyonu src/cluster_erp/modules/inventory/stock/models.py:347
project stripe owner_project_id Bir stok seviyesinin bir projeye ait kısmı; NULL ortak stoktur. Proje şeridi src/cluster_erp/modules/inventory/stock/models.py:79
project stock loan ProjectStockLoan Bir şeritten diğerine geri ödeme yükümlülüğüyle verilen stok. Proje stok ödüncü src/cluster_erp/modules/inventory/stock/models.py:415

İlgili sayfalar


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

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