feat: Refactor clinic-related functions and tests, removing doctor intro logic

This commit is contained in:
hamed
2026-08-08 20:26:17 +03:30
parent c118791911
commit 72beb8b591
4 changed files with 60 additions and 65 deletions
+33 -22
View File
@@ -22,34 +22,45 @@ function hash(...parts) {
// می‌شدند و ایندکس منفی به undefined می‌رسید.
const pick = (variants, seed) => variants[(seed >>> 0) % variants.length];
// متن‌ها عمداً ریتم یکنواخت ندارند: بعضی جمله‌ها کوتاه و خبری‌اند و بعضی بلندتر.
// حرف‌های ربطِ قالبی («به همین دلیل»، «در نهایت»، «لازم به ذکر است») و ادعاهای
// تبلیغاتیِ بی‌پشتوانه کنار گذاشته شده‌اند؛ هر جمله به چیزی اشاره می‌کند که واقعاً
// روی همین صفحه هست: فیلدهای پروفایل، تقویم نوبت، محل‌های پذیرش، هزینه و لغو.
function openingVariants(specialty, city) {
return [
`اگر به دنبال متخصص ${specialty} در ${city} هستید، این صفحه فهرست کاملی از پزشکان فعال این حوزه را در اختیار شما می‌گذارد. هر پروفایل شامل تخصص‌ها، سوابق، محل مطب و امتیاز واقعی بیماران است تا بتوانید پیش از رزرو نوبت، انتخاب آگاهانه‌تری داشته باشید.`,
`انتخاب پزشک ${specialty} در ${city} وقتی ساده‌تر می‌شود که همهٔ گزینه‌ها را یک‌جا و با اطلاعات یکسان ببینید. در این صفحه، متخصصان ${specialty} شهر ${city} همراه با نشانی مطب، ساعات پذیرش و بازخورد مراجعان گردآوری شده‌اند.`,
`دسترسی به متخصص ${specialty} در ${city} دیگر نیازی به تماس‌های پی‌درپی و مراجعهٔ حضوری برای گرفتن نوبت ندارد. فهرست زیر پزشکان این تخصص را در ${city} نشان می‌دهد؛ از هر پروفایل می‌توانید مستقیم و آنلاین نوبت بگیرید.`,
`این صفحه به معرفی پزشکان ${specialty} در ${city} اختصاص دارد. هدف، کوتاه‌کردن مسیر میان «جست‌وجوی یک متخصص خوب» و «داشتن نوبت قطعی» است؛ بنابراین اطلاعات هر پزشک به‌شکلی چیده شده که مقایسه میان گزینه‌ها سریع انجام شود.`,
`پزشکان ${specialty} ${city} اینجا فهرست شده‌اند. هر کارت نام پزشک، درجهٔ تخصصی، محل پذیرش و اولین نوبت آزادش را نشان می‌دهد. اگر دنبال پزشک مشخصی هستید، کادر جست‌وجوی بالای صفحه نام پزشک و نام تخصص را با هم می‌گیرد. فیلترها هم هست: جنسیت پزشک، درجهٔ علمی، و اینکه فقط پزشکان دارای نوبت آزاد را ببینید.`,
`این فهرست متخصصان ${specialty} را در ${city} نشان می‌دهد. ترتیب نمایش تصادفی نیست؛ پزشکانی که هم‌اکنون نوبت خالی دارند بالاتر می‌آیند و بعد از آن امتیاز بیماران تعیین‌کننده است. روی هر کارت، تخصص و محل مطب پیداست، پس لازم نیست برای مقایسهٔ دو پزشک دو صفحه باز کنید. صفحه‌بندی هم دارد، پس فهرست بلند در یک صفحه فشرده نمی‌شود.`,
`برای پیدا کردن متخصص ${specialty} در ${city} از همین صفحه شروع کنید. کارت هر پزشک تخصص، محل پذیرش، امتیاز مراجعان و وضعیت نوبت‌دهی را کنار هم می‌گذارد. پزشکی که نوبت آزاد ندارد هم نمایش داده می‌شود، با برچسب مشخص، تا بدانید گزینه هست ولی فعلاً در دسترس نیست. فیلترها روی نشانی صفحه ثبت می‌شوند، پس لینک همین نما را می‌توانید نگه دارید.`,
`فهرست زیر پزشکان ${specialty} شهر ${city} است. آنچه در هر کارت می‌بینید از پروفایل خودِ پزشک می‌آید: درجهٔ تخصصی، محل یا محل‌های پذیرش، و امتیازی که بیماران قبلی ثبت کرده‌اند. برای دیدن ساعات کاری و تقویم نوبت، وارد پروفایل شوید. اگر ${specialty} زیرشاخه دارد، نوار بالای صفحه آن‌ها را نشان می‌دهد و می‌توانید فهرست را به یکی از زیرشاخه‌ها محدود کنید یا روی کل گروه بمانید.`,
`متخصص ${specialty} در ${city} کم نیست و همین انتخاب را سخت می‌کند. این صفحه اطلاعات همه را به یک شکل نشان می‌دهد تا مقایسه ممکن باشد: تخصص، محل مطب، امتیاز، و اینکه نزدیک‌ترین نوبت خالی کِی است. جست‌وجو با نام تخصص هم کار می‌کند، نه فقط نام پزشک؛ پزشکی که چند تخصص دارد با هر کدامشان پیدا می‌شود.`,
`اگر تازه دنبال پزشک ${specialty} در ${city} می‌گردید، از فهرست پایین شروع کنید. هر کارت خلاصه‌ای از پروفایل است و با یک کلیک به صفحهٔ کامل پزشک می‌رسید. آنجا محل‌های پذیرش، ساعات کاری هر محل و تقویم نوبت‌های خالی را می‌بینید. پزشکی که فعلاً نوبت‌دهی‌اش خاموش است هم در فهرست می‌ماند، فقط با برچسب مشخص.`,
];
}
function bodyVariants(specialty, city, doctorCount) {
const countPhrase =
doctorCount > 0
? `در حال حاضر ${doctorCount} پزشک ${specialty} در ${city} در این سامانه ثبت شده‌اند`
: `فهرست پزشکان ${specialty} در ${city} به‌طور مداوم به‌روزرسانی می‌شود`;
? `${doctorCount} پزشک ${specialty} در ${city} روی این سامانه پروفایل دارند`
: `فهرست پزشکان ${specialty} در ${city} در حال تکمیل است`;
return [
`${countPhrase}. برای هر پزشک، مواردی مانند مدرک و درجهٔ تخصصی، کد نظام پزشکی، خدمات قابل ارائه و موقعیت مکانی مطب نمایش داده می‌شود. امتیازها و نظرها از مراجعان واقعی همان پزشک جمع‌آوری شده‌اند، نه از منابع عمومی؛ به همین دلیل تصویر دقیق‌تری از کیفیت خدمات به دست می‌دهند.`,
`${countPhrase} و اطلاعات آن‌ها به‌صورت دوره‌ای بازبینی می‌شود. تفاوت این فهرست با جست‌وجوی ساده در آن است که هر رکورد به یک پروفایل کامل وصل است: خدمات، محل‌های پذیرش، ساعات کاری هر محل و امکان رزرو مستقیم. نتیجه آنکه مقایسهٔ چند پزشک در چند دقیقه ممکن می‌شود.`,
`${countPhrase}. برخی از این پزشکان بیش از یک محل پذیرش دارند — مطب شخصی و یک یا چند کلینیک — و ساعات کاری هر محل جداگانه اعلام شده است. هنگام رزرو، محل مراجعه را خودتان انتخاب می‌کنید تا نوبتی که می‌گیرید با برنامهٔ رفت‌وآمد شما هماهنگ باشد.`,
`${countPhrase}. کد نظام پزشکی هر پزشک روی پروفایلش درج شده و می‌توانید آن را جداگانه راستی‌آزمایی کنید. امتیازها از بیمارانی می‌آید که از همین سامانه نوبت گرفته‌اند، نه از نظرسنجی عمومی. پزشکی که هنوز نظری برایش ثبت نشده، امتیاز خالی نشان می‌دهد؛ عدد ساختگی جایگزینش نمی‌شود.`,
`${countPhrase} و اطلاعاتشان دوره‌ای بازبینی می‌شود. بخشی از این پزشکان بیش از یک محل پذیرش دارند: مطب شخصی و یک یا چند کلینیک. ساعات کاری هر محل جداست و هنگام رزرو خودتان انتخاب می‌کنید کجا مراجعه کنید. این را در تقویم نوبت هم می‌بینید، چون بازه‌های خالی هر محل فرق دارد.`,
`${countPhrase}. خدماتی که هر پزشک ارائه می‌دهد روی پروفایلش فهرست شده — از ویزیت ساده تا اقدام‌های تخصصی‌تر. هزینهٔ هر خدمت پیش از تأیید نهایی نوبت نمایش داده می‌شود، پس لازم نیست برای پرسیدن قیمت تماس بگیرید. اگر پزشک در کلینیک پذیرش داشته باشد، بیمه‌های طرف قرارداد آن مرکز روی صفحهٔ خودِ کلینیک آمده است.`,
`${countPhrase}. زیرتخصص‌ها هم جدا مشخص شده‌اند. اگر روی صفحهٔ یک گروه تخصصی هستید، پزشکانی که فقط در زیرشاخه‌های آن کار می‌کنند هم در همین فهرست می‌آیند؛ برای محدود کردن، از فهرست زیرتخصص‌های بالای صفحه استفاده کنید. پزشکی که چند زیرتخصص دارد، همه را روی پروفایلش نشان می‌دهد نه فقط یکی را.`,
`${countPhrase}. موقعیت مطب هر پزشک روی نقشه هم قابل دیدن است. اگر چند گزینه شبیه هم بودند، معمولاً همین فاصله و ساعت کاری تعیین‌کننده می‌شود. برای پزشکانی که در کلینیک پذیرش دارند، صفحهٔ خودِ کلینیک هم نشانی و شمارهٔ تماس را نشان می‌دهد و مسیر رسیدن روشن‌تر است.`,
];
}
function closingVariants(specialty, city) {
return [
`پس از انتخاب پزشک، تقویم نوبت‌های خالی نمایش داده می‌شود و رزرو در همان لحظه قطعی می‌گردد؛ پیامک تأیید نیز برایتان ارسال خواهد شد. اگر برنامه‌تان تغییر کرد، لغو نوبت از بخش نوبت‌های من در حساب کاربری ممکن است و آن بازهٔ زمانی بلافاصله برای بیمار دیگری آزاد می‌شود. اگر تخصص موردنظرتان ${specialty} نیست، از فهرست تخصص‌های ${city} می‌توانید حوزهٔ درمانی دیگری را دنبال کنید و همان مسیر رزرو را طی کنید.`,
`نوبت‌گیری در همین صفحه انجام می‌شود: تاریخ و ساعت خالی را می‌بینید، انتخاب می‌کنید و تأیید نهایی را دریافت می‌کنید. هزینهٔ هر خدمت پیش از تأیید نمایش داده می‌شود تا انتخابتان با اطلاع کامل انجام شود. برای حوزه‌های درمانی دیگر در ${city}، صفحهٔ تخصص‌ها فهرست کامل رشته‌ها را در اختیارتان می‌گذارد و از هر رشته می‌توانید مستقیم به پزشکان همان حوزه برسید.`,
`تمام مراحل — از مقایسهٔ پزشکان ${specialty} تا دریافت تأییدیهٔ نوبت — آنلاین و بدون مراجعهٔ حضوری طی می‌شود؛ نیازی به تماس تلفنی در ساعات اداری نیست و رزرو شبانه‌روزی انجام می‌گیرد. کلینیک‌ها و مراکز درمانی ${city} نیز صفحهٔ اختصاصی خود را دارند و اگر ترجیح می‌دهید ابتدا مرکز درمانی را انتخاب کنید، از همان مسیر قابل رزرو هستند.`,
`برای رزرو کافی است روی پروفایل پزشک بزنید و از میان نوبت‌های خالی یکی را انتخاب کنید؛ تأییدیه بلافاصله صادر و پیامک می‌شود. سابقهٔ نوبت‌های شما در حساب کاربری باقی می‌ماند و مراجعهٔ بعدی به همان پزشک سریع‌تر انجام می‌شود. اگر ترجیح می‌دهید بر اساس مرکز درمانی جست‌وجو کنید، فهرست کلینیک‌های ${city} گزینهٔ مناسبی برای شروع است.`,
`رزرو داخل پروفایل انجام می‌شود: تقویم نوبت‌های خالی را می‌بینید، یک بازه را انتخاب می‌کنید و تأییدیه پیامک می‌شود. اگر برنامه‌تان به هم خورد، لغو از بخش نوبت‌های من ممکن است و آن بازه بلافاصله برای بیمار دیگری آزاد می‌شود. سابقهٔ نوبت‌ها هم در همان حساب می‌ماند.`,
`نوبت‌گیری شبانه‌روزی است. لازم نیست منتظر ساعت اداری بمانید یا با منشی مطب تماس بگیرید. بعد از تأیید، نوبت در حساب کاربری‌تان ثبت می‌ماند و دفعهٔ بعد که به همان پزشک مراجعه کنید، کارتان کوتاه‌تر است. اگر پزشک چند محل پذیرش دارد، محلی که انتخاب کرده‌اید هم روی همان نوبت ثبت می‌شود.`,
`اگر تخصص موردنظرتان ${specialty} نبود، فهرست تخصص‌های ${city} رشته‌های دیگر را نشان می‌دهد و مسیر رزرو همه‌جا یکی است. برای شروع از سمت مرکز درمانی به‌جای پزشک هم صفحهٔ کلینیک‌های ${city} هست؛ آنجا پزشکان هر مرکز کنار هم آمده‌اند و از همان صفحه هم می‌شود نوبت گرفت.`,
`پیش از تأیید، هزینهٔ خدمتی که انتخاب کرده‌اید نمایش داده می‌شود. تأییدیه بلافاصله پیامک می‌گردد و شمارهٔ نوبت در حساب کاربری می‌ماند. لغو هم از همان‌جا انجام می‌شود. اگر پزشک برای خدمت خاصی مدت‌زمان متفاوتی تعریف کرده باشد، طول نوبت هم پیش از تأیید مشخص است.`,
`پزشکانی که در کلینیک پذیرش دارند از صفحهٔ همان کلینیک هم قابل رزروند. اگر ترجیح می‌دهید اول مرکز درمانی را انتخاب کنید و بعد پزشک را، فهرست کلینیک‌های ${city} نقطهٔ شروع دیگری است. نتیجهٔ رزرو در هر دو مسیر یکی است و تأییدیه به همان شکل پیامک می‌شود.`,
`یک نکتهٔ کاربردی: اگر پزشک بیش از یک محل پذیرش دارد، پیش از انتخاب بازه محل را تعیین کنید؛ نوبت‌های خالی هر محل جدا محاسبه می‌شود. تأییدیه پیامک می‌شود و لغو تا پیش از زمان نوبت امکان دارد. بازه‌ای که لغو کنید همان لحظه در فهرست نوبت‌های آزاد برمی‌گردد.`,
];
}
@@ -69,13 +80,13 @@ export function buildDoctorFaq(doctorName, specialtyName, cityName) {
return [
{
question: `چگونه از ${who} نوبت بگیرم؟`,
answer: `از همین صفحه، محل مراجعه و سپس تاریخ و ساعت خالی موردنظرتان را انتخاب کنید. رزرو در همان لحظه قطعی می‌شود و تأییدیه برایتان پیامک خواهد شد.`,
answer: `اول محل مراجعه را از همین صفحه انتخاب کنید، بعد از تقویم، تاریخ و ساعتی که خالی است. رزرو با تأیید شما قطعی می‌شود و پیامک تأییدیه می‌آید. نیازی به تماس تلفنی نیست.`,
},
...(specialtyName
? [
{
question: `تخصص ${who} چیست؟`,
answer: `${who} در حوزهٔ ${specialtyName} فعالیت می‌کند. فهرست کامل خدمات قابل ارائه در همین صفحه آمده است.`,
answer: `${who} در حوزهٔ ${specialtyName} کار می‌کند. اگر تخصص دیگری هم داشته باشد، بالای همین صفحه کنار نامش آمده. خدماتی که ارائه می‌دهد پایین‌تر فهرست شده است.`,
},
]
: []),
@@ -83,13 +94,13 @@ export function buildDoctorFaq(doctorName, specialtyName, cityName) {
? [
{
question: `مطب ${who} در کدام شهر است؟`,
answer: `محل یا محل‌های پذیرش ${who} در ${cityName} به همراه نشانی دقیق و ساعات کاری هر محل، در بخش موقعیت مکانی همین صفحه نمایش داده شده است.`,
answer: `در ${cityName}. نشانی دقیق و ساعات کاری در بخش موقعیت مکانی همین صفحه آمده و اگر بیش از یک محل پذیرش داشته باشد، هر کدام جداگانه با ساعت کاری خودش فهرست شده است.`,
},
]
: []),
{
question: `امکان لغو نوبت وجود دارد؟`,
answer: `بله. از بخش نوبت‌های من در حساب کاربری‌تان می‌توانید نوبت را لغو کنید؛ لغو زودهنگام آن بازهٔ زمانی را برای بیمار دیگری آزاد می‌کند.`,
answer: `بله، از بخش نوبت‌های من در حساب کاربری. هرچه زودتر لغو کنید آن بازه سریع‌تر آزاد می‌شود و بیمار دیگری می‌تواند رزروش کند.`,
},
];
}
@@ -111,22 +122,22 @@ export function buildSpecialtyFaq(
return [
{
question: `چطور می‌توان از متخصص ${specialtyName} در ${place} نوبت گرفت؟`,
answer: `از فهرست همین صفحه پزشک موردنظرتان را انتخاب کنید، وارد پروفایل او شوید و از تقویم نوبت‌های خالی، تاریخ و ساعت دلخواه را ثبت کنید. رزرو در همان لحظه قطعی می‌شود و تأییدیه برایتان پیامک می‌شود.`,
answer: `از فهرست همین صفحه پزشک را انتخاب کنید و وارد پروفایلش شوید. آنجا تقویم نوبت‌های خالی را می‌بینید؛ یک بازه را بزنید و تأیید کنید. تأییدیه همان لحظه پیامک می‌شود. اگر پزشک چند محل پذیرش دارد، اول محل را انتخاب کنید چون نوبت‌های خالی هر محل جداست.`,
},
{
question: `چند پزشک ${specialtyName} در ${place} در دسترس است؟`,
answer:
doctorCount > 0
? `در حال حاضر ${doctorCount} پزشک ${specialtyName} در ${place} در این سامانه ثبت شده‌اند. این عدد با افزوده‌شدن پزشکان جدید به‌روزرسانی می‌شود.`
: `فهرست پزشکان ${specialtyName} در ${place} در حال تکمیل است و به‌مرور پزشکان جدید به آن افزوده می‌شوند.`,
? `${doctorCount} پزشک ${specialtyName} در ${place} روی این سامانه پروفایل دارند. همهٔ آن‌ها لزوماً همیشه نوبت آزاد ندارند؛ کارت هر پزشک وضعیت نوبت‌دهی‌اش را نشان می‌دهد.`
: `هنوز پزشکی با تخصص ${specialtyName} در ${place} روی سامانه ثبت نشده. می‌توانید از فهرست تخصص‌ها حوزهٔ نزدیک‌تری را ببینید یا شهر دیگری را امتحان کنید.`,
},
{
question: `هزینهٔ ویزیت متخصص ${specialtyName} چقدر است؟`,
answer: `هزینهٔ ویزیت به نوع خدمت، درجهٔ تخصصی پزشک و پوشش بیمه بستگی دارد. مبلغ هر خدمت پیش از تأیید نهایی نوبت، در همان صفحهٔ رزرو نمایش داده می‌شود.`,
answer: `عدد ثابتی ندارد و به خدمتی که انتخاب می‌کنید، درجهٔ تخصصی پزشک و بیمه‌ای که دارید بستگی دارد. مبلغ پیش از تأیید نهایی روی همان صفحهٔ رزرو نمایش داده می‌شود، پس قبل از قطعی‌شدن نوبت می‌دانید چقدر است.`,
},
{
question: `اگر نتوانم در زمان نوبت مراجعه کنم چه کنم؟`,
answer: `از بخش نوبت‌های من در حساب کاربری‌تان می‌توانید نوبت را لغو کنید. لغو زودهنگام باعث می‌شود آن بازهٔ زمانی برای بیمار دیگری آزاد شود.`,
answer: `از بخش نوبت‌های من در حساب کاربری‌تان نوبت را لغو کنید. هرچه زودتر لغو کنید، آن بازه سریع‌تر در فهرست نوبت‌های آزاد برمی‌گردد و بیمار دیگری می‌تواند رزروش کند.`,
},
];
}