WAC codes enforced in code, not in a binder.

Audit-log on every keystroke. Vertical-ID stop at the cart. Manager-PIN prompts cite the WAC code. WA excise + LIQ-1295 math at $0.01 precision, pulled direct from line items. Document vault with WSLCB-grade retention. The auditor’s first stop — you grep, you don’t reconstruct.

Four ways compliance breaks on a cannabis floor.

‘We’ll figure it out when they show up’ doesn’t survive the inspector knock.

WSLCB walks in. They want the void log for the last 90 days. They want the under-21 attempt log. They want the manifest variance log on the last six wholesale receipts. If your answer is ‘let me reconstruct it,’ the answer is wrong. CannAgent writes audit_log on every keystroke. You grep, you don’t reconstruct.

WAC 314-55-155 isn’t a poster, it’s the cart.

‘No false or misleading statements’ / ‘no medical claims’ isn’t enforced by a sign — it’s enforced where the language renders. Vertical-ID stop runs at the cart with DOB + under-21 logging. Brand-voice rules block efficacy claims at write-time on every customer-facing surface. The WAC code rides next to the rule in code, so the ‘why’ is one click away from the ‘what.’

Excise + sales tax math at $0.01 precision, not ‘close enough.’

37% WA cannabis excise + ~8.7% local sales tax = 1.458 multiplier on the final bill. Every line item carries the breakdown at write-time. LIQ-1295 monthly filing pulls direct from sale_line_items.pre_tax_revenue, not a back-out estimate. When the auditor asks for the receipt-to-form trace, you have it.

Document vault, not document email-thread.

Vendor licenses, manifest copies, COAs, security logs, training-completion records, age-verification photos — all live in one searchable vault with retention rules per WAC 314-55-083 (3-year minimum). Expiry alerts fire 30 days out. Doug doesn’t hunt through Gmail when WSLCB asks.

Eight surfaces, audit-traceable end to end.

Audit-log on every keystroke

Every transaction, void, override, age-verification, manifest receive, employee record edit — actor + reason + before/after delta written to audit_log at write-time. Searchable by /admin/audit-log, exportable as CSV per case-ID.

Vertical-ID stop at the cart

DOB-mismatch + under-21 + missing-document blocks fire on the cart screen, not on a poster. Each attempt logged. Surfaces on /admin/age-verification with photo + outcome.

Manager-PIN gates with WAC citations

Voids, returns, manual prices, discount overrides — all gated. The PIN-prompt UI cites the WAC code that drives the gate so the budtender learns the rule, not just the click.

Automated WA excise + sales tax math

37% excise + locality-aware sales tax computed at write-time per line. LIQ-1295 monthly filing pulls direct from line items. Tax-basis math respects 280E for write-offs.

Document vault with WSLCB retention

Vendor licenses, manifests, COAs, security logs, age-verification photos, training records — searchable + retention-tagged per WAC 314-55-083. Expiry alerts fire 30 days out.

Brand-voice + medical-claims gate

Customer-facing copy passes through a write-time check that flags efficacy claims (WAC 314-55-155) before they ship. Catches drift before the regulator does.

POS audit trail tied to seed-to-sale

Cultivera/LeafLink wholesale receive ties to inventory_snapshots, then to sale_line_items, then to audit_log. The chain of custody is queryable end to end.

Training + cert-expiry tracker

Mandatory trainings (RCW 69.50.354 / WAC 314-55-079) tracked per employee with expiry alerts. PIN gates won’t fire for staff with expired training.

CannAgent vs. the alternatives.

Operator-reported. Full deep-dives at /vs/dutchie, /vs/blaze, /vs/treez.

CapabilityCannAgentDutchieBLAZETreez
Audit-log on every keystrokeBuilt-in, write-timeLimitedLimitedLimited
WAC code citations in UIIn manager-PIN promptsNot presentNot presentNot present
WA LIQ-1295 monthly filing pullDirect from line itemsExternal toolExternal toolExternal tool
Document vault with retention rulesWAC 314-55-083 readyAvailableAvailableAvailable
Brand-voice / medical-claims gateWrite-time checkNot presentNot presentNot present
Training-expiry → PIN gateAutomaticManual trackManual trackManual track
Source available to your teamYesNoNoNo

Want to see the audit trail?

30-minute walkthrough on a real Washington-store deployment. We’ll grep audit_log live for an under-21 attempt, a void, a manifest-variance dispute — pick one.

Request a demo
Schedule a demo
30 minutes · register, write-up, Form 941