راهاندازی سیستم مدیریت مجموعه
این راهنما برای مدیران و کاربران مجموعه نوشته شده — بدون نیاز به دانش فنی. تمام بخشها با عناوینی که دقیقاً در نرمافزار میبینید توضیح داده شدهاند.
نتیجهای برای جستجوی شما پیدا نشد.
عبارت دیگری امتحان کنید یا فهرست کنار صفحه را ببینید.
مقدمه — دو سطح تنظیم
پنل مدیریت پلتفرم مدیر سیستم
از منوی کاربر (بالای صفحه) گزینه «پنل مدیریت پلتفرم» را بزنید. مسیر: /admin/clinics
اینجا مجموعه (کلینیک) ساخته میشود، ماژول لیزر یا پذیرش کلاسیک روشن میشود و کاربران به مجموعه وصل میشوند.
تنظیمات مجموعه مدیر مجموعه
از منوی کناری «تنظیمات» — مسیر: /settings
برندینگ، فرم پذیرش، چاپ، مالی، پرونده بیمار و سایر تنظیمات روزمره مجموعه.
| بخش | مسیر | چطور فعال میشود |
|---|---|---|
| پذیرش کلاسیک | /admissions | پنل مدیریت ← جریان پذیرش ← «پذیرش کلاسیک» |
| لیزر | /laser-room | پنل مدیریت ← جریان لیزر ← «فعالسازی ماژول لیزر» |
| مالی | فاکتور و پرداخت | تنظیمات ← «تنظیمات مالی» ← «فعالسازی بخش مالی» |
تنها پذیرش کلاسیک (بدون لیزر): سوئیچ «پذیرش کلاسیک» در پنل مدیریت فقط وقتی ماژول لیزر فعال باشد دیده میشود. اگر فقط پذیرش کلاسیک دارید، منوها و مسیرهای پذیرش کلاسیک بهطور پیشفرض فعال میمانند.
تنها لیزر (بدون پذیرش کلاسیک): اگر ماژول لیزر فعال و «پذیرش کلاسیک» خاموش باشد، منوهای «پذیرشها»، «اتاق پزشک»، «اتاق عمل»، «فرم پذیرش» و فیلدهای فرم پذیرش در پرونده بیمار نمایش داده نمیشوند.
ترتیب پیشنهادی راهاندازی
انتقال از CRM قدیمی؟ ابتدا بخش انتقال داده از CRM قدیمی را انجام دهید، سپس بقیه این راهنما را برای تنظیمات و بهرهبرداری دنبال کنید.
این ترتیب برای اولین بار راهاندازی مجموعه پیشنهاد میشود:
- پنل مدیریت: ساخت مجموعه، اتصال کاربران، فعالسازی ماژول لیزر یا پذیرش کلاسیک، ذخیره «جریان پذیرش» و «جریان لیزر»
- تنظیمات ← هویت سایت: عنوان، لوگو، رنگ و فونت
- منو ← فرم پذیرش: طراحی فرم پذیرش (فقط اگر پذیرش کلاسیک فعال است)
- تنظیمات ← استایل پرینت: اندازه کاغذ، سربرگ، سپس «ویرایش استایل پرینت»
- تنظیمات ← فیلدهای پرونده: فیلدهای اطلاعات بیمار
- تنظیمات ← کد پذیرش: قالب شماره پذیرش
- تنظیمات ← تنظیمات مالی و «حسابهای پیشفرض»
- تنظیمات ← اعلانها (در صورت نیاز)
- پذیرش کلاسیک: «ویزیت پزشک»، «اسناد پذیرش»، «چکلیست جراحی»، «دلایل لغو»
- منو: پزشکان، مشاوران، خدمات، انبار
- تنظیمات لیزر: شیفتهای کاری، اپراتورها، دستگاهها، نواحی لیزر، محصولات مصرفی
- وب اپلیکیشن (در صورت نیاز): فعالسازی در پنل پلتفرم، محتوا، ظاهر، SEO، ورود کاربران — جزئیات
- تست: یک پذیرش آزمایشی ثبت کنید
نقشهای کاربری
| نقش | معمولاً چه کسی |
|---|---|
| مدیر کل | مدیر فنی / صاحب پلتفرم — دسترسی به پنل مدیریت |
| مدیر مجموعه | مدیر کلینیک — تنظیمات و کاربران |
| منشی | پذیرش، پرونده، اتاقها |
| پزشک | اتاق پزشک و ویزیت |
| حسابدار | فاکتور و پرداخت (با فعال بودن بخش مالی) |
| مشاور | پذیرش کلاسیک — انتخاب هنگام ثبت پذیرش (کاربر متصل به «مشاوران») |
نقشها از منوی «پرسنل و دسترسی» ← «نقشها» قابل تنظیم هستند. هر کاربر باید به مجموعه مورد نظر متصل باشد و از بالای صفحه مجموعه فعال را انتخاب کند.
پنل مدیریت پلتفرم
مسیر: /admin/clinics — فقط برای مدیر سیستم.
مجموعهها
با «مجموعه جدید» کلینیک بسازید. فیلدهای فرم:
| عنوان در فرم | توضیح |
|---|---|
| نام مجموعه | نام داخلی |
| نام نمایشی سایت | عنوانی که کاربران میبینند |
| شعار / توضیح کوتاه | زیرعنوان |
| ایمیل پشتیبانی | تماس |
| تلفن پشتیبانی | تماس |
| تصویر پشتیبانی | تصویر اختیاری (حداکثر ۲ مگابایت) |
در هر ردیف: مدیریت مجموعه · جریان پذیرش · جریان لیزر · کاربران مجموعه
جریان پذیرش پذیرش کلاسیک
مسیر: /admin/clinics/.../admission-workflow — دکمه: «ذخیره جریان پذیرش»
تنظیمات کلی
- فعالسازی جریان خودکار پذیرش
- پذیرش کلاسیک — فقط وقتی ماژول لیزر فعال است نمایش داده میشود؛ خاموش = فقط پذیرش لیزر
بدون ماژول لیزر: سوئیچ «پذیرش کلاسیک» در این صفحه نمایش داده نمیشود و پذیرش کلاسیک همیشه فعال است. برای حالت «فقط لیزر» ابتدا ماژول لیزر را از بخش جریان لیزر فعال کنید.
هدایت به صفحه (رفتن کاربر)
بعد از هر رویداد (ایجاد پذیرش، ویزیت، تأیید، پرداخت، …) کاربر به کدام صفحه برود: جزئیات پذیرش، اتاق پزشک، ویزیت، تأیید مشتری، فاکتور، تعیین وقت عمل، اتاق عمل، چکلیست.
مراحل جریان
| مرحله | کاربرد |
|---|---|
| ویزیت پزشک | ثبت خدمات در اتاق پزشک |
| تایید مشتری | انتخاب نهایی خدمات |
| پرداخت | فاکتور و دریافت وجه |
| تعیین وقت عمل | تاریخ و محل جراحی |
| انتظار عمل | تا روز عمل |
| چکلیست جراحی | قبل و حین عمل |
هر مرحله: سوییچ فعال/غیرفعال + «عنوان نمایشی مرحله».
انتقال وضعیت پرونده (مرحله بعدی)
پس از ایجاد، ویزیت، تأیید (با/بدون مالی)، پرداخت، ثبت وقت عمل — وضعیت پرونده به کجا برود.
برچسب وضعیتهای پذیرش
متن نمایشی هر وضعیت در لیست پذیرشها.
صفحه تعیین وقت عمل
عنوان صفحه، توضیح، برچسب دکمهها، برچسب تاریخ و محل، محلهای جراحی (لیست + گزینه «سایر»).
برچسب مراحل چکلیست جراحی
نام هر مرحله در چکلیست عمل.
جریان لیزر لیزر
مسیر: /admin/clinics/.../laser-workflow — دکمه: «ذخیره جریان لیزر»
پیشنیاز اتاق لیزر: سوییچ «فعالسازی ماژول لیزر» باید روشن باشد.
فقط لیزر: اگر «پذیرش کلاسیک» در بخش جریان پذیرش خاموش باشد، پیام هشدار در بالای این صفحه نمایش داده میشود و منوها و مسیرهای پذیرش کلاسیک برای کاربران مجموعه مخفی میشوند.
مراحل جریان لیزر
| مرحله | توضیح کوتاه |
|---|---|
| مشاوره لیزر | مشاوره اولیه (اختیاری) |
| ارزیابی پوست | بررسی و فرم ارزیابی (اختیاری) |
| برنامهریزی جلسات | نواحی، تعداد جلسات (اختیاری) |
| تسویه هزینه جلسه | دریافت هزینه — نیاز به «فعالسازی بخش مالی» |
| زمانبندی جلسه | تاریخ و زمان (اختیاری) |
| اجرای جلسه لیزر | ثبت شات، دستگاه، اپراتور — معمولاً فعال |
| مراقبت پس از درمان | دستورالعمل مراقبتی (اختیاری) |
انتقال بین مراحل
پس از مشاوره، ارزیابی، برنامهریزی، تسویه، زمانبندی، اتمام جلسه، مراقبت — مرحله بعدی چیست.
برچسب وضعیتها
متن وضعیتهای لیزر در اتاق لیزر.
اتاق لیزر
عنوان صفحه و توضیح صفحه در لیست اتاق لیزر.
فیلدهای ارزیابی پوست
فیلدهای دلخواه: برچسب، نوع (متن، متن چندخطی، انتخابی، بله/خیر، عدد)، اجباری بودن.
کاربران مجموعه
مسیر: /admin/clinics/.../users
- انتخاب از سامانه: کاربر موجود + نقش
- کاربر جدید: نام، نام کاربری، ایمیل، تلفن، رمز، وضعیت، نقش
تنظیمات مجموعه
منو ← «تنظیمات» — /settings
هر تب دکمه «ذخیره» جداگانه دارد. «چکلیست جراحی» و «دلایل لغو» بلافاصله با هر افزودن/ویرایش ذخیره میشوند.
| تب | کی نمایش داده میشود |
|---|---|
| هویت سایت | همیشه |
| اعلانها | همیشه |
| فیلدهای پرونده | همیشه |
| استایل پرینت | همیشه |
| تنظیمات مالی | همیشه (تب همیشه دیده میشود؛ گزینه «فعالسازی بخش مالی» بقیه بخشهای پولی را کنترل میکند — جزئیات) |
| کد پذیرش | همیشه |
| شیفتهای کاری | فقط ماژول لیزر |
| ویزیت پزشک | فقط پذیرش کلاسیک |
| اسناد پذیرش | فقط پذیرش کلاسیک |
| چکلیست جراحی | فقط پذیرش کلاسیک |
| دلایل لغو | فقط پذیرش کلاسیک |
هویت سایت
اطلاعات عمومی
عنوان سایت · شعار / توضیح کوتاه · ایمیل پشتیبانی · تلفن پشتیبانی
رنگ اصلی سیستم
رنگ حالت روشن · رنگ حالت تیره
فونت سیستم
فونت فارسی و انگلیسی: ایرانیکان (محلی — بدون Google Fonts)
حالت رنگی
فعال بودن حالت تیره · تم پیشفرض (سیستم / روشن / تیره)
تصاویر و برندینگ
لوگو (روشن/تیره) · فاوآیکون (روشن/تیره)
فرم پذیرش (منوی اصلی)
منو ← «فرم پذیرش» — /admission-form
قبل از ثبت اولین پذیرش واقعی، فرم پذیرش را طراحی کنید: فیلدهای سفارشی، ترتیب نمایش و نوع هر فیلد (متن، انتخابی، تاریخ و …).
چرا فقط پذیرش کلاسیک؟ «فرم پذیرش» مربوط به مسیر پذیرش جراحی/کلاسیک است — فیلدهای سفارشی اضافهای که هنگام ثبت پذیرش از منوی «پذیرشها» یا پرونده بیمار پر میشود. این منو و صفحه فقط وقتی «پذیرش کلاسیک» در پنل مدیریت فعال باشد در سامانه دیده میشود.
پذیرش لیزر مسیر جدا دارد (اتاق لیزر، ارزیابی پوست، برنامه درمان و …) و از این فرمساز استفاده نمیکند. اگر فقط لیزر دارید، این مرحله را رد کنید.
اگر «پذیرش کلاسیک» غیرفعال باشد، فیلدهای فرم پذیرش در ایجاد پرونده، ویرایش پرونده، مشاهده پرونده، پرینت پرونده و ویرایش استایل پرینت (گروه «اطلاعات تکمیلی») نمایش داده نمیشوند.
استایل پرینت
- اندازه کاغذ: A4 یا A5
- تصویر سربرگ پرینت: آپلود تصویر
- ویرایش استایل پرینت: لینک به /print-style (بعد از آپلود سربرگ)
فیلدهای پرونده
«فیلدهای اطلاعات عمومی پرونده» — برای هر فیلد: نمایش، اجباری، عنوان، عرض، ترتیب (کشیدن و رها کردن).
فیلدها: نام و نام خانوادگی، موبایل، کد ملی، تلفن ثابت، ایمیل، تاریخ تولد، سن، جنسیت، وضعیت تأهل، شغل، آدرس، بیمار VIP، فعال.
«جنسیت» برای فیلتر «نواحی لیزر» بر اساس بیمار استفاده میشود.
کد پذیرش
کد پذیرش کلاسیک
پیشوند · پسوند · «استفاده از عدد در کد» · «شروع شماره از» · «دامنه شماره» (این مجموعه / سراسری) · پیشنمایش کد
کد پذیرش لیزر
پیشوند · پسوند · «استفاده از عدد در کد» · «شروع شماره از» · «دامنه شماره» (این مجموعه / سراسری) · پیشنمایش کد — فقط وقتی ماژول لیزر فعال باشد.
شیفتهای کاری لیزر
مسیر: /settings?tab=laser-shifts — تب «شیفتهای کاری»
ساعت پیشفرض شیفت صبح و عصر برای همه اپراتورها. در صفحه /laser/operators هنگام تعریف شیفت، «صبح» یا «عصر» همین بازه را اعمال میکند.
- فعال — شیفت صبح/عصر
- عنوان نمایشی — مثلاً «صبح» یا «شیفت اول»
- ساعت شروع / پایان — فرمت ۰۸:۰۰
برای ساعات خاص یک اپراتور (مثلاً فقط چهارشنبه عصر)، در /laser/operators شیفت «سفارشی» تعریف کنید.
تنظیمات مالی
مسیر: /settings — تب «تنظیمات مالی»
- فعالسازی بخش مالی — روشن/خاموش کردن کل قابلیتهای پولی در مجموعه
- واحد نمایش: ریال یا تومان
- افزودن مالیات به فاکتور + «نرخ مالیات (درصد)»
حسابهای پیشفرض (در تب تنظیمات مالی)
بانک، صاحب حساب، شماره کارت، شماره حساب، شبا — برای ثبت پرداخت وقتی پزشک حساب اختصاصی ندارد.
وقتی «فعالسازی بخش مالی» روشن باشد چه چیزهایی اضافه میشود؟
با روشن بودن این گزینه، بخشهای زیر در سامانه ظاهر یا فعال میشوند. با خاموش بودن، قیمت و فاکتور در هیچجا نمایش داده نمیشود و ثبت پرداخت ممکن نیست.
| بخش | با مالی روشن | با مالی خاموش |
|---|---|---|
| پذیرشها | تب «مالی» در جزئیات پذیرش · مشاهده فاکتور · ثبت پرداخت · تاریخچه پرداختها · مانده حساب | فقط تبهای «پذیرش» و «پرونده» — بدون فاکتور و پرداخت |
| ثبت پذیرش کلاسیک | نمایش قیمت خدمات هنگام انتخاب · جمع مبلغ | فقط انتخاب خدمت بدون قیمت |
| اتاق پزشک — ویزیت | قیمت هر خدمت · «هزینه بیمارستان» (اگر در تنظیمات ویزیت فعال باشد) | انتخاب خدمت بدون قیمت |
| تکمیل پذیرش | قیمت خدمات · هزینه بیمارستان · امکان تغییر قیمت (اگر در تنظیمات ویزیت مجاز باشد) | بدون فیلدهای مبلغ |
| لغو پذیرش / لغو جراحی | نمایش مبلغ پرداختشده · غیرقابلاسترداد · قابلاسترداد | فقط دلیل لغو |
| خدمات | ستون «قیمت» در لیست · فیلد قیمت در ثبت/ویرایش | بدون قیمت |
| انبار | ستونهای «آخرین خرید» و «آخرین فروش» · قیمت در ورود/خروج کالا | بدون قیمت |
| نواحی لیزر | قیمت هر شات — برای محاسبه هزینه جلسه | تعریف ناحیه بدون قیمت |
| اتاق لیزر — اتمام جلسه | محاسبه هزینه جلسه · پیشنمایش کمیسیون · مرحله «تسویه هزینه جلسه» (اگر در جریان لیزر فعال باشد) | ثبت جلسه بدون مبلغ و تسویه |
| پرونده بیمار | مبلغ در تاریخچه پذیرشها | بدون مبلغ |
| جریان پذیرش — هدایت | گزینه «فاکتور» در انتقالها (بعد از تأیید، پرداخت و …) | هدایت به فاکتور غیرفعال |
| اسناد پذیرش | بخش «اسناد پرداخت» (رسید و فیش) در تنظیمات و پرونده پذیرش | تنظیمات اسناد پرداخت بیاثر (چون پرداختی ثبت نمیشود) |
«فعالسازی بخش مالی» را قبل از ثبت اولین پذیرش واقعی تنظیم کنید. واحد پول (ریال/تومان) و مالیات را همینجا مشخص کنید؛ بعداً تغییر واحد روی مبالغ قبلی اثر نمیگذارد.
حقوق و مزایا حسابداری داخلی
مسیر: /settings?tab=payroll — تب «حقوق و مزایا»
این بخش مستقل از «تنظیمات مالی بیمار» است. حتی اگر فاکتور و پرداخت بیمار خاموش باشد، میتوانید حقوق پرسنل را محاسبه کنید.
فعالسازی
- فعالسازی محاسبه حقوق — روشن/خاموش کردن کل ماژول حقوق و منوی حسابداری
اپراتورهای لیزر لیزر
فقط وقتی ماژول لیزر فعال باشد.
- محاسبه حقوق اپراتور
- مبنای محاسبه — «درآمد جلسه» (هزینه محاسبهشده) یا «مبلغ پرداختشده جلسه»
- درصد پیشفرض قرارداد — اگر برای دستگاه/اپراتور درصد اختصاصی نباشد
- اولویت درصد دستگاه / اپراتور — ترتیب اعمال درصد اختصاصی
فرمول: حقوق = مجموع (مبنای هر جلسه تکمیلشده × درصد قرارداد ÷ ۱۰۰)
مشاوران پذیرش کلاسیک
فقط وقتی پذیرش کلاسیک فعال باشد.
- محاسبه حقوق مشاور
- روش محاسبه:
- «درصد از کل مبلغ پذیرش» — یکبار روی جمع فاکتور (نه هر پرداخت جدا)
- «مبلغ ثابت به ازای هر پذیرش»
- درصد پیشفرض / مبلغ ثابت — اگر برای مشاور در صفحه «مشاوران» مقدار اختصاصی ثبت نشده باشد
برای حالت درصدی، پذیرشهایی که در بازه انتخابی حداقل یک پرداخت داشته باشند در محاسبه میآیند؛ مبنای محاسبه، کل مبلغ فاکتور پذیرش است.
پیشنیازها
- اپراتورها در /laser/operators — درصد اختصاصی (اختیاری)
- مشاوران در منوی «مشاوران» — درصد یا حالت محاسبه (اختیاری)
- برای مشاور با حالت درصدی: «فعالسازی بخش مالی» و ثبت فاکتور/پرداخت پذیرش
اعلانها
فعالسازی توستر · موقعیت · مدت نمایش · حداکثر همزمان · فاصله · تم · رنگهای غنی · دکمه بستن · پیشنمایش زنده (موفقیت، خطا، اطلاعات، هشدار).
ویزیت پزشک پذیرش کلاسیک
- توضیحات پزشک — نمایش و عنوان
- بیمار ویژه
- هزینه بیمارستان (با مالی فعال)
- امکان تغییر قیمت در تکمیل پذیرش (با مالی فعال)
اسناد پذیرش
| بخش | تنظیمات |
|---|---|
| اسناد پذیرش | فرمتهای مجاز · حداکثر حجم هر فایل |
| اسناد پرداخت | فرمتهای مجاز · حداکثر حجم هر فایل (رسید و فیش پرداخت) |
| اسناد چکلیست جراحی | فقط پذیرش کلاسیک |
چکلیست جراحی پذیرش کلاسیک
دسته جدید / ویرایش دسته: نام، مرحله، اجباری، فعال
آیتم جدید / ویرایش آیتم: برچسب، توضیح، اجباری، فعال
دلایل لغو پذیرش کلاسیک
دلایل لغو پذیرش — عنوان، گزینه «سایر»، ترتیب
دلایل لغو جراحی — عنوان، گزینه «سایر»، ترتیب
ترتیب پیشنهادی راهاندازی وباپ
بعد از فعالسازی در پنل پلتفرم، این ترتیب برای اولین بار پیشنهاد میشود:
- پنل پلتفرم: فعالسازی، Slug، دامنه اختصاصی (در صورت production) — /admin/clinics/.../web-app
- Deploy / env: build وباپ، اتصال به CRM — جزئیات
- زبانها: تب «زبانها» — زبان پیشفرض، RTL/LTR، پرچم
- محتوا: تب «محتوا» — عنوان Hero، زیرعنوان، متن دکمهها، شمارندههای آمار — جزئیات
- ظاهر: تم آماده، رنگها، استایل بخشها، Hero، تصاویر — جزئیات
- شبکههای اجتماعی: لینک پلتفرمها + استایل نمایش — جزئیات
- تماس، فوتر، SEO: تبهای مربوط در همان صفحه
- ورود کاربران: OTP، Google، بازیابی رمز — در صورت نیاز
- مشاوران: تعریف مشاور + جایگاه صف — اگر مودال مشاوره فعال است
- نمونه کارها و FAQ: دسته، رسانه، سؤال/پاسخ
- تست نهایی: باز کردن وباپ روی موبایل، ورود، FAQ، نمونه کارها
در تب «طراحی و پیشنمایش»، پیشنمایش زنده سمت چپ (یا بالا در موبایل) تغییرات را قبل از ذخیره نشان میدهد. دکمه «ذخیره» پایین صفحه برای هر تب جدا است — بعد از هر تغییر مهم حتماً ذخیره کنید.
دسترسیهای وب اپلیکیشن
منوی «وب اپلیکیشن» در CRM فقط با دسترسی مناسب دیده میشود:
| دسترسی | کاربرد |
|---|---|
| web-app.view | مشاهده تنظیمات، پیشنمایش، لیست کاربران وباپ |
| web-app.manage | ویرایش و ذخیره محتوا، ظاهر، SEO، ورود، FAQ، نمونه کارها و … |
از منوی «پرسنل و دسترسی» ← «نقشها» این دسترسیها را به «مدیر مجموعه» یا نقش اختصاصی بدهید.
تب محتوا — متنها و شمارندهها
مسیر: /settings/web-app — تب استودیو «محتوا»
ابتدا زبان محتوا را انتخاب کنید؛ متنها برای همان زبان ذخیره میشوند. برای چند زبان، از تب «زبانها» زبان اضافه کنید و محتوا را برای هر زبان جداگانه ویرایش کنید.
بخشهای متنی مهم صفحه اصلی
| بخش در فرم | نمایش در وباپ |
|---|---|
| صفحه اصلی ← عنوان سکشن بالا | عنوان Hero (مثلاً نام پزشک) |
| صفحه اصلی ← توضیحات سکشن بالا | زیرعنوان Hero (تخصص) |
| صفحه اصلی ← متن دکمه مشاوره | دکمه اصلی پایین صفحه |
| صفحه اصلی ← متن دکمه سوالات متداول | دکمه ثانویه FAQ |
| صفحه اصلی ← متن دکمه نمونه کارها | دکمه بالای بخش آمار (نیاز به ورود) |
| هدر ← عنوان دکمه ورود (پیامک/رمز) | دکمه ورود بالای صفحه |
| شمارندهها | ۴ کارت آمار (مقدار، پیشوند، پسوند، برچسب) |
برای طرح کلینیکی با فونت نستعلیق، عنوان Hero را اینجا بنویسید و در تب ظاهر فونت عنوان را «ایران نستعلیق» انتخاب کنید.
تب ظاهر — Theme، Hero و رسانه
تب استودیو «ظاهر» — چهار زیرتب دارد:
۱. استایل بخشها
تغییرات بلافاصله در پیشنمایش دیده میشوند. قبل از انتشار حتماً ذخیره کنید.
| تنظیم | اثر | گزینههای مهم |
|---|---|---|
| استایل پسزمینه Hero | پسزمینه بخش بالای صفحه | کلینیکی (سبز + اشکال نرم)، گرادیان، باند تیره، تخت، مش، نورافکن |
| استایل شبکههای اجتماعی | نوار آیکونهای social زیر Hero | Glass، Floating، Card، Bar، Inline، Outline، Soft، Gradient و … |
| استایل بخش آمار | کارت شمارندهها + تصویر | سایهدار، حاشیهدار، تخت |
| استایل دکمههای پایین | شکل دکمه مشاوره و FAQ | قرصی (Pill)، گوشه ملایم، تیز (Sharp) |
طرح نمونه کلینیک: تم آماده Clinical + استایل Hero کلینیکی + شبکه اجتماعی Glass. رنگ ثانویه را سبز و رنگ اصلی را بوردو تنظیم کنید.
۲. Hero — تصویر، چیدمان و تایپوگرافی
- جایگاه تصویر Hero: سمت چپ (پیشفرض) یا سمت راست
- چیدمان متن: کلاسیک، ادیتوریال (خط عمودی)، فشرده، اسپاتلایت
- تراز عمودی: بالا / وسط / پایین — برای چسباندن متن به بالا یا پایین Hero
- خط افقی / خط عمودی: ضخامت، رنگ، ارتفاع خط عمودی، فاصله از متن
- فاصلهگذاری:
- فاصله بلوک متن از تصویر — مقدار منفی = چسبیدن عنوان به عکس
- فاصله بین متن و تصویر — فاصله مستقیم دو بلوک
- فاصله بخش از بالا/پایین/چپ و راست
- عنوان / زیرعنوان: فونت جدا (مثلاً ایران نستعلیق)، اندازه، رنگ، فاصله از راست
- تصویر: حاشیه، سایه، پسزمینه پشت عکس، گردی گوشهها
۳. تم و رنگ
- استایل آماده (Preset): Modern، Classic، Clinical، Luxury و … — با تغییر preset، رنگها و layout پیشفرض عوض میشود
- فونت پیشفرض، مقیاس فاصلهگذاری، گوشه کارتها و دکمهها
- پالت رنگ: primary، secondary، accent، background، surface، text و …
۴. رسانه و آمار
- لوگو، Favicon، تصویر Hero، تصویر بخش آمار — بلافاصله پس از انتخاب آپلود میشوند
- چیدمان آمار: کنار آمار یا زیر آمار · جایگاه تصویر · مقیاس و گردی
دکمه ذخیره پایین صفحه فقط فونت، رنگها و استایل را ذخیره میکند — تصاویر با انتخاب فایل خودکار ذخیره شدهاند.
Deploy و Build وباپ
پیشنیاز سرور
- CRM روی HTTPS در دسترس باشد (API برای bootstrap و auth)
- Node.js برای build (روی CI یا محلی)
- وبسرور برای فایلهای static (Nginx، Cloudflare Pages، …)
Build
در پوشه webapp/:
npm install
npm run build
خروجی در پوشه webapp/dist/ — همین را روی دامنه وباپ deploy کنید.
فونتها (محلی — بدون Google Fonts)
فونتهای فارسی و انگلیسی داخل CRM در مسیر crm/resources/fonts/ نگهداری میشوند (یکانباخ، وزیرمتن، ایرانیکان، ایران نستعلیق و …). وباپ و رزرو آنلاین فونت را از API سرور CRM میگیرند:
/api/web-app/fonts/{font-key}.css— فایل CSS با@font-face/api/web-app-fonts/…— فایلهای woff/woff2
پنل CRM هم از همین فونتهای محلی استفاده میکند (resources/css/fonts.css). نیازی به اتصال اینترنت یا Google Fonts API نیست.
متغیرهای env (Production)
| متغیر | الزام | توضیح |
|---|---|---|
VITE_CRM_API_URL |
بله | آدرس عمومی CRM — مثال: https://crm.example.com |
VITE_WEB_APP_SLUG |
فقط localhost | با دامنه اختصاصی در پنل پلتفرم معمولاً لازم نیست |
توسعه محلی
cd webapp
npm install
npm run dev
پورت پیشفرض Vite معمولاً 5174 است. CRM باید همزمان در حال اجرا باشد (php artisan serve یا معادل).
دامنه اختصاصی
- در پنل پلتفرم فیلد «دامنه اختصاصی» را پر کنید — مثال:
app.clinic.com - DNS را به سرور وباپ اشاره دهید
VITE_CRM_API_URLرا هنگام build روی آدرس CRM تنظیم کنید- فایلهای
distرا deploy کنید — SPA باید fallback بهindex.htmlداشته باشد
CORS: CRM باید درخواست از دامنه وباپ را بپذیرد. در محیط production معمولاً از همان تنظیمات سرور Laravel/CORS استفاده میشود — اگر bootstrap خطای شبکه داد، با مدیر فنی بررسی کنید.
تنظیمات عمومی Booking
مسیر: /settings/booking
| تنظیم | توضیح |
|---|---|
| فعالسازی رزرو | روشن/خاموش کل Booking |
| مدت Hold موقت Slot | دقیقه — زمان رزرو موقت قبل از پرداخت/تأیید (پیشفرض: ۵) |
| فرم قبل از رزرو | غیرفعال / چند فیلد / کل فرم پذیرش |
| پرداخت ویزیت | فعال/غیرفعال — درگاهها |
| پیامک تأیید | پنل SMS، قالب، پیشنمایش |
| لینک اختصاصی منشی | تولید لینک برای هر منشی |
| نمایش خدمات | فعال/غیرفعال هر دسته (مثلاً لیزر) |
| ظاهر | رنگ، لوگو — مستقل از WebApp |
تعطیلی پزشک: مرخصی و تعطیلی هر پزشک از منوی پزشکان ← تایم کاری و تعطیلی ثبت میشود. این تعطیلیها مستقیماً روی تقویم Booking و Slotهای خالی اثر میگذارند — روز/بازه در تعطیلی غیرقابل انتخاب است.
پس از رزرو موفق: اگر بیمار پرونده نداشت، پرونده ایجاد میشود. پذیرش (Admission) ایجاد نمیشود — فقط نوبت (Appointment) ثبت میشود.
درگاههای پرداخت Booking
مسیر: /settings/booking?tab=payment
درگاههای پشتیبانیشده: زرینپال و زیبال. هر درگاه با لوگوی رسمی در صفحه انتخاب پرداخت نمایش داده میشود.
| درگاه | فیلدهای CRM | مستندات رسمی |
|---|---|---|
| Merchant ID (۳۶ کاراکتر) · فعال/غیرفعال · حالت Sandbox | zarinpal.com/docs | |
Merchant · فعال/غیرفعال · حالت تست (zibal) |
help.zibal.ir/IPG/API |
- اگر فقط یک درگاه فعال باشد، کاربر مستقیماً به همان هدایت میشود
- اگر چند درگاه فعال باشد، کاربر درگاه را با لوگوی رسمی انتخاب میکند
- Callback URL هر درگاه:
https://crm.example.com/api/booking/payments/callback/{gateway}
راهاندازی درگاه زرینپال
- در zarinpal.com ثبتنام و احراز هویت پذیرنده
- از پنل زرینپال، Merchant ID (کد ۳۶ کاراکتری درگاه) را دریافت کنید
- در CRM: تنظیمات رزرو آنلاین ← تب پرداخت ← زرینپال را فعال و Merchant ID را وارد کنید
- برای تست: حالت Sandbox را روشن کنید — API:
sandbox.zarinpal.com - Callback URL را در پنل زرینپال (در صورت نیاز) مطابق آدرس CRM تنظیم کنید
جریان API: POST /pg/v4/payment/request.json → هدایت به payment.zarinpal.com/pg/StartPay/{Authority} → بازگشت با Authority و Status=OK → POST /pg/v4/payment/verify.json
راهاندازی درگاه زیبال
- در zibal.ir ثبتنام و درخواست درگاه اینترنتی
- پس از تأیید شاپرک، Merchant اختصاصی دریافت کنید (برای تست:
zibal) - در CRM: تنظیمات رزرو آنلاین ← تب پرداخت ← زیبال را فعال و Merchant را وارد کنید
- Callback URL: آدرس CRM — پس از پرداخت،
trackIdوsuccessبرمیگردد - تأیید نهایی با
POST https://gateway.zibal.ir/v1/verify
جریان API: POST /v1/request → هدایت به https://gateway.zibal.ir/start/{trackId} → بازگشت به callback → POST /v1/verify با trackId
انتقال داده از CRM قدیمی
این بخش برای مدیر سیستم یا پشتیبانی فنی است — انتقال از نسخه قدیمی CRM (MySQL + فایلهای آپلود) به ساختار جدید ۱st Solutions.
فرآیند انتقال در دو فاز انجام میشود:
- بارگذاری بکاپ SQL در یک دیتابیس موقت (اتصال
legacy) - Import دادهها از دیتابیس legacy به دیتابیس اصلی CRM (اتصال
DB_CONNECTION)
برای انتقال کامل معمولاً یک دستور کافی است؛ برای تکرار یا رفع نقص، میتوانید مراحل را جداگانه اجرا کنید.
خلاصه سریع — انتقال کامل
از پوشه crm در ترمینال:
php artisan clinic:migrate-legacy-data ^
--sql="C:\path\to\backup.sql" ^
--uploads="C:\path\to\uploads" ^
--fresh-target ^
--force
در PowerShell از ^ برای ادامه خط استفاده کنید. در bash از \ استفاده کنید.
پیشنیازها
- فایل بکاپ SQL از CRM قدیمی (مثلاً
drnegahi.sql) - پوشه فایلهای آپلود legacy (اسناد پذیرش، رسید پرداخت و …) — در صورت وجود
- PHP، Composer و MySQL/MariaDB روی سرور یا محیط توسعه
- دسترسی به ترمینال در پوشه پروژه CRM
- فضای کافی روی دیسک برای کپی فایلها به
storage/app/public
هشدار: گزینه --fresh-target تمام جداول دیتابیس هدف را پاک و از نو میسازد. فقط روی دیتابیس خالی یا محیط تست استفاده کنید — نه روی دیتابیس production که داده زنده دارد.
دو دیتابیس جدا
| اتصال | نقش | نام پیشفرض |
|---|---|---|
DB_* | دیتابیس هدف — CRM جدید | first (یا مقدار DB_DATABASE) |
LEGACY_DB_* | دیتابیس موقت — بکاپ قدیمی | crm_legacy |
تنظیمات .env
در فایل crm/.env این مقادیر را تنظیم کنید:
# دیتابیس هدف (CRM جدید)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=first
DB_USERNAME=root
DB_PASSWORD=
# دیتابیس موقت legacy (بکاپ قدیمی)
LEGACY_DB_HOST=127.0.0.1
LEGACY_DB_PORT=3306
LEGACY_DB_DATABASE=crm_legacy
LEGACY_DB_USERNAME=root
LEGACY_DB_PASSWORD=
# مسیر پوشه uploads قدیمی (اختیاری — میتوان با --uploads هم داد)
LEGACY_UPLOADS_PATH=C:\path\to\legacy\uploads
# آدرس پایه رسانه legacy (برای portfolio و موارد وابسته به URL)
LEGACY_MEDIA_BASE_URL=https://example-old-crm.com
اگر LEGACY_UPLOADS_PATH تنظیم نشود، دادههای متنی import میشوند اما فایلهای اسناد پذیرش کپی نمیشوند.
بعد از تنظیم env، یکبار migrationهای CRM را اجرا کنید (اگر از --fresh-target استفاده نمیکنید):
php artisan migrate --force
php artisan storage:link
دستورات انتقال
۱. انتقال کامل (پیشنهادی)
SQL را در legacy بارگذاری میکند، در صورت نیاز دیتابیس هدف را fresh میکند، سپس همه مراحل import را اجرا میکند:
php artisan clinic:migrate-legacy-data --sql="C:\path\backup.sql" --uploads="C:\path\uploads" --fresh-target --force
گزینههای مهم
| گزینه | کاربرد |
|---|---|
--sql= | مسیر فایل بکاپ .sql |
--uploads= | مسیر پوشه uploads قدیمی (جایگزین LEGACY_UPLOADS_PATH) |
--fresh-target | اجرای migrate:fresh روی دیتابیس هدف قبل از import |
--seed-target | بعد از fresh، seeder پیشفرض هم اجرا شود (معمولاً لازم نیست) |
--skip-sql-import | بارگذاری SQL را رد کن — legacy از قبل restore شده |
--only=step | فقط مراحل انتخابشده (چندبار قابل تکرار) |
--dry-run | فقط شمارش و گزارش — بدون نوشتن در دیتابیس |
--force | بدون تأیید تعاملی اجرا شود |
--legacy-connection= | نام اتصال legacy (پیشفرض: legacy) |
--connection= | اتصال دیتابیس هدف (پیشفرض: DB_CONNECTION) |
۲. پیشنمایش (dry run)
قبل از import واقعی، حجم داده را ببینید:
php artisan clinic:migrate-legacy-data --sql="C:\path\backup.sql" --dry-run --force
۳. Import جزئی (legacy از قبل restore شده)
وقتی SQL قبلاً در crm_legacy بارگذاری شده:
php artisan clinic:import-legacy --uploads="C:\path\uploads" --only=admission_documents
یا با همان دستور migrate و رد کردن SQL:
php artisan clinic:migrate-legacy-data --skip-sql-import --uploads="C:\path\uploads" --only=patients --only=admissions --force
۴. فقط بارگذاری SQL در legacy
برای restore دستی بکاپ بدون import به هدف:
php artisan clinic:migrate-legacy-data --sql="C:\path\backup.sql" --dry-run --force
# سپس بدون --dry-run و بدون --fresh-target فقط SQL:
php artisan clinic:migrate-legacy-data --sql="C:\path\backup.sql" --force
دستور clinic:import-legacy فقط مرحله import را اجرا میکند و فرض میکند دیتابیس legacy از قبل پر است.
مراحل import (ترتیب اجرا)
مراحل بهصورت خودکار به ترتیب وابستگی اجرا میشوند. با --only= میتوانید یک یا چند مرحله را جداگانه تکرار کنید.
کلید --only | محتوا | جداول legacy (نمونه) |
|---|---|---|
clinics | مجموعهها (کلینیک) | complexes |
users | کاربران CRM و دسترسی به کلینیک | users, complex_user |
roles | نقشها و مجوزها | roles, … |
doctors | پزشکان، برنامه کاری، حساب بانکی | doctors |
consultants | مشاوران (با حفظ IDهای legacy) | consultants |
services | دسته و خدمات | service_categories, services |
patients | بیماران و پروفایل کلینیک | patients, complex_patient |
admissions | دلایل لغو، پذیرشها، خدمات پذیرش | admissions, … |
inventory | انبار، موجودی، گردش | inventory_* |
financial | فاکتورها و پرداختها | invoices, payments |
admission_documents | دسته و فایل اسناد پذیرش | documents |
checklists | چکلیست جراحی | قالب و پاسخها |
forms | طرح فرم پذیرش | form_schemas |
webapp_settings | تنظیمات وباپ از options | options |
faq | سوالات متداول | options |
webapp_users | کاربران وباپ و ارتباط با مشاور | webapp_users |
portfolio | نمونه کارها | دسته و رسانه |
booking_settings | تنظیمات رزرو آنلاین | options |
bookings | نوبتهای رزرو شده | reserved_dates |
رفتارهای ویژه import
- اگر جدول
complexesخالی باشد، کلینیک پیشفرض باid=1و نام ازoptions.site_titleساخته میشود - اگر
complex_patientیاcomplex_userخالی باشد، همه بیماران و کاربران importشده به کلینیک پیشفرض وصل میشوند - IDهای legacy در جدول
import_mapsنگهداری میشوند تا import تکراری idempotent باشد - پذیرشهای legacy با وضعیت pending (status=0) طبق گزارش skip میشوند
- رزروهای گذشته confirmed ممکن است به no-show نگاشت شوند
فایلهای آپلود (اسناد پذیرش)
جدول legacy documents به دستههای اسناد پذیرش و فایلهای جدا در ساختار جدید تبدیل میشود.
مسیر مقصد در CRM جدید
storage/app/public/clinics/{clinicId}/admissions/{admissionId}/documents/{uuid}.ext
URL عمومی: /storage/clinics/... — نیاز به php artisan storage:link
جستجوی فایل در پوشه legacy
اگر مسیر دقیق در JSON فایل نباشد، import در این مسیرها هم جستجو میکند:
- مسیر نسبی همانطور که در legacy ذخیره شده
uploads/admission/{id}/uploads/tmp/default/و زیرپوشههایtmp/*/uploads/payment_documents/*/
انواع سند
| نوع legacy | رفتار در CRM جدید |
|---|---|
| سند پذیرش (Admission) | دسته اسناد پذیرش با فایلهای مرتبط |
| رسید پرداخت (Payment) | دسته مرتبط با پرداخت؛ اگر payment در هدف نباشد → دسته manual |
| چکلیست (Checklist) | دسته با منبع checklist |
فایلهایی که روی دیسک نیستند (مثلاً پوشه tmp/ پاک شده) در گزارش import با دلیل missing_file skip میشوند. برای تکمیل، فایلها را در پوشه uploads قرار دهید و فقط مرحله admission_documents را دوباره اجرا کنید.
php artisan clinic:import-legacy --uploads="C:\path\uploads" --only=admission_documents
بررسی و تأیید بعد از انتقال
در پایان import، جدول شمارش entityها و بخش IMPORT REPORT در خروجی ترمینال نمایش داده میشود.
چکلیست UI
- پنل مدیریت → مجموعهها: کلینیک با نام درست وجود دارد
- کاربران: همه کاربران legacy به کلینیک وصل شدهاند — یکبار logout/login کنید
- بیماران (/patients): تعداد با legacy مطابقت دارد
- پذیرشها: وضعیت، مشاور، خدمات و تاریخها
- حسابداری: جمع فاکتورها و پرداختها
- اسناد پذیرش: باز کردن یک پذیرش و مشاهده فایلها
- مشاوران ↔ وباپ: ارتباط کاربران وباپ با مشاور
- وباپ / Booking: Slug، تنظیمات و نوبتها (در صورت استفاده)
بررسی سریع در دیتابیس (اختیاری)
SELECT COUNT(*) FROM patients;
SELECT COUNT(*) FROM clinic_patient;
SELECT COUNT(*) FROM admissions;
SELECT COUNT(*) FROM admission_documents;
SELECT COUNT(*) FROM clinic_user;
تعداد patients و clinic_patient باید برابر باشد. اگر clinic_patient کمتر بود، مرحله patients را دوباره اجرا کنید.
بعد از import
php artisan storage:link— اگر قبلاً اجرا نشده- تنظیمات مجموعه را در /settings مرور کنید (هویت، مالی، فرم پذیرش)
- در پنل پلتفرم: ماژول لیزر/پذیرش کلاسیک، Slug وباپ و Booking
- یک پذیرش نمونه باز کنید و چاپ / اسناد را تست کنید
عیبیابی مشکلات رایج
| مشکل | علت محتمل | راهحل |
|---|---|---|
| تعداد بیماران در UI کمتر از legacy | فقط بیماران دارای رابطه clinic_patient نمایش داده میشوند |
اجرای مجدد --only=patients — import خودکار لینک همه بیماران را میسازد |
| کاربر بعد از import به کلینیک دسترسی ندارد | جدول complex_user در legacy خالی بوده |
اجرای مجدد --only=users یا اتصال دستی در پنل مدیریت |
خطای PrintConfig / current_clinic null |
session قدیمی بعد از fresh import | logout/login — یا انتخاب مجدد کلینیک از منوی کاربر |
| اسناد import نشدند | مسیر uploads تنظیم نشده یا فایل روی دیسک نیست | تنظیم --uploads= و re-import مرحله admission_documents |
| مشاور وباپ اشتباه است | ID مشاور در import قبلی overwrite شده بود | اجرای مجدد --only=consultants و --only=webapp_users روی دیتابیس تازه |
| Memory exhausted هنگام import اسناد | فایلهای بزرگ | نسخه فعلی بهصورت chunk پردازش میکند — PHP memory_limit را افزایش دهید |
SQL file not found |
مسیر اشتباه یا فاصله در path | مسیر کامل درون کوتیشن: --sql="C:\full\path\backup.sql" |
| Legacy connection not configured | اتصال legacy در config نیست |
مقادیر LEGACY_DB_* را در .env تنظیم و php artisan config:clear |
دلایل skip در گزارش import
| کد گزارش | معنی |
|---|---|
missing_file | فایل فیزیکی در پوشه uploads پیدا نشد |
missing_uploads_root | مسیر uploads تنظیم نشده |
admission_not_imported | پذیرش والد import نشده |
missing_payment_to_manual | پرداخت نبود — سند به دسته manual رفت |
inactive_patient | بیمار غیرفعال در legacy |
pending_status | پذیرش ناتمام (status=0) |
duplicate_constraint | رکورد تکراری — معمولاً import قبلی انجام شده |
برای import مجدد روی دیتابیس تمیز، از --fresh-target استفاده کنید. برای تکمیل جزئی بدون پاک کردن هدف، فقط مرحله مورد نیاز را با --only= و --skip-sql-import اجرا کنید.
شروع کار — اتاق لیزر
منو ← «اتاق لیزر» — /laser-room
- «فعالسازی ماژول لیزر» روشن باشد
- «اجرای جلسه لیزر» و مراحل مورد نیاز فعال باشند
- شیفت صبح/عصر در /settings?tab=laser-shifts تنظیم شده باشد
- اپراتور با دستگاههای مجاز و (در صورت نیاز) شیفت کاری تعریف شده باشد
- دستگاهها و نواحی با قیمت شات تعریف شده باشند
- یک بیمار و پذیرش لیزر ثبت شده باشد
در پنل جزئیات: جلسات · ارزیابی پوست · برنامه درمان · مراقبت پس از درمان · اسناد پذیرش · ثبت جلسه لیزر (بسته به مراحل فعال).
شروع کار — پذیرش کلاسیک
- «پذیرش کلاسیک» و «جریان پذیرش» فعال
- فرم پذیرش طراحی شده (در صورت فعال بودن پذیرش کلاسیک)
- پزشکان، مشاوران و خدمات ثبت شده
- تنظیمات ویزیت، اسناد، چکلیست، دلایل لغو
- در صورت نیاز به فاکتور: «فعالسازی بخش مالی» و حسابهای پیشفرض
منو: «پذیرشها» · «اتاق پزشک» · «اتاق عمل»
چکلیست نهایی
پنل مدیریت
- مجموعه ساخته شد
- کاربران متصل شدند
- جریان پذیرش و جریان لیزر ذخیره شد
تنظیمات
- هویت سایت
- فرم پذیرش (پذیرش کلاسیک)
- استایل پرینت و سربرگ
- فیلدهای پرونده و کد پذیرش
- تنظیمات مالی و حسابهای پیشفرض
- حقوق و مزایا (تب تنظیمات)
وب اپلیکیشن (در صورت استفاده)
- فعالسازی و Slug در پنل پلتفرم
- دامنه یا env محلی تنظیم شده
- build و deploy انجام شده
- محتوا (Hero، دکمهها، شمارندهها)
- ظاهر (تم، Hero، استایل social و دکمهها)
- لوگو، favicon، تصویر Hero
- SEO و robots
- ورود OTP / Google (در صورت نیاز)
- FAQ و نمونه کارها (در صورت نیاز)
آماده بهرهبرداری
- پزشکان، مشاوران و خدمات (کلاسیک) یا تنظیمات لیزر
- یک پذیرش آزمایشی
- یک دوره حقوق آزمایشی (اختیاری)
- در صورت انتقال از CRM قدیمی: چکلیست تأیید import