Settings
Settings is where every shop-wide rule lives — how bills are numbered, which taxes apply, what payment methods show up at checkout, who your staff are and what they can touch. It looks like one page, but it is really 19 separate configuration screens reached through tabs down the left side.
Overview
Settings is organised into tabs, not separate pages — the URL is always /settings with a ?tab= query parameter (for example /settings?tab=invoice), so every tab can be bookmarked or linked to directly.
The tabs are grouped conceptually into five clusters behind the scenes — Setup (Shop Info, Branches, Staff, Security, Data Scope), Billing (Invoice, Invoice Template, Recurring, Receipt, Thermal Themes, GST E-Invoice, Tax), Products (Stock Settings, Purchases, Units), Sales (Loyalty, Customer Groups, Payment Methods, Notifications, Online Store) and Admin (Features, Custom Fields, Terminals, AI Features, Connection, Roles, Staff Permissions, Reset App) — although the sidebar only exposes the 19 tabs most shops need.
A Basic / Advanced mode toggle sits in the page header. Basic mode narrows the left-hand tab list down to the seven tabs a brand-new shop actually needs on day one (Shop Info, Invoice, Tax, Payment Methods, Branches, Staff/Users, Security); Advanced mode shows every tab your role has access to.
Most toggles and text fields save immediately when you click that tab's Save button and take effect on the very next bill or screen — but a few things (changing your interface language, or an Admin editing the Staff Permissions matrix for a role that is currently logged in elsewhere) only apply after that user refreshes the page or logs in again.
Which tabs you personally see is controlled two ways at once: a hard-coded Admin-only lock on the most sensitive tabs (Shop Info, AI Features, Staff/Users, Roles, Staff Permissions, Reset App), and a configurable per-role matrix that the Admin sets up on the Staff Permissions tab for every other tab.
Several tabs only appear at all if the underlying plan feature is switched on for your subscription: GST E-Invoice and Tax need the gst feature, Loyalty Points needs loyalty, and Email Settings needs notifications. GST E-Invoice additionally only shows for shops whose country is set to India.
A "Configuring for" scope selector appears above certain tabs (Invoice, Tax, Payment, Stock Settings, Loyalty, Notifications, Receipt, Online Store and related tabs) when your business has a parent company / sub-company / branch hierarchy — letting an Admin or Manager configure settings for a specific branch or company level instead of only the default one.
Before You Start
- You must be logged in; which tabs you can open depends on your role (Admin, Manager or Cashier) and on the per-tab access rules an Admin has configured under Staff Permissions.
- Some tabs are permanently locked to Admins no matter what the Staff Permissions matrix says: Shop Info, AI Features, Staff / Users, Roles, Staff Permissions itself, and Reset App.
- GST E-Invoice and Tax only appear when your plan's
gstfeature is enabled; Loyalty Points needs theloyaltyfeature; Email Settings needs thenotificationsfeature — on a plan without these, the tab is hidden entirely rather than shown disabled. - If your business has multiple branches or sub-companies, decide which branch/company you are editing using the "Configuring for" scope dropdown before changing operational tabs like Invoice, Tax, Payment or Stock Settings — settings saved under one branch do not automatically apply to another.
Step-by-Step Guide
1 Shop Info — set up your business profile(s)
The Shop Info tab manages one or more business profiles (a parent company and any sub-companies), each with its own logo, GSTIN/tax ID, address and signature.
- Pick a profile from the left list (Active/All filter at the top) — a green "Default" star marks the profile new sales default to.
- Under Brand Identity, upload a Logo (under 500 KB) and set Business Name*, your country's tax ID (e.g. GSTIN in India, validated live against the official 15-character pattern), Business Type (Sole Proprietorship, Partnership, LLP, Pvt Ltd, etc.), Business Category (Retail, Restaurant, Pharmacy, etc.) and POS Layout (retail / restaurant / pharmacy / grocery / garment / electronics / mobile / bakery / hardware).
- Under Contact & Location, fill Phone, Email, Website, Address, State (a dropdown when your country has a fixed state list) and Postal Code.
- If your country has a second tax ID (e.g. PAN in India), a Tax & Compliance section appears with live format validation.
- Under Signature, upload an image of your authorized signatory's signature — it prints on invoices and PDFs.
- Admins can click New to add another business profile (optionally as a sub-company under a parent), Set Default to make a profile the default for new sales, and Deactivate/Reactivate a profile (deactivating the top-level parent shows an extra warning).
- A separate Country / Region dropdown at the top of the tab changes the store-wide country, which in turn changes which tax ID labels, states and default tax system show up everywhere else in Settings.
2 Invoice — numbering, timezone, date format and printed text
Controls how invoices are numbered and formatted everywhere a bill or PDF is generated.
- Set Invoice Prefix (e.g. "INV") and Starting Number — a live preview shows the exact next invoice number (e.g. INV-0001).
- Choose Timezone and Date Format (DD/MM/YYYY, MM/DD/YYYY, etc.) — these affect every report, list and printed document app-wide.
- Toggle whether the printed bill shows the business Logo, the Tax Breakdown line items, and Customer Details.
- Enter free-text Invoice Footer and Terms & Conditions that print at the bottom of every bill, PDF invoice, quotation and delivery challan.
3 GST E-Invoice — IRP integration and e-Way Bill
Configures direct submission of invoices to the Government's Invoice Registration Portal (IRP) for GST e-invoicing, and the linked e-Way Bill workflow.
- Set your Annual Turnover band — turnover of ₹5 Cr or more makes e-invoicing mandatory (shown with a warning banner); below that it is optional (shown with a success banner).
- Toggle Enable E-Invoicing to switch on automatic IRN (Invoice Reference Number) generation on every new sale.
- Enter your IRP Client ID, Client Secret, Username and Password (obtained from einvoice1.nic.in) — password/secret fields have a show/hide toggle. GSTIN itself is pulled from the Shop Info tax ID field, not re-entered here.
- Toggle Enable e-Way Bill (only available once e-invoicing is on) and, if desired, Auto-prompt for e-Way Bill above a configurable bill-value Threshold (default ₹50,000).
- A 5-step visual flow at the top (Setup → Create Sale → Auto IRN → Print/Share → E-Invoice Dashboard) explains how this connects to New Sale and the separate E-Invoice Dashboard page.
4 Tax — tax system, registration type, and GST rate master
The most complex tab: it sets your country's tax system, your dealer/registration type, and manages the actual GST/CESS rate slabs used everywhere in the app.
- Pick a Tax System: Indian GST, European VAT, UK VAT, UAE VAT, Australian GST, Canadian GST/PST/HST, Singapore GST, US Sales Tax, or No Tax System.
- Pick your Business Registration Type — for India: Regular Dealer (GSTR-1/GSTR-3B), Composition Scheme (CMP-08/GSTR-4), or Unregistered/Exempt. Choosing Composition reveals a Composition Rate % field (typically 1% traders, 2% manufacturers, 5% restaurants).
- For Indian GST, set your registered State (drives CGST+SGST vs IGST splitting) and GST Filing Period (Monthly or Quarterly, only for Regular dealers).
- Toggle Tax-Inclusive Pricing (MRP-style, tax already in the shown price) and, for India, Enable CESS for luxury/tobacco goods.
- Set the Default Tax Rate applied to new products before you tag them individually.
- Under GST Rate Master (Admin-only edit rights), add/edit/deactivate/delete the actual GST % slabs (0, 0.1, 0.25, 1, 1.5, 2, 3, 5, 7.5, 12, 18, 28%) and, if CESS is enabled, CESS rate slabs — each with an optional label. A collapsible reference table shows the standard CGST/SGST/IGST split and example product categories for each slab.
5 Payment Methods — checkout options, UPI, bank details and store wallet
- Toggle which payment types appear as buttons at checkout: Cash, Card, UPI, Wallet, Cheque, Credit, Layby (advance booking) and Split payment.
- If UPI is enabled, enter your UPI ID — it is used to render a QR code on the printed bill.
- Fill Bank Name, Account Number and IFSC Code — these print on bills, quotations and purchase orders so customers can pay via NEFT/IMPS.
- Payment gateways (Razorpay, PhonePe, Paytm, Cashfree, etc.) are no longer configured here — a card links out to the separate Integrations page.
- Toggle Customer Display (a second screen showing the running bill to the customer at checkout).
- Toggle Store Wallet and set a Cashback % so customers automatically earn store credit on every sale, redeemable on future purchases.
6 Stock Settings — alerts, valuation, costing method and licenses
- Toggle Low Stock Alert and set a Low Stock Threshold quantity — drives the low-stock badge on Products and the Dashboard alerts panel.
- Toggle Allow Negative Stock (lets you sell past zero quantity) and Auto Reorder.
- Choose a Stock Valuation Method — FIFO, LIFO or Average — used in inventory reports and P&L stock value.
- Separately choose a Costing Method (FIFO, LIFO or Weighted Average) — used specifically for Cost of Goods Sold (COGS) on the P&L and inventory valuation reports; an info box explains the difference between the three.
- Enter regulatory numbers: Drug License Number and FSSAI License Number — both print on invoice footers for pharmacy/food businesses.
7 Loyalty Points — earn/redeem rates, membership tiers and referrals
Loyalty rewards work in three layers: base points, optional membership tiers with bonus multipliers, and optional referral rewards.
- Toggle Enable Loyalty Program — everything else on this tab only appears once this is on.
- Set Points earned per ₹ spent, ₹ value per point redeemed and Minimum points to redeem — a live example shows how many points and how much value a ₹1,000 sale would earn.
- Toggle Membership Tiers and set lifetime spend Thresholds for Silver/Gold/Platinum, plus an Earn Rate Multiplier for each tier (e.g. Gold customers earn 1.5× points).
- Toggle Referral Rewards and set bonus Points for the referrer and Points for the new customer, both awarded automatically on the referred customer's first completed sale.
8 Notifications — email alerts and on-screen warnings
- Toggle Email Notifications and enter a Notification Email address to receive system alerts.
- Toggle Low Stock Emails (sent when stock drops below your Low Stock Threshold) and Daily Report Email (a nightly sales summary).
- Toggle Show Low Stock Alert Badge (on the Products page) and Show Customer Display (the checkout-facing second screen) — these are display toggles, separate from the email ones above.
9 Email Settings — SMTP server and sender identity
This is the mail server BazaarPOS uses to actually send emails — for Scheduled Reports, low-stock alerts, and customer invoice emails.
- Fill in SMTP Host (e.g. smtp.gmail.com), SMTP Port (default 587) and toggle Use Secure Connection (TLS/SSL).
- Enter SMTP Username and SMTP Password (an app password, not your regular email password, for providers like Gmail).
- Set the From Name and From Address shown to recipients on every outgoing email, and a default comma-separated Report Recipients list for Scheduled Reports.
- Click Send Test Email to confirm the SMTP configuration actually works before relying on it.
10 Receipt / Print — paper size, copies and thermal receipt text
- Choose Paper Size — A4, A5, 80mm or 58mm thermal — and how many Copies print per sale (1–5).
- Toggle Use Thermal Printer for receipt-style output instead of a full-page invoice.
- Set free-text Receipt Header and Receipt Footer that print at the very top and bottom of the thermal receipt.
- Design custom thermal layouts on the linked Thermal Print Themes screen: create a theme from a blank slate or a preset, drag-and-drop sections (company details, items table, payment summary) using the Theme Builder, preview it against sample sale data, and mark one theme as the default used by every print.
11 Online Store — digital catalog and WhatsApp
- Toggle Enable Digital Catalog — a public, shareable product catalog page is generated at a fixed
/catalogURL (copy or open it directly from this tab). - Set a Catalog Tagline and a Banner Image URL (with a live image preview) shown at the top of the public catalog.
- Enter your WhatsApp Business Number — generates a
wa.medeep link with a "Test" button, and enables sharing invoices directly to customers over WhatsApp from the billing screen.
12 Features — turn app-wide capabilities on or off, per role
A master switchboard for optional app capabilities (GST, Loyalty, Inventory, Reports, Barcode, Purchase Orders, Multi-Payment, Thermal Print, Expense Tracking, Multi-Store and more), grouped by Finance / Customer / Operations / Analytics.
- Flip the toggle next to any feature to enable/disable it store-wide — this hides or shows the related sidebar menu items and billing-screen options for everyone.
- Click Roles next to a feature to expand a per-role override panel, and individually allow or block that feature for Cashiers and Managers even while it stays on for Admins (Admins are always "Always On" and cannot be blocked).
- An override shows as Blocked (red), Allowed (green), or Inherited (grey, meaning it just follows the master toggle).
13 Custom Fields — add extra data fields to Products, Customers, Sales or Invoices
- Switch the entity tab at the top: Product, Customer, Sale or Invoice.
- Click Add Field and choose a Field Type — Text, Number, Date, Yes/No, Single Select or Multi Select (Select types require newline-separated Options).
- Set the Label (auto-generates a machine-readable Key, editable only at creation), an optional Placeholder, Default Value, and whether the field is Required.
- Use the table's row actions to Edit, Enable/Disable, or (Admin-only) Delete a field.
14 AI Features — store your own AI provider API keys
- Enter an OpenAI API key and/or Claude (Anthropic) API key to use your own account's AI credits for AI-assisted features elsewhere in the app.
- Click Save — keys are written to this browser's local storage only.
localStorage (key aiIntegrationKeys) — there is no backend save call, so keys do not sync between devices or browsers and are lost if browser data is cleared.15 Staff / Users — add staff, assign roles and branch access
- Click Add User (shows a live count against your plan's user limit, e.g. "3/5") and fill Name, Mobile Number (used as the login ID, with a country-code picker), optional Email, a starting Password, and a Role.
- For non-Admin roles, tick each Branch the user should access from the branch-access list, choosing a per-branch role (or "No Access"), then pick their Default Branch to log into automatically.
- Use row actions to Edit a user, Reset Password (Admin sets a new password directly), or Deactivate/Activate their account.
- A "Login ID" column shows the mobile number staff actually sign in with; a status badge flags accounts that are "Awaiting first login" (must change their password on first sign-in).
16 Security — password, security questions and interface language
- Admins can toggle Allow staff to reset their own password with security questions — a business-wide setting (stored on the Business, not the Branch).
- Every user (this matters most for the Admin, who has nobody else to reset their password) can set up Your Security Questions: pick 3 different questions from a list of 10 and answer them, so they can self-serve a forgotten-password reset later.
- Use Change Password to update your own password (current password, new password, confirm — minimum 6 characters).
- A read-only Session Info card shows who you are logged in as and your role.
- Pick your Interface Language from a country-aware dropdown of supported languages (11 languages app-wide).
17 Roles — manage system roles and create custom job titles
BazaarPOS ships with 3 base permission tiers (Admin, Manager, Cashier); this tab lets you rename their badges and, more importantly, create additional named roles (e.g. "Floor Manager", "Senior Cashier") that map onto one of those 3 tiers.
- The System Roles section lists the built-in Admin/Manager/Cashier roles with their current user counts — click Edit to change a system role's display label or badge color (its underlying permission tier is locked).
- Click Add Custom Role to create a new role: type a Role Name (auto-generates a machine key), pick a Permission Tier it inherits from (Admin/Manager/Cashier), and pick a Badge Color from presets or a custom color picker.
- Custom roles show their tier and a delete action (with a confirm step) in the Custom Roles section — you cannot delete a role while staff are still assigned to it.
18 Staff Permissions — fine-grained per-role access matrix
The most powerful tab: two big matrices (one for Settings tabs, one for the entire sidebar menu) where every role gets a permission level for every item.
- For the Settings Tabs matrix and the Navigation Menu matrix, pick a permission level per role per row: No Access, Read Only, Create, Edit, Delete, Approve, Export, or Full Control.
- Use the Set all… dropdown in a role's column header to apply one permission level to every row at once for that role.
- Locked rows (Reset App, Staff Permissions, Roles) always show Admin = Full Control and everyone else = No Access and cannot be changed — a padlock icon marks this section.
- Click Save Permissions to apply the whole matrix at once, or Reset to discard unsaved changes and reload the last saved configuration.
19 Reset App — wipe transactional data (irreversible)
A destructive, one-way operation for starting a shop fresh — for example after finishing a trial with test data.
- Tick which data categories to delete: Sales/Transactions, Ledger entries, Audit Logs, Customers, Products, and/or reset Settings back to defaults — each option shows exactly what it removes.
- Type
RESET(all caps) into the confirmation box to unlock the delete button. - Click Reset Now — a native browser confirm dialog asks one more time before anything is deleted.
- A result summary shows how many records were deleted per category once the operation finishes.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
Basic / Advanced mode toggle | Top-of-page switch that narrows the left tab list to just 7 onboarding-essential tabs (Basic) or shows every tab your role can access (Advanced); saved per-browser in local storage. |
Configuring for (scope selector) | Appears above operational tabs when your business has parent/sub-company/branch levels; lets an Admin or Manager point the whole tab at a specific branch or company instead of the default one. |
Invoice Prefix / Start Number | Controls the text prefix and first number used for auto-generated invoice numbers app-wide, with a live preview of the next number. |
Timezone / Date Format | Store-wide timezone and date display format used by every report, list, receipt and printed document. |
Tax System dropdown | Selects the tax framework (Indian GST, EU/UK/UAE VAT, Australian/Canadian/Singapore GST, US Sales Tax, or none) that governs which fields and calculations appear elsewhere in Tax and on every bill. |
Business Registration Type | Your dealer/registration type under the chosen tax system (e.g. Regular vs Composition Scheme in India) — changes which fields and filing periods are relevant. |
GST Rate Master table | Admin-managed list of the actual GST % (and CESS %) slabs offered when tagging products and billing items; supports add, inline edit and delete. |
Payment method toggles | Cash / Card / UPI / Wallet / Cheque / Credit / Layby / Split — each toggle shows or hides that payment button on the checkout screen. |
Store Wallet + Cashback % | Enables a store-credit wallet per customer and an automatic cashback percentage credited after each completed sale. |
Low Stock Alert + Threshold | Turns on low-stock warnings and sets the quantity below which a product is flagged, driving the Products badge and Dashboard alerts. |
Stock Valuation / Costing Method | FIFO, LIFO or (Weighted) Average — two related but separate settings: one values on-hand stock for reports, the other calculates cost of goods sold for the P&L. |
Loyalty points-per-currency / redeem rate | Defines how many points a customer earns per unit spent, how much each point is worth when redeemed, and the minimum points needed to redeem at all. |
Membership Tier thresholds & multipliers | Lifetime spend cut-offs for Silver/Gold/Platinum status, each with its own bonus points-earn multiplier applied automatically at checkout. |
SMTP Host / Port / User / Password | The outgoing mail server credentials BazaarPOS uses to send scheduled reports, low-stock alerts and customer emails; test with the Send Test Email button before relying on it. |
Receipt Paper Size / Copies | Chooses A4, A5, 80mm or 58mm output and how many copies print per completed sale. |
Digital Catalog toggle + URL | Publishes a public product catalog at a fixed /catalog URL that customers can browse without logging in. |
WhatsApp Business Number | Generates a wa.me deep link used both for a "test" button here and for sharing invoices to customers via WhatsApp from the billing screen. |
Feature toggle + per-role override | Master on/off switch for an app-wide capability (GST, Loyalty, Barcode, Purchase Orders, etc.) plus an optional per-role Allow/Block override on top of it. |
Custom Field builder | Defines extra data fields (Text/Number/Date/Yes-No/Select/Multi-Select) attachable to Products, Customers, Sales or Invoices, each with its own key, type and required flag. |
Branch access matrix (Staff / Users) | Per-staff-member list of which branches they can log into, what role they hold at each branch, and which branch they land in by default. |
Staff Permissions matrix | Per-role, per-item permission level (No Access through Full Control) covering every Settings tab and every sidebar menu item at once; "Set all" bulk-applies one level per role. |
Reset App confirmation ("RESET") | Type-to-confirm safety gate that must exactly match before the destructive delete button on Reset App becomes clickable. |
Tips & Best Practices
- Use Basic mode while first setting up a new shop — it hides the 12 advanced tabs you don't need yet and keeps onboarding to the 7 essentials.
- Set up your own Security Questions on the Security tab as soon as you create the Admin account — the Admin has nobody else to reset their password for them.
- Click Send Test Email on the Email Settings tab immediately after entering SMTP details — a wrong password there silently breaks Scheduled Reports and low-stock alerts until tested.
- Preview every option on the Invoice Template gallery with your own logo and address before switching — the preview uses your real Shop Info data, not placeholder text.
- Configure the Staff Permissions matrix before you create a lot of staff accounts — it is much faster to set the rules once than to fix individual accounts later.
- If you operate more than one branch or sub-company, always check the "Configuring for" scope selector before editing Tax, Invoice or Payment settings — changes only apply to whichever level is currently selected.
- Switching to Composition Scheme under Tax changes how every sale calculates tax going forward — confirm with your accountant before flipping it on an established shop.
- Export any data you need (via Import/Export or Reports) before using Reset App — it is a one-way operation with no built-in backup step.
Troubleshooting & FAQ
I don't see the Staff / Users tab.
The GST E-Invoice or Tax tab is empty or missing entirely.
I changed Staff Permissions but a logged-in employee still has the old access.
I clicked Reset Now — can I undo it?
Notifications tab shows an email toggle but no emails are being sent.
A tab I use every day disappeared after switching to Basic mode.
Why does the "Configuring for" dropdown not show up on some tabs?
My AI API keys disappeared after switching computers.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/Settings.jsxfrontend-app/packages/pos-react-lib/src/components/Layout/navItems.jsx (SETTINGS_ITEM.children — the 19-tab menu definition)frontend-app/packages/pos-react-lib/src/pages/settings/BusinessTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/InvoiceTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/InvoiceTemplateTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/EInvoicingTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/TaxTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/TaxMasterTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/TenantTaxConfigTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/PaymentTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/InventoryTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/LoyaltyTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/NotificationsTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/EmailSettingsTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/ReceiptTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/ThermalThemeTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/OnlineStoreTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/FeaturesTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/BillingFeaturesTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/CustomFieldsTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/AIIntegrationTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/UsersTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/SecurityTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/RolesTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/RoleAccessTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/FactoryResetTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/StoresTab.jsx (Branches — reached from Setup group)frontend-app/packages/pos-react-lib/src/pages/settings/TerminalsTab.jsx (registered POS terminals)frontend-app/packages/pos-react-lib/src/pages/settings/ConnectionTab.jsx (backend/data-sync/cloud URLs, LAN certificate setup)frontend-app/packages/pos-react-lib/src/pages/settings/DataScopeTab.jsx (Company/Unit/Branch visibility scope per entity)frontend-app/packages/pos-react-lib/src/pages/settings/CustomerGroupsTab.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/UnitsTab.jsx / UnitsManager.jsxfrontend-app/packages/pos-react-lib/src/pages/settings/PurchasesTab.jsx (purchase budget controls)frontend-app/packages/pos-react-lib/src/pages/settings/RecurringInvoiceTab.jsx (wraps RecurringInvoiceListPage)frontend-app/packages/pos-react-lib/src/pages/settings/_shared.jsx (Field/Input/Toggle/SectionCard/SaveButton/Select/ActionButton/StatusBadge/InfoBox primitives shared by every tab)
Backend endpoints used:
GET/PUT /settingsGET/PUT /settings/:storeId/settingsGET /settings/businessesPOST /settings/businessesPUT /settings/businesses/:idPUT /settings/businesses/:id/defaultPATCH /settings/businesses/:id/toggle-activeGET/PUT /settings/businesses/:id/settingsGET /settings/storesPOST /settings/storesPUT /settings/stores/:idGET/PUT /settings/role-accessGET /settings/rolesPOST /settings/rolesPUT /settings/roles/:idDELETE /settings/roles/:idGET /settings/usersPOST /settings/usersPUT /settings/users/:idPUT /settings/users/:id/reset-passwordPUT /settings/change-passwordGET/POST /settings/:storeId/custom-fieldsPUT/DELETE /settings/:storeId/custom-fields/:idGET /settings/:storeId/featuresPUT /settings/:storeId/features/:keyGET/POST /settings/gst-ratesPUT/DELETE /settings/gst-rates/:idGET /tax-master/countriesGET/POST /tax-master/taxesPUT/DELETE /tax-master/taxes/:idPOST /tax-master/tenant-taxes/initializeGET /tax-master/tax-groupsGET/POST /tax-master/tenant-configGET /settings/accessible-scopesGET /settings/customer-groupsGET /settings/unitsGET /stores/:storeId/thermal-themesPOST /stores/:storeId/thermal-themes/seedPOST/PUT/DELETE /thermal-themes(/:id)POST /thermal-themes/:id/set-defaultPOST /settings/factory-resetPOST /auth/security-questions/setupPOST /report-schedules/test-email
Related tables (db-core repositories):
StoreSettingsBusinessStoreUserRoleRoleAccessConfig (JSON)CustomFieldStoreFeatureGstRateTaxMasterCountryTaxMasterTaxTenantTaxConfigurationTaxGroupThermalThemeCustomerGroupUnitTerminal
Redux slices:
auth (current user, role, selectedStoreId)scopeSlice (setAvailableScopes — parent/sub-company/branch scope selector)taxConfigSlice (setTaxConfig)navAccessSlice (setNavAccess — drives which sidebar items and settings tabs render)licenseSlice (selectLicenseInfo — plan feature gates and user-count limits)
Settings.jsx is a single component that owns nearly all state (settings object, scope, users, businesses, stores, custom fields) and passes it down as props into whichever tab is active — most tabs are dumb forms driven by a shared { settings, set, setToggle, saving, isManager, onSubmit } prop shape from formTabProps. Visible tabs are computed from a hard-coded ADMIN_ONLY_TABS set combined with a dynamic roleAccessConfig fetched from /settings/role-access (configured on the Staff Permissions tab), further filtered by PLAN_FEATURE_TABS (gst/loyalty/notifications) and Basic/Advanced mode. Saving pushes changes through dataSyncEngine.push() so the mobile app picks up store_settings changes without a manual sync.