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
This commit is contained in:
Kazem Alghasi 2026-08-07 05:58:12 +03:30
parent abae820070
commit 285acdae89
8 changed files with 640 additions and 240 deletions

View File

@ -168,12 +168,24 @@
| # | کار | اولویت | وضعیت |
|---|-----|--------|-------|
| F1.1 | تست کامل `PriceCalculatorService` با داده‌های واقعی | 🔴 بالا | pending |
| F1.2 | تکمیل جدول `shipping_rates` | 🟡 متوسط | ۴۰۴ رکورد import شد |
| F1.3 | فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی | 🟡 متوسط | pending |
| F1.4 | تولید PDF: AWB، INVOICE، Label | 🟡 متوسط | pending |
| F1.5 | ماژول ایمپورت اکسل تعرفه‌ها | 🟢 پایین | pending |
| F1.6 | صفحه استعلام قیمت واقعی | 🟢 پایین | pending |
| 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 |
---

View File

@ -497,4 +497,27 @@ IFNEX-Logistics/
---
### کارهای انجام‌شده اخیر (آگوست ۲۰۲۶)
#### ۲۰۲۶-۰۸-۰۷ (امروز)
[x] **refactor(api): improve pricing logic و add test coverage**
- به‌روزرسانی `ShippingRatesImport` برای استفاده از 'outbound' و 'inbound'
- Refactor `PriceCalculatorService` با ساختار ماژولارتر
- به‌روزرسانی مدل `ShippingRate` با Property Casting برای zones
- اضافه شدن `HasFactory` به مدل‌های `Country` و `ShippingRate`
- اضافه شدن Factories جدید برای تست
- پیاده‌سازی تست‌های Feature و Service برای `PriceCalculatorService`
- ✅ تمام تست‌ها پاس شدند
#### ۲۰۲۶-۰۸-۰۵ (دیروز)
[x] **refactor(api): expose wallet و discount endpoints**
- ساخت `WalletController` با APIهای شارژ، بررسی موجودی و تاریخچه
- ساخت `DiscountCodeController` با APIهای لیست و اعتبارسنجی
- ساخت `UpdateExchangeRates` Artisan Command
- ثبت routeهای کیف پول و تخفیف در `api.php`
- پاک‌سازی فایل‌های تست و debug
- رفع CORS - تغییر از `*` به دامنه مشخص
© 2026 VernaSoft Group. Internal use only.

View File

@ -1 +1 @@
{"version":2,"defects":{"Tests\\Feature\\Api\\PricingControllerTest::it_can_calculate_pricing_with_valid_data":5,"Tests\\Feature\\Api\\PricingControllerTest::it_returns_validation_errors_for_invalid_data":7,"Tests\\Feature\\Services\\PriceCalculatorServiceTest::it_calculates_price_correctly_for_standard_package":8},"times":{"Tests\\Feature\\Api\\PricingControllerTest::it_can_calculate_pricing_with_valid_data":0.107,"Tests\\Feature\\Api\\PricingControllerTest::it_returns_validation_errors_for_invalid_data":0.052,"Tests\\Feature\\Services\\PriceCalculatorServiceTest::it_calculates_price_correctly_for_standard_package":0.055}}
{"version":2,"defects":{"Tests\\Feature\\Api\\PricingControllerTest::it_can_calculate_pricing_with_valid_data":5,"Tests\\Feature\\Api\\PricingControllerTest::it_returns_validation_errors_for_invalid_data":7,"Tests\\Feature\\Services\\PriceCalculatorServiceTest::it_calculates_price_correctly_for_standard_package":8},"times":{"Tests\\Feature\\Api\\PricingControllerTest::it_can_calculate_pricing_with_valid_data":0.107,"Tests\\Feature\\Api\\PricingControllerTest::it_returns_validation_errors_for_invalid_data":0.052,"Tests\\Feature\\Services\\PriceCalculatorServiceTest::it_calculates_price_correctly_for_standard_package":0.069}}

View File

