Files
docs/archive/CHANGELOG-2025-12-09.md
T
masoodafar-web 5965b98728 update
2026-01-03 18:27:49 +03:30

7.0 KiB

📝 خلاصه تغییرات و به‌روزرسانی‌های 2025-12-09

تاریخ: 2025-12-09
موضوع: اصلاح محاسبات تعادل شبکه باینری
وضعیت: تکمیل شده و مستندسازی شده


🎯 تغییرات اعمال شده

1️⃣ اصلاح کد محاسبه تعادل

فایل: CMS/src/.../CalculateWeeklyBalancesCommandHandler.cs

تغییرات:

قبل (اشتباه):

// سقف رو زود اعمال می‌کرد
var cappedLeftTotal = Math.Min(leftTotal, maxBalancesPerLeg);
var cappedRightTotal = Math.Min(rightTotal, maxBalancesPerLeg);
var totalBalances = Math.Min(cappedLeftTotal, cappedRightTotal);

// باقیمانده رو اشتباه حساب می‌کرد
var leftRemainder = leftTotal - cappedLeftTotal;
var rightRemainder = rightTotal - cappedRightTotal;

مشکل:

  • با چپ=500، راست=600 → تعادل=300 (اشتباه!)
  • باقیمانده چپ=200 (باید 0 بود)
  • باقیمانده راست=300 (باید 100 بود)

بعد (صحیح):

// مرحله 1: تعادل اولیه (بدون سقف)
var totalBalances = Math.Min(leftTotal, rightTotal);

// مرحله 2: باقیمانده (قبل از سقف)
var leftRemainder = leftTotal - totalBalances;
var rightRemainder = rightTotal - totalBalances;

// مرحله 3: اعمال سقف 300
var cappedBalances = Math.Min(totalBalances, maxBalancesPerLeg);

// مرحله 4: فلش از دو طرف
var flushedPerSide = totalBalances - cappedBalances;
var totalFlushed = flushedPerSide * 2;

نتیجه صحیح:

  • چپ=500، راست=600 → تعادل=500
  • باقیمانده چپ=0
  • باقیمانده راست=100
  • امتیاز=300
  • فلش=400 (200 چپ + 200 راست)

2️⃣ به‌روزرسانی Documentation

فایل‌های به‌روز شده:

1. totalDoc/01-BUSINESS/balance-calculation-rules.md

  • اضافه شدن بخش "آخرین به‌روزرسانی 2025-12-09"
  • توضیح 4 مرحله محاسبات
  • مثال‌های عددی صحیح
  • اصلاح فرمول‌ها

2. totalDoc/01-BUSINESS/balance-calculation-examples-5-levels.md (جدید)

  • مثال کامل درخت 63 کاربره (6 لول)
  • محاسبات دقیق هر کاربر
  • جدول جمع‌بندی
  • سناریوهای مختلف (متعادل، نامتعادل، سقف)
  • محاسبه صندوق و توزیع کمیسیون

3. totalDoc/ANALYSIS-NEW-BUSINESS-REQUIREMENTS.md

  • به‌روزرسانی درصد سازگاری: 70% → 95%
  • علامت‌گذاری Task #0 به عنوان Complete
  • اضافه شدن بخش تغییرات اعمال شده

4. totalDoc/05-TASKS/NEW-BUSINESS-REQUIREMENTS-TASKS.md

  • اضافه شدن Task #0 به عنوان Completed
  • ثبت تاریخ اتمام و فایل‌های تغییر یافته

📊 مقایسه قبل و بعد

مثال: چپ=500، راست=600

مرحله قبل (اشتباه) بعد (صحیح)
تعادل اولیه 300 500
باقیمانده چپ 200 0
باقیمانده راست 300 100
امتیاز نهایی 300 300
فلش چپ نامشخص 200
فلش راست نامشخص 200
جمع فلش 200 400

تایید نهایی

منطق صحیح (4 مرحله):

