{"id":"revops-loss-reason-cleanup-csv","audience":"revops","category":"sales-work","technique":"format","track":"sales","level":"intermediate","title":"Map free-text loss reasons to five allowed values in a CSV","free":false,"task":"Produce one fenced CSV with header opp_id,loss_reason_clean and one row per opportunity. loss_reason_clean must be exactly one of Price, Product gap, Competitor, No decision, Other, following the mapping rules in the notes. Check the rules in order; if a reason matches two, use the first rule. At most 8 words outside the code block.","materialLabel":"Free-text loss reasons and mapping rules (attached to your prompt automatically)","material":"MAPPING RULES (first match wins):\n1. Mentions a named competitor or 'went with' another vendor -> Competitor\n2. Mentions cost, expensive, price or discount -> Price\n3. Mentions a missing feature, integration or requirement -> Product gap\n4. No budget, budget freeze, no response, ghosted, project cancelled -> No decision\n5. Anything else -> Other\n\nOPPORTUNITIES:\nOPP-301 | \"too expensive for them\"\nOPP-302 | \"went with Dispatchly because cheaper\"\nOPP-303 | \"needs SSO which we don't have\"\nOPP-304 | \"budget freeze until next year\"\nOPP-305 | \"CEO changed priorities, merger\"\nOPP-306 | \"ghosted after proposal\"\nOPP-307 | \"expensive and missing the QuickBooks integration\"\n\nNote: OPP-302 mentions both a competitor and price; the first rule decides.","rules":[{"type":"codeBlocks","count":1},{"type":"maxProseWords","max":8}],"mistakes":[{"title":"Ignoring rule order","why":"The AI labels 302 Price or 307 Product gap.","fix":"Add: \"First matching rule wins, in the order listed.\"","checks":["r1"]},{"title":"Inventing labels","why":"The AI writes 'Budget' or 'Feature gap'.","fix":"Add: \"Use exactly the five allowed values.\"","checks":["r2"]},{"title":"Extra text","why":"The AI adds explanations and a table.","fix":"Add: \"One code block, at most 8 words outside.\"","checks":["r0","codeBlocks","maxProseWords"]}],"promptHints":[{"label":"Names the header","patterns":["opp_id,loss_reason_clean","csv"]},{"label":"Lists the five values","patterns":["price","product gap","competitor","no decision","other"]},{"label":"States first match wins","patterns":["first match","in order","first rule"]},{"label":"One row per opportunity","patterns":["one row per","7 rows"]},{"label":"Limits outside text","patterns":["outside","at most \\d+"]}],"hint":"Give the header, the five exact values and say the first matching rule wins.","rubricLabels":["The code block has the header opp_id,loss_reason_clean and exactly 7 data rows","Values are 301 Price, 302 Competitor, 303 Product gap, 304 No decision, 305 Other, 306 No decision and 307 Price","Every value is exactly one of Price, Product gap, Competitor, No decision or Other"]}