Skip to content

Store configuration settings checklist

Source UI: apps/vendor-web/src/components/dashboard/stores/StoreConfigurationTab.tsx
Inner tabs: general | ops_sale | documents | pos (?configTab=)

Legend

ColumnMeaning
UIControl visible on the Configuration tab
SaveValue persisted on section Save
RuntimeBackend or vendor-web reads the value and changes behavior
TestsAutomated coverage (not full E2E)

Status: Yes = done for that column · Partial = incomplete · No = missing · = not applicable


Setting keyUISaveRuntimeWhere implementedTest cases
store.nameYesYesYesPATCH …/configuration + stores; used everywhereSC-MAN-01 save store name
store.phoneYesYesYesSameSC-MAN-01
store.logoYesYesYesupdateVendorStore logo pathSC-MAN-01
profile_emailstores.emailYesYesYessaveSectionupdateVendorStoreSC-MAN-01
profile_taxstores.taxYesYesPartialStore record; not all receipts use itSC-MAN-01
profile_minimum_orderstores.minimum_orderYesYesPartialStore recordSC-MAN-01
profile_cover_photostores.cover_photoYesYesPartialStore brandingSC-MAN-01
store.gstNoPartialPartialIn form baseline only; no field in UI
store_kindNoYesNoconfiguration.store_kind via PATCH only
profile_module_idstores.module_idNoYesPartialAuto-set to first module in useEffect; saved on store_contact save
profile_statusstores.statusNoYesPartialSaved on store_contact save; no UI control

Section — Business location (address_prefs)

Section titled “Section — Business location (address_prefs)”
Setting keyUISaveRuntimeWhere implementedTest cases
store.addressYesYesYesstores.address + map geocodeSC-MAN-03
store_latitude / store_longitudeYesYesYesupdateVendorStore; map previewSC-MAN-03
open_api_key (new / clear)YesYesPartialstore_configurations.open_api_key; masked on GET; used e.g. vendor-suppliers.serviceSC-AUTO-05, SC-MAN-03
country, province_label, district_label, ward_label, street_lineNoYesNoPATCH configuration only; no UI since tab merge
general_allow_customer_import_without_phoneNoYesNoColumn + PATCH; no consumer foundSC-AUTO-03 (patch bundle)
general_use_ordering_pageNoYesNoColumn + PATCH; no consumer foundSC-AUTO-03
Setting keyUISaveRuntimeWhere implementedTest cases
currency_codeYesYesPartialstore_configurations; display/formatting in POS/settingsSC-MAN-01
currency_symbolYesYesPartialSameSC-MAN-01
currency_denominationsYesYesYesSynced to dashboard_prefs cash grid; parsePosCashDenominationsFromDashboardPrefsSC-MAN-01, shift open/close modals
currency_symbol_positionYesYesNoUI on general tab; formatting consumer TBDSC-MAN-01
currency_abbreviate_amountsYesYesNoUI on general tab; formatting consumer TBDSC-MAN-01
Setting keyUISaveRuntimeWhere implementedTest cases
vat_allow_edit_cancel_e_invoiceYesYesNostore_configurations + PATCH; e-invoice flows TBDSC-MAN-01
vat_tracking_modeYesYesNoSameSC-MAN-01
vat_apply_resolution_110YesYesNoSameSC-MAN-01
vat_ecommerce_reduction_appliedYesYesNoSameSC-MAN-01

Section — Clover price sync (clover) — general tab

Section titled “Section — Clover price sync (clover) — general tab”
Setting keyUISaveRuntimeWhere implementedTest cases
clover_merchant_idYesYesYesRoutes webhook merchant → storevendor-store-configuration.service.spec.ts, sections spec
clover_price_sync_enabledYesYesYesWebhook auth + sync gateClover service specs
clover_api_environmentYesYesYesClover REST base URLClover service specs
clover_webhook_auth_codeYesYesYesValidates X-Clover-AuthClover webhook service spec
clover_api_access_tokenYesYesYesFetches item price after webhookclover-inventory-price-sync.service.spec.ts
clover_webhook_urlYes (read-only)Derived from PUBLIC_API_BASE_URL on GET

See Clover price sync (webhook).


