mirror of
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools.git
synced 2026-06-17 23:09:35 +00:00
Builds the full Saudi Autonomous Revenue OS surface as 10 deterministic
modules + a 16-endpoint router under /api/v1/growth-operator/.
Approval-first: every outbound is draft. No live send / charge / calendar
insert from this layer.
MODULES (auto_client_acquisition/growth_operator/)
1. client_profile.py — ClientGrowthProfile + Saudi-default approval
+ compliance rules (no cold WhatsApp, blocked keywords, weekly cap,
quiet_hours_riyadh)
2. contact_importer.py — normalize_phone (Saudi E.164),
dedupe_contacts (richer-record-wins), classify_contact_source
(existing/inbound/event/referral/old_lead/cold/unknown), detect_opt_out
(Arabic + English markers), summarize_import (dashboard report)
3. contactability.py — score_contactability returns
safe/needs_review/blocked with Arabic reasons; default policy:
no cold WhatsApp without lawful basis (PDPL Art.5)
4. targeting.py — segment_contacts, rank_targets (filters unsafe),
recommend_top_10, why_now_stub (deterministic, sector-aware)
5. message_planner.py — draft_arabic_message (Saudi tone, 4-sector
opener bank, no overhyped phrases, always pending_approval),
draft_followup (4 outcome modes), draft_objection_response
(6 indexed Saudi B2B objections with score_delta + next_action)
6. partnership_planner.py — 6 partner types catalog
(agency / consultant / integrator / crm / community / influencer)
+ suggest_partner_types (size/sector aware) + draft_partner_outreach
+ partner_scorecard (platinum/gold/silver/bronze)
7. meeting_planner.py — build_meeting_agenda (15/20-30/45+ min slot
plans), build_calendar_draft (Google Calendar shape, live_inserted=False,
conferenceData for Meet, Asia/Riyadh timezone), build_post_meeting_followup
8. payment_offer.py — sar_to_halalas, build_moyasar_payment_link_draft
(full payload + in-chat message + 4-plan catalog, live_charged=False)
9. proof_pack.py — build_weekly_proof_pack with grade A+/A/B/C/D,
activity/money/quality/best-of sections, dynamic next_week_plan_ar,
markdown export
10. mission_planner.py — 6 GROWTH_MISSIONS (first_10_opportunities ⭐
kill feature, recover_stalled_deals, partnership_sprint,
safe_whatsapp_campaign, meeting_booking_sprint, list_cleanup);
list_missions() + run_mission()
ROUTER (api/routers/growth_operator.py) — 16 endpoints
POST /contacts/import-preview · POST /contactability/score
POST /targets/top-10 · POST /messages/draft · POST /messages/followup
POST /messages/objection-response · POST /partners/suggest
POST /partners/outreach · POST /partners/scorecard
POST /meetings/draft · POST /meetings/post-followup
POST /payment-offer/draft · GET /missions · POST /missions/{id}/run
GET /proof-pack/demo · POST /profile
WIRING: api/main.py adds growth_operator import + router include
(positioned after personal_operator, before public).
DOCS
- docs/ARABIC_GROWTH_OPERATOR_FULL_SPEC.md (NEW): 20-section vision +
customer-type table + upload flow + contactability rules +
WhatsApp/Gmail/Calendar/Moyasar drafts + 6 missions + 16-endpoint
catalog + competitive comparison + beta readiness checklist
TESTS — 50 passing on Python 3.10 venv
tests/unit/test_growth_operator.py covers:
- Phone normalization across 5 input formats including invalid
- Dedupe richer-record invariant
- Source classification (existing/inbound/event/cold/unknown)
- Opt-out detection (Arabic + English notes + status)
- Import summary aggregation
- Contactability: opt-out blocked, cold WhatsApp blocked,
unknown→needs_review, existing→safe, inbound→safe
- Bulk contactability summary
- Top-10 filtering (unsafe excluded), max-cap enforcement
- Segment buckets
- Arabic message: pending_approval invariant + Arabic content
+ no overhyped phrases (banned list)
- Followup approval invariant
- Objection response: known + unknown→diagnostic
- Partner suggestions size-aware (SMB→agency/consultant/community)
- Partner outreach approval invariant
- Partner unknown type returns error
- Partner scorecard tier ordering
- Meeting agenda + calendar draft (live_inserted=False) +
Asia/Riyadh timezone + post-followup pending
- Payment: halalas conversion (1 SAR=100), negative raises,
draft NEVER charges (live_charged=False), unknown plan→error
- Proof pack: grade range + structure + markdown export
- Missions: first_10_opportunities present + kill feature ID
+ run mission known/unknown
- Profile: demo specialized + partial not specialized
+ default compliance blocks 'ضمان 100' + no_cold_whatsapp_without_lawful_basis
VERIFICATION
- 527 unit tests pass (was 477; +50 growth_operator)
- 2 skipped (provider smoke needs API keys)
- AST green on all 13 new files
- Approval invariant holds across every drafting function
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
164 lines
5.9 KiB
Python
164 lines
5.9 KiB
Python
"""
|
||
Partnership Operator — propose partner types + outreach drafts + scorecard.
|
||
|
||
Keep deterministic; partner suggestions come from a curated catalog
|
||
tuned for Saudi B2B (agencies, consultants, integrators, CRM vendors,
|
||
founder communities, sector influencers).
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import hashlib
|
||
from typing import Any
|
||
|
||
|
||
PARTNER_TYPES: tuple[dict[str, Any], ...] = (
|
||
{
|
||
"key": "marketing_agency",
|
||
"label_ar": "وكالة تسويق B2B",
|
||
"rationale_ar": "لديها عملاء يحتاجون lead-gen — Dealix يكمل خدماتها (لا يستبدلها).",
|
||
"model_ar": "Reseller / Revenue share 20-30%",
|
||
"ideal_size": "10-50 موظف",
|
||
},
|
||
{
|
||
"key": "sales_consultant",
|
||
"label_ar": "مستشار مبيعات / مدرب",
|
||
"rationale_ar": "يحتاج أداة عملية تثبت توصياته للعملاء.",
|
||
"model_ar": "Affiliate fixed fee + ongoing commission",
|
||
"ideal_size": "1-5 موظف",
|
||
},
|
||
{
|
||
"key": "tech_integrator",
|
||
"label_ar": "تكامل تقني / شريك Supabase أو Make.com",
|
||
"rationale_ar": "ينفّذ التكاملات للعملاء الكبار.",
|
||
"model_ar": "Implementation revenue share",
|
||
"ideal_size": "5-20 موظف",
|
||
},
|
||
{
|
||
"key": "crm_vendor",
|
||
"label_ar": "مزود CRM (Zoho/Salla/Odoo سعودي)",
|
||
"rationale_ar": "Dealix طبقة نمو فوق الـ CRM، لا منافس مباشر.",
|
||
"model_ar": "Co-sell + technical alliance",
|
||
"ideal_size": "30+ موظف",
|
||
},
|
||
{
|
||
"key": "founder_community",
|
||
"label_ar": "مجتمع مؤسسين سعوديين",
|
||
"rationale_ar": "الوصول لـ early adopters السعوديين عبر referrals.",
|
||
"model_ar": "Community partnership + free seats",
|
||
"ideal_size": "50+ عضو",
|
||
},
|
||
{
|
||
"key": "sector_influencer",
|
||
"label_ar": "خبير قطاعي (عقار / صحة / لوجستيات)",
|
||
"rationale_ar": "ثقة جاهزة في القطاع تختصر دورة البيع.",
|
||
"model_ar": "Equity / advisory + revenue referral",
|
||
"ideal_size": "1-3 موظف",
|
||
},
|
||
)
|
||
|
||
|
||
def suggest_partner_types(
|
||
*,
|
||
sector: str = "",
|
||
customer_size: str = "smb",
|
||
) -> dict[str, Any]:
|
||
"""Recommend ranked partner types for the given customer profile."""
|
||
suggestions = []
|
||
for p in PARTNER_TYPES:
|
||
priority = 50
|
||
if customer_size == "smb" and p["key"] in ("marketing_agency", "sales_consultant", "founder_community"):
|
||
priority += 25
|
||
if customer_size == "enterprise" and p["key"] in ("crm_vendor", "tech_integrator"):
|
||
priority += 25
|
||
if sector and sector.lower() in ("real_estate", "clinics", "logistics"):
|
||
if p["key"] == "sector_influencer":
|
||
priority += 20
|
||
suggestions.append({**p, "priority": priority})
|
||
|
||
suggestions.sort(key=lambda x: x["priority"], reverse=True)
|
||
return {
|
||
"sector": sector,
|
||
"customer_size": customer_size,
|
||
"suggestions": suggestions[:5],
|
||
"next_action": "draft_outreach_for_top_3",
|
||
}
|
||
|
||
|
||
def draft_partner_outreach(
|
||
*,
|
||
partner_type_key: str,
|
||
partner_name: str = "",
|
||
customer_name: str = "Dealix",
|
||
) -> dict[str, Any]:
|
||
"""Generate a warm partnership outreach draft."""
|
||
pt = next((p for p in PARTNER_TYPES if p["key"] == partner_type_key), None)
|
||
if pt is None:
|
||
return {
|
||
"error": "unknown_partner_type",
|
||
"approval_required": True,
|
||
"approval_status": "pending_approval",
|
||
}
|
||
|
||
target = partner_name or pt["label_ar"]
|
||
seed = hashlib.md5(f"{partner_type_key}{partner_name}".encode()).digest()
|
||
angle_idx = seed[0] % 2
|
||
angles_ar = [
|
||
"تكامل خدماتنا يخدم نفس عملائكم بأقل احتكاك.",
|
||
"نموذج revenue share واضح + pilot على عميل واحد قبل الالتزام.",
|
||
]
|
||
body_ar = (
|
||
f"السلام عليكم،\n\n"
|
||
f"أنا من فريق {customer_name}. تابعنا عملكم ووجدناه قريب جداً من جمهورنا.\n\n"
|
||
f"الفكرة باختصار: {angles_ar[angle_idx]}\n\n"
|
||
f"هل ١٥-٢٠ دقيقة الأسبوع الجاي مناسبة لاستكشاف فرصة شراكة؟"
|
||
)
|
||
return {
|
||
"partner_type": pt,
|
||
"channel_recommendation": "email",
|
||
"body_ar": body_ar,
|
||
"approval_required": True,
|
||
"approval_status": "pending_approval",
|
||
"suggested_next_steps": [
|
||
"1. رسالة warm",
|
||
"2. مكالمة 20 دقيقة",
|
||
"3. عرض partner revenue share",
|
||
"4. pilot على عميل واحد",
|
||
],
|
||
}
|
||
|
||
|
||
def partner_scorecard(
|
||
*,
|
||
partner_id: str,
|
||
intros_made: int = 0,
|
||
deals_influenced: int = 0,
|
||
revenue_share_paid_sar: float = 0.0,
|
||
relationship_age_months: int = 0,
|
||
) -> dict[str, Any]:
|
||
"""Compute a simple partner-health scorecard."""
|
||
activity_score = min(100, intros_made * 8 + deals_influenced * 15)
|
||
longevity_bonus = min(20, relationship_age_months * 2)
|
||
overall = min(100, activity_score + longevity_bonus)
|
||
if overall >= 75:
|
||
tier = "platinum"
|
||
elif overall >= 50:
|
||
tier = "gold"
|
||
elif overall >= 25:
|
||
tier = "silver"
|
||
else:
|
||
tier = "bronze"
|
||
return {
|
||
"partner_id": partner_id,
|
||
"overall_score": overall,
|
||
"tier": tier,
|
||
"intros_made": intros_made,
|
||
"deals_influenced": deals_influenced,
|
||
"revenue_share_paid_sar": round(revenue_share_paid_sar, 2),
|
||
"relationship_age_months": relationship_age_months,
|
||
"next_action_ar": (
|
||
"احتفظ بالعلاقة بنشاط ثابت — ربع سنوي." if tier in ("platinum", "gold")
|
||
else "حفّز التفاعل — اقتراح pilot جديد أو إحالة محتملة."
|
||
),
|
||
}
|