ifnex/01_Documents/IFNEX_Phase0_Checklist.md
Kazem Alghasi b35e933475 Phase 3.5 — Core Features Complete:
 Multi-Package Support (3.5.1)
- Add shipment_packages migration and ShipmentPackage model
- Add packages() relation to Shipment model
- Update CustomerOrderController to accept packages[] array
- Auto-calculate volumetric weight from dimensions (L*W*H/5000)
- Repeater UI for adding/removing packages
- Real-time summary of total weights

 Invoice Form for PARCEL (3.5.2)
- New step in order form (only for PARCEL type)
- Customs items: description, HS Code, quantity, unit price (USD)
- Auto-calculate total per item and invoice total
- Maximum 9 items
- 5-step order form structure

 PDF Redesign (3.5.4)
- Install picqer/php-barcode-generator
- Redesign AWB with barcode, From/To, Value, Service, Type
- Redesign Invoice with 9-row table, legal declaration
- Redesign Label to A5 landscape with large barcode
- DOC/PARCEL condition (only PARCEL has invoice)
- Barcode as base64 embed

 Technical Fixes (3.5.5)
- Add Enum casts to Shipment model (status, direction, type)
- Fix deselectAfterCompletion -> deselectRecordsAfterCompletion
- Migration for shipment_items (row_number, unit_price)
- Migration to make name nullable
- Fix Enum method names (DocNormal/DocEconomy)

 Tracking Test (3.5.6)
- Update TrackController with status_label
- Redesign tracking page with beautiful timeline
- Status box with colored badge
- Timeline with date, description, location, source
- Carrier mappings section

Documentation:
- Update README, Laravel_README, Roadmap, Checklist
- Add IFNEX_Meeting_Summary.md for client presentation
- Update IFNEX_I18N_Strategy.md (moved to deploy phase)

Phase 3.5 — 90% complete (i18n moved to deploy phase)"
2026-08-29 08:35:34 +03:30

