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

Modül

Products and services modülü (products_and_services)

Ürünleri, modelleri, versiyonları, kategorileri, tedarikçi kaynaklarını ve ölçü birimlerini içeren products_and_services modülü sayfası.

src/cluster_erp/modules/products_and_services/ içindeki products_and_services modülü malzeme ana verisidir. Planlama, stok ebadı ve maliyet alanlarıyla ürünleri ve hizmetleri, zorunlu ürün, model ve versiyon kırılımını, bir kategori ağacını, kırılım başına tedarikçi kaynaklarını ve ölçü birimlerini tutar. Bir ürünü anan diğer her modül bu modüle EventBus üzerinden sorar. Ortak kırılım kuralı ürün kırılımı ve stok dönüşümü sayfasında açıklanır.

Bir bakışta

Öğe Değer Kaynak
Paket src/cluster_erp/modules/products_and_services/ klasör
Modül sınıfı Module src/cluster_erp/modules/products_and_services/module.py:18
name / version products_and_services / 0.1.0 src/cluster_erp/modules/products_and_services/module.py:19-25
API öneki /api/v1/products_and_services (ModuleBase.api_prefix) src/cluster_erp/core/module_base.py:37-38
Alt modüller 6: products, product_models, product_versions, categories, vendors, settings klasör listesi
Tablolar 9 (paketteki __tablename__ sayısı) src/cluster_erp/modules/products_and_services/models.py
Metadata'daki varlıklar 7: product, product_model, product_version, product_vendor, category, unit_category, unit src/cluster_erp/modules/products_and_services/module.py:998-1006
Uçlar Pakette 55 uç dekoratörü @router. için grep
Web uygulamasında yeri Katalog uygulaması products src/cluster_erp/modules/app_store/catalog.json (products 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

  • Ürünleri ve hizmetleri malzeme türü, dört yetenek bayrağı, durum, birimler, fiziksel veriler, stok ebadı ve üret-ya-da-satın-al verileri, planlama parametreleri, maliyet alanları ve ticari verilerle tutar (src/cluster_erp/modules/products_and_services/products/models.py:20-351).
  • Her ürüne en az bir model ve her modele en az bir versiyon verir; böylece stok ve belgeler her zaman tam bir kırılıma kayıt atabilir (src/cluster_erp/modules/products_and_services/product_versions/models.py:16-19).
  • Bir ürünü bir kategori ağacının birden çok kategorisine bağlar (src/cluster_erp/modules/products_and_services/products/models.py:395-417, src/cluster_erp/modules/products_and_services/categories/models.py:11-30).
  • Tedarikçi kaynaklarını ürün, model, versiyon ve tedarikçi tarafı başına kaydeder (src/cluster_erp/modules/products_and_services/vendors/models.py:14-63).
  • Dönüşüm katsayılarıyla birim kategorilerini ve birimleri tutar ve başlangıçta varsayılan bir küme tohumlar (src/cluster_erp/modules/products_and_services/module.py:31-50).

Alt modüller

Alt modül Amaç Ana varlıklar Yönlendirici Kaynak
products Ürünler ve hizmetler, kategori bağları, hizmet bölümü, fotoğraf Product, ProductServiceAttributes, ProductCategoryLink /products src/cluster_erp/modules/products_and_services/products/routes.py:32
product_models Bir ürünün modelleri, fotoğraf ProductModel /models src/cluster_erp/modules/products_and_services/product_models/routes.py:25
product_versions Bir modelin versiyonları ProductVersion /versions src/cluster_erp/modules/products_and_services/product_versions/routes.py:22
categories Kategori ağacı ProductCategory /categories src/cluster_erp/modules/products_and_services/categories/routes.py:22
vendors Tedarikçi kaynakları ProductVendor /vendors src/cluster_erp/modules/products_and_services/vendors/routes.py:24
settings Birim kategorileri ve birimler UnitCategory, UnitOfMeasure /settings src/cluster_erp/modules/products_and_services/settings/routes.py:29

Yönlendirici yolları modül önekine görelidir; altı yönlendiricinin tamamı uygulama yetkisine bağlı tek bir modül yönlendiricisi altında durur (src/cluster_erp/modules/products_and_services/module.py:75-83).

Veri modeli

Ürün, model ve versiyon kırılımı

Şema kırılım tablolarını ve onları gösteren satırları gösterir.

erDiagram
 Product ||--|{ ProductModel : "product_id"
 ProductModel ||--|{ ProductVersion : "product_model_id"
 Product ||--o{ ProductCategoryLink : "product_id"
 ProductCategory ||--o{ ProductCategoryLink : "category_id"
 Product ||--o| ProductServiceAttributes : "product_id"
 ProductVersion ||--o{ ProductVendor : "product_version_id"
 UnitCategory ||--|{ UnitOfMeasure : "category_id"
 UnitOfMeasure ||--o{ Product : "base_unit_id"

Düz anlatımla: bir ürünün bir veya daha fazla modeli, bir modelin bir veya daha fazla versiyonu vardır. Ürün başına tam olarak bir canlı model ve model başına tam olarak bir canlı versiyon is_default taşır; bunu kısmi benzersiz indeksler zorlar (src/cluster_erp/modules/products_and_services/product_models/models.py:32-38, src/cluster_erp/modules/products_and_services/product_versions/models.py:35-41). Bir versiyon adı kendi modeli içinde benzersizdir (src/cluster_erp/modules/products_and_services/product_versions/models.py:42-49). Bir ürünün kategori bağları ve, bir hizmetse, tek bir hizmet bölümü satırı vardır. Bir tedarikçi kaynağı bir ürünü, bir modeli, bir versiyonu ve bir tedarikçi tarafını belirtir (src/cluster_erp/modules/products_and_services/vendors/models.py:16-49). Birimler bir birim kategorisine aittir ve bir ürün temel, satın alma, satış, ağırlık, hacim ve boyut birimlerini gösterir (src/cluster_erp/modules/products_and_services/products/models.py:103-138).

Varlıklar

Varlık Tablo Anahtar alanlar Notlar Kaynak
Product products_products code, name, sku, barcode, material_type, category_id, is_purchasable, is_sellable, is_manufacturable, is_stockable, status, stock_form, sourcing_preference, standard_cost, extra sku ve barcode canlı satırlar arasında benzersiz src/cluster_erp/modules/products_and_services/products/models.py:20-351
ProductServiceAttributes products_service_attributes product_id, billing_method, rate_basis, standard_rate, currency_code, duration_value, is_billable ürün başına bir canlı satır src/cluster_erp/modules/products_and_services/products/models.py:353-392
ProductCategoryLink products_product_category_links product_id, category_id canlı satırlar arasında benzersiz çift src/cluster_erp/modules/products_and_services/products/models.py:395-417
ProductModel products_models code, product_id, name, sku, barcode, attributes, is_default, photo_attachment_id ürün başına bir canlı varsayılan src/cluster_erp/modules/products_and_services/product_models/models.py:17-66
ProductVersion products_model_versions code, product_model_id, name, sku, barcode, attributes, is_default model başına bir canlı varsayılan src/cluster_erp/modules/products_and_services/product_versions/models.py:16-63
ProductCategory products_categories code, name, parent_id, sort_order kendine başvuran ağaç src/cluster_erp/modules/products_and_services/categories/models.py:11-30
ProductVendor products_product_vendors product_id, product_model_id, product_version_id, party_id, vendor_part_number, lead_time_days, unit_price, currency, is_preferred, valid_from, valid_to canlı satırlar arasında kırılım ve taraf başına benzersiz src/cluster_erp/modules/products_and_services/vendors/models.py:14-63
UnitCategory products_unit_categories code, name, translations kod ve ad canlı satırlar arasında benzersiz src/cluster_erp/modules/products_and_services/settings/models.py:13-39
UnitOfMeasure products_units_of_measure code, category_id, name, symbol, is_base_unit, conversion_factor, sort_order symbol canlı satırlar arasında benzersiz; katsayı Numeric(24, 6) src/cluster_erp/modules/products_and_services/settings/models.py:42-79

Para ve miktar sütunları Numeric türündedir; maliyetler ve tedarikçi fiyatları Numeric(18, 4) kullanır (src/cluster_erp/modules/products_and_services/products/models.py:313-314, src/cluster_erp/modules/products_and_services/vendors/models.py:56). Decimal değerler dizge olarak serileştirilir (src/cluster_erp/modules/products_and_services/products/schemas.py:149-151, src/cluster_erp/modules/products_and_services/products/schemas.py:478-481). Bkz. para ve Decimal.

Ekranlar ve metadata

get_metadata üç bölümlü bir Ürünler ve Hizmetler (İngilizce Products & Services) kenar çubuğu grubu bildirir: Ürünler (liste), Kategoriler (ağaç) ve unit_category ile unit sekmeli Ayarlar (src/cluster_erp/modules/products_and_services/module.py:954-997). Ürün ayrıntısında Genel, Hizmet, Fiziksel Özellikler, Envanter ve Planlama, Üretim ve Maliyet, Tedarikçiler, Modeller, Ürün Ağaçları ve Stok sekmeleri vardır (src/cluster_erp/modules/products_and_services/products/metadata.py:222-295). Hizmet sekmesi yalnızca service malzeme türü için görünür; fiziksel, envanter, üretim ve stok sekmeleri onun için gizlenir. Ürün Ağaçları sekmesi yalnızca üretilebilir ürünler için görünür ve bom modülünün listesini okur; Stok ise inventory modülünün listesini okur (src/cluster_erp/modules/products_and_services/products/metadata.py:230-294). Oluşturma formu ilk modelin adını, SKU'sunu ve barkodunu ve ilk versiyonun adını toplar (src/cluster_erp/modules/products_and_services/products/metadata.py:381-424). Ürünlerin ve modellerin fotoğrafları vardır (src/cluster_erp/modules/products_and_services/products/metadata.py:118, src/cluster_erp/modules/products_and_services/products/metadata.py:1328). Kategori ağacı GET /categories/tree kullanır (src/cluster_erp/modules/products_and_services/categories/metadata.py:26-32).

Durumlar ve aksiyonlar

Ürün durumları draft, active, blocked ve obsolete olur (src/cluster_erp/modules/products_and_services/products/schemas.py:24-28). Durum bir form alanıdır ve değişikliği ProductStatusChanged yayar (src/cluster_erp/modules/products_and_services/products/services.py:590-598). Modül tek bir ActionMeta bildirir.

Aksiyon Etiket Koşul Uç İzin Kaynak
seed_defaults (birim kategorisi) Varsayılanları Yükle yok (genel) POST /settings/unit-categories/seed-defaults unit_category.seed src/cluster_erp/modules/products_and_services/settings/metadata.py:29-37, src/cluster_erp/modules/products_and_services/settings/routes.py:84-91

İş kuralları

  • Her malzeme türünün, yük bir bayrağı belirtmediğinde kullanılan varsayılan yetenek bayrakları vardır (src/cluster_erp/modules/products_and_services/products/schemas.py:34-89, src/cluster_erp/modules/products_and_services/products/services.py:296-312).
  • Kesin kısıtlar: bir hizmet ne stoklanabilir ne üretilebilirdir, bir sarf malzemesi stoklanamaz ve bir hammadde üretilemez; ihlal PRODUCT_CAPABILITY_VIOLATION yanıtını verir (src/cluster_erp/modules/products_and_services/products/schemas.py:91-95, src/cluster_erp/modules/products_and_services/products/services.py:671-683).
  • Stoklanamayan bir ürünün parti, seri, raf ömrü, emniyet stoku ve yeniden sipariş noktası alanları temizlenir (src/cluster_erp/modules/products_and_services/products/services.py:48-55, src/cluster_erp/modules/products_and_services/products/services.py:316-318).
  • SKU ve barkod canlı ürünler arasında boş olmalıdır (src/cluster_erp/modules/products_and_services/products/services.py:272-292).
  • Bir ürün oluşturmak varsayılan modelini oluşturur; ad verilmezse model ürünün adını alır. Model de varsayılan versiyonunu oluşturur; versiyonun adı varsayılan olarak 1 olur (src/cluster_erp/modules/products_and_services/products/services.py:376-395, src/cluster_erp/modules/products_and_services/product_models/services.py:103-112, src/cluster_erp/modules/products_and_services/product_models/schemas.py:22).
  • Bir ürünün ilk modeli ve bir modelin ilk versiyonu varsayılan olur; yeni bir varsayılan bayrağı eskisinden alır (src/cluster_erp/modules/products_and_services/product_models/services.py:78-99, src/cluster_erp/modules/products_and_services/product_versions/services.py:72-90).
  • Varsayılan model veya versiyon varsayılanlıktan düşürülemez, kullanımdan kaldırılamaz veya silinemez; yanıt HTTP 409 ile PRODUCT_MODEL_DEFAULT_PROTECTED veya PRODUCT_VERSION_DEFAULT_PROTECTED olur (src/cluster_erp/modules/products_and_services/product_models/services.py:115-160, src/cluster_erp/modules/products_and_services/product_versions/services.py:92-140).
  • Etkin bir ürün ağacı versiyonunun canlı bileşeni olan bir ürün silinemez; modül bom modülüne GetPartUsageCounts ile sorar ve PRODUCT_IN_ACTIVE_BOM yanıtını verir (src/cluster_erp/modules/products_and_services/products/services.py:604-626).
  • Bir ürünü silmek kategori bağlarını ve hizmet bölümünü de aynı zaman damgasıyla geçici olarak siler; yeniden etkinleştirmek onları geri getirir (src/cluster_erp/modules/products_and_services/products/services.py:628-660, src/cluster_erp/modules/products_and_services/module.py:165-236).
  • Bir üründe belirtilen her kategori canlı olmalıdır; ilki normalleştirilmemiş category_id olur (src/cluster_erp/modules/products_and_services/products/services.py:151-206).
  • Bir tedarikçi kaynağı ürünün ve tarafın var olduğunu denetler, kırılımı doğrular ve aynı kırılım ve taraf için ikinci bir canlı kaynağı HTTP 409 ile reddeder (src/cluster_erp/modules/products_and_services/vendors/services.py:94-143).
  • Birim dönüşümü yalnızca tek bir birim kategorisi içinde çalışır: değer çarpı kaynak katsayı, bölü hedef katsayı (src/cluster_erp/modules/products_and_services/settings/services.py:237-247). Tohumda 13 birim kategorisi vardır (src/cluster_erp/modules/products_and_services/settings/seed_data.py, code anahtarlı girdiler).
  • Kodlar product, product_model, product_version, product_category ve unit_of_measure yıllık dizilerinden gelir (src/cluster_erp/modules/products_and_services/products/services.py:325, src/cluster_erp/modules/products_and_services/product_models/services.py:79, src/cluster_erp/modules/products_and_services/product_versions/services.py:73).

Olaylar ve sorgular

Modül 19 sözleşme tüketir ve 8 sözleşme üretir; sayım parties modülü sayfasındaki gibi yapıldı. Üreticilerin ve tüketicilerin tam listesi sözleşmeler başvurusu sayfasındadır.

Yön Sözleşme sınıfı İşleyici veya yayan Kaynak
yayar ProductCreated, ServiceCreated ProductService.create src/cluster_erp/modules/products_and_services/products/services.py:407-424
yayar ProductUpdated, ProductStatusChanged ProductService.update src/cluster_erp/modules/products_and_services/products/services.py:582-598
yayar ProductDeleted ProductService.delete src/cluster_erp/modules/products_and_services/products/services.py:652-659
sorgular GetPartUsageCounts, GetProductById, GetPartyById ürün silme; tedarikçi oluşturma src/cluster_erp/modules/products_and_services/products/services.py:609-616, src/cluster_erp/modules/products_and_services/vendors/services.py:96-111
sorguyu yanıtlar ValidateProductBreakdown, GetProductDefaultBreakdown, GetBulkProductDefaultBreakdowns _handle_validate_breakdown, _handle_default_breakdown, _handle_bulk_default_breakdowns src/cluster_erp/modules/products_and_services/module.py:131-138, src/cluster_erp/modules/products_and_services/module.py:759-916
sorguyu yanıtlar GetProductById _handle_get_product src/cluster_erp/modules/products_and_services/module.py:108, src/cluster_erp/modules/products_and_services/module.py:238-317
sorguyu yanıtlar ConvertQuantity, GetUnitOfMeasure, FindUnitOfMeasure birim işleyicileri src/cluster_erp/modules/products_and_services/module.py:109-115
sorguyu yanıtlar IsProductManufacturable, IsProductPurchasable, IsProductSellable, GetProductsByMaterialType bayrak işleyicileri src/cluster_erp/modules/products_and_services/module.py:116-119
sorguyu yanıtlar GetProductVendors, GetBulkProductVendors, GetProductPlanningData, SetProductPlanningClassification, ApplyProductBufferZones planlama işleyicileri src/cluster_erp/modules/products_and_services/module.py:120-130
sorguyu yanıtlar CreateScaffoldIntermediate _handle_create_scaffold_intermediate src/cluster_erp/modules/products_and_services/module.py:133-135, src/cluster_erp/modules/products_and_services/module.py:806-875
abone olur RecordActivated, DescribeAnalyticsFacts _on_record_activated, describe_analytics_facts src/cluster_erp/modules/products_and_services/module.py:107, src/cluster_erp/modules/products_and_services/module.py:142-147

CreateScaffoldIntermediate, bir rota operasyonunun çıktısı için stoklanabilir ama üretilemez bir yarı mamul ürünü oluşturur veya SKU'ya göre yeniden kullanır (src/cluster_erp/modules/products_and_services/module.py:806-875). BOM modülü sayfasında anlatılan rota iskeleti tarafından kullanılır.

Yetkiler

İzin anahtarı Kullanan Kaynak
product.read, .create, .update, .delete, .bulk_delete ürün ve fotoğraf uçları src/cluster_erp/modules/products_and_services/products/routes.py:55-266
product_model.read, .create, .update, .delete, .bulk_delete model ve fotoğraf uçları src/cluster_erp/modules/products_and_services/product_models/routes.py:32-199
product_version.read, .create, .update, .delete, .bulk_delete versiyon uçları src/cluster_erp/modules/products_and_services/product_versions/routes.py:29-101
category.read, .create, .update, .delete, .bulk_delete kategori uçları src/cluster_erp/modules/products_and_services/categories/routes.py:28-97
product_vendor.read, .create, .update, .delete, .bulk_delete tedarikçi uçları src/cluster_erp/modules/products_and_services/vendors/routes.py:34-127
unit_category.*, unit.* birim uçları src/cluster_erp/modules/products_and_services/settings/routes.py:59-265

Gizlilik, saklama ve geçmiş

Modül kendine ait kişisel veri saklamaz ve privacy_handlers.py dosyası yoktur. Bir tedarikçi kaynağı, tedarikçi tarafının görünen adını vendor_name_cache içinde tutar (src/cluster_erp/modules/products_and_services/vendors/models.py:51, src/cluster_erp/modules/products_and_services/vendors/services.py:145-148). Değişiklikler değişiklik geçmişi tarafından kaydedilir.

Analitik olguları

analytics_facts.py, products_products üzerinde tek bir olgu kümesi, product, bildirir; boyutları malzeme türü, durum, stok biçimi, temin tercihi, ABC göstergesi, aktif ve oluşturulma tarihi, ölçüleri product_count ve average_lead_time_days olur (src/cluster_erp/modules/products_and_services/analytics_facts.py:21-87).

Ayarlar ve başvuru verileri

Birim kategorileri ve birimler veritabanındaki başvuru verileridir. Modül her başlangıçta varsayılan kümeyi UNIT_SEED_DATA içinden tohumlar (src/cluster_erp/modules/products_and_services/module.py:37-50, src/cluster_erp/modules/products_and_services/settings/services.py:86-150). Varsayılanları Yükle aksiyonu aynı tohumlamayı istek üzerine çalıştırır.

Testler

tests/ içinde modules.products_and_services 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 ürün ağacı formlarının kullandığı ürün metadata'sı, birim tohum verisi ve birim seçicileri (10 test)
e2e web-client/_e2e_products.mjs ürünler uygulaması: liste, kategori ağacı, ayrıntı, ayarlar
e2e web-client/_e2e_products_service.mjs hizmet bölümü, çoklu kategori ve türe duyarlı form
e2e web-client/_e2e_product_model_versions.mjs web uygulamasında ürün, model ve versiyon zinciri
e2e web-client/_e2e_make_or_buy_stock.mjs stok ebadı, üret-ya-da-satın-al ve stok malzemesi kırılımı

Tutarsızlıklar

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
product Product Malzeme ana verisindeki bir kalem veya hizmet. Ürün src/cluster_erp/modules/products_and_services/products/models.py:20
product model ProductModel Bir ürünün bir varyantı; her ürünün varsayılan bir modeli vardır. Ürün modeli src/cluster_erp/modules/products_and_services/product_models/models.py:17
product version ProductVersion Bir modelin bir versiyonu; stok ürün, model ve versiyon başına tutulur. Ürün versiyonu src/cluster_erp/modules/products_and_services/product_versions/models.py:16
material type material_type Varsayılan yetenek bayraklarını belirleyen ürün çeşidi. Malzeme türü src/cluster_erp/modules/products_and_services/products/schemas.py:12-21
vendor source ProductVendor Bir ürün kırılımını fiyat ve teslim süresiyle tedarik eden bir tedarikçi tarafı. Tedarikçi kaynağı src/cluster_erp/modules/products_and_services/vendors/models.py:14
unit of measure UnitOfMeasure Birim kategorisi içinde dönüşüm katsayısı olan bir birim. Ölçü birimi src/cluster_erp/modules/products_and_services/settings/models.py:42

İlgili sayfalar


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

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