Prompts
Words you paste into a chat. Fill in the parts in brackets and send it.Ready-made prompts. Fill in the brackets, paste into any chat model.Paste-ready prompt text. Bracketed slots are yours to fill.
- Prompt: turn any lesson into a one-page memo for my teamPromptPromptpromptfromfrom← How this course worksHow this course works: one page, three reading levelsHow this course works: three reading levels, one MDX file · Start HereStart Here (how the dial works)Orientation
Turns any lesson on this site into a one-page memo for your team, with an owner named on every action item.Turns any lesson on this site into a one-page memo for your team, with an owner named on every action item.Turns any lesson on this site into a one-page memo for your team, with an owner named on every action item.
A piece of itExampleExample Write in plain English. No buzzwords. If you would not say it out loud to a budtender, cut it. Keep my voice: direct, practical, [friendly / blunt / dry]. Structure: a one-sentence "why this matters to us", then 3 to 5 bullet action items, then one "… Every action item names who does it: [owner / manager / budtenders / ops / whoever handles our…
# Prompt: turn any lesson into a one-page memo for my team Paste everything below the line into ChatGPT, Claude, or any chat model. Then paste the text of a lesson after it. Replace the parts in [brackets]. --- You are helping me brief my team at a [dispensary / cultivation / manufacturing / distribution] company in [state]. I am going to paste a short lesson about using AI at work. Turn it into a one-page memo for my team. Rules: - Write in plain English. No buzzwords. If you would not say it out loud to a budtender, cut it. - Keep my voice: direct, practical, [friendly / blunt / dry]. - Structure: a one-sentence "why this matters to us", then 3 to 5 bullet action items, then one "do not do this" warning if the lesson has one. - Every action item names who does it: [owner / manager / budtenders / ops / whoever handles our tech]. - Under 250 words. No headers longer than five words. - Do not invent facts that are not in the lesson. If something is unclear, write "[check this]" instead of guessing. Here is the lesson: - Prompt pack: cannabis ops manager (12 prompts)PromptPromptpromptfromfrom← What an AI Chatbot Actually IsWhat a language model (LLM) actually isLLMs: tokens, context windows, and why they make things up · AI Basics, Minus the HypeAI Basics: LLMs and Decision Models, Without the HypeFundamentals: LLMs and decision models
Twelve fill-in-the-brackets prompts for the jobs that eat an ops manager's week, from the Monday restock email to a collections follow-up.Twelve fill-in-the-brackets prompts for the jobs that eat an ops manager's week, from the Monday restock email to a collections follow-up.Twelve fill-in-the-brackets prompts for the jobs that eat an ops manager's week, from the Monday restock email to a collections follow-up.
A piece of itExampleExample You write short, direct purchasing emails for a licensed cannabis distributor. Write an email to [supplier name] requesting a restock. Items and quantities: [paste list] Needed by: [date] Rules: under 100 words, no pleasantries beyond one line, include our license number [XXX] and deliv… Output: the email only, subject line first.
Download ops-manager-prompt-pack.mdDownload ops-manager-prompt-pack.mdops-manager-prompt-pack.md · 8.5 KB
# Prompt Pack: Cannabis Ops Manager Twelve prompts for the work that eats an ops manager's week. Free to copy, edit, share. From Distru's No Bullshit AI Course (learnai.distru.com). Every prompt uses the same five-part shape: **who you are → what you want → rules → output shape → example or source.** Paste your own material where you see `[brackets]`. Never paste customer PII, employee IDs, passwords, or API keys. Rule that applies to all twelve: add the line **"Use only the information I gave you. If something is missing, say MISSING instead of guessing."** It is already in each prompt. Keep it. --- ## 1. Monday restock email to a supplier ``` You write short, direct purchasing emails for a licensed cannabis distributor. Write an email to [supplier name] requesting a restock. Items and quantities: [paste list] Needed by: [date] Rules: under 100 words, no pleasantries beyond one line, include our license number [XXX] and delivery address [address], ask them to confirm availability and a delivery window. Output: the email only, subject line first. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 2. Collections follow-up for an overdue invoice ``` You write firm, friendly collections emails for a wholesale cannabis business. Customer: [name]. Invoice: [number]. Amount: [$]. Days overdue: [n]. Prior contact: [none / one email on date]. Rules: under 120 words, no threats, no legal language, one specific ask (pay by [date] or call to arrange terms), keep the relationship. Match this tone: [paste one email you wrote that you liked] Output: the email only. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 3. Explain a Metrc error to a new hire ``` You explain Metrc (the state cannabis tracking system) to new dispensary and distribution staff in plain language. Error text: [paste exactly] What we were trying to do: [one sentence] Rules: explain what the error means in two sentences, then list the 2-3 most common causes, then the first thing to check. No jargon without a one-line definition. Do not invent Metrc rules; if you are not sure, say so and tell me to check the state's Metrc bulletin. Output: three short sections with headers. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 4. Turn a buyer's messy order into line items ``` You normalize wholesale cannabis orders against a product catalog. Our catalog (name | SKU | unit): [paste catalog rows] Buyer's order, exactly as sent: [paste text / spreadsheet rows] Rules: match each line to one SKU. Output quantity and unit. If a line could match more than one SKU or none, write UNKNOWN and copy the buyer's original text. Do not guess. Do not invent SKUs. Output: a table with columns buyer_text | SKU | product_name | qty | unit | confidence (high/medium/UNKNOWN). Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 5. Compliant menu description (40 words) ``` You write menu copy for a licensed cannabis retailer in [state]. Product: [name]. Type: [flower/vape/edible/etc]. Strain: [name]. Weight: [x]. THC: [x%]. CBD: [x%]. Top terpenes: [list]. Grower/brand: [name]. Rules: exactly 35-45 words. No medical or health claims (no "treats", "cures", "helps with anxiety"). Describe aroma, flavor, and reported effects in neutral language ("customers describe"). No emojis. Match this voice: [paste one description you like]. Output: the description only. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 6. SOP from a voice memo ``` You turn spoken process descriptions into written SOPs for a cannabis operation. Transcript: [paste] Rules: numbered steps, one action per step, each step under 20 words. After each step add an indented line "Watch for:" with the most likely mistake. End with a "Before you finish" checklist of 3-5 items. Do not add steps I did not describe; if a step seems missing, add a line "GAP: [what seems missing]" so I can fill it. Output: markdown. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 7. Budtender one-pager for a new product line ``` You write training one-pagers for budtenders. Product line: [name]. Products and specs: [paste spec sheet]. Lab results summary: [paste]. Price points: [paste]. Rules: three sections. "Say this" (3 bullets a budtender can say to a customer, no medical claims). "Never say this" (2 bullets, compliance risks specific to this product). "If they ask" (3 likely customer questions with one-line answers). Under 250 words total. Output: markdown. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 8. Summarize a state bulletin for our operation ``` You read cannabis regulatory bulletins and tell an operator what changed for them. Bulletin text: [paste full text] Our license type: [distributor / retailer / cultivator / manufacturer]. State: [state]. Rules: first, one sentence: does this affect our license type, yes/no/unclear. Then list each change that affects us, with the exact sentence from the bulletin quoted under it. Then list deadlines with dates. Do not paraphrase rules without the quote next to it. Output: markdown with headers "Affects us?", "Changes", "Deadlines". Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 9. First-pass expense sort (COGS vs. not) for the accountant ``` You do a first-pass classification of expenses for a cannabis business. A licensed accountant will review every row; you are speeding them up, not replacing them. Transactions (date | vendor | description | amount): [paste rows] Rules: for each row output category (inventory purchase, packaging, lab testing, cultivation supplies, rent, payroll, marketing, software, other), cogs_candidate (yes/no/unsure), and a one-clause reason. Mark anything ambiguous "unsure". Do not give tax advice or cite 280E rulings. Output: a table with the original columns plus category | cogs_candidate | reason. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 10. Explain a Metrc vs. inventory mismatch ``` You help cannabis operators understand why Metrc and their inventory system disagree. Mismatches (tag | metrc_qty | our_qty | unit | product | last_activity): [paste rows] Rules: for each row, give the single most likely cause from this list: unaccepted transfer, unrecorded lab sample, unrecorded waste, split not synced, package finished on one side only, manual edit, unit mismatch, unknown. Add confidence (high/medium/low) and one thing to check first. Do not suggest changing any quantity; I will decide. Output: table. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 11. Weekly ops summary for the owner ``` You write a weekly operations summary for the owner of a cannabis business who has five minutes. Data: [paste: orders shipped, on-time %, returns, inventory value, top 5 products, top 3 issues from the week] Rules: under 150 words. Lead with the one number that changed most vs last week [paste last week's numbers]. Three bullets max under "Good", three under "Watch". One line "Decision needed" or "No decision needed this week". No adjectives like "great" or "concerning"; let the numbers speak. Output: plain text. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## 12. Write the script instead of the answer Use this when the data is too big to trust the AI's counting. ``` You write small scripts for a cannabis ops manager who is not a programmer. I have a CSV with these columns: [paste header row]. First three rows: [paste]. I want to know: [question, e.g., total quantity per product where status is Active]. Rules: write a spreadsheet formula I can paste, OR a short script in [Python/JavaScript] that reads the file and prints the answer. Explain in two sentences how to run it. Do not compute the answer yourself from the sample rows. Output: the formula or script in a code block, then the two-sentence explanation. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` --- ### Make these yours Save the ones you use as a project instruction, custom GPT, or a `SKILL.md` (course module 06). Replace the bracketed example with one real, good example from your own files. That single change improves results more than any other edit. License: CC0. Do whatever you want with this. - One-page model pickerPromptPromptpromptfromfrom← Which AI for Which JobWhich AI Model for Which Job (Pick the Tier, Not the Leaderboard)Model selection: a task-based comparison, not a leaderboard · Pick the Right ToolPick the Right Tool: Model, Automation or AgentModel & Architecture Selection
Which AI to use for which job: four tiers, what each is good at, roughly what it costs, and a table of cannabis tasks against them.Which AI to use for which job: four tiers, what each is good at, roughly what it costs, and a table of cannabis tasks against them.Four tiers with list prices and context sizes, the decision-model option, and a task-to-tier map for cannabis work.
A piece of itExampleExample Tier · Nickname · What it is for · Anthropic example (price per 1M tokens in / out) · Other… Frontier · The expert · Hard, one-off reasoning. Long regulations. Multi-step agent work. Error… Mid · The workhorse · Daily driver. Extraction, normalization, drafting, code generation. · C…
Download model-picker.mdDownload model-picker.mdmodel-picker.md · 4.2 KB
# One-Page Model Picker From Distru's No Bullshit AI Course, module 02 (lessons 01 and 02, and module 01 lesson 06 for decision models). Prices and names change; the tiers do not. Re-check prices on the vendor's page before budgeting. Last verified: September 2026. ## The four tiers | Tier | Nickname | What it is for | Anthropic example (price per 1M tokens in / out) | Others in this tier | |---|---|---|---|---| | Frontier | The expert | Hard, one-off reasoning. Long regulations. Multi-step agent work. Errors are expensive. | Claude Opus 5 · `claude-opus-5` · $5 / $25 · 1M context | OpenAI's top GPT model; Google Gemini Pro | | Mid | The workhorse | Daily driver. Extraction, normalization, drafting, code generation. | Claude Sonnet 5 · `claude-sonnet-5` · $2 / $10 · 1M context | OpenAI's mid GPT model; Gemini Flash (upper) | | Small | The intern | High-volume, simple, repeated. Classification, templated generation, routing. | Claude Haiku 4.5 · `claude-haiku-4-5` · $1 / $5 · 200K context | OpenAI "mini"/"nano" models; Gemini Flash-Lite | | Local | The closet | Data that cannot leave the building. Very high volume, low stakes. | n/a | Llama, Qwen, Gemma, Mistral via Ollama or LM Studio | Output tokens cost ~5x input. Reading is cheap; writing is where tier matters. ## The fifth option: a model that never writes If the answer your software needs is a label, a score, or a yes/no, and nobody reads prose, you may not want a text model at all. TypeSafe's Jev is a "System One" decision model: send the text (the state) plus typed questions (Choice / Score / Noul) and get typed answers with calibrated probabilities and a confidence number. Per TypeSafe's docs (September 2026): text-only input, $0.042 per million input tokens, output free, `POST /v1/systemone`, `jev-latest`. One vendor and one term so far; calibration holds across many answers, not any single one; test on your own data and set thresholds per action. | Cannabis task | Use | Note | |---|---|---| | Route a buyer text to the right rep | Decision model (Choice) | Below your confidence threshold, a person picks | | Flag a health claim in menu copy | Decision model (Noul) | A guardrail on LLM output; state ad rules set the criteria | | Score urgency of a vendor email | Decision model (Score) | Describe situations for each level, not degrees | ## Task map | Cannabis task | Tier | Note | |---|---|---| | Read a state bulletin, tell me what changed for us | Frontier | Once. Quote the source text. | | Buyer spreadsheet → my SKUs | Mid | Ask for UNKNOWN on low confidence, never a guess | | Collections / vendor / restock emails | Mid | Paste one email you like as the voice | | Explain a Metrc error or mismatch | Mid | Give it the row, not the whole export | | Sort 2,000 expenses into COGS / not (first pass) | Small | Batch it. Accountant reviews. | | 300 menu descriptions from spec sheets | Small | Spot-check 10% with Mid | | Anything with customer names, IDs, PII | Local, or redact first | | | Totals, counts, averages | **No AI** | Spreadsheet formula. Or have AI write the formula. | | Agent that takes multi-step actions in your systems | Frontier, rarely | Only if 02-02's four criteria are all yes | Rule: start one tier lower than you think. Move up only when your own test says so. ## The 60-minute bake-off 1. Pick one task you do weekly. 2. Collect 10 real inputs. Include 2 ugly ones. 3. Write the correct answer for each, by hand. 4. Run all 10 through 2-3 models. Same prompt. 5. Score: right / wrong / dangerous-wrong (e.g., invented a SKU that exists). 6. Winner = most right with zero dangerous-wrong. Tie → cheaper one. 7. Write down: model, date, score. Redo quarterly. ``` eval/<task>/ 001.input.txt 001.expected.txt ... results.csv # date, model, prompt_hash, correct, dangerous, cost, latency ``` ## Cost levers, in order 1. Smaller tier for the simple parts of a pipeline. 2. Prompt caching for repeated context (system prompt, catalog, rules): cached input is a fraction of full price. 3. Batch API for anything not urgent: typically ~50% off. 4. Lower "thinking" / "effort" for transforms; raise it for reasoning. 5. Local model only when data residency or volume forces it; count your own maintenance time as a cost. License: CC0. - Prompt pack: ten questions to ask your inventoryPromptPromptpromptfromfrom← Ask Your Inventory a QuestionAsk Your Inventory a Question: the Export Path, the Connector Path, and Which One You NeedInventory Q&A: CSV in context vs. a read-only tool layer over GET /inventory · Using AI With DistruUsing AI With Distru (API, MCP, agents)Distru API, MCP, and Agents
Ten questions to ask an inventory export, each written so the answer comes back with the rule it used: what is nearly out, what has not moved, what sits in the wrong room.Ten questions to ask an inventory export, each written so the answer comes back with the rule it used: what is nearly out, what has not moved, what sits in the wrong room.Ten questions to ask an inventory export, each written so the answer comes back with the rule it used: what is nearly out, what has not moved, what sits in the wrong room.
A piece of itExampleExample You have my inventory export attached. Rules for every answer: 1. Answer from the file only. If a column you need is missing, say which one and stop. 2. Before the answer, write the exact filter or formula you applied, in one line (for example: rows where status = ACTIVE and quantity < 10, grouped by product). 3. Show the rows behind any number under 50 rows. Over 50, show the count and the first 10. 4. Quantities are text in this file. Convert to numbers before comparing and say so.
Download inventory-questions.mdDownload inventory-questions.mdinventory-questions.md · 4.6 KB
# Ten questions to ask your inventory Prompt pack from lesson 07-02 of the No Bullshit AI Course. Version 1.0.0 (2026-09-17). CC0 1.0. **What to paste in:** the CSV from `distru-export` (`python3 export.py --resource packages`), or a Distru inventory report export, plus the instruction block below. Works in ChatGPT, Claude or a local model. Written against the column layout `distru-export` produces (dotted columns, lists as JSON text). We have not benchmarked it on a live account yet; if a question misbehaves on yours, the fixes at the bottom are the ones we reach for first. **What comes out:** a table or a number, plus the rule the model used to get it. If it gives you a number with no rule, ask for the rule. --- ## Paste this first ```text You have my inventory export attached. Rules for every answer: 1. Answer from the file only. If a column you need is missing, say which one and stop. 2. Before the answer, write the exact filter or formula you applied, in one line (for example: rows where status = ACTIVE and quantity < 10, grouped by product). 3. Show the rows behind any number under 50 rows. Over 50, show the count and the first 10. 4. Quantities are text in this file. Convert to numbers before comparing and say so. 5. Never invent a product, tag or location that is not in the file. ``` ## The ten questions Each one: the question as you would type it, then what a good answer looks like. **1. What is running low?** "Which products have fewer than 10 units on hand, across all locations?" Good answer: the filter line, then a table of product, total quantity, locations. Under 50 rows shown in full. A product appearing twice (two locations) is summed, and the answer says it summed. **2. What is sitting too long?** "Which packages were created more than 90 days ago and still have quantity?" Good answer: the date cut-off it used, written out, then a table sorted oldest first. If the file has no created-date column it says so instead of guessing. **3. Where is the money tied up?** "Which ten products hold the most value on hand? Use cost if there is a cost column, otherwise say you cannot." Good answer: quantity x cost per row, summed per product, top ten. If the export has no cost column: "no cost column; here is quantity only." **4. What do I have in one place?** "List everything at the Oakland vault, grouped by category." Good answer: the location name matched exactly as it appears in the file (it tells you if there are two spellings), then groups. **5. What has no tag?** "Which rows have an empty Metrc tag, or a tag that is not 24 characters?" Good answer: the rule (empty, or length not 24), then the rows. This is a data-quality check, so zero rows is a fine answer. **6. What is the mismatch between systems?** "Here is a second file from Metrc. Which tags are in one file and not the other?" Good answer: it asks which column is the tag in each file if that is not obvious, then two lists. For anything over a few hundred rows, it should offer to write a script instead. (Lesson 04-01 has the script.) **7. What did we sell last month?** Needs the orders export, not packages. "From the orders file, total quantity per product for orders with order date in August 2026 and status COMPLETED." Good answer: the status and date filter written out, then the table. It notes that `items` is a JSON column and that it expanded it. **8. Who buys what?** Orders export. "For each customer, the three products they order most often." Good answer: grouped by `company.name`, counts, top three. It should not merge two customers with similar names without saying so. **9. What is about to expire?** "Which batches have an expiration date in the next 60 days?" Good answer: the date window written out, then rows. If there is no expiration column in the export (there often is not), it says so and suggests where the date might live (the batch or test result, not the package). **10. Write the query, not the answer.** "Do not answer. Write me the spreadsheet formula, or a short Python snippet, that answers question 1 so I can rerun it every Monday." Good answer: a formula or ten lines of code that reads the CSV by column name, plus one sentence on what to change when a column is renamed. This is the one to keep. ## When the answer is wrong - It counted rows instead of summing quantity. Ask: "sum the quantity column, do not count rows." - It made up a location or product. Ask: "show me the row that contains that name." If it cannot, throw the answer away. - It quietly dropped rows because a quantity was blank. Ask: "how many rows did you exclude and why?" - The file is too big and it starts summarising. Stop asking questions; ask for the query (question 10) and run it yourself. - Prompt: first-pass 280E classificationPromptPromptpromptfromfrom← 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 sync · Cannabis Problems, Solved With AICannabis Problems: Metrc, Inventory, Sales, 280EDomain Workflows: Compliance, Inventory, Sales, Accounting
Sorts a month of transactions into 280E-aware accounts with a reason and a confidence on each line, so your CPA reviews a sorted pile instead of a raw export.Sorts a month of transactions into 280E-aware accounts with a reason and a confidence on each line, so your CPA reviews a sorted pile instead of a raw export.Sorts a month of transactions into 280E-aware accounts with a reason and a confidence on each line, so your CPA reviews a sorted pile instead of a raw export.
A piece of itExampleExample Export from your bank, card or bookkeeping tool. Columns: date, payee, description, amount. Add… Strip employee names and anything that identifies a customer or patient. Payee company names ar… Twenty to a hundred rows per run. More than that and the model starts skimming. Paste your chart of accounts (the CSV) above the transactions, every time. It does not remember…
# Prompt: First-Pass 280E Classification Sorts a month of transactions into a 280E-aware chart of accounts, with a reason and a confidence per line, so your CPA reviews a sorted pile instead of a raw export. From lesson 04-04 of Distru's No Bullshit AI Course. Version 1.0, tested 2026-09-17 with a frontier chat model on 40 fake transactions. CC0 1.0. **This is not tax advice.** IRC §280E denies deductions and credits to businesses trafficking in Schedule I or II substances; cost of goods sold is not a deduction and survives, which is why the split matters ([26 U.S.C. §280E](https://www.law.cornell.edu/uscode/text/26/280E)). What counts as COGS for *your* license type, in *your* state, under *your* method (§471, and for some entities the older §263A reading) is your CPA's call. The model proposes a bucket; a licensed professional decides and signs. Pairs with `280e-chart-of-accounts.csv`. Replace that sheet with your own before you run this; the model can only use the accounts you give it. ## Before you paste - Export from your bank, card or bookkeeping tool. Columns: `date, payee, description, amount`. Add `memo` if you have one. - Strip employee names and anything that identifies a customer or patient. Payee company names are fine. - Twenty to a hundred rows per run. More than that and the model starts skimming. - Paste your chart of accounts (the CSV) above the transactions, every time. It does not remember last month. ## The prompt ``` You are a bookkeeper's assistant for a licensed cannabis business. You sort transactions; you do not give tax advice and you never decide what is deductible. License type: [retail / cultivation / manufacturing / distribution]. State: [state]. Month: [YYYY-MM]. Here is our chart of accounts. Use ONLY these account codes: [paste 280e-chart-of-accounts.csv] Here are the transactions: [paste rows: date, payee, description, amount, memo] For every transaction, return one row with exactly these columns: date | payee | amount | account_code | account_name | cogs_bucket | confidence | reason | flag Rules: - cogs_bucket is one of: COGS, NON_COGS, SPLIT, UNSURE. Use SPLIT when one payment clearly covers both (rent on a building with a grow room and a sales floor, a manager's salary who both trims and sells). Use UNSURE when you cannot tell from the description. - confidence is 0.00 to 1.00. Be honest: a vague payee with a round amount is not a 0.95. - reason is one sentence quoting the words in the transaction that drove the choice. Do not invent a purpose that is not in the description. - flag is blank, or one of: NEW_PAYEE, ROUND_AMOUNT, DUPLICATE?, PERSONAL?, NEEDS_INVOICE, SPLIT_NEEDS_ALLOCATION. - Never put a transaction in COGS because it would be nice if it were. Put it where the description says it belongs; the CPA moves it if the method allows. - If a transaction matches no account, use code 9999 UNSORTED with confidence 0. - Output the table only, then a three-line summary: count per cogs_bucket, total dollars per cogs_bucket, and the five lowest-confidence rows. Use only the information I gave you. If something is missing, say MISSING instead of guessing. ``` ## What a good result looks like - Every row has an account code from your sheet and nothing else. If you see a code you did not give it, the run is bad; rerun. - SPLIT and UNSURE rows exist. If a month comes back 100% confident, the model is flattering you. - Reasons quote the transaction ("payee 'Metro Power', description 'grow bldg meter'"), not a story. - Dollar totals per bucket add up to the export total. Check this in a spreadsheet, not by eye, and never trust the model's arithmetic over the sheet's. ## Then Sort by confidence ascending. Everything under about 0.85, every SPLIT and every UNSURE goes in a short list to your CPA with the reason column attached. Do it monthly. The 280E lesson explains why year-end is too late to have this conversation. ## Known failures (we saw these) - Puts payroll in COGS wholesale. Trimmers and packagers may be; budtenders and sales reps are the classic non-COGS example at retail. The model does not know who does what; give it job titles or expect SPLIT. - Calls a security system COGS because "cannabis requires security." Compliance-required does not mean cost of goods. Your CPA decides; the prompt tells the model not to reason this way, and it sometimes does anyway. - Guesses a payee's business from its name. "Green Fern LLC" could be anything. Watch for NEW_PAYEE flags and fill in memos next month.