421 lines
20 KiB
Markdown
Raw Permalink 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
> **مرجع:** Phase0_Proposal.docx + EXCEL_ANALYSIS.md + STATUS.md
> **تاریخ:** August 2026
> **وضعیت:** فاز ۰ تکمیل شده + فاز ۱/۲ بخشی انجام شده
> **توسعه‌دهنده:** VernaSoft Group — Kazem Alghasi
> **آخرین بروزرسانی:** 2026-08-29
---
## وضعیت کلی
| فاز | وضعیت | درصد |
|------|-------|------|
| فاز ۰ (پایه) | ✅ تکمیل شده | 100% |
| فاز ۱ (پنل مشتری) | ✅ تکمیل شده | 100% |
| فاز ۲ (پرداخت و کیف پول) | ✅ تکمیل شده | 100% |
| فاز ۳ (یکپارچه‌سازی) | ✅ تکمیل شده | 100% |
| **فاز ۳.۵ (اصلاحات اساسی)** | ✅ تکمیل شده (۹۰%) | 90% |
| فاز ۴ (سیستم نمایندگی) | 📋 مطالعاتی | 0% |
| فاز ۵ (تجاری‌سازی) | 📋 مطالعاتی | 0% |
> **نکته:** فاز ۳.۵ شامل Multi-Package، فرم Invoice، بازطراحی PDFها و تست ترکینگ است. تنها مورد باقیمانده (پشتیبانی چندزبانه i18n) به زمان دیپلوی منتقل شد.
---
## بخش ۱: اصلاح اسکیمای دیتابیس
### 1.1 بازنویسی Migration `countries`
- [x] حذف `export_zone` و `import_zone` (۲ زون قدیمی)
- [x] اضافه کردن `export_zone_parcel` (TINYINT 1-10)
- [x] اضافه کردن `export_zone_doc` (TINYINT 1-10)
- [x] اضافه کردن `import_zone_parcel` (TINYINT 1-10)
- [x] اضافه کردن `import_zone_doc` (TINYINT 1-10)
- [x] اضافه کردن `iso_code` (CHAR(2) UNIQUE)
- [x] اضافه کردن `is_active` (BOOLEAN default true)
- [x] اضافه کردن `calling_code` (VARCHAR 10 NULL) — فاز ۲
- [x] اصلاح `name` — بدون کد ISO در پرانتز
### 1.2 بازنویسی Migration `shipments`
- [x] حذف `forwarder_track_id` (جایگزین با جدول مجزا)
- [x] تغییر `type` از STRING به ENUM: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
- [x] تغییر `direction` از STRING به ENUM: `import`, `export`
- [x] تغییر `status` از STRING به ENUM (وضعیت‌های استاندارد)
- [x] اضافه کردن `from_country_id` (FK → countries.id)
- [x] اضافه کردن `to_country_id` (FK → countries.id)
- [x] اضافه کردن فیلدهای مالی: `domestic_pickup`, `domestic_delivery`, `warehousing_cost`, `vat_amount`
- [x] تبدیل فیلدهای غیرضروری به `nullable`
- [x] اضافه کردن `state_notes` (فیلد وضعیت و یادداشت مشتری) — فاز ۲
- [x] اضافه کردن `cod_amount` (مبلغ COD) — فاز ۲
- [x] رابطه `packages()` و `statusHistories()` — فاز ۲
### 1.3 ایجاد Migration `shipment_carrier_mappings`
- [x] تمام فیلدها طبق طرح اولیه
- [x] RelationManager در Filament با CRUD کامل
### 1.4 ایجاد Migration `shipment_tracking_events`
- [x] تمام فیلدها طبق طرح اولیه
- [x] اضافه کردن فیلد `source` (manual/api/system) — فاز ۲
- [x] RelationManager در Filament با CRUD کامل
### 1.5 بازنویسی Migration `system_settings`
- [x] تغییر به ساختار key-value
### 1.6 بازنویسی Migration `users`
- [x] اضافه کردن `phone`, `role`, `is_active`
### 1.7 اصلاح Migration `shipping_rates`
- [x] تغییر `type` و `direction` به ENUM
### 1.8 جداول جدید فاز ۱
- [x] `currencies` — جدول ارزها (code, name, symbol, rate_to_rial, rate_to_aed, is_active)
- [x] `shipment_packages` — بسته‌های چندگانه هر مرسوله (package_no, weight, dimensions)
- [x] `shipment_status_histories` — تاریخچه تغییرات وضعیت (from_status, to_status, reason, changed_by)
- [x] `wallets` — کیف پول کاربران
- [x] `wallet_transactions` — تراکنش‌های کیف پول
- [x] `notifications` — نوتیفیکیشن‌های دیتابیس (Laravel default)
---
## بخش ۲: Model ها
- [x] `Country.php` — با ۴ زون + iso_code + calling_code + is_active
- [x] `Shipment.php` — با enum casts + روابط کامل + packages + statusHistories
- [x] `ShipmentCarrierMapping.php` — با relation + enum casts
- [x] `ShipmentTrackingEvent.php` — با relation + enum casts + source
- [x] `ShipmentItem.php` — با relation
- [x] `ShipmentPackage.php` — با belongsTo(Shipment) — فاز ۲
- [x] `ShipmentStatusHistory.php` — با booted auto-fill changed_by — فاز ۲
- [x] `ShippingRate.php` — با enum casts
- [x] `SystemSetting.php` — با get/set متدها
- [x] `User.php` — با role + is_active + wallet relation
- [x] `Currency.php` — با fillable + casts — فاز ۲
- [x] `Wallet.php` — فاز ۲
- [x] `WalletTransaction.php` — فاز ۲
---
## بخش ۳: Seeders
- [x] `CountriesTableSeeder.php` — با ۴ زون مجزا
- [x] `SystemSettingSeeder.php` — با ساختار key-value
- [x] `DatabaseSeeder.php` — با User اولیه super_admin
---
## بخش ۴: API و Controller ها
### ۴.۱ API ترکینگ
- [x] `GET /api/v1/track/{awb_no}` — تایم‌لاین کامل
- [x] `TrackController.php` — با timeline + carrier mappings
### ۴.۲ API قیمت‌گذاری
- [x] `POST /api/v1/calculate` — با ۳ نوع سرویس + VAT + هزینه‌های جانبی
- [x] `PricingController.php` — با API Key + Rate Limiting
### ۴.۳ API احراز هویت
- [x] `POST /api/v1/auth/login` — ورود با email + password
- [x] `POST /api/v1/auth/logout` — خروج ( Sanctum)
- [x] `POST /api/v1/bridge/login` — Bridge Auth (WordPress → Laravel)
### ۴.۴ API پنل مشتری (فاز ۱/۲)
- [x] `GET /api/v1/customer/profile` — پروفایل و آمار
- [x] `GET /api/v1/customer/countries` — لیست کشورها
- [x] `GET /api/v1/customer/orders` — لیست سفارشات
- [x] `POST /api/v1/customer/orders` — ثبت سفارش
- [x] `GET /api/v1/customer/orders/{shipment}` — جزئیات سفارش
- [x] `POST /api/v1/customer/orders/{shipment}/cancel` — لغو سفارش
- [x] `POST /api/v1/customer/orders/{shipment}/pay-wallet` — پرداخت از کیف پول
- [x] `POST /api/v1/customer/orders/{shipment}/pay-gateway` — پرداخت از درگاه
- [x] `GET /api/v1/customer/notifications` — نوتیفیکیشن‌ها — فاز ۲
- [x] `POST /api/v1/customer/notifications/{id}/read` — خواندن نوتیفیکیشن — فاز ۲
### ۴.۵ API کیف پول (فاز ۲)
- [x] `GET /api/v1/wallet/balance` — موجودی
- [x] `GET /api/v1/wallet/transactions` — تراکنش‌ها
### ۴.۶ API پرداخت (فاز ۲)
- [x] `POST /api/v1/payment/redirect` — انتقال به درگاه
- [x] `GET /api/v1/payment/check/{transaction}` — بررسی وضعیت
- [x] Mock Gateway (شبیه‌سازی درگاه پرداخت)
---
## بخش ۵: Filament Admin Panel
### ۵.۱ منابع (Resources)
- [x] `CountryResource` — با ۴ زون + iso_code + calling_code + is_active
- [x] `ShipmentResource` — با ستون‌های جدید + CSV export +Packages Repeater + changeStatus bulkAction
- [x] `ShippingRateResource` — با ۳ نوع سرویس
- [x] `CurrencyResource` — CRUD ارزها — فاز ۲
### ۵.۲ RelationManagers
- [x] `TrackingEventsRelationManager` — با فیلد `source` — فاز ۲
- [x] `CarrierMappingsRelationManager` — با CRUD کامل
- [x] `ItemsRelationManager` — اقلام مرسوله
### ۵.۳ صفحات سفارشی
- [x] `SettingsPage` — تنظیمات key-value
- [x] `PriceTestPage` — تست قیمت‌گذاری
- [x] `ImportRatesPage` — آپلود اکسل نرخ‌ها + دانلود template — فاز ۲
### ۵.۴ PDF
- [x] `PdfService` — با loadMissing (packages, fromCountry, toCountry, items)
- [x] `awb.blade.php` — با asset() برای تصاویر + جدول بسته‌ها
- [x] `label.blade.php` — با asset() برای تصاویر
- [x] `invoice.blade.php` — فاکتور
### ۵.۵ نوتیفیکیشن ادمین
- [x] `ShipmentUpdatedNotification` — با لیست فیلدهای تغییر کرده
- [x] `afterSave` hook در ShipmentResource — ارسال نوتیفیکیشن
---
## بخش ۶: Services
- [x] `PriceCalculatorService.php` — با ۴ زون + ۳ نوع + VAT + هزینه‌های جانبی
- [x] `TrackingService.php` — تایم‌لاین + افزودن رویداد
- [x] `PdfService.php` — تولید PDF (AWB, Label, Invoice)
- [x] `OrderPaymentService.php` — پرداخت از کیف پول و درگاه — فاز ۲
---
## بخش ۷: Import و مهاجرت داده
- [x] `OldShipmentsImport.php` — مهاجرت ۳۹۵۰ رکورد تاریخی
- [x] `ShippingRatesImport.php` — ایمپورت نرخ‌ها (بدون SystemSetting)
- [x] `ShippingRatesTemplateExport.php` — دانلود template اکسل (FromArray)
---
## بخش ۸: پلاگین وردپرس IFNEX Bridge
### ۸.۱ ساختار پلاگین
- [x] `ifnex-bridge.php` — فایل اصلی پلاگین
- [x] `includes/api-client.php` — ارتباط با API (قدیمی)
- [x] `includes/user-bridge.php` — Bridge Auth + API احراز‌شده
- [x] `includes/shortcodes.php` — تمام شورت‌کدها
- [x] `includes/tracking-form.php` — فرم رهگیری (قدیمی)
- [x] `assets/css/ifnex-orders.css` — استایل کامل (v1.6.0)
- [x] `assets/css/ifnex-bridge.css` — استایل ترکینگ
- [x] `assets/js/ifnex-order-form.js` — فرم سفارش + هشدار آدرس انگلیسی
### ۸.۲ شورت‌کدها
- [x] `[ifnex_tracking_form]` — فرم رهگیری مرسوله
- [x] `[ifnex_tracking_status]` — نمایش مستقیم وضعیت
- [x] `[ifnex_wallet_balance]` — موجودی کیف پول
- [x] `[ifnex_transactions]` — تاریخچه تراکنش‌ها (با استایل جدید)
- [x] `[ifnex_user_profile]` — پروفایل مشتری
- [x] `[ifnex_orders_list]` — لیست سفارشات
- [x] `[ifnex_order_form]` — فرم ثبت سفارش چند مرحله‌ای
- [x] `[ifnex_order_payment]` — صفحه پرداخت
- [x] `[ifnex_order_detail]` — جزئیات سفارش
- [x] `[ifnex_customer_dashboard]` — پنل جامع مشتری (داشبورد + سفارشات + کیف پول + تراکنش‌ها + اعلان‌ها + رهگیری + پروفایل)
### ۸.۳ استایل تراکنش‌ها — فاز ۲
- [x] استایل کامل برای `.ifnex-transactions-*` — مطابق دشبورد مدرن
### ۸.۴ هشدار آدرس انگلیسی — فاز ۲
- [x] تشخیص متن انگلیسی در آدرس (sender + receiver)
- [x] نمایش هشدار اسلایدی با انیمیشن
### ۸.۵ نوتیفیکیشن پنل کاربری — فاز ۲
- [x] تب اعلان‌ها در دشبورد
- [x] بج تعداد خوانده‌نشده در سایدبار
- [x] لیست نوتیفیکیشن‌ها با استایل مدرن
- [x] لینک به سفارش مرتبط
- [x] API لاراول برای دریافت/خواندن نوتیفیکیشن
---
## بخش ۹: وب‌سایت وردپرس
### ۹.۱ قالب IFNEX
- [x] نصب و تنظیم قالب سفارشی
- [x] front-page.php — لندینگ پیج
- [x] header.php / footer.php
- [x] template-parts (hero, services, how-it-works, stats, testimonials, cta)
- [x] template-login.php — صفحه ورود
### ۹.۲ صفحات
- [x] لندینگ پیج
- [x] صفحه رهگیری
- [x] صفحه استعلام قیمت (PricingPageController)
---
## بخش ۱۰: موارد اخیر فاز ۳ (۱۷ مورد کارفرما)
- [x] ۱. رفع `openUrlInNewTab()` روی اکشن‌های PDF در ViewShipment
- [x] ۲. رفع `ShippingRatesImport` (حذف SystemSetting + تبدیل ارز)
- [x] ۳. رفع تصاویر PDF (asset() بجای public_path())
- [x] ۴. رفع label.blade.php تصاویر
- [x] ۵. ستون‌های جدید ShipmentResource (fromCountry, toCountry, route, phones, cod_amount)
- [x] ۶. حذف reason_for_export تکراری
- [x] ۷. رفع CSV label ($status?->label())
- [x] ۸. Packages Repeater (collapsible)
- [x] ۹. changeStatus به عنوان bulkAction
- [x] ۱۰. afterSave hook برای ShipmentUpdatedNotification
- [x] ۱۱. Currency CRUD (Resource + Pages + Migration + Model)
- [x] ۱۲. RelationManagers (Create/Edit/Delete) + فیلد source
- [x] ۱۳. سیستم نوتیفیکیشن دیتابیس
- [x] ۱۴. Multi-package (migration + model + PDF)
- [x] ۱۵. ImportRatesPage (دکمه‌ها + دانلود template + ایمپورت)
- [x] ۱۶. استایل تراکنش‌های وردپرس
- [x] ۱۷. هشدار انگلیسی بودن آدرس
- [x] ۱۸. نوتیفیکیشن پنل کاربری وردپرس (تب + API + CSS)
- [~] ۱۹. سیستم نمایندگی (طرح مطالعاتی آماده — به فاز ۴ منتقل شد)
---
## بخش ۱۰.۱: تست لوکال و اصلاحات نهایی فاز ۳
- [x] اضافه شدن متدهای `isPaid()` و `canBeCancelledByCustomer()` به Enum ShipmentStatus
- [x] اضافه شدن ستون `calling_code` به جدول countries (migration جدید)
- [x] آپدیت ۱۹۲ کشور با پیش‌شماره استاندارد ISO 3166-1
- [x] اضافه شدن `IFNEX_BRIDGE_API_KEY` به `.env` و `config/ifnex.php`
- [x] اصلاح میدلور `auth:sanctum` در `bootstrap/app.php` برای بازگرداندن JSON 401
- [x] اضافه شدن شورت‌کد `[ifnex_wallet_charge]` برای شارژ کیف پول
- [x] اضافه شدن AJAX handler `ifnex_wallet_charge`
- [x] رفع مشکل `use App\Models\WalletTransaction` در CustomerOrderController
- [x] هشدار هوشمند زبان فارسی/انگلیسی برای نام، شهر و آدرس
- [x] پیش‌شماره تلفن خودکار بر اساس کشور انتخابی
- [x] اعتبارسنجی تلفن (فقط اعداد، +، فاصله)
- [x] اصلاح ارور "[object Object]" در پاسخ‌های AJAX
- [x] اصلاح `ifnex_enqueue_order_assets` برای لود صحیح JS
- [x] اصلاح `.env` و `ZARINPAL_FRONTEND_SUCCESS_URL` / `FAILURE_URL`
- [x] تست موفق تمام جریان‌ها: لاگین → سفارش → پرداخت → شارژ کیف پول → نوتیفیکیشن
### بازطراحی PDFها:
- [x] نصب `picqer/php-barcode-generator`
- [x] بازطراحی AWB با بارکد، From/To کامل، Value، Service، Type
- [x] بازطراحی Invoice با جدول ۹ ردیفه، اعلان قانونی، بارکد پایین
- [x] بازطراحی Label با اندازه ۱۰۰×۱۵۰mm و بارکد بزرگ
- [x] اضافه‌شدن شرط DOC/PARCEL برای Invoice (فقط PARCEL فاکتور داره)
---
## بخش ۱۱: فاز ۳.۵ — اصلاحات اساسی ✅
> ✅ **این فاز قبل از ارائه نهایی به کارفرما تکمیل شد.**
### ۱۱.۱ — Multi-Package در فرم سفارش مشتری ✅
- [x] ساخت migration `shipment_packages`
- [x] ساخت مدل `ShipmentPackage` با `calculateVolumetricWeight()`
- [x] اضافه‌شدن رابطه `packages()` به مدل Shipment
- [x] اصلاح API `store` در CustomerOrderController — پذیرش `packages[]`
- [x] محاسبه خودکار وزن حجمی از ابعاد (L×W×H/5000)
- [x] اصلاح HTML فرم — اضافه‌شدن Repeater بسته‌ها در Step 1
- [x] اصلاح `ifnex-order-form.js` — منطق Multi-Package
- [x] اعتبارسنجی اجباری وزن واقعی و ابعاد
- [x] خلاصه وزن‌ها (مجموع واقعی، حجمی، قابل محاسبه)
- [x] نرمال‌سازی ابعاد به فرمت `*` (مثلاً `5*6*9`)
- [x] تست با چند بسته
### ۱۱.۲ — فرم Invoice برای محموله‌های PARCEL ✅
- [x] اضافه‌شدن مرحله جدید به فرم سفارش (مرحله ۳)
- [x] نمایش این مرحله فقط وقتی نوع = PARCEL
- [x] فیلدهای هر آیتم: شرح کالا، HS Code، تعداد، قیمت واحد
- [x] امکان افزودن چندین آیتم (تا ۹ ردیف)
- [x] محاسبه خودکار Total و نمایش مجموع
- [x] ارسال `items[]` به API
- [x] ایجاد خودکار `ShipmentItem` هنگام ثبت سفارش
- [x] ساختار ۵ مرحله‌ای فرم
- [x] تست با چند آیتم
### ۱۱.۳ — پشتیبانی چندزبانه (i18n) 📋
**وضعیت:** به زمان دیپلوی منتقل شد
- [ ] استخراج تمام رشته‌های متنی به فایل‌های ترجمه (زمان دیپلوی)
- [ ] استفاده از `__()` و `_e()` در وردپرس (زمان دیپلوی)
- [ ] استفاده از `wp_localize_script` برای ارسال ترجمه‌ها به JS (زمان دیپلوی)
- [ ] افزودن فایل‌های `.po/.mo` برای زبان‌های فارسی و انگلیسی (زمان دیپلوی)
- [ ] اصلاح CSS برای پشتیبانی RTL/LTR (زمان دیپلوی)
> سند کامل استراتژی در `IFNEX_I18N_Strategy.md` موجود است.
### ۱۱.۴ — بازطراحی PDFها
- [x] نصب `picqer/php-barcode-generator`
- [x] بازطراحی AWB با بارکد، From/To کامل، Value، Service، Type
- [x] بازطراحی Invoice با جدول ۹ ردیفه، اعلان قانونی، بارکد پایین
- [x] بازطراحی Label با اندازه A5 افقی و بارکد بزرگ
- [x] اضافه‌شدن شرط DOC/PARCEL برای Invoice
- [x] بارکد به‌صورت base64 embed
- [x] تست تولید PDF با بارکد
### ۱۱.۵ — اصلاحات فنی ✅
- [x] اضافه‌شدن Enum casts به مدل Shipment (status, direction, type)
- [x] اصلاح متد `deselectAfterCompletion``deselectRecordsAfterCompletion`
- [x] Migration برای ستون‌های `row_number` و `unit_price` در shipment_items
- [x] Migration برای nullable کردن `name`
- [x] اصلاح متدهای Enum (DocNormal/DocEconomy)
### ۱۱.۶ — تست ترکینگ ✅
- [x] اصلاح API لاراول (TrackController) با `status_label`
- [x] بازطراحی صفحه رهگیری وردپرس با timeline زیبا
- [x] باکس وضعیت با badge رنگی بر اساس status
- [x] grid اطلاعات کامل (۸ فیلد)
- [x] timeline با تاریخ، توضیحات، لوکیشن و منبع
- [x] بخش شرکت‌های حمل
- [x] تست موفق با محموله چندمرحله‌ای
### ۱۱.۷ — تست و نهایی‌سازی ✅
- [x] تست تولید PDF با بارکد
- [x] تست Multi-Package
- [x] تست Invoice Form برای PARCEL
- [x] تست ترکینگ چندمرحله‌ای
- [x] تست پنل ادمین (DashboardInfoWidget)
- [ ] دیپلوی نهایی روی سرور (بعد از جلسه)
---
## بخش ۱۲: فاز ۵ — تجاری‌سازی 📋
> طرح مطالعاتی — مدل پولی چندلایه‌ای
### پلن‌های پیشنهادی:
- [ ] **IFNEX Starter** — پلن پایه پرداخت‌شده
- [ ] **IFNEX Business** — پلن متوسط
- [ ] **IFNEX Enterprise** — پلن کامل
### فیچرهای Premium:
- [ ] فرم‌ساز Drag & Drop
- [ ] White-label branding
- [ ] API Gateway برای توسعه‌دهندگان
- [ ] اکسپورت اکسل کامل (تمام فیلدها)
- [ ] API ترکینگ زنده (TrackingMore/17track)
- [ ] پلاگین SMS
- [ ] گزارش‌های مالی پیشرفته
- [x] IFNEX_Phase0_Checklist.md (همین فایل)
- [x] IFNEX_File_Map.md — نقشه فایل‌های پروژه
- [x] IFNEX_Roadmap.md — نقشه راه جامع ۴ فازی
- [ ] راهنمای اپراتور (Operator Manual) با اسکرین‌شات
- [ ] مستندات API (OpenAPI/Swagger)
---
## خط قرمزها — هرگز این کارها را نکن
- هرگز جدول countries را به ۲ زون برگردانی
- هرگز فقط ۲ نوع سرویس پیاده کن (۳ نوع الزامی است)
- هرگز ترکینگ را در وردپرس پیاده کن
- هرگز فیلدهای مالی (VAT, Packing, Warehousing) را حذف کن
- هرگز از رنگ/لوگو DHL کپی کن
- هرگز PDF را به فارسی بسازی
- هرگز تاریخ را شمسی در DB ذخیره کنی
- هرگز از CORS `*` استفاده کنی
- هرگز فایل .env را در Git کامیت کنی
---
> 2026 VernaSoft Group. Internal use only.