پیکربندی فیلدهای مشتری
> version: 1.13 | last_updated: 2026-09-20 | audience: admin
مسیر: **پنل شرکت → تنظیمات → تنظیمات اصلی → تب فیلدهای مشتری** (`/panel/main-settings/tenant-customer-fields`)
دو سطح تنظیم
| سطح | کجا اعمال میشود |
|------|------------------|
| **ثبتنام نماینده / مشتری** | ثبتنام پورتال توسط مشتری + **ثبت مشتری جدید** توسط نماینده |
| **ویرایش پروفایل نماینده / مشتری** | صفحه پروفایل مشتری بعد از ورود + **فرم ویرایش مشتری** در پنل نماینده |
مثال: کد ملی در ثبتنام **اجباری و قابل پر کردن**؛ در ویرایش پروفایل **نمایش + غیرقابل ویرایش** (هم برای مشتری، هم برای نماینده).
**پست الکترونیک** در گروه تماس قابل پیکربندی است (پیشفرض اجباری در ثبت و ویرایش).
اعتبارسنجی استاندارد فیلدها
| فیلد | قاعده |
|------|--------|
| **کد ملی** (حقیقی) | ۱۰ رقم + رقم کنترل (`NationalIdValidator`) |
| **شناسه ملی** (حقوقی) | ۱۱ رقم + رقم کنترل سازمانی |
| **ایمیل** | `email:filter` |
| **کد پستی** | دقیقاً ۱۰ رقم (`/^\d{10}$/`) |
فیلتر بر اساس نوع مشتری
هر تب (حقیقی / حقوقی / اتباع) فقط فیلدهای همان نوع را نشان میدهد؛ مثلاً بخش **اطلاعات حقوقی** در تب حقیقی نمیآید. محدودیت با `party_types` در `config/bss_customer_fields.php` است.
برای **حقوقی** بخش «اطلاعات هویتی» نیست؛ شناسه ملی داخل **اطلاعات حقوقی** است. نام/نامخانوادگی فقط برای حقیقی و اتباع است. فیلدهای انگلیسی `SazmanId` و `Summary` در UI نیستند. برای حقوقی **شماره همراه** در تماس نیست — **موبایل نماینده** همان تماس اصلی است. **نوع شناسه نماینده** فیلد فرم نیست؛ ایرانی `0` و اتباع `1` خودکار پاس میشود. گروه **اطلاعات نماینده** برای حقوقی و اتباع مشترک است (اتباع: ملیت نماینده هم دارد؛ حقوقی: شماره شناسنامه نماینده).
**کشور / ملیت:** فقط برای **اتباع**. حقیقی و حقوقی همیشه ایرانیاند (`country=ایران`, `nationality=IRN`, `is_iranian=1`) و فیلد ملیت در UI حقوقی نمیآید.
**استان / شهر:** حقیقی و حقوقی از لیست ایران (آبشاری)؛ اتباع متن آزاد.
**تاریخ:** حقیقی و حقوقی تقویم **شمسی**؛ اتباع تقویم **میلادی** (Flatpickr) در پورتال و نماینده.
تیکهای هر فیلد
| تیک | معنی |
|-----|------|
| **نمایش در ثبت** | در ثبتنام پورتال + ثبت نماینده دیده شود |
| **اجباری** | در ثبت اجباری است؛ اگر در ویرایش هم قابلویرایش باشد همانجا هم اجباری است |
| **نمایش در ویرایش** | در پروفایل مشتری + ویرایش نماینده دیده شود |
| **قابل ویرایش** | در ویرایش قابل تغییر باشد (خاموش = فقطخواندنی، مثلاً کد ملی) |
تیک جدا برای «اجباری ویرایش» وجود ندارد.
هر تغییر تیک **همان لحظه** در دیتابیس ذخیره میشود و در ثبتنام نماینده / پورتال اعمال میگردد.
نگاشت داخلی (سازگاری)
| تیکها | مقدار ذخیرهشده |
|--------|------------------|
| نمایش خاموش | `hidden` |
| نمایش + اختیاری + قابل ویرایش | `optional` |
| نمایش + اجباری + قابل ویرایش | `required` (اجباری از سطح ثبت کپی میشود) |
| نمایش + غیرقابل ویرایش (ویرایش پروفایل) | `readonly` |
ذخیره همچنان در `tenants.settings.customer_fields` است.
API سرویس
| متد | سطح |
|-----|------|
| `configurableKeysFor` / `fieldAppliesToType` | فیلتر نوع مشتری |
| `visibleForRegister` / `staffCreateValidationRules` / `visibleForStaff` | ثبت |
| `visibleForProfile` / `profileValidationRules` | پروفایل مشتری |
| `visibleForStaffEdit` / `staffEditValidationRules` / `staffEditableKeys` | ویرایش توسط نماینده |