Cannabis Problems, Solved With AI
Real problems from real operators: Metrc mismatches, inventory exports, buyer spreadsheets, 280E bookkeeping, and messy menus.Real operator problems, each solved with the smallest tool that works: a spreadsheet diff, an API call, one model step, or nothing at all.Problems pulled from Distru support tickets, each solved with the smallest tool that works: CSV diff, API call, one LLM step, or nothing at all.
Carry on withCarry on withnext:
- 0110 min
Find Your Metrc Mismatches Before the State DoesFind Your Metrc Mismatches Before the State Does: a Tag-Keyed Diff, Explained by the ModelMetrc vs. ERP reconciliation: CSV diffing with an LLM in the loopDoneDonedone
Metrc says one thing, your inventory says another. Here is a 15-minute routine to find every mismatch and figure out why.Metrc says one thing, your inventory system (ERP) says another. Export both as CSV, let a script compare them tag by tag (the diff), and let the model only explain each difference.Export both sides, diff deterministically on tag, use the model only to explain and triage the deltas.
- 028 min
Inventory Snapshots and Exports Without the HeadacheInventory Snapshots and Exports: a Nightly CSV and a Script the AI WritesInventory snapshots: nightly CSV capture, set-difference against Metrc, LLM-authored summariesDoneDonedone
Three real asks: inventory for every day last month, the Metrc packages you never brought in, and counts by room, age and low stock. Two need no AI. The third needs the AI to write a script, not to count.Three support-ticket asks: a snapshot for every day last month, Metrc packages not yet imported, and counts by room, age and low stock. The first is a nightly automation, the second is a tag diff, the third is a script the model writes and a person runs.Nightly capture of GET /inventory to dated CSVs, set difference of Metrc labels vs ERP packages, and summaries by a script the LLM authors. The model never touches the arithmetic.
- 039 min
Turn a Buyer's Spreadsheet Into Clean OrdersTurn a Buyer's Spreadsheet Into Clean Orders: Match Their Names to Your Catalog, Flag the Rest, You ApproveOrder intake: catalog normalisation with confidence, an unknown bucket, and a human write gateDoneDonedone
A buyer sends one spreadsheet for three stores in their own shorthand. You need clean order lines in your product names, with anything doubtful flagged, before a single order exists. Most of that is matching, not AI.A buyer's spreadsheet in their shorthand becomes draft order lines in your catalog names: a matcher scores each line with a confidence, unknowns go in their own bucket, a model helps only with the leftovers, and a person approves before any order is written.Deterministic fuzzy match of buyer lines to catalog SKUs with per-line confidence and an unknown bucket; LLM or decision model only on review rows; draft first, human approval before POST /orders.
- 049 min
Accounting, 280E, and QuickBooks: Where AI Helps (and Where It Can't)Accounting, 280E, and QuickBooks: AI Sorts the Pile Monthly, Your CPA Decides280E bookkeeping: LLM first-pass classification into a COGS-aware chart of accounts, CPA review, and the QBO PurchaseOrder-vs-Bill syncDoneDonedone
280E means the cost of the product is about the only thing you can deduct, so which bucket each expense lands in is worth real money. AI can sort a month of transactions with a reason for each. It cannot be your accountant, and it does not sign anything.Under 280E only cost of goods survives, so every transaction needs a bucket every month. A model does the first sort into a 280E-aware chart of accounts with a reason and a confidence per line; your CPA reviews the allocations and signs. Plus the QuickBooks purchase-order-versus-bill ask, which is an automation, not AI.IRC §280E: only COGS survives. LLM classifies transactions into a COGS-aware chart of accounts with reason and confidence; low-confidence, SPLIT and UNSURE rows queue for the CPA monthly. The QBO PurchaseOrder-vs-Bill request is a deterministic sync with an idempotency marker, no model.
- 058 min
Menus and Product Data: Descriptions, Photos, and CleanupMenus and Product Data: Descriptions Without Claims, a Cleanup Script, and Photo URLs for Bulk ImportProduct catalog pipeline: rule-gated description generation, CSV normalisation, image URL mapping, menu sync without a modelDoneDonedone
Two hundred products, half with no description, four spellings of 'grams', photos in a shared folder and three menus that never quite match. An afternoon fixes most of it, and the one rule that matters is: describe the product, never what it does to a person.Descriptions run as one batch behind a house-rules block and a pattern check; a script cleans SKUs, units, sizes and prices and maps photo files to hosted URLs for bulk import; menu sync is an automation with no model in it. The health-claim guardrail sits in front of everything that goes live.Batch description generation gated by a rules block and regex check, deterministic CSV normalisation with duplicate detection and image URL mapping, menu-setting diff with no LLM. Compliance lead reviews what the regex passes.
- 069 min
Sort the Pile Before You Read ItSort the Pile Before You Read It: Typed Questions Route Buyer Texts, Tickets and Menu CopyInbox triage with a System One model: fan-out, confidence-gated routing, Noul guardrailsDoneDonedone
Buyer texts, vendor emails, tickets, menu copy. Ask the same five questions of every item, all at once, and let your own rules decide what gets handled, what gets a quick confirm, and what waits for a person.Each message becomes a state; five typed questions (is it an order, what kind, how urgent, any health claim, does it need a person) come back with probabilities; your code routes by answer and confidence into act, confirm or human.One POST /v1/systemone per message with a Noul/Choice/Score pack; code routes on answer plus confidence into act / confirm / escalate. Entity alignment for sender to account, a Noul guardrail for health claims, the write stays behind a human.
- 078 min
Check a Label or COA From a PhotoReading a COA or label from a photo with AI, and checking what it readVision extraction from COA and label photos: how models see, measured failure modes, and deterministic verificationDoneDonedone
Today's AI can read a photo of a certificate of analysis and pull out the numbers. On a clear photo it is spot on. On a blurry one it can confidently make numbers up. We tested both, and you get the prompt and a small checker that catches the mistakes.Vision-capable AI can extract fields from a COA or label photo. We measured it: perfect on a clean photo, and plausible wrong numbers on a blurry one unless you let it say unreadable. The fix is a careful prompt plus a code check (total THC must add up, label must match COA) and a person on the flags.How image models see (pixels, learned features, transfer learning), a measured extraction test on a synthetic COA with Claude Sonnet 5 (clean versus degraded, permissive versus abstaining prompt), and a deterministic verifier: completeness, the total-THC identity, label-to-COA reconciliation.