diff --git a/business/BUSINESS-02-PAYMENT-FINANCE.md b/business/BUSINESS-02-PAYMENT-FINANCE.md index 4314138..b0b691c 100644 --- a/business/BUSINESS-02-PAYMENT-FINANCE.md +++ b/business/BUSINESS-02-PAYMENT-FINANCE.md @@ -34,6 +34,13 @@ flowchart TD ## ۲. درگاه ZarinPal (IPG) +> **⚠️ محل استفاده:** ZarinPal فقط در سه جا استفاده می‌شود: +> 1. **فروشگاه تخفیفی** — باقیمانده بعد از کسر DiscountBalance (اگر > 0) +> 2. **شارژ کیف‌پول** — واریز مستقیم از پروفایل کاربر +> 3. **خرید پکیج** — (فعلاً غیرفعال: "درگاه پرداخت متصل نیست") +> +> ❌ **فروشگاه عادی (Regular Store) از ZarinPal استفاده نمی‌کند** — فقط کسر از Balance کیف‌پول + ### ۲.۱ فلوی پرداخت ```mermaid @@ -125,7 +132,7 @@ flowchart TD MaxDiscountPercent محصول = 40% (هر محصول درصد تخفیف مخصوص خود را دارد) سهم تخفیف = MIN(1,000,000 × 40%, DiscountBalanceکاربر) = 400,000 -پرداخت نقدی (IPG) = 1,000,000 - 400,000 = 600,000 +باقیمانده → ZarinPal IPG = 1,000,000 - 400,000 = 600,000 ───────── مجموع = 1,000,000 @@ -137,10 +144,12 @@ MaxDiscountPercent محصول = 40% (هر محصول درصد تخفیف مخص ```mermaid flowchart TD A["کاربر عضو باشگاه\nمشاهده محصول"] --> B["قیمت تخفیف‌خورده نمایش داده می‌شود"] - B --> C["افزودن به سبد\nبررسی DiscountBalance"] - C --> D{"موجودی کافی؟"} - D -->|کافی| E["سهم تخفیف از DiscountBalance\nباقیمانده → IPG ZarinPal"] - D -->|ناکافی| F["فقط به اندازه موجودی\nباقیمانده بیشتر → IPG"] + B --> C["افزودن به سبد\nمحاسبه MaxDiscount% هر محصول"] + C --> D["سهم تخفیف = MIN(قیمت×MaxDiscount%, DiscountBalance)"] + D --> E["باقیمانده = مجموع - سهم تخفیف"] + E --> F{"باقیمانده > 0?"} + F -->|بله| G["کسر DiscountBalance\n+ Redirect → ZarinPal IPG\nباقیمانده + 9% VAT"] + F -->|خیر| H["فقط کسر از DiscountBalance\nبدون درگاه → ثبت مستقیم"] ``` ### ۵.۳ دسترسی فروشگاه تخفیفی @@ -150,7 +159,7 @@ flowchart TD | `IsClubMember = true` | دسترسی به Discount Store | | `IsClubMember = false` | فقط Regular Store | | `DiscountBalance > 0` | می‌تواند از تخفیف استفاده کند | -| `DiscountBalance = 0` | پرداخت ۱۰۰% نقدی | +| `DiscountBalance = 0` | پرداخت ۱۰۰% از طریق ZarinPal IPG | --- @@ -184,12 +193,14 @@ service PaymentService { ## ۷. مالیات و VAT ``` -دو نرخ VAT در کد: +هر دو فروشگاه از نرخ 9% استفاده می‌کنند: - SystemConstants.ShopVAT = 0.1 (10%) — تنظیم سیستمی - VAT_RATE = 0.09 (9%) — در فروشگاه تخفیفی (DiscountShop PlaceOrder) + Regular Store → const vatRate = 0.09m (hardcoded در SubmitShopBuyOrderCommandHandler) + Discount Store → VatCalculator.VAT_RATE = 0.09m -قیمت نمایشی = قیمت پایه × (1 + VAT) + ⚠️ SystemConstants.ShopVAT = 0.1 (10%) — تعریف‌شده ولی استفاده نمی‌شود (stale constant) + +قیمت نمایشی = قیمت پایه × (1 + 0.09) در صورتحساب: قیمت پایه + مالیات جداگانه نمایش داده می‌شود ``` diff --git a/business/BUSINESS-03-ECOMMERCE-STORES.md b/business/BUSINESS-03-ECOMMERCE-STORES.md index c2f28b6..6b904c2 100644 --- a/business/BUSINESS-03-ECOMMERCE-STORES.md +++ b/business/BUSINESS-03-ECOMMERCE-STORES.md @@ -11,9 +11,9 @@ flowchart LR subgraph RS["Regular Store — /store"] R1["همه کاربران"] - R2["پرداخت 100% نقدی"] + R2["پرداخت از Balance کیف‌پول"] R3["قیمت عادی"] - R4["VAT = 10%"] + R4["VAT = 9%"] end subgraph DS["Discount Store — /discount-store"] diff --git a/overview/OVERVIEW-01-FLOWCHARTS.md b/overview/OVERVIEW-01-FLOWCHARTS.md index 86134ee..dca7c0c 100644 --- a/overview/OVERVIEW-01-FLOWCHARTS.md +++ b/overview/OVERVIEW-01-FLOWCHARTS.md @@ -17,7 +17,7 @@ flowchart TD B -->|بله| G["Login + JWT"] G --> H{"عضو باشگاه؟"} - H -->|خیر| F["🛒 Regular Store\nخرید عادی — IPG پرداخت"] + H -->|خیر| F["🛒 Regular Store\nخرید عادی — پرداخت از کیف‌پول"] H -->|بله| I["🏆 Club Member Dashboard"] I --> J["فروشگاه تخفیفی\nper-product MaxDiscount%"] @@ -126,11 +126,12 @@ flowchart TD A1["مشاهده محصولات"] --> B1["Lazy Load — 12 per page"] B1 --> C1["افزودن به سبد"] C1 --> D1["بررسی موجودی"] - D1 --> E1["Checkout"] - E1 --> F1["ZarinPal IPG\n100% نقدی"] - F1 --> G1["ثبت سفارش"] - G1 --> H1["کسر موجودی"] - H1 --> I1["SMS تأیید"] + D1 --> E1["Checkout Summary\nانتخاب آدرس"] + E1 --> F1{"Balance کافی؟"} + F1 -->|بله| G1["کسر از Balance کیف‌پول\n+ VAT"] + G1 --> H1["ثبت سفارش"] + H1 --> I1["کسر موجودی"] + F1 -->|خیر| J1["❌ خطا: موجودی کیف‌پول کافی نیست"] ``` ### ۵.۲ Discount Store @@ -141,12 +142,14 @@ flowchart TD B2 --> C2["افزودن به سبد"] C2 --> D2["بررسی موجودی + DiscountBalance"] D2 --> E2["محاسبه سهم تخفیف\nMaxDiscount% هر محصول"] - E2 --> F2["محاسبه سهم نقدی\nباقیمانده"] - F2 --> G2["کسر از DiscountBalance"] - G2 --> H2["ZarinPal IPG\nبرای باقیمانده نقدی"] - H2 --> I2["ثبت سفارش ترکیبی"] - I2 --> J2["کسر موجودی"] - J2 --> K2["SMS تأیید"] + E2 --> F2["محاسبه باقیمانده\ngatewayAmount = total - discountUsed"] + F2 --> G2{"gatewayAmount > 0?"} + G2 -->|بله| H2["کسر DiscountBalance\n+ ZarinPal IPG برای باقیمانده + 9% VAT"] + H2 --> I2["Redirect → ZarinPal\nCallback → ثبت سفارش"] + G2 -->|خیر| J2["فقط کسر از DiscountBalance\nبدون درگاه"] + J2 --> K2["ثبت سفارش"] + I2 --> L2["کسر موجودی + SMS تأیید"] + K2 --> L2 ``` --- diff --git a/overview/OVERVIEW-03-CHANGELOG.md b/overview/OVERVIEW-03-CHANGELOG.md index 33b4c1c..54b1ea5 100644 --- a/overview/OVERVIEW-03-CHANGELOG.md +++ b/overview/OVERVIEW-03-CHANGELOG.md @@ -188,7 +188,7 @@ | مهر ۱۴۰۳ | شروع پروژه، معماری CMS | 10% | | آبان ۱۴۰۳ | CQRS + gRPC + EF Core | 20% | | آذر ۱۴۰۳ | باشگاه + درخت باینری + کمیسیون | 35% | -| دی ۱۴۰۳ | فروشگاه عادی + پرداخت ZarinPal | 45% | +| دی ۱۴۰۳ | فروشگاه عادی + پرداخت از کیف‌پول | 45% | | بهمن ۱۴۰۳ | فروشگاه تخفیفی + وام دایا | 55% | | اسفند ۱۴۰۳ (هفته ۱) | UI Modernization Phase 1-3 | 65% | | اسفند ۱۴۰۳ (هفته ۲) | Site Pages + BackOffice audit | 75% |