diff --git a/scratch/generate_study.py b/scratch/generate_study.py new file mode 100644 index 0000000..1a8861f --- /dev/null +++ b/scratch/generate_study.py @@ -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() diff --git a/دراسة_الجدوى_سيرو_الإصدار_الثالث.docx b/دراسة_الجدوى_سيرو_الإصدار_الثالث.docx new file mode 100644 index 0000000..0680afa Binary files /dev/null and b/دراسة_الجدوى_سيرو_الإصدار_الثالث.docx differ