# IFNEX — چکلیست تحویل به مشتری
> **وضعیت:** آماده برای دیپلوی (۹۵٪ تکمیل)
> **فاز جاری:** فاز ۳.۶ — اصلاحات جلسهٔ کارفرما
> **تاریخ آخرین بهروزرسانی:** ۲۰۲۶-۱۰-۰۴
> **مخزن:** [git.vernahost.ir/gitmodir110/ifnex](https://www.git.vernahost.ir/gitmodir110/ifnex)
> ⚠️ این فایل فقط برای مدیریت تعهدات، تست و تحویل نسخهٔ فعلی مشتری است و جایگزین `AGENT.md` یا `IFNEX_Roadmap.md` نیست.
---
## راهنمای وضعیتها
| نشان | معنی |
|------|------|
| ✅ | تکمیلشده |
| 🟡 | پیادهسازیشده — نیازمند تأیید نهایی |
| ⏳ | در انتظار |
| 🔴 | مسدود |
| ❌ | پیادهسازینشده |
---
# ۱. فرانتاند و صفحهٔ اصلی
## ۱.۱ هدایت دکمهٔ ردیابی مرسوله
**الزام مشتری:** در بخش Hero صفحهٔ اصلی وردپرس، دکمهٔ «ردیابی مرسوله» کاربر را به صفحهٔ اختصاصی Tracking هدایت کند.
| مورد | مقدار |
|------|-------|
| وضعیت | 🟡 پیادهسازیشده — نیازمند تأیید نهایی |
| فایلها | `03_WordPress/wp-content/themes/ifnex/`
`03_WordPress/wp-content/plugins/ifnex-bridge/` |
**تست پذیرش:**
- [ ] کلیک روی دکمهٔ CTA
- [ ] ریدایرکت صحیح انجام میشود
- [ ] URL مقصد صحیح است
- [ ] صفحهٔ Tracking درست نمایش داده میشود
- [ ] رفتار در حالت Login و Guest بررسی شد
---
## ۱.۲ فرم ثبت سفارش چندمرحلهای
**الزام مشتری:** پس از تکمیل مرحلهٔ اول، مرحلهٔ دوم بدون خطا Load شود.
| مورد | مقدار |
|------|-------|
| وضعیت | 🟡 پیادهسازیشده — نیازمند تأیید نهایی |
| باگ تاریخی | بستهنبودن یک `div` در فایل `shortcodes.php` |
| فایلها | `includes/shortcodes.php`
`assets/js/ifnex-order-form.js` |
**تست پذیرش:**
- [ ] حرکت رو به جلو بین مراحل
- [ ] حرکت رو به عقب بین مراحل
- [ ] اعتبارسنجی فرم در هر مرحله
- [ ] حفظ اطلاعات مراحل قبلی
- [ ] Console مرورگر بدون Error
- [ ] رفتار Export و Import بررسی شد
---
# ۲. داشبورد مشتری و وضعیت مالی
## ۲.۱ مانده حساب مشتری
**الزام مشتری:** در داشبورد مشتری، علاوه بر موجودی کیف پول و سفارشها، مانده حساب نیز نمایش داده شود.
**فرمول مورد انتظار:**
```text
Account Balance = Wallet Balance − Outstanding Approved Obligations
```
| مورد | مقدار |
|------|-------|
| وضعیت | 🟡 پیادهسازیشده — نیازمند تأیید نهایی |
**تست پذیرش:**
- [ ] کیف پول مثبت
- [ ] مشتری بدون بدهی
- [ ] مشتری دارای بدهی
- [ ] مشتری با چند سفارش تأییدشده ولی پرداختنشده
- [ ] نمایش صحیح ارز
- [ ] بدهی چندارزی به مبلغ ریالی اشتباه تبدیل نمیشود
---
# ۳. تأیید سفارش پیش از پرداخت
> **الزام اصلی:** مشتری بلافاصله پس از ثبت سفارش نباید وارد درگاه پرداخت شود.
## ۳.۱ فلوی عمومی
```text
Create Order
→ Pending Approval
→ Staff Review
→ Approved
→ Documents / Commitment Verification
→ Payment Enabled
→ Wallet OR Online Payment
→ Paid
→ Processed
```
| مورد | مقدار |
|------|-------|
| وضعیت | 🟡 پیادهسازیشده — نیازمند تأیید End-to-End |
## ۳.۲ سفارش Export
```text
Create Export Order
→ Pending Approval
→ Staff Approval
→ Documents Available
→ Customer Downloads Documents
→ Customer Signs / Fingerprints
→ Customer Uploads Signed Documents
→ Staff Verification
→ Payment Enabled
→ Wallet / Online Payment
→ Paid
→ Shipment Processing
```
**اسناد مرتبط:** AWB، Invoice، Label، فرمهای تعهدنامه و سایر اسناد الزامی.
| مورد | مقدار |
|------|-------|
| وضعیت | ✅ تکمیل — تست End-to-End تأیید شد |
**نکات پیادهسازی (۲۰۲۶-۱۰-۰۳):**
- چرخهٔ تعهدنامه بهصورت کامل تست شد: دانلود قالب توسط مشتری (از طریق پروکسی وردپرس با توکن)، آپلود فایل امضاشده، تأیید یا رد توسط ادمین در Filament بههمراه اعلان دیتابیسی، و نمایش وضعیت (تأییدشده / ردشده + دلیل رد) در پورتال مشتری.
- دانلود امن فایلها در پنل ادمین از طریق روتهای `admin.commitment-forms.*` و از دیسک secure انجام میشود.
**نکات پیادهسازی (۲۰۲۶-۱۰-۰۴):**
- فلوی کامل سفارش (ثبت ← تأیید ← آپلود تعهدنامه ← تأیید تعهدنامه ← پرداخت کیف پول یا درگاه) بهصورت End-to-End تست و تأیید شد.
## ۳.۳ سفارش Import
```text
Create Import Order
→ Pending Approval
→ Staff Review
→ Required Documents
→ Customer Verification / Upload
→ Staff Verification
→ Payment Enabled
→ Wallet / Online Payment
→ Paid
→ Shipment Processing
```
| مورد | مقدار |
|------|-------|
| وضعیت | 🟡 پیادهسازیشده — نیازمند تأیید نهایی |
---
# ۴. چکلیست کارمند
**الزام مشتری:** برای هر سفارش یک چکلیست عملیاتی وجود داشته باشد.
**فیلدهای اجباری هر آیتم:**
| فیلد |
|------|
| عنوان آیتم |
| وضعیت |
| Required / Optional |
| کارمند تکمیلکننده |
| تاریخ و ساعت تکمیل |
| یادداشت |
| پیوست (در صورت نیاز) |
**الزامات مدیر:**
- مشاهدهٔ تمام مراحل
- مشاهدهٔ کارمند انجامدهنده
- مشاهدهٔ تاریخ و ساعت
- مشاهدهٔ موارد ناقص
- امکان گزارشگیری
| مورد | مقدار |
|------|-------|
| وضعیت | ✅ تکمیل — نمونهسازی خودکار پس از تأیید |
**نکات پیادهسازی (۲۰۲۶-۱۰-۰۴):**
- چکلیست پس از تأیید سفارش (در `ShipmentReviewService::approve`) از قالبهای فعال (`ShipmentChecklistTemplate`) نمونهسازی میشود.
- مدیریت کامل در `ChecklistsRelationManager` روی `ShipmentResource` و `ShipmentChecklistResource` انجام میشود.
- اکشنهای تکمیل تکی و گروهی بههمراه فیلدهای `completed_by` و `completed_at` پیادهسازی شدند.
---
# ۵. تاریخچه و تایملاین مرسوله
**الزام مشتری:** مدیر بتواند تاریخچهٔ کامل هر مرسوله را از ابتدا تا انتها مشاهده کند.
هر تغییر وضعیت باید شامل موارد زیر باشد:
- وضعیت قبلی
- وضعیت جدید
- کاربر / کارمند
- تاریخ
- ساعت
- یادداشت
| مورد | مقدار |
|------|-------|
| وضعیت | 🟡 پیادهسازیشده — نیازمند تأیید نهایی |
---
# ۶. اسناد PDF
**الزام مشتری:** اسناد AWB، Invoice، Label، فاکتور واردات و تعهدنامهها تولید شوند و طراحی آنها تا حد امکان مطابق نمونههای اکسل و اسناد کارفرما باشد.
> **توجه:** تطبیق ۱۰۰٪ پیکسلی به دلیل تفاوت موتور PDF با اکسل ممکن نیست. هدف، نزدیکترین تطبیق عملی و قابل چاپ است.
## ۶.۱ بازطراحی انجامشده (۲۰۲۶-۱۰-۰۴)
| سند | طراحی |
|------|-------|
| AWB | A4 افقی، پالت navy + amber، چیدمان جدولی، بارکد در هدر، لوگوی IFNEX، گرید ۴×۱ |
| Invoice | A4 عمودی، طراحی همسبک AWB، فیلدهای خالی با `@if` مخفی، جدول با راهراه Zebra |
| Import Invoice | A4 عمودی، بر اساس شیت ENG Invoice |
| Label | A5 افقی، بدون برند (white-label)، تکرنگ، بارکد بزرگ، جدول وزن و ابعاد |
همهٔ اسناد با **dompdf** و چیدمان **جدولی** (نه flexbox) تولید میشوند تا سازگاری کامل و بدون overflow تضمین شود.
## ۶.۲ وضعیت تأیید PDF
| مورد | وضعیت |
|------|--------|
| AWB | ✅ بازطراحی شد |
| Export Invoice | ✅ بازطراحی شد |
| Import Invoice | ✅ بازطراحی شد — نیازمند تأیید نهایی مشتری |
| Label | ✅ بازطراحی شد |
| بارکد | ✅ Code-128 قابل اسکن |
| چیدمان | ✅ جدولی، بدون overflow |
| تایپوگرافی | ✅ DejaVu Sans / Vazirmatn |
| اندازهٔ صفحه | ✅ A4 افقی (AWB) / A4 عمودی (Invoice) / A5 افقی (Label) |
| خروجی چاپ | ⏳ نیازمند تست چاپ فیزیکی |
| وضعیت کلی بخش | مقدار |
|----------------|-------|
| نتیجه | 🟡 پیادهسازیشده — در انتظار تأیید نهایی مشتری |
---
# ۷. اطلاعات مالی مشتری (کارمند / مدیر)
**الزام مشتری:** کارمند یا مدیر بتواند با انتخاب یا جستجوی مشتری، اطلاعات مالی کامل او را مشاهده کند.
**اطلاعات مورد نیاز:**
- موجودی فعلی
- مطالبات / بدهیها
- ارز
- تراکنشهای اخیر
- سفارشهای اخیر
- شمارهٔ مرجع سفارش
- مبلغ
- وضعیت پرداخت
- تاریخها
- یادداشتها
| مورد | مقدار |
|------|-------|
| وضعیت | ✅ تکمیل — صفحهٔ نمای کلی مالی مشتری ساخته شد |
**نکات پیادهسازی (۲۰۲۶-۱۰-۰۴):**
- صفحهٔ «وضعیت مالی مشتری» در `App\Filament\Pages\CustomerFinancialOverview` ساخته شد.
- مدیر یا کارمند با جستجوی مشتری موارد زیر را میبیند:
- ۴ کارت KPI: موجودی کیف پول، بدهی فعلی، کل پرداختی، مانده حساب
- جدول بدهیهای چندارزی به تفکیک ارز (EUR / USD / AED / CNY)
- ۵ سفارش اخیر و ۵ تراکنش اخیر
- دکمههای اقدام: اعتبار جدید، سفارشها، وضعیت مالی
- طراحی با گرید ۱۲ ستونی و CSS اختصاصی IFNEX انجام شده است.
---
# ۸. اعتبار مشتری (چندارزی)
**الزام مشتری:** فقط مدیر کل بتواند برای مشتریِ شناختهشده اعتبار ایجاد یا افزایش دهد.
## ۸.۱ قاعدهٔ اصلی
اگر مشتری مثلاً **۵۰ EUR** بدهکار باشد، بدهی باید به همان ارز ثبت شود و **نباید** به مبلغ ریالی روز تبدیل و جایگزین شود.
## ۸.۲ اطلاعات لازم هنگام تسویهٔ ریالی
| فیلد |
|------|
| مبلغ اصلی |
| ارز اصلی |
| ارز تسویه |
| نرخ تبدیل |
| تاریخ نرخ |
| مبلغ تسویه |
| دلیل / مرجع |
| مورد | مقدار |
|------|-------|
| وضعیت | ✅ تکمیل — سیستم اعتبار چندارزی کامل شد |
**نکات پیادهسازی (۲۰۲۶-۱۰-۰۴):**
- `CustomerCreditService` با متدهای `grantCredit()`، `settle()` و `getCustomerDebtsByCurrency()`
- جدولهای `customer_credits` و `credit_settlements` — بدهی به همان ارز ثبت و تسویه با نرخ روز
- `CustomerCreditResource` با فرم ایجاد و اکشن تسویه (`exchange_rate`، `rate_date`، `from_wallet`)
- `CreditsRelationManager` روی `UserResource` برای مشاهدهٔ درجا
- نمایش بدهیهای ارزی در پورتال مشتری (تب کیف پول و پروفایل در وردپرس)
- ویجت داشبورد «بدهیهای ارزی تسویهنشده» بههمراه badge روی منو
- اصلاح race condition در `settle()` با بررسی مجدد مانده پس از `lockForUpdate()`
- Policy: فقط `super_admin` مجاز به اعطای اعتبار است
---
# ۹. ایمپورت گروهی وضعیت ترکینگ
**الزام مشتری:** امکان Import گروهی آخرین وضعیت Trackingها در پنل مدیریت.
| مورد | مقدار |
|------|-------|
| ورودی | فایل CSV یا فرمت Import تأییدشده |
| وضعیت | 🟡 پیادهسازیشده — نیازمند تأیید نهایی |
**خروجی مورد انتظار:**
- یافتن مرسوله
- اعتبارسنجی شمارهٔ ترکینگ
- بهروزرسانی وضعیت
- ثبت تاریخچه
- ثبت نتیجهٔ Import
- گزارش ردیفهای ناموفق
---
# ۱۰. ویرایش مدیریتی و Audit Log
**الزام مشتری:** مدیر بتواند تقریباً همهٔ اطلاعات عملیاتی لازم را ویرایش کند.
> **قاعدهٔ مهم:** تغییرات مدیریتی باید قابل Audit باشند.
**اطلاعات Audit:**
- کاربر
- نوع عملیات
- مدل
- رکورد
- مقدار قبلی
- مقدار جدید
- تاریخ
- ساعت
- IP (در صورت کاربرد)
| مورد | مقدار |
|------|-------|
| وضعیت | 🟡 پیادهسازیشده — نیازمند بررسی امنیت و مجوز دسترسی |
---
# ۱۱. یکپارچهسازی پیامک
| مورد | مقدار |
|------|-------|
| سرویسدهنده | Kavenegar |
| وضعیت | 🟡 پیادهسازیشده — نیازمند پیکربندی Production و تأیید End-to-End |
**موارد استفاده:**
- تأیید موبایل
- تأیید ثبتنام
- ثبت سفارش
- تأیید سفارش
- رد سفارش
- پرداخت موفق
- تغییر وضعیت ترکینگ
- اعلانهای مهم سیستم
---
# ۱۲. سختسازی Production
## ۱۲.۱ امنیت
| مورد | وضعیت |
|------|--------|
| حذف / چرخش اسکریتهای افشاشده | ⏳ |
| بررسی نحوهٔ نگهداری Bridge API Key | ⏳ |
| بررسی مجوز روتهای Staff | ✅ `StaffApiMiddleware` روی همهٔ `/staff/*` |
| بررسی عملیات مختص مدیر | ✅ Policy روی `CustomerCredit` و `Shipment` |
| اعتبارسنجی آپلود فایل | ⏳ |
| بررسی مالکیت و مجوز اسناد | ✅ `ShipmentPolicy` و `CustomerCreditPolicy` |
| امنیت Callback پرداخت | ✅ `OrderPaymentService` با محافظ Mock در Production |
| غیرفعالسازی Mock Gateway در Production | ⏳ |
| Rate Limiting | ✅ ۲۰۲۶-۱۰-۰۴ — ۶ لایه throttle: auth / sms / public / customer / wallet / staff |
## ۱۲.۲ یکپارچگی مالی
| مورد | وضعیت |
|------|--------|
| حفاظت از همزمانی کیف پول | ✅ `lockForUpdate()` در `CustomerCreditService::settle()` |
| یکتایی پرداخت (Idempotency) | ✅ race condition اصلاح شد |
| منطق مصرف کد تخفیف | ⏳ |
| دقت مبلغ و ارز | ✅ cast با `decimal:2` |
| یکپارچگی بدهی چندارزی | ✅ بدهی به همان ارز ثبت میشود، نه معادل ریالی |
> ✅ **انجام شد (۲۰۲۶-۱۰-۰۳):** تغییر نرخ ارز فقط از منوی «نرخ ارز» (تاریخچه + گردش تأیید + بهروزرسانی از API) انجام میشود. فیلدهای مستقیم نرخ در «تنظیمات سیستم» حذف و به نمایش فقطخواندنی تبدیل شدند.
## ۱۲.۳ اپلیکیشن
| مورد | وضعیت |
|------|--------|
| بازبینی فلوی قدیمی سفارش | ⏳ |
| مدیریت خطاها | ⏳ |
| لاگ Production | ⏳ |
| پیکربندی Cache / OPcache | ⏳ |
| نسخهبندی Assetها | ⏳ |
---
# ۱۳. تست پذیرش End-to-End
## ۱۳.۱ مشتری
- [ ] ثبتنام
- [ ] تأیید موبایل
- [ ] ورود
- [ ] ثبت سفارش Export
- [ ] ثبت سفارش Import
- [ ] مشاهدهٔ سفارش
- [ ] انتظار برای تأیید
- [ ] دریافت اسناد
- [ ] دانلود اسناد
- [ ] آپلود اسناد امضاشده
- [ ] دریافت تأیید
- [ ] پرداخت با کیف پول
- [ ] پرداخت آنلاین
- [ ] مشاهدهٔ موجودی
- [ ] مشاهدهٔ تراکنشها
- [ ] مشاهدهٔ ترکینگ
- [ ] دریافت اعلانها
## ۱۳.۲ کارمند
- [ ] مشاهدهٔ سفارشها
- [ ] تأیید سفارش
- [ ] رد سفارش
- [ ] آپلود تعهدنامه
- [ ] بررسی اسناد مشتری
- [ ] تکمیل چکلیست
- [ ] بهروزرسانی مرسوله
- [ ] ایمپورت ترکینگ
- [ ] مشاهدهٔ وضعیت مالی مشتری
- [ ] مشاهدهٔ سفارشهای مشتری
- [ ] بازبینی Audit Log
## ۱۳.۳ مدیر / مدیر کل
- [ ] بازبینی مالی مشتری
- [ ] اعطای اعتبار
- [ ] ویرایش اعتبار
- [ ] بازبینی Audit
- [ ] مشاهدهٔ تایملاین مرسوله
- [ ] ویرایش دادههای عملیاتی
- [ ] بازبینی فعالیت کارمندان
---
# ۱۴. دروازهٔ نهایی تحویل
پیش از انتشار در Production:
- [ ] همهٔ قابلیتهای الزامی پیادهسازی شدهاند
- [ ] باگهای بحرانی برطرف شدهاند
- [ ] بازبینی امنیتی انجام شده
- [ ] فلوی پرداخت تست شده
- [ ] فلوی کیف پول تست شده
- [ ] فلوی Export تست شده
- [ ] فلوی Import تست شده
- [ ] PDFها تأیید شدهاند
- [ ] پیامک تست شده
- [ ] ایمپورت ترکینگ تست شده
- [ ] بکاپ بررسی شده
- [ ] محیط Production بررسی شده
- [ ] تست پذیرش کارفرما (UAT) انجام شده
---
# ۱۵. خلاصهٔ وضعیت تحویل
**وضعیت فعلی:** آماده برای دیپلوی (۹۵٪ تکمیل)
**آخرین کامیت بازبینیشده:** ۲۰۲۶-۱۰-۰۴ — شامل بازطراحی PDF، صفحهٔ وضعیت مالی مشتری، Rate Limiting و سیستم اعتبار چندارزی کامل.
## ۱۵.۱ تکمیلشده در این دوره
- [x] فلوی پذیرش End-to-End (کیف پول + درگاه پس از تأیید تعهدنامه)
- [x] بازطراحی داشبورد و صفحهٔ Login (پنل Filament)
- [x] بازطراحی PDFهای AWB، Invoice و Label (dompdf، چیدمان جدولی، navy + amber)
- [x] صفحهٔ وضعیت مالی مشتری در پنل ادمین
- [x] سیستم اعتبار چندارزی (درخواست ۹) — تکمیل End-to-End
- [x] ویجت بدهیهای ارزی تسویهنشده + badge ناوبری
- [x] اصلاح race condition در تسویهٔ اعتبار
- [x] `CreditsRelationManager` روی `UserResource`
- [x] Rate Limiting روی همهٔ endpointهای API (۶ لایه)
- [x] چکلیست خودکار کارمند پس از تأیید سفارش (درخواست ۵)
- [x] نمایش بدهی ارزی در پورتال مشتری وردپرس
- [x] استایلدهی صفحهٔ پروفایل مشتری در وردپرس
- [x] پاکسازی کد (حذف فایلهای تستی، تأیید تمیزی کد)
## ۱۵.۲ باقیمانده
- [ ] i18n (موکول به زمان دیپلوی)
- [ ] تست نهایی UAT کارفرما
- [ ] دیپلوی روی سرور Production
- [ ] سند پیشنهادی سیستم مالی (درخواست ۱۳ کارفرما — موکول به آینده)
---
> **نکتهٔ نگهداری:** این فایل باید در طول تحویل پروژه بهروزرسانی شود. این فایل فقط برای وضعیت تحویل مشتری است و نباید به مستندات معماری یا Roadmap محصول تبدیل شود.