If you’re in WA, MA, NJ, NY, IL, or MD, the compliance load is the operating cost. CannAgent puts the rule into the workflow.
The pains your operator group already knows.
State reporting drift is a slow leak you only see at audit.
WA reports to CCRS. CO and MI and MA report to METRC. The data shape is the same; the field names aren’t. Your current POS exports CCRS-correct rows on a happy day and silently truncates strain names on a Tuesday. By the time the regulator’s automated check flags the row, it’s a notice on your desk.
Vendor-license expiry is a blind spot every shop has been bitten by.
When the regulator pulls your last six months of receiving records, WAC 314-55-087 is the standard they are reading you against: the purchase invoice, what was bought, who it was bought from, and the date — on the licensed premises, five years back. Most POS systems will let you receive against a vendor whose license lapsed last month and never put that anywhere you would look.
ID-verification edge cases get rounded to ‘good enough.’
Vertical IDs mark an under-21 holder and the cart stops on them. Out-of-state IDs need extra scrutiny. The fake-ID recognition pattern only fires if the system is looking. ‘Good enough’ at the cart on Friday is a citation on Monday.
The audit trail is a Slack thread and three Google Docs.
Why did this discount apply? Why did this product move from active to quarantine? Who voided this transaction at 9:47pm? The answer lives in Slack, in DMs, in someone’s memory. What you need is a row.
Trade samples and industry buyers are accounting’s worst quarter.
WAC 314-55-096(1)(j)(vi) caps trade samples at 30 units to any one employee per quarter. The POS doesn’t track it. Your bookkeeper untangles it at year-end so the W-2 box 7 tip total doesn’t silently absorb sample units. Two bad rows and you’re in correspondence with the IRS about a $200 line.
What the modules actually do for you.
WAC codes enforced in code, not in a binder.
The waste log's second signature — a second employee signs off or the disposal can’t close. The WAC 314-55-096(1)(j)(vi) trade-sample cap — 30 units to any one employee per quarter — counted at the cart. Vendor license number, expiry and status on every vendor record — and WAC 314-55-087 recordkeeping on the purchase invoice, including who it came from, held five years. WAC 314-55-105, the packaging and labelling rule — its label warnings are surfaced at receiving as a convenience, not as a duty of yours: -105 puts its labelling duties on whoever LABELS the product, the producer or processor, and creates no receiving, inspection or refusal step for anyone. Its warning statements cover useable cannabis (5)(f), cannabis mix (6)(f) and edibles in solid (h) and liquid (g) form, not just infused product. The section's only retailer duty is (10): give a consumer the lab name and QA results on request. WAC 314-55-155 advertising rules on every send: the (2)(c) 21+ statement and the four (7) warning statements, which apply to all advertising except outdoor — 341 characters before your own copy. Naming a product is not the problem; omitting the warnings is.
Vendor-license tracker, with the lapse as the trigger.
Every vendor row carries the WSLCB license number, expiry date, and current status. The vendor list flags anything inside 60 days; /compliance lists the expired and expiring vendors you still carry active product from. Pausing that vendor is one switch on the vendor page and it writes an audit row — the purchaser makes the call, with their name on it, instead of finding out from the regulator’s notice in two months.
ID-check audit trail, every cart, indefinitely.
Vertical-ID stop at the cart logs the budtender, the customer record, the DOB-mismatch path if it happened, and the under-21 attempt path if that happened. Every row writes to an immutable audit log. We keep records indefinitely; WAC 314-55-087 sets a five-year floor.
Audit log is a row, not a Slack search.
Every state change writes audit_log: who, when, before, after. The /admin/audit page links from every consequential row across the system — discounts applied, products quarantined, transactions voided, write-ups acknowledged, hours overridden. The question becomes a query, not an investigation.
Trade samples tracked separately at the source. Tips don’t absorb units.
WAC 314-55-096(1)(j)(vi) 30-units-per-employee-per-quarter cap (the retailer-side one; a processor's ceiling to any one retail business is 120 under (1)(f)(ii)). The POS warns before the cap and blocks at 31. Sample units carry their own ledger so they don’t cross into W-2 box 7 tips at year-end. Your bookkeeper closes the year on a clean separation, not a forensics exercise.
What ships in the codebase today.
Six rule categories enforced in workflow — retail privileges (WAC 314-55-079), security (-082), transaction limits (-095), trade samples (-096) and advertising (-155), plus vendor-licence expiry, which is OUR workflow: no WAC section makes a retailer verify a supplier's licence. -035 is "True parties of interest" — who may be listed on YOUR OWN licence, with the financier and residency rules — and governs no vendor check
Audit log retained indefinitely (WA’s floor is five years, WAC 314-55-087)
WA state-native today; cross-state configuration is scoped during onboarding
What this kind of shop usually asks first.
Can we keep our existing METRC integration?
Are you HIPAA-compliant if we sell to medical patients?
What about cannabis advertising rules — does the platform enforce them?
Who owns our customer and transaction data?
The audit isn’t the test of the platform; the audit is what the platform’s for.
The demo walks the WAC-coded surfaces side-by-side with the audit log they each write to.
Request a demo