from __future__ import annotations DIMENSIONS = [ "decision_quality", "specificity", "category_fit", "merchant_fit", "engagement_compulsion", ] REFERENCE_BANK: dict[str, str] = { "dentists:decision_quality": "Dr. Meera, the research digest points to high-risk adult recall timing; use the 3-month fluoride finding before the next recall batch.", "dentists:specificity": "Dr. Meera, JIDA Oct 2026 cites 124 high-risk adult caries patients for 3-month fluoride recall; want me to draft that recall note?", "dentists:category_fit": "Clinical angle: use the cited recall evidence, avoid overclaiming, and ask for one approval before any patient outreach.", "dentists:merchant_fit": "Dr. Meera, your Lajpat Nagar clinic has an active Rs 299 cleaning hook; pair it with the recall cohort instead of a generic discount.", "dentists:engagement_compulsion": "Reply YES and I will draft the exact patient recall WhatsApp from the JIDA item and your Rs 299 cleaning offer.", "salons:decision_quality": "Use the customer's occasion or slot window first, then offer a concrete package follow-up instead of a generic promo.", "salons:specificity": "Kavya's wedding is 42 days away and Saturday slots are preferred; ask to hold one skin-prep slot with the active bridal package.", "salons:category_fit": "Warm service angle: visual, occasion-led, slot-aware, and never clinical or pressure-heavy.", "salons:merchant_fit": "Studio11 has bridal follow-up history and a live service package; make Vera prepare the exact WhatsApp and slot hold.", "salons:engagement_compulsion": "Reply YES and I will hold the Saturday slot plus draft the 4-line bridal follow-up now.", "restaurants:decision_quality": "Tie the action to the operator signal: orders, covers, delivery delay, IPL timing, or corporate lunch planning.", "restaurants:specificity": "Delhi IPL night is today and the paneer thali offer is live; draft one banner/menu note before evening orders start.", "restaurants:category_fit": "Operator angle: concise, service-window aware, focused on orders, delivery, covers, and menu hooks.", "restaurants:merchant_fit": "Use this restaurant's live offer, locality, recent calls/orders, and review theme before suggesting a campaign.", "restaurants:engagement_compulsion": "Reply YES and I will prepare the exact banner and WhatsApp text for tonight's order window.", "gyms:decision_quality": "Pick the retention or trial action that matches the member stage and recent attendance trend.", "gyms:specificity": "Rashmi is 28 days lapsed after yoga trial; use the no-commitment restart slot and her preferred evening timing.", "gyms:category_fit": "Coach-to-operator tone: no shame, no body-negative copy, clear class or challenge next step.", "gyms:merchant_fit": "Use the gym's current class, member count, lapse segment, and previous training focus in the message.", "gyms:engagement_compulsion": "Reply YES and I will hold one no-commitment restart slot and send the member-safe message.", "pharmacies:decision_quality": "For stock, refill, or compliance triggers, choose the safest precise action before any promotional angle.", "pharmacies:specificity": "Atorvastatin batch A12 is affected and 38 chronic-Rx customers are in context; draft the replacement note and counter checklist.", "pharmacies:category_fit": "Calm precision: molecule, batch, refill date, delivery status, and no diagnosis or panic wording.", "pharmacies:merchant_fit": "Use the pharmacy's repeat-customer count, saved delivery status, active free-delivery hook, and stock facts.", "pharmacies:engagement_compulsion": "Reply CONFIRM and I will prepare the customer note plus counter checklist from the exact batch/refill facts.", } def reference_for(category: str, dimension: str) -> str: return REFERENCE_BANK.get(f"{category}:{dimension}") or REFERENCE_BANK.get(f"restaurants:{dimension}", "")