bugfix: appointment hours now use the client timezone on UTC servers.

Logical API errors throw stable codes so users see translated messages instead of a generic bad request.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-19 01:43:50 +03:30
parent d6958b2e48
commit 80167c622c
38 changed files with 833 additions and 392 deletions

View File

@@ -1081,6 +1081,101 @@
"VALIDATION_FIELD_REQUIRED": "لطفاً همه فیلدهای الزامی را پر کنید.",
"VALIDATION_LANGUAGE_INVALID": "زبان پشتیبانی‌شده انتخاب کنید.",
"VALIDATION_INVALID_REQUEST": "درخواست حاوی داده نامعتبر است.",
"VALIDATION_TIMEZONE_INVALID": "منطقه زمانی شما مشخص نشد. صفحه را تازه‌سازی کنید و دوباره تلاش کنید.",
"APPOINTMENT_INVALID_TIME": "زمان شروع یا پایان نوبت نامعتبر است.",
"APPOINTMENT_END_BEFORE_START": "زمان پایان باید بعد از زمان شروع باشد.",
"APPOINTMENT_TOO_LONG": "مدت نوبت نمی‌تواند بیش از ۲۴ ساعت باشد.",
"APPOINTMENT_IN_PAST": "نمی‌توانید نوبت در گذشته ثبت کنید.",
"APPOINTMENT_INVALID_RANGE": "بازه تاریخ نامعتبر است.",
"APPOINTMENT_INVALID_RANGE_ORDER": "پایان بازه باید بعد از شروع باشد.",
"APPOINTMENT_INVALID_DATE": "تاریخ انتخاب‌شده نامعتبر است.",
"APPOINTMENT_PROVIDER_NOT_MEMBER": "این ارائه‌دهنده عضو سازمان نیست.",
"APPOINTMENT_PROVIDER_INACTIVE": "این ارائه‌دهنده عضو فعال پرسنل نیست.",
"APPOINTMENT_PROVIDER_NO_TREATMENT_EDIT": "این ارائه‌دهنده نمی‌تواند نوبت درمان بپذیرد.",
"APPOINTMENT_PROVIDER_NO_WORKING_HOURS": "برای این ارائه‌دهنده ساعات کاری تعریف نشده است.",
"APPOINTMENT_PROVIDER_NOT_WORKING_DAY": "این ارائه‌دهنده در روز انتخاب‌شده کار نمی‌کند.",
"APPOINTMENT_OUTSIDE_WORKING_HOURS": "این زمان خارج از ساعات کاری ارائه‌دهنده است.",
"APPOINTMENT_NOT_FOUND": "نوبت یافت نشد.",
"APPOINTMENT_NOT_PROVIDER": "شما ارائه‌دهنده این نوبت نیستید.",
"PATIENT_NOT_FOUND": "بیمار یافت نشد.",
"WORKING_HOURS_INVALID": "ساعات کاری نامعتبر است. هم‌پوشانی شیفت‌ها را بررسی کنید.",
"WORKING_HOURS_OWNER_NOT_ALLOWED": "ساعات کاری مالک را از تنظیمات حساب تنظیم کنید.",
"WORKING_HOURS_CONFLICTS_WITH_APPOINTMENTS": "این ساعات با نوبت‌های آینده تداخل دارد. ابتدا آن نوبت‌ها را تغییر دهید یا حذف کنید.",
"STAFF_UNKNOWN_PERMISSIONS": "یک یا چند دسترسی انتخاب‌شده نامعتبر است.",
"STAFF_NO_SUBSCRIPTION": "قبل از افزودن پرسنل یک طرح انتخاب کنید.",
"STAFF_SEAT_LIMIT": "در طرح شما صندلی خالی نیست. یک عضو را غیرفعال کنید یا طرح را ارتقا دهید.",
"STAFF_INVITE_OWNER_EMAIL": "مالک سازمان از قبل عضو است.",
"STAFF_ALREADY_MEMBER": "این فرد از قبل عضو است.",
"STAFF_OWNER_NO_INVITE_LINK": "مالک از لینک دعوت استفاده نمی‌کند.",
"STAFF_ALREADY_ACCEPTED": "این عضو دعوتنامه را پذیرفته است.",
"STAFF_INVITE_MISSING": "دعوتنامه‌ای برای این عضو یافت نشد.",
"STAFF_INVITE_ALREADY_ACCEPTED": "این دعوتنامه قبلاً پذیرفته شده است.",
"STAFF_INVITE_INVALID": "این دعوتنامه دیگر معتبر نیست.",
"STAFF_INVITE_REVOKED": "این دعوتنامه لغو شده است.",
"STAFF_INVITE_EXPIRED": "این دعوتنامه منقضی شده است.",
"STAFF_ALREADY_ACTIVE": "این عضو از قبل فعال است.",
"STAFF_ALREADY_DISABLED": "این عضو از قبل غیرفعال یا در انتظار است.",
"STAFF_CANNOT_DISABLE_SELF": "نمی‌توانید دسترسی خود را غیرفعال کنید.",
"STAFF_MEMBER_NOT_FOUND": "عضو پرسنل یافت نشد.",
"STAFF_CANNOT_EDIT_OWNER": "عضویت مالک را نمی‌توان از اینجا ویرایش کرد.",
"STAFF_CANNOT_ENABLE_OWNER": "مالک سازمان را نمی‌توان این‌گونه فعال کرد.",
"STAFF_CANNOT_DISABLE_OWNER": "مالک سازمان را نمی‌توان غیرفعال کرد.",
"STAFF_CANNOT_REMOVE_OWNER": "مالک سازمان را نمی‌توان حذف کرد.",
"ORG_CANNOT_LINK_SELF": "نمی‌توانید سازمان را به خودش متصل کنید.",
"ORG_LINK_WRONG_TYPE": "فقط می‌توانید به نوع سازمان متناظر (کلینیک یا لابراتوار) متصل شوید.",
"ORG_TARGET_NO_SUBSCRIPTION": "سازمان مقابل اشتراک فعال ندارد.",
"ORG_LINK_EXISTS": "این سازمان‌ها از قبل متصل هستند.",
"ORG_REQUEST_NOT_PENDING": "فقط درخواست‌های در انتظار را می‌توان پاسخ داد.",
"ORG_CANNOT_RESPOND_OWN": "نمی‌توانید به درخواست اتصال خودتان پاسخ دهید.",
"ORG_INVITE_ALREADY_ACCEPTED": "این دعوتنامه قبلاً پذیرفته شده است.",
"ORG_INVITE_INVALID": "این دعوتنامه دیگر معتبر نیست.",
"ORG_INVITE_REVOKED": "این دعوتنامه لغو شده است.",
"ORG_INVITE_EXPIRED": "این دعوتنامه منقضی شده است.",
"ORG_INVITE_TYPE_MISMATCH": "نوع سازمان با این دعوتنامه مطابقت ندارد.",
"ORG_INVITE_OWNER_HAS_ORG": "این مالک از قبل سازمان دارد. به‌جای ارسال دعوتنامه آن را در جستجو پیدا کنید.",
"ORG_UNKNOWN_TYPE": "نوع سازمان ناشناخته است.",
"ORG_COUNTERPART_NOT_LAB": "سازمان متصل‌شده لابراتوار نیست.",
"ORG_COUNTERPART_NOT_CLINIC": "سازمان متصل‌شده کلینیک نیست.",
"ORG_CONNECTION_NOT_FOUND": "سازمان متصل یافت نشد.",
"ORG_INVITE_NOT_FOUND": "دعوتنامه یافت نشد.",
"ORG_ONLY_CLINIC_COMMENT": "فقط کلینیک می‌تواند روی این کیس نظر بگذارد.",
"CATALOG_UNKNOWN_TREATMENT_TYPE": "نوع درمان ناشناخته است.",
"CATALOG_UNKNOWN_PROSTHESIS_TYPE": "نوع پروتز ناشناخته است.",
"CATALOG_TREATMENT_NOT_LAB_DEPENDENT": "این نوع درمان در کلینیک تکمیل می‌شود و قابل ارسال به لابراتوار نیست.",
"TREATMENT_SAVE_DETAILS_BEFORE_LAB": "قبل از ایجاد کیس لابراتوار، جزئیات درمان را ذخیره کنید.",
"TREATMENT_DETAIL_ONE_CASE": "هر جزء درمان فقط می‌تواند به یک کیس لابراتوار تعلق داشته باشد.",
"TREATMENT_DETAILS_NOT_FOUND": "یک یا چند جزء درمان یافت نشد.",
"TREATMENT_DEST_NOT_LINKED": "آن سازمان لابراتوار متصل فعال نیست.",
"TREATMENT_TEETH_REQUIRED_TO_SHIP": "قبل از ارسال به لابراتوار دندان‌ها را انتخاب کنید.",
"TREATMENT_TOOTH_UNKNOWN_DETAIL": "یک دندان به جزء درمان ناشناخته لینک شده است.",
"TREATMENT_TOOTH_NOT_ON_DETAIL": "دندان انتخاب‌شده روی این جزء درمان نیست.",
"TREATMENT_CASE_NO_DEST": "این کیس لابراتوار مقصد ندارد.",
"TREATMENT_CASE_NEEDS_DETAIL": "کیس لابراتوار باید شامل یک جزء درمان باشد.",
"TREATMENT_CASE_ONE_DETAIL": "کیس لابراتوار فقط می‌تواند یک جزء درمان داشته باشد.",
"TREATMENT_ONLY_PROVIDER_SEND": "فقط ارائه‌دهنده درمان می‌تواند این کیس را ارسال کند.",
"TREATMENT_CASE_ALREADY_SENT": "این کیس قبلاً به آن لابراتوار ارسال شده است.",
"TREATMENT_DUE_DATE_LOCKED": "پس از تکمیل همه کارها نمی‌توان موعد را تغییر داد.",
"TREATMENT_INVALID_DUE_DATE": "موعد نامعتبر است.",
"TREATMENT_DETAIL_KEY_REQUIRED": "برای این بارگذاری یک جزء درمان لازم است.",
"TREATMENT_FILE_REQUIRED": "حداقل یک فایل لازم است.",
"TREATMENT_ATTACHMENT_NOT_FOUND": "پیوست یافت نشد.",
"TREATMENT_FILE_UNAVAILABLE": "این فایل دیگر در دسترس نیست.",
"TREATMENT_CASE_INVALID_ATTACHMENTS": "یک یا چند پیوست برای این کیس معتبر نیست.",
"TREATMENT_TOOTH_PROSTHESIS_INCOMPLETE": "قبل از ارسال، هر دندان باید نوع پروتز داشته باشد.",
"LAB_CASE_NOT_FOUND": "کیس لابراتوار یافت نشد.",
"TASK_ASSIGNEE_INVALID": "فرد انتخاب‌شده را نمی‌توان به این کار تخصیص داد.",
"TASK_ASSIGNED_TO_OTHER": "این کار به عضو دیگری تخصیص داده شده است.",
"TASK_PAGE_DATE_SORT_ONLY": "پرش به کار در فهرست فقط وقتی مرتب‌سازی بر اساس تاریخ است ممکن است.",
"INVALID_SENT_FROM": "تاریخ شروع بازه نامعتبر است.",
"INVALID_SENT_TO": "تاریخ پایان بازه نامعتبر است.",
"CASE_NOT_FOUND": "کیس یافت نشد.",
"CASE_ATTACHMENT_NOT_FOUND": "پیوست یافت نشد.",
"CASE_ATTACHMENT_MISSING_FILE": "فایل پیوست موجود نیست.",
"CASE_TASK_NOT_FOUND": "کار یافت نشد.",
"COMMENT_NOT_FOUND": "نظر یافت نشد.",
"COMMENT_VISIBILITY_LAB_ONLY": "فقط نظرات لابراتوار می‌توانند وضعیت نمایش را تغییر دهند.",
"TODAY_INVALID_RANGE": "بازه تاریخ نامعتبر است.",
"TODAY_INVALID_RANGE_ORDER": "پایان بازه باید بعد از شروع باشد.",
"NOT_FOUND": "مورد درخواستی یافت نشد.",
"CONFLICT": "این عمل با داده‌های موجود در تضاد است.",
"CONFLICT_FUTURE_APPOINTMENTS": "تا وقتی نوبت‌های آینده دارید نمی‌توانید مشارکت در درمان را متوقف کنید. ابتدا آن‌ها را لغو یا واگذار کنید.",