Setting keyUISaveRuntimeWhere implementedTest cases
ops_max_customer_debt_amountYesYesYesWholesale PosService.placeOrder + getWholesaleCreditStatus via evaluatePosStoreDebtPlacement (wholesale receivable totals only)pos-store-debt-policy.util.spec.ts
ops_max_debt_amountYesYesYesSameSame
ops_deposit_edit_ruleNo (hidden)NoNoTemporarily hidden; DB/API retained for future deposit-slip edit rules
ops_best_selling_stats_daysYesYesYesvendor-products-best-selling-window.util.tsvendor-products-best-selling-window.util.spec.ts
ops_allow_quick_returnYesYesYesvendor-orders.service return pathsvendor-orders.service.spec.ts
ops_default_receivable_on_deliveryYesYesYesPosService delivery + receivable defaultManual delivery order
wholesale_credit_term_modeYesYesYesresolveWholesaleCreditPolicy, invoice due UIwholesale-credit-policy.util.spec.ts, vendor-invoice-due-date
wholesale_credit_deadline_daysYesYesYesSameSame
wholesale_credit_due_day_of_monthYesYesYesSameSame
wholesale_max_open_debt_roundsYesYesYesevaluateWholesaleCreditPlacementwholesale-credit-policy.util.spec.ts
wholesale_max_open_debt_rounds_ruleYesYesYesSameSame
Setting keyUISaveRuntimeWhere implementedTest cases
sale_allow_cashier_discountYesYesYesPosService.placeOrder blocks dto.discount and dto.coupon_code when false; vendor-web POS hides discount + coupon rowspos-store-sales-policy.util.spec.ts, store-configuration-pos-flags.util.spec.ts
sale_show_stock_hintsYesYesYesDashboard POS menu + create order (PosMenuPanel); POS workspace sale search dropdown (sale-page.tsx)pos-variations.spec.ts, contract spec
sale_allow_negative_stockYesYesYesPosService.validateAggregatedCartStock; sale-page, dashboard POS, create orderpos-aggregated-cart-stock.spec.ts, pos-sellable-stock.util.spec.ts
sale_allow_view_customer_revenueYesYesYesPosService.searchCustomers + POS customer stats (PosCustomerSelectionStats); vendor customers list spent at current store (completed + paid orders only) when store_id is set — hidden/zero when false; vendor customer detail total order amount uses sum of all non-deleted orders in vendor store scope; POS workspace customers page hides revenue column/rowpos-customer-lifetime-revenue.util.spec.ts, store-configuration-pos-flags.util.spec.ts, vendor-customers.service.spec.ts
sale_allow_track_customer_phoneNo (hidden)YesNoPersisted only; reserved
sale_restrict_revenue_drawerYesYesNoPersisted only
sale_show_customer_debt_on_invoiceNo (hidden)YesYesvendor-orders.service receipt HTML (showCustomerDebtOnInvoice)Manual receipt
sale_debt_over_limit_ruleYesYesYesevaluatePosStoreDebtPlacement on wholesale debt placement + credit-status previewpos-store-debt-policy.util.spec.ts
sale_allow_search_other_cashier_invoiceNo (hidden)NoNoTemporarily removed from UI and order-list search policy
sale_search_invoice_scopeNo (hidden)NoNoTemporarily removed (paired with other-cashier search)
sale_return_within_enabledYesYesYesvendor-orders.service refund / POS returnpos-store-sales-policy.util.spec.ts
sale_return_within_daysYesYesYesSameSame
sale_invoice_edit_cancel_enabledNo (hidden)NoNoTemporarily removed from UI and cancel policy
sale_invoice_edit_cancel_daysNo (hidden)NoNoPaired with edit/cancel toggle (reserved)
sale_pos_enable_deliveryYesYesYesDashboard POS, create order, sale workspace; PosService.placeOrderpos-store-pos-surface.util.spec.ts, store-configuration-pos-flags.util.spec.ts
sale_pos_enable_invoiceYesYesYesSameSame
sale_pos_enable_work_shiftYesYesYesEmployee open-shift gate on dashboard POS, create order, sale workspace (employeePosWorkShiftGateRequired)store-configuration-pos-flags.util.spec.ts
sale_pos_enable_custom_itemYesYesYesCustom item buttons + evaluatePosCustomItemPlacementDenied in PosService.placeOrderpos-store-pos-surface.util.spec.ts, store-configuration-pos-flags.util.spec.ts
sale_pos_enable_membershipYesYesYesMembership plan button, checkout preview hook, evaluatePosMembershipPlacementDeniedSame
sale_pos_payment_cashYesYesYesDashboard POS, create order, sale workspace payment chipsstore-configuration-pos-payment-methods.util.spec.ts
sale_pos_payment_cardYesYesYesSameSame
sale_pos_payment_debtYesYesYesSame (wholesale / linked customer)Same
sale_pos_payment_checkYesYesYesSame; PosService.placeOrder marks check paid like cashpos-payment-method.util.spec.ts, same util spec

Section — Document numbering (documents)

