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
GetProductByIdsorar 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_transferayarı 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→unrestrictedveyaquality→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.
acceptveconditional_acceptserbeste taşır,rejecttedarikçiye iade eder,reworkblokeliye taşır,scraphurda 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,supplierveyainternalolur (src/cluster_erp/modules/inventory/batches/services.py:35). - Hareket numaraları
goods_movement, kararlarusage_decision, ödünçlerstock_loanyı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¶
- Modüller dizini
- Procurement modülü
- Production modülü
- Ürün kırılımı ve stok dönüşümü
- Yumuşak silme ve devre dışı bırakma
- Bu modülün API başvurusu
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.