ifnex/01_Documents/STATUS.md
Kazem Alghasi 31d28fbe68 docs(pdf): add technical mapping and implementation notes to templates
Add detailed documentation within AWB, Invoice, and Label PDF templates
to map HTML elements to specific Excel cell references and VLOOKUP
sources. This includes requirements for fonts, colors, and dimensions
to ensure future alignment with official IFNEX branding and Excel
templates.

Also update project status to reflect completed middleware configuration
tasks.
2026-08-04 09:50:53 +03:30

491 lines
27 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# 🚨 STATUS.md — این فایل را اول بخوانید
> **آخرین به‌روزرسانی:** 2026-08-04 01:10 (Asia/Tehran)
> **فاز در حال اجرا:** فاز ۰ (بنیان داده + ترکینگ دستی + مهاجرت داده‌های تاریخی)
> **توسعه‌دهنده:** VernaSoft Group — Kazem Alghasi
> **وضعیت کلی پروژه:** در حال اجرا — Code Review کامل شد، نیاز به رفع نقص middleware است
---
## ⚠️ هشدار حیاتی — قبل از هر کاری بخوانید
این پروژه دارای **سه سند تاریخی** است که با هم تناقض دارند. فقط یکی از آن‌ها معتبر است:
| فایل | وضعیت | اقدام |
|------|-------|-------|
| `01_Documents/Phase0_Proposal.md` | ✅ **معتبر و مرجع اصلی** | حتماً کامل بخوانید |
| `01_Documents/PRD_v2.md` | ❌ قدیمی و ناقص | فقط برای مرجع تاریخی — به اسکیمای دیتابیس آن اعتماد نکنید |
| `01_Documents/Project_Roadmap.md` | ❌ قدیمی (۳ فازی) | فقط برای مرجع تاریخی — به فازبندی آن اعتماد نکنید |
| `01_Documents/EXCEL_ANALYSIS.md` | ✅ **مرجع تحلیل اکسل** | حتماً بخوانید قبل از کار با داده‌های تاریخی |
| `README.md` (ریشه) | ✅ به‌روز (نسخه ۲) | برای نمای کلی بخوانید |
> 🔴 **قانون طلایی:** هرجا بین اسناد تناقض دیدی، به `Phase0_Proposal.md` اعتماد کن. اسناد قدیمی فقط برای فهم تاریخچه‌ی تصمیمات نگه داشته شده‌اند.
---
## 📌 Quick Reference — نسخه‌ها و معماری
### تکنولوژی‌ها (قفل‌شده)
| مورد | نسخه/مقدار | دلیل |
|------|------------|------|
| Laravel | **11** (همه‌جا یکسان) | در PRD قدیمی ۱۰+ نوشته، در Roadmap قدیمی ۱۱، در README قدیمی ۱۲ — نسخه نهایی: **۱۱** |
| PHP | 8.2+ | الزام لاراول ۱۱ |
| MySQL | 8+ | برای پشتیبانی JSON columns |
| WordPress | آخرین نسخه پایدار | با Polylang برای چندزبانه |
| پنل ادمین | Laravel Filament 3.3.x | برای سرعت توسعه |
| Frontend | وردپرس + قالب DHL-inspired | **کپی نکنید** — فقط الهام |
### معماری کلی
```
┌─────────────────┐ REST API ┌─────────────────┐
│ WordPress │ ←─────────────────────→ │ Laravel 11 │
│ (Frontend) │ پلاگین IFNEX Bridge │ (Backend) │
│ │ │ + Filament │
└─────────────────┘ └────────┬────────┘
┌────────┴────────┐
│ MySQL 8 │
└─────────────────┘
(فاز ۳) │
┌────────┴────────┐
│ VPS پل خارج │
│ (هلند/آلمان) │
└────────┬────────┘
┌────────┴────────┐
│ TrackingMore / │
│ 17track API │
└─────────────────┘
```
---
## ✅ وضعیت فعلی کار
### کارهای انجام‌شده (تا تاریخ 2026-08-04)
#### ۱. اسکیمای دیتابیس فاز ۰ (کامل)
- [x] بازنویسی migration `countries` با ۴ زون مجزا + `iso_code` + `is_active`
- [x] بازنویسی migration `shipments` مطابق Phase 0 (فیلدهای مالی + ۴ زون + nullable حقایل)
- [x] بازنویسی migration `shipping_rates` با enum `direction` و `type` (DOC_NORMAL/DOC_ECONOMY/PARCEL)
- [x] ایجاد migration `shipment_carrier_mappings` (جدول جدید — نگاشت چند شرکت حمل)
- [x] ایجاد migration `shipment_tracking_events` (جدول جدید — تایم‌لاین رویدادها)
- [x] ایجاد migration `system_settings` (جدول جدید — key-value برای VAT، نرخ ارز و...)
- [x] ایجاد migration `update_users` (افزودن `phone`, `role`, `is_active`)
- [x] حل مشکل `unsignedDecimal` در Laravel 11 (استفاده از `decimal()->unsigned()`)
- [x] حل مشکل FK constraints در migrations (استفاده از `disableForeignKeyConstraints()`)
- [x] اجرای همه migrations در MySQL بدون خطا
#### ۲. مدل‌ها و Enums (کامل)
- [x] بازنویسی `Country.php` + روابط `fromShipments()` / `toShipments()`
- [x] بازنویسی `Shipment.php` + روابط `fromCountry()`, `toCountry()`, `items()`, `carrierMappings()`, `trackingEvents()`
- [x] بازنویسی `ShippingRate.php` + cast برای enums
- [x] بازنویسی `User.php` + فیلدهای `phone`, `role`, `is_active` + helper methods
- [x] ایجاد مدل‌های جدید:
- `ShipmentCarrierMapping.php`
- `ShipmentTrackingEvent.php`
- `SystemSetting.php`
- [x] ایجاد ۶ enum:
- `ShipmentDirection` (import/export)
- `ShipmentType` (DOC_NORMAL/DOC_ECONOMY/PARCEL)
- `ShipmentStatus` (processed/picked_up/in_transit/out_for_delivery/failed/delivered/returned)
- `CarrierCode` (DHL/FEDEX/UPS/ARAMEX/NAGHEL/EMX/APSITEX/IMPEX/OTHER)
- `TrackingSource` (manual/api_carrier/api_aggregator)
- `UserRole` (super_admin/tracking_operator/data_entry/customer)
#### ۳. Seeders (کامل)
- [x] بازنویسی `CountriesTableSeeder` با ۲۳۳ کشور + ۴ زون + iso_code تصحیح‌شده
- تصحیح کدهای ISO نادرست (Bonaire BQ، Curacao CW، حذف Somaliland XS)
- حذف کشورهای تکراری ("United Arab Emirates" و "Rest of Dubai" هر دو با zone 9 و 10)
- [x] ایجاد `SystemSettingSeeder` (VAT 9%، packing 100000 IRR، profit_margin 1.25، نرخ ارزهای اولیه)
- [x] بازنویسی `DatabaseSeeder` (countries + system_settings + super_admin user)
- [x] اجرای seeders — ۲۳۲ کشور + ۷ setting + ۱ کاربر ادمین
#### ۴. API ترکینگ (کامل)
- [x] ایجاد `TrackController` با JSON response کامل (shipment + carrier_mappings + timeline)
- [x] ایجاد `ApiKeyMiddleware` (Bearer token validation)
- [x] ثبت route `GET /api/v1/track/{awb_no}` با middleware API Key
- [x] تست‌های موفق:
- `GET /api/v1/track/TEST123` با API Key صحیح → **200 OK**
- بدون API Key → **401 Unauthorized**
- با API Key نامعتبر → **403 Forbidden**
#### ۵. Filament Resources (کامل)
- [x] `CountryResource` — فرم ۴ زون + iso_code + is_active + فیلترها
- [x] `ShipmentResource` — فرم کامل با ۷ Section + RelationManagers
- Section: Route & Status
- Section: Weight & Dimensions
- Section: Financial Info (۱۱ فیلد مالی)
- Section: Sender Info
- Section: Receiver Info
- Section: Customs Items (Repeater ۹ ردیف)
- [x] `ShippingRateResource` — فرم ۱۰ zone + enum type/direction
- [x] `ShipmentItemResource` — CRUD کامل
- [x] RelationManagers:
- `CarrierMappingsRelationManager` (برای Shipment)
- `TrackingEventsRelationManager` (برای Shipment)
- [x] Pages:
- `ListShipments`, `CreateShipment`, `EditShipment`, `ViewShipment`
- `ListCountries`, `CreateCountry`, `EditCountry`
- `ListShippingRates`, `CreateShippingRate`, `EditShippingRate`
- `ListShipmentItems`, `CreateShipmentItem`, `EditShipmentItem`
- [x] `SettingsPage` (Page سفارشی برای System Settings)
#### ۶. Services (کامل)
- [x] `TrackingService` — getTrackingTimeline, addTrackingEvent, getShipmentWithTracking
- [x] `PriceCalculatorService` — محاسبه قیمت کامل مطابق EXCEL_ANALYSIS.md
- مرحله ۱: وزن حجمی
- مرحله ۲: وزن قابل پرداخت
- مرحله ۳: استخراج زون از ۴ زون مجزا
- مرحله ۴: استخراج قیمت پایه از shipping_rates
- مرحله ۵: اعمال ضریب سود
- مرحله ۶: تبدیل درهم به ریال
- مرحله ۷: اضافه هزینه‌های جانبی
- مرحله ۸: اعمال VAT 9%
- مرحله ۹: ذخیره خروجی‌ها
#### ۷. Imports (Excel) (کامل)
- [x] `ShippingRatesImport` — import از ۵ شیت (Import Rate, Export Rate, DocNor, DocEco, Parcel)
- ۴۰۴ رکورد import شد: DocNormal: ۷۴، DocEconomy: ۷۰، Parcel: ۲۶۰
- [x] `HistoricalShipmentsImport` — import از شیت List فایل اصلی
- ⚠️ **مشکل:** فایل اکسل فقط ۲ ردیف داده واقعی دارد و بقیه فرمول‌های Excel هستند
- ۱ رکورد (980100010) موفقیت‌آمیز import شد
- [x] Artisan Commands:
- `ifnex:import:rates {path}`
- `ifnex:import:shipments {path}`
#### ۸. سوییچ به Laravel 11 (کامل با نقص باقی‌مانده)
- [x] تغییر `composer.json`: `laravel/framework` از `^12.0` به `^11.0`
- [x] تغییر `morilog/jalali` از `^4.3` به `^3.0` (v4 وجود ندارد)
- [x] اجرای `composer update` — Laravel از v12.64.0 به v11.55.0 downgrade شد
- [x] رفع خطای PSR-4 در `SettingsPage.php`
- [x] رفع مشکل middleware در `bootstrap/app.php` برای Laravel 11
- [x] رفع خطای `MethodNotAllowedHttpException` برای POST `/admin/login`
#### ٩. پیکربندی (کامل)
- [x] اضافه کردن `IFNEX_API_KEY` به `.env.example`
- [x] اضافه کردن `CORS_ALLOWED_ORIGINS` به `.env.example`
- [x] اضافه کردن `IFNEX_TRACKING_RATE_LIMIT` به `.env.example`
- [x] ایجاد `config/ifnex.php` برای تنظیمات اختصاصی
- [x] تغییر `APP_LOCALE` به `fa` در `.env.example`
- [x] اضافه کردن `morilog/jalali` به `composer.json`
- [x] ایجاد `config/cors.php`
---
### 🔴 Code Review Findings — نیاز به رفع
| # | فایل | مشکل | وضعیت | راه‌حل |
|---|------|------|-------|-------|
| 1 | `bootstrap/app.php` | گروه `web` تعریف نشده | ✅ انجام شد | `$middleware->group('web', [...])` اضافه شد |
| 2 | `AdminPanelProvider.php` | Middlewareهای طولانی به صورت لیست دستی | ✅ انجام شد | استفاده از گروه `web` به جای لیست دستی |
| 3 | `bootstrap/app.php` | `statefulApi` تعریف نشده | 🟡 آینده | برای احراز هویت SPA در فاز بعد لازم است |
**توضیح مشکل #1:**
در Laravel 11، گروه `web` به‌صورت خودکار تعریف نمی‌شود. Filament برای لاگین نیاز به Session, Cookies, CSRF, ShareErrors دارد. فعلاً کار می‌کند چون در `AdminPanelProvider.php` همه Middlewareها به صورت لیست دستی نوشته شده‌اند، اما این روش **خوب نیست** و مطابق Laravel 11 conventions نیست. اگر جایی از `web` group استفاده شود، کار نمی‌کند.
**راه‌حل پیشنهادی برای `bootstrap/app.php`:**
```php
->withMiddleware(function (Middleware $middleware): void {
$middleware->api(prepend: \Illuminate\Http\Middleware\HandleCors::class);
$middleware->group('web', [
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
]);
})
```
**راه‌حل پیشنهادی برای `AdminPanelProvider.php` بعد از تعریف گروه `web`:**
```php
->middleware([
'web',
\Filament\Http\Middleware\Authenticate::class,
])
```
---
### 🔴 مشکل — مهاجرت داده‌های تاریخی
**وضعیت:** فایل اکسل مرسولات فعلی فقط داده‌های نمونه/قدیمی دارد و برای import کامل مناسب نیست.
**راه‌حل:** هر فایل اکسل جدید که مشتری تحویل دهد، باید قابل import باشد. نیازی به مهاجرت همه داده‌های قدیمی نیست.
**فایل ترکینگ:** `01_Documents/Data entry 2026-06-28.xlsx` — شامل ۶ شیت: Sheet1, Refrence, Paste, copy, Delivered, test
**وضعیت:** **فایل موجود است** — مهاجrut داده‌های ترکینگ می‌تواند انجام شود.
---
### کارهای در دست اقدام (فاز ۰)
| اولویت | کار | وضعیت | توضیحات |
|--------|-----|-------|---------|
| 🔴 بالا | تست دستی کامل Filament (ورود + CRUD) | ✅ انجام شد | همه Resources + RelationManagers + Settings کار می‌کنند |
| 🟡 متوسط | مهاجرت داده‌های ترکینگ از `01_Documents/Data entry 2026-06-28.xlsx` | ✅ انجام شد | 98 رویداد import شد، 8 shipment |
| 🟡 متوسط | ساخت پلاگین وردپرس IFNEX Bridge | ✅ انجام شد | شورت‌کدهای [ifnex_tracking_form] و [ifnex_tracking_status] کار می‌کنند |
| 🟡 متوسط | تست API Track با نمونه‌های بیشتر | ✅ انجام شد | AWB 980100010 و 980103619 تست شدند |
| 🟢 پایین | تست نهایی فاز ۰ و تحویل به مشتری | ✅ انجام شد | همه موارد تست شدند |
---
### کارهای فاز ۱ (پس از تأیید فاز ۰)
- [ ] موتور قیمت‌گذاری کامل (PriceCalculatorService) — نوشته شد، نیاز به تست با داده‌های واقعی
- [ ] جدول `shipping_rates` — ۴۰۴ رکورد import شد، نیاز به تکمیل
- [ ] فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی
- [x] تولید PDF: AWB، INVOICE، Label — اولیه پیاده شد با لوگوی استخراج‌شده از اکسل و چیدمان مطابق ساختار شیت‌ها. LABEL برای پرینتر لیزری+A4 طراحی شد. نیاز به تطبیق نهایی با قالب‌های اکسل (بعد از تکمیل فاز ۱)
- [x] ماژول ایمپورت اکسل تعرفه‌ها — command با قابلیت‌های --clear و --dry-run پیاده شد
- [ ] صفحه استعلام قیمت واقعی
---
## 🚫 خط قرمزها (DO NOT) — هرگز این کارها را نکن
### 🚫 اسکیمای دیتابیس
- **NEVER** جدول `countries` را به ۲ زون برگردانی — ۴ زون مجزا (export_parcel, export_doc, import_parcel, import_doc) الزامی است.
- **NEVER** فقط ۲ نوع سرویس پیاده کن — ۳ نوع الزامی است: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`.
- **NEVER** فیلد `forwarder_track_id` را به‌عنوان فیلد واحد در `shipments` نگه دار — باید `shipment_carrier_mappings` استفاده شود.
- **NEVER** فیلدهای مالی مهم (VAT، Domestic Pickup، Domestic Delivery، Warehousing Cost، Extra Service، Packing Cost) را حذف کن.
- **NEVER** فیلد `status` در `shipments` را به String تغییر دهی — Enum استفاده کن.
### 🚫 معماری
- **NEVER** ترکینگ را در وردپرس پیاده کن — همیشه در لاراول.
- **NEVER** در وردپرس پردازش داده‌ی سفارش انجام دهی — تمام فرم‌ها از طریق پلاگین IFNEX Bridge به لاراول ارسال می‌شوند.
- **NEVER** API لاراول را بدون API Key، Rate Limiting و CORS whitelist بگذاری.
- **NEVER** از CORS `*` استفاده کنی — فقط دامنه‌ی تولیدی وردپرس باید whitelist شود.
- **NEVER** تاریخ‌ها را به شمسی در دیتابیس ذخیره کنی — همیشه timestamp میلادی.
### 🚫 طراحی و کپی‌رایت
- **NEVER** از رنگ، لوگو یا عناصر هویت بصری DHL کپی کنی.
- **NEVER** خروجی PDF (AWB، Invoice، Label) را به فارسی بسازی — انگلیسی باشد.
### 🚫 فرآیند
- **NEVER** فایل `.env` را در Git کامیت کنی.
- **NEVER** `APP_DEBUG=true` را در محیط تولید بگذاری.
- **NEVER** اسکوپ فاز ۰ را بدون Change Request رسمی تغییر دهی.
- **NEVER** فاز ۱ را قبل از تأیید رسمی فاز ۰ توسط مشتری شروع کنی.
---
## ❓ سوالات متداول (FAQ)
### س: کدام نسخه لاراول استفاده کنم؟
**ج:** لاراول **۱۱**. این نسخه در `STATUS.md` قفل شده و در `composer.json` هم تنظیم شده است.
### س: مهاجرت دادههایHistorical چقدر مهم است؟
**ج:** هر فایل اکسل جدید که مشتری تحویل دهد، باید قابل import باشد. نیازی به مهاجرت همه داده‌های قدیمی نیست. فایل ترکینگ `Data entry 2026-06-28.xlsx` موجود است و قابل import است.
### س: چه کارهایی در این جلسه انجام شد؟
**ج:**
1. بازنویسی کامل اسکیمای دیتابیس (۷ migration جدید)
2. بازنویسی تمام Modelها + ایجاد ۶ Enum
3. بازنویسی Seeders (countries + system_settings)
4. ایجاد API TrackController + ApiKeyMiddleware
5. بازنویسی کامل Filament Resources + RelationManagers + SettingsPage
6. ایجاد Services (TrackingService + PriceCalculatorService)
7. ایجاد Imports (ShippingRatesImport + HistoricalShipmentsImport)
8. ایجاد Artisan Commands (ifnex:import:rates, ifnex:import:shipments)
9. سوییچ به Laravel 11 + رفع همه خطاهای مربوطه
10. import ۴۰۴ shipping rate + ۱ shipment تاریخی
11. **Code Review کامل** — شناسایی مشکل middleware و ارائه راه‌حل
12. به‌روزرسانی تمام داکیومنت‌ها و حذف ارجاع به ۳۹۵۰ رکورد قدیمی
### س: چه کارهایی باقی مانده؟
**ج:**
1. رفع مشکل middleware `web` group در `bootstrap/app.php`
2. ساده کردن `AdminPanelProvider.php` بعد از تعریف گروه `web`
3. تست دستی Filament (ورود + CRUD)
4. مهاجرت داده‌های ترکینگ از فایل `Data entry 2026-06-28.xlsx`
5. ساخت پلاگین وردپرس IFNEX Bridge
6. تست کامل API Track
7. تولید PDF (فاز ۱)
---
## 🛠️ Quick Commands — دستورات پرکاربرد
### نصب و راه‌اندازی لاراول
```bash
cd 04_Laravel
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --force
php artisan db:seed --force
php artisan serve
```
### Artisan Commands سفارشی
```bash
# Import shipping rates
php artisan ifnex:import:rates storage/app/public/01KYWGVNKS5TNMN37RV77PCYNZ.xlsx
# Import historical shipments
php artisan ifnex:import:shipments storage/app/public/01KYWGVNKS5TNMN37RV77PCYNZ.xlsx
```
### تست API Track
```bash
# با API Key صحیح
curl -H "Authorization: Bearer ifnex-local-dev-key" http://localhost:8000/api/v1/track/TEST123
# بدون API Key
curl http://localhost:8000/api/v1/track/TEST123
# با API Key نامعتبر
curl -H "Authorization: Bearer wrong-key" http://localhost:8000/api/v1/track/TEST123
```
### پشتیبان‌گیری از دیتابیس
```bash
mysqldump -u root -p ifnex_db > backups/ifnex_$(date +%Y%m%d).sql
```
---
## 📂 ساختار پوشه‌های پروژه (پس از تکمیل فاز ۰)
```
IFNEX-Logistics/
├── 01_Documents/
│ ├── STATUS.md ⭐ این فایل — اول بخوان
│ ├── Phase0_Proposal.md ⭐ مرجع اصلی پروژه
│ ├── EXCEL_ANALYSIS.md ⭐ تحلیل فایل‌های اکسل
│ ├── PRD_v2.md (قدیمی — مرجع تاریخی)
│ ├── Project_Roadmap.md (قدیمی — مرجع تاریخی)
│ └── IFNEX_Phase0_Checklist.md (چک‌لیست فاز ۰)
├── 02_Design/
│ └── Assets/ (لوگوها، آیکون‌ها، فایل‌های فیگما)
├── 03_WordPress/
│ └── wp-content/plugins/
│ └── ifnex-bridge/ (پلاگین اختصاصی)
│ ├── ifnex-bridge.php
│ ├── includes/
│ │ ├── api-client.php
│ │ ├── shortcodes.php
│ │ └── tracking-form.php
│ └── assets/
│ ├── css/
│ └── js/
├── 04_Laravel/
│ ├── app/
│ │ ├── Models/
│ │ │ ├── Country.php
│ │ │ ├── Shipment.php
│ │ │ ├── ShipmentCarrierMapping.php
│ │ │ ├── ShipmentTrackingEvent.php
│ │ │ ├── SystemSetting.php
│ │ │ ├── ShippingRate.php
│ │ │ ├── ShipmentItem.php
│ │ │ └── User.php
│ │ ├── Enums/
│ │ │ ├── ShipmentDirection.php
│ │ │ ├── ShipmentType.php
│ │ │ ├── ShipmentStatus.php
│ │ │ ├── CarrierCode.php
│ │ │ ├── TrackingSource.php
│ │ │ └── UserRole.php
│ │ ├── Services/
│ │ │ ├── TrackingService.php
│ │ │ └── PriceCalculatorService.php
│ │ ├── Http/
│ │ │ ├── Controllers/
│ │ │ │ └── Api/
│ │ │ │ ├── TrackController.php
│ │ │ │ └── PricingController.php
│ │ │ └── Middleware/
│ │ │ └── ApiKeyMiddleware.php
│ │ ├── Imports/
│ │ │ ├── ShippingRatesImport.php
│ │ │ ├── HistoricalShipmentsImport.php
│ │ │ └── RateSheetImport.php
│ │ ├── Console/
│ │ │ └── Commands/
│ │ │ ├── ImportShippingRates.php
│ │ │ ├── ImportHistoricalData.php
│ │ │ └── DebugImportCommand.php
│ │ ├── Filament/
│ │ │ ├── Resources/
│ │ │ │ ├── CountryResource.php
│ │ │ │ ├── ShipmentResource.php
│ │ │ │ │ ├── Pages/
│ │ │ │ │ │ ├── CreateShipment.php
│ │ │ │ │ │ ├── EditShipment.php
│ │ │ │ │ │ ├── ViewShipment.php
│ │ │ │ │ │ └── ListShipments.php
│ │ │ │ │ └── RelationManagers/
│ │ │ │ │ ├── CarrierMappingsRelationManager.php
│ │ │ │ │ └── TrackingEventsRelationManager.php
│ │ │ │ ├── ShippingRateResource.php
│ │ │ │ └── ShipmentItemResource.php
│ │ │ └── Pages/
│ │ │ └── IfnexSettingsPage.php
│ │ └── Providers/
│ │ ├── AppServiceProvider.php
│ │ └── Filament/
│ │ └── AdminPanelProvider.php
│ ├── database/
│ │ ├── migrations/
│ │ │ ├── 2026_08_02_000001_create_countries_table.php
│ │ │ ├── 2026_08_02_000002_create_shipments_table.php
│ │ │ ├── 2026_08_02_000003_create_shipping_rates_table.php
│ │ │ ├── 2026_08_02_000004_create_shipment_carrier_mappings_table.php
│ │ │ ├── 2026_08_02_000005_create_shipment_tracking_events_table.php
│ │ │ ├── 2026_08_02_000006_create_system_settings_table.php
│ │ │ └── 2026_08_02_000007_update_users_table.php
│ │ └── seeders/
│ │ ├── CountriesTableSeeder.php
│ │ ├── SystemSettingSeeder.php
│ │ └── DatabaseSeeder.php
│ ├── routes/
│ │ ├── web.php
│ │ └── api.php
│ ├── config/
│ │ ├── ifnex.php
│ │ └── cors.php
│ ├── bootstrap/
│ │ └── app.php
│ └── .env.example
├── README.md
├── composer.json
└── .gitignore
```
---
## 🎯 گام بعدی برای ادامه‌ی کار
اگر نمونه‌ی جدیدی از AI Agent هستی که می‌خواهی کار را ادامه دهی، این مراحل را به ترتیب برو:
۱. **این فایل (`STATUS.md`)** را کامل بخوان — حالا خواندی ✅
۲. **`EXCEL_ANALYSIS.md`** را کامل بخوان — برای فهم داده‌های تاریخی ضروری است
۳. **`Phase0_Proposal.md`** را کامل بخوان — مرجع اصلی پروژه
۴. **`README.md`** ریشه را بخوان — برای نمای کلی
۵. کد موجود در `04_Laravel` را بررسی کن — ببین چه چیزی نوشته شده
۶. **اولویت اول:** رفع مشکل middleware در `bootstrap/app.php` و `AdminPanelProvider.php` (راه‌حل در بالای این فایل آمده)
۷. با کاربر (Kazem) هماهنگ کن — بپرس کدام کار را باید ادامه دهی
**مهم‌ترین کار بعدی:** رفع مشکل middleware + تست دستی Filament.
---
## 📞 تماس
- **توسعه‌دهنده اصلی:** Kazem Alghasi (VernaSoft Group)
- **مشتری:** شرکت IFNEX اصفهان
- **مخزن:** https://www.git.vernahost.ir/gitmodir110/ifnex
اگر سوالی داشتی که در این فایل یا `EXCEL_ANALYSIS.md` یا `Phase0_Proposal.md` پاسخ آن نبود، از کاربر بپرس — حدس نزن.
---
© 2026 VernaSoft Group. Internal use only.