Files
docs/01-BUSINESS/balance-calculation-examples-5-levels.md
T
masoodafar-web 002e99f6bf Implement Persian Date Conversion and Enhance User Network Information Service
- Added PersianDateTimeService for converting Gregorian dates to Persian format in the BackOffice frontend.
- Updated multiple frontend pages (Dashboard, UserPayouts, WorkerControl, UserNetworkInfo) to utilize the new Persian date service.
- Enhanced GetUserNetworkPositionDto with 28+ new fields for comprehensive user network data.
- Updated GetUserNetworkPositionQueryHandler to include new methods for calculating network statistics.
- Modified Protobuf messages to accommodate the new fields, increasing from 14 to 42.
- Refined week number calculation algorithm to ensure consistency across C# and SQL implementations.
- Created new CSV and Excel files for binary plan calculations.
- Ensured all changes are tested and validated for accuracy and performance.
2025-12-20 06:15:59 +03:30

9.2 KiB
Raw Blame History

📊 مثال‌های عملی محاسبه تعادل - 5 لول عمقی

تاریخ: 2025-12-09
وضعیت: مثال‌های کامل و تایید شده
هدف: نمایش محاسبات واقعی برای درخت باینری تا 5 لول


🌳 ساختار درخت نمونه

                    User1 (Level 0)
                    /              \
            User2 (L1-L)          User3 (L1-R)
            /         \           /         \
    User4(L2-LL)  User5(L2-LR)  User6(L2-RL)  User7(L2-RR)
    /     \       /     \       /     \        /     \
U8(L3)  U9(L3) U10(L3) U11(L3) U12(L3) U13(L3) U14(L3) U15(L3)
/  \    /  \   /  \    /  \    /  \    /  \    /  \    /  \
U16-U31 (Level 4 - 16 users)
/\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\  /\
U32-U63 (Level 5 - 32 users)

📋 داده‌های ورودی

فرضیات:

  • هفته فعلی: 2025-W50
  • سقف امتیاز: 300
  • تعداد کل کاربران: 63 نفر (6 لول: 1+2+4+8+16+32)
  • وضعیت: همه کاربران فعال هستند (عضو باشگاه)

🎯 محاسبات Level 5 (پایین‌ترین سطح)

User 32-63 (32 کاربر Leaf):

هیچ زیرمجموعه‌ای ندارند
چپ = 0، راست = 0
تعادل = MIN(0, 0) = 0
امتیاز = 0
باقیمانده چپ = 0
باقیمانده راست = 0
فلش = 0

خلاصه Level 5: تمام 32 کاربر → 0 امتیاز


🎯 محاسبات Level 4 (User 16-31)

User 16:

زیرمجموعه:

  • چپ: User 32 (1 نفر)
  • راست: User 33 (1 نفر)

محاسبات:

چپ = 1، راست = 1
تعادل اولیه = MIN(1, 1) = 1
باقیمانده چپ = 1 - 1 = 0
باقیمانده راست = 1 - 1 = 0
امتیاز نهایی = MIN(1, 300) = 1 ✅
فلش = 0

User 17:

زیرمجموعه:

  • چپ: User 34 (1 نفر)
  • راست: User 35 (1 نفر)

محاسبات: مشابه User 16

امتیاز = 1 ✅

User 18-31 (14 کاربر دیگه):

همه مشابه User 16 → هر کدام 1 امتیاز

خلاصه Level 4: تمام 16 کاربر → هر کدام 1 امتیاز = 16 امتیاز


🎯 محاسبات Level 3 (User 8-15)

User 8:

زیرمجموعه:

  • چپ: User 16 (1 نفر)
  • راست: User 17 (1 نفر)

محاسبات:

چپ = 1، راست = 1
تعادل = MIN(1, 1) = 1
امتیاز = 1 ✅

User 9:

زیرمجموعه:

  • چپ: User 18 (1 نفر)
  • راست: User 19 (1 نفر)

محاسبات: مشابه User 8

امتیاز = 1 ✅

User 10-15 (6 کاربر دیگه):

همه مشابه → هر کدام 1 امتیاز

خلاصه Level 3: تمام 8 کاربر → هر کدام 1 امتیاز = 8 امتیاز


🎯 محاسبات Level 2 (User 4-7)

User 4:

زیرمجموعه:

  • چپ: User 8 (1 نفر)
  • راست: User 9 (1 نفر)

محاسبات:

چپ = 1، راست = 1
تعادل = MIN(1, 1) = 1
امتیاز = 1 ✅

User 5:

زیرمجموعه:

  • چپ: User 10 (1 نفر)
  • راست: User 11 (1 نفر)

محاسبات: مشابه User 4

امتیاز = 1 ✅

User 6, 7:

همه مشابه → هر کدام 1 امتیاز

خلاصه Level 2: تمام 4 کاربر → هر کدام 1 امتیاز = 4 امتیاز


🎯 محاسبات Level 1 (User 2-3)

User 2:

زیرمجموعه:

  • چپ: User 4 (1 نفر)
  • راست: User 5 (1 نفر)

محاسبات:

چپ = 1، راست = 1
تعادل = MIN(1, 1) = 1
امتیاز = 1 ✅

User 3:

زیرمجموعه:

  • چپ: User 6 (1 نفر)
  • راست: User 7 (1 نفر)

محاسبات: مشابه User 2

امتیاز = 1 ✅

خلاصه Level 1: تمام 2 کاربر → هر کدام 1 امتیاز = 2 امتیاز


🎯 محاسبات Level 0 (User 1 - Root)

User 1:

