feat: Update CURRENT-SPRINT.md with progress and task completion details
- Added last updated date and refined project status for Backend and Frontend. - Updated completion percentages for FrontOffice UI and BFF. - Documented completed tasks for BackOffice in the current sprint. - Added new high-priority tasks related to commission calculation fixes. - Resolved blockers and minor issues, providing a clearer progress summary. docs: Create commission-calculation-fix.md for weekly commission calculation analysis - Documented critical issues affecting commission calculations. - Provided a detailed plan for fixing the commission calculation logic. - Included code analysis, affected files, and step-by-step tasks for implementation. - Outlined the expected timeline and important notes regarding changes.
This commit is contained in:
@@ -1,12 +1,68 @@
|
||||
# Balance Calculation with Carryover Logic - Complete Guide
|
||||
|
||||
**Date**: 2025-12-01
|
||||
**Last Updated**: 2025-12-01 (Added Configuration Integration + MaxWeeklyBalances Cap)
|
||||
**Status**: ✅ Implemented
|
||||
**Last Updated**: 2025-12-04 (⚠️ تغییر مهم: سقف 300 برای هر دست، نه کل)
|
||||
**Status**: ✅ Implemented (نیاز به اصلاح سقف دارد)
|
||||
**Migration**: `UpdateNetworkWeeklyBalanceWithCarryover`
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ اصلاحیه مهم بیزینس (2025-12-04)
|
||||
|
||||
### مشکل شناسایی شده:
|
||||
در پیادهسازی فعلی، سقف تعادل هفتگی **300 کل** در نظر گرفته شده بود. اما طبق قانون صحیح بیزینس:
|
||||
|
||||
| توضیح | منطق فعلی (اشتباه) | منطق صحیح |
|
||||
|-------|---------------------|-----------|
|
||||
| سقف | 300 کل | 300 برای هر دست |
|
||||
| حداکثر تعادل | 300 | MIN(300, 300) = 300 |
|
||||
| حداکثر کل | 300 | 300 + 300 = 600 (مجموع دو دست) |
|
||||
|
||||
### تفاوت در محاسبه:
|
||||
|
||||
**منطق فعلی (اشتباه):**
|
||||
```csharp
|
||||
totalBalances = MIN(leftTotal, rightTotal)
|
||||
cappedBalances = MIN(totalBalances, 300) // ← سقف روی کل
|
||||
```
|
||||
|
||||
**منطق صحیح:**
|
||||
```csharp
|
||||
cappedLeftTotal = MIN(leftTotal, 300) // ← سقف روی هر دست
|
||||
cappedRightTotal = MIN(rightTotal, 300)
|
||||
totalBalances = MIN(cappedLeftTotal, cappedRightTotal)
|
||||
```
|
||||
|
||||
### مثال عملی:
|
||||
|
||||
| سناریو | چپ | راست | منطق فعلی | منطق صحیح |
|
||||
|--------|-----|-------|-----------|-----------|
|
||||
| 1 | 200 | 250 | 200 | 200 |
|
||||
| 2 | 350 | 400 | **300** ❌ | **300** ✅ |
|
||||
| 3 | 500 | 600 | **300** ❌ | **300** ✅ |
|
||||
|
||||
**توجه:** در مثالهای بالا نتیجه یکسان است چون حداکثر یک تعادل همیشه MIN(300,300)=300 است. تفاوت در **باقیمانده** است:
|
||||
|
||||
**مثال با چپ=500، راست=600:**
|
||||
|
||||
| روش | تعادل | باقیمانده چپ | باقیمانده راست |
|
||||
|-----|--------|--------------|----------------|
|
||||
| فعلی | 300 | 500 - 150 = 350 | 600 - 150 = 450 |
|
||||
| صحیح | 300 | **200** (500-300) | **300** (600-300) |
|
||||
|
||||
### تغییرات Configuration:
|
||||
|
||||
```csharp
|
||||
// ✅ تغییر نام و مقدار:
|
||||
// قدیمی:
|
||||
Key = "Commission.MaxWeeklyBalancesPerUser", Value = "300"
|
||||
|
||||
// جدید:
|
||||
Key = "Commission.MaxWeeklyBalancesPerLeg", Value = "300"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Configuration-Based Calculation
|
||||
|
||||
### **System Configurations Used:**
|
||||
@@ -15,9 +71,11 @@
|
||||
// تمام مقادیر از جدول SystemConfigurations خوانده میشوند
|
||||
Club.ActivationFee = 25,000,000 ریال (هزینه فعالسازی)
|
||||
Commission.WeeklyPoolContributionPercent = 20% (سهم استخر)
|
||||
Commission.MaxWeeklyBalancesPerUser = 300 (سقف تعادل هفتگی)
|
||||
Commission.MaxWeeklyBalancesPerLeg = 300 (⚠️ سقف تعادل هفتگی - هر دست)
|
||||
```
|
||||
|
||||
**توجه:** کلید قدیمی `MaxWeeklyBalancesPerUser` باید به `MaxWeeklyBalancesPerLeg` تغییر کند.
|
||||
|
||||
### **Pool Contribution Calculation:**
|
||||
|
||||
```csharp
|
||||
@@ -32,29 +90,53 @@ weeklyPoolContribution = totalNewMembers × activationFee × poolPercent
|
||||
|
||||
---
|
||||
|
||||
## 🚫 MaxWeeklyBalances Cap (محدودیت سقف)
|
||||
## 🚫 MaxWeeklyBalances Cap (محدودیت سقف - هر دست)
|
||||
|
||||
### **Logic:**
|
||||
### **Logic (صحیح):**
|
||||
|
||||
```csharp
|
||||
totalBalances = MIN(leftTotal, rightTotal)
|
||||
cappedBalances = MIN(totalBalances, maxWeeklyBalances) // 300
|
||||
// ⚠️ سقف روی هر دست جداگانه اعمال میشود
|
||||
cappedLeftTotal = MIN(leftTotal, maxBalancesPerLeg) // 300
|
||||
cappedRightTotal = MIN(rightTotal, maxBalancesPerLeg) // 300
|
||||
|
||||
// اگر بیشتر از سقف بود، مازاد به remainder اضافه میشود
|
||||
excessBalances = totalBalances - cappedBalances
|
||||
// تعادل = کمترین مقدار بعد از اعمال سقف
|
||||
totalBalances = MIN(cappedLeftTotal, cappedRightTotal)
|
||||
|
||||
// باقیمانده = مقدار قبل از سقف - سقف (نه از totalBalances)
|
||||
leftRemainder = leftTotal - cappedLeftTotal
|
||||
rightRemainder = rightTotal - cappedRightTotal
|
||||
```
|
||||
|
||||
### **Example:**
|
||||
### **Example (جدید):**
|
||||
|
||||
```
|
||||
Week 5:
|
||||
leftTotal = 350, rightTotal = 400
|
||||
totalBalances = MIN(350, 400) = 350
|
||||
cappedBalances = MIN(350, 300) = 300 ✅ محدود شد!
|
||||
excessBalances = 350 - 300 = 50
|
||||
maxBalancesPerLeg = 300
|
||||
|
||||
leftRemainder = 0 + 50 = 50 (میرود برای هفته بعد)
|
||||
rightRemainder = 50
|
||||
cappedLeftTotal = MIN(350, 300) = 300
|
||||
cappedRightTotal = MIN(400, 300) = 300
|
||||
|
||||
totalBalances = MIN(300, 300) = 300 ✅
|
||||
|
||||
// باقیمانده = اضافهای که از سقف رد شده
|
||||
leftRemainder = 350 - 300 = 50
|
||||
rightRemainder = 400 - 300 = 100
|
||||
```
|
||||
|
||||
### **مقایسه منطق قدیم vs جدید:**
|
||||
|
||||
```
|
||||
// ❌ منطق قدیم (اشتباه):
|
||||
cappedBalances = MIN(totalBalances, 300) // سقف روی کل
|
||||
balancesConsumedPerSide = cappedBalances / 2
|
||||
leftRemainder = leftTotal - balancesConsumedPerSide
|
||||
|
||||
// ✅ منطق جدید (صحیح):
|
||||
cappedLeftTotal = MIN(leftTotal, 300) // سقف روی هر دست
|
||||
cappedRightTotal = MIN(rightTotal, 300)
|
||||
totalBalances = MIN(cappedLeftTotal, cappedRightTotal)
|
||||
leftRemainder = leftTotal - cappedLeftTotal // باقیمانده از سقف هر دست
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user