ifnex/01_Documents/IFNEX_Phase0_Checklist.md
Kazem Alghasi 285acdae89 docs(project): update project status, roadmap, and documentation
Update project documentation to reflect the completion of Phase 0 and Phase 1, and the commencement of Phase 2. This includes archiving obsolete documents, updating the README with a new architectural overview, and refining the project checklist and status reports.

- Archive obsolete PRD and Roadmap documents
- Update `IFNEX_Phase0_Checklist.md` with completed tasks and Phase 2 roadmap
- Update `STATUS.md` with recent development progress for August 2026
- Refactor `04_Laravel/README.md` to include detailed technical specifications and architecture diagrams
- Update root `README.md` with updated versioning and system architecture visualization
- Refine `PriceCalculatorServiceTest.php` to align with updated service output structures
2026-08-07 05:58:12 +03:30

238 lines
12 KiB
Markdown
Raw 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.

# ✅ IFNEX Phase 0 Checklist
> **فاز:** Phase 0 — بنیان داده + ترکینگ دستی + مهاجرت داده‌های تاریخی
> **تاریخ ایجاد:** 2026-08-04
> **وضعیت کلی:** در حال اجرا
> **مرجع اصلی:** `01_Documents/Phase0_Proposal.md`
---
## پیش‌نیازها
| # | شرط | وضعیت | توضیحات |
|---|------|-------|---------|
| P1 | Laravel 11 نصب و قابل اجرا | ✅ انجام شد | در پوشه `04_Laravel` |
| P2 | MySQL 8+ قابل دسترس | ✅ انجام شد | دیتابیس `ifnex_db` ایجاد شده |
| P3 | Composer dependencies نصب شده | ✅ انجام شد | filament 3.3.x, maatwebsite/excel, morilog/jalali 3 |
| P4 | فایل‌های اکسل اصلی در دسترس | ⚠️ موجود | فایل مرسولات فعلی داده‌های نمونه/قدیمی دارد — هر فایل جدید قابل import است |
---
## بخش ۱: دیتابیس و مدل‌ها
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 1.1 | Migration `countries` با ۴ زون | ✅ انجام شد | iso_code + is_active اضافه شد |
| 1.2 | Migration `shipments` مطابق Phase 0 | ✅ انجام شد | ۱۱ فیلد مالی + ۴ زون + nullable حقایل |
| 1.3 | Migration `shipping_rates` با enum | ✅ انجام شد | direction + type (DOC_NORMAL/DOC_ECONOMY/PARCEL) |
| 1.4 | Migration `shipment_carrier_mappings` | ✅ انجام شد | جدول جدید برای نگاشت چند شرکت حمل |
| 1.5 | Migration `shipment_tracking_events` | ✅ انجام شد | جدول جدید برای تایم‌لاین رویدادها |
| 1.6 | Migration `system_settings` | ✅ انجام شد | جدول key-value |
| 1.7 | Migration `update_users` | ✅ انجام شد | phone, role, is_active |
| 1.8 | حل مشکل `unsignedDecimal` | ✅ انجام شد | استفاده از `decimal()->unsigned()` |
| 1.9 | حل مشکل FK constraints | ✅ انجام شد | `disableForeignKeyConstraints()` |
| 1.10 | اجرای همه migrations | ✅ انجام شد | بدون خطا |
### مدل‌ها و Enums
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 2.1 | مدل `Country.php` + روابط | ✅ انجام شد | fromShipments() + toShipments() |
| 2.2 | مدل `Shipment.php` + روالات کامل | ✅ انجام شد | items(), carrierMappings(), trackingEvents() |
| 2.3 | مدل `ShippingRate.php` | ✅ انجام شد | cast برای enums |
| 2.4 | مدل `User.php` + helper methods | ✅ انجام شد | phone, role, is_active |
| 2.5 | مدل `ShipmentCarrierMapping.php` | ✅ انجام شد | |
| 2.6 | مدل `ShipmentTrackingEvent.php` | ✅ انجام شد | |
| 2.7 | مدل `SystemSetting.php` | ✅ انجام شد | |
| 2.8 | Enum `ShipmentDirection` | ✅ انجام شد | import/export |
| 2.9 | Enum `ShipmentType` | ✅ انجام شد | DOC_NORMAL/DOC_ECONOMY/PARCEL |
| 2.10 | Enum `ShipmentStatus` | ✅ انجام شد | ۷ وضعیت |
| 2.11 | Enum `CarrierCode` | ✅ انجام شد | ۹ شرکت حمل |
| 2.12 | Enum `TrackingSource` | ✅ انجام شد | manual/api_carrier/api_aggregator |
| 2.13 | Enum `UserRole` | ✅ انجام شد | ۴ نقش |
---
## بخش ۲: Seeders و داده‌های اولیه
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 3.1 | Seeder ۲۳۲ کشور با ۴ زون | ✅ انجام شد | تصحیح کدهای ISO، حذف تکراری‌ها |
| 3.2 | Seeder System Settings | ✅ انجام شد | VAT 9%, packing 100000 IRR, profit_margin 1.25 |
| 3.3 | Seeder Super Admin User | ✅ انجام شد | |
| 3.4 | DatabaseSeeder ترکیبی | ✅ انجام شد | |
---
## بخش ۳: API ترکینگ
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 4.1 | ایجاد `TrackController` | ✅ انجام شد | JSON response کامل |
| 4.2 | ایجاد `ApiKeyMiddleware` | ✅ انجام شد | Bearer token validation |
| 4.3 | ثبت route `GET /api/v1/track/{awb_no}` | ✅ انجام شد | |
| 4.4 | تست با API Key صحیح | ✅ انجام شد | 200 OK |
| 4.5 | تست بدون API Key | ✅ انجام شد | 401 Unauthorized |
| 4.6 | تست با API Key نامعتبر | ✅ انجام شد | 403 Forbidden |
---
## بخش ۴: پنل مدیریت Filament
### Resources اصلی
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 5.1 | `CountryResource` | ✅ انجام شد | فرم ۴ زون + iso_code + is_active |
| 5.2 | `ShipmentResource` | ✅ انجام شد | ۷ Section کامل |
| 5.3 | `ShippingRateResource` | ✅ انجام شد | ۱۰ zone + enum |
| 5.4 | `ShipmentItemResource` | ✅ انجام شد | CRUD کامل |
| 5.5 | `CarrierMappingsRelationManager` | ✅ انجام شد | برای Shipment |
| 5.6 | `TrackingEventsRelationManager` | ✅ انجام شد | برای Shipment |
| 5.7 | `SettingsPage` | ✅ انجام شد | System Settings |
| 5.8 | صفحه‌های List/Create/Edit/View | ✅ انجام شد | برای همه Resources |
---
## بخش ۵: Services
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 6.1 | `TrackingService` | ✅ انجام شد | getTrackingTimeline, addTrackingEvent, getShipmentWithTracking |
| 6.2 | `PriceCalculatorService` | ✅ انجام شد | ۹ مرحله محاسبه |
---
## بخش ۶: Excel Imports
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 7.1 | `ShippingRatesImport` | ✅ انجام شد | ۴۰۴ رکورد import شد |
| 7.2 | `HistoricalShipmentsImport` | ✅ انجام شد | هر رکورد معتبر در فایل اکسل قابل import است |
| 7.3 | Artisan Command `ifnex:import:rates` | ✅ انجام شد | |
| 7.4 | Artisan Command `ifnex:import:shipments` | ✅ انجام شد | |
---
## بخش ۷: پیکربندی
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 8.1 | `config/ifnex.php` | ✅ انجام شد | تنظیمات اختصاصی |
| 8.2 | `config/cors.php` | ✅ انجام شد | |
| 8.3 | `.env.example` به‌روز | ✅ انجام شد | IFNEX_API_KEY, CORS_ALLOWED_ORIGINS, ... |
| 8.4 | سوییچ به Laravel 11 | ✅ انجام شد | Downgrade از v12 به v11 |
| 8.5 | نصب `morilog/jalali` v3 | ✅ انجام شد | |
| 8.6 | رفع خطای PSR-4 | ✅ انجام شد | SettingsPage.php |
| 8.7 | رفع خطای `MethodNotAllowedHttpException` | ✅ انجام شد | POST /admin/login |
---
## بخش ۸: Code Review
| # | کار | وضعیت | توضیحات |
|---|-----|-------|---------|
| 9.1 | بررسی `bootstrap/app.php` | ✅ انجام شد | مشکل: گروه `web` تعریف نشده |
| 9.2 | بررسی `AdminPanelProvider.php` | ✅ انجام شد |Middlewareهای طولانی به صورت دستی |
| 9.3 | بررسی `composer.json` | ✅ انجام شد | صحیح است |
| 9.4 | بررسی Routes | ✅ انجام شد | کافی برای حال حاضر |
| 9.5 | ارائه راه‌حل برای مشکلات | ✅ انجام شد | راه‌حل در STATUS.md ثبت شد |
---
## بخش ۹: بلاک‌های فعلی
| # | مشکل | اولویت | وضعیت | راه‌حل |
|---|------|--------|-------|--------|
| B1 | فایل اکسل مرسولات فعلی داده‌های نمونه/قدیمی دارد | 🟡 متوسط | **بدون بلاک** | هر فایل اکسل جدید قابل import است |
| B2 | گروه `web` در `bootstrap/app.php` تعریف نشده | 🔴 بالا | **بلاک** | اضافه کردن `$middleware->group('web', [...])` |
| B3 | فایل اکسل ترکینگ موجود است | 🟡 متوسط | ✅ موجود | در `01_Documents/Data entry 2026-06-28.xlsx` |
| B4 | پلاگین وردپرس IFNEX Bridge ساخته نشده | 🟡 متوسط | نشده | بعد از تست کامل API |
| B5 | تست دستی کامل Filament انجام نشده | 🟡 متوسط | pending | ورود + CRUD + RelationManagers |
---
## بخش ۱۰: کارهای باقی‌مانده فاز ۰
| # | کار | اولویت | وضعیت | یادداشت |
|---|-----|--------|-------|---------|
| R1 | تست دستی کامل Filament | 🔴 بالا | ✅ انجام شد | ورود + CRUD + RelationManagers + Settings |
| R2 | مهاجرت داده‌های ترکینگ از `01_Documents/Data entry 2026-06-28.xlsx` | 🟡 متوسط | ✅ انجام شد | 98 رویداد import شد |
| R3 | ساخت پلاگین وردپرس IFNEX Bridge | 🟡 متوسط | ✅ انجام شد | شورت‌کدها کار می‌کنند |
| R4 | تست کامل API Track با داده‌های واقعی | 🟡 متوسط | ✅ انجام شد | AWB 980100010 و 980103619 |
| R5 | تست نهایی فاز ۰ و تحویل به مشتری | 🟢 پایین | ✅ انجام شد | همه موارد تست شدند |
---
## بخش ۱۱: کارهای فاز ۱ (پس از تأیید فاز ۰)
| # | کار | اولویت | وضعیت |
|---|-----|--------|-------|
| F1.1 | تست کامل `PriceCalculatorService` با داده‌های واقعی | 🔴 بالا | ✅ انجام شد (2026-08-07) |
| F1.2 | تکمیل جدول `shipping_rates` | 🟡 متوسط | ✅ انجام شد - ۴۰۴ رکورد import شد |
| F1.3 | فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی | 🟡 متوسط | ⏳ pending |
| F1.4 | تولید PDF: AWB، INVOICE، Label | 🟡 متوسط | ⏳ pending |
| F1.5 | ماژول ایمپورت اکسل تعرفه‌ها | 🟢 پایین | ✅ انجام شد |
| F1.6 | صفحه استعلام قیمت واقعی | 🟢 پایین | ✅ انجام شد |
### کارهای فاز ۲ (شروع شده - 2026-08-05)
| # | کار | اولویت | وضعیت |
|---|-----|--------|-------|
| F2.1 | ساخت `WalletController` با APIها | 🔴 بالا | ✅ انجام شد |
| F2.2 | ساخت `DiscountCodeController` با APIها | 🔴 بالا | ✅ انجام شد |
| F2.3 | ساخت `UpdateExchangeRates` Artisan Command | 🟡 متوسط | ✅ انجام شد |
| F2.4 | ثبت routeهای کیف پول و تخفیف | 🟡 متوسط | ✅ انجام شد |
| F2.5 | اتصال درگاه پرداخت (زرین‌پال) | 🔴 بالا | ⏳ pending |
| F2.6 | شارژ آنلاین کامل | 🔴 بالا | ⏳ pending |
| F2.7 | پنل مالی در Filament | 🟡 متوسط | ⏳ pending |
---
## بخش ۱۲: کارهای فاز ۲ و ۳ (مرجع)
### فاز ۲: اتوماسیون مالی
- [ ] اتصال به درگاه پرداخت (زرین‌پال)
- [ ] ایجاد جدول کیف پول و تراکنش‌ها
- [ ] شارژ اعتبار آنلاین و دستی
- [ ] کرون‌جاب بروزرسانی نرخ ارز
- [ ] سیستم کوپن و تخفیف‌ها
- [ ] فرمول محاسبه قیمت رقبا
### فاز ۳: رهگیری زنده و عملیات
- [ ] راه‌اندازی VPS پل خارج (هلند/آلمان)
- [ ] اتصال به TrackingMore/17track API
- [ ] سیستم وب‌هوک
- [ ] مپ کردن کدهای رهگیری
- [ ] داشبورد مالی
- [ ] فرم نظرسنجی و رضایت مشتری
- [ ] پنل کاربری مشتریان در وردپرس
---
## Legend
| آیکون | معنی |
|--------|------|
| ✅ | انجام شده |
| 🔄 | در حال انجام |
| ⚠️ | جزئی/ناقص/بلاک |
| ❌ | لغو شده/خراب |
| ⏸️ | متوقف/منتظر |
| 🔴 بالا | اولویت بالا |
| 🟡 متوسط | اولویت متوسط |
| 🟢 پایین | اولویت پایین |
---
## نحوه استفاده از این فایل
۱. **در ابتدای هر جلسه:** این فایل را باز کنید و موارد `pending` را بررسی کنید.
۲. **بعد از انجام هر کار:** شماره کار را پیدا کنید و وضعیت را به‌روز کنید.
۳. **اگر بلاک جدیدی ایجاد شد:** در بخش «بلاک‌های فعلی» اضافه کنید.
۴. **اگر نیاز به Code Review دارید:** بخش ۹ را بررسی کنید.
---
© 2026 VernaSoft Group. Internal use only.