docs: update BUSINESS-02, BUSINESS-03, TECH-03
BUSINESS-02: - فرمول هایبرید: حذف MIN، اضافه validation کیفپول اعتباری - فلوی خرید: اضافه مرحله بررسی موجودی + UserWalletChangeLog - نامگذاری جدید کیفپولها: اصلی، اعتباری، پاداش تیمی - جدول وضعیت: اضافه WalletChangeLog + Validation BUSINESS-03: - بخش ۹ جدید: ExpirePendingOrdersService (۱۵ دقیقه) - دیاگرام Mermaid فلوی انقضا TECH-03: - فیکس URL پروداکشن (kbs1→kbs2) + هشدار - ۴ کامیت جدید در بخش ۹.۲ - بخش ۹.۳ فیکس URL پروداکشن - بخش ۹.۴ نامگذاری کیفپولها
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 💰 سیستم مالی، پرداخت و درگاهها
|
||||
|
||||
> **منابع ادغامشده:** `payment-gateway.md`, `payment-architecture-pyms.md`, `daya-loan-integration.md`, `manual-payment-system.md`, `discount-shop-business.md`
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فعالسازی درگاه ZarinPal + تنظیمات محیطی)
|
||||
> **آخرین بروزرسانی:** اسفند ۱۴۰۴ (بروزرسانی: فیکس WalletChangeLog + validation کیفپول اعتباری + نامگذاری جدید کیفپولها)
|
||||
|
||||
---
|
||||
|
||||
@@ -24,9 +24,9 @@ flowchart TD
|
||||
PYMS --> WALLETS
|
||||
|
||||
subgraph WALLETS["3 Wallet System"]
|
||||
W1["💰 Balance\nنقدی"]
|
||||
W2["🌟 NetworkBalance\nشبکه"]
|
||||
W3["🏷️ DiscountBalance\nاعتباری"]
|
||||
W1["💰 Balance\nکیف پول اصلی"]
|
||||
W2["🌟 NetworkBalance\nپاداش تیمی"]
|
||||
W3["🏷️ DiscountBalance\nکیف پول اعتباری"]
|
||||
end
|
||||
```
|
||||
|
||||
@@ -137,7 +137,11 @@ flowchart TD
|
||||
قیمت محصول = 1,000,000 ریال
|
||||
MaxDiscountPercent محصول = 40% (هر محصول درصد تخفیف مخصوص خود را دارد)
|
||||
|
||||
سهم تخفیف = MIN(1,000,000 × 40%, DiscountBalanceکاربر) = 400,000
|
||||
سهم تخفیف = قیمت × MaxDiscountPercent% = 400,000
|
||||
|
||||
⚠️ اگر DiscountBalance < سهم تخفیف → خطا: «موجودی کیف پول اعتباری کافی نیست»
|
||||
(دیگر MIN استفاده نمیشود — کاربر باید موجودی کافی داشته باشد)
|
||||
|
||||
باقیمانده → ZarinPal IPG = 1,000,000 - 400,000 = 600,000
|
||||
─────────
|
||||
مجموع = 1,000,000
|
||||
@@ -151,11 +155,15 @@ MaxDiscountPercent محصول = 40% (هر محصول درصد تخفیف مخص
|
||||
flowchart TD
|
||||
A["کاربر عضو باشگاه\nمشاهده محصول"] --> B["قیمت تخفیفخورده نمایش داده میشود"]
|
||||
B --> C["افزودن به سبد\nمحاسبه MaxDiscount% هر محصول"]
|
||||
C --> D["سهم تخفیف = MIN(قیمت×MaxDiscount%, DiscountBalance)"]
|
||||
D --> E["باقیمانده = مجموع - سهم تخفیف"]
|
||||
C --> D["سهم تخفیف = قیمت × MaxDiscount%"]
|
||||
D --> V{"DiscountBalance >= سهم تخفیف?"}
|
||||
V -->|خیر| X["❌ خطا: موجودی کیف پول اعتباری کافی نیست"]
|
||||
V -->|بله| E["باقیمانده = مجموع - سهم تخفیف"]
|
||||
E --> F{"باقیمانده > 0?"}
|
||||
F -->|بله| G["کسر DiscountBalance\n+ Redirect → ZarinPal IPG\nباقیمانده + 10% VAT"]
|
||||
F -->|خیر| H["فقط کسر از DiscountBalance\nبدون درگاه → ثبت مستقیم"]
|
||||
G --> LOG["ثبت UserWalletChangeLog"]
|
||||
H --> LOG
|
||||
```
|
||||
|
||||
### ۵.۳ دسترسی فروشگاه اعتباری
|
||||
@@ -164,8 +172,21 @@ flowchart TD
|
||||
|------|--------|
|
||||
| `IsClubMember = true` | دسترسی به Discount Store |
|
||||
| `IsClubMember = false` | فقط Regular Store |
|
||||
| `DiscountBalance > 0` | میتواند از تخفیف استفاده کند |
|
||||
| `DiscountBalance = 0` | پرداخت ۱۰۰% از طریق ZarinPal IPG |
|
||||
| `DiscountBalance >= سهم تخفیف` | خرید مجاز |
|
||||
| `DiscountBalance < سهم تخفیف` | ❌ خطا: موجودی کیف پول اعتباری کافی نیست |
|
||||
|
||||
### ۵.۴ UserWalletChangeLog (اسفند ۱۴۰۴ — فیکس)
|
||||
|
||||
> **باگ:** هنگام خرید از فروشگاه اعتباری، `DiscountBalance` در دیتابیس کم میشد ولی هیچ
|
||||
> `UserWalletChangeLog` ثبت نمیشد → کاربر در تاریخچه کیفپول چیزی نمیدید.
|
||||
|
||||
فیکس در ۳ هندلر:
|
||||
|
||||
| هندلر | سناریو | فیکس |
|
||||
|--------|---------|------|
|
||||
| `PlaceOrderCommandHandler` | پرداخت کامل با DiscountBalance (بدون درگاه) | ✅ ثبت log با `ChangeDiscountValue = -amount` |
|
||||
| `CompleteOrderPaymentCommandHandler` | پرداخت ترکیبی (درگاه + DiscountBalance) | ✅ ثبت log بعد از verify موفق درگاه |
|
||||
| `VerifyDiscountWalletChargeCommandHandler` | شارژ کیفپول اعتباری | ✅ ثبت log با `ChangeDiscountValue = +amount` |
|
||||
|
||||
---
|
||||
|
||||
@@ -221,6 +242,18 @@ service PaymentService {
|
||||
| وام دایا | ✅ کامل | Mock mode فعال در staging |
|
||||
| پرداخت ترکیبی | ✅ کامل | Discount + IPG |
|
||||
| Pool هفتگی | ✅ کامل | SP + Hangfire |
|
||||
| WalletChangeLog | ✅ فیکس شده | لاگ تغییرات کیفپول در ۳ هندلر اضافه شد |
|
||||
| Validation کیفپول اعتباری | ✅ فیکس شده | ارور اگر موجودی کافی نباشد |
|
||||
| پرداخت دستی | ⬜ طراحی | نیاز به تصمیم مدیریت |
|
||||
| Refund | ⬜ طراحی | فقط در PYMS تعریفشده |
|
||||
| کیفپول جادویی (Magic) | ✅ کامل | فاز 1-6 پیادهسازی شده — Production فعال |
|
||||
|
||||
### ۸.۱ نامگذاری استاندارد کیفپولها (اسفند ۱۴۰۴)
|
||||
|
||||
| فیلد دیتابیس | نام قدیم (UI) | نام جدید (UI) |
|
||||
|-------------|--------------|---------------|
|
||||
| `Balance` | عادی / اعتباری / نقدی | **کیف پول اصلی** |
|
||||
| `DiscountBalance` | تخفیفی / تخفیف | **کیف پول اعتباری** |
|
||||
| `NetworkBalance` | شبکه / طلایی / پورسانت | **پاداش تیمی** |
|
||||
|
||||
> تغییرات UI در ۱۲ فایل (FrontOffice: 5, BackOffice: 7) اعمال شد.
|
||||
|
||||
Reference in New Issue
Block a user