feat: add generate_study script for automated study content creation

This commit is contained in:
Hamza-Ayed
2026-06-16 22:44:47 +03:00
parent 2c3816badb
commit fd30b9f6fa
2 changed files with 629 additions and 0 deletions

629
scratch/generate_study.py Normal file
View File

@@ -0,0 +1,629 @@
#!/usr/bin/env python3.13
"""
Generate the updated feasibility study (Version 3.1) for Siro App.
Produces both .docx and .html output.
"""
from docx import Document
from docx.shared import Inches, Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.section import WD_ORIENT
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import os
OUTPUT_DIR = "/Users/hamzaaleghwairyeen/development/App/Siro"
# ─── Colours ───
PRIMARY = RGBColor(0x1E, 0x3A, 0x8A)
DARK = RGBColor(0x0F, 0x17, 0x2A)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
GREY = RGBColor(0x47, 0x55, 0x69)
LGREY = RGBColor(0xF1, 0xF5, 0xF9)
GREEN = RGBColor(0x16, 0x7A, 0x34)
RED = RGBColor(0xB9, 0x1C, 0x1C)
def set_cell_shading(cell, color_hex):
"""Set cell background colour."""
shading = OxmlElement('w:shd')
shading.set(qn('w:val'), 'clear')
shading.set(qn('w:color'), 'auto')
shading.set(qn('w:fill'), color_hex)
cell._tc.get_or_add_tcPr().append(shading)
def add_table(doc, headers, rows, col_widths=None, header_color="1e3a8a", header_text_color="FFFFFF"):
"""Add a formatted table."""
table = doc.add_table(rows=1 + len(rows), cols=len(headers))
table.alignment = WD_TABLE_ALIGNMENT.CENTER
table.style = 'Table Grid'
# Header row
for i, h in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = ''
p = cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(h)
run.bold = True
run.font.size = Pt(10)
run.font.color.rgb = WHITE
set_cell_shading(cell, header_color)
# Data rows
for r_idx, row in enumerate(rows):
for c_idx, val in enumerate(row):
cell = table.rows[r_idx + 1].cells[c_idx]
cell.text = ''
p = cell.paragraphs[0]
p.alignment = WD_ALIGN_PARAGRAPH.CENTER if c_idx > 0 else WD_ALIGN_PARAGRAPH.RIGHT
run = p.add_run(str(val))
run.font.size = Pt(9.5)
if r_idx == len(rows) - 1:
run.bold = True
if c_idx == 0:
run.bold = True
if col_widths:
for i, w in enumerate(col_widths):
for row in table.rows:
row.cells[i].width = Cm(w)
return table
def add_heading(doc, text, level=1):
h = doc.add_heading(text, level=level)
h.alignment = WD_ALIGN_PARAGRAPH.RIGHT
for run in h.runs:
run.font.color.rgb = PRIMARY if level <= 2 else DARK
return h
def add_para(doc, text, bold=False, size=10, color=None, align=WD_ALIGN_PARAGRAPH.RIGHT):
p = doc.add_paragraph()
p.alignment = align
run = p.add_run(text)
run.bold = bold
run.font.size = Pt(size)
if color:
run.font.color.rgb = color
return p
def add_bullet(doc, text, bold_prefix=""):
p = doc.add_paragraph(style='List Bullet')
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT
if bold_prefix:
run = p.add_run(bold_prefix)
run.bold = True
run.font.size = Pt(10)
run = p.add_run(text)
run.font.size = Pt(10)
return p
def generate_docx():
doc = Document()
# Set RTL for entire document
style = doc.styles['Normal']
style.font.name = 'Calibri'
style.font.size = Pt(10)
style.element.rPr.rFonts.set(qn('w:eastAsia'), 'Calibri')
# ── Title Page ──
for _ in range(4):
doc.add_paragraph()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("دراسة الجدوى الاقتصادية\nتطبيق سيرو للنقل الذكي")
run.bold = True
run.font.size = Pt(28)
run.font.color.rgb = PRIMARY
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("الإصدار الثالث — يونيو 2026\nنموذج الدفع الشهري المرحلي")
run.font.size = Pt(16)
run.font.color.rgb = GREY
doc.add_paragraph()
# Key metrics boxes
metrics = [
("السوق المستهدف", "سوريا — دمشق الكبرى"),
("نموذج الاستثمار", "دفع شهري مرحلي ($8,000/شهر)"),
("رأس المال التأسيسي", "$9,000 (دفعة واحدة)"),
("نقطة الخروج", "نهاية الشهر الخامس إذا لم تتحقق المؤشرات"),
("نطاق نقطة التعادل", "الشهر السابع حتى التاسع"),
("أقصى تعرض للمستثمر", "$49,000 (عند الخروج المبكر)"),
("إجمالي الاستثمار المتوقع", "$65,000 — $81,000"),
]
for label, val in metrics:
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(f"{label}: ")
run.bold = True
run.font.size = Pt(11)
run = p.add_run(val)
run.font.size = Pt(11)
run.font.color.rgb = PRIMARY
doc.add_page_break()
# ── 1. Executive Summary ──
add_heading(doc, "أولاً: الملخص التنفيذي", 1)
add_para(doc,
"سيرو تطبيق نقل ذكي جاهز للإطلاق في السوق السوري، يعمل على بنية تحتية مستقلة تقنياً لا تعتمد على "
"أي خدمات خارجية مكلفة أو مقيدة جغرافياً. يتميز بأدنى عمولة في السوق (11%) مقابل 17-20% لدى المنافسين، "
"مما يجعله الخيار المنطقي للسائق والراكب معاً.")
add_para(doc,
"تتبنى هذه الخطة نموذج دفع شهري مرحلي يحمي المستثمر من تجميد رأس المال، ويضمن استمرارية تشغيلية مرتبطة "
"بالأداء الفعلي. وجود شرط خروج صريح في الشهر الخامس يُعطي الطرفين وضوحاً تاماً في المخاطر والتوقعات.")
add_para(doc, "أبرز نقاط القوة التنافسية", bold=True, size=11)
bullets = [
("▸ المنتج مكتمل تقنياً ومختبر ميدانياً — لا مخاطر تطوير"),
("▸ تجربة الطيار: 1,447 سائق انضموا بـ$1,400 إعلانات فقط — بدون حوافز"),
("▸ أدنى عمولة في السوق: 11% مقابل 17-20% عند المنافسين"),
("▸ بنية تحتية ذاتية توفر 60% من تكاليف التشغيل مقارنة بالنظراء"),
("▸ المؤسس يغطي وظائف 5 أشخاص — وفر $3,000-5,000/شهر في الرواتب"),
("▸ نموذج استثمار شهري مرحلي: صفر مخاطر تجميد رأس المال"),
]
for b in bullets:
add_bullet(doc, b)
# Key indicators table
add_para(doc, "مؤشرات الأداء الرئيسية", bold=True, size=11)
add_table(doc,
["المؤشر", "القيمة"],
[
["رأس المال التأسيسي (مرة واحدة)", "$9,000"],
["المصاريف التشغيلية الشهرية", "$8,000/شهر"],
["نقطة الخروج للمستثمر", "نهاية الشهر الخامس إذا لم تتحقق المؤشرات"],
["نطاق التعادل", "الشهر 7 — 9"],
["أقصى خسارة عند الخروج المبكر", "$49,000"],
["إجمالي الاستثمار حتى التعادل", "$65,000 — $81,000"],
["عمولة التطبيق", "11% من كل رحلة"],
["متوسط حصة الشركة للرحلة", "$0.30 / رحلة"],
["هدف الرحلات عند التعادل", "889 رحلة/يوم"],
],
col_widths=[12, 6]
)
# ── 2. Vision & Business Model ──
doc.add_page_break()
add_heading(doc, "ثانياً: الرؤية والنموذج التجاري", 1)
add_para(doc, "الرؤية", bold=True, size=11)
add_para(doc, "أن يكون سيرو المنصة الأولى للنقل الذكي الموثوق في سوريا، بعمولة عادلة للسائق وخدمة موثوقة للراكب، على بنية رقمية مستقلة وسيادية.")
add_para(doc, "نموذج الإيرادات", bold=True, size=11)
add_bullet(doc, "عمولة 11% من قيمة كل رحلة تُقتطع تلقائياً من أجرة السائق")
add_bullet(doc, "متوسط قيمة الرحلة: $2.75 — حصة الشركة: $0.30/رحلة")
add_bullet(doc, "مستقبلاً: إعلانات داخل التطبيق، اشتراكات السائق المميز، خدمات B2B للشركات والفنادق")
add_para(doc, "الميزة التنافسية — لماذا سيرو؟", bold=True, size=11)
add_table(doc,
["المعيار", "سيرو", "المنافسون"],
[
["عمولة التطبيق", "11%", "17% - 20%"],
["خريطة المنصة", "IntaleqMaps — ذاتية $0", "Google Maps $5,000-15,000/شهر"],
["نظام OTP", "Flash Call ذاتي — $0", "SMS مدفوع $0.03-0.05/رسالة"],
["تكلفة التطوير المستمر", "المؤسس = المطور", "فريق خارجي مكلف"],
["البنية التحتية", "خوادم ذاتية مستقلة", "Cloud APIs قابلة للتوقف"],
["خدمة العملاء", "مدمجة + AI (Nabeeh)", "مراكز خارجية مكلفة"],
],
col_widths=[5, 6, 7]
)
# ── 3. Market Analysis ──
doc.add_page_break()
add_heading(doc, "ثالثاً: تحليل السوق السوري", 1)
add_heading(doc, "3-1: لماذا الآن؟", 2)
add_para(doc, "تمر سوريا في مرحلة إعادة الإعمار وانفتاح اقتصادي تدريجي منذ نهاية 2024. دمشق الكبرى تشهد حركة تجارية متصاعدة مع نقص واضح في وسائل النقل المنظم.")
add_heading(doc, "3-2: حجم السوق", 2)
add_table(doc,
["المؤشر", "التقدير"],
[
["سكان دمشق الكبرى", "4 - 5 مليون نسمة"],
["مستخدمو الهاتف الذكي", "65% - 70%"],
["الرحلات اليومية المحتملة", "200,000 - 400,000 رحلة/يوم"],
["حصة السوق المستهدفة سنة 1", "1% - 2% (1,500 - 2,000 رحلة/يوم)"],
["نتيجة تجربة الطيار", "1,447 سائق سجلوا بـ$1,400 تسويق فقط"],
],
col_widths=[10, 8]
)
add_heading(doc, "3-3: المنافسون الرئيسيون", 2)
add_table(doc,
["التطبيق", "نقطة الضعف", "فرصتنا"],
[
["YallaGo", "عمولة 20% تُرهق السائق", "11% = ولاء السائق يتحول إلينا"],
["Zakinn", "عمولة 17% تُرهق السائق", "نبدأ من المنطقة الأكثر طلباً"],
["Tafaddal", "تجربة مستخدم ضعيفة", "UX متقدم + تطبيق سائق أفضل"],
["سيرو — ميزتنا", "أدنى عمولة + بنية مستقلة", "الأصعب تقليداً في السوق"],
],
col_widths=[4, 6, 8]
)
# ── 4. Operational Plan ──
doc.add_page_break()
add_heading(doc, "رابعاً: الخطة التشغيلية", 1)
add_heading(doc, "4-1: اختيار موقع المكتب في دمشق", 2)
add_para(doc, "يشترط الترخيص القانوني وجود مقر موثق. الميزانية المخصصة: $600/شهر.")
add_table(doc,
["المنطقة", "التقييم", "الإيجار الشهري", "الملاحظة"],
[
["المزة", "★★★★★", "$500 - $700", "الأفضل: مقر الشركات الكبرى"],
["كفرسوسة", "★★★★☆", "$400 - $600", "قريب من المزة، أسعار معقولة"],
["الصالحية", "★★★☆☆", "$400 - $550", "مركزي، وصول جيد"],
["أبو رمانة", "★★☆☆☆", "$700 - $1,000", "مرموق لكن يتجاوز الميزانية"],
["برزة", "★★☆☆☆", "$280 - $400", "أرخص لكن أقل احترافية"],
],
col_widths=[3, 2.5, 3.5, 8]
)
add_para(doc, "التوصية: كفرسوسة أو المزة — 50-70 م² مع هامش تفاوض", bold=True)
# 4-2: Office Furniture (revised)
add_heading(doc, "4-2: المشتريات والتجهيزات المكتبية", 2)
add_para(doc, "أ — الأثاث المكتبي", bold=True, size=10)
add_table(doc,
["البند", "الكمية", "سعر الوحدة", "الإجمالي"],
[
["مكتب رئيسي مع أدراج", 1, "$80", "$80"],
["مكاتب موظفين بسيطة", 3, "$40", "$120"],
["كرسي مكتبي دوّار رئيسي", 1, "$60", "$60"],
["كراسي موظفين", 3, "$30", "$90"],
["طاولة اجتماعات صغيرة (4 أشخاص)", 1, "$50", "$50"],
["برادي (ستائر) للمكتب", "", "", "$25"],
["رفوف تخزين بسيطة", "", "", "$25"],
["مراوح (عدد 2)", 2, "$25", "$50"],
["إجمالي الأثاث", "", "", "$500"],
],
col_widths=[7, 2, 2.5, 2.5]
)
add_para(doc, "ب — المعدات والتجهيزات", bold=True, size=10)
add_table(doc,
["البند", "الإجمالي"],
[
["طابعة/ماسح ضوئي", "$35"],
["إكسسوارات (كابلات، ماوس، لوحات مفاتيح)", "$20"],
["قرطاسية ومستلزمات (3 أشهر)", "$20"],
["أدوات ضيافة أولية", "$25"],
["إجمالي التجهيزات", "$100"],
],
col_widths=[10, 4]
)
add_para(doc, "ج — أثاث وتجهيزات سكن المؤسس", bold=True, size=10)
add_table(doc,
["البند", "الإجمالي"],
[
["سرير + فرشة (عدد 2)", "$100"],
["إحرامات + مخدات (عدد 2)", "$25"],
["برادي للسكن", "$25"],
["ثلاجة صغيرة للمكتب والسكن", "$80"],
["غاز صغير (سفري) + أدوات مطبخ", "$70"],
["سخان مياه (شمسي/كهربائي)", "$50"],
["إجمالي تجهيزات السكن", "$350"],
],
col_widths=[10, 4]
)
# 4-3: Technical Equipment
add_heading(doc, "4-3: أجهزة التطوير والمعدات التقنية", 2)
add_table(doc,
["البند", "الإجمالي", "ملاحظة"],
[
["MacBook Pro M4 Pro Max (40 GPU)", "$3,100", "جهاز التطوير والإدارة الرئيسي"],
["iPhone (أحدث إصدار)", "$500", "اختبار تطبيق iOS"],
["جهاز Android (أحدث إصدار)", "$300", "اختبار تطبيق Android"],
["باقي أجهزة التطوير", "$1,100", "ملحقات وإكسسوارات تطوير"],
["إجمالي أجهزة التطوير", "$5,000", ""],
],
col_widths=[8, 3.5, 5.5]
)
add_para(doc, "ملاحظة: تم استبدال أجهزة الحاسوب المكتبي لخدمة العملاء بهواتف ذكية (3 × $150 ضمن بند هواتف خدمة العملاء في CAPEX).", size=9, color=GREY)
# ── 5. HR Plan ──
doc.add_page_break()
add_heading(doc, "خامساً: خطة الموارد البشرية", 1)
add_heading(doc, "5-1: الهيكل الوظيفي والرواتب", 2)
add_table(doc,
["المسمى الوظيفي", "العدد", "الراتب الشهري", "الإجمالي"],
[
["المشغل الرئيسي / المؤسس التنفيذي", 1, "$3,500", "$3,500"],
["ممثل خدمة العملاء", 3, "$110 - $130", "$400"],
["إجمالي الرواتب الشهرية", "4 أشخاص", "", "$3,900"],
],
col_widths=[7, 2, 3.5, 3]
)
add_para(doc, "ملاحظات:", bold=True, size=9)
add_bullet(doc, "تم إلغاء بند مدير السوشيال ميديا (فريلانسر) — المؤسس يدير التسويق الرقمي مباشرة")
add_bullet(doc, "تم إلغاء بند السكرتيرة الإدارية — المهام توزع على فريق خدمة العملاء والمؤسس")
add_bullet(doc, "فريق خدمة العملاء: 3 موظفين براتب $110-130/شهر ($400 إجمالي)")
add_bullet(doc, "برنامج تدريب خدمة العملاء: أسبوعين (بدلاً من 4 أسابيع)")
# ── 6. Financial Plan ──
doc.add_page_break()
add_heading(doc, "سادساً: الخطة المالية التفصيلية", 1)
add_heading(doc, "6-1: رأس المال التأسيسي — $9,000 (دفعة واحدة)", 2)
add_para(doc, "يُصرف كاملاً عند بدء التأسيس قبل الإطلاق.")
add_table(doc,
["البند", "المبلغ", "البيان"],
[
["شهادة اعتمادية (الهيئة الناظمة)", "$600", "ترخيص التطبيق"],
["أتعاب المحامي والتخليص القانوني", "$1,500", "تأسيس الشركة + تراخيص"],
["رسوم وزارة (سجل تجاري + وزارة نقل)", "$200", "رسوم حكومية"],
["هواتف خدمة العملاء (3 أجهزة)", "$450", "3 × $150"],
["أجهزة التطوير (Mac + iPhone + Android)", "$5,000", "حسب التفصيل في 4-3"],
["لابتوب للسيرفرات وإدارة الإعلانات", "$350", "جهاز منفصل لإدارة السيرفرات"],
["تجهيز المكتب (أثاث + معدات)", "$550", "حسب التفصيل في 4-2"],
["تجهيزات سكن المؤسس", "$350", "أثاث وتجهيزات أساسية"],
["إجمالي رأس المال التأسيسي", "$9,000", ""],
],
col_widths=[8, 2.5, 6]
)
add_heading(doc, "6-2: المصاريف التشغيلية الشهرية — $8,000/شهر", 2)
add_table(doc,
["البند", "المبلغ", "البيان"],
[
["راتب المشغل الرئيسي", "$3,500", "تقني + إداري + تسويق + عمليات"],
["فريق خدمة العملاء × 3", "$400", "بمتوسط $133/موظف"],
["سيرفرات وبنية سحابية", "$200", "استضافة + نسخ احتياطي"],
["إيجار المكتب", "$600", "كفرسوسة / المزة"],
["إيجار سكن المشغل", "$300", "ضمن خطة الرواتب"],
["خدمات الإنترنت", "$45", "خط ثابت مزدوج"],
["فاتورة الكهرباء", "$70", "مكتب + معدات"],
["باقات خطوط هواتف (3 أرقام)", "$30", "لخدمة العملاء"],
["إعلانات رقمية (Facebook + TikTok)", "$2,855", "المتبقي من الميزانية"],
["إجمالي OPEX الشهري", "$8,000", ""],
],
col_widths=[7, 2.5, 6]
)
add_para(doc, "ملاحظة: تم إلغاء بند إدارة السوشيال ميديا ($200) وبند السكرتيرة ($100). الفائض (~$355 إضافية) يُضاف إلى ميزانية الإعلانات الرقمية ($2,855 بدلاً من $2,500).", size=9, color=GREY)
# 6-3: Driver Incentives
add_heading(doc, "6-3: خطة حوافز السائقين", 2)
add_table(doc,
["الفترة", "السائقون", "التكلفة", "المصدر"],
[
["الشهر الأول", "100 سائق × $15", "$1,500", "من CAPEX (احتياطي)"],
["الشهر الثاني", "120 سائق × $15", "$1,800", "من CAPEX (احتياطي)"],
["الشهر الثالث", "150+ سائق", "من الإيرادات", "ذاتي التمويل"],
["الشهر الرابع+", "300-500 سائق", "من الإيرادات", "ذاتي التمويل"],
],
col_widths=[4, 4, 3.5, 4]
)
# 6-4: Cash Flow Table
add_heading(doc, "6-4: جدول التدفق النقدي الشهري", 2)
add_table(doc,
["الشهر", "صرف المستثمر", "الإيرادات", "العجز", "الإجمالي", "رحلات/يوم", "سائق نشط"],
[
["التأسيس", "$9,000", "", "-$9,000", "$9,000", "", ""],
["1", "$8,000", "$270", "-$7,730", "$17,000", "30", "100"],
["2", "$8,000", "$630", "-$7,370", "$25,000", "70", "120"],
["3", "$8,000", "$1,350", "-$6,650", "$33,000", "150", "220"],
["★4 — فحص", "$8,000", "$3,150", "-$4,850", "$41,000", "350", "350"],
["★5 — خروج", "$8,000", "$5,400", "-$2,600", "$49,000", "600", "480"],
["6", "$8,000", "$6,750", "-$1,250", "$57,000", "750", "550"],
["⚡7", "$8,000", "$8,100", "+$100", "$65,000", "900", "630"],
["⚡8", "$8,000", "$9,450", "+$1,450", "$73,000", "1,050", "750"],
["⚡9", "$8,000", "$10,500", "+$2,500", "$81,000", "1,167", "840"],
["10", "$0", "$11,250", "+$3,250", "", "1,250", "900"],
["11", "$0", "$12,375", "+$4,375", "", "1,375", "980"],
["12", "$0", "$13,500", "+$5,500", "", "1,500", "1,050"],
["13", "$0", "$14,400", "+$6,400", "", "1,600", "1,100"],
["14", "$0", "$15,300", "+$7,300", "", "1,700", "1,150"],
],
col_widths=[2.5, 2.5, 2, 2, 2.5, 2, 2]
)
# ── 7. Investment Structure ──
doc.add_page_break()
add_heading(doc, "سابعاً: هيكل الاستثمار — نموذج الدفع الشهري", 1)
add_para(doc, "آلية الدفع:", bold=True, size=11)
add_bullet(doc, "المستثمر يدفع $9,000 مرة واحدة عند التوقيع (CAPEX)")
add_bullet(doc, "يدفع $8,000 شهرياً لتغطية التشغيل الكامل")
add_bullet(doc, "الدفع يتوقف تلقائياً عندما تتجاوز الإيرادات $8,000/شهر")
add_bullet(doc, "لا يوجد التزام بإجمالي محدد مقدماً")
add_para(doc, "", size=6)
add_para(doc, "جدول الدفع المتوقع (سيناريو قاعدي — تعادل الشهر 8):", bold=True, size=10)
add_table(doc,
["الشهر", "المبلغ", "نوع الدفع", "حالة المشروع"],
[
["صفر", "$9,000", "مرة واحدة", "تجهيز + ترخيص + تعيين"],
["1", "$8,000", "شهري", "إطلاق ناعم"],
["2", "$8,000", "شهري", "نمو متصاعد"],
["3", "$8,000", "شهري", "حوافز ذاتية"],
["4 — فحص", "$8,000", "شهري", "مراجعة أداء"],
["5 — خروج", "$8,000", "شهري", "استمرار أو خروج"],
["6", "$8,000", "شهري", "قرب التعادل"],
["7", "$8,000", "شهري", "تعادل متفائل"],
["8 — تعادل", "$8,000 (آخر)", "شهري", "الإيرادات ≥ $8,000"],
["9+", "$0", "ذاتي", "المشروع يمول نفسه"],
],
col_widths=[3, 3, 3, 7]
)
add_para(doc, "", size=6)
add_para(doc, "إجمالي تعرض المستثمر في كل سيناريو:", bold=True, size=10)
add_table(doc,
["السيناريو", "التوقف", "الإجمالي", "ملاحظة"],
[
["خروج مبكر (فشل)", "نهاية ش5", "$49,000", "أقصى خسارة $49,000"],
["تعادل متفائل", "منتصف ش7", "$57,000", "أفضل سيناريو"],
["تعادل قاعدي", "منتصف ش8", "$65,000", "الأرجح"],
["تعادل محافظ", "منتصف ش9", "$73,000", "نمو أبطأ"],
],
col_widths=[5, 3, 3, 5]
)
add_para(doc, "", size=6)
add_para(doc, "لماذا لا يوجد احتياطي مالي في هذا النموذج؟", bold=True, size=11)
add_para(doc, "في النموذج القديم (مبلغ واحد)، المستثمر يدفع كل شيء مقدماً والاحتياطي يجلس خاملاً. في النموذج الجديد (شهري):", size=10)
add_bullet(doc, "المستثمر يدفع فقط ما صُرف فعلاً")
add_bullet(doc, "لا توجد أموال خاملة — كل دولار يُشغَّل")
add_bullet(doc, "المستثمر يخاطر بـ$49,000 كحد أقصى (عند الخروج)")
add_bullet(doc, "نقطة الخروج هي الحماية الحقيقية بدلاً من الاحتياطي")
# ── 8. Exit Clause ──
doc.add_page_break()
add_heading(doc, "ثامناً: شرط الخروج — بند الحماية", 1)
add_para(doc, "يحق للمستثمر إيقاف الدفعات الشهرية والخروج في نهاية الشهر الخامس إذا لم تتحقق المؤشرات.", size=10)
add_para(doc, "", size=6)
add_para(doc, "مؤشرات الأداء — نقطة الفحص (الشهر 4):", bold=True, size=10)
add_table(doc,
["المؤشر", "الحد الأدنى", "الحد المثالي"],
[
["الرحلات اليومية", "200/يوم", "350/يوم"],
["السائقون المسجلون", "300", "450"],
["السائقون النشطون", "150", "250"],
["الإيرادات الشهرية", "$1,800", "$3,150"],
["معدل احتجاز السائق", "55%", "70%"],
["تقييم التطبيق", "4.0+", "4.3+"],
],
col_widths=[6, 4, 4]
)
add_para(doc, "", size=6)
add_para(doc, "مؤشرات الأداء — نقطة القرار (الشهر 5):", bold=True, size=10)
add_table(doc,
["المؤشر", "حد الاستمرار", "الخروج إذا أقل من"],
[
["الرحلات اليومية", "400/يوم", "300/يوم"],
["السائقون النشطون", "400", "250"],
["الإيرادات الشهرية", "$4,000+", "$2,700"],
["نمو أسبوعي", "+10% متواصل", "ثبات أو تراجع"],
["عقود B2B", "عقد واحد", "صفر عقود"],
],
col_widths=[6, 4, 4]
)
# ── 9. Break-Even ──
doc.add_page_break()
add_heading(doc, "تاسعاً: تحليل نقطة التعادل — نطاق الشهر 7 إلى 9", 1)
add_para(doc, "لماذا نطاق وليس رقماً ثابتاً؟", bold=True, size=10)
add_para(doc, "السوق السوري في مرحلة إعادة الإعمار = سوق متقلب بطبيعته. النطاق (7-9) أكثر صدقاً وأكثر حماية لكلا الطرفين.")
add_para(doc, "", size=6)
add_table(doc,
["السيناريو", "نقطة التعادل", "إجمالي الاستثمار", "الوصف"],
[
["متفائل", "الشهر 7", "$57,000", "نمو سريع، B2B مبكر"],
["قاعدي (الأرجح)", "الشهر 8", "$65,000", "نمو طبيعي"],
["محافظ", "الشهر 9", "$73,000", "سوق متقلب"],
["خروج مبكر", "لا تعادل", "$49,000", "آخر دفعة ش5"],
],
col_widths=[4, 3, 4, 5]
)
add_para(doc, "", size=6)
add_para(doc, "معادلة التعادل:", bold=True, size=11)
add_para(doc, "889 رحلة/يوم (عند $0.30/رحلة × 30 يوماً = $8,010)", bold=True, size=12, color=PRIMARY)
add_table(doc,
["المعطى", "الرقم", "كيف وصلنا إليه"],
[
["عمولة الشركة لكل رحلة", "$0.30", "11% من متوسط رحلة $2.75"],
["أيام الشهر", "30", ""],
["OPEX الشهري المستهدف", "$8,000", ""],
["رحلات التعادل اليومية", "889/يوم", "$8,000 ÷ $0.30 ÷ 30"],
["تعادل الشهر 7 (900/يوم)", "$8,100 > $8,000 ✓", "متحقق"],
],
col_widths=[6, 4, 6]
)
# ── 10. Risk Analysis ──
doc.add_page_break()
add_heading(doc, "عاشراً: تحليل المخاطر وخطط التخفيف", 1)
add_table(doc,
["المخاطرة", "التأثير", "الاحتمالية", "خطة التخفيف"],
[
["تأخر الترخيص", "عالٍ", "متوسطة", "البدء قبل الإطلاق بشهرين"],
["بطء نمو السائقين", "عالٍ", "منخفضة", "1,447 سائق بـ$1,400 — مثبت"],
["انخفاض الإيرادات", "عالٍ", "متوسطة", "شرط الخروج ش5 يحمي المستثمر"],
["تقلبات أمنية/سياسية", "عالٍ", "منخفضة-متوسطة", "بنية مستقلة - لا اعتماد على APIs غربية"],
["دخول منافس جديد", "متوسط", "متوسطة", "11% عمولة = عتبة تنافسية شبه مستحيلة"],
["مشاكل تقنية", "متوسط", "منخفضة", "المطور = المؤسس — استجابة فورية"],
["فشل الإعلانات", "متوسط", "منخفضة", "تجربة سابقة مثبتة + A/B Testing"],
],
col_widths=[5, 2, 3, 6]
)
# ── 11. Roadmap ──
doc.add_page_break()
add_heading(doc, "حادي عشر: خارطة الطريق والأهداف التشغيلية", 1)
add_table(doc,
["المرحلة", "الشهر", "الأهداف", "مؤشرات النجاح"],
[
["التأسيس", "قبل الإطلاق", "ترخيص + مكتب + توظيف", "وثائق قانونية + فريق جاهز"],
["الإطلاق الناعم", "ش 1-2", "100-120 سائق محفز", "70+ رحلة/يوم"],
["بناء الزخم", "ش 3", "حوافز ذاتية + B2B", "150 رحلة/يوم"],
["نقطة الفحص", "ش 4", "مراجعة مع المستثمر", "350 رحلة/يوم | $3,150"],
["قرار الاستمرار", "ش 5", "استمرار أو خروج", "600 رحلة/يوم | عقد B2B"],
["الاقتراب من التعادل", "ش 6", "750 رحلة/يوم", "عجز $1,250 فقط"],
["⚡ نطاق التعادل", "ش 7-9", "الإيرادات ≥ OPEX", "889+ رحلة/يوم"],
["النمو الذاتي", "ش 10-12", "فائض شهري", "$3,250-$5,500 فائض"],
["التوسع الجغرافي", "ش 13+", "حلب أو اللاذقية", "1,600+ رحلة/يوم"],
],
col_widths=[4, 2, 4, 6]
)
# ── 12. Conclusion ──
doc.add_page_break()
add_heading(doc, "ثاني عشر: الخلاصة والتوصية النهائية", 1)
add_para(doc, "ملخص نقاط الثقة للمستثمر:", bold=True, size=11)
add_bullet(doc, "المنتج جاهز ومختبر — 1,447 سائق التحقوا بـ$1,400 فقط")
add_bullet(doc, "أدنى عمولة في السوق (11%) = ميزة تنافسية دائمة")
add_bullet(doc, "نموذج الدفع الشهري يحمي المستثمر — لا تجميد لرأس المال")
add_bullet(doc, "شرط الخروج الواضح يضع سقفاً لأقصى خسارة ($49,000)")
add_bullet(doc, "نقطة التعادل (7-9 أشهر) واقعية ومبنية على بيانات حقيقية")
add_bullet(doc, "البنية التقنية المستقلة = مقاومة للعقوبات والقيود")
add_para(doc, "", size=6)
add_table(doc,
["المؤشر", "القيمة"],
[
["رأس المال التأسيسي (مرة واحدة)", "$9,000 — عند توقيع الاتفاقية"],
["المصاريف التشغيلية الشهرية", "$8,000/شهر — يتوقف عند التعادل"],
["أقصى تعرض للمستثمر", "$49,000 — نقطة الخروج: نهاية الشهر الخامس"],
["إجمالي الاستثمار حتى التعادل", "$65,000 — $73,000"],
["نطاق التعادل", "الشهر السابع إلى التاسع"],
],
col_widths=[10, 8]
)
add_para(doc, "", size=8)
add_para(doc, "هذه الدراسة أُعدت بناءً على بيانات حقيقية من السوق السوري وتجربة ميدانية فعلية. كل رقم فيها مبني على افتراضات محافظة.", bold=True, size=10, align=WD_ALIGN_PARAGRAPH.CENTER)
add_para(doc, "— نهاية دراسة الجدوى — الإصدار الثالث — يونيو 2026 —", size=9, color=GREY, align=WD_ALIGN_PARAGRAPH.CENTER)
# Save
docx_path = os.path.join(OUTPUT_DIR, "دراسة_الجدوى_سيرو_الإصدار_الثالث.docx")
doc.save(docx_path)
print(f"✅ DOCX saved: {docx_path}")
return docx_path
if __name__ == "__main__":
generate_docx()