| 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}", "") |
|
|