src/cluster_erp/modules/subscriptions/ içindeki subscriptions modülü yinelenen işleri kaydeder: şirketin sunduğu planları, müşterilerin bu planlara aboneliklerini ve şirketin kendisinin tedarikçilerle olan aboneliklerini. Fatura dönemlerini, yenilemeleri ve süre dolumunu izler ve yaşam döngüsü olayları yayar; fatura üretmez. Bir iş modülüdür; bir kiracının SaaS üyeliği değildir, o çok kiracılılık sayfasında açıklanır.
Bir bakışta¶
| Öğe | Değer | Kaynak |
|---|---|---|
| Paket | src/cluster_erp/modules/subscriptions/ |
klasör |
| Modül sınıfı | Module |
src/cluster_erp/modules/subscriptions/module.py:15 |
name / version |
subscriptions / 0.1.0 |
src/cluster_erp/modules/subscriptions/module.py:16-22 |
| API öneki | /api/v1/subscriptions (ModuleBase.api_prefix) |
src/cluster_erp/core/module_base.py:37-38 |
| Alt modüller | 2: plans, customer_subscriptions |
klasör listesi |
| Tablolar | 2: sub_plans, sub_customer_subscriptions |
src/cluster_erp/modules/subscriptions/plans/models.py:23, src/cluster_erp/modules/subscriptions/customer_subscriptions/models.py:34 |
| Metadata'daki varlıklar | 2: customer_subscription, subscription_plan |
src/cluster_erp/modules/subscriptions/module.py:149-152 |
| Web uygulamasında yeri | Katalog uygulaması subscriptions |
src/cluster_erp/modules/app_store/catalog.json (subscriptions 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 plan hangi yinelenen ürünün satıldığını, ne sıklıkla faturalandığını ve hangi fiyatla satıldığını belirtir (
src/cluster_erp/modules/subscriptions/plans/models.py:13-21). - Bir satış aboneliği koşullarını etkin bir plandan alır; bir satın alma aboneliğinin koşulları bir tedarikçiye karşı doğrudan girilir (
src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:129-206). - Etkinleştirme planın koşullarının anlık görüntüsünü alır; böylece sonraki plan değişiklikleri geçmişi yeniden yazmaz (
src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:247-275). - Günlük bir tarama, dönemi bitmiş abonelikleri yeniler veya sona erdirir (
src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:348-390,src/cluster_erp/server/app.py:504-546).
Alt modüller¶
| Alt modül | Amaç | Ana varlıklar | Yönlendirici | Kaynak |
|---|---|---|---|---|
plans |
Satılabilir yinelenen planlar | SubscriptionPlan |
/api/v1/subscriptions/subscription-plans |
src/cluster_erp/modules/subscriptions/plans/routes.py:25 |
customer_subscriptions |
Müşteri ve satın alma abonelikleri | CustomerSubscription |
/api/v1/subscriptions (modül kökü) |
src/cluster_erp/modules/subscriptions/customer_subscriptions/routes.py:31-34 |
Veri modeli¶
| Varlık | Tablo | Anahtar alanlar | Notlar | Kaynak |
|---|---|---|---|---|
SubscriptionPlan |
sub_plans |
code, name, product_id, product_model_id, product_version_id, billing_cycle, interval_count, price_per_cycle, currency, setup_fee, trial_days, min_term_cycles, status |
ürün üçlüsü zorunlu; para sütunları Numeric(18, 4); kiracı alanları extra içinde |
src/cluster_erp/modules/subscriptions/plans/models.py:13-59 |
CustomerSubscription |
sub_customer_subscriptions |
subscription_no, direction, customer_id, vendor_id, plan_id, ürün üçlüsü, anlık koşullar, dönem tarihleri, auto_renew, status |
bir denetim kısıtı sales için müşteri, purchase için tedarikçi ister |
src/cluster_erp/modules/subscriptions/customer_subscriptions/models.py:23-109 |
Para değerleri Numeric sütunlar ve şemalarda Decimal olur; olaylar tutarları dizge olarak taşır (src/cluster_erp/modules/subscriptions/plans/models.py:43-47, src/cluster_erp/modules/subscriptions/plans/schemas.py:22-24, src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:415-444). Bkz. para ve Decimal.
Ekranlar ve metadata¶
get_metadata, iki liste bölümüyle Abonelikler (İngilizce Subscriptions) adlı bir kenar çubuğu grubu bildirir: customer_subscription için Abonelikler ve subscription_plan için Planlar (İngilizce Plans) (src/cluster_erp/modules/subscriptions/module.py:121-153). Fatura döngüsü seçenekleri Aylık, Üç Aylık, Altı Aylık ve Yıllık olur (src/cluster_erp/modules/subscriptions/customer_subscriptions/metadata.py:40-45).
Durumlar ve aksiyonlar¶
Plan durumları draft, active, retired sırasıyla ilerler, geri dönüş yoktur (src/cluster_erp/modules/subscriptions/plans/services.py:101-117). Abonelik durumları draft, active, paused, cancelled ve expired olur (src/cluster_erp/modules/subscriptions/customer_subscriptions/models.py:97-100).
| Aksiyon | Etiket | Koşul | Uç | İzin | Kaynak |
|---|---|---|---|---|---|
plan activate |
Aktifleştir | status değeri draft |
POST /subscription-plans/{id}/activate |
subscription_plan.activate |
src/cluster_erp/modules/subscriptions/plans/metadata.py:100-107, src/cluster_erp/modules/subscriptions/plans/routes.py:99-108 |
plan retire |
Kullanımdan Kaldır | status değeri active |
POST /subscription-plans/{id}/retire |
subscription_plan.retire |
src/cluster_erp/modules/subscriptions/plans/metadata.py:108-115, src/cluster_erp/modules/subscriptions/plans/routes.py:111-120 |
activate |
Aktifleştir | status değeri draft |
POST /{id}/activate |
customer_subscription.activate |
src/cluster_erp/modules/subscriptions/customer_subscriptions/metadata.py:141, src/cluster_erp/modules/subscriptions/customer_subscriptions/routes.py:125-130 |
pause |
Duraklat | status değeri active |
POST /{id}/pause |
customer_subscription.pause |
src/cluster_erp/modules/subscriptions/customer_subscriptions/metadata.py:142, src/cluster_erp/modules/subscriptions/customer_subscriptions/routes.py:131-136 |
resume |
Devam Et | status değeri paused |
POST /{id}/resume |
customer_subscription.resume |
src/cluster_erp/modules/subscriptions/customer_subscriptions/metadata.py:143 |
renew |
Şimdi Yenile | status değeri active |
POST /{id}/renew |
customer_subscription.renew |
src/cluster_erp/modules/subscriptions/customer_subscriptions/metadata.py:144 |
cancel |
İptal Et | status değeri draft, active veya paused |
POST /{id}/cancel |
customer_subscription.cancel |
src/cluster_erp/modules/subscriptions/customer_subscriptions/metadata.py:146-151, src/cluster_erp/modules/subscriptions/customer_subscriptions/routes.py:151-161 |
Durum şeması bir aboneliğin yaşam döngüsünü gösterir.
stateDiagram-v2
[*] --> draft: create
draft --> active: activate
active --> paused: pause
paused --> active: resume
active --> active: renew veya tarama yenilemesi
active --> expired: tarama, bitiş geldi veya yenileme kapalı
draft --> cancelled: cancel
active --> cancelled: cancel
paused --> cancelled: cancel
cancelled --> [*]
expired --> [*]Düz anlatımla: abonelik draft olarak yaratılır; activate ilk dönemi başlatır; pause ve resume active ile paused arasında geçirir; renew veya tarama etkin bir aboneliğin dönemini ilerletir; tarama bitiş tarihini geçmiş veya dönemi yenilemesi kapalıyken bitmiş etkin bir aboneliği sona erdirir; cancel zaten iptal edilmemiş veya sona ermemiş her aboneliği bitirir (src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:247-399). Etiketler metadata etiket sözlüklerinden gelir.
İş kuralları¶
- Bir satış aboneliği bir müşteri ve etkin bir plan ister; bir satın alma aboneliği bir tedarikçi, ürün üçlüsünün tamamı, fiyat, döngü ve para birimi ister (
src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:129-190). subscription_nove plancodedeğerinext_codeile verilen yıllık iş anahtarlarıdır (src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:112,src/cluster_erp/modules/subscriptions/plans/services.py:65).- Bir dönem ay olarak döngü uzunluğu (1, 3, 6 veya 12) çarpı
interval_countolur ve ilk dönemin ayın gününe sabitlenir (src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:35-53,src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:328-339). - Tarama vadesi gelmiş her dönemi yakalar ve dönem başına bir yenileme yayar (
src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:365-385). - Bir olaydaki tutar birim fiyat çarpı miktardır (
src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:426-444).
Olaylar ve sorgular¶
| Yön | Sözleşme sınıfı | İşleyici veya yayan | Kaynak |
|---|---|---|---|
| yayar | SubscriptionActivated, SubscriptionRenewed, SubscriptionCancelled, SubscriptionExpired |
SubscriptionService._emit |
src/cluster_erp/modules/subscriptions/customer_subscriptions/services.py:415-444, src/cluster_erp/core/contracts.py:2318-2352 |
| sorguyu yanıtlar | GetSubscriptionPlanById |
_handle_get_plan |
src/cluster_erp/modules/subscriptions/module.py:53 |
| sorguyu yanıtlar | GetCustomerSubscriptionById |
_handle_get_subscription |
src/cluster_erp/modules/subscriptions/module.py:54-56 |
Dört olay sınıfı için modül dışında yapılan grep bu commit'te hiçbir abone bulmaz.
Yetkiler¶
| İzin anahtarı | Kullanan | Kaynak |
|---|---|---|
subscription_plan.read, .create, .update, .delete, .bulk_delete, .activate, .retire |
plan uçları | src/cluster_erp/modules/subscriptions/plans/routes.py:42-140 |
customer_subscription.read, .create, .update, .delete, .bulk_delete, .activate, .pause, .resume, .renew, .cancel |
abonelik uçları; .renew isteğe bağlı taramayı da korur |
src/cluster_erp/modules/subscriptions/customer_subscriptions/routes.py:51-197 |
Yaşam döngüsü kodları ek kodlar olarak tohumlanır (src/cluster_erp/server/app.py:837-847).
Gizlilik, saklama ve geçmiş¶
Modül müşterilerin ve tedarikçilerin taraf kimliklerini saklar ama kendine ait kişisel alanı yoktur ve privacy_handlers.py dosyası yoktur. Değişiklikler değişiklik geçmişine yazılır; bkz. değişiklik geçmişi. extra içindeki kiracı tanımlı değerler okumada izne göre süzülür (src/cluster_erp/modules/subscriptions/customer_subscriptions/routes.py:42-48).
Analitik olguları¶
Bu modülün analytics_facts.py dosyası yoktur.
Ayarlar ve başvuru verileri¶
Modül kendine özgü bir ayar okumaz. Para birimleri plan şemasında desenle doğrulanan üç harfli kodlardır (src/cluster_erp/modules/subscriptions/plans/schemas.py:23). Günlük tarama her kiracı veritabanında bir lider kilidi altında çalışır (src/cluster_erp/server/app.py:504-546).
Testler¶
tests/ ve web-client/ içinde dosya adıyla bulundu.
| Tür | Dosya | Kapsam |
|---|---|---|
| pytest | tests/test_subscription_math.py |
dönem hesabı ve olay yükleri (5 test) |
| e2e | web-client/_e2e_subscriptions.mjs |
web uygulamasında planlar ve abonelikler |
Tutarsızlıklar¶
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| subscription plan | SubscriptionPlan |
Döngüsü ve fiyatıyla satılabilir yinelenen bir ürün. | Plan | src/cluster_erp/modules/subscriptions/plans/models.py:13 |
| customer subscription | CustomerSubscription |
Bir müşteri veya tedarikçiyle canlı yinelenen anlaşma. | Abonelik | src/cluster_erp/modules/subscriptions/customer_subscriptions/models.py:23 |
| subscription direction | direction |
Bir aboneliğin müşteriye satış mı yoksa tedarikçiden satın alma mı olduğu. | abonelik yönü | src/cluster_erp/modules/subscriptions/customer_subscriptions/models.py:55 |
İlgili sayfalar¶
- Modüller dizini
- Bu modülün API başvurusu
- Kimlik, erişim, kiracılık, gizlilik ve lisans
- Para ve Decimal
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.