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:
@@ -1080,6 +1080,101 @@
|
||||
"VALIDATION_FIELD_REQUIRED": "Please fill in all required fields.",
|
||||
"VALIDATION_LANGUAGE_INVALID": "Please select a supported language.",
|
||||
"VALIDATION_INVALID_REQUEST": "The request contains invalid data.",
|
||||
"VALIDATION_TIMEZONE_INVALID": "Your timezone could not be determined. Refresh the page and try again.",
|
||||
"APPOINTMENT_INVALID_TIME": "The appointment start or end time is invalid.",
|
||||
"APPOINTMENT_END_BEFORE_START": "End time must be after start time.",
|
||||
"APPOINTMENT_TOO_LONG": "An appointment cannot last more than 24 hours.",
|
||||
"APPOINTMENT_IN_PAST": "You cannot book an appointment in the past.",
|
||||
"APPOINTMENT_INVALID_RANGE": "The date range is invalid.",
|
||||
"APPOINTMENT_INVALID_RANGE_ORDER": "The end of the range must be after the start.",
|
||||
"APPOINTMENT_INVALID_DATE": "The selected date is invalid.",
|
||||
"APPOINTMENT_PROVIDER_NOT_MEMBER": "This provider is not a member of the organization.",
|
||||
"APPOINTMENT_PROVIDER_INACTIVE": "This provider is not an active staff member.",
|
||||
"APPOINTMENT_PROVIDER_NO_TREATMENT_EDIT": "This provider cannot take treatment appointments.",
|
||||
"APPOINTMENT_PROVIDER_NO_WORKING_HOURS": "This provider has no working hours set.",
|
||||
"APPOINTMENT_PROVIDER_NOT_WORKING_DAY": "This provider does not work on the selected day.",
|
||||
"APPOINTMENT_OUTSIDE_WORKING_HOURS": "This time is outside the provider’s working hours.",
|
||||
"APPOINTMENT_NOT_FOUND": "Appointment not found.",
|
||||
"APPOINTMENT_NOT_PROVIDER": "You are not the provider for this appointment.",
|
||||
"PATIENT_NOT_FOUND": "Patient not found.",
|
||||
"WORKING_HOURS_INVALID": "Working hours are invalid. Check that shifts do not overlap.",
|
||||
"WORKING_HOURS_OWNER_NOT_ALLOWED": "Set owner working hours from account settings.",
|
||||
"WORKING_HOURS_CONFLICTS_WITH_APPOINTMENTS": "These hours conflict with upcoming appointments. Reschedule or remove those appointments first.",
|
||||
"STAFF_UNKNOWN_PERMISSIONS": "One or more selected permissions are not valid.",
|
||||
"STAFF_NO_SUBSCRIPTION": "Choose a plan before adding staff.",
|
||||
"STAFF_SEAT_LIMIT": "Your plan has no free seats. Disable a member or upgrade to add more.",
|
||||
"STAFF_INVITE_OWNER_EMAIL": "The organization owner is already a member.",
|
||||
"STAFF_ALREADY_MEMBER": "This person is already a member.",
|
||||
"STAFF_OWNER_NO_INVITE_LINK": "The owner does not use an invitation link.",
|
||||
"STAFF_ALREADY_ACCEPTED": "This member has already accepted their invitation.",
|
||||
"STAFF_INVITE_MISSING": "No invitation was found for this member.",
|
||||
"STAFF_INVITE_ALREADY_ACCEPTED": "This invitation has already been accepted.",
|
||||
"STAFF_INVITE_INVALID": "This invitation is no longer valid.",
|
||||
"STAFF_INVITE_REVOKED": "This invitation has been revoked.",
|
||||
"STAFF_INVITE_EXPIRED": "This invitation has expired.",
|
||||
"STAFF_ALREADY_ACTIVE": "This member is already active.",
|
||||
"STAFF_ALREADY_DISABLED": "This member is already disabled or pending.",
|
||||
"STAFF_CANNOT_DISABLE_SELF": "You cannot disable your own access.",
|
||||
"STAFF_MEMBER_NOT_FOUND": "Staff member not found.",
|
||||
"STAFF_CANNOT_EDIT_OWNER": "The owner’s membership cannot be edited here.",
|
||||
"STAFF_CANNOT_ENABLE_OWNER": "The organization owner cannot be enabled this way.",
|
||||
"STAFF_CANNOT_DISABLE_OWNER": "The organization owner cannot be disabled.",
|
||||
"STAFF_CANNOT_REMOVE_OWNER": "The organization owner cannot be removed.",
|
||||
"ORG_CANNOT_LINK_SELF": "You cannot link an organization to itself.",
|
||||
"ORG_LINK_WRONG_TYPE": "You can only link to the matching organization type (clinic or lab).",
|
||||
"ORG_TARGET_NO_SUBSCRIPTION": "The other organization does not have an active subscription.",
|
||||
"ORG_LINK_EXISTS": "These organizations are already linked.",
|
||||
"ORG_REQUEST_NOT_PENDING": "Only pending connection requests can be answered.",
|
||||
"ORG_CANNOT_RESPOND_OWN": "You cannot respond to your own connection request.",
|
||||
"ORG_INVITE_ALREADY_ACCEPTED": "This invitation has already been accepted.",
|
||||
"ORG_INVITE_INVALID": "This invitation is no longer valid.",
|
||||
"ORG_INVITE_REVOKED": "This invitation has been revoked.",
|
||||
"ORG_INVITE_EXPIRED": "This invitation has expired.",
|
||||
"ORG_INVITE_TYPE_MISMATCH": "Organization type does not match this invitation.",
|
||||
"ORG_INVITE_OWNER_HAS_ORG": "This owner already has an organization. Find it in search instead of sending an invitation.",
|
||||
"ORG_UNKNOWN_TYPE": "Unknown organization type.",
|
||||
"ORG_COUNTERPART_NOT_LAB": "The connected organization is not a lab.",
|
||||
"ORG_COUNTERPART_NOT_CLINIC": "The connected organization is not a clinic.",
|
||||
"ORG_CONNECTION_NOT_FOUND": "Connected organization not found.",
|
||||
"ORG_INVITE_NOT_FOUND": "Invitation not found.",
|
||||
"ORG_ONLY_CLINIC_COMMENT": "Only the clinic can comment on this case.",
|
||||
"CATALOG_UNKNOWN_TREATMENT_TYPE": "Unknown treatment type.",
|
||||
"CATALOG_UNKNOWN_PROSTHESIS_TYPE": "Unknown prosthesis type.",
|
||||
"CATALOG_TREATMENT_NOT_LAB_DEPENDENT": "This treatment type is completed in the clinic and cannot be sent to a lab.",
|
||||
"TREATMENT_SAVE_DETAILS_BEFORE_LAB": "Save treatment details before creating lab cases.",
|
||||
"TREATMENT_DETAIL_ONE_CASE": "Each treatment detail can belong to only one lab case.",
|
||||
"TREATMENT_DETAILS_NOT_FOUND": "One or more treatment details were not found.",
|
||||
"TREATMENT_DEST_NOT_LINKED": "That organization is not an active linked lab.",
|
||||
"TREATMENT_TEETH_REQUIRED_TO_SHIP": "Select teeth before sending this work to a lab.",
|
||||
"TREATMENT_TOOTH_UNKNOWN_DETAIL": "A tooth is linked to an unknown treatment detail.",
|
||||
"TREATMENT_TOOTH_NOT_ON_DETAIL": "A selected tooth is not on this treatment detail.",
|
||||
"TREATMENT_CASE_NO_DEST": "This lab case has no destination organization.",
|
||||
"TREATMENT_CASE_NEEDS_DETAIL": "A lab case must include a treatment detail.",
|
||||
"TREATMENT_CASE_ONE_DETAIL": "A lab case can include only one treatment detail.",
|
||||
"TREATMENT_ONLY_PROVIDER_SEND": "Only the treatment provider can send this lab case.",
|
||||
"TREATMENT_CASE_ALREADY_SENT": "This case was already sent to that lab.",
|
||||
"TREATMENT_DUE_DATE_LOCKED": "The due date cannot be changed after all tasks are completed.",
|
||||
"TREATMENT_INVALID_DUE_DATE": "The due date is invalid.",
|
||||
"TREATMENT_DETAIL_KEY_REQUIRED": "A treatment detail is required for this upload.",
|
||||
"TREATMENT_FILE_REQUIRED": "At least one file is required.",
|
||||
"TREATMENT_ATTACHMENT_NOT_FOUND": "Attachment not found.",
|
||||
"TREATMENT_FILE_UNAVAILABLE": "This file is no longer available.",
|
||||
"TREATMENT_CASE_INVALID_ATTACHMENTS": "One or more attachments are not valid for this lab case.",
|
||||
"TREATMENT_TOOTH_PROSTHESIS_INCOMPLETE": "Each tooth needs a prosthesis type before sending.",
|
||||
"LAB_CASE_NOT_FOUND": "Lab case not found.",
|
||||
"TASK_ASSIGNEE_INVALID": "The selected person cannot be assigned this task.",
|
||||
"TASK_ASSIGNED_TO_OTHER": "This task is assigned to another staff member.",
|
||||
"TASK_PAGE_DATE_SORT_ONLY": "Jumping to a task in the list is only available when sorted by date.",
|
||||
"INVALID_SENT_FROM": "The start date of the range is invalid.",
|
||||
"INVALID_SENT_TO": "The end date of the range is invalid.",
|
||||
"CASE_NOT_FOUND": "Case not found.",
|
||||
"CASE_ATTACHMENT_NOT_FOUND": "Attachment not found.",
|
||||
"CASE_ATTACHMENT_MISSING_FILE": "The attachment file is missing.",
|
||||
"CASE_TASK_NOT_FOUND": "Task not found.",
|
||||
"COMMENT_NOT_FOUND": "Comment not found.",
|
||||
"COMMENT_VISIBILITY_LAB_ONLY": "Only lab comments can change visibility.",
|
||||
"TODAY_INVALID_RANGE": "The date range is invalid.",
|
||||
"TODAY_INVALID_RANGE_ORDER": "The end of the range must be after the start.",
|
||||
"NOT_FOUND": "The requested item was not found.",
|
||||
"CONFLICT": "This action conflicts with existing data.",
|
||||
"CONFLICT_FUTURE_APPOINTMENTS": "You cannot stop participating in treatments while you have future appointments. Reassign or cancel them first.",
|
||||
|
||||
Reference in New Issue
Block a user