Files
nobat724_front/.claude/prompt/currency-toman-display-front.md

94 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# واحد پول = تومان در سایت عمومی (نمایش ÷۱۰ / ورودی ×۱۰) — API ریال می‌ماند
## پروژه
`nobat724_front` (سایت عمومی). **cross-repo:** پرامپت همتا (ادمین): `clinicpro/.claude/prompt/currency-toman-display-admin.md`. API بک‌اند (`clinicpro`) واحدش **ریال** است و تغییر نمی‌کند؛ فیلدهای `*_rials` ریال برمی‌گردانند.
## زمینه
واحد نمایشِ سایت باید **تومان** باشد، اما API همهٔ مبالغ را **ریال** می‌دهد و می‌گیرد (`appointment_fee_rials`، `amount_rials`، …) و ارسال به درگاه هم ریال است (بک‌اند مدیریت می‌کند). پس فقط باید در **UI** مقدار ریال ÷۱۰ و با «تومان» نشان داده شود، و اگر جایی مبلغ از کاربر گرفته می‌شود ×۱۰ به ریال تبدیل شود.
الان ناهماهنگ است: بعضی جاها عددِ `*_rials` خام با برچسب «ریال» نمایش داده می‌شود (`paying`, transactions, payment result, dashboard balance) و یک‌جا (`app/dashboard/page.js`) دستی `/10` شده. باید یکدست شود.
## مشکل / هدف
همهٔ مبالغِ نمایشی در سایت به **تومان** (÷۱۰ از مقدار ریالِ API) با برچسب «تومان» نشان داده شوند؛ منطق پرداخت/ارسال به درگاه (سمت بک‌اند، ریال) دست نخورد.
## فایل‌های مرتبط
| فایل | نقش |
|------|-----|
| `nobat724_front/lib/money.js` | **جدید** — helper تبدیل/فرمت مرکزی |
| `nobat724_front/components/appointment/paying/index.js` | مبلغ نوبت + دکمهٔ پرداخت (ریال→تومان) |
| `nobat724_front/components/dashboard/userAccount/sidebars/transactions/Card.js` | مبلغ تراکنش |
| `nobat724_front/components/dashboard/userAccount/sidebars/transactions/List.js` | مبلغ تراکنش |
| `nobat724_front/components/dashboard/userAccount/Head.js` | برچسب/موجودی |
| `nobat724_front/app/payment/[uuid]/page.js` | مبلغ نتیجهٔ پرداخت |
| `nobat724_front/app/dashboard/page.js` | جمع تراکنش‌ها (حذف `/10` دستی، استفاده از helper) |
> با `grep -rn "ریال\|amount_rials\|_rials\|toLocaleString" components app` بقیهٔ نقاط مبلغ را هم پیدا و یکدست کن.
## وضعیت فعلی
### `components/appointment/paying/index.js`
```js
setFeeRials(Number(res?.data?.appointment_fee_rials) || 0);
// ...
const rials = feeRials != null ? feeRials.toLocaleString("fa-IR") : "—";
// ...
{rials} <span className="...">ریال</span>
// ...
{testMode ? "پرداخت آزمایشی" : `پرداخت ${rials} ریال`}
```
مقدارِ ریالِ خام را با «ریال» نشان می‌دهد (باید تومان).
### `app/dashboard/page.js` (تبدیل دستی ناهماهنگ)
```js
const totalTransactions = Math.round(totalRials / 10); // ریال → تومان
```
### `app/payment/[uuid]/page.js`
```js
{formatAmount(payment.amount_rials)} ریال
```
## وظایف
### ۱. helper مرکزی `lib/money.js`
```js
export const RIAL_PER_TOMAN = 10;
export const rialToToman = (rial) => Math.round((Number(rial) || 0) / RIAL_PER_TOMAN);
export const tomanToRial = (toman) => Math.round((Number(toman) || 0) * RIAL_PER_TOMAN);
// فرمت فارسیِ مبلغِ تومان از مقدار ریالِ API
export const formatToman = (rial) => rialToToman(rial).toLocaleString("fa-IR");
```
### ۲. `paying/index.js`
- نمایش مبلغ: `const toman = feeRials != null ? formatToman(feeRials) : "—";`
- جای «ریال» → «تومان»؛ دکمه: `پرداخت ${toman} تومان`.
- `feeRials` را همچنان از `appointment_fee_rials` بگیر (ریال)؛ فقط نمایش تبدیل شود. **مبلغی که برای شروع پرداخت به بک‌اند/درگاه می‌رود تغییر نکند** (بک‌اند ریال می‌فرستد).
### ۳. تراکنش‌ها و موجودی داشبورد
- `transactions/Card.js` و `List.js`: `Number(data.amount_rials)` خام + «ریال» → `formatToman(data.amount_rials)` + «تومان».
- `userAccount/Head.js`: موجودی/برچسب «ریال» → تومان (اگر عددی خام کنارش هست با `formatToman`).
- `app/dashboard/page.js`: به‌جای `Math.round(totalRials/10)` از `rialToToman(totalRials)` استفاده کن (همان نتیجه، یکدست).
### ۴. صفحهٔ نتیجهٔ پرداخت
- `app/payment/[uuid]/page.js`: `{formatAmount(payment.amount_rials)} ریال``{formatToman(payment.amount_rials)} تومان` (یا `formatAmount` را با `rialToToman` هماهنگ کن؛ اگر `formatAmount` جای دیگری هم استفاده می‌شود، دوباره‌تبدیل نشود).
### ۵. جستجوی باقی‌ماندهٔ «ریال»
`grep -rn "ریال" components app` → هر مبلغِ خام ریال را `formatToman` + «تومان» کن. برچسب‌های ثابت «ریال» به «تومان».
## نکات مهم
- **API/درگاه ریال می‌ماند:** هیچ فراخوانی `services/response.js` و هیچ مقدارِ ارسالی به بک‌اند تغییر نمی‌کند؛ فقط نمایش. مبلغ پرداخت را بک‌اند (ریال) مدیریت می‌کند.
- **ورودی پول (اگر هست):** اگر جایی کاربر مبلغ وارد می‌کند که به API می‌رود، با `tomanToRial` به ریال تبدیل کن (در این سایت معمولاً ورودی پول نیست؛ بیشتر نمایش است).
- **double-convert نکن:** جایی که قبلاً `/10` شده (dashboard/page.js) را با helper جایگزین کن، نه اضافه.
- **RTL/فونت/Jalali** مثل قبل؛ فقط عدد و برچسب واحد عوض می‌شود.
- تست: `npm run lint` و `npm run build` بدون خطا؛ سپس چشمی صفحهٔ پرداخت نوبت، داشبورد تراکنش‌ها، و نتیجهٔ پرداخت — اعداد باید ۱۰ برابر کوچک‌تر و با «تومان» باشند.