system-prompts-and-models-o.../dealix/auto_client_acquisition/business/verticals.py
2026-05-01 14:03:52 +03:00

134 lines
5.8 KiB
Python

"""Vertical playbooks — deterministic."""
from __future__ import annotations
from typing import Any, Literal
VerticalKey = Literal[
"clinics",
"real_estate",
"logistics",
"training",
"agencies",
"restaurants",
"hospitality",
"construction",
"b2b_saas",
]
def get_vertical_playbooks() -> dict[str, Any]:
base = {
"clinics": {
"pain_ar": "زحمة المواعيد وتأخر المتابعة على واتساب.",
"buyer": "مدير العيادة أو المالك",
"why_now_signals": ["hiring_sales", "booking_link", "review_spike"],
"message_angle_ar": "تحسين التحويل والمتابعة بدون إزعاج للمرضى.",
"roi_metric": "no_show_rate_reduction",
"compliance": "PDPL + healthcare marketing sensitivity",
"pricing_sensitivity": "medium",
},
"real_estate": {
"pain_ar": "تأهيل العملاء والمتابعة بين الوسيط والمهتم.",
"buyer": "مدير المبيعات أو المؤسس",
"why_now_signals": ["new_branch", "website_change", "ad_activity"],
"message_angle_ar": "سرعة الرد على الاستفسارات وفرز الجادين.",
"roi_metric": "qualified_tours_booked",
"compliance": "Opt-in for marketing WhatsApp",
"pricing_sensitivity": "medium-high",
},
"logistics": {
"pain_ar": "متابعة العروض وRFQs عبر قنوات متعددة.",
"buyer": "مدير التجاري",
"why_now_signals": ["hiring_sales", "tender_opportunity", "new_partnership"],
"message_angle_ar": "تسريع دورة الاقتباس والمتابعة.",
"roi_metric": "quote_to_win_rate",
"compliance": "B2B outreach policies",
"pricing_sensitivity": "medium",
},
"training": {
"pain_ar": "تحويل الاستفسار إلى تسجيل دورة.",
"buyer": "مدير الأكاديمية",
"why_now_signals": ["booking_link", "event_participation", "website_change"],
"message_angle_ar": "متابعة مهذبة عربية بعد الاهتمام الأولي.",
"roi_metric": "enrollment_conversion",
"compliance": "Marketing consent",
"pricing_sensitivity": "low-medium",
},
"agencies": {
"pain_ar": "إثبات العائد للعميل وتكرار العمليات.",
"buyer": "شريك أو مدير حسابات",
"why_now_signals": ["hiring_sales", "new_product_launch"],
"message_angle_ar": "Dealix كطبقة إيرادات فوق خدماتكم.",
"roi_metric": "client_retention_and_upsell",
"compliance": "Partner agreements + rev share clarity",
"pricing_sensitivity": "partner_model",
},
"restaurants": {
"pain_ar": "حجوزات واتساب وتجربة ضيف.",
"buyer": "المالك أو مدير التشغيل",
"why_now_signals": ["booking_link", "review_spike", "ad_activity"],
"message_angle_ar": "تنظيم الطلب العالي دون أخطاء بشرية.",
"roi_metric": "booking_conversion",
"compliance": "Consumer messaging rules",
"pricing_sensitivity": "high",
},
"hospitality": {
"pain_ar": "مبيعات المجموعات والفعاليات.",
"buyer": "مدير المبيعات",
"why_now_signals": ["event_participation", "new_partnership", "website_change"],
"message_angle_ar": "متابعة B2B للمجموعات والشركات.",
"roi_metric": "group_bookings",
"compliance": "B2B opt-in",
"pricing_sensitivity": "medium",
},
"construction": {
"pain_ar": "مناقصات وموردين وتنسيق عروض.",
"buyer": "مدير التطوير التجاري",
"why_now_signals": ["tender_opportunity", "new_branch", "hiring_sales"],
"message_angle_ar": "تنبيهات فرص ومتابعة آمنة.",
"roi_metric": "bid_participation_rate",
"compliance": "Tender ethics + PDPL",
"pricing_sensitivity": "low",
},
"b2b_saas": {
"pain_ar": "توسعة الحساب وتسريب الإيرادات.",
"buyer": "Revenue leader / CS lead",
"why_now_signals": ["crm_detected", "funding", "hiring_sales"],
"message_angle_ar": "إشارات تمديد وفرص ترقية خطة.",
"roi_metric": "expansion_pipeline",
"compliance": "Data processing agreements",
"pricing_sensitivity": "medium",
},
}
return {"verticals": base}
def recommend_vertical(*, industry: str, city: str, goal: str) -> dict[str, Any]:
ind = industry.lower().strip()
mapping = {
"clinic": "clinics",
"عيادة": "clinics",
"real": "real_estate",
"عقار": "real_estate",
"logistics": "logistics",
"شحن": "logistics",
"training": "training",
"تدريب": "training",
"agency": "agencies",
"وكالة": "agencies",
}
key = next((v for k, v in mapping.items() if k in ind), "b2b_saas")
pb = get_vertical_playbooks()["verticals"][key]
return {
"recommended_vertical": key,
"city": city,
"goal": goal,
"playbook": pb,
}
def vertical_roi_metric(vertical: VerticalKey) -> str:
pb = get_vertical_playbooks()["verticals"].get(vertical, {})
return str(pb.get("roi_metric", "pipeline_velocity"))