docs: fix all discrepancies based on comprehensive code audit
Corrections verified against actual CMS/BackOffice/FrontOffice source code: - ClubActivationFee: 25,200,000 (not 25,000,000) - Tree depth: no limit (15 is commission calculation depth only) - IPG wallet charge: Balance=56M + Discount=56M - DayaLoan wallet charge: Balance=56M + Discount=112M (2×) - Discount: per-product MaxDiscountPercent (not fixed 30%) - VAT: 10% (ShopVAT) vs 9% (discount store PlaceOrder) - Kavenegar template: 'Afrino' only (not verify-foursat) - SMS sender: 1000001110100 - DayaLoan job: every 20min (not 15min) - Commission job: Sunday 00:05 (not Saturday) - Network tree: on User entity (not separate NetworkNode table) - UserWallets entity (not UserWalletBalances) - OTP: 6 digits, 5 attempts, 2min TTL, 60s cooldown - Removed non-existent constants (ClubJoiningPercentage, ClubActivationThreshold) - Fixed Hangfire Chatika interval: every 5min - Removed InventorySync from recurring jobs list
This commit is contained in:
@@ -9,10 +9,10 @@
|
||||
|
||||
| مفهوم | توضیح |
|
||||
|-------|--------|
|
||||
| **عضویت باشگاه** | خرید پکیج طلایی (۵۶M) → فعالسازی (۲۵M) → عضو فعال باشگاه |
|
||||
| **درخت باینری** | هر کاربر حداکثر ۲ فرزند مستقیم (چپ/راست) — حداکثر ۱۵ سطح |
|
||||
| **کمیسیون هفتگی** | محاسبه بر اساس تعادل چپ/راست — هفته شمسی شنبهتاجمعه |
|
||||
| **۳ کیف پول** | `Balance` (نقدی) + `NetworkBalance` (شبکهای) + `DiscountBalance` (تخفیفی) |
|
||||
| **عضویت باشگاه** | خرید پکیج طلایی (۵۶M) → فعالسازی (۲۵.۲M) → عضو فعال باشگاه |
|
||||
| **درخت باینری** | هر کاربر حداکثر ۲ فرزند مستقیم (چپ/راست) — بدون محدودیت عمق |
|
||||
| **کمیسیون هفتگی** | محاسبه بر اساس تعادل چپ/راست — یکشنبه ۰۰:۰۵ (Hangfire cron) |
|
||||
| **۳ کیف پول** | `Balance` (نقدی) + `NetworkBalance` (طلایی/کمیسیون) + `DiscountBalance` (تخفیفی) |
|
||||
|
||||
---
|
||||
|
||||
@@ -25,14 +25,14 @@
|
||||
/ \ / \
|
||||
L1 L2 R1 R2
|
||||
/ \ / \ / \ / \
|
||||
... ... ... ... ... ← حداکثر ۱۵ سطح
|
||||
... ... ... ... ... ← بدون محدودیت عمق
|
||||
```
|
||||
|
||||
**قوانین:**
|
||||
- هر نود حداکثر ۲ فرزند (Binary)
|
||||
- جایگذاری: `LegPosition` ∈ {Left, Right}
|
||||
- عضو جدید → در اولین جای خالی از چپترین مسیر قرار میگیرد
|
||||
- `SP_GetNetworkTree` — Stored Procedure بازگشتی
|
||||
- هر نود حداکثر ۲ فرزند (Binary) — `MaxDirectChildrenPerLeg = 1`
|
||||
- جایگذاری: `LegPosition` ∈ {Left=0, Right=1} (enum `NetworkLeg`)
|
||||
- مدل شبکه مستقیم روی entity `User` — فیلدهای `NetworkParentId`, `LegPosition`, `NetworkChildren`
|
||||
- محاسبه کمیسیون تا عمق ۱۵ سطح (`CommissionMaxNetworkLevel = 15`) — اما درخت بدون محدودیت رشد میکند
|
||||
|
||||
---
|
||||
|
||||
@@ -56,11 +56,16 @@
|
||||
▼
|
||||
امضای قرارداد ← AcceptContract
|
||||
│
|
||||
├─→ شارژ ۳ کیف پول (Balance=56M, Network=56M, Discount=56M)
|
||||
├─→ کسر هزینه فعالسازی (25M از Balance)
|
||||
├─→ واریز 25.2M به Pool هفتگی
|
||||
├─→ شارژ ۲ کیف پول: Balance += 56M, DiscountBalance += 56M
|
||||
│ (NetworkBalance شارژ نمیشود — فقط برای کمیسیون)
|
||||
├─→ کسر هزینه فعالسازی (25.2M از Balance)
|
||||
├─→ واریز 25.2M به Pool هفتگی (ClubActivationFee)
|
||||
├─→ قرارگیری در درخت باینری
|
||||
└─→ رفرش JWT Token (claims جدید)
|
||||
|
||||
⚠️ در خرید با وام دایا:
|
||||
├─→ Balance += 56M
|
||||
└─→ DiscountBalance += 112M (دو برابر — DayaLoanAmount × 2)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -109,17 +114,18 @@ SP: sp_CalculateWeeklyBalances → sp_CalculateWeeklyCommissionPool
|
||||
|
||||
## ۵. تنظیمات سیستمی (SystemConstants)
|
||||
|
||||
| ثابت | مقدار | توضیح |
|
||||
| ثابت (SystemConstants) | مقدار | توضیح |
|
||||
|------|-------|--------|
|
||||
| `Club.ActivationFee` | 25,000,000 | هزینه فعالسازی (تومان) |
|
||||
| `Club.GiftValue` | 25,200,000 | واریز به Pool |
|
||||
| `GoldenPackageAmount` | 56,000,000 | قیمت پکیج طلایی |
|
||||
| `DayaLoanAmount` | 56,000,000 | مبلغ وام دایا |
|
||||
| `MaxWeeklyBalancesPerLeg` | 300 | سقف هفتگی هر پا |
|
||||
| `MaxNetworkLevel` | 15 | حداکثر عمق درخت |
|
||||
| `ClubJoiningPercentage` | 0.35 | درصد پیوستن |
|
||||
| `ClubActivationThreshold` | 0.5 | آستانه فعالسازی |
|
||||
| `MaxCalculationAttempts` | 3 | حداکثر تلاش محاسبه |
|
||||
| `ClubActivationFee` | 25,200,000 | هزینه فعالسازی (ریال) |
|
||||
| `ClubMembershipGiftValue` | 25,200,000 | واریز به Pool |
|
||||
| `BasePackageAmount` | 56,000,000 | قیمت پکیج طلایی (ریال) |
|
||||
| `DayaLoanAmount` | 56,000,000 | مبلغ وام دایا (ریال) |
|
||||
| `CommissionMaxWeeklyBalancesPerLeg` | 300 | سقف هفتگی هر پا |
|
||||
| `CommissionMaxNetworkLevel` | 15 | عمق محاسبه کمیسیون (نه محدودیت درخت) |
|
||||
| `MaxDirectChildrenPerLeg` | 1 | حداکثر فرزند مستقیم هر پا |
|
||||
| `MinimumWithdrawAmount` | 1,000,000 | حداقل مبلغ برداشت (ریال) |
|
||||
| `ShopVAT` | 0.1 (10%) | مالیات ارزش افزوده |
|
||||
| `CommissionCalculationMethod` | "SP" | روش محاسبه = Stored Procedure |
|
||||
|
||||
---
|
||||
|
||||
@@ -127,8 +133,8 @@ SP: sp_CalculateWeeklyBalances → sp_CalculateWeeklyCommissionPool
|
||||
|
||||
| سناریو | فلو | وضعیت |
|
||||
|--------|------|--------|
|
||||
| **وام دایا** | درخواست وام → تأیید خودکار → شارژ ۳ کیفپول (۱۶۸M) | ✅ پیادهشده |
|
||||
| **درگاه مستقیم** | IPG (ZarinPal) → callback → شارژ | ✅ پیادهشده |
|
||||
| **وام دایا** | درخواست وام → تأیید → Balance=56M + Discount=112M (مجموع ۱۶۸M) | ✅ پیادهشده |
|
||||
| **درگاه مستقیم** | IPG → callback → Balance=56M + Discount=56M (مجموع ۱۱۲M) | ✅ پیادهشده |
|
||||
| **پرداخت دستی** | کارتبهکارت → آپلود رسید → تأیید ادمین → شارژ | ⚠️ طراحیشده |
|
||||
|
||||
---
|
||||
@@ -136,7 +142,7 @@ SP: sp_CalculateWeeklyBalances → sp_CalculateWeeklyCommissionPool
|
||||
## ۷. یکپارچهسازی وام دایا
|
||||
|
||||
```
|
||||
Hangfire Worker (هر ۱۵ دقیقه)
|
||||
Hangfire Worker (هر ۲۰ دقیقه — cron: */20 * * * *)
|
||||
│
|
||||
▼
|
||||
بررسی درخواستهای pending
|
||||
@@ -145,13 +151,13 @@ Hangfire Worker (هر ۱۵ دقیقه)
|
||||
ارسال به API دایا (Mock/Real switchable)
|
||||
│
|
||||
▼
|
||||
دریافت نتیجه → شارژ ۳ کیفپول
|
||||
دریافت نتیجه → شارژ ۲ کیفپول
|
||||
│
|
||||
├─→ Balance = 56M
|
||||
├─→ NetworkBalance = 56M
|
||||
└─→ DiscountBalance = 56M (مجموع: 168M)
|
||||
├─→ Balance += 56M (DayaLoanAmount)
|
||||
└─→ DiscountBalance += 112M (DayaLoanAmount × 2 — دو برابر)
|
||||
مجموع: 168M
|
||||
|
||||
Polly Retry: 3 attempts, Exponential backoff
|
||||
Hangfire retry: [AutomaticRetry(Attempts = 3)]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user