Store configuration settings checklist
Nội dung này hiện chưa có sẵn bằng ngôn ngữ của bạn.
Store configuration settings checklist
Section titled “Store configuration settings checklist”Source UI: apps/vendor-web/src/components/dashboard/stores/StoreConfigurationTab.tsx
Inner tabs: general | ops_sale | documents | pos (?configTab=)
Legend
| Column | Meaning |
|---|---|
| UI | Control visible on the Configuration tab |
| Save | Value persisted on section Save |
| Runtime | Backend or vendor-web reads the value and changes behavior |
| Tests | Automated coverage (not full E2E) |
Status: Yes = done for that column · Partial = incomplete · No = missing · — = not applicable
Tab general
Section titled “Tab general”Section — Store contact (store_contact)
Section titled “Section — Store contact (store_contact)”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
store.name | Yes | Yes | Yes | PATCH …/configuration + stores; used everywhere | SC-MAN-01 save store name |
store.phone | Yes | Yes | Yes | Same | SC-MAN-01 |
store.logo | Yes | Yes | Yes | updateVendorStore logo path | SC-MAN-01 |
profile_email → stores.email | Yes | Yes | Yes | saveSection → updateVendorStore | SC-MAN-01 |
profile_tax → stores.tax | Yes | Yes | Partial | Store record; not all receipts use it | SC-MAN-01 |
profile_minimum_order → stores.minimum_order | Yes | Yes | Partial | Store record | SC-MAN-01 |
profile_cover_photo → stores.cover_photo | Yes | Yes | Partial | Store branding | SC-MAN-01 |
store.gst | No | Partial | Partial | In form baseline only; no field in UI | — |
store_kind | No | Yes | No | configuration.store_kind via PATCH only | — |
profile_module_id → stores.module_id | No | Yes | Partial | Auto-set to first module in useEffect; saved on store_contact save | — |
profile_status → stores.status | No | Yes | Partial | Saved on store_contact save; no UI control | — |
Section — Business location (address_prefs)
Section titled “Section — Business location (address_prefs)”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
store.address | Yes | Yes | Yes | stores.address + map geocode | SC-MAN-03 |
store_latitude / store_longitude | Yes | Yes | Yes | updateVendorStore; map preview | SC-MAN-03 |
open_api_key (new / clear) | Yes | Yes | Partial | store_configurations.open_api_key; masked on GET; used e.g. vendor-suppliers.service | SC-AUTO-05, SC-MAN-03 |
country, province_label, district_label, ward_label, street_line | No | Yes | No | PATCH configuration only; no UI since tab merge | — |
general_allow_customer_import_without_phone | No | Yes | No | Column + PATCH; no consumer found | SC-AUTO-03 (patch bundle) |
general_use_ordering_page | No | Yes | No | Column + PATCH; no consumer found | SC-AUTO-03 |
Section — Currency (currency)
Section titled “Section — Currency (currency)”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
currency_code | Yes | Yes | Partial | store_configurations; display/formatting in POS/settings | SC-MAN-01 |
currency_symbol | Yes | Yes | Partial | Same | SC-MAN-01 |
currency_denominations | Yes | Yes | Yes | Synced to dashboard_prefs cash grid; parsePosCashDenominationsFromDashboardPrefs | SC-MAN-01, shift open/close modals |
currency_symbol_position | Yes | Yes | No | UI on general tab; formatting consumer TBD | SC-MAN-01 |
currency_abbreviate_amounts | Yes | Yes | No | UI on general tab; formatting consumer TBD | SC-MAN-01 |
Section — VAT (vat) — general tab
Section titled “Section — VAT (vat) — general tab”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
vat_allow_edit_cancel_e_invoice | Yes | Yes | No | store_configurations + PATCH; e-invoice flows TBD | SC-MAN-01 |
vat_tracking_mode | Yes | Yes | No | Same | SC-MAN-01 |
vat_apply_resolution_110 | Yes | Yes | No | Same | SC-MAN-01 |
vat_ecommerce_reduction_applied | Yes | Yes | No | Same | SC-MAN-01 |
Section — Clover price sync (clover) — general tab
Section titled “Section — Clover price sync (clover) — general tab”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
clover_merchant_id | Yes | Yes | Yes | Routes webhook merchant → store | vendor-store-configuration.service.spec.ts, sections spec |
clover_price_sync_enabled | Yes | Yes | Yes | Webhook auth + sync gate | Clover service specs |
clover_api_environment | Yes | Yes | Yes | Clover REST base URL | Clover service specs |
clover_webhook_auth_code | Yes | Yes | Yes | Validates X-Clover-Auth | Clover webhook service spec |
clover_api_access_token | Yes | Yes | Yes | Fetches item price after webhook | clover-inventory-price-sync.service.spec.ts |
clover_webhook_url | Yes (read-only) | — | — | Derived from PUBLIC_API_BASE_URL on GET | — |
See Clover price sync (webhook).
Tab ops_sale
Section titled “Tab ops_sale”Section — Operations (operations)
Section titled “Section — Operations (operations)”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
ops_max_customer_debt_amount | Yes | Yes | Yes | Wholesale PosService.placeOrder + getWholesaleCreditStatus via evaluatePosStoreDebtPlacement (wholesale receivable totals only) | pos-store-debt-policy.util.spec.ts |
ops_max_debt_amount | Yes | Yes | Yes | Same | Same |
ops_deposit_edit_rule | No (hidden) | No | No | Temporarily hidden; DB/API retained for future deposit-slip edit rules | — |
ops_best_selling_stats_days | Yes | Yes | Yes | vendor-products-best-selling-window.util.ts | vendor-products-best-selling-window.util.spec.ts |
ops_allow_quick_return | Yes | Yes | Yes | vendor-orders.service return paths | vendor-orders.service.spec.ts |
ops_default_receivable_on_delivery | Yes | Yes | Yes | PosService delivery + receivable default | Manual delivery order |
wholesale_credit_term_mode | Yes | Yes | Yes | resolveWholesaleCreditPolicy, invoice due UI | wholesale-credit-policy.util.spec.ts, vendor-invoice-due-date |
wholesale_credit_deadline_days | Yes | Yes | Yes | Same | Same |
wholesale_credit_due_day_of_month | Yes | Yes | Yes | Same | Same |
wholesale_max_open_debt_rounds | Yes | Yes | Yes | evaluateWholesaleCreditPlacement | wholesale-credit-policy.util.spec.ts |
wholesale_max_open_debt_rounds_rule | Yes | Yes | Yes | Same | Same |
Section — Sales (sales)
Section titled “Section — Sales (sales)”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
sale_allow_cashier_discount | Yes | Yes | Yes | PosService.placeOrder blocks dto.discount and dto.coupon_code when false; vendor-web POS hides discount + coupon rows | pos-store-sales-policy.util.spec.ts, store-configuration-pos-flags.util.spec.ts |
sale_show_stock_hints | Yes | Yes | Yes | Dashboard POS menu + create order (PosMenuPanel); POS workspace sale search dropdown (sale-page.tsx) | pos-variations.spec.ts, contract spec |
sale_allow_negative_stock | Yes | Yes | Yes | PosService.validateAggregatedCartStock; sale-page, dashboard POS, create order | pos-aggregated-cart-stock.spec.ts, pos-sellable-stock.util.spec.ts |
sale_allow_view_customer_revenue | Yes | Yes | Yes | PosService.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/row | pos-customer-lifetime-revenue.util.spec.ts, store-configuration-pos-flags.util.spec.ts, vendor-customers.service.spec.ts |
sale_allow_track_customer_phone | No (hidden) | Yes | No | Persisted only; reserved | — |
sale_restrict_revenue_drawer | Yes | Yes | No | Persisted only | — |
sale_show_customer_debt_on_invoice | No (hidden) | Yes | Yes | vendor-orders.service receipt HTML (showCustomerDebtOnInvoice) | Manual receipt |
sale_debt_over_limit_rule | Yes | Yes | Yes | evaluatePosStoreDebtPlacement on wholesale debt placement + credit-status preview | pos-store-debt-policy.util.spec.ts |
sale_allow_search_other_cashier_invoice | No (hidden) | No | No | Temporarily removed from UI and order-list search policy | — |
sale_search_invoice_scope | No (hidden) | No | No | Temporarily removed (paired with other-cashier search) | — |
sale_return_within_enabled | Yes | Yes | Yes | vendor-orders.service refund / POS return | pos-store-sales-policy.util.spec.ts |
sale_return_within_days | Yes | Yes | Yes | Same | Same |
sale_invoice_edit_cancel_enabled | No (hidden) | No | No | Temporarily removed from UI and cancel policy | — |
sale_invoice_edit_cancel_days | No (hidden) | No | No | Paired with edit/cancel toggle (reserved) | — |
sale_pos_enable_delivery | Yes | Yes | Yes | Dashboard POS, create order, sale workspace; PosService.placeOrder | pos-store-pos-surface.util.spec.ts, store-configuration-pos-flags.util.spec.ts |
sale_pos_enable_invoice | Yes | Yes | Yes | Same | Same |
sale_pos_enable_work_shift | Yes | Yes | Yes | Employee open-shift gate on dashboard POS, create order, sale workspace (employeePosWorkShiftGateRequired) | store-configuration-pos-flags.util.spec.ts |
sale_pos_enable_custom_item | Yes | Yes | Yes | Custom item buttons + evaluatePosCustomItemPlacementDenied in PosService.placeOrder | pos-store-pos-surface.util.spec.ts, store-configuration-pos-flags.util.spec.ts |
sale_pos_enable_membership | Yes | Yes | Yes | Membership plan button, checkout preview hook, evaluatePosMembershipPlacementDenied | Same |
sale_pos_payment_cash | Yes | Yes | Yes | Dashboard POS, create order, sale workspace payment chips | store-configuration-pos-payment-methods.util.spec.ts |
sale_pos_payment_card | Yes | Yes | Yes | Same | Same |
sale_pos_payment_debt | Yes | Yes | Yes | Same (wholesale / linked customer) | Same |
sale_pos_payment_check | Yes | Yes | Yes | Same; PosService.placeOrder marks check paid like cash | pos-payment-method.util.spec.ts, same util spec |
Tab documents
Section titled “Tab documents”Section — Document numbering (documents)
Section titled “Section — Document numbering (documents)”doc_key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
sales | Yes (table) | Yes | Yes (POS place) | allocateStoreDocumentNumber → orders.entity_key; orderDisplayId in vendor orders / place response | store-document-number.util.spec.ts |
order, stock_in, stock_out, cash_in, cash_out, customer, employee, supplier | Yes (table) | Yes | No | Rules saved; allocator ready — not wired to those flows yet | SC-AUTO-02, SC-AUTO-03 |
Section — Warehouse (warehouse) — documents tab
Section titled “Section — Warehouse (warehouse) — documents tab”| Setting key | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
wh_show_batch_when_zero_stock | Yes | Yes | No | Persisted; warehouse UI consumers TBD | SC-MAN-01 |
wh_show_expired_goods | Yes | Yes | No | Same | SC-MAN-01 |
wh_require_batch_expiry | Yes | Yes | No | Same | SC-MAN-01 |
wh_export_over_stock_rule | Yes | Yes | No | Same | SC-MAN-01 |
wh_export_over_batch_rule | Yes | Yes | No | Same | SC-MAN-01 |
wh_warn_incomplete_inventory | Yes | Yes | No | Same | SC-MAN-01 |
wh_show_sale_price_on_stock_docs | Yes | Yes | No | Same | SC-MAN-01 |
wh_allow_change_export_warehouse_on_sale_slip | Yes | Yes | Yes | pos-export-warehouse.util.ts, PosService | pos-export-warehouse.util.spec.ts |
Tab pos
Section titled “Tab pos”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 field | UI | Save | Runtime | Where implemented | Test cases |
|---|---|---|---|---|---|
pos_receipt_merchant_copy / pos_receipt_customer_copy | Yes | Yes | Yes | pos_receipt_print_mode in dashboard_prefs; skip print/preview when mode 0 | SC-AUTO-04, store-pos-receipt-prefs.spec.ts, pos-order-receipt-finalize |
pos_terminal_receipt_merchant_copy / pos_terminal_receipt_customer_copy | Yes | Yes | Yes | store_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_* | Yes | Yes | Yes | pos_receipt_signature_mode | SC-AUTO-04 |
pos_receipt_barcode_* | Yes | Yes | Yes | pos_receipt_barcode_mode | SC-AUTO-04 |
pos_cash_drawer_manual_open / pos_cash_drawer_auto_on_cash | Yes | Yes | Yes | pos_cash_drawer_mode; post-order drawer | SC-AUTO-04 |
pos_tip_enabled | Yes | Yes | Yes | dashboard_prefs.pos tip fields | SC-AUTO-04, POS tip UI |
pos_tip_basis | Yes | Yes | Yes | percent vs fixed presets | SC-AUTO-04 |
pos_tip_percent_presets_csv | Yes | Yes | Yes | tip_percent_presets | SC-AUTO-04 |
pos_tip_default_percent / pos_tip_default_fixed_amount | Yes | Yes | Yes | defaults in prefs | SC-AUTO-04 |
Automated test index (Configuration)
Section titled “Automated test index (Configuration)”| ID | Scope | Command / file |
|---|---|---|
| SC-AUTO-01 | Inner tab query param | store-configuration-inner-tab.spec.ts |
| SC-AUTO-02 | Document preview helper | vendor-store-configuration-sections.spec.ts |
| SC-AUTO-03 | Section PATCH bundles, dirty state, open API omission | vendor-store-configuration-sections.spec.ts |
| SC-AUTO-04 | POS dashboard_prefs payload | vendor-store-pos-update-payload.spec.ts |
| SC-AUTO-05 | Open API key GET/PATCH | vendor-store-configuration.service.spec.ts |
| SC-AUTO-06 | Store sales policy (discount, return/cancel windows, search) | pos-store-sales-policy.util.spec.ts |
| SC-MAN-01–04 | Full UI flows | Manual (see Employees & stores) |
Summary counts (May 2026 audit)
Section titled “Summary counts (May 2026 audit)”| Layer | Count (approx.) |
|---|---|
| Fields with UI + Save + Runtime | 36 |
| UI + Save, runtime not wired | 14 |
| Save only (no UI): address/general extras (7), hidden store fields (4) | 11 |
| Document rules: save + preview, no live numbering | 9 keys |
Recommended implementation order (gaps)
Section titled “Recommended implementation order (gaps)”- Document number allocator —
saleswired at POS place (store-document-number.util.ts); extend toorder, stock, cash, CRM entities. 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).— done on dashboard POS / create-order menu tiles and POS workspace sale search.sale_show_stock_hintsRestore warehouse + VAT sections— done on general (VAT, currency extras) and documents (warehouse).- Expose
general_*, structured address fields; wirecurrency_symbol_position/currency_abbreviate_amountsformatters if still needed.
Related
Section titled “Related”- Employees & stores — wholesale credit, negative stock, Open API
- POS — checkout stock and
sale_allow_negative_stock - Customers — wholesale credit precedence