PlatformPOS & Checkout

POS & Checkout

Cash-first register, vertical-ID gated at the cart.

What it does

Cash Discipline

Every drawer counted, every drop logged, every variance escalated on a ladder.

  • Per-budtender till sessions, variances routed to admin review, then camera review if not offset
  • Proprietary technology · request demo for full disclosure
  • Safe + ATM-bank cash trail — every cash_movements row writes audit
  • Armored pickups recorded with amount and bag number, on the carrier’s schedule
  • A nightly check pushes managers when a till is still open
  • Daily-close panel — variance per shift, drops, payouts, ending balance
  • Each weekly deposit bag stays open until a person confirms it from the bank account (no live bank feed yet); a difference stays on the record
  • A split that makes the day’s count add up across the deposit bag, the ATM and the safe, off until you turn it on
  • A till-to-bank view of the breaks between till count, bag and safe, by day, step and amount, off until you turn it on; its bank check reads one credit union’s export and one armored carrier’s deposit lines so far
Cash · counts + variance

Also on this tab

Register

Cash-first checkout, vertical-ID gated at the cart, manager-PIN where it counts.

  • Cash payment + change calculator; a till variance flags on close, and a bigger one goes to a queue with the shift attached
  • Vertical-ID stop at the cart with DOB-mismatch and under-21 logging
  • Manager-PIN gates on voids, returns, manual prices, discount overrides

See it

If we go down, your register doesn’t

The question every operator asks before switching: what happens to my store if your system has an issue? Written plainly, no bravado.

Per-store database

Your Postgres is yours alone — not multi-tenant. An issue on another customer’s data never reaches yours.

Offline cache at the register

The register keeps the last-known cart state, so an in-flight transaction completes even if the connection blips.

You hear it from us first

Your admin contacts get an email from us the moment we detect a critical-path issue, backed by the live 5-minute probe rollup on /status and a written postmortem — not a status-page color you have to refresh. SMS escalation is in build; we’ll say so here the day it ships.

Switching POS

Moving off your current POS?

If you want CannAgent to be your register, talk to us first: we’ll tell you what’s ready in your state before you plan a switch. The switching fear is real: loyalty balances vanishing and day-one numbers that don’t tie out. The cutover workspace, coming soon, answers both — a readiness board, a loyalty-balance snapshot taken before the flip, and a reconciliation dry-run that proves the numbers match before you commit. You move in phases — shadow first, then flip — not all at once on a Friday.

Cutover · readiness board

Try it

Hands-on

Ring one

Don’t take our word for it. Ring a sale.

Change the product, the city, the card. The paper receipt is what your customer takes home. The CCRS panel with it is the row that goes to the state — the same fields, built by the same code. Set the customer under 21 and watch what happens to both.

Total $53.13. Files as RecreationalRetail.

SAMPLE DISPENSARY
LIC 412345 · SEATTLE, WA
BLUE DREAM 3.5G$35.00
CANNABIS EXCISE 37%$12.95
SALES/USE 10.55%$5.06
SEATTLE B&O 0.342%$0.12
TOTAL$53.13
21+ VERIFIED AT CART
THANK YOU · KEEP THIS RECEIPT
1
The CCRS row this sale files
Quantity
3.5
UnitPrice
35.00
SalesTax
5.06
OtherTax
12.95
SaleType
RecreationalRetail
Operation
Insert
  • RCW 69.50.535 — 37% cannabis excise, applied at retail
  • Seattle — Seattle (DOR loc 1726) 10.55% = 6.50% state + 4.05% local; B&O retailing 0.342% (2026–2032)

Computed by src/lib/receipt-demo.ts, which emits the same CcrsSaleRow the WSLCB submission is built from and is pinned against the real CCRS validator in CI. Statutory rates shown; a live store computes from its own configured local tables.