Section titled “Section — Document numbering (documents)”
doc_keyUISaveRuntimeWhere implementedTest cases
salesYes (table)YesYes (POS place)allocateStoreDocumentNumberorders.entity_key; orderDisplayId in vendor orders / place responsestore-document-number.util.spec.ts
order, stock_in, stock_out, cash_in, cash_out, customer, employee, supplierYes (table)YesNoRules saved; allocator ready — not wired to those flows yetSC-AUTO-02, SC-AUTO-03

Section — Warehouse (warehouse) — documents tab

Section titled “Section — Warehouse (warehouse) — documents tab”
Setting keyUISaveRuntimeWhere implementedTest cases
wh_show_batch_when_zero_stockYesYesNoPersisted; warehouse UI consumers TBDSC-MAN-01
wh_show_expired_goodsYesYesNoSameSC-MAN-01
wh_require_batch_expiryYesYesNoSameSC-MAN-01
wh_export_over_stock_ruleYesYesNoSameSC-MAN-01
wh_export_over_batch_ruleYesYesNoSameSC-MAN-01
wh_warn_incomplete_inventoryYesYesNoSameSC-MAN-01
wh_show_sale_price_on_stock_docsYesYesNoSameSC-MAN-01
wh_allow_change_export_warehouse_on_sale_slipYesYesYespos-export-warehouse.util.ts, PosServicepos-export-warehouse.util.spec.ts

Section — POS receipt & tips (pos) — store printer via PUT /vendor/stores/:id; terminal copies via configuration patch

Section titled “Section — POS receipt & tips (pos) — store printer via PUT /vendor/stores/:id; terminal copies via configuration patch”
Form fieldUISaveRuntimeWhere implementedTest cases
pos_receipt_merchant_copy / pos_receipt_customer_copyYesYesYespos_receipt_print_mode in dashboard_prefs; skip print/preview when mode 0SC-AUTO-04, store-pos-receipt-prefs.spec.ts, pos-order-receipt-finalize
pos_terminal_receipt_merchant_copy / pos_terminal_receipt_customer_copyYesYesYesstore_configurations columns; ECR Hub receipt_print_mode when device mode is 0 (not store printer prefs)store-pos-receipt-prefs.util.spec.ts, payment-terminal-routing.spec.ts
pos_receipt_signature_*YesYesYespos_receipt_signature_modeSC-AUTO-04
pos_receipt_barcode_*YesYesYespos_receipt_barcode_modeSC-AUTO-04
pos_cash_drawer_manual_open / pos_cash_drawer_auto_on_cashYesYesYespos_cash_drawer_mode; post-order drawerSC-AUTO-04
pos_tip_enabledYesYesYesdashboard_prefs.pos tip fieldsSC-AUTO-04, POS tip UI
pos_tip_basisYesYesYespercent vs fixed presetsSC-AUTO-04
pos_tip_percent_presets_csvYesYesYestip_percent_presetsSC-AUTO-04
pos_tip_default_percent / pos_tip_default_fixed_amountYesYesYesdefaults in prefsSC-AUTO-04

IDScopeCommand / file
SC-AUTO-01Inner tab query paramstore-configuration-inner-tab.spec.ts
SC-AUTO-02Document preview helpervendor-store-configuration-sections.spec.ts
SC-AUTO-03Section PATCH bundles, dirty state, open API omissionvendor-store-configuration-sections.spec.ts
SC-AUTO-04POS dashboard_prefs payloadvendor-store-pos-update-payload.spec.ts
SC-AUTO-05Open API key GET/PATCHvendor-store-configuration.service.spec.ts
SC-AUTO-06Store sales policy (discount, return/cancel windows, search)pos-store-sales-policy.util.spec.ts
SC-MAN-01–04Full UI flowsManual (see Employees & stores)

LayerCount (approx.)
Fields with UI + Save + Runtime36
UI + Save, runtime not wired14
Save only (no UI): address/general extras (7), hidden store fields (4)11
Document rules: save + preview, no live numbering9 keys

  1. Document number allocatorsales wired at POS place (store-document-number.util.ts); extend to order, stock, cash, CRM entities.
  2. Sales policy enforcement — done (pos-store-sales-policy.util.ts, PosService, vendor-orders.service). Invoice search scope / other-cashier search temporarily disabled (UI + list filters).
  3. sale_show_stock_hints — done on dashboard POS / create-order menu tiles and POS workspace sale search.
  4. Restore warehouse + VAT sections — done on general (VAT, currency extras) and documents (warehouse).
  5. Expose general_*, structured address fields; wire currency_symbol_position / currency_abbreviate_amounts formatters if still needed.

  • Employees & stores — wholesale credit, negative stock, Open API
  • POS — checkout stock and sale_allow_negative_stock
  • Customers — wholesale credit precedence