{
  "USER_CREATED": "User created successfully",
  "USER_NOT_FOUND": "User not found",
  "LOGIN_SUCCESS": "Login successful",
  "LOGIN_FAILED": "Login failed",
  "TRANSLATION_FETCHED": "Translation fetched successfully",
  "SOMETHING_WENT_WRONG": "Something went wrong",
  "VALIDATION_ERROR": "Validation error",
  "UNAUTHORIZED": "Unauthorized access",
  "FORBIDDEN": "Access forbidden",
  "INVALID_CREDENTIALS": "Invalid credentials",
  "EMAIL_NOT_VERIFIED": "Please verify your email first",
  "COUNTRY_CODE_REQUIRED": "Country code is required for phone number login",
  "INVALID_PHONE_EMAIL": "Invalid email or phone number format",
  "OTP_SENT_EMAIL": "OTP sent to your email. Please verify to complete registration.",
  "EMAIL_ALREADY_REGISTERED": "Email already registered. Please login.",
  "INVALID_SIGNUP_TOKEN": "Invalid or missing signup token. Please signup first.",
  "INVALID_OTP": "Invalid OTP",
  "OTP_EXPIRED": "OTP expired. Please request a new one.",
  "REGISTRATION_SUCCESS": "Registration successful! Email verified and account created.",
  "INVALID_EMAIL_PASSWORD": "Invalid email or password",
  "PROFILE_UPDATED": "Profile updated successfully",
  "INVALID_LANGUAGE": "Invalid language. Must be en or hi",
  "EMAIL_ALREADY_EXISTS": "Email already registered",
  "OTP_SENT_NEW_EMAIL": "OTP sent to your new email. Please verify to complete update.",
  "OTP_SENT_PHONE": "OTP sent to your new phone number. Please verify to complete update.",
  "PHONE_NOT_SET": "Phone number not set. Please update phone number first.",
  "NEW_OTP_SENT_PHONE": "New OTP sent to your phone number.",
  "INVALID_UPDATE_TOKEN": "Invalid or missing update token. Please request update first.",
  "EMAIL_VERIFIED_SUCCESS": "Email verified successfully!",
  "PHONE_VERIFIED_SUCCESS": "Phone number verified successfully!",
  "INVALID_TOKEN_TYPE": "Invalid token type",
  "NO_ACCOUNT_EMAIL": "No account found with this email",
  "NO_ACCOUNT_PHONE": "No account found with this phone number",
  "OTP_SENT_RESET": "OTP sent to your email/phone. Please verify to reset password.",
  "OTP_VERIFY_SUCCESS": "OTP verified successfully. You can now reset your password.",
  "PASSWORD_CHANGED_SUCCESS": "Password changed successfully! You can now login with your new password.",
  "NO_PASSWORD_SET": "No password set. Please use forgot password feature.",
  "CURRENT_PASSWORD_INCORRECT": "Current password is incorrect",
  "NEW_PASSWORD_SAME": "New password must be different from current password",
  "PASSWORD_CHANGED": "Password changed successfully!",
  "NEW_OTP_SENT": "New OTP sent to your email/phone.",
  "USERS_RETRIEVED": "Users retrieved successfully",
  "LOGOUT_SUCCESS": "User logout successfully.",
  "PROFILE_RETRIEVED": "Profile retrieved successfully",
  "INVALID_SOCIAL_TYPE": "Invalid social type. Must be GOOGLE, FACEBOOK, or APPLE",
  "INVALID_SOCIAL_TOKEN": "Invalid social token",
  "SOCIAL_LOGIN_SUCCESS": "Logged in successfully",
  "INVALID_FACEBOOK_TOKEN": "Invalid Facebook token",
  "INVALID_GOOGLE_TOKEN": "Invalid Google token",
  "INVALID_APPLE_TOKEN": "Invalid Apple token",
  "PAGE_NOT_FOUND": "Page not found",
  "FAQ_ADDED": "New FAQ added successfully",
  "PAGES_FOUND": "Pages found successfully",
  "PAGE_UPDATED": "Page updated successfully",
  "INVALID_REFERRAL_CODE": "Invalid referral code",
  "INVALID_REVENUE_MODEL": "Invalid revenue model. Must be COMMISSION or SUBSCRIPTION",
  "ADDRESS_ADDED_SUCCESSFULLY": "Address added successfully",
  "ADDRESS_LIST_RETRIEVED": "Address list retrieved successfully",
  "ADDRESS_UPDATED_SUCCESSFULLY": "Address updated successfully",
  "ADDRESS_DELETED_SUCCESSFULLY": "Address deleted successfully",
  "DEFAULT_ADDRESS_UPDATED_SUCCESSFULLY": "Default address updated successfully",
  "ADDRESS_NOT_FOUND": "Address not found",
  "ADDRESS_RETRIEVED": "Address retrieved successfully",
  "NOTIFICATIONS_RETRIEVED": "Notifications retrieved successfully",
  "NOTIFICATIONS_MARKED_READ": "All notifications marked as read",
  "UNREAD_COUNT_RETRIEVED": "Unread count retrieved",
  "ACCOUNT_DELETED": "Your account has been deleted. Please contact support for assistance.",
  "ACCOUNT_EXISTS_DIFFERENT_TYPE": "You already have an account with {userType}. Please login there.",
  "PHONE_ALREADY_REGISTERED": "This phone number is already registered with another account.",
  "NEW_EMAIL_MUST_BE_DIFFERENT_FROM_CURRENT_EMAIL": "New email must be different from current email",
  "NEW_PHONE_MUST_BE_DIFFERENT_FROM_CURRENT_PHONE": "New phone number must be different from current phone number",
  "BANK_ACCOUNT_REQUIRED_FOR_PRODUCT": "Please link your bank account before adding products",
  "PRODUCT_NOT_FOUND": "Product not found",
  "PRODUCT_NOT_AVAILABLE": "Product is not available",
  "VENDOR_NOT_FOUND": "Vendor not found",
  "ORDER_NOT_FOUND": "Order not found",
  "NO_COMMISSION_TO_PAY": "No commission to pay for this order",
  "STRIPE_ACCOUNT_NOT_LINKED": "Stripe account not linked",
  "RAZORPAY_ACCOUNT_NOT_LINKED": "Razorpay account not linked",
  "REFUND_PROCESSING_FAILED": "Failed to process refund. Please try again later.",
  "REFUND_INSUFFICIENT_BALANCE": "Refund failed: Insufficient balance in payment gateway account.",
  "REFUND_PAYMENT_EXPIRED": "Refund failed: Payment has expired or is no longer eligible for refund.",
  "REFUND_ALREADY_PROCESSED": "Refund failed: This payment has already been refunded.",
  "REFUND_DISPUTE_ACTIVE": "Refund failed: Payment is under dispute or chargeback.",
  "REFUND_FAILED": "Refund processing failed",
  "PAYOUT_PROCESSING_FAILED": "Failed to process vendor payout. Please try again later.",
  "PAYOUT_INSUFFICIENT_BALANCE": "Payout failed: Insufficient balance in payment gateway account.",
  "PAYOUT_INVALID_ACCOUNT": "Payout failed: Invalid or inactive vendor bank account.",
  "PAYOUT_LIMIT_EXCEEDED": "Payout failed: Amount exceeds payout limit. Please contact support.",
  "PAYOUT_ACCOUNT_RESTRICTED": "Payout failed: Vendor account is restricted or suspended.",
  "PAYOUT_FAILED": "Payout processing failed",
  "INVALID_DEBIT_AMOUNT": "Withdrawal amount must be greater than 0",
  "INSUFFICIENT_WALLET_BALANCE": "Insufficient wallet balance. Available: {available}, Required: {required}",
  "BANK_ACCOUNT_NOT_FOUND": "Bank account not found. Please add a bank account first.",
  "WITHDRAWAL_PROCESSING_FAILED": "Failed to process withdrawal. Please try again later.",
  "WITHDRAWAL_INSUFFICIENT_BALANCE": "Withdrawal failed: Insufficient balance in payment gateway account.",
  "WITHDRAWAL_INVALID_ACCOUNT": "Withdrawal failed: Invalid or inactive bank account.",
  "WITHDRAWAL_LIMIT_EXCEEDED": "Withdrawal failed: Amount exceeds withdrawal limit. Please contact support.",
  "WITHDRAWAL_ACCOUNT_RESTRICTED": "Withdrawal failed: Your account is restricted or suspended.",
  "WITHDRAWAL_BELOW_MINIMUM": "Withdrawal failed: Amount is below minimum withdrawal limit.",
  "WITHDRAWAL_FAILED": "Withdrawal processing failed",
  "WITHDRAWAL_SUCCESS": "Successfully withdrawn {amount} from wallet",
  "PLAN_NOT_FOUND": "Plan not found",
  "PLAN_NOT_READY_FOR_STRIPE": "Plan is not ready for Stripe payments",
  "SUBSCRIPTION_ALREADY_CANCELLED": "Subscription already cancelled",
  "SUBSCRIPTION_CANCELLED_SUCCESS": "Your subscription has been cancelled successfully",
  "NO_CANCELLED_SUBSCRIPTION": "No cancelled subscription found to reactivate",
  "SUBSCRIPTION_REACTIVATED_SUCCESS": "Your subscription has been reactivated successfully",
  "ONLY_VENDORS_CAN_SWITCH": "Only vendors can switch revenue models",
  "COMMISSION_SWITCH_PENDING": "Your commission switch request is already scheduled at the end of your current subscription",
  "SWITCH_TO_COMMISSION_PENDING": "Switch to commission is pending. You will be switched to commission model when your current subscription ends",
  "SWITCHED_TO_COMMISSION_SUCCESS": "Successfully switched to commission model",
  "PLAN_NAME_EXISTS": "Plan name already exists",
  "GOOGLE_PLAY_PRODUCT_REQUIRED": "Google Play product information is required when in-app purchases are enabled",
  "APPLE_APP_STORE_PRODUCT_REQUIRED": "Apple App Store product information is required when in-app purchases are enabled",
  "PLAN_CREATED_SUCCESS": "New plan created successfully",
  "PLAN_DISABLED_SUCCESS": "Plan disabled successfully",
  "USER_ALREADY_SUBSCRIBED": "You are already subscribed to this plan",
  "ONE_TIME_SUBSCRIPTION_NO_UPGRADE": "You already have an active one-time subscription. Upgrade/downgrade is not available for one-time plans",
  "NO_ONE_TIME_WITH_RECURRING": "Cannot purchase a one-time plan while having an active recurring subscription",
  "SELECT_PLAN_REQUIRED": "Please select a plan",
  "ONE_TIME_PLAN_SETTINGS_MISMATCH": "This is a one-time plan but current settings require recurring checkout",
  "RECURRING_PLAN_SETTINGS_MISMATCH": "This is a recurring plan but current settings require one-time checkout",
  "SUBSCRIPTION_NOT_ACTIVE_STRIPE": "Current subscription is not active on Stripe",
  "SUBSCRIPTION_NOT_ACTIVE_RAZORPAY": "Current subscription is not active on Razorpay",
  "INVALID_PAYMENT_GATEWAY": "Invalid payment gateway",
  "SUBSCRIPTION_UPGRADE_SUCCESS": "Subscription upgraded successfully",
  "SUBSCRIPTION_UPGRADE_INITIATED": "Subscription upgrade initiated. Please complete payment.",
  "SUBSCRIPTION_DOWNGRADE_SCHEDULED": "Subscription downgrade scheduled for period end",
  "CALLER_ALREADY_ON_CALL": "You can't make another call",
  "RECEIVER_ID_REQUIRED": "Receiver ID is required for one-to-one calls",
  "RECEIVER_ALREADY_ON_CALL": "The person you are calling is currently on another call. Please try again later.",
  "CALLER_BLOCKED_RECEIVER": "You have blocked this user. Please unblock them first to make a call.",
  "CONNECTION_NOT_FOUND": "Connection not found",
  "CALL_INITIATED_SUCCESS": "Call initiated successfully",
  "CALL_NOT_FOUND": "Call not found",
  "NOT_PART_OF_CALL": "You are not part of this call",
  "CALL_ALREADY_ENDED": "Call is already {status}",
  "CALL_REJOINED_SUCCESS": "Successfully rejoined call",
  "RESET_LINK_SENT": "If an account exists for this email, a password reset link has been sent.",
  "INVALID_RESET_TOKEN": "This password reset link is invalid or has expired.",
  "CATEGORY_CREATED": "Category added successfully",
  "CATEGORY_UPDATED": "Category updated successfully",
  "CATEGORY_FETCHED": "Category retrieved successfully",
  "CATEGORIES_FETCHED": "Categories retrieved successfully",
  "CATEGORY_NOT_FOUND": "Category not found",
  "CATEGORY_ALREADY_EXISTS": "A category with this name already exists",
  "INSURER_CREATED": "Insurer added successfully",
  "INSURER_UPDATED": "Insurer updated successfully",
  "INSURER_FETCHED": "Insurer retrieved successfully",
  "INSURERS_FETCHED": "Insurers retrieved successfully",
  "INSURER_NOT_FOUND": "Insurer not found",
  "INSURER_ALREADY_EXISTS": "An insurer with this name already exists",
  "INVALID_CATEGORIES": "One or more categories are invalid or inactive",
  "STAFF_INVITED": "Invite sent to {email}",
  "STAFF_CREATED_EMAIL_FAILED": "Staff member saved, but the invite email could not be sent to {email}. Use resend invite to try again.",
  "STAFF_INVITE_RESENT": "Invite resent to {email}",
  "STAFF_UPDATED": "Staff updated successfully",
  "STAFF_DELETED": "Staff removed successfully",
  "STAFF_FETCHED": "Staff retrieved successfully",
  "STAFF_LIST_FETCHED": "Staff retrieved successfully",
  "STAFF_NOT_FOUND": "Staff member not found",
  "CANNOT_MANAGE_SUB_ADMIN": "Only the Master Admin can add, change or remove Sub-Admins",
  "CANNOT_MODIFY_SELF": "You cannot change your own role or status, or remove yourself",
  "INVITE_ALREADY_ACCEPTED": "This staff member has already accepted the invite",
  "INVALID_INVITE_TOKEN": "This invite link is invalid or has expired",
  "INVITE_ACCEPTED": "Password set successfully. You can now log in.",
  "ACCOUNT_DEACTIVATED": "Your account has been deactivated. Please contact the administrator.",
  "ROLE_POLICY_STAFF": "Policy Staff",
  "ROLE_ADMIN_STAFF": "Sub-Admin",
  "ACTIVITY_STAFF_INVITED": "Invited as {role} by {actor}",
  "ACTIVITY_STAFF_INVITE_RESENT": "Invite resent by {actor}",
  "ACTIVITY_INVITE_ACCEPTED": "Accepted invite & set password",
  "ACTIVITY_STAFF_PROFILE_UPDATED": "Profile updated by {actor}",
  "ACTIVITY_STAFF_ROLE_CHANGED": "Role changed to {role} by {actor}",
  "ACTIVITY_STAFF_ACTIVATED": "Activated by {actor}",
  "ACTIVITY_STAFF_DEACTIVATED": "Deactivated by {actor}",
  "AGENT_INVITED": "Invitation emailed to {email}",
  "AGENTS_FETCHED": "Agents retrieved successfully",
  "REGIONS_FETCHED": "Regions retrieved successfully",
  "AGENT_FETCHED": "Agent retrieved successfully",
  "AGENT_UPDATED": "Agent updated successfully",
  "AGENT_NOT_FOUND": "Agent not found",
  "AGENT_PHONE_EXISTS": "An agent with this mobile number already exists",
  "AGENT_APPROVED": "Agent approved successfully",
  "AGENT_REJECTED": "Agent rejected. They will need to resubmit their documents.",
  "AGENT_REOPENED": "KYC reopened for review",
  "AGENT_NOT_AWAITING_REVIEW": "This agent has not submitted KYC for review",
  "AGENT_NOT_REJECTED": "Only rejected agents can be reopened",
  "AGENT_INVITE_RESENT": "Invite link sent again",
  "AGENT_INVITE_NOT_NEEDED": "This agent has already submitted or completed onboarding",
  "KYC_ALREADY_SUBMITTED": "Your KYC is already submitted and under review",
  "AGENT_ALREADY_APPROVED": "Your account is already approved",
  "KYC_DOCUMENTS_REQUIRED": "Please upload all four documents: PAN, Aadhaar / other KYC, address proof and license / certificate",
  "INVALID_PAN": "Please enter a valid PAN number (for example ABCDE1234F)",
  "KYC_SUBMITTED": "KYC submitted successfully. We will review it shortly.",
  "ACTIVITY_AGENT_INVITED": "Invited as agent by {actor}",
  "ACTIVITY_AGENT_INVITE_RESENT": "Invite sent again by {actor}",
  "ACTIVITY_AGENT_INVITE_ACCEPTED": "Accepted invite & registered",
  "ACTIVITY_AGENT_KYC_SUBMITTED": "Submitted KYC documents for review",
  "ACTIVITY_AGENT_KYC_VERIFIED": "KYC documents verified by {actor}",
  "ACTIVITY_AGENT_APPROVED": "Approved as agent by {actor}",
  "ACTIVITY_AGENT_REJECTED": "Rejected by {actor}: {reason}",
  "ACTIVITY_AGENT_REOPENED": "KYC reopened for review by {actor}",
  "ACTIVITY_AGENT_UPDATED": "Profile updated by {actor}",
  "ACTIVITY_AGENT_ACTIVATED": "Activated by {actor}",
  "ACTIVITY_AGENT_DEACTIVATED": "Deactivated by {actor}",
  "CUSTOMER_CREATED": "Customer added successfully",
  "CUSTOMER_UPDATED": "Customer updated successfully",
  "CUSTOMER_FETCHED": "Customer retrieved successfully",
  "CUSTOMERS_FETCHED": "Customers retrieved successfully",
  "CUSTOMER_NOT_FOUND": "Customer not found",
  "CUSTOMER_PHONE_EXISTS": "A customer with this mobile number already exists",
  "LEAD_CREATED": "Lead captured successfully",
  "LEAD_UPDATED": "Lead updated successfully",
  "LEAD_FETCHED": "Lead retrieved successfully",
  "LEADS_FETCHED": "Leads retrieved successfully",
  "LEAD_BOARD_FETCHED": "Lead board retrieved successfully",
  "ASSIGNEES_FETCHED": "Assignees retrieved successfully",
  "LEAD_NOT_FOUND": "Lead not found",
  "LEAD_CUSTOMER_REQUIRED": "Select a customer, or enter the customer name and mobile number",
  "LEAD_INVALID_ASSIGNEE": "The selected person cannot be assigned this lead. Choose an active Policy Staff, or an approved agent authorised for this category.",
  "LEAD_ASSIGN_SELF_ONLY": "You can only assign leads to yourself",
  "LEAD_STAGE_UPDATED": "Lead stage updated",
  "LEAD_CONVERTED_LOCKED": "A converted lead cannot be changed or moved",
  "LEAD_NOTE_ADDED": "Note added",
  "LEAD_FOLLOW_UP_PAST": "The next follow-up must be a future date and time",
  "STAGE_NEW": "New",
  "STAGE_IN_DISCUSSION": "In Discussion",
  "STAGE_QUOTATION_SHARED": "Quotation Shared",
  "STAGE_CONVERTED": "Converted",
  "STAGE_LOST": "Lost",
  "LEAD_ACTIVITY_CREATED": "Lead captured by {actor}",
  "LEAD_ACTIVITY_STAGE_CHANGED": "Moved to \"{stage}\" stage by {actor}",
  "LEAD_ACTIVITY_STAGE_CHANGED_REASON": "Moved to \"{stage}\" stage by {actor}: {reason}",
  "LEAD_ACTIVITY_ASSIGNED": "Assigned to {assignee} by {actor}",
  "LEAD_ACTIVITY_UPDATED": "Lead details updated by {actor}",
  "PRODUCT_CREATED": "Product defined successfully",
  "PRODUCT_UPDATED": "Product updated successfully",
  "PRODUCT_FETCHED": "Product retrieved successfully",
  "PRODUCTS_FETCHED": "Products retrieved successfully",
  "PRODUCT_ALREADY_EXISTS": "This insurer already has a product with this name",
  "INVALID_INSURER": "The selected insurer is not available. Choose an active insurer from your directory.",
  "INSURER_CATEGORY_MISMATCH": "This insurer does not underwrite the selected category",
  "INVALID_COMMISSION_RATE": "Commission percentage must be between 0 and 100",
  "PREMIUM_CALCULATED": "Premium calculated successfully",
  "POLICY_CREATED": "Policy recorded successfully",
  "POLICY_UPDATED": "Policy updated successfully",
  "POLICY_FETCHED": "Policy retrieved successfully",
  "POLICIES_FETCHED": "Policies retrieved successfully",
  "POLICY_NOT_FOUND": "Policy not found",
  "POLICY_NUMBER_EXISTS": "A policy with this number already exists",
  "POLICY_CANCELLED": "Policy cancelled",
  "POLICY_ALREADY_CANCELLED": "This policy is already cancelled",
  "POLICY_CANCELLED_LOCKED": "A cancelled policy cannot be changed",
  "INVALID_PRODUCT": "The selected product is not available. Choose an active product.",
  "INVALID_POLICY_DATES": "The expiry date must be after the issue date",
  "COMMISSION_ALREADY_PAID": "The commission for this policy is already paid, so the premium can no longer be changed",
  "LEAD_PRODUCT_CATEGORY_MISMATCH": "The product must be in the same category as the lead",
  "LEAD_USE_CONVERT": "Use \"Convert to policy\" to convert a lead",
  "LEAD_CONVERTED_TO_POLICY": "Lead converted to policy",
  "LEAD_ACTIVITY_CONVERTED_TO_POLICY": "Converted to policy {policy} by {actor}",
  "AGENT_OTP_SENT": "OTP sent to {phone}",
  "AGENT_NOT_INVITED": "This mobile number has not been invited. Please contact your administrator.",
  "AGENT_NOT_APPROVED": "Your documents have not been approved yet",
  "AGENT_DASHBOARD_FETCHED": "Dashboard retrieved successfully",
  "ACTIVITY_AGENT_KYC_RESUBMITTED": "Resubmitted KYC documents for review",
  "REGION_CREATED": "Region added successfully",
  "REGION_UPDATED": "Region updated successfully",
  "REGION_FETCHED": "Region retrieved successfully",
  "REGION_NOT_FOUND": "Region not found",
  "REGION_ALREADY_EXISTS": "A region with this name already exists",
  "INVALID_REGION": "The selected region is not available. Choose an active region.",
  "AGENT_INVITED_EMAIL_FAILED": "The agent was saved, but the invitation email could not be sent to {email}. Use resend invite to try again.",
  "AGENT_EMAIL_REQUIRED": "This agent has no email address, so an invitation cannot be sent. Add an email first."
}