VEYNDO
Handbook
frontend/src/admin/pos/README.mdView source ↗

English source · 2 min

Native register

POSWorkspace discovers authenticated POS channels, selects a register and links recent sales to the existing order editor. useRegister owns bounded catalog loading and serialized commands on the Studio request transport. It restores the cashier's cart capability, retains a stable checkout key and recovers a committed sale after a lost response.

RegisterCatalog uses the native product-family API for variants and barcode resolution. RegisterCart and RegisterCheckout consume authoritative quotes; pos-model converts tender text to integer minor units without a float roundtrip. RegisterReceipt calls the existing immutable order-document and authenticated PDF download owners. CSS is scoped and split into layout, completion and responsive responsibilities. Vocabulary is typed EN/DE/FR/ES, merchant receipt text inherits through the shared content-language editor.

Private app slots: admin.pos.catalog, admin.pos.cart, admin.pos.receipt. Their permission-bound context comes from the existing app surface provider. App business logic/assets remain in the app package, never in these host files.

No offline settlement, terminal driver, fiscal hardware/certification or shift cash-book is implied. This register requires the server for every committed sale.

Register.tsx composes the sale. useCashierFocus owns URL focus/fullscreen controls; cashier.css integrates with the existing Studio shell. RegisterCustomer resolves account/card identities through native CRM. RegisterDiscount transmits integer basis points/minor units and a required reason. RegisterAssistant calls the existing merchant chat without apply controls. ReceiptPrinter safely renders the issued native invoice text into a user-gesture popup and opens the OS print dialog. Dedicated cashier-i18n keys share EN/DE/FR/ES and the Studio locale. No plugin-owned feature or new order/payment/document/AI owner is introduced.

Receipt creation requires saved seller details in Settings → Company details. The shared request-error vocabulary explains this refusal in EN/DE/FR/ES and directs the cashier to retry the receipt, preserving the already recorded sale.

RegisterCheckoutOptions keeps payment/contact settings in the tools pane; RegisterCheckout keeps final tender and completion separate. useRegisterViewport measures actual available register height after translation, wrapping and viewport changes.