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

174 lines
6.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Pricing tiers, plan recommendation, performance fees, ROI estimates."""
from __future__ import annotations
from typing import Any, Literal
PlanKey = Literal[
"founder_operator",
"growth_os",
"scale_os",
"performance_addon",
"enterprise",
"agency_partner",
]
def get_pricing_tiers() -> dict[str, Any]:
"""Product packaging aligned with docs/PRICING_STRATEGY.md (SAR/month unless noted)."""
return {
"currency": "SAR",
"tiers": [
{
"key": "founder_operator",
"name_ar": "مشغّل المؤسس",
"target": "solo founders / early B2B startups",
"price_monthly_sar_range": [299, 499],
"price_future_sar": 999,
"includes": [
"Arabic daily brief",
"20 strategic opportunities / month",
"project memory (local + Supabase path)",
"draft messages (approval-first)",
"launch readiness",
"limited market radar",
],
},
{
"key": "growth_os",
"name_ar": "نظام النمو",
"target": "B2B SMEs",
"price_monthly_sar": 2999,
"includes": [
"Revenue Command Center",
"Market Radar",
"500 prospects / month (enrichment cap — policy)",
"AI message drafts",
"WhatsApp approval flow",
"Gmail draft",
"meeting schedule drafts",
"weekly proof pack",
],
},
{
"key": "scale_os",
"name_ar": "نظام التوسّع",
"target": "mature B2B teams",
"price_monthly_sar": 7999,
"includes": [
"multi-seat",
"team performance",
"customer success signals",
"churn / expansion scoring",
"integrations",
"advanced analytics",
"API / webhooks",
],
},
{
"key": "performance_addon",
"name_ar": "طبقة الأداء",
"target": "optional add-on",
"fee_qualified_lead_sar_range": [25, 75],
"fee_booked_meeting_sar_range": [150, 500],
"success_fee_pct_range": [3, 10],
"notes": ["Strict qualification + dispute logic required before billing."],
},
{
"key": "enterprise",
"name_ar": "المؤسسات / نشر خاص",
"target": "enterprise",
"pricing": "custom",
"includes": ["SSO", "advanced PDPL", "custom integrations", "dedicated success", "private data", "SLA"],
},
{
"key": "agency_partner",
"name_ar": "شراكة وكالات",
"setup_fee_sar_range": [3000, 25000],
"revenue_share_pct_range": [15, 30],
"notes": ["Dealix keeps platform subscription; agency sells implementation."],
},
],
}
def recommend_plan(
*,
company_size: str,
monthly_budget_sar: float,
goal: str,
) -> dict[str, Any]:
"""Heuristic plan recommendation — deterministic rules."""
size = company_size.lower().strip()
goal_l = goal.lower()
recommended: PlanKey = "founder_operator"
rationale_ar = "ميزانية محدودة أو مرحلة مبكرة — ابدأ بمشغّل المؤسس للتحقق السريع."
if monthly_budget_sar >= 6500 or size in ("large", "enterprise", "scale"):
recommended = "scale_os"
rationale_ar = "فريق ناضج أو ميزانية عالية — Scale OS يلائم التنسيق متعدد المقاعد والتحليلات."
elif monthly_budget_sar >= 2000 or size in ("sme", "medium", "growth"):
recommended = "growth_os"
rationale_ar = "شركة B2B نامية — Growth OS يوازن بين الرادار والتنفيذ الآمن ودليل العائد."
if "performance" in goal_l or "pay per" in goal_l:
rationale_ar += " أضف طبقة الأداء لاحقاً بعد تعريف التأهيل والنزاعات."
tiers = get_pricing_tiers()
tier = next((t for t in tiers["tiers"] if t["key"] == recommended), tiers["tiers"][0])
return {
"recommended_plan": recommended,
"rationale_ar": rationale_ar,
"tier_summary": tier,
"inputs": {"company_size": company_size, "monthly_budget_sar": monthly_budget_sar, "goal": goal},
}
def calculate_performance_fee(
*,
qualified_leads: int,
booked_meetings: int,
won_revenue_sar: float,
lead_fee_sar: float = 40.0,
meeting_fee_sar: float = 250.0,
success_fee_pct: float = 5.0,
) -> dict[str, Any]:
"""Demo calculation — real contracts need legal + qualification definitions."""
lead_component = max(0, qualified_leads) * lead_fee_sar
meeting_component = max(0, booked_meetings) * meeting_fee_sar
success_component = max(0.0, won_revenue_sar) * (success_fee_pct / 100.0)
total = round(lead_component + meeting_component + success_component, 2)
return {
"qualified_leads": qualified_leads,
"booked_meetings": booked_meetings,
"won_revenue_sar": won_revenue_sar,
"components_sar": {
"leads": round(lead_component, 2),
"meetings": round(meeting_component, 2),
"success": round(success_component, 2),
},
"total_performance_fees_sar": total,
"disclaimer_ar": "يجب ربط أي رسوم أداء بعقود وتأهيل واضح وتتبع نزاعات قبل الفوترة.",
}
def estimate_roi(
*,
plan_price_sar: float,
expected_pipeline_sar: float,
expected_revenue_sar: float,
) -> dict[str, Any]:
"""Simple ROI framing — not financial advice."""
if plan_price_sar <= 0:
return {"error": "plan_price_must_be_positive"}
pipeline_multiple = round(expected_pipeline_sar / plan_price_sar, 2) if plan_price_sar else 0.0
revenue_multiple = round(expected_revenue_sar / plan_price_sar, 2) if plan_price_sar else 0.0
return {
"plan_price_sar": plan_price_sar,
"expected_pipeline_sar": expected_pipeline_sar,
"expected_revenue_sar": expected_revenue_sar,
"pipeline_to_subscription_multiple": pipeline_multiple,
"revenue_to_subscription_multiple": revenue_multiple,
"verdict_ar": "إذا تعدت المضاعفات 35x على الأنابيب المتوقع، يصير الاشتراك منطقياً مع تتبع أسبوعي.",
}