1️⃣ تعادل اولیه = MIN(چپ، راست)
2️⃣ باقیمانده چپ = چپ - تعادل
   باقیمانده راست = راست - تعادل
3️⃣ امتیاز نهایی = MIN(تعادل، 300)
4️⃣ فلش از هر طرف = تعادل - 300 (اگر > 0)
   جمع فلش = فلش × 2

نکات کلیدی:

  1. باقیمانده جداگانه: چپ و راست مجزا ذخیره می‌شوند
  2. باقیمانده قبل از سقف: از تعادل اولیه محاسبه می‌شود
  3. سقف روی امتیاز: 300 روی امتیاز نهایی اعمال می‌شود
  4. فلش از دو طرف: هر دو طرف مقدار یکسان فلش می‌شوند
  5. محاسبه مستقل: هر کاربر جداگانه در حلقه

📁 فایل‌های تغییر یافته

کد:

✅ CMS/src/CMSMicroservice.Application/CommissionCQ/Commands/
   CalculateWeeklyBalances/CalculateWeeklyBalancesCommandHandler.cs
   
   تغییرات:
   - خطوط 84-110: منطق محاسبه تعادل
   - خطوط 127: فیلد TotalBalances از totalBalances → cappedBalances

Documentation:

✅ totalDoc/01-BUSINESS/balance-calculation-rules.md
   - به‌روزرسانی کامل بخش‌ها
   - اضافه شدن مثال‌های جدید
   
✅ totalDoc/01-BUSINESS/balance-calculation-examples-5-levels.md (جدید)
   - 400+ خط
   - 10 بخش کامل
   - مثال‌های عملی 5 لول
   
✅ totalDoc/ANALYSIS-NEW-BUSINESS-REQUIREMENTS.md
   - به‌روزرسانی درصد سازگاری
   - اضافه شدن تغییرات اعمال شده
   
✅ totalDoc/05-TASKS/NEW-BUSINESS-REQUIREMENTS-TASKS.md
   - Task #0 به عنوان Completed

🎯 نتیجه‌گیری

موفقیت‌ها:

  1. کد کاملاً مطابق با توضیحات بیزینس شد
  2. تمام مستندات به‌روزرسانی شدند
  3. مثال‌های جامع 5 لول اضافه شد
  4. درصد سازگاری از 70% به 95% رسید

کارهای باقیمانده:

  1. Task #1: پیاده‌سازی DeleteInactiveUsersWorker (6 ساعت)
  2. Task #2: الزامی کردن دیالوگ باشگاه (8 ساعت)
  3. Task #3: شرط نمایش لینک معرفی (4 ساعت)
  4. Task #4: Validation 2 فرزند فعال (4 ساعت)
  5. Task #5: پیغام کد معرف پر (3 ساعت)
  6. Task #6: Update Documentation (3 ساعت)

زمان تخمینی باقیمانده: 28 ساعت (~4 روز کاری)


📌 یادداشت‌های مهم

برای Developer بعدی:

  1. کد محاسبه تعادل دست نزنید، کاملاً تست و تایید شده است
  2. ترتیب 4 مرحله حیاتی است، تغییر ندهید
  3. باقیمانده جداگانه (چپ و راست) ذخیره می‌شود
  4. فلش از هر دو طرف باید محاسبه شود

برای تست:

-- چک کردن باقیمانده‌ها
SELECT UserId, WeekNumber, 
       LeftLegTotal, RightLegTotal, TotalBalances,
       LeftLegRemainder, RightLegRemainder
FROM NetworkWeeklyBalances
WHERE WeekNumber = '2025-W50';

-- باید:
-- TotalBalances = MIN(LeftLegTotal, RightLegTotal) یا 300
-- LeftLegRemainder = LeftLegTotal - MIN(LeftLegTotal, RightLegTotal)
-- RightLegRemainder = RightLegTotal - MIN(LeftLegTotal, RightLegTotal)

تهیه‌کننده: AI Assistant
تاریخ: 2025-12-09
نسخه: 1.0 Final