Update project documentation to reflect the resolution of previous data migration blockers and the availability of new tracking data. - Update `IFNEX_Phase0_Checklist.md` to reflect that historical shipment imports are no longer blocked and that tracking data is now available. - Revise `STATUS.md` to remove references to the 3950-record migration requirement and update the roadmap to focus on tracking data migration using the newly provided Excel file. - Add `Data entry 2026-06-28.xlsx` as the primary source for tracking data migration. - Reorganize the remaining tasks in the checklist and status reports to reflect the current project state.
26 KiB
🚨 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)
۱. اسکیمای دیتابیس فاز ۰ (کامل)
- بازنویسی migration
countriesبا ۴ زون مجزا +iso_code+is_active - بازنویسی migration
shipmentsمطابق Phase 0 (فیلدهای مالی + ۴ زون + nullable حقایل) - بازنویسی migration
shipping_ratesبا enumdirectionوtype(DOC_NORMAL/DOC_ECONOMY/PARCEL) - ایجاد migration
shipment_carrier_mappings(جدول جدید — نگاشت چند شرکت حمل) - ایجاد migration
shipment_tracking_events(جدول جدید — تایملاین رویدادها) - ایجاد migration
system_settings(جدول جدید — key-value برای VAT، نرخ ارز و...) - ایجاد migration
update_users(افزودنphone,role,is_active) - حل مشکل
unsignedDecimalدر Laravel 11 (استفاده ازdecimal()->unsigned()) - حل مشکل FK constraints در migrations (استفاده از
disableForeignKeyConstraints()) - اجرای همه migrations در MySQL بدون خطا
۲. مدلها و Enums (کامل)
- بازنویسی
Country.php+ روابطfromShipments()/toShipments() - بازنویسی
Shipment.php+ روابطfromCountry(),toCountry(),items(),carrierMappings(),trackingEvents() - بازنویسی
ShippingRate.php+ cast برای enums - بازنویسی
User.php+ فیلدهایphone,role,is_active+ helper methods - ایجاد مدلهای جدید:
ShipmentCarrierMapping.phpShipmentTrackingEvent.phpSystemSetting.php
- ایجاد ۶ 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 (کامل)
- بازنویسی
CountriesTableSeederبا ۲۳۳ کشور + ۴ زون + iso_code تصحیحشده- تصحیح کدهای ISO نادرست (Bonaire BQ، Curacao CW، حذف Somaliland XS)
- حذف کشورهای تکراری ("United Arab Emirates" و "Rest of Dubai" هر دو با zone 9 و 10)
- ایجاد
SystemSettingSeeder(VAT 9%، packing 100000 IRR، profit_margin 1.25، نرخ ارزهای اولیه) - بازنویسی
DatabaseSeeder(countries + system_settings + super_admin user) - اجرای seeders — ۲۳۲ کشور + ۷ setting + ۱ کاربر ادمین
۴. API ترکینگ (کامل)
- ایجاد
TrackControllerبا JSON response کامل (shipment + carrier_mappings + timeline) - ایجاد
ApiKeyMiddleware(Bearer token validation) - ثبت route
GET /api/v1/track/{awb_no}با middleware API Key - تستهای موفق:
GET /api/v1/track/TEST123با API Key صحیح → 200 OK- بدون API Key → 401 Unauthorized
- با API Key نامعتبر → 403 Forbidden
۵. Filament Resources (کامل)
CountryResource— فرم ۴ زون + iso_code + is_active + فیلترهاShipmentResource— فرم کامل با ۷ Section + RelationManagers- Section: Route & Status
- Section: Weight & Dimensions
- Section: Financial Info (۱۱ فیلد مالی)
- Section: Sender Info
- Section: Receiver Info
- Section: Customs Items (Repeater ۹ ردیف)
ShippingRateResource— فرم ۱۰ zone + enum type/directionShipmentItemResource— CRUD کامل- RelationManagers:
CarrierMappingsRelationManager(برای Shipment)TrackingEventsRelationManager(برای Shipment)
- Pages:
ListShipments,CreateShipment,EditShipment,ViewShipmentListCountries,CreateCountry,EditCountryListShippingRates,CreateShippingRate,EditShippingRateListShipmentItems,CreateShipmentItem,EditShipmentItem
SettingsPage(Page سفارشی برای System Settings)
۶. Services (کامل)
TrackingService— getTrackingTimeline, addTrackingEvent, getShipmentWithTrackingPriceCalculatorService— محاسبه قیمت کامل مطابق EXCEL_ANALYSIS.md- مرحله ۱: وزن حجمی
- مرحله ۲: وزن قابل پرداخت
- مرحله ۳: استخراج زون از ۴ زون مجزا
- مرحله ۴: استخراج قیمت پایه از shipping_rates
- مرحله ۵: اعمال ضریب سود
- مرحله ۶: تبدیل درهم به ریال
- مرحله ۷: اضافه هزینههای جانبی
- مرحله ۸: اعمال VAT 9%
- مرحله ۹: ذخیره خروجیها
۷. Imports (Excel) (کامل)
ShippingRatesImport— import از ۵ شیت (Import Rate, Export Rate, DocNor, DocEco, Parcel)- ۴۰۴ رکورد import شد: DocNormal: ۷۴، DocEconomy: ۷۰، Parcel: ۲۶۰
HistoricalShipmentsImport— import از شیت List فایل اصلی- ⚠️ مشکل: فایل اکسل فقط ۲ ردیف داده واقعی دارد و بقیه فرمولهای Excel هستند
- ۱ رکورد (980100010) موفقیتآمیز import شد
- Artisan Commands:
ifnex:import:rates {path}ifnex:import:shipments {path}
۸. سوییچ به Laravel 11 (کامل با نقص باقیمانده)
- تغییر
composer.json:laravel/frameworkاز^12.0به^11.0 - تغییر
morilog/jalaliاز^4.3به^3.0(v4 وجود ندارد) - اجرای
composer update— Laravel از v12.64.0 به v11.55.0 downgrade شد - رفع خطای PSR-4 در
SettingsPage.php - رفع مشکل middleware در
bootstrap/app.phpبرای Laravel 11 - رفع خطای
MethodNotAllowedHttpExceptionبرای POST/admin/login
٩. پیکربندی (کامل)
- اضافه کردن
IFNEX_API_KEYبه.env.example - اضافه کردن
CORS_ALLOWED_ORIGINSبه.env.example - اضافه کردن
IFNEX_TRACKING_RATE_LIMITبه.env.example - ایجاد
config/ifnex.phpبرای تنظیمات اختصاصی - تغییر
APP_LOCALEبهfaدر.env.example - اضافه کردن
morilog/jalaliبهcomposer.json - ایجاد
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:
->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:
->middleware([
'web',
\Filament\Http\Middleware\Authenticate::class,
])
🔴 مشکل — مهاجرت دادههای تاریخی
وضعیت: فایل اکسل مرسولات فعلی فقط دادههای نمونه/قدیمی دارد و برای import کامل مناسب نیست.
راهحل: هر فایل اکسل جدید که مشتری تحویل دهد، باید قابل import باشد. نیازی به مهاجرت همه دادههای قدیمی نیست.
فایل ترکینگ: 01_Documents/Data entry 2026-06-28.xlsx — شامل ۶ شیت: Sheet1, Refrence, Paste, copy, Delivered, test
وضعیت: فایل موجود است — مهاجrut دادههای ترکینگ میتواند انجام شود.
کارهای در دست اقدام (فاز ۰)
| اولویت | کار | وضعیت | توضیحات |
|---|---|---|---|
| 🔴 بالا | رفع مشکل middleware web group |
نیاز به اصلاح | Code Review انجام شد، راهحل مشخص است |
| 🔴 بالا | تست کامل دستی Filament (ورود + CRUD) | نیاز به تست | بعد از رفع مشکل middleware انجام شود |
| 🟡 متوسط | مهاجرت دادههای ترکینگ از 01_Documents/Data entry 2026-06-28.xlsx |
pending | فایل موجود است، Sheet1 + Refrence قابل import |
| 🟡 متوسط | ساخت پلاگین وردپرس IFNEX Bridge | نشده | بعد از تست کامل API |
| 🟡 متوسط | تست API Track با نمونههای بیشتر | انجام شد | ۳ تست پشت سر هم موفق |
| 🟢 پایین | نصب Dompdf/Snappy برای تولید PDF (فاز ۱) | نشده | بعد از تأیید فاز ۰ |
| 🟢 پایین | پیادهسازی فرم استعلام قیمت در وردپرس | نشده | بعد از تأیید فاز ۰ |
کارهای فاز ۱ (پس از تأیید فاز ۰)
- موتور قیمتگذاری کامل (PriceCalculatorService) — نوشته شد، نیاز به تست با دادههای واقعی
- جدول
shipping_rates— ۴۰۴ رکورد import شد، نیاز به تکمیل - فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی
- تولید PDF: AWB، INVOICE، Label مطابق قالب اکسل
- ماژول ایمپورت اکسل تعرفهها
- صفحه استعلام قیمت واقعی
🚫 خط قرمزها (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 است.
س: چه کارهایی در این جلسه انجام شد؟
ج:
- بازنویسی کامل اسکیمای دیتابیس (۷ migration جدید)
- بازنویسی تمام Modelها + ایجاد ۶ Enum
- بازنویسی Seeders (countries + system_settings)
- ایجاد API TrackController + ApiKeyMiddleware
- بازنویسی کامل Filament Resources + RelationManagers + SettingsPage
- ایجاد Services (TrackingService + PriceCalculatorService)
- ایجاد Imports (ShippingRatesImport + HistoricalShipmentsImport)
- ایجاد Artisan Commands (ifnex:import:rates, ifnex:import:shipments)
- سوییچ به Laravel 11 + رفع همه خطاهای مربوطه
- import ۴۰۴ shipping rate + ۱ shipment تاریخی
- Code Review کامل — شناسایی مشکل middleware و ارائه راهحل
- بهروزرسانی تمام داکیومنتها و حذف ارجاع به ۳۹۵۰ رکورد قدیمی
س: چه کارهایی باقی مانده؟
ج:
- رفع مشکل middleware
webgroup درbootstrap/app.php - ساده کردن
AdminPanelProvider.phpبعد از تعریف گروهweb - تست دستی Filament (ورود + CRUD)
- مهاجرت دادههای ترکینگ از فایل
Data entry 2026-06-28.xlsx - ساخت پلاگین وردپرس IFNEX Bridge
- تست کامل API Track
- تولید PDF (فاز ۱)
🛠️ Quick Commands — دستورات پرکاربرد
نصب و راهاندازی لاراول
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 سفارشی
# 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
# با 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
پشتیبانگیری از دیتابیس
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.