Prescription-gated checkout
Controlled products cannot finalize without an eligible patient and active PT33 context.
Loading PorThorOs…
Move quickly at the till without separating the sale from the patient, prescription, stock batch, payment, or staff member behind it.
Controlled products cannot finalize without an eligible patient and active PT33 context.
The server rechecks validity, product scope, prior dispensing, and remaining quantity at payment.
Every controlled line leaves a named sellable batch, with last-stock conflicts stopped before payment.
Cash and enabled branch payment methods are enforced by the checkout, not trusted from the browser.
Blocked sales stay recoverable, while repeated payment requests return the original result instead of charging twice.
Numbered receipt snapshots keep the original sale, payment, branch, staff, patient, and print history together.
Bring patient intake, consent, clinician review, prescription status, and dispensary history into one private handoff.
One-use links collect patient details through an expiring, tamper-resistant public flow.
Patients and staff can complete the same core workflow in English or Thai.
Typed consent, signatures, and validated documents stay private and access-controlled.
A branch kiosk creates a signed handoff into patient intake without exposing tenant records.
Authorized teams can search, group, and review patient, consent, PT33, and immutable sales history.
Compliance staff can review intake, verify originals, request more information, reject, or approve a PT33.
Capture the evidence while the work happens, then review the same source ledger instead of rebuilding the month from memory.
Received controlled stock carries its supplier, purchase, product, batch, quantity, and source-document trail.
Completed controlled sales produce source-derived outbound rows tied back to the patient, purpose, product, and quantity.
Every passed or blocked finalization keeps stable reason codes and the rule context used for the decision.
Role-scoped queues protect patient documents, clinician verification, and branch records from broad access.
Authorized users can export working PT27/PT28 ledgers with protected CSV values and auditable downloads.
Sensitive reads, decisions, retries, settings changes, prints, refunds, and stock movements leave sanitized audit events.
Follow each product from supplier evidence to branch room, count, transfer, sale, or approved adjustment.
Create products with generated identifiers, category-specific attributes, private documents, and branch pricing.
Keep licence, COA, GACP, expiry, lot, and source details with the stock they support.
Sellable stock can be selected by earliest expiry while reserved and unavailable quantities stay excluded.
Receive purchase orders partially or in full, with verified documents and immutable purchase invoice snapshots.
Run blind stock counts, approve differences, record loss, track rooms, and preserve conversion traceability.
Request, approve, dispatch, receive, and resolve variances with batch-exact movements at both branches.
Keep commercial rules centralized and let the server resolve the final branch price, deal, cost, and tax at checkout.
Create reusable retail pricing profiles with revision-safe updates.
Set branch-specific prices without creating a second product catalog.
Define explicit quantity breaks for products that change price by amount.
Configure date-aware deals and discounts that resolve inside the trusted quote.
Apply configured tax treatment during quoting and preserve the resolved amounts with the sale.
Keep supply books and immutable cost-plus franchise transfer pricing separate from retail overrides.
Give the counter a clean daily rhythm from staff login and opening cash to receipt lookup, refund review, variance, and close.
Search branch-scoped sales by date or receipt and open the original receipt and audit detail.
Refund complete sale lines through an approval flow with manager PIN protection and safe retry.
Regulated stock is not silently returned to sellable inventory; eligible accessories return to the original batch.
Open or resume a device-bound shift with an opening cash ledger and reasoned variance.
Record validated cash in and cash out alongside tender totals throughout the shift.
Close once, preserve the report snapshot, and keep immutable history for later review.
Read performance from transaction and stock ledgers, with the branch and date scope each role is allowed to see.
Track net sales, refunds, discounts, average sale, daily trend, category mix, and tender breakdown.
Review stock on hand, value, movement, aging, and branch-level inventory signals.
Analyze historical cost snapshots and gross margin without depending on today’s catalog values.
See privacy-conscious visit and spend aggregates without exposing patient identity in analytics.
Compare sales, discounts, refunds, and workload using branch-scoped employee metrics.
Authorized owners and investors can compare performance across branches from one report workspace.
Read historical strain mix and demand from the values captured with each completed sale.
Keep every person, device, branch, and setting inside the right operating boundary as the business grows.
Create the organization, first branch, and operating context used across the tenant application.
Pair, name, assign, revoke, and reactivate POS devices for a specific branch.
Use hashed staff PINs with device scope, duplicate protection, and failed-login lockout.
Budtenders, managers, owners, admins, compliance staff, and investors see only their permitted work.
Create staff, assign roles and branches, update access, and protect against unsafe self-demotion.
Manage branches, payments, receipts, finance, notifications, employees, devices, roles, and audit review.
See the connected workflow
Walk through stock receiving, one patient sale, shift close, and the resulting reports with your team.