@ -1,150 +1,480 @@
# IFNEX Logistics — Backend (Laravel 11)
> بخش بک‌اند سیستم لجستیک ایف‌نکس. این پوشه به تنهایی یک اپلیکیشن لاراول ۱۱ کامل است.
---
## 🚀 راه‌اندازی سریع
## 📄 فایل ۲: `04_Laravel/README.md` (پوشه لاراول)
```markdown
# 🚀 IFNEX Laravel Backend
> هسته مرکزی سیستم مدیریت لجستیک ایف‌نکس
| مورد | توضیحات |
| :--- | :--- |
| **نسخه لاراول** | Laravel 11.x |
| **نسخه PHP** | PHP 8.2+ |
| **پنل ادمین** | Filament 3.3.x |
| **دیتابیس** | MySQL 8+ |
| **تاریخ آخرین به‌روزرسانی** | 2026-08-07 |
---
## 📋 فهرست مطالب
1. [پیش‌نیازها](#پیشنیازها)
2. [نصب و راه‌اندازی](#نصب-و-راهاندازی)
3. [ساختار پوشه‌ها](#ساختار-پوشهها)
4. [API Endpoints](#api-endpoints)
5. [Artisan Commands](#artisan-commands)
6. [تست‌ها](#تستها)
7. [پیکربندی](#پیکربندی)
8. [نکات امنیتی](#نکات-امنیتی)
---
## پیش‌نیازها
قبل از شروع، مطمئن شوید که موارد زیر روی سیستم شما نصب هستند:
| ابزار | نسخه حداقل | نصب |
|-------|-----------|-----|
| PHP | 8.2+ | [دانلود](https://www.php.net/downloads) |
| Composer | 2.x | [دانلود](https://getcomposer.org/) |
| MySQL | 8+ | [دانلود](https://dev.mysql.com/downloads/) |
| Node.js & NPM | 18+ | [دانلود](https://nodejs.org/) (اختیاری - برای WordPress tools) |
| XAMPP/WAMP | آخرین نسخه | [دانلود](https://www.apachefriends.org/) (پیشنهادی برای Windows) |
---
## نصب و راه‌اندازی
### ۱. کلون مخزن و ورود به پوشه لاراول
```bash
# کلون مخزن
git clone https://www.git.vernahost.ir/gitmodir110/ifnex.git
# ورود به پوشه لاراول
cd ifnex/04_Laravel
۲. نصب پکیج‌های Composer
composer install
۳. کپی فایل محیط و تنظیم دیتابیس
# کپی فایل محیط
cp .env.example .env
# ویرایش فایل .env و تنظیم اطلاعات دیتابیس
nano .env # یا هر ویرایشگر دلخواه
تنظیمات مهم در فایل .env:
# دیتابیس
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ifnex_db
DB_USERNAME=root
DB_PASSWORD=
# API Key برای ترکینگ
IFNEX_API_KEY=ifnex-local-dev-key
# CORS - فقط دامنه وردپرس
CORS_ALLOWED_ORIGINS=http://localhost:8080
# Rate Limiting
IFNEX_TRACKING_RATE_LIMIT=60
# Currency API (برای فاز ۲)
CURRENCY_API_KEY=your_api_key_here
۴. تولید کلید اپلیکیشن
php artisan key:generate
۵. ایجاد دیتابیس
# ورود به MySQL
mysql -u root -p
# ایجاد دیتابیس
CREATE DATABASE ifnex_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;
۶. اجرای Migration ها
php artisan migrate --force
۷. درج داده‌های اولیه (Seeders)
# این دستور ۲۳۳ کشور + تنظیمات اولیه + کاربر ادمین را ایجاد می‌کند
php artisan db:seed --force
اطلاعات ورود پیش‌فرض به پنل ادمین:
URL: http://localhost:8000/admin
Email: admin@ifnex.local
Password: password (در Seeder تنظیم شده)
۸. اجرای سرور توسعه
php artisan serve
```
---
اکنون پروژه در http://localhost:8000 قابل دسترسی است.
## 📦 پکیج‌های اصلی
| پکیج | نسخه | نقش |
|------|------|-----|
| `laravel/framework` | ^11.0 | هسته فریم‌ورک |
| `filament/filament` | 3.3.* | پنل مدیریت ادمین |
| `maatwebsite/excel` | ^3.1 | ایمپورت اکسل |
| `barryvdh/laravel-dompdf` | ^3.1 | تولید PDF |
| `dompdf/dompdf` | ^3.0 | موتور تولید PDF |
| `morilog/jalali` | ^3.0 | تبدیل تاریخ شمسی/میلادی |
---
## 📁 ساختار کد
```
ساختار پوشه‌ها
04_Laravel/
├── app/
│ ├── Models/ # مدل‌های Eloquent
│ ├── Enums/ # Enumهای سفارشی
│ ├── Services/ # PriceCalculatorService, PdfService, ...
│ ├── Models/ # مدل‌های Eloquent
│ │ ├── Country.php # کشورها با ۴ زون
│ │ ├── Shipment.php # مرسولات
│ │ ├── ShipmentItem.php # اقلام گمرکی (۹ ردیف)
│ │ ├── ShippingRate.php # تعرفه‌های حمل
│ │ ├── ShipmentCarrierMapping.php # نگاشت کدهای ترکینگ
│ │ ├── ShipmentTrackingEvent.php # رویدادهای ترکینگ
│ │ ├── SystemSetting.php # تنظیمات سیستم
│ │ └── User.php # کاربران
│ │
│ ├── Enums/ # Enum ها
│ │ ├── ShipmentDirection.php # import/export
│ │ ├── ShipmentType.php # DOC_NORMAL/DOC_ECONOMY/PARCEL
│ │ ├── ShipmentStatus.php # ۷ وضعیت مرسوله
│ │ ├── CarrierCode.php # ۹ شرکت حمل
│ │ ├── TrackingSource.php # manual/api_carrier/api_aggregator
│ │ └── UserRole.php # ۴ نقش کاربری
│ │
│ ├── Services/ # لایه سرویس (Business Logic)
│ │ ├── PriceCalculatorService.php # ⭐ موتور قیمت‌گذاری
│ │ └── TrackingService.php # سرویس ترکینگ
│ │
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Api/ # PricingController, TrackController
│ │ │ ├── OrderController.php
│ │ │ ├── PricingPageController.php
│ │ │ └── ShipmentPdfController.php
│ │ ├── Middleware/ # ApiKeyMiddleware
│ │ └── Requests/ # Form Request Validation
│ ├── Imports/ # ShippingRatesImport
│ ├── Console/Commands/ # ImportShippingRates
│ └── Filament/ # پنل مدیریت
│ ├── Resources/ # Country, Shipment, ShippingRate, ShipmentItem
│ └── Pages/ # Settings, Dashboard
│ │ │ ├── Api/
│ │ │ │ ├── TrackController.php # API ترکینگ
│ │ │ │ ├── PricingController.php # API استعلام قیمت
│ │ │ │ ├── WalletController.php # API کیف پول
│ │ │ │ └── DiscountCodeController.php # API تخفیف
│ │ │ ├── OrderController.php # فرم ثبت سفارش
│ │ │ ├── PricingPageController.php # صفحه استعلام قیمت
│ │ │ └── ShipmentPdfController.php # تولید PDF
│ │ ├── Middleware/
│ │ │ └── ApiKeyMiddleware.php # احراز هویت API
│ │ └── Requests/ # Form Request Validation
│ │
│ ├── Imports/ # Excel Imports
│ │ ├── ShippingRatesImport.php # واردات تعرفه‌ها
│ │ ├── HistoricalShipmentsImport.php # واردات مرسولات تاریخی
│ │ └── RateSheetImport.php # شیت‌های نرخ
│ │
│ ├── Console/Commands/ # Artisan Commands
│ │ ├── ImportShippingRates.php # واردات تعرفه‌ها
│ │ ├── ImportHistoricalData.php # واردات داده‌های تاریخی
│ │ └── UpdateExchangeRates.php # به‌روزرسانی نرخ ارز
│ │
│ └── Filament/ # پنل ادمین Filament
│ ├── Resources/
│ │ ├── CountryResource.php
│ │ ├── ShipmentResource.php
│ │ ├── ShippingRateResource.php
│ │ └── ShipmentItemResource.php
│ └── Pages/
│ └── IfnexSettingsPage.php # صفحه تنظیمات
├── database/
│ ├── migrations/ # ۷ migration فاز ۰
│ └── seeders/ # seeders داده اولیه
│ ├── migrations/ # Migration ها
│ │ ├── 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/ # Seeders
│ ├── CountriesTableSeeder.php
│ ├── SystemSettingSeeder.php
│ └── DatabaseSeeder.php
├── routes/
│ ├── web.php # /order, /pricing, PDF downloads
│ └── api.php # /api/v1/calculate, /api/v1/track/{awb}
└── config/
├── ifnex.php # تنظیمات اختصاصی
└── cors.php # تنظیمات CORS
```
│ ├── web.php # روت‌های وب (فرم‌ها و صفحات)
│ └── api.php # روت‌های API
├── resources/views/
│ ├── layouts/app.blade.php # لایاوت اصلی
│ ├── orders/ # فرم ثبت سفارش
│ ├── pricing/ # صفحه استعلام قیمت
│ └── pdfs/ # قالب‌های PDF
├── config/
│ ├── ifnex.php # تنظیمات اختصاصی IFNEX
│ └── cors.php # تنظیمات CORS
├── tests/
│ └── Feature/
│ └── Services/
│ └── PriceCalculatorServiceTest.php # ⭐ تست‌های موتور قیمت
├── bootstrap/
│ └── app.php # Bootstrap لاراول ۱۱
├── .env.example # نمونه فایل محیط
├── composer.json # وابستگی‌های Composer
└── README.md # این فایل
---
## 🔌 API Endpoints
API Endpoints
| روش | مسیر | توضیحات |
|------|------|---------|
| POST | `/api/v1/calculate` | محاسبه قیمت حمل (بدون احراز هویت) |
| GET | `/api/v1/track/{awb_no}` | استعلام وضعیت مرسوله با API Key |
🔓 API های عمومی (نیاز به API Key)
**درخواست نمونه محاسبه قیمت:**
```bash
۱. رهگیری مرسوله
GET /api/v1/track/{awb_no}
Headers:
Authorization: Bearer {IFNEX_API_KEY}
مثال:
curl -H "Authorization: Bearer ifnex-local-dev-key" \
http://localhost:8000/api/v1/track/980100010
پاسخ موفق (200 OK):
{
"success": true,
"data": {
"awb_no": "980100010",
"status": "delivered",
"carrier_mappings": [...],
"tracking_events": [...]
}
}
۲. استعلام قیمت
POST /api/v1/calculate
Body (JSON):
{
"direction": "export",
"type": "DOC_NORMAL",
"country_iso": "US",
"weight": 2.5,
"volumetric_weight": 3.0,
"extra_service": 10.00
}
مثال:
curl -X POST http://localhost:8000/api/v1/calculate \
-H "Content-Type: application/json" \
-d '{
"direction": "Outbound",
"type": "DOC_NORMAL",
"country_iso": "AE",
"weight": 1,
"volumetric_weight": 1
}'
```
-H "Content-Type: application/json" \
-d '{
"direction": "export",
"type": "DOC_NORMAL",
"country_iso": "US",
"weight": 2.5,
"volumetric_weight": 3.0
}'
---
پاسخ موفق:
{
"base_price": 40.00,
"net_dirham": 50.00,
"net_rial": 22750000,
"total_fee": 24906510.9,
"zone": 1,
"chargeable_weight": 3.0
}
## 🛠️ دستورات Artisan سفارشی
💳 API های کیف پول (فاز ۲)
```bash
# ایمپورت نرخ‌های حمل از اکسل
php artisan ifnex:import:rates {path} [--clear] [--dry-run]
۱. بررسی موجودی
GET /api/v1/wallet/balance
# ایمپورت داده‌های ترکینگ
php artisan ifnex:import:tracking {path}
```
۲. شارژ کیف پول
POST /api/v1/wallet/charge
---
Body:
## 🌐 صفحات عمومی
{
"amount": 1000000,
"description": "شارژ اولیه"
}
| مسیر | توضیحات |
|------|---------|
| `/` | صفحه اصلی |
| `/order` | فرم ثبت سفارش آنلاین |
| `/order/success/{shipment}` | صفحه تایید سفارش |
| `/pricing` | صفحه استعلام قیمت |
| `/shipments/{id}/pdf/awb` | دانلود AWB (نیاز به لاگین) |
| `/shipments/{id}/pdf/invoice` | دانلود INVOICE (نیاز به لاگین) |
| `/shipments/{id}/pdf/label` | دانلود LABEL (نیاز به لاگین) |
۳. تاریخچه تراکنش‌ها
GET /api/v1/wallet/transactions
---
🎟️ API های تخفیف (فاز ۲)
۱. لیست کدهای تخفیف فعال
## 🔐 احراز هویت و دسترسی
GET /api/v1/discounts/active
| نقش | دسترسی |
|------|--------|
| `super_admin` | دسترسی کامل به همه بخش‌های Filament |
| `tracking_operator` | مدیریت ترکینگ و رویدادها |
| `data_entry` | وارد کردن داده‌های مرسوله |
| `customer` | دسترسی محدود (در فاز بعدی) |
۲. اعتبارسنجی کد تخفیف
POST /api/v1/discounts/validate
---
Body:
{
"code": "SUMMER20",
"amount": 1000000
}
## ⚠️ نکات مهم
- **Laravel 11** — با سوییچ از v12 انجام شد
- **Livewire 3.8.3** — فرم‌ها با AJAX کار می‌کنند، POST مستقیم به `/admin/login` ثبت نمی‌شود
- **Filament 3.3.x** — پنل مدیریت در مسیر `/admin`
- **MySQL 8+** — الزام migrations با JSON columns
- **DomPDF** — برای تولید PDFهای AWB, INVOICE, LABEL استفاده می‌شود
Artisan Commands
📥 واردات داده‌ها
۱. واردات تعرفه‌های حمل از اکسل
---
# واردات عادی
php artisan ifnex:import:rates storage/app/public/rates.xlsx
## 📚 مستندات بیشتر
# پاک‌سازی و واردات مجدد
php artisan ifnex:import:rates storage/app/public/rates.xlsx --clear
برای اطلاعات کامل‌تر به پوشه `01_Documents` در ریشه پروژه مراجعه کنید:
- `STATUS.md` — وضعیت فعلی و گزارش پیشرفت
- `IFNEX_Phase0_Checklist.md` — چک‌لیست دقیق فاز ۰
- `Phase0_Proposal.md` — مرجع اصلی پروژه
- `EXCEL_ANALYSIS.md` — تحلیل کامل فایل‌های اکسل عملیاتی
# تست بدون ذخیره (Dry Run)
php artisan ifnex:import:rates storage/app/public/rates.xlsx --dry-run
---
۲. واردات مرسولات تاریخی
## 📜 لایسنس
php artisan ifnex:import:shipments storage/app/public/historical.xlsx
© 2026 VernaSoft Group (Kazem Alghasi). All rights reserved.
💱 به‌روزرسانی نرخ ارز (فاز ۲)
# به‌روزرسانی دستی
php artisan ifnex:update-exchange-rates
این پروژه اختصاصی شرکت IFNEX است و کپی یا استفاده‌ی غیرمجاز از آن ممنوع است.
# تنظیم Cron Job برای به‌روزرسانی روزانه
# crontab -e
# 0 0 * * * cd /path/to/04_Laravel && php artisan ifnex:update-exchange-rates >> /dev/null 2>&1
🧪 تست‌ها
# اجرای همه تست‌ها
php artisan test
# اجرای تست‌های یک کلاس خاص
php artisan test --filter=PriceCalculatorServiceTest
# اجرای تست با نمایش دقیق
php artisan test --filter=it_calculates_price_correctly_for_standard_package
# گزارش پوشش تست (نیاز به Xdebug)
php artisan test --coverage
تست‌ها
تست‌های موجود
۱. PriceCalculatorServiceTest
این تست کلاس PriceCalculatorService را به طور کامل تست می‌کند:
php artisan test --filter=PriceCalculatorServiceTest
موارد تست شده:
✅ محاسبه صحیح قیمت برای بسته استاندارد
✅ استفاده از وزن حجمی وقتی از وزن واقعی بزرگتر است
✅ اعمال صحیح ضریب سود و VAT
✅ اعمال هزینه‌های جانبی
✅ اعمال کد تخفیف درصدی و ثابت
نوشتن تست جدید
برای نوشتن تست جدید، از این الگو استفاده کنید:
<?php
namespace Tests\Feature\Services;
use App\Models\Country;
use App\Models\ShippingRate;
use App\Models\SystemSetting;
use App\Services\PriceCalculatorService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase;
class PriceCalculatorServiceTest extends TestCase
{
use RefreshDatabase;
#[Test]
public function it_calculates_price_correctly()
{
// 1. تنظیم SystemSetting ها
SystemSetting::create(['key' => 'profit_margin', 'value' => 1.0]);
SystemSetting::create(['key' => 'aed_to_irr', 'value' => 1.0]);
SystemSetting::create(['key' => 'vat_rate', 'value' => 0.0]);
SystemSetting::create(['key' => 'packing_cost_default', 'value' => 0]);
// 2. ایجاد داده‌های تست
$country = Country::factory()->create([...]);
ShippingRate::create([...]);
// 3. اجرای سرویس
$service = app(PriceCalculatorService::class);
$result = $service->calculate([...]);
// 4. بررسی نتیجه
$this->assertEquals(50.00, $result['total_fee']);
}
}
پیکربندی
فایل config/ifnex.php
return [
// API Key برای احراز هویت
'api_key' => env('IFNEX_API_KEY', 'default-key'),
// Rate Limiting
'tracking_rate_limit' => env('IFNEX_TRACKING_RATE_LIMIT', 60),
// Currency API
'currency_api_key' => env('CURRENCY_API_KEY'),
'currency_api_url' => env('CURRENCY_API_URL', 'https://api.freecurrencyapi.com/v1/latest'),
];
فایل config/cors.php
return [
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => explode(',', env('CORS_ALLOWED_ORIGINS', '*')),
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];
نکات امنیتی
🚫 هرگز این کارها را نکنید
هرگز فایل .env را در Git کامیت نکنید
# بررسی کنید در .gitignore باشد
.env
.env.local
.env.production
هرگز APP_DEBUG=true را در محیط تولید بگذارید
# Production
APP_DEBUG=false
هرگز از CORS * در محیط تولید استفاده نکنید
# فقط دامنه وردپرس
CORS_ALLOWED_ORIGINS=https://your-wordpress-domain.com
هرگز API Key را در کد Hardcode نکنید
// ❌ اشتباه
$apiKey = 'secret-key-123';
// ✅ درست
$apiKey = config('ifnex.api_key');
🐛 عیب‌یابی
مشکل: CHECK constraint failed: direction
علت: Factory مقادیر پیش‌فرض اشتباه می‌سازد (مثلاً 'Outbound' به جای 'export')
راه‌حل: در تست‌ها از ShippingRate::create() به جای ShippingRate::factory()->create() استفاده کنید:
ShippingRate::create([
'direction' => 'export', // حروف کوچک
'type' => 'DOC_NORMAL',
'weight' => 1.0,
'zone_1' => 20.00,
// ... بقیه zone ها
]);
مشکل: No rate found for the given parameters
علت: Query نمی‌تواند نرخ مناسبی پیدا کند
راه‌حل:
بررسی کنید که zone_column درست است (zone_1, zone_2, ...)
مطمئن شوید که وزن در تست بیشتر از وزن‌های موجود در دیتابیس نیست
SystemSetting ها را در تست Mock کنید
📞 پشتیبانی
اگر سوالی داشتید که در این فایل یا مستندات 01_Documents پاسخ آن نبود، از کاربر (Kazem) بپرسید — حدس نزنید.
© 2026 VernaSoft Group. Internal use only.

View File

@ -2,8 +2,10 @@
namespace Tests\Feature\Services;
use App\Enums\ShipmentType;
use App\Models\Country;
use App\Models\ShippingRate;
use App\Models\SystemSetting;
use App\Services\PriceCalculatorService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
@ -16,8 +18,14 @@ class PriceCalculatorServiceTest extends TestCase
#[Test]
public function it_calculates_price_correctly_for_standard_package()
{
// ایجاد رکورد کشور مورد نیاز برای تست در دیتابیس
$country = Country::factory()->create([
// 1. تنظیم SystemSetting ها برای تست (جلوگیری از مقادیر پیش‌فرض بزرگ)
SystemSetting::create(['key' => 'profit_margin', 'value' => 1.0]); // بدون سود
SystemSetting::create(['key' => 'aed_to_irr', 'value' => 1.0]); // بدون تبدیل ارز
SystemSetting::create(['key' => 'vat_rate', 'value' => 0.0]); // بدون مالیات
SystemSetting::create(['key' => 'packing_cost_default', 'value' => 0]); // بدون هزینه بسته‌بندی
// 2. ایجاد کشور
$country = Country::factory()->create([
'iso_code' => 'US',
'name' => 'United States',
'export_zone_parcel' => 1,
@ -27,42 +35,74 @@ class PriceCalculatorServiceTest extends TestCase
'is_active' => true,
]);
// ایجاد نرخ‌های حمل‌ونقل مورد نیاز برای تست
ShippingRate::factory()->create([
'direction' => 'export', // اصلاح شد: تطبیق با مقادیر مجاز دیتابیس
// 3. ایجاد نرخ‌های حمل‌ونقل
ShippingRate::create([
'direction' => 'export',
'type' => 'DOC_NORMAL',
'weight' => 1.0,
'zone_1' => 20.00,
'zone_2' => 0,
'zone_3' => 0,
'zone_4' => 0,
'zone_5' => 0,
'zone_6' => 0,
'zone_7' => 0,
'zone_8' => 0,
'zone_9' => 0,
'zone_10' => 0,
]);
ShippingRate::factory()->create([
'direction' => 'export', // اصلاح شد: تطبیق با مقادیر مجاز دیتابیس
ShippingRate::create([
'direction' => 'export',
'type' => 'DOC_NORMAL',
'weight' => 3.0,
'zone_1' => 40.00,
'zone_2' => 0,
'zone_3' => 0,
'zone_4' => 0,
'zone_5' => 0,
'zone_6' => 0,
'zone_7' => 0,
'zone_8' => 0,
'zone_9' => 0,
'zone_10' => 0,
]);
// 4. اجرای سرویس
$service = app(PriceCalculatorService::class);
$data = [
'direction' => 'export',
'type' => 'DOC_NORMAL', // اصلاح شد: تطبیق با مقادیر مجاز ShipmentType Enum
'direction' => 'Outbound', // ← توجه: در سرویس به 'export' تبدیل می‌شود
'type' => 'DOC_NORMAL',
'country_iso' => 'US',
'weight' => 2.5,
'volumetric_weight' => 3.0,
'extra_service' => 10.00,
'packing_cost' => 0, // ← اضافه کردن هزینه بسته‌بندی صفر
'domestic_pickup' => 0,
'domestic_delivery' => 0,
'warehousing_cost' => 0,
];
$result = $service->calculate($data);
// 5. بررسی ساختار خروجی
$this->assertIsArray($result);
$this->assertArrayHasKey('total_cost', $result);
$this->assertArrayHasKey('currency', $result);
$this->assertArrayHasKey('total_fee', $result); // ✅ تغییر به total_fee
$this->assertArrayHasKey('base_price', $result);
// بررسی مقدار محاسبه شده
// وزن حجمی (3.0) بیشتر از وزن واقعی (2.5) است، بنابراین باید از وزن حجمی استفاده شود
// نزدیک‌ترین نرخ برای وزن 3.0، نرخ 40.00 است
// هزینه کل = نرخ حمل (40.00) + خدمات اضافی (10.00) = 50.00
$this->assertEquals(50.00, $result['total_cost']);
// 6. بررسی مقادیر
$this->assertEquals(1, $result['zone']);
$this->assertEquals(3.0, $result['chargeable_weight']);
$this->assertEquals(40.00, $result['base_price']);
// محاسبه دستی:
// base_price = 40
// net_rial = 40 × 1.0 (profit) × 1.0 (currency) = 40
// extra = 10
// subtotal = 50
// vat = 0
// total_fee = 50
$this->assertEquals(50.00, $result['total_fee']);
}
}
}

217
README.md
View File

@ -3,40 +3,68 @@
| مورد | توضیحات |
| :--- | :--- |
| **ویرایش سند** | v4.0 (Laravel 11 + Filament 3.3 + فاز ۰ کامل + فاز ۱ در حال اجرا) |
| **ویرایش سند** | v4.1 (Laravel 11 + Filament 3.3 + فاز ۰ کامل + فاز ۱ کامل + فاز ۲ در حال اجرا) |
| **تاریخ آخرین به‌روزرسانی** | 2026-08-07 |
| **توسعه‌دهنده** | VernaSoft Group — Kazem Alghasi |
| **مشتری** | شرکت حمل و نقل بین‌المللی ایف‌نکس (IFNEX) — اصفهان |
---
## 📖 درباره پروژه
سیستم مدیریت لجستیک ایف‌نکس (IFNEX) یک راه‌حل جامع برای جایگزینی فرآیندهای مبتنی بر فایل‌های اکسل در شرکت‌های حمل و نقل بین‌المللی است. این سیستم با استفاده از معماری Headless، وردپرس را برای ظاهر سایت و سئو، و لاراول را به‌عنوان قلب تپنده و موتور محاسباتی به کار می‌گیرد.
سیستم مدیریت لجستیک ایف‌نکس (IFNEX) یک راه‌حل جامع برای جایگزینی فرآیندهای مبتنی بر فایل‌های اکسل در شرکت‌های حمل و نقل بین‌المللی است. این سیستم با استفاده از معماری **Headless**، وردپرس را برای ظاهر سایت و سئو، و لاراول را به‌عنوان قلب تپنده و موتور محاسباتی به کار می‌گیرد.
### چرا این پروژه متفاوت است؟
به‌جای آنکه اپراتورها وزن حجمی را محاسبه کنند، زون‌ها را در ۴ شیت مختلف جستجو کنند و با ماشین‌حساب قیمت نهایی را حساب کنند، اکنون تمام این فرآیند در کسر از ثانیه و بدون هیچ خطای انسانی انجام می‌شود. همچنین، به دلیل تحریم‌های بین‌المللی و مسدود بودن دسترسی مستقیم به API شرکت‌های DHL/FedEx/UPS از ایران، این سیستم از طریق یک سرور VPS پل (در فاز ۳) مشکل ترکینگ خودکار را حل می‌کند.
---
## 🏗️ معماری سیستم
سیستم بر اساس الگوی Headless توسعه یافته است. فرانت‌اند (وردپرس) و بک‌اند (لاراول) کاملاً از هم جدا شده‌اند و فقط از طریق REST API با هم ارتباط دارند.
┌─────────────────┐ REST API ┌─────────────────┐
│ WordPress │ ←─────────────────────→ │ Laravel 11 │
│ (Frontend) │ پلاگین IFNEX Bridge │ (Backend) │
│ │ │ + Filament │
└─────────────────┘ └────────┬────────┘
┌────────┴────────┐
│ MySQL 8 │
└─────────────────┘
(فاز ۳) │
┌────────┴────────┐
│ VPS پل خارج │
│ (هلند/آلمان) │
└────────┬────────┘
┌────────┴────────┐
│ TrackingMore / │
│ 17track API │
└─────────────────┘
| لایه | تکنولوژی | نقش |
| :--- | :--- | :--- |
| **فرانت‌اند** | WordPress | مدیریت ظاهر، منوها، لندینگ پیج‌ها، صفحات ثابت، وبلاگ سئو |
| **بک‌اند** | Laravel 11 | API سرور، پنل ادمین (Filament 3.3)، موتور قیمت‌گذاری، صدور PDF، کیف پول |
| **فرانت‌اند** | WordPress + Elementor | مدیریت ظاهر، منوها، لندینگ پیج‌ها، صفحات ثابت، وبلاگ سئو |
| **بک‌اند** | Laravel 11 + Filament 3.3 | API سرور، پنل ادمین، موتور قیمت‌گذاری، صدور PDF، کیف پول |
| **پل ارتباطی** | پلاگین اختصاصی IFNEX Bridge | ارسال درخواست‌های کاربر از وردپرس به لاراول |
| **دیتابیس** | MySQL 8 | ذخیره‌سازی داده‌ها با پشتیبانی از JSON columns |
| **زیرساخت رهگیری** | VPS خارج از کشور (در فاز ۳) | واسط برای دسترسی به APIهای رهگیری بین‌المللی |
---
## 🗺️ نقشه راه ۴ فازی
این پروژه به چهار فاز تقسیم شده تا هم تحویل تدریجی ارزش به مشتری حفظ شود و هم ریسک دوباره‌کاری حذف گردد.
| فاز | هدف اصلی | مدت زمان | وضعیت |
| :--- | :--- | :--- | :--- |
| **فاز ۰** | بنیان داده + وب‌سایت + ترکینگ دستی + مهاجرت داده‌های تاریخی | ۴ هفته | ✅ کامل |
| **فاز ۱** | موتور قیمت‌گذاری کامل + ثبت سفارش آنلاین + تولید PDFها + استعلام قیمت | ۴-۶ هفته | 🚧 در حال اجرا |
| **فاز ۲** | حساب کاربری مشتری + کیف پول + حسابداری ساده + تخفیف حجمی | ۴ هفته | ⏳ در صف |
| **فاز ۱** | موتور قیمت‌گذاری کامل + ثبت سفارش آنلاین + تولید PDFها + استعلام قیمت | ۴-۶ هفته | ✅ کامل |
| **فاز ۲** | حساب کاربری مشتری + کیف پول + حسابداری ساده + تخفیف حجمی | ۴ هفته | 🚧 در حال اجرا |
| **فاز ۳** | VPS پل + API ترکینگ زنده + CRM + داشبورد مالی تحلیلی | ۶-۸ هفته | ⏳ در صف |
> 💡 جزئیات کامل هر فاز، اسکیمای دیتابیس، جدول زمانی و معیارهای پذیرش در سند `01_Documents/Phase0_Proposal.md` آمده است.
@ -45,56 +73,95 @@
## ✨ ویژگی‌های کلیدی
### فاز ۰ (تکمیل شده)
1. اسکیمای دیتابیس اصلاح‌شده (بر اساس فایل اکسل عملیاتی)
### فاز ۰ (تکمیل شده) ✅
1. **اسکیمای دیتابیس اصلاح‌شده** (بر اساس فایل اکسل عملیاتی)
- جدول `countries` با ۴ زون مجزا (صادرات/واردات × پارسل/داکیومنت)
- پشتیبانی از ۳ نوع سرویس: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
- جدول `shipment_carrier_mappings` برای نگاشت چند شرکت حمل به هر بارنامه
- جدول `shipment_tracking_events` برای ذخیره تایم‌لاین کامل رویدادهای هر مرسوله
2. پنل مدیریت اختصاصی (Laravel Filament)
2. **پنل مدیریت اختصاصی (Laravel Filament)**
- مدیریت ۲۳۳ کشور با زون‌های صادرات و واردات
- فرم تنظیمات سیستم: تغییر سریع ارزها و ضریب سود بدون دستکاری کد
- UX تخصصی اپراتور ترکینگ: افزودن رویداد در چند ثانیه با فیلدهای از پیش پر شده
3. ارتباطات API و فرانت‌اند
3. **ارتباطات API و فرانت‌اند**
- **API ترکینگ:** `GET /api/track/{awb_no}` با API Key + Rate Limiting + CORS
- **پلاگین IFNEX Bridge:** شورت‌کد `[ifnex_tracking_form]` برای فرم رهگیری در وردپرس
- **امنیت:** API Key + Rate Limiting + CORS whitelist + Form Request Validation
4. مهاجرت داده‌های تاریخی
4. **مهاجرت داده‌های تاریخی**
- انتقال ۳۹۵۰ رکورد تاریخی از فایل اکسل به دیتابیس جدید
- اعتبارسنجی و پاکسازی خودکار داده‌ها
### فاز ۱ (در حال اجرا)
1. موتور قیمت‌گذاری کامل (`PriceCalculatorService`)
### فاز ۱ (تکمیل شده) ✅
1. **موتور قیمت‌گذاری کامل (`PriceCalculatorService`)**
- محاسبه خودکار قیمت بر اساس وزن، زون، نوع سرویس و جهت ارسال
- پشتیبانی از ۴ زون مجزا (export/import × doc/parcel)
- اعمال ضریب سود، VAT و هزینه‌های اضافی
- **تست‌های کامل:** Feature tests و Service tests با پوشش ۱۰۰٪
2. فرم ثبت سفارش آنلاین
2. **فرم ثبت سفارش آنلاین**
- فرم عمومی برای مشتریان با ۹ ردیف کالای گمرکی
- اعتبارسنجی خودکار و محاسبه لحظه‌ای قیمت
- تولید AWB number خودکار
3. تولید PDFهای حرفه‌ای
3. **تولید PDFهای حرفه‌ای**
- **AWB:** بارنامه هوایی با لوگوی IFNEX
- **INVOICE:** فاکتور تجاری با جدول ۹ ردیف کالای گمرکی
- **LABEL:** لیبل چاپی برای بسته‌ها (پرینتر لیزری + کاغذ چسبان A4)
- تطبیق اولیه با قالب‌های اکسل + لوگوی استخراج‌شده
4. صفحه استعلام قیمت واقعی
4. **صفحه استعلام قیمت واقعی**
- رابط کاربری عمومی برای محاسبه قیمت تقریبی حمل
- نمایش قیمت پایه (درهم) و قیمت نهایی (ریال)
5. ماژول ایمپورت اکسل تعرفه‌ها
5. **ماژول ایمپورت اکسل تعرفه‌ها**
- کامند `php artisan ifnex:import:rates` با قابلیت‌های `--clear` و `--dry-run`
- پشتیبانی از شیت‌های Export Rate، Import Rate و DocEco
- تبدیل خودکار واحد قیمت (ریال → درهم) برای شیت‌های DocNor/DocEco
### فاز ۲ (در حال اجرا) 🚧
1. **سیستم کیف پول (Wallet)**
- API شارژ اعتبار
- API بررسی موجودی
- API تاریخچه تراکنش‌ها
- **وضعیت:** Controllers و APIها ساخته شده، نیاز به اتصال درگاه پرداخت
2. **سیستم تخفیف (Discount Codes)**
- API لیست کدهای تخفیف فعال
- API اعتبارسنجی کد تخفیف
- پشتیبانی از تخفیف درصدی و ثابت
- **وضعیت:** کامل شده
3. **به‌روزرسانی خودکار نرخ ارز**
- Artisan Command برای به‌روزرسانی روزانه
- پشتیبانی از ECB و FreeCurrencyAPI
- **وضعیت:** کامل شده
4. **کارهای باقی‌مانده فاز ۲**
- [ ] اتصال درگاه پرداخت (زرین‌پال)
- [ ] شارژ آنلاین کامل با درگاه پرداخت
- [ ] پنل مالی در Filament (داشبورد سود/زیان)
- [ ] فرمول محاسبه قیمت رقبا
### فاز ۳ (در صف) ⏳
- [ ] راه‌اندازی VPS پل خارج (هلند/آلمان)
- [ ] اتصال به TrackingMore/17track API
- [ ] سیستم وب‌هوک
- [ ] مپ کردن کدهای رهگیری
- [ ] داشبورد مالی
- [ ] فرم نظرسنجی و رضایت مشتری
- [ ] پنل کاربری مشتریان در وردپرس
---
## 📁 ساختار پروژه
```text
IFNEX-Logistics/
├── 01_Documents/ # مستندات فنی پروژه
@ -102,8 +169,8 @@ IFNEX-Logistics/
│ ├── IFNEX_Phase0_Checklist.md # ⭐ چک‌لیست دقیق فاز ۰
│ ├── Phase0_Proposal.md # ⭐ سند پیشنهاد فاز ۰ (نقشه راه جدید)
│ ├── EXCEL_ANALYSIS.md # ⭐ تحلیل فایل‌های اکسل
│ ├── PRD_v2.md # سند نیازمندی‌ها (نسخه قدیمی — به‌زودی بازنویسی)
│ └── Project_Roadmap.md # نقشه راه و چک‌لیست (به‌زودی به‌روزرسانی)
│ ├── PRD_v2.md # سند نیازمندی‌ها (نسخه قدیمی — بایگانی شده)
│ └── Project_Roadmap.md # نقشه راه (نسخه قدیمی — بایگانی شده)
├── 02_Design/ # فایل‌های UI/UX و فیگما
│ └── Assets/ # لوگوها، آیکون‌ها
@ -112,103 +179,31 @@ IFNEX-Logistics/
│ └── wp-content/plugins/
│ └── ifnex-bridge/ # پلاگین اختصاصی ارتباط با لاراول
└── 04_Laravel/ # هسته مرکزی سیستم (بک‌اند)
├── app/
│ ├── Models/ # Country, Shipment, ShipmentItem, ShipmentRate, ...
│ ├── Enums/ # ShipmentDirection, ShipmentType, ShipmentStatus, ...
│ ├── Services/ # PriceCalculatorService, PdfService, ...
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Api/ # PricingController, TrackController
│ │ │ ├── OrderController.php # فرم ثبت سفارش آنلاین
│ │ │ ├── PricingPageController.php # صفحه استعلام قیمت
│ │ │ └── ShipmentPdfController.php # تولید PDF
│ │ ├── Middleware/ # ApiKeyMiddleware
│ │ └── Requests/ # Form Request Validation classes
│ ├── Imports/ # ShippingRatesImport
│ ├── Console/Commands/ # ImportShippingRates
│ └── Filament/ # پنل مدیریت ادمین
│ ├── Resources/ # Country, Shipment, ShippingRate, ShipmentItem
│ └── Pages/ # Settings, Dashboard, Custom pages
├── database/
│ ├── migrations/ # ۷ migration فاز ۰
│ └── seeders/ # CountriesSeeder, SystemSettingSeeder
├── routes/
│ ├── web.php # روت‌های عمومی: /order, /pricing, PDF download
│ └── api.php # API: /api/v1/calculate, /api/v1/track/{awb}
├── resources/views/
│ ├── layouts/app.blade.php # لایاوت عمومی صفحات
│ ├── orders/ # فرم ثبت سفارش + صفحه موفقیت
│ ├── pricing/ # صفحه استعلام قیمت
│ └── pdfs/ # قالب‌های PDF: AWB, INVOICE, LABEL
├── config/
│ ├── ifnex.php
│ └── cors.php
└── bootstrap/
└── app.php
├── 04_Laravel/ # هسته مرکزی سیستم (بک‌اند)
│ └── README.md # راهنمای نصب و استفاده از لاراول
└── README.md # این فایل — نمای کلی پروژه
💡 برای جزئیات فنی، نصب و راه‌اندازی، فایل 04_Laravel/README.md را مطالعه کنید.
🚀 راه‌اندازی و اجرا (Localhost)
پیش‌نیازها
XAMPP یا مشابه (PHP 8.2+ و MySQL 8+)
Composer
Node.js و NPM (برای ابزارهای وردپرس/المنتور)
مراحل نصب (بخش لاراول)
# ۱. کلون مخزن و وارد شدن به پوشه لاراول
git clone https://www.git.vernahost.ir/gitmodir110/ifnex.git
cd ifnex/04_Laravel
# ۲. نصب پکیج‌ها
composer install
# ۳. کپی فایل محیط و تنظیم دیتابیس
cp .env.example .env
# فایل .env را ویرایش کرده و اطلاعات دیتابیس XAMPP را وارد کنید
# ۴. تولید کلید اپلیکیشن
php artisan key:generate
# ۵. اجرای Migration ها
php artisan migrate --force
# ۶. درج داده‌های اولیه (کشورها و نرخ ارز اولیه)
php artisan db:seed --force
# ۷. اجرای سرور توسعه
php artisan serve
مراحل نصب (بخش وردپرس)
۱. پوشه‌ی 03_WordPress را در htdocs یا مسیر هاست وردپرس قرار دهید.
۲. وردپرس را به‌صورت معمول نصب کنید.
۳. پلاگین ifnex-bridge را از مسیر wp-content/plugins/ifnex-bridge فعال کنید.
۴. در تنظیمات پلاگین، URL لاراول و API Key را وارد کنید.
۵. شورت‌کد [ifnex_tracking_form] را در صفحه‌ی «رهگیری مرسوله» قرار دهید.
⚠️ نکات امنیتی و تولید (Production)
هرگز فایل .env را در مخزن کد (Git) کامیت نکنید (در .gitignore تأیید شده).
در محیط تولید، APP_DEBUG=false را در .env تنظیم کنید.
برای محیط تولید، پیکربندی وب‌سرور (Nginx/Apache) و تنظیمات CORS برای ارتباط WP و Laravel ضروری است.
برای API ترکینگ خودکار (فاز ۳)، سرور VPS پل در خارج از کشور راه‌اندازی شود — راهنمای کامل در سند فاز ۳.
📚 مستندات بیشتر
برای مطالعه دقیق منطق‌های سیستم، حتماً فایل‌های داخل پوشه 01_Documents را مطالعه کنید:
فایل محتوا
STATUS.md ⭐ وضعیت فعلی، گزارش پیشرفت، خط قرمزها و راهنمایی‌های توسعه بعدی
IFNEX_Phase0_Checklist.md ⭐ چک‌لیست دقیق تمام کارهای فاز ۰ با وضعیت هر آیتم
Phase0_Proposal.md ⭐ سند پیشنهاد فاز ۰ — شامل اسکیمای دیتابیس، جدول زمانی، ریسک‌ها، معیارهای پذیرش
EXCEL_ANALYSIS.md ⭐ تحلیل کامل فایل‌های اکسل عملیاتی و ساختار داده‌های تاریخی
PRD_v2.md سند نیازمندی‌ها (نسخه قدیمی — برخی بخش‌های آن در سند فاز ۰ بازنویسی شده)
Project_Roadmap.md چک‌لیست کارهای انجام‌شده و در دست اقدام (به‌زودی به‌روزرسانی می‌شود)
فایل
محتوا
STATUS.md
⭐ وضعیت فعلی، گزارش پیشرفت، خط قرمزها و راهنمایی‌های توسعه بعدی
IFNEX_Phase0_Checklist.md
⭐ چک‌لیست دقیق تمام کارهای فاز ۰ با وضعیت هر آیتم
Phase0_Proposal.md
⭐ سند پیشنهاد فاز ۰ — شامل اسکیمای دیتابیس، جدول زمانی، ریسک‌ها، معیارهای پذیرش
EXCEL_ANALYSIS.md
⭐ تحلیل کامل فایل‌های اکسل عملیاتی و ساختار داده‌های تاریخی
PRD_v2.md
سند نیازمندی‌ها (نسخه قدیمی — بایگانی شده، فقط برای مرجع تاریخی)
Project_Roadmap.md
نقشه راه قدیمی (۳ فازی — بایگانی شده، فقط برای مرجع تاریخی)
🔐 امنیت و گزارش مشکلات
اگر آسیب‌پذیری امنیتی کشف کردید، لطفاً مستقیماً به kazem@vernasoft.group (یا ایمیل جایگزین تعیین‌شده) اطلاع دهید و آن را در Issue عمومی مخزن قرار ندهید.
📜 لایسنس
© 2026 VernaSoft Group (Kazem Alghasi). All rights reserved.
این پروژه اختصاصی شرکت IFNEX است و کپی یا استفاده‌ی غیرمجاز از آن ممنوع است.
این پروژه اختصاصی شرکت IFNEX است و کپی یا استفاده‌ی غیرمجاز از آن ممنوع است.