# ✅ چک‌لیست فاز ۰ — IFNEX Phase 0 Checklist > **مرجع:** Phase0_Proposal.docx + EXCEL_ANALYSIS.md + STATUS.md > **تاریخ:** August 2026 > **وضعیت:** در دست اقدام > **توسعه‌دهنده:** VernaSoft Group — Kazem Alghasi --- ## 🔴 بخش ۱: اصلاح اسکیمای دیتابیس (حیاتی — قبل از هر چیز) ### 1.1 بازنویسی Migration `countries` - [ ] حذف `export_zone` و `import_zone` (۲ زون قدیمی) - [ ] اضافه کردن `export_zone_parcel` (TINYINT 1-10) - [ ] اضافه کردن `export_zone_doc` (TINYINT 1-10) - [ ] اضافه کردن `import_zone_parcel` (TINYINT 1-10) - [ ] اضافه کردن `import_zone_doc` (TINYINT 1-10) - [ ] اضافه کردن `iso_code` (CHAR(2) UNIQUE) - [ ] اضافه کردن `is_active` (BOOLEAN default true) - [ ] اصلاح `name` — بدون کد ISO در پرانتز (مثلاً `Afghanistan` نه `Afghanistan (AF)`) ### 1.2 بازنویسی Migration `shipments` - [ ] حذف `forwarder_track_id` (جایگزین با جدول مجزا) - [ ] تغییر `type` از STRING به ENUM: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL` - [ ] تغییر `direction` از STRING به ENUM: `import`, `export` (نه Outbound/Inbound) - [ ] تغییر `status` از STRING به ENUM (وضعیت‌های استاندارد) - [ ] اضافه کردن `from_country_id` (FK → countries.id) - [ ] اضافه کردن `to_country_id` (FK → countries.id) - [ ] اضافه کردن فیلدهای مالی غایب: - [ ] `domestic_pickup` (DECIMAL 12,2 default 0) - [ ] `domestic_delivery` (DECIMAL 12,2 default 0) - [ ] `warehousing_cost` (DECIMAL 12,2 default 0) - [ ] `vat_amount` (DECIMAL 12,2 default 0) - [ ] تبدیل فیلدهای غیرضروری فاز ۰ به `nullable`: - [ ] `weight`, `volumetric_weight`, `chargeable_weight`, `dimensions` - [ ] `reason_for_export`, `forwarder` - [ ] تمام فیلدهای مالی (shipping_price, extra_service, packing_cost, discount, total_fee, net_dirham, net_rial) - [ ] sender_company, sender_id_number, receiver_company, receiver_id_number - [ ] حذف `user_id` از فاز ۰ (مشتریان در فاز ۲ اضافه می‌شوند) یا nullable کردن ### 1.3 ایجاد Migration `shipment_carrier_mappings` (جدول جدید) - [ ] `id` (BIGINT PK) - [ ] `shipment_id` (FK → shipments.id, cascadeOnDelete) - [ ] `carrier_code` (ENUM: DHL, FEDEX, UPS, ARAMEX, NAGHEL, EMX, APSITEX, IMPEX, OTHER) - [ ] `carrier_tracking_number` (VARCHAR 50) - [ ] `booking_number` (VARCHAR 50 NULL) - [ ] `direction` (ENUM: import, export) - [ ] `delivery_status` (ENUM NULL) - [ ] `last_synced_at` (TIMESTAMP NULL — برای فاز ۳) - [ ] `manually_updated_at` (TIMESTAMP NULL) - [ ] `notes` (TEXT NULL — مثلاً 100AED disposal charge) - [ ] `created_at`, `updated_at` ### 1.4 ایجاد Migration `shipment_tracking_events` (جدول جدید) - [ ] `id` (BIGINT PK) - [ ] `shipment_id` (FK → shipments.id, cascadeOnDelete) - [ ] `event_date` (DATE) - [ ] `event_time` (TIME) - [ ] `location` (VARCHAR 200 NULL — مثلاً DUBAI, MUSCAT) - [ ] `event_description` (VARCHAR 500 — مثلاً Picked up by Naqel) - [ ] `delivery_status` (ENUM NULL — اگر رویداد مرتبط با تحویل باشد) - [ ] `source` (ENUM: manual, api_carrier, api_aggregator — فاز ۰: فقط manual) - [ ] `carrier_mapping_id` (FK NULL — برای فاز ۳) - [ ] `raw_payload` (JSON NULL — برای فاز ۳) - [ ] `created_at` ### 1.5 بازنویسی Migration `system_settings` - [ ] تغییر از ساختار ستونی به ساختار key-value: - [ ] `key` (VARCHAR 100 UNIQUE) - [ ] `value` (DECIMAL 15,4) - [ ] `description` (VARCHAR 255) - [ ] `updated_by` (FK → users.id) - [ ] `updated_at` ### 1.6 بازنویسی Migration `users` - [ ] اضافه کردن `phone` (VARCHAR 20 NULL) - [ ] اضافه کردن `role` (ENUM: super_admin, tracking_operator, data_entry, customer) - [ ] اضافه کردن `is_active` (BOOLEAN default true) ### 1.7 اصلاح Migration `shipping_rates` - [ ] تغییر `type` از STRING به ENUM: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL` - [ ] تغییر `direction` از STRING به ENUM: `import`, `export` --- ## 🟡 بخش ۲: اصلاح و ایجاد Model ها ### 2.1 بازنویسی `Country.php` - [ ] اضافه کردن fillable: `iso_code`, `export_zone_parcel`, `export_zone_doc`, `import_zone_parcel`, `import_zone_doc`, `is_active` - [ ] حذف `export_zone`, `import_zone` از fillable - [ ] اضافه کردن `casts` برای `is_active` → boolean ### 2.2 بازنویسی `Shipment.php` - [ ] اضافه کردن `direction` cast → enum - [ ] اضافه کردن `type` cast → enum - [ ] اضافه کردن `status` cast → enum - [ ] اضافه کردن fillable: `from_country_id`, `to_country_id`, `domestic_pickup`, `domestic_delivery`, `warehousing_cost`, `vat_amount` - [ ] حذف `forwarder_track_id` از fillable - [ ] اضافه کردن رابطه `carrierMappings()` (HasMany) - [ ] اضافه کردن رابطه `trackingEvents()` (HasMany) - [ ] اضافه کردن رابطه `fromCountry()` (BelongsTo) - [ ] اضافه کردن رابطه `toCountry()` (BelongsTo) ### 2.3 ایجاد `ShipmentCarrierMapping.php` - [ ] fillable: تمام فیلدهای جدول - [ ] casts: `direction` → enum, `last_synced_at` → datetime - [ ] رابطه `shipment()` (BelongsTo) ### 2.4 ایجاد `ShipmentTrackingEvent.php` - [ ] fillable: تمام فیلدهای جدول - [ ] casts: `event_date` → date, `event_time` → datetime, `source` → enum - [ ] رابطه `shipment()` (BelongsTo) ### 2.5 بازنویسی `SystemSetting.php` - [ ] تغییر به ساختار key-value - [ ] اضافه کردن متد `get($key)` — استخراج مقدار با کلید - [ ] اضافه کردن متد `set($key, $value)` — تنظیم مقدار - [ ] اضافه کردن رابطه `updatedBy()` (BelongsTo) ### 2.6 بازنویسی `User.php` - [ ] اضافه کردن fillable: `phone`, `role`, `is_active` - [ ] اضافه کردن casts: `is_active` → boolean - [ ] اضافه کردن متد `isSuperAdmin()`, `isTrackingOperator()`, `isDataEntry()` ### 2.7 بازنویسی `ShippingRate.php` - [ ] تغییر `type` به enum: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL` - [ ] تغییر `direction` به enum: `import`, `export` --- ## 🟡 بخش ۳: Seeders ### 3.1 بازنویسی `CountriesTableSeeder.php` - [ ] استخراج نام کشور و iso_code از فرمت `Afghanistan (AF)` - [ ] تنظیم ۴ زون مجزا (از شیت Zone اکسل): - [ ] `export_zone_parcel` — از ستون PARCEL شیت Zone - [ ] `export_zone_doc` — از ستون DOCUMENT شیت Zone - [ ] `import_zone_parcel` — از شیت COUNTRIES ستون IMPORT ZONES - [ ] `import_zone_doc` — از شیت COUNTRIES (نیاز به تأیید مشتری) - [ ] ایران (IR) را بدون زون تنظیم (مبدا/مقصد داخلی) - [ ] تنظیم `is_active = true` برای همه ### 3.2 بازنویسی `SystemSettingSeeder.php` - [ ] ساختار key-value: - [ ] `('vat_rate', 0.09, 'VAT rate — 9%')` - [ ] `('packing_cost_default', 100000, 'Default packing cost in IRR')` - [ ] `('profit_margin', 1.25, 'Profit margin — set per company')` - [ ] `('aed_to_irr', 455000, 'AED to IRR exchange rate')` - [ ] `('usd_to_irr', 0, 'USD to IRR exchange rate')` - [ ] `('cny_to_irr', 0, 'CNY to IRR exchange rate')` - [ ] `('eur_to_irr', 0, 'EUR to IRR exchange rate')` ### 3.3 بازنویسی `DatabaseSeeder.php` - [ ] اضافه کردن CountriesTableSeeder - [ ] اضافه کردن SystemSettingSeeder - [ ] ایجاد User اولیه با نقش `super_admin` - [ ] حذف User::factory --- ## 🟢 بخش ۴: API و Controller ها ### 4.1 ایجاد `TrackController.php` (حیاتی — فاز ۰) - [ ] `GET /api/track/{awb_no}` — تایم‌لاین ترکینگ - [ ] جستجوی shipment با awb_no - [ ] برگرداندن رویدادهای ترکینگ مرتب‌شده (تاریخ + زمان) - [ ] برگرداندن اطلاعات پایه مرسوله (direction, type, status, sender, receiver) - [ ] برگرداندن نگاشت‌های شرکت حمل (carrier_mappings) - [ ] Response در قالب JSON مرتب - [ ] اگر AWB پیدا نشد → 404 با پیام مناسب ### 4.2 اصلاح `PricingController.php` - [ ] تغییر `type` validation به ۳ مقدار: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL` - [ ] اضافه کردن API Key authentication middleware - [ ] اضافه کردن Rate Limiting (60 req/min) - [ ] تغییر مسیر به `POST /api/calculate-price` (در فاز ۱) ### 4.3 تنظیمات امنیتی API - [ ] ایجاد Middleware برای API Key (header: `Authorization: Bearer {key}`) - [ ] تنظیم Rate Limiting در `RouteServiceProvider` - [ ] تنظیم CORS در `config/cors.php` — فقط دامنه‌ی وردپرس تولیدی - [ ] اعتبارسنجی ورودی‌ها با Form Request ### 4.4 اصلاح `routes/api.php` - [ ] اضافه کردن `GET /api/track/{awb_no}` (فاز ۰) - [ ] گروه‌بندی مسیرها با middleware (api_key + throttle) - [ ] حفظ `GET /api/calculate-price` (فاز ۱) --- ## 🟢 بخش ۵: Filament Admin Panel ### 5.1 بازنویسی `CountryResource.php` - [ ] اضافه کردن فیلدهای ۴ زون در فرم - [ ] اضافه کردن فیلد `iso_code` - [ ] اضافه کردن فیلد `is_active` (toggle) - [ ] نمایش ۴ زون در جدول ### 5.2 بازنویسی `ShipmentResource.php` - [ ] حذف `forwarder_track_id` از فرم - [ ] تغییر `type` به Select با ۳ گزینه: DOC_NORMAL, DOC_ECONOMY, PARCEL - [ ] تغییر `direction` به Select با ۲ گزینه: import, export - [ ] اضافه کردن `from_country_id` و `to_country_id` (Select از کشورها) - [ ] اضافه کردن فیلدهای مالی غایب (domestic_pickup, domestic_delivery, warehousing_cost, vat_amount) - [ ] تبدیل فیلدهای غیرضروری فاز ۰ به `nullable` - [ ] حذف `user_id` از فرم (یا nullable) ### 5.3 ایجاد `ShipmentCarrierMappingResource.php` (یا RelationManager) - [ ] فرم افزودن نگاشت شرکت حمل: - [ ] Select `carrier_code` (۸ گزینه + OTHER) - [ ] `carrier_tracking_number` - [ ] `booking_number` (nullable) - [ ] `direction` (import/export) - [ ] `notes` (nullable) - [ ] نمایش در صفحه‌ی مرسوله به‌صورت RelationManager ### 5.4 ایجاد `ShipmentTrackingEventResource.php` (یا RelationManager) ⭐ حیاتی - [ ] UX اختصاصی اپراتور ترکینگ: - [ ] جستجوی سریع با کد AWB - [ ] فرم افزودن رویداد: - [ ] `event_date` (پیش‌فرض: امروز) - [ ] `event_time` (پیش‌فرض: اکنون) - [ ] `delivery_status` (Select از لیست ۸-۱۰ حالت آماده) - [ ] `location` (متن ساده) - [ ] `event_description` (متن ساده) - [ ] `source` (hidden — پیش‌فرض: manual) - [ ] دکمه «ذخیره و افزودن بعدی» — برای ثبت سریع چند رویداد - [ ] نمایش تایم‌لاین رویدادها در صفحه‌ی مرسوله ### 5.5 بازنویسی `SettingsPage.php` - [ ] تغییر به ساختار key-value - [ ] فرم داینامیک: هر تنظیم یک فیلد با label از description - [ ] اضافه کردن `vat_rate` (0.09) - [ ] اضافه کردن `packing_cost_default` (100,000 ریال) - [ ] ذخیره `updated_by` (کاربر فعلی) ### 5.6 بازنویسی `PriceTestPage.php` - [ ] تغییر `type` به ۳ گزینه: DOC_NORMAL, DOC_ECONOMY, PARCEL - [ ] نمایش زون استخراج‌شده (کدام زون استفاده شد) - [ ] اضافه کردن محاسبه VAT و هزینه‌های جانبی ### 5.7 اصلاح `ShippingRateResource.php` - [ ] تغییر `type` به ۳ گزینه: DOC_NORMAL, DOC_ECONOMY, PARCEL - [ ] تغییر `direction` به: import, export ### 5.8 تنظیمات Filament - [ ] تنظیم زبان فارسی پنل (fa) - [ ] تنظیم navigation groups (مدیریت، ترکینگ، مالی، تنظیمات) - [ ] تنظیم نقش‌ها و دسترسی‌ها (Filament Shield یا دستی) --- ## 🟢 بخش ۶: Services ### 6.1 اصلاح `PriceCalculatorService.php` - [ ] استفاده از ۴ زون مجزا (نه ۲ زون): - [ ] اگر type=PARCEL → `export_zone_parcel` / `import_zone_parcel` - [ ] اگر type=DOC_* → `export_zone_doc` / `import_zone_doc` - [ ] پشتیبانی از ۳ نوع سرویس: DOC_NORMAL, DOC_ECONOMY, PARCEL - [ ] اضافه کردن محاسبه VAT (9%) - [ ] اضافه کردن هزینه‌های جانبی (domestic_pickup, packing, warehousing, delivery) - [ ] محاسبه sub-total قبل از VAT - [ ] خروجی کامل: base_price, net_dirham, net_rial, vat_amount, total_fee ### 6.2 ایجاد `TrackingService.php` (فاز ۰) - [ ] متد `getTrackingTimeline($awb_no)` — دریافت تایم‌لاین - [ ] متد `addTrackingEvent($shipment_id, $data)` — افزودن رویداد دستی - [ ] متد `getShipmentWithTracking($awb_no)` — مرسوله + رویدادها + نگاشت‌ها --- ## 🔵 بخش ۷: Import و مهاجرت داده ### 7.1 اصلاح `OldShipmentsImport.php` - [ ] اصلاح ایندکس‌های ستون‌ها (مطابق EXCEL_ANALYSIS.md شیت List): - [ ] ستون ۱: HAWB No. (ایندکس ۰) - [ ] ستون ۲: Date (ایندکس ۱) - [ ] ستون ۳: Forwarder (ایندکس ۲) - [ ] ستون ۴-۵: From/To (ایندکس ۳-۴) - [ ] ستون ۶: Zone (ایندکس ۵) - [ ] ستون ۷: Service/Direction (ایندکس ۶) - [ ] ستون ۸: Type (ایندکس ۷) - [ ] و غیره... - [ ] تبدیل `type` به ۳ مقدار: DOC_NORMAL, DOC_ECONOMY, PARCEL - [ ] تبدیل `direction` به: import, export - [ ] تبدیل نام کشورها از `Iran (IR)` به `iso_code` برای lookup - [ ] فیلتر رکوردهای خالی - [ ] اعتبارسنجی داده‌ها ### 7.2 اصلاح `ShippingRatesImport.php` - [ ] پشتیبانی از ۳ نوع سرویس (نه ۲): - [ ] شیت DocNor → type = DOC_NORMAL - [ ] شیت DocEco → type = DOC_ECONOMY - [ ] شیت Parcel → type = PARCEL - [ ] پشتیبانی از فرمت Long format (شیت‌های DocNor/DocEco/Parcel) - [ ] پشتیبانی از فرمت Wide format (شیت‌های Import/Export Rate) ### 7.3 ایجاد مهاجرت ترکینگ دستی - [ ] اسکریپت مهاجرت شیت Sheet1 فایل `Data entry 2026-06-28.xlsx` - [ ] نگاشت به `shipment_tracking_events` با `source = manual` - [ ] مهاجرت شیت Refrence به `shipment_carrier_mappings` ### 7.4 تست مهاجرت - [ ] مقایسه تعداد رکوردهای مهاجرت‌داده‌شده با اکسل - [ ] نمونه‌گیری ۵۰ رکورد برای بررسی دقیق - [ ] تست مهاجرت حداقل ۱۰ مرسوله با رویداد ترکینگ --- ## 🔵 بخش ۸: پلاگین وردپرس IFNEX Bridge ### 8.1 ساختار پلاگین - [ ] ایجاد `ifnex-bridge.php` (فایل اصلی پلاگین) - [ ] ایجاد `includes/api-client.php` (ارتباط با API لاراول) - [ ] ایجاد `includes/shortcodes.php` (ثبت شورت‌کدها) - [ ] ایجاد `includes/tracking-form.php` (فرم رهگیری) - [ ] ایجاد `assets/css/ifnex-tracking.css` - [ ] ایجاد `assets/js/ifnex-tracking.js` ### 8.2 شورت‌کد رهگیری مرسوله ⭐ حیاتی - [ ] `[ifnex_tracking_form]` — فرم جستجوی کد AWB - [ ] ارسال درخواست به `GET /api/track/{awb_no}` لاراول - [ ] نمایش تایم‌لاین رویدادها (طراحی شبیه DHL) - [ ] نمایش اطلاعات پایه مرسوله - [ ] نمایش خطای «مرسوله پیدا نشد» اگر AWB معتبر نباشد - [ ] لودینگ و UX روان ### 8.3 شورت‌کد استعلام قیمت (ساده — فاز ۰) - [ ] `[ifnex_price_inquiry]` — فرم دریافت شماره موبایل + اطلاعات اولیه - [ ] نمایش پیام «کارشناس ما تماس می‌گیرد» - [ ] ذخیره اطلاعات برای پیگیری ### 8.4 امنیت پلاگین - [ ] API Key در تنظیمات پلاگین (نه هاردکد) - [ ] sanitize_text_field برای تمام ورودی‌ها - [ ] esc_html و esc_attr برای خروجی‌ها - [ ] Nonce برای فرم‌ها --- ## 🔵 بخش ۹: وب‌سایت وردپرس ### 9.1 نصب و راه‌اندازی - [ ] نصب وردپرس روی هاست مشتری - [ ] تنظیمات امنیتی (HTTPS، فایروال، محدودیت ورود) - [ ] نصب و تنظیم قالب (light mode، RTL-friendly، DHL-inspired) ### 9.2 لندینگ پیج - [ ] بخش معرفی شرکت - [ ] بخش خدمات (صادرات، واردات، داخلی) - [ ] بخش «چرا ما» (مزیت رقابتی) - [ ] فراخوان به اقدام (Call to Action) ### 9.3 صفحات ثابت - [ ] درباره ما - [ ] تماس با ما - [ ] قوانین و مقررات - [ ] سوالات متداول (FAQ) - [ ] حریم خصوصی ### 9.4 صفحه رهگیری مرسوله - [ ] شورت‌کد `[ifnex_tracking_form]` در صفحه - [ ] طراحی تایم‌لاین شبیه DHL - [ ] تست عملکرد ### 9.5 صفحه استعلام قیمت - [ ] شورت‌کد `[ifnex_price_inquiry]` در صفحه - [ ] فرم ساده (موبایل + مبدا + مقصد + وزن تقریبی) - [ ] پیام «کارشناس ما تماس می‌گیرد» ### 9.6 وبلاگ سئو - [ ] نصب بخش وبلاگ - [ ] پست ۱: تفاوت صادرات و واردات - [ ] پست ۲: نحوه محاسبه وزن حجمی - [ ] پست ۳: راهنمای انتخاب شرکت حمل مناسب ### 9.7 سئو و چندزبانه - [ ] meta tags و sitemap XML و schema markup - [ ] ثبت در Google Search Console - [ ] نصب Polylang (آماده برای آینده) - [ ] تست سرعت بارگذاری (< ۳ ثانیه) --- ## 🔵 بخش ۱۰: اصلاحات فنی عمومی ### 10.1 `composer.json` - [ ] تغییر `laravel/framework` از `^12.0` به `^11.0` - [ ] اضافه کردن `morilog/jalali` (برای تبدیل تاریخ در لایه نمایش) ### 10.2 تنظیمات `.env.example` - [ ] اضافه کردن `IFNEX_API_KEY=` (برای احراز هویت وردپرس) - [ ] اضافه کردن `CORS_ALLOWED_ORIGINS=` (فقط دامنه‌ی وردپرس) - [ ] اضافه کردن `IFNEX_TRACKING_RATE_LIMIT=60` (درخواست در دقیقه) ### 10.3 Config اختصاصی - [ ] ایجاد `config/ifnex.php` (تنظیمات اختصاصی پروژه) - [ ] API Key - [ ] CORS whitelist - [ ] Rate limits - [ ] Carrier codes list - [ ] Tracking status list ### 10.4 تست‌ها - [ ] تست Migration ها (php artisan migrate --seed) - [ ] تست API ترکینگ (GET /api/track/{awb_no}) - [ ] تست API قیمت‌گذاری (GET /api/calculate-price) - [ ] تست مهاجرت داده‌های تاریخی - [ ] تست پنل Filament (CRUD + ترکینگ) - [ ] تست پلاگین وردپرس - [ ] تست امنیتی (CORS, Rate Limiting, API Key) --- ## 📋 بخش ۱۱: مستندات - [ ] راهنمای نصب پروژه (Installation Guide) - [ ] راهنمای اپراتور (Operator Manual) با اسکرین‌شات - [ ] مستندات API (مسیرها، پارامترها، نمونه پاسخ‌ها) - [ ] جلسه آموزشی ۴ ساعته برای اپراتورها --- ## 📅 بخش ۱۲: جدول زمانی (۴ هفته) | هفته | زیرفاز ۰.الف (وردپرس) | زیرفاز ۰.ب (لاراول) | خروجی | |------|------------------------|----------------------|-------| | **هفته ۱** | نصب وردپرس + انتخاب قالب + صفحات اصلی | اصلاح Migration ها + Model ها + Seeders | محیط آماده + جداول دیتابیس | | **هفته ۲** | لندینگ پیج + صفحات ثابت + وبلاگ | API ترکینگ + TrackController + Filament ترکینگ | صفحات آماده + API قابل تست | | **هفته ۳** | صفحه رهگیری + شورت‌کد + فرم استعلام | پنل Filament کامل + UX اپراتور + پلاگین Bridge | ترکینگ دستی فعال | | **هفته ۴** | سئو + Polylang + تست | مهاجرت ۳۹۵۰ رکورد + تست نهایی + رفع باگ | تحویل فاز ۰ | --- ## 🚫 خط قرمزها — هرگز این کارها را نکن - ❌ هرگز جدول countries را به ۲ زون برگردانی - ❌ هرگز فقط ۲ نوع سرویس پیاده کن (۳ نوع الزامی است) - ❌ هرگز ترکینگ را در وردپرس پیاده کن - ❌ هرگز فیلدهای مالی (VAT, Packing, Warehousing) را حذف کن - ❌ هرگز از رنگ/لوگو DHL کپی کن - ❌ هرگز PDF را به فارسی بسازی - ❌ هرگز تاریخ را شمسی در DB ذخیره کنی - ❌ هرگز از CORS `*` استفاده کنی - ❌ هرگز فایل .env را در Git کامیت کنی - ❌ هرگز فاز ۱ را قبل از تأیید فاز ۰ شروع کنی --- > © 2026 VernaSoft Group. Internal use only.