زیرمجموعه:

  • چپ: User 2 (1 نفر)
  • راست: User 3 (1 نفر)

محاسبات:

چپ = 1، راست = 1
تعادل = MIN(1, 1) = 1
امتیاز = 1 ✅

خلاصه Level 0: User 1 → 1 امتیاز


📊 جمع کل سیستم

Level تعداد کاربران امتیاز هر کاربر جمع امتیازهای Level
5 32 0 0
4 16 1 16
3 8 1 8
2 4 1 4
1 2 1 2
0 1 1 1
جمع 63 - 31 امتیاز

💰 محاسبه صندوق

داده‌های ورودی:

تعداد کاربران فعال شده این هفته: 63 نفر
هزینه فعال‌سازی هر نفر: 25,000,000 ریال
درصد سهم استخر: 20%

جمع ورودی استخر = 63 × 25,000,000 × 20%
                  = 63 × 5,000,000
                  = 315,000,000 ریال

محاسبه ارزش هر امتیاز:

مجموع امتیازهای سیستم = 31
جمع استخر = 315,000,000 ریال

ارزش هر امتیاز = 315,000,000 ÷ 31
               = 10,161,290 ریال (تقریباً)

توزیع کمیسیون:

User 1: 1 × 10,161,290 = 10,161,290 ریال
User 2: 1 × 10,161,290 = 10,161,290 ریال
User 3: 1 × 10,161,290 = 10,161,290 ریال
User 4-7: 4 × 10,161,290 = 40,645,160 ریال
User 8-15: 8 × 10,161,290 = 81,290,320 ریال
User 16-31: 16 × 10,161,290 = 162,580,640 ریال
User 32-63: 0 ریال (امتیازی ندارند)

جمع کل پرداختی = 315,000,000 ریال ✅

🔥 مثال پیچیده‌تر: سناریو نامتعادل

تغییر ساختار:

User 1:
  چپ: 500 نفر (عمق زیاد)
  راست: 600 نفر (عمق بیشتر)

محاسبات User 1:

مرحله 1️⃣: تعادل اولیه
  چپ = 500، راست = 600
  تعادل = MIN(500, 600) = 500

مرحله 2️⃣: باقیمانده
  باقی چپ = 500 - 500 = 0
  باقی راست = 600 - 500 = 100 → هفته بعد

مرحله 3️⃣: اعمال سقف
  امتیاز = MIN(500, 300) = 300 ✅

مرحله 4️⃣: فلش
  فلش از چپ = 500 - 300 = 200
  فلش از راست = 500 - 300 = 200
  جمع فلش = 400 (از بین می‌رود)

نتیجه:

✅ امتیاز User 1: 300
✅ باقیمانده راست: 100 (می‌رود هفته بعد)
✅ باقیمانده چپ: 0
✅ فلش شده: 400 (از بین رفته)

🔄 مثال با Carryover (هفته بعد)

فرض: User 1 در هفته 2025-W51:

باقیمانده هفته قبل:
  چپ: 0
  راست: 100

جدیدهای این هفته:
  چپ: 250
  راست: 150

محاسبات:

مرحله 1️⃣: جمع با هفته قبل
  چپ کل = 0 + 250 = 250
  راست کل = 100 + 150 = 250

مرحله 2️⃣: تعادل
  تعادل = MIN(250, 250) = 250

مرحله 3️⃣: باقیمانده
  باقی چپ = 250 - 250 = 0
  باقی راست = 250 - 250 = 0

مرحله 4️⃣: امتیاز
  امتیاز = MIN(250, 300) = 250 ✅

مرحله 5️⃣: فلش
  فلش = 0 (چون 250 < 300)

📈 مثال سقف: User با شبکه بزرگ

User A:

چپ: 800 نفر
راست: 900 نفر

محاسبات:

تعادل = MIN(800, 900) = 800
باقی چپ = 800 - 800 = 0
باقی راست = 900 - 800 = 100

امتیاز = MIN(800, 300) = 300 ✅

فلش:
  از چپ: 800 - 300 = 500
  از راست: 800 - 300 = 500
  جمع: 1000 (از بین می‌رود)

نتیجه: حتی با 800 تعادل، فقط 300 امتیاز می‌گیرد!


🎯 جمع‌بندی قوانین

قوانین کلیدی:

  1. تعادل = MIN(چپ، راست)
  2. باقیمانده = طرفی که بیشتر است (قبل از سقف)
  3. امتیاز = MIN(تعادل، 300)
  4. فلش = (تعادل - 300) از هر دو طرف (اگر > 300)
  5. محاسبه مستقل = هر کاربر جداگانه
  6. جمع صندوق = مجموع امتیازهای همه

نکات مهم:

  • باقیمانده جداگانه ذخیره می‌شود (چپ و راست)
  • فلش از هر دو طرف اتفاق می‌افتد
  • سقف 300 روی امتیاز نهایی اعمال می‌شود
  • هر کاربر مستقل از دیگران محاسبه می‌شود

📊 جدول مقایسه سناریوها

سناریو چپ راست تعادل امتیاز باقی چپ باقی راست فلش کل
متعادل کوچک 50 50 50 50 0 0 0
متعادل متوسط 200 200 200 200 0 0 0
نامتعادل کوچک 100 150 100 100 0 50 0
نامتعادل متوسط 250 350 250 250 0 100 0
سقف ساده 350 350 350 300 0 0 100
سقف نامتعادل 500 600 500 300 0 100 400
سقف بزرگ 800 900 800 300 0 100 1000

پایان مثال‌های عملی

این مستند تمام حالات ممکن محاسبه تعادل را با مثال‌های عددی واقعی نشان می‌دهد.