Update: 2026-07-09 17:18:06

This commit is contained in:
Hamza-Ayed
2026-07-09 17:18:06 +03:00
parent 461a1402ab
commit 2ff7450d0b
8 changed files with 1322 additions and 231 deletions
Vendored
BIN
View File
Binary file not shown.
@@ -5,7 +5,6 @@ import 'package:crypto/crypto.dart';
import 'dart:math';
import 'package:http/http.dart' as http;
import 'package:permission_handler/permission_handler.dart';
import 'package:siro_driver/views/auth/captin/cards/sms_signup.dart';
import 'package:siro_driver/views/auth/syria/registration_view.dart';
import 'package:siro_driver/views/widgets/elevated_btn.dart';
import 'package:siro_driver/views/widgets/error_snakbar.dart';
@@ -173,14 +172,19 @@ class LoginDriverController extends GetxController {
if (parts.length == 3) {
var payload = parts[1];
switch (payload.length % 4) {
case 2: payload += '=='; break;
case 3: payload += '='; break;
case 2:
payload += '==';
break;
case 3:
payload += '=';
break;
}
final decoded = jsonDecode(utf8.decode(base64Url.decode(payload)));
final exp = decoded['exp'];
if (exp != null) {
// Check if token has at least 10 seconds remaining
isTokenValid = DateTime.now().millisecondsSinceEpoch < (exp * 1000 - 10000);
isTokenValid =
DateTime.now().millisecondsSinceEpoch < (exp * 1000 - 10000);
}
}
} catch (_) {}
@@ -236,14 +240,19 @@ class LoginDriverController extends GetxController {
if (parts.length == 3) {
String payload = parts[1];
switch (payload.length % 4) {
case 2: payload += '=='; break;
case 3: payload += '='; break;
case 2:
payload += '==';
break;
case 3:
payload += '=';
break;
}
final decoded = jsonDecode(utf8.decode(base64Url.decode(payload)));
final exp = decoded['exp'];
if (exp != null) {
// Check if token is valid with a 30-second buffer
isTokenValid = DateTime.now().millisecondsSinceEpoch < (exp * 1000 - 30000);
isTokenValid =
DateTime.now().millisecondsSinceEpoch < (exp * 1000 - 30000);
}
}
} catch (_) {}
@@ -15,7 +15,7 @@ import '../../constant/colors.dart';
import '../../constant/style.dart';
import '../../main.dart';
import '../../print.dart';
import '../../views/auth/captin/criminal_documents_page.dart';
import '../../views/auth/syria/registration_view.dart';
import '../../views/home/Captin/home_captain/home_captin.dart';
import '../../views/home/Captin/orderCaptin/order_request_page.dart';
import '../../views/home/Captin/orderCaptin/vip_order_page.dart';
@@ -263,7 +263,7 @@ class FirebaseMessagesController extends GetxController {
notificationController.showNotification(title, body, 'tone2', '');
}
MyDialog().getDialog(title, 'You should have upload it .'.tr, () {
Get.to(() => const CriminalDocumemtPage());
Get.to(() => const RegistrationView());
});
break;
@@ -16,7 +16,7 @@ import 'package:siro_driver/views/widgets/elevated_btn.dart';
import '../../constant/box_name.dart';
import '../../constant/links.dart';
import '../auth/captin/register_captin_controller.dart';
import '../auth/syria/registration_controller.dart';
import 'launch.dart';
//
@@ -466,11 +466,10 @@ class ScanDocumentsByApi extends GetxController {
: MyElevatedButton(
title: 'Next'.tr,
onPressed: () async {
RegisterCaptainController registerCaptainController =
Get.put(RegisterCaptainController());
RegistrationController registrationController =
Get.put(RegistrationController());
await registerCaptainController.register();
await registerCaptainController.addLisence();
await registrationController.submitRegistration();
await uploadImagePortrate();
// Get.to(() => CarLicensePage());
},
@@ -557,10 +556,12 @@ class ScanDocumentsByApi extends GetxController {
if (responseString.isNotEmpty) {
try {
final decoded = jsonDecode(responseString);
if (decoded['status'] == 'success' && decoded['message']['file_link'] != null) {
if (decoded['status'] == 'success' &&
decoded['message']['file_link'] != null) {
String rawUrl = decoded['message']['file_link'].toString();
String filename = rawUrl.split('/').last;
box.write(BoxName.driverPhotoUrl, '${AppLink.server}/portrate_captain_image/$filename');
box.write(BoxName.driverPhotoUrl,
'${AppLink.server}/portrate_captain_image/$filename');
}
} catch (_) {}
}
@@ -4,7 +4,7 @@ import 'package:siro_driver/constant/api_key.dart';
import 'package:siro_driver/constant/box_name.dart';
import 'package:siro_driver/constant/info.dart';
import 'package:siro_driver/constant/links.dart';
import 'package:siro_driver/controller/auth/captin/register_captin_controller.dart';
import 'package:siro_driver/controller/auth/syria/registration_controller.dart';
import 'package:siro_driver/controller/functions/crud.dart';
import 'package:siro_driver/main.dart';
import 'package:siro_driver/views/widgets/elevated_btn.dart';
@@ -40,10 +40,10 @@ class SmsEgyptController extends GetxController {
if (jsonDecode(res.body)['message'].toString() != "Success") {
await CRUD().post(link: AppLink.updatePhoneInvalidSMS, payload: {
"phone_number":
('+2${Get.find<RegisterCaptainController>().phoneController.text}')
('+2${Get.find<RegistrationController>().phoneController.text}')
});
box.write(BoxName.phoneDriver,
('+2${Get.find<RegisterCaptainController>().phoneController.text}'));
('+2${Get.find<RegistrationController>().phoneController.text}'));
box.write(BoxName.phoneVerified, '1');
await Get.put(LoginDriverController()).loginDriver(
@@ -12,7 +12,6 @@ import 'package:get/get.dart';
import 'package:http/http.dart' as http;
import '../../print.dart';
import '../auth/register_controller.dart';
import 'crud.dart';
class SmsEgyptController extends GetxController {
@@ -65,10 +64,10 @@ class SmsEgyptController extends GetxController {
} else {
await CRUD().post(link: AppLink.updatePhoneInvalidSMSPassenger, payload: {
"phone_number":
'+2${Get.find<RegisterController>().phoneController.text}'
'+2${Get.find<LoginController>().phoneController.text}'
});
box.write(BoxName.phoneDriver,
'+2${Get.find<RegisterController>().phoneController.text}');
'+2${Get.find<LoginController>().phoneController.text}');
box.write(BoxName.isVerified, '1');
await Get.put(LoginController()).loginUsingCredentials(
+389 -205
View File
@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>مولد ومطبع عقد شراكة Siro القانوني المطور</title>
<title>مولد ومطبع عقد شراكة Siro القانوني المطور - سوريا</title>
<!-- Google Fonts: Amiri & Inter for highly clean and modern tech-corporate document rendering -->
<link href="https://fonts.googleapis.com/css2?family=Amiri:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<!-- Tailwind CSS -->
@@ -142,7 +142,7 @@
</svg>
لوحة التحكم الذكية بالعقد
</h2>
<p class="text-[11px] text-slate-500 mt-0.5">البيانات القانونية للمؤسسين معبأة تلقائياً من وثائق السفر الرسمية.</p>
<p class="text-[11px] text-slate-500 mt-0.5">يمكنك إضافة وتعديل بيانات الأطراف وحصصهم لتحديث العقد فورياً.</p>
</div>
<!-- Inputs Sections -->
@@ -150,59 +150,62 @@
<div class="bg-slate-50 p-3 rounded-lg space-y-2.5 border border-slate-100">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">التواريخ والمعلومات الأساسية</h3>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">تاريخ تحرير العقد</label>
<input type="text" id="input-date" value="14/06/2026م" placeholder="مثال: 14/06/2026م" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
<div class="grid grid-cols-2 gap-2">
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">تاريخ تحرير العقد</label>
<input type="text" id="input-date" value="14/06/2026م" placeholder="مثال: 14/06/2026م" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">قيمة رأس المال</label>
<input type="number" id="input-capital" value="200000" placeholder="مثال: 200000" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
</div>
<div class="grid grid-cols-2 gap-2">
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">المبلغ كتابة</label>
<input type="text" id="input-capital-words" value="مائتا ألف دولار أمريكي" placeholder="مثال: مائتا ألف دولار أمريكي" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">رمز العملة (اختصار)</label>
<input type="text" id="input-currency" value="USD" placeholder="مثال: USD" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
</div>
</div>
<div class="bg-slate-50 p-3 rounded-lg space-y-2.5 border border-slate-100">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">البيانات الرسمية للمؤسسين (الطرف الأول)</h3>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">حمزه عايد طحيمر الغويريين</label>
<input type="text" id="input-id-1" value="9841029780، وجواز سفر رقم: S0212294" placeholder="الرقم الوطني وجواز السفر" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">فراس قاسم احمد مقابله</label>
<input type="text" id="input-id-2" value="9851026092، وجواز سفر رقم: S0401805" placeholder="الرقم الوطني وجواز السفر" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
</div>
<div class="bg-slate-50 p-3 rounded-lg space-y-2.5 border border-slate-100">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الهوية / الرقم الوطني (الطرف الثاني)</h3>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">رقم هوية الشريك المستثمر (محمد عمر محمد المجفت)</label>
<input type="text" id="input-id-3" value="9851001081، وجواز سفر رقم: Q765174" placeholder="أدخل رقم هوية محمد عمر محمد المجفت عند توفرها" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">إرفاق صورة جواز السفر (للملحق)</label>
<input type="file" id="input-passport-file" accept="image/*" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
</div>
<div class="bg-slate-50 p-3 rounded-lg space-y-3.5 border border-slate-100">
<!-- Founders Section -->
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
<div class="flex justify-between items-center">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">حصص الأرباح التشغيلية %</h3>
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الأول (المؤسسون - بحد أقصى 3)</h3>
<button id="btn-add-founder" onclick="addFounder()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
+ إضافة مؤسس
</button>
</div>
<div id="founders-container" class="space-y-3">
<!-- Dynamic Founders Form Fields -->
</div>
</div>
<!-- Investors Section -->
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
<div class="flex justify-between items-center">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الثاني (الشركاء المستثمرون - بحد أقصى 3)</h3>
<button id="btn-add-partner" onclick="addPartner()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
+ إضافة شريك
</button>
</div>
<div id="partners-container" class="space-y-3">
<!-- Dynamic Partners Form Fields -->
</div>
</div>
<!-- Validation & Status Indicator -->
<div class="bg-slate-50 p-3 rounded-lg space-y-2 border border-slate-100">
<div class="flex justify-between items-center">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">مجموع الحصص %</h3>
<span id="share-indicator" class="text-[10px] font-bold px-1.5 py-0.5 rounded-full bg-red-100 text-red-600">
المجموع: <span id="share-sum">0</span>%
</span>
</div>
<div class="grid grid-cols-3 gap-2">
<div>
<label class="block text-[10px] text-slate-500 mb-0.5">حمزة %</label>
<input type="number" id="input-share-1" value="25" min="0" max="100" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[10px] text-slate-500 mb-0.5">فراس %</label>
<input type="number" id="input-share-2" value="25" min="0" max="100" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[10px] text-slate-500 mb-0.5">محمد %</label>
<input type="number" id="input-share-3" value="50" min="0" max="100" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
</div>
<div id="share-validation-msg" class="text-[11px] p-2 rounded bg-red-50 text-red-700 font-medium leading-relaxed">
⚠️ مجموع الحصص يجب أن يكون 100% لتصحيح صياغة العقد.
</div>
@@ -261,29 +264,21 @@
<div class="space-y-3">
<div>
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الأول (المؤسسون – الشريك الإداري والتقني):</h3>
<ol class="list-decimal list-inside pr-3 mt-1 space-y-1">
<li>
<strong>السيد/ حمزه عايد طحيمر الغويريين</strong>، أردني الجنسية، يحمل الرقم الوطني/جواز السفر
<span id="sync-p1" class="highlight-field">9841029780، وجواز سفر رقم: S0212294</span>، ويُشار إليه بـ <strong>"الشريك المؤسس الأول"</strong>.
</li>
<li>
<strong>السيد/ فراس قاسم احمد مقابله</strong>، أردني الجنسية، يحمل الرقم الوطني/جواز السفر
<span id="sync-p2" class="highlight-field">9851026092، وجواز سفر رقم: S0401805</span>، ويُشار إليه بـ <strong>"الشريك المؤسس الثاني"</strong>.
</li>
</ol>
<div id="doc-founders-list" class="pr-3 mt-1 space-y-1.5">
<!-- Dynamic Founders List -->
</div>
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
(ويُشار إليهما مجتمعَيْن بـ <strong>"الطرف الأول"</strong> أو <strong>"الشركاء المؤسسون"</strong>).
</p>
</div>
<div>
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الثاني (الشريك المستثمر):</h3>
<div class="pr-3 mt-1">
<strong>السيد/ محمد عمر محمد المجفت</strong>، أردني الجنسية، يحمل الرقم الوطني / رقم الهوية
<span id="sync-p3" class="highlight-field">9851001081، وجواز سفر رقم: Q765174</span>، ويُشار إليه بـ <strong>"الطرف الثاني"</strong> أو <strong>"الشريك المستثمر"</strong>.
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الثاني (الشركاء المستثمرون):</h3>
<div id="doc-partners-list" class="pr-3 mt-1 space-y-1.5">
<!-- Dynamic Partners List -->
</div>
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
(ويُشار إلى الأطراف الثلاثة مجتمعين بـ <strong>"الشركاء"</strong> أو <strong>"أطراف العقد"</strong>).
(ويُشار إليهم مجتمعين بـ <strong>"الطرف الثاني"</strong> أو <strong>"الشركاء المستثمرون"</strong>).
</p>
</div>
</div>
@@ -296,10 +291,10 @@
<strong>حيث إن</strong> الطرف الأول يمتلك ويُدير منظومة برمجية ومنصة تقنية متطورة للنقل الذكي وتسهيل التنقل الحضري وتوصيل الركاب تحمل اسم <strong>"Siro"</strong> ومصممة وفق أحدث المعايير الهندسية والبرمجية العالمية؛
</p>
<p>
<strong>وحيث إن</strong> الطرف الثاني (الشريك المستثمر) يرغب في تقديم تمويل استثماري لتغطية تكاليف إطلاق التطبيق وتشغيله وتسويقه داخل السوق السورية مقابل حصة من صافي الأرباح التشغيلية؛
<strong>وحيث إن</strong> الطرف الثاني (الشركاء المستثمرون) يرغبون في تقديم تمويل استثماري لتغطية تكاليف إطلاق التطبيق وتشغيله وتسويقه داخل السوق السورية مقابل حصة من صافي الأرباح التشغيلية؛
</p>
<p>
<strong>وحيث إن</strong> إرادة الأطراف الثلاثة قد التقت على تأسيس شراكة تجارية واستثمارية مشتركة قائمة على الشفافية والالتزام المتبادل؛
<strong>وحيث إن</strong> إرادة الأطراف قد التقت على تأسيس شراكة تجارية واستثمارية مشتركة قائمة على الشفافية والالتزام المتبادل؛
</p>
<p class="font-bold border-r-2 border-slate-400 pr-2">
فقد اتفق الأطراف — بعد إقرارهم بكامل أهليتهم القانونية للتعاقد — على ما يلي:
@@ -328,7 +323,7 @@
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثالثة: رأس المال الاستثماري وآلية الدفع</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يلتزم الطرف الثاني بتقديم رأس مال استثماري إجمالي قدره <strong>مائة وثمانون ألف دولار أمريكي (180,000 USD)</strong> لتمويل عمليات إطلاق المشروع وتشغيله في سوريا.</li>
<li>يلتزم الطرف الثاني بتقديم رأس مال استثماري إجمالي قدره <strong class="sync-capital-words-span">مائتا ألف دولار أمريكي</strong> (<strong class="sync-capital-number-span">200,000</strong> <strong class="sync-currency-span">USD</strong>) لتمويل عمليات إطلاق المشروع وتشغيله في سوريا.</li>
<li>يُسدَّد رأس المال الاستثماري على دفعات مجدولة ومرنة يتم التوافق عليها ودياً بين الأطراف بما يتماشى مع خطة العمل والاحتياجات التشغيلية للمشروع.</li>
<li>تُودع جميع المبالغ والدفعات الاستثمارية في الحساب المصرفي التجاري للشركة في المملكة الأردنية الهاشمية، وذلك بعد إتمام تأسيس وتسجيل الشركة رسمياً وفتح حسابها التجاري في الأردن، لضمان وتسهيل انسياب وحركة الأموال التشغيلية والاستثمارية دخولاً وخروجاً.</li>
</ol>
@@ -345,17 +340,17 @@
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
<li>يتحمل الطرف الأول المسؤولية الكاملة والحصرية عن الجوانب التقنية والفنية والتشغيلية والإدارية للتطبيق، بما يشمل — دون حصر — التطوير البرمجي، وإدارة الخوادم، والصيانة الدورية، وإصلاح الأعطال الفنية، وإدارة فريق العمل التقني.</li>
<li>إصدار التحديثات والتطويرات المستمرة لتطبيقَيْ الراكب والسائق بما يتلاءم مع متطلبات السوق السورية ويضمن تنافسية المنتج.</li>
<li>تقديم تقريب أداء تشغيلي ومالي للطرف الثاني بشكل <strong>شهري</strong> يتضمن: عدد الرحلات المنفذة، عدد السائقين والركاب النشطين، الإيرادات الإجمالية، المصروفات التشغيلية، وصافي الأرباح.</li>
<li>تقديم تقرير أداء تشغيلي ومالي للطرف الثاني بشكل <strong>شهري</strong> يتضمن: عدد الرحلات المنفذة، عدد السائقين والركاب النشطين، الإيرادات الإجمالية، المصروفات التشغيلية، وصافي الأرباح.</li>
<li>ضمان استمرارية الخدمة وتوفّر التطبيق لمستخدميه بنسبة لا تقل عن <strong>95%</strong> من أيام التشغيل الشهري (باستثناء حالات القوة القاهرة والصيانة المجدولة).</li>
<li>الالتحاق والالتزام بالعمل الفني والتقني المستمر والدؤوب على تحديث وتطوير وصيانة نظام وتطبيقات Siro بانتظام، لضمان استقرار الخدمة وتشغيلها بكفاءة عالية وتلبية احتياجات السوق السورية.</li>
</ol>
</div>
<div>
<h5 class="font-bold text-slate-900 text-[12.5px]">ثانياً: التزامات الطرف الثاني (الشريك المستثمر)</h5>
<h5 class="font-bold text-slate-900 text-[12.5px]">ثانياً: التزامات الطرف الثاني (الشركاء المستثمرون)</h5>
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
<li>الالتزام بسداد كامل رأس المال الاستثماري المتفق عليه (180,000 دولار أمريكي) وفق جدول الدفعات المحدد في المادة الثالثة.</li>
<li>المساهمة الفعّالة بخبراته اللوجستية والعلاقاتية لتسهيل العمل التجاري داخل السوق السورية ودعم عمليات التسجيل والتوسع الميداني.</li>
<li>الالتحاق بسداد كامل رأس المال الاستثماري المتفق عليه وقدره (<span class="sync-capital-words-span">مائتا ألف دولار أمريكي</span>) وفق جدول الدفعات المحدد في المادة الثالثة.</li>
<li>المساهمة الفعّالة بخبراتهم اللوجستية والعلاقاتية لتسهيل العمل التجاري داخل السوق السورية ودعم عمليات التسجيل والتوسع الميداني.</li>
<li class="font-semibold text-slate-950 bg-slate-50 p-1.5 rounded border-r-2 border-slate-300">
التعهد بمنح الطرف الأول الصلاحية الكاملة والمستقلة في اتخاذ القرارات الفنية والهندسية والبرمجية الخاصة بالتطبيق لضمان سير العمل واستقراره التشغيلي والتقني دون إعاقة؛
</li>
@@ -381,22 +376,8 @@
<th class="border border-slate-800 p-2 w-1/4">الحصة من صافي الأرباح</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-slate-800">
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">حمزه عايد طحيمر الغويريين</td>
<td class="border border-slate-800 p-2 text-slate-600">الشريك المؤسس الأول</td>
<td class="border border-slate-800 p-2 font-bold"><span id="sync-table-share-1" class="text-slate-950 text-sm">25</span>%</td>
</tr>
<tr class="border-b border-slate-800">
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">فراس قاسم احمد مقابله</td>
<td class="border border-slate-800 p-2 text-slate-600">الشريك المؤسس الثاني</td>
<td class="border border-slate-800 p-2 font-bold"><span id="sync-table-share-2" class="text-slate-950 text-sm">25</span>%</td>
</tr>
<tr class="border-b border-slate-800">
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">محمد عمر محمد المجفت</td>
<td class="border border-slate-800 p-2 text-slate-600">الشريك المستثمر (الطرف الثاني)</td>
<td class="border border-slate-800 p-2 font-bold"><span id="sync-table-share-3" class="text-slate-950 text-sm">50</span>%</td>
</tr>
<tbody id="doc-shares-table-body">
<!-- Dynamic Share Table Rows -->
</tbody>
</table>
</div>
@@ -420,10 +401,10 @@
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السابعة: الملكية الفكرية والعلامة التجارية</h4>
<ol class="list-decimal list-inside space-y-1">
<li class="bg-amber-100/40 p-2.5 rounded border-r-4 border-legal-gold leading-relaxed font-semibold text-slate-950">
يُقرّ ويتفق جميع الأطراف صراحةً على أن الكود المصدري (Source Code) والبرمجي لتطبيق "Siro" بجميع إصداراته (الراكب، السائق، لوحة الإدارة)، وكافة التصاميم والبنية الهندسية وقواعد البيانات والخوارزميات والعلامة التجارية والاسم التجاري والشعار، هي ملكية خاصة وحصرية ومطلقة وأبدية وتؤول بالكامل وتحديداً للسيد <span class="text-slate-950 font-extrabold border-b-2 border-legal-gold/70 pb-0.5">حمزه عايد طحيمر الغويريين بمفرده وبشكل أبدّي</span> دون غيره، ولا يحق لأي طرف آخر (بما فيهم الشريك الثاني فراس مقابلة والمستثمر محمد عمر محمد المجفت) منازعته عليها أو الادعاء بأي حقوق عليها تحت أي ظرف كان.
<li id="ip-ownership-clause" class="bg-amber-100/40 p-2.5 rounded border-r-4 border-legal-gold leading-relaxed font-semibold text-slate-950">
<!-- Dynamic IP Ownership Clause -->
</li>
<li>لا يُنشئ هذا العقد ولا يمنح الطرف الثاني (الشريك المستثمر) أو الشريك الثاني (فراس مقابله) أي حق من حقوق الملكية الفكرية أو الصناعية أو الأدبية على الكود المصدري أو التطبيق أو العلامة التجارية، لا كلياً ولا جزئياً، سواء أثناء سريان العقد أو بعد انتهائه.</li>
<li>لا يُنشئ هذا العقد ولا يمنح الطرف الثاني (الشركاء المستثمرون) أو أي شريك آخر أي حق من حقوق الملكية الفكرية أو الصناعية أو الأدبية على الكود المصدري أو التطبيق أو العلامة التجارية، لا كلياً ولا جزئياً، سواء أثناء سريان العقد أو بعد انتهائه.</li>
<li>يقتصر حق الطرف الثاني على <strong>الحصص المالية من صافي الأرباح التشغيلية</strong> الناتجة عن تشغيل التطبيق في النطاق الجغرافي المحدد في هذا العقد حصراً.</li>
</ol>
</div>
@@ -434,8 +415,8 @@
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثامنة: الإدارة واتخاذ القرارات</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يتولى الطرف الأول (الشركاء المؤسسون) <strong>الإدارة التقنية والفنية والتشغيلية الكاملة</strong> للتطبيق، ويملكان حصرياً صلاحية اتخاذ جميع القرارات البرمجية والهندسية والفنية دون الرجوع للطرف الثاني.</li>
<li>تُتّخذ <strong>القرارات الاستراتيجية والتجارية الكبرى</strong> — كالتوسع الجغرافي، أو تغيير نموذج التسعير، أو الدخول في شراكات تجارية مع أطراف ثالثة — بالتشاور والإجماع بين الشركاء الثلاثة.</li>
<li>يتولى الطرف الأول (الشركاء المؤسسون) <strong>الإدارة التقنية والفنية والتشغيلية الكاملة</strong> للتطبيق، ويملكون حصرياً صلاحية اتخاذ جميع القرارات البرمجية والهندسية والفنية دون الرجوع للطرف الثاني.</li>
<li>تُتّخذ <strong>القرارات الاستراتيجية والتجارية الكبرى</strong> — كالتوسع الجغرافي، أو تغيير نموذج التسعير، أو الدخول في شراكات تجارية مع أطراف ثالثة — بالتشاور والإجماع بين الشركاء.</li>
<li>في حال عدم التوافق على قرار تجاري أو استراتيجي، يُعرض الأمر على <strong>محكّم تجاري مستقل</strong> يُتّفق عليه بين الأطراف لإصدار رأي استشاري ملزم.</li>
</ol>
</div>
@@ -445,7 +426,7 @@
<ol class="list-decimal list-inside space-y-1">
<li>يلتزم جميع الأطراف بالحفاظ التام على سرية كافة المعلومات التقنية والمالية والتجارية والتسويقية المتعلقة بالمشروع، وعدم إفشائها أو تسريبها أو إتاحتها لأي طرف ثالث بأي وسيلة كانت.</li>
<li>يسري التزام السرية أثناء فترة العقد و<strong>لمدة سنتين (2) ميلاديتين</strong> بعد انتهائه أو فسخه لأي سبب كان.</li>
<li>... يُستثنى من حكم السرية: المعلومات التي تصبح متاحة للعموم بشكل مشروع دون خطأ من الطرف المُفشي، أو المعلومات المطلوبة بموجب أمر قضائي أو تنظيمي واجب النفاذ.</li>
<li>يُستثنى من حكم السرية: المعلومات التي تصبح متاحة للعموم بشكل مشروع دون خطأ من الطرف المُفشي، أو المعلومات المطلوبة بموجب أمر قضائي أو تنظيمي واجب النفاذ.</li>
</ol>
</div>
@@ -475,7 +456,7 @@
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثانية عشرة: الانسحاب والتخارج</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يحق للطرف الثاني (الشريك المستثمر) الانسحاب من هذه الشراكة بموجب إشعار خطي مسبق بمدة لا تقل عن **مائة وعشرين (120) يوماً**.</li>
<li>يحق للطرف الثاني (الشركاء المستثمرون) الانسحاب من هذه الشراكة بموجب إشعار خطي مسبق بمدة لا تقل عن **مائة وعشرين (120) يوماً**.</li>
<li><strong>في حال رغبة الطرف الثاني في الانسحاب:</strong>
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
<li class="font-semibold text-slate-950">
@@ -485,7 +466,7 @@
</ul>
</li>
<li class="font-bold bg-slate-50 p-2.5 rounded border-r-3 border-slate-400 leading-relaxed">
<strong>ثالثاً: ضمان الاستمرارية والالتزام التشغيلي للطرف الأول وحالات العجز القاهر:</strong> نظراً لأن الجانب التشغيلي والتقني يمثّل عماد وجوهر هذا العقد، يلتزم الطرف الأول (الشريكان المؤسسان حمزه عايد وفراس مقابله) بالالتزام التام بتقديم خدماتهما التشغيلية والبرمجية طوال مدة سريان هذا العقد ولا يملك أحدهما حق الانسحاب الفردي الاختياري الذي يعطل المنصة. وفي حال طرأ ظرف طبي أو صحي أو عجز قاهر كلي يثبت رسمياً يمنع أحدهما من الاستمرار، يلتزم الطرف المتأثر بضمان نقل سلس وفوري وخالٍ من العيوب لكافة مهامه الفنية والتشغيلية ورموز لوحات التحكم وقواعد البيانات إلى الطرف الآخر لضمان بقاء التطبيق فعالاً ومحمياً، وتتم تسوية حقوقه ودياً دون المساس بكيان وتدفق المشروع واستثمار الطرف الثاني.
<strong>ثالثاً: ضمان الاستمرارية والالتزام التشغيلي للطرف الأول وحالات العجز القاهر:</strong> نظراً لأن الجانب التشغيلي والتقني يمثّل عماد وجوهر هذا العقد، يلتزم الطرف الأول بالالتزام التام بتقديم خدماته التشغيلية والبرمجية طوال مدة سريان هذا العقد ولا يملك أحد حق الانسحاب الفردي الاختياري الذي يعطل المنصة. وفي حال طرأ ظرف طبي أو صحي أو عجز قاهر كلي يثبت رسمياً يمنع أحد المؤسسين من الاستمرار، يلتزم الطرف المتأثر بضمان نقل سلس وفوري وخالٍ من العيوب لكافة مهامه الفنية والتشغيلية ورموز لوحات التحكم وقواعد البيانات إلى الطرف الآخر لضمان بقاء التطبيق فعالاً ومحمياً، وتتم تسوية حقوقه ودياً دون المساس بكيان وتدفق المشروع واستثمار الطرف الثاني.
</li>
</ol>
</div>
@@ -507,12 +488,12 @@
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الرابعة عشرة: القوة القاهرة</h4>
<p>لا يُعدّ أي طرف مُخِلاً بالتزاماته بموجب هذا العقد إذا حال دون تنفيذها ظرف من ظروف القوة القاهرة، وتشمل — دون حصر: الحروب، الكوارث الطبيعية، الأوبئة، القرارات الحكومية القاهرة، العقوبات الدولية، أو انقطاص شبكة الإنترنت الكامل في الدولة.</p>
<p>لا يُعدّ أي طرف مُخِلاً بالتزاماته بموجب هذا العقد إذا حال دون تنفيذها ظرف من ظروف القوة القاهرة، وتشمل — دون حصر: الحروب، الكوارث الطبيعية، الأوبئة، القرارات الحكومية القاهرة، العقوبات الدولية، أو انقطاع شبكة الإنترنت الكامل في الدولة.</p>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الخامسة عشرة: تعديل العقد</h4>
<p>لا يجوز تعديل أو تغيير أي بند من بنود هذا العقد إلا بموجب **ملحق تعديلي خطّي** موقَّع من جميع الأطراف الثلاثة ومؤرَّخ، ويُعتبر أي تعديل شفهي أو ضمني باطلاً ولا يُعتدّ به.</p>
<p>لا يجوز تعديل أو تغيير أي بند من بنود هذا العقد إلا بموجب **ملحق تعديلي خطّي** موقَّع من جميع الأطراف ومؤرَّخ، ويُعتبر أي تعديل شفهي أو ضمني باطلاً ولا يُعتدّ به.</p>
</div>
<div>
@@ -523,7 +504,7 @@
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
<li><strong>أولاً:</strong> التسوية الودية المباشرة بين الأطراف خلال مدة لا تتجاوز <strong>ثلاثين (30) يوماً</strong> من تاريخ الإخطار بالنزاع.</li>
<li><strong>ثانياً:</strong> اللجوء إلى <strong>التحكيم التجاري</strong> أمام محكّم أو هيئة تحكيمية مستقلة يتفق عليها الأطراف، ويكون حكم التحكيم نهائياً وملزماً.</li>
<li><strong>ثالثاً:</strong> في حال تعذّر التحكيم، يُرفع النزاع أمام <strong>المحكمة المختصة</strong> المتفق عليها بين الأطراف.</li>
<li><strong>ثالثاً:</strong> في حال تعذّر التحكيم، يُرفع النزاع أمام المحكمة المختصة.</li>
</ul>
</li>
</ol>
@@ -534,7 +515,7 @@
<ol class="list-decimal list-inside space-y-1">
<li>يمثّل هذا العقد كامل الاتفاق بين الأطراف فيما يتعلق بموضوعه، ويُلغي أي اتفاقات شفهية أو مكتوبة سابقة بين الأطراف بشأن نفس الموضوع.</li>
<li>في حال بطلان أي بند من بنود هذا العقد أو عدم قابليته للتنفيذ، تظل البنود الأخرى صحيحة ونافذة ومُلزِمة.</li>
<li>حُرّر هذا العقد من <strong>ثلاث (3) نسخ أصلية</strong> متطابقة بيد كل طرف نسخة للعمل بموجبها عند اللزوم.</li>
<li>حُرّر هذا العقد من نسخ أصلية متطابقة بيد كل طرف نسخة للعمل بموجبها عند اللزوم.</li>
</ol>
</div>
@@ -554,25 +535,8 @@
<th class="border border-slate-800 p-2 w-1/5">التاريخ</th>
</tr>
</thead>
<tbody>
<tr class="border-b border-slate-800">
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المؤسس الأول</td>
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">حمزه عايد طحيمر الغويريين</td>
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">14/06/2026م</td>
</tr>
<tr class="border-b border-slate-800">
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المؤسس الثاني</td>
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">فراس قاسم احمد مقابله</td>
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">14/06/2026م</td>
</tr>
<tr class="border-b border-slate-800">
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المستثمر (الطرف الثاني)</td>
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">محمد عمر محمد المجفت</td>
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">14/06/2026م</td>
</tr>
<tbody id="doc-signatures-table-body">
<!-- Dynamic Signatures Rows -->
</tbody>
</table>
</div>
@@ -592,20 +556,9 @@
</div>
</div>
<!-- Appendix: Passport Copy -->
<div class="page-break no-print my-6 border-t-2 border-dashed border-slate-300"></div>
<div class="mt-8 space-y-4" id="appendix-section">
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">المرفقات: صورة جواز سفر الشريك المستثمر (الطرف الثاني)</h3>
<div class="flex flex-col items-center justify-center p-6 border border-dashed border-slate-300 rounded-lg bg-slate-50/50">
<img id="passport-preview" class="max-h-[140mm] max-w-full rounded shadow-sm border border-slate-200" src="" alt="جواز سفر الشريك المستثمر" style="display: none;">
<div id="passport-placeholder" class="text-center py-10 text-slate-400 text-xs font-sans">
<svg class="w-12 h-12 mx-auto mb-2 opacity-50" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
</svg>
<span>لم يتم إرفاق صورة جواز السفر بعد. استخدم خيار التحميل في لوحة التحكم الجانبية لإرفاق الصورة وطباعتها مع العقد.</span>
</div>
</div>
<!-- Dynamic Appendix Sections -->
<div id="doc-appendices-container" class="space-y-6">
<!-- Dynamic Partner Passports -->
</div>
</div>
@@ -618,97 +571,328 @@
</div>
<!-- Script syncing dynamic elements instantly -->
<!-- Script handling dynamic actions and lists -->
<script>
// Form Controls Inputs
const inputId1 = document.getElementById('input-id-1');
const inputId2 = document.getElementById('input-id-2');
const inputId3 = document.getElementById('input-id-3');
const inputDate = document.getElementById('input-date');
const inputPassportFile = document.getElementById('input-passport-file');
// Configuration
const country = "سوريا";
const inputShare1 = document.getElementById('input-share-1');
const inputShare2 = document.getElementById('input-share-2');
const inputShare3 = document.getElementById('input-share-3');
let founders = [
{ name: '', nationality: 'أردني', id: '', share: 0 }
];
// Document target Sync spans
const syncP1 = document.getElementById('sync-p1');
const syncP2 = document.getElementById('sync-p2');
const syncP3 = document.getElementById('sync-p3');
const syncTextDate = document.getElementById('sync-text-date');
const syncContractDate = document.getElementById('sync-contract-date');
const syncTableDates = document.querySelectorAll('.sync-text-table-date');
let partners = [
{ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' }
];
const syncTableShare1 = document.getElementById('sync-table-share-1');
const syncTableShare2 = document.getElementById('sync-table-share-2');
const syncTableShare3 = document.getElementById('sync-table-share-3');
const shareSumEl = document.getElementById('share-sum');
const shareIndicator = document.getElementById('share-indicator');
const shareValidationMsg = document.getElementById('share-validation-msg');
const passportPreview = document.getElementById('passport-preview');
const passportPlaceholder = document.getElementById('passport-placeholder');
// Event Handling
inputId1.addEventListener('input', (e) => syncP1.textContent = e.target.value);
inputId2.addEventListener('input', (e) => syncP2.textContent = e.target.value);
inputId3.addEventListener('input', (e) => syncP3.textContent = e.target.value);
inputDate.addEventListener('input', (e) => {
const val = e.target.value || '14/06/2026م';
syncTextDate.textContent = val;
syncContractDate.textContent = val;
syncTableDates.forEach(el => el.textContent = val);
// Init UI inputs on DOM load
document.addEventListener("DOMContentLoaded", () => {
renderSidebar();
syncContract();
});
// Passport Image Loader
inputPassportFile.addEventListener('change', (e) => {
const file = e.target.files[0];
function renderSidebar() {
// Render Founders in Sidebar
const foundersContainer = document.getElementById('founders-container');
foundersContainer.innerHTML = '';
founders.forEach((founder, index) => {
const div = document.createElement('div');
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
div.innerHTML = `
<div class="flex justify-between items-center">
<span class="text-[10px] font-bold text-slate-400">مؤسس #${index + 1}</span>
${founders.length > 1 ? `
<button onclick="removeFounder(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
حذف
</button>
` : ''}
</div>
<div class="space-y-1.5">
<input type="text" placeholder="الاسم الكامل" value="${founder.name}" oninput="updateFounderField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<div class="grid grid-cols-2 gap-1.5">
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${founder.nationality}" oninput="updateFounderField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<input type="number" placeholder="الأرباح %" value="${founder.share || ''}" oninput="updateFounderField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
</div>
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${founder.id}" oninput="updateFounderField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
</div>
`;
foundersContainer.appendChild(div);
});
// Render Partners in Sidebar
const partnersContainer = document.getElementById('partners-container');
partnersContainer.innerHTML = '';
partners.forEach((partner, index) => {
const div = document.createElement('div');
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
div.innerHTML = `
<div class="flex justify-between items-center">
<span class="text-[10px] font-bold text-slate-400">شريك مستثمر #${index + 1}</span>
${partners.length > 1 ? `
<button onclick="removePartner(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
حذف
</button>
` : ''}
</div>
<div class="space-y-1.5">
<input type="text" placeholder="الاسم الكامل" value="${partner.name}" oninput="updatePartnerField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<div class="grid grid-cols-2 gap-1.5">
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${partner.nationality}" oninput="updatePartnerField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<input type="number" placeholder="الأرباح %" value="${partner.share || ''}" oninput="updatePartnerField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
</div>
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${partner.id}" oninput="updatePartnerField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<div class="flex flex-col">
<label class="text-[9px] text-slate-400 mb-0.5">تحميل صورة جواز السفر</label>
<input type="file" accept="image/*" onchange="uploadPartnerPassport(${index}, this)" class="w-full text-[10px] bg-slate-50 border border-slate-200 rounded p-0.5">
</div>
</div>
`;
partnersContainer.appendChild(div);
});
// Update add buttons state
document.getElementById('btn-add-founder').style.display = founders.length >= 3 ? 'none' : 'block';
document.getElementById('btn-add-partner').style.display = partners.length >= 3 ? 'none' : 'block';
}
// Founders state management
function addFounder() {
if (founders.length < 3) {
founders.push({ name: '', nationality: 'أردني', id: '', share: 0 });
renderSidebar();
syncContract();
}
}
function removeFounder(index) {
founders.splice(index, 1);
renderSidebar();
syncContract();
}
function updateFounderField(index, field, value) {
founders[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
syncContract();
}
// Partners state management
function addPartner() {
if (partners.length < 3) {
partners.push({ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' });
renderSidebar();
syncContract();
}
}
function removePartner(index) {
partners.splice(index, 1);
renderSidebar();
syncContract();
}
function updatePartnerField(index, field, value) {
partners[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
syncContract();
}
function uploadPartnerPassport(index, fileInput) {
const file = fileInput.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(evt) {
passportPreview.src = evt.target.result;
passportPreview.style.display = 'block';
passportPlaceholder.style.display = 'none';
partners[index].passportDataUrl = evt.target.result;
syncContract();
};
reader.readAsDataURL(file);
} else {
passportPreview.src = '';
passportPreview.style.display = 'none';
passportPlaceholder.style.display = 'block';
}
});
// Math verification of total percentage shares
function calculateShares() {
const s1 = parseFloat(inputShare1.value) || 0;
const s2 = parseFloat(inputShare2.value) || 0;
const s3 = parseFloat(inputShare3.value) || 0;
const total = s1 + s2 + s3;
shareSumEl.textContent = total;
syncTableShare1.textContent = s1;
syncTableShare2.textContent = s2;
syncTableShare3.textContent = s3;
if (total === 100) {
shareIndicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700";
shareValidationMsg.className = "text-[11px] p-2 rounded bg-emerald-50 text-emerald-800 border border-emerald-200 font-semibold leading-relaxed";
shareValidationMsg.innerHTML = "✅ مجموع النسب متوازن (100%). المستند آمن وجاهز تماماً للطباعة كـ PDF.";
} else {
shareIndicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-red-100 text-red-600";
shareValidationMsg.className = "text-[11px] p-2 rounded bg-red-50 text-red-700 border border-red-200 font-medium leading-relaxed";
shareValidationMsg.innerHTML = `⚠️ مجموع الحصص الحالي هو <b>${total}%</b>. يرجى تعديل الأرقام ليكون الإجمالي 100% لمطابقة شروط العقد الأساسية.`;
partners[index].passportDataUrl = '';
syncContract();
}
}
inputShare1.addEventListener('input', calculateShares);
inputShare2.addEventListener('input', calculateShares);
inputShare3.addEventListener('input', calculateShares);
// Global Sync logic
function syncContract() {
// 1. Sync Date and Capital
const inputDateVal = document.getElementById('input-date').value || '....................';
const inputCapitalVal = parseFloat(document.getElementById('input-capital').value) || 0;
const inputCapitalWordsVal = document.getElementById('input-capital-words').value || '....................';
const inputCurrencyVal = document.getElementById('input-currency').value || 'USD';
calculateShares();
document.getElementById('sync-contract-date').textContent = inputDateVal;
document.getElementById('sync-text-date').textContent = inputDateVal;
document.querySelectorAll('.sync-capital-words-span').forEach(el => el.textContent = inputCapitalWordsVal);
document.querySelectorAll('.sync-capital-number-span').forEach(el => el.textContent = inputCapitalVal.toLocaleString());
document.querySelectorAll('.sync-currency-span').forEach(el => el.textContent = inputCurrencyVal);
// 2. Render Founders list in document
const docFoundersList = document.getElementById('doc-founders-list');
docFoundersList.innerHTML = '';
founders.forEach((founder, idx) => {
const nameStr = founder.name ? `السيد/ <strong>${founder.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
const natStr = founder.nationality ? `${founder.nationality} الجنسية` : '.................... الجنسية';
const idStr = founder.id ? `الرقم الوطني/جواز السفر <span class="highlight-field">${founder.id}</span>` : 'الرقم الوطني/جواز السفر <span class="highlight-field">.......................................................</span>';
const p = document.createElement('p');
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المؤسس ${getArabicOrdinal(idx + 1)}"</strong>.`;
docFoundersList.appendChild(p);
});
// 3. Render Partners list in document
const docPartnersList = document.getElementById('doc-partners-list');
docPartnersList.innerHTML = '';
partners.forEach((partner, idx) => {
const nameStr = partner.name ? `السيد/ <strong>${partner.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
const natStr = partner.nationality ? `${partner.nationality} الجنسية` : '.................... الجنسية';
const idStr = partner.id ? `الرقم الوطني / رقم الهوية <span class="highlight-field">${partner.id}</span>` : 'الرقم الوطني / رقم الهوية <span class="highlight-field">.......................................................</span>';
const p = document.createElement('p');
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المستثمر ${getArabicOrdinal(idx + 1)}"</strong> أو <strong>"الطرف الثاني"</strong>.`;
docPartnersList.appendChild(p);
});
// 4. Render share tables and check sum
const tableBody = document.getElementById('doc-shares-table-body');
tableBody.innerHTML = '';
let totalShare = 0;
founders.forEach((founder, idx) => {
totalShare += founder.share;
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2 text-slate-600">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${founder.share}</span>%</td>
`;
tableBody.appendChild(tr);
});
partners.forEach((partner, idx) => {
totalShare += partner.share;
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2 text-slate-600">الشريك المستثمر ${getArabicOrdinal(idx + 1)} (الطرف الثاني)</td>
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${partner.share}</span>%</td>
`;
tableBody.appendChild(tr);
});
// 5. Update validation message
document.getElementById('share-sum').textContent = totalShare;
const indicator = document.getElementById('share-indicator');
const validationMsg = document.getElementById('share-validation-msg');
if (totalShare === 100) {
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700";
validationMsg.className = "text-[11px] p-2 rounded bg-emerald-50 text-emerald-800 border border-emerald-200 font-semibold leading-relaxed";
validationMsg.innerHTML = "✅ مجموع النسب متوازن (100%). المستند آمن وجاهز تماماً للطباعة كـ PDF.";
} else {
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-red-100 text-red-600";
validationMsg.className = "text-[11px] p-2 rounded bg-red-50 text-red-700 border border-red-200 font-medium leading-relaxed";
validationMsg.innerHTML = `⚠️ مجموع الحصص الحالي هو <b>${totalShare}%</b>. يرجى تعديل الأرقام ليكون الإجمالي 100% لمطابقة شروط العقد الأساسية.`;
}
// 6. Dynamic IP Ownership Clause (First founder solely owns IP, list exclusions)
const firstFounderName = founders[0] && founders[0].name ? founders[0].name : '.......................................................';
let exclusions = [];
founders.forEach((f, idx) => {
if (idx > 0 && f.name) exclusions.push(`الشريك المؤسس ${f.name}`);
});
partners.forEach(p => {
if (p.name) exclusions.push(`المستثمر ${p.name}`);
});
const exclusionsStr = exclusions.length > 0 ? ` (بما فيهم ${exclusions.join(' و ')})` : '';
const ipClause = document.getElementById('ip-ownership-clause');
ipClause.innerHTML = `
يُقرّ ويتفق جميع الأطراف صراحةً على أن الكود المصدري (Source Code) والبرمجي لتطبيق "Siro" بجميع إصداراته (الراكب، السائق، لوحة الإدارة)، وكافة التصاميم والبنية الهندسية وقواعد البيانات والخوارزميات والعلامة التجارية والاسم التجاري والشعار، هي ملكية خاصة وحصرية ومطلقة وأبدية وتؤول بالكامل وتحديداً للسيد <span class="text-slate-950 font-extrabold border-b-2 border-legal-gold/70 pb-0.5">${firstFounderName} بمفرده وبشكل أبدّي</span> دون غيره، ولا يحق لأي طرف آخر${exclusionsStr} منازعته عليها أو الادعاء بأي حقوق عليها تحت أي ظرف كان.
`;
// 7. Render Signatures
const sigTableBody = document.getElementById('doc-signatures-table-body');
sigTableBody.innerHTML = '';
founders.forEach((founder, idx) => {
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
`;
sigTableBody.appendChild(tr);
});
partners.forEach((partner, idx) => {
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المستثمر ${getArabicOrdinal(idx + 1)}</td>
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
`;
sigTableBody.appendChild(tr);
});
// 8. Render Appendices for Passports
const appendicesContainer = document.getElementById('doc-appendices-container');
appendicesContainer.innerHTML = '';
partners.forEach((partner, idx) => {
const pName = partner.name || `الشريك المستثمر ${getArabicOrdinal(idx + 1)}`;
const div = document.createElement('div');
div.className = "page-break no-print my-6 border-t-2 border-dashed border-slate-300 pt-6";
div.innerHTML = `
<div class="space-y-4">
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">المرفقات: صورة جواز سفر الشريك المستثمر (${pName})</h3>
<div class="flex flex-col items-center justify-center p-6 border border-dashed border-slate-300 rounded-lg bg-slate-50/50">
${partner.passportDataUrl ? `
<img class="max-h-[140mm] max-w-full rounded shadow-sm border border-slate-200" src="${partner.passportDataUrl}" alt="جواز سفر ${pName}">
` : `
<div class="text-center py-10 text-slate-400 text-xs font-sans">
<svg class="w-12 h-12 mx-auto mb-2 opacity-50" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
</svg>
<span>لم يتم إرفاق صورة جواز السفر للشريك (${pName}) بعد. استخدم خيار التحميل في لوحة التحكم لإرفاق الصورة.</span>
</div>
`}
</div>
</div>
`;
appendicesContainer.appendChild(div);
});
}
// Helper to get Arabic Ordinals
function getArabicOrdinal(num) {
const ordinals = ["", "الأول", "الثاني", "الثالث", "الرابع", "الخامس"];
return ordinals[num] || `${num}`;
}
// Sync inputs from date & capital changes
document.getElementById('input-date').addEventListener('input', syncContract);
document.getElementById('input-capital').addEventListener('input', (e) => {
const num = parseInt(e.target.value) || 0;
// Auto mapping simple numbers to words
const mapper = {
100000: "مائة ألف",
150000: "مائة وخمسون ألف",
180000: "مائة وثمانون ألف",
200000: "مائتا ألف",
250000: "مائتان وخمسون ألف",
300000: "ثلاثمائة ألف",
400000: "أربعمائة ألف",
500000: "خمسمائة ألف"
};
const currencyLabel = document.getElementById('input-currency').value === 'USD' ? 'دولار أمريكي' : '';
if (mapper[num]) {
document.getElementById('input-capital-words').value = mapper[num] + (currencyLabel ? ' ' + currencyLabel : '');
}
syncContract();
});
document.getElementById('input-capital-words').addEventListener('input', syncContract);
document.getElementById('input-currency').addEventListener('input', syncContract);
</script>
</body>
</html>
+898
View File
@@ -0,0 +1,898 @@
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>مولد ومطبع عقد شراكة Siro القانوني المطور - مصر</title>
<!-- Google Fonts: Amiri & Inter for highly clean and modern tech-corporate document rendering -->
<link href="https://fonts.googleapis.com/css2?family=Amiri:ital,wght@0,400;0,700;1,400&family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
<!-- Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
fontFamily: {
sans: ['Inter', 'Amiri', 'sans-serif'],
serif: ['Inter', 'Amiri', 'serif'],
},
colors: {
legal: {
800: '#1e293b',
900: '#0f172a',
gold: '#c5a880',
goldHover: '#b3956d'
}
}
}
}
}
</script>
<style>
body {
background-color: #f8fafc;
}
/* Mockup standard sheet configuration */
.paper-sheet {
background: #ffffff;
box-shadow: 0 4px 20px -2px rgba(0, 0, 0, 0.05), 0 2px 10px -4px rgba(0, 0, 0, 0.05);
position: relative;
transition: all 0.3s ease;
}
/* Dynamic interaction fields highlighting */
.highlight-field {
border-bottom: 1.5px dashed #c5a880;
color: #0f172a;
font-weight: 700;
padding: 0 4px;
transition: all 0.2s ease;
background-color: rgba(197, 168, 128, 0.06);
border-radius: 2px;
}
.highlight-field:empty::before {
content: ".......................................................";
color: #94a3b8;
font-weight: 300;
font-family: sans-serif;
}
/* Advanced Print configuration targeting exactly 3 compact pages */
@media print {
body {
background: #ffffff !important;
color: #000000 !important;
padding: 0 !important;
margin: 0 !important;
}
.no-print {
display: none !important;
}
.print-page {
border: none !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
width: 100% !important;
max-width: 100% !important;
height: auto !important;
background: transparent !important;
}
.contract-container {
border: none !important;
padding: 10mm 10mm !important;
}
.page-break {
page-break-after: always;
break-after: page;
margin-top: 20px;
height: 0;
}
@page {
size: A4;
margin: 12mm 12mm;
}
.table-header-print {
background-color: #f8fafc !important;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
}
</style>
</head>
<body class="font-sans text-slate-800 antialiased min-h-screen flex flex-col">
<!-- Top Navbar (hidden on print) -->
<header class="bg-legal-900 text-white py-3.5 px-6 shadow-md border-b border-legal-gold/20 no-print sticky top-0 z-50">
<div class="max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center gap-4">
<div class="flex items-center gap-3">
<div class="bg-gradient-to-tr from-legal-gold to-amber-500 p-2 rounded-xl">
<svg class="w-6 h-6 text-legal-900" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7"></path>
</svg>
</div>
<div>
<h1 class="text-lg font-bold tracking-wide flex items-center gap-2"><span class="text-legal-gold font-extrabold">Siro</span></h1>
<p class="text-[10px] text-slate-400">توليد وطباعة العقد القانوني لجمهورية مصر العربية</p>
</div>
</div>
<div class="flex items-center gap-3">
<button onclick="window.print();" class="bg-legal-gold hover:bg-legal-goldHover text-legal-900 px-5 py-2 rounded-lg font-bold shadow-lg shadow-legal-gold/20 flex items-center gap-2 transition-all duration-200 transform active:scale-95 text-sm">
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"></path>
</svg>
طباعة العقد (حفظ PDF)
</button>
</div>
</div>
</header>
<!-- Main Content Layout -->
<div class="flex-1 max-w-7xl w-full mx-auto p-4 md:p-6 grid grid-cols-1 lg:grid-cols-12 gap-6 items-start">
<!-- Controls Sidebar Panel (hidden on print) -->
<aside class="lg:col-span-4 bg-white p-5 rounded-xl shadow-sm border border-slate-200 no-print space-y-5">
<div class="border-b border-slate-100 pb-3">
<h2 class="text-base font-bold text-legal-900 flex items-center gap-2">
<svg class="w-4 h-4 text-legal-gold" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2.5 2.5 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
</svg>
لوحة التحكم الذكية بالعقد
</h2>
<p class="text-[11px] text-slate-500 mt-0.5">يمكنك إضافة وتعديل بيانات الأطراف وحصصهم لتحديث العقد فورياً.</p>
</div>
<!-- Inputs Sections -->
<div class="space-y-4">
<div class="bg-slate-50 p-3 rounded-lg space-y-2.5 border border-slate-100">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">التواريخ والمعلومات الأساسية</h3>
<div class="grid grid-cols-2 gap-2">
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">تاريخ تحرير العقد</label>
<input type="text" id="input-date" value="14/06/2026م" placeholder="مثال: 14/06/2026م" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">قيمة رأس المال</label>
<input type="number" id="input-capital" value="300000" placeholder="مثال: 300000" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
</div>
<div class="grid grid-cols-2 gap-2">
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">المبلغ كتابة</label>
<input type="text" id="input-capital-words" value="ثلاثمائة ألف دولار أمريكي" placeholder="مثال: ثلاثمائة ألف دولار أمريكي" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
<div>
<label class="block text-[11px] text-slate-600 font-semibold mb-1">رمز العملة (اختصار)</label>
<input type="text" id="input-currency" value="USD" placeholder="مثال: USD" class="w-full text-xs px-2.5 py-1.5 bg-white border border-slate-200 rounded focus:outline-none focus:border-legal-gold">
</div>
</div>
</div>
<!-- Founders Section -->
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
<div class="flex justify-between items-center">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الأول (المؤسسون - بحد أقصى 3)</h3>
<button id="btn-add-founder" onclick="addFounder()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
+ إضافة مؤسس
</button>
</div>
<div id="founders-container" class="space-y-3">
<!-- Dynamic Founders Form Fields -->
</div>
</div>
<!-- Investors Section -->
<div class="bg-slate-50 p-3 rounded-lg border border-slate-100 space-y-3">
<div class="flex justify-between items-center">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">الطرف الثاني (الشركاء المستثمرون - بحد أقصى 3)</h3>
<button id="btn-add-partner" onclick="addPartner()" class="text-[11px] font-bold text-legal-gold hover:text-legal-goldHover flex items-center gap-0.5">
+ إضافة شريك
</button>
</div>
<div id="partners-container" class="space-y-3">
<!-- Dynamic Partners Form Fields -->
</div>
</div>
<!-- Validation & Status Indicator -->
<div class="bg-slate-50 p-3 rounded-lg space-y-2 border border-slate-100">
<div class="flex justify-between items-center">
<h3 class="text-[10px] font-bold text-slate-400 uppercase tracking-wider">مجموع الحصص %</h3>
<span id="share-indicator" class="text-[10px] font-bold px-1.5 py-0.5 rounded-full bg-red-100 text-red-600">
المجموع: <span id="share-sum">0</span>%
</span>
</div>
<div id="share-validation-msg" class="text-[11px] p-2 rounded bg-red-50 text-red-700 font-medium leading-relaxed">
⚠️ مجموع الحصص يجب أن يكون 100% لتصحيح صياغة العقد.
</div>
</div>
</div>
<!-- Guidelines / Best Practices for print -->
<div class="p-3.5 rounded-lg border border-legal-gold/20 bg-legal-900 text-white space-y-1.5">
<h4 class="text-xs font-bold text-legal-gold flex items-center gap-1">
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
دليل حفظ مستند PDF مثالي:
</h4>
<ul class="text-[11px] text-slate-300 space-y-1 list-disc list-inside">
<li>تأكد من تفعيل خيار <b class="text-legal-gold">رسومات الخلفية</b> في خيارات الطباعة بالمتصفح.</li>
<li>ألغِ خيار <b class="text-legal-gold">الرؤوس والتذييلات</b> لإلغاء روابط المواقع.</li>
<li>استخدم خيار "حفظ بتنسيق PDF" لإنتاج ملف جاهز فوري.</li>
</ul>
</div>
</aside>
<!-- Document Sheet Area -->
<main class="lg:col-span-8 flex flex-col items-center">
<div class="w-full max-w-[210mm] paper-sheet print-page rounded-xl border border-slate-200 overflow-hidden mb-6 transition-all duration-300">
<!-- Inner formal border (Configured to use clean modern font-serif mapping to Inter) -->
<div class="contract-container p-6 md:p-10 lg:p-12 text-slate-900 font-serif text-justify text-[13.5px] leading-relaxed" id="contract-document">
<!-- Official Header & Siro Logo -->
<div class="flex flex-col items-center text-center border-b-2 border-slate-800 pb-4 mb-6">
<!-- Official Premium Siro Logo -->
<div class="mb-3">
<img src="logo.png" class="h-14 mx-auto" alt="Siro Logo">
</div>
<h1 class="text-base md:text-lg font-bold text-slate-950 font-sans tracking-wide">عقد شراكة واستثمار تجاري لتشغيل تطبيق "Siro"</h1>
<p class="text-sm font-bold text-slate-800 font-sans">في جمهورية مصر العربية</p>
<div class="w-full flex justify-between items-center text-[10px] font-sans text-slate-500 mt-2.5 px-2">
<span><strong>الرقم المرجعي:</strong> SIRO-INV-EG-2026-001</span>
<span><strong>تاريخ التحرير:</strong> <span id="sync-contract-date" class="font-bold text-slate-900">14/06/2026م</span></span>
</div>
</div>
<!-- Intro Block -->
<div class="space-y-5">
<p class="leading-normal">
تم تحرير هذا العقد وتوثيقه في اليوم الموافق
<span id="sync-text-date" class="highlight-field">14/06/2026م</span> ميلادي، بين كلٍّ من:
</p>
<!-- Parties Info -->
<div class="space-y-3">
<div>
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الأول (المؤسسون – الشريك الإداري والتقني):</h3>
<div id="doc-founders-list" class="pr-3 mt-1 space-y-1.5">
<!-- Dynamic Founders List -->
</div>
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
(ويُشار إليهما مجتمعَيْن بـ <strong>"الطرف الأول"</strong> أو <strong>"الشركاء المؤسسون"</strong>).
</p>
</div>
<div>
<h3 class="font-sans font-bold text-slate-950 border-r-3 border-legal-gold pr-2 text-[13px]">الطرف الثاني (الشركاء المستثمرون):</h3>
<div id="doc-partners-list" class="pr-3 mt-1 space-y-1.5">
<!-- Dynamic Partners List -->
</div>
<p class="text-[11px] text-slate-500 italic pr-3 mt-0.5 font-sans">
(ويُشار إليهم مجتمعين بـ <strong>"الطرف الثاني"</strong> أو <strong>"الشركاء المستثمرون"</strong>).
</p>
</div>
</div>
<!-- Preamble -->
<div>
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] mb-1">التمهيد</h3>
<div class="space-y-2">
<p>
<strong>حيث إن</strong> الطرف الأول يمتلك ويُدير منظومة برمجية ومنصة تقنية متطورة للنقل الذكي وتسهيل التنقل الحضري وتوصيل الركاب تحمل اسم <strong>"Siro"</strong> ومصممة وفق أحدث المعايير الهندسية والبرمجية العالمية؛
</p>
<p>
<strong>وحيث إن</strong> الطرف الثاني (الشركاء المستثمرون) يرغبون في تقديم تمويل استثماري لتغطية تكاليف إطلاق التطبيق وتشغيله وتسويقه داخل السوق المصرية مقابل حصة من صافي الأرباح التشغيلية؛
</p>
<p>
<strong>وحيث إن</strong> إرادة الأطراف قد التقت على تأسيس شراكة تجارية واستثمارية مشتركة قائمة على الشفافية والالتزام المتبادل؛
</p>
<p class="font-bold border-r-2 border-slate-400 pr-2">
فقد اتفق الأطراف — بعد إقرارهم بكامل أهليتهم القانونية للتعاقد — على ما يلي:
</p>
</div>
</div>
<!-- Articles and clauses flow -->
<div class="space-y-4 pt-2">
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الأولى: نطاق التمهيد</h4>
<p>يُعدّ التمهيد المذكور أعلاه جزءاً لا يتجزأ من هذا العقد، ويُقرأ ويُفسَّر ضمن سياقه.</p>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثانية: موضوع العقد والنطاق الجغرافي</h4>
<ol class="list-decimal list-inside space-y-1">
<li>موضوع هذا العقد هو تنظيم العلاقة التجارية والاستثمارية بين الأطراف لتشغيل واستغلال تطبيق <strong>"Siro"</strong> تجارياً وخدمياً وتسويقياً.</li>
<li>يقتصر النطاق الجغرافي لهذا العقد حصراً على أراضي <strong>جمهورية مصر العربية</strong>. ولا يشمل هذا العقد أي سوق أو دولة أخرى يعمل فيها التطبيق أو قد يتوسع إليها مستقبلاً.</li>
<li>لا يجوز توسيع النطاق الجغرافي لهذا العقد إلا بموجب ملحق تعديلي خطّي موقّع من جميع الأطراف.</li>
<li><strong>حق الأولوية في التوسع الدولي:</strong> في حال رغبة الطرف الأول في توسيع النطاق الجغرافي للمشروع وتشغيل تطبيق Siro في أي دولة أو سوق خارج جمهورية مصر العربية، يلتزم الطرف الأول بعرض هذه الفرصة الاستثمارية الجديدة على الطرف الثاني خطياً قبل عرضها على أي طرف ثالث. ويكون للطرف الثاني حق الأولوية (Right of First Refusal) في الاستثمار والمشاركة في السوق الجديد بذات الشروط أو بشروط يتم التوافق عليها، على أن يبدي الطرف الثاني رغبته خطياً خلال مدة لا تتجاوز <strong>أسبوعاً واحداً (7 أيام)</strong> من تاريخ استلام العرض المكتوب، وفي حال انقضاء هذه المدة دون رد أو في حال اعتذاره خطياً، يحق للطرف الأول التعاقد مع مستثمرين آخرين بحرية تامة ودون أي التزام تجاه الطرف الثاني.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثالثة: رأس المال الاستثماري وآلية الدفع</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يلتزم الطرف الثاني بتقديم رأس مال استثماري إجمالي قدره <strong class="sync-capital-words-span">ثلاثمائة ألف دولار أمريكي</strong> (<strong class="sync-capital-number-span">300,000</strong> <strong class="sync-currency-span">USD</strong>) لتمويل عمليات إطلاق المشروع وتشغيله في مصر.</li>
<li>يُسدَّد رأس المال الاستثماري على دفعات مجدولة ومرنة يتم التوافق عليها ودياً بين الأطراف بما يتماشى مع خطة العمل والاحتياجات التشغيلية للمشروع.</li>
<li>تُودع جميع المبالغ والدفعات الاستثمارية في الحساب المصرفي التجاري للشركة في المملكة الأردنية الهاشمية، وذلك بعد إتمام تأسيس وتسجيل الشركة رسمياً وفتح حسابها التجاري في الأردن، لضمان وتسهيل انسياب وحركة الأموال التشغيلية والاستثمارية دخولاً وخروجاً.</li>
</ol>
</div>
<!-- Page Break for elegant Print Layout -->
<div class="page-break no-print my-4 border-t-2 border-dashed border-slate-200"></div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الرابعة: التزامات الأطراف</h4>
<div class="space-y-3">
<div>
<h5 class="font-bold text-slate-900 text-[12.5px]">أولاً: التزامات الطرف الأول (الشركاء المؤسسون)</h5>
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
<li>يتحمل الطرف الأول المسؤولية الكاملة والحصرية عن الجوانب التقنية والفنية والتشغيلية والإدارية للتطبيق، بما يشمل — دون حصر — التطوير البرمجي، وإدارة الخوادم، والصيانة الدورية، وإصلاح الأعطال الفنية، وإدارة فريق العمل التقني.</li>
<li>إصدار التحديثات والتطويرات المستمرة لتطبيقَيْ الراكب والسائق بما يتلاءم مع متطلبات السوق المصرية ويضمن تنافسية المنتج.</li>
<li>تقديم تقرير أداء تشغيلي ومالي للطرف الثاني بشكل <strong>شهري</strong> يتضمن: عدد الرحلات المنفذة، عدد السائقين والركاب النشطين، الإيرادات الإجمالية، المصروفات التشغيلية، وصافي الأرباح.</li>
<li>ضمان استمرارية الخدمة وتوفّر التطبيق لمستخدميه بنسبة لا تقل عن <strong>95%</strong> من أيام التشغيل الشهري (باستثناء حالات القوة القاهرة والصيانة المجدولة).</li>
<li>الالتحاق والالتزام بالعمل الفني والتقني المستمر والدؤوب على تحديث وتطوير وصيانة نظام وتطبيقات Siro بانتظام، لضمان استقرار الخدمة وتشغيلها بكفاءة عالية وتلبية احتياجات السوق المصرية.</li>
</ol>
</div>
<div>
<h5 class="font-bold text-slate-900 text-[12.5px]">ثانياً: التزامات الطرف الثاني (الشركاء المستثمرون)</h5>
<ol class="list-decimal list-inside space-y-1 pr-3 mt-1">
<li>الالتحاق بسداد كامل رأس المال الاستثماري المتفق عليه وقدره (<span class="sync-capital-words-span">ثلاثمائة ألف دولار أمريكي</span>) وفق جدول الدفعات المحدد في المادة الثالثة.</li>
<li>المساهمة الفعّالة بخبراتهم اللوجستية والعلاقاتية لتسهيل العمل التجاري داخل السوق المصرية ودعم عمليات التسجيل والتوسع الميداني.</li>
<li class="font-semibold text-slate-950 bg-slate-50 p-1.5 rounded border-r-2 border-slate-300">
التعهد بمنح الطرف الأول الصلاحية الكاملة والمستقلة في اتخاذ القرارات الفنية والهندسية والبرمجية الخاصة بالتطبيق لضمان سير العمل واستقراره التشغيلي والتقني دون إعاقة؛
</li>
<li>التعاون الكامل مع الطرف الأول في توفير أي متطلبات إدارية أو تنظيمية أو حكومية تلزم لتشغيل المشروع داخل مصر.</li>
</ol>
</div>
</div>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الخامسة: نسب الشراكة وتوزيع الأرباح</h4>
<ol class="list-decimal list-inside space-y-2">
<li>يتم توزيع <strong>صافي الأرباح التشغيلية</strong> الناتجة عن تشغيل التطبيق في مصر — بعد خصم كافة المصاريف التشغيلية والإدارية، وتكاليف الخوادم والبنية التحتية، والضرائب والرسوم الحكومية، وأجور فريق الدعم الفني والميداني — وفق النسب التالية:</li>
</ol>
<!-- Table Block Inside Paper -->
<div class="my-3 overflow-x-auto">
<table class="w-full border-collapse border border-slate-800 text-center text-xs font-sans">
<thead>
<tr class="table-header-print bg-slate-50 text-slate-900 font-bold border-b border-slate-800">
<th class="border border-slate-800 p-2 text-right pr-4">الشريك</th>
<th class="border border-slate-800 p-2">الصفة التعاقدية</th>
<th class="border border-slate-800 p-2 w-1/4">الحصة من صافي الأرباح</th>
</tr>
</thead>
<tbody id="doc-shares-table-body">
<!-- Dynamic Share Table Rows -->
</tbody>
</table>
</div>
<ol class="list-decimal list-inside space-y-1" start="2">
<li>تُوزَّع الأرباح بصفة <strong>ربع سنوية</strong> (كل ثلاثة أشهر ميلادية) بناءً على القوائم المالية المعتمدة والمدقّقة لعمليات التطبيق في مصر.</li>
<li>لا تُوزَّع الأرباح إلا بعد تخصيص <strong>احتياطي تشغيلي</strong> بنسبة لا تقل عن <strong>10%</strong> من صافي الأرباح لتغطية الطوارئ والنفقات المستقبلية، ويتم الاتفاق بين الشركاء على آلية التصرف في هذا الاحتياطي.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السادسة: فسخ العقد وتصفية الشراكة</h4>
<ol class="list-decimal list-inside space-y-1">
<li class="font-semibold text-slate-950">
في حال فسخ هذا العقد أو تصفية المشروع لأي سبب كان قبل استرداد الطرف الثاني لكامل رأس ماله الاستثماري، يكون للطرف الثاني الأولوية المطلقة في الحصول على المبالغ المتبقية والغير مصروفة من رأس ماله الفعلي (بعد خصم كافة النفقات التشغيلية والرواتب والمصاريف الإعلانية المنقضية والمثبتة محاسبياً) من أي عوائد تشغيلية متراكمة أو أصول ملموسة قابلة للتسييل مرتبطة بنشاط المشروع في مصر حصراً، دون أن يحق له مطالبة الشركاء شخصياً بأي مبالغ تم صرفها وتسييرها في النفقات المذكورة.
</li>
<li>يتم تصفية جميع الحقوق والالتزامات المالية العالقة بين الأطراف عند الفسخ أو التصفية بما يتوافق مع القواعد القانونية والتجارية السائدة، وبما يضمن عدم الإضرار بأي طرف.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السابعة: الملكية الفكرية والعلامة التجارية</h4>
<ol class="list-decimal list-inside space-y-1">
<li id="ip-ownership-clause" class="bg-amber-100/40 p-2.5 rounded border-r-4 border-legal-gold leading-relaxed font-semibold text-slate-950">
<!-- Dynamic IP Ownership Clause -->
</li>
<li>لا يُنشئ هذا العقد ولا يمنح الطرف الثاني (الشركاء المستثمرون) أو أي شريك آخر أي حق من حقوق الملكية الفكرية أو الصناعية أو الأدبية على الكود المصدري أو التطبيق أو العلامة التجارية، لا كلياً ولا جزئياً، سواء أثناء سريان العقد أو بعد انتهائه.</li>
<li>يقتصر حق الطرف الثاني على <strong>الحصص المالية من صافي الأرباح التشغيلية</strong> الناتجة عن تشغيل التطبيق في النطاق الجغرافي المحدد في هذا العقد حصراً.</li>
</ol>
</div>
<!-- Page Break for elegant Print Layout -->
<div class="page-break no-print my-4 border-t-2 border-dashed border-slate-200"></div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثامنة: الإدارة واتخاذ القرارات</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يتولى الطرف الأول (الشركاء المؤسسون) <strong>الإدارة التقنية والفنية والتشغيلية الكاملة</strong> للتطبيق، ويملكان حصرياً صلاحية اتخاذ جميع القرارات البرمجية والهندسية والفنية دون الرجوع للطرف الثاني.</li>
<li>تُتّخذ <strong>القرارات الاستراتيجية والتجارية الكبرى</strong> — كالتوسع الجغرافي، أو تغيير نموذج التسعير، أو الدخول في شراكات تجارية مع أطراف ثالثة — بالتشاور والإجماع بين الشركاء.</li>
<li>في حال عدم التوافق على قرار تجاري أو استراتيجي، يُعرض الأمر على <strong>محكّم تجاري مستقل</strong> يُتّفق عليه بين الأطراف لإصدار رأي استشاري ملزم.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة التاسعة: السرية وعدم الإفشاء</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يلتزم جميع الأطراف بالحفاظ التام على سرية كافة المعلومات التقنية والمالية والتجارية والتسويقية المتعلقة بالمشروع، وعدم إفشائها أو تسريبها أو إتاحتها لأي طرف ثالث بأي وسيلة كانت.</li>
<li>يسري التزام السرية أثناء فترة العقد و<strong>لمدة سنتين (2) ميلاديتين</strong> بعد انتهائه أو فسخه لأي سبب كان.</li>
<li>يُستثنى من حكم السرية: المعلومات التي تصبح متاحة للعموم بشكل مشروع دون خطأ من الطرف المُفشي، أو المعلومات المطلوبة بموجب أمر قضائي أو تنظيمي واجب النفاذ.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة العاشرة: عدم المنافسة — المشروطة بنشاط الشركة</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يتعهد جميع الشركاء — طوال فترة سريان هذا العقد وما دام المشروع نشطاً وفعالاً تشغيلياً وتجارياً — بعدم القيام بأي مما يلي:
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
<li>تأسيس أو المشاركة أو الاستثمار في أي شركة أو تطبيق أو منصة تقدم خدمات النقل الذكي أو توصيل الركاب داخل جمهورية مصر العربية.</li>
<li>تقديم خدمات استشارية تقنية أو تجارية لأي منافس مباشر لتطبيق "Siro" في السوق المصرية.</li>
</ul>
</li>
<li><strong>يُشترط لسريان بند عدم المنافسة</strong> أن يكون مشروع تطبيق "Siro" في مصر <strong>نشطاً ومستمراً في تقديم خدماته</strong> فعلياً وبشكل دوري يمكن إثباته.</li>
<li>في حال توقّف المشروع عن العمل التشغيلي في مصر لمدة تتجاوز <strong>تسعين (90) يوماً متتالياً</strong> — لأي سبب كان باستثناء القوة القاهرة — يُعتبر بند عدم المنافسة **ملغى ولاغياً تلقائياً** بحق جميع الأطراف، ويحق لأي شريك ممارسة أي نشاط تجاري مشابه بحرية تامة ودون قيد أو شرط.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الحادية عشرة: مدة العقد وتجديده</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يسري هذا العقد اعتباراً من تاريخ توقيعه ويمتد لمدة **سنتين (2) ميلاديتين** قابلة للتجديد لفترات مماثلة بموافقة الأطراف.</li>
<li>يُجدَّد العقد تلقائياً لفترات مماثلة ما لم يُخطر أحد الأطراف الآخرين خطياً برغبته في عدم التجديد قبل **تسعين (90) يوماً** من تاريخ انتهاء المدة الساري.</li>
<li>في حال عدم التجديد, تُصفّى الحقوق والالتزامات المالية القائمة بين الأطراف وفق أحكام هذا العقد.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثانية عشرة: الانسحاب والتخارج</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يحق للطرف الثاني (الشركاء المستثمرون) الانسحاب من هذه الشراكة بموجب إشعار خطي مسبق بمدة لا تقل عن **مائة وعشرين (120) يوماً**.</li>
<li><strong>في حال رغبة الطرف الثاني في الانسحاب:</strong>
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
<li class="font-semibold text-slate-950">
يحق له المطالبة بالجزء غير المسترد (المتبقي والغير مصروف محاسبياً) من رأس ماله الاستثماري الفعلي فقط من العوائد التشغيلية المتراكمة، دون أن يحق له بأي حال من الأحوال المطالبة أو استرجاع أي مبالغ تم صرفها كرواتب، أو نفقات تشغيلية، أو إعلانية، أو أجور للمنصة، وذلك وفق خطة سداد مجدولة يُتّفق عليها بين الأطراف لا تتجاوز **اثني عشر (12) شهراً** من تاريخ الانسحاب الفعلي.
</li>
<li>تنقضي حصته في الأرباح المستقبلية اعتباراً من تاريخ نفاذ الانسحاب.</li>
</ul>
</li>
<li class="font-bold bg-slate-50 p-2.5 rounded border-r-3 border-slate-400 leading-relaxed">
<strong>ثالثاً: ضمان الاستمرارية والالتزام التشغيلي للطرف الأول وحالات العجز القاهر:</strong> نظراً لأن الجانب التشغيلي والتقني يمثّل عماد وجوهر هذا العقد، يلتزم الطرف الأول بالالتزام التام بتقديم خدماته التشغيلية والبرمجية طوال مدة سريان هذا العقد ولا يملك أحد حق الانسحاب الفردي الاختياري الذي يعطل المنصة. وفي حال طرأ ظرف طبي أو صحي أو عجز قاهر كلي يثبت رسمياً يمنع أحد المؤسسين من الاستمرار، يلتزم الطرف المتأثر بضمان نقل سلس وفوري وخالٍ من العيوب لكافة مهامه الفنية والتشغيلية ورموز لوحات التحكم وقواعد البيانات إلى الطرف الآخر لضمان بقاء التطبيق فعالاً ومحمياً، وتتم تسوية حقوقه ودياً دون المساس بكيان وتدفق المشروع واستثمار الطرف الثاني.
</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الثالثة عشرة: الضمانات والمسؤولية وعقد بذل العناية</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يُقرّ الطرف الأول بأن التطبيق خالٍ من أي رهن أو حجز أو حق للغير يمنع تشغيله واستثماره تجارياً وفق هذا العقد.</li>
<li>يُقرّ الطرف الثاني بأن مصادر التمويل المستخدمة في الاستثمار مشروعة وقانونية وغير مرتبطة بأي نشاط محظور قانوناً.</li>
<li class="bg-amber-50/50 p-2.5 rounded border-r-3 border-legal-gold">
<strong>بند بذل العناية وحماية المسؤولية من الخسائر (سوء الطالع):</strong> يُقر ويوافق الشركاء صراحةً على أن طبيعة التزام الطرف الأول تجاه تشغيل وتطوير التطبيق هي **التزام ببذل عناية مهنية فائقة ودؤوبة وليس التزاماً بتحقيق نتيجة أو ضمان ربح**. يلتزم الطرف الأول ببذل أقصى جهوده الفنية والتقنية والإدارية بناءً على خطة العمل والتجارب التشغيلية السابقة المدروسة، دون أي تعهد أو ضمانة صريحة أو ضمنية بتحقيق عوائد مالية أو أرباح محددة، أو تجنيب المشروع الخسائر التشغيلية.
</li>
<li class="bg-amber-50/50 p-2.5 rounded border-r-3 border-legal-gold">
بناءً على البند السابق، لا يتحمل الطرف الأول أي مسؤولية شخصية أو تضامنية عن الخسائر التشغيلية أو التجارية أو المالية الطبيعية التي قد تصيب المشروع في السوق المصرية نتيجة لظروف السوق، أو المنافسة التجارية، أو تقلبات البيئة الاستثمارية والظروف العامة (سوء الطالع)، وتُغطى هذه الخسائر — إن وُجدت — من رأس مال المشروع أو عوائده التشغيلية، شريطة خلو تصرفات الطرف الأول من أي غش، أو تقصير متعمد، أو إهمال جسيم يثبت قضائياً بحق الطرف الأول.
</li>
<li>يلتزم الطرف الأول ببذل العناية المهنية اللازمة لحماية بيانات المستخدمين والسائقين، والامتثال لأفضل ممارسات أمن المعلومات.</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الرابعة عشرة: القوة القاهرة</h4>
<p>لا يُعدّ أي طرف مُخِلاً بالتزاماته بموجب هذا العقد إذا حال دون تنفيذها ظرف من ظروف القوة القاهرة، وتشمل — دون حصر: الحروب، الكوارث الطبيعية، الأوبئة، القرارات الحكومية القاهرة، العقوبات الدولية، أو انقطاع شبكة الإنترنت الكامل في الدولة.</p>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة الخامسة عشرة: تعديل العقد</h4>
<p>لا يجوز تعديل أو تغيير أي بند من بنود هذا العقد إلا بموجب **ملحق تعديلي خطّي** موقَّع من جميع الأطراف ومؤرَّخ، ويُعتبر أي تعديل شفهي أو ضمني باطلاً ولا يُعتدّ به.</p>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السادسة عشرة: القانون الواجب التطبيق وفض النزاعات</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يخضع هذا العقد وتفسيره وتنفيذه للقوانين التجارية المعمول بها.</li>
<li>في حال نشوء أي خلاف أو نزاع بين الأطراف بشأن تفسير أو تنفيذ أي بند من بنود هذا العقد، يتم حله وفق الترتيب التالي:
<ul class="list-disc list-inside pr-3 mt-1 space-y-0.5">
<li><strong>أولاً:</strong> التسوية الودية المباشرة بين الأطراف خلال مدة لا تتجاوز <strong>ثلاثين (30) يوماً</strong> من تاريخ الإخطار بالنزاع.</li>
<li><strong>ثانياً:</strong> اللجوء إلى <strong>التحكيم التجاري</strong> أمام محكّم أو هيئة تحكيمية مستقلة يتفق عليها الأطراف، ويكون حكم التحكيم نهائياً وملزماً.</li>
<li><strong>ثالثاً:</strong> في حال تعذّر التحكيم، يُرفع النزاع أمام المحكمة المختصة.</li>
</ul>
</li>
</ol>
</div>
<div>
<h4 class="font-sans font-bold text-slate-950 text-[13px] mb-0.5">المادة السابعة عشرة: أحكام ختامية</h4>
<ol class="list-decimal list-inside space-y-1">
<li>يمثّل هذا العقد كامل الاتفاق بين الأطراف فيما يتعلق بموضوعه، ويُلغي أي اتفاقات شفهية أو مكتوبة سابقة بين الأطراف بشأن نفس الموضوع.</li>
<li>في حال بطلان أي بند من بنود هذا العقد أو عدم قابليته للتنفيذ، تظل البنود الأخرى صحيحة ونافذة ومُلزِمة.</li>
<li>حُرّر هذا العقد من نسخ أصلية متطابقة بيد كل طرف نسخة للعمل بموجبها عند اللزوم.</li>
</ol>
</div>
</div>
<!-- Formal Signatures Page with styling -->
<div class="mt-8 space-y-6">
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">توقيعات أطراف العقد والشهود</h3>
<div class="overflow-x-auto">
<table class="w-full border-collapse border border-slate-800 text-center text-xs font-sans">
<thead>
<tr class="table-header-print bg-slate-50 text-slate-900 font-bold border-b border-slate-800">
<th class="border border-slate-800 p-2">الصفة التعاقدية</th>
<th class="border border-slate-800 p-2 text-right pr-4">الاسم الكامل</th>
<th class="border border-slate-800 p-2 w-1/4">التوقيع</th>
<th class="border border-slate-800 p-2 w-1/5">التاريخ</th>
</tr>
</thead>
<tbody id="doc-signatures-table-body">
<!-- Dynamic Signatures Rows -->
</tbody>
</table>
</div>
<!-- Witnesses Section -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 pt-2 text-xs font-sans">
<div class="border border-slate-300 p-3 rounded-lg space-y-1.5">
<span class="font-bold text-slate-900">شاهد أول (اختياري):</span>
<div class="text-slate-500 text-[11px]">الاسم: _____________________________________</div>
<div class="text-slate-500 text-[11px]">التوقيع: ___________________________________</div>
</div>
<div class="border border-slate-300 p-3 rounded-lg space-y-1.5">
<span class="font-bold text-slate-900">شاهد ثانٍ (اختياري):</span>
<div class="text-slate-500 text-[11px]">الاسم: _____________________________________</div>
<div class="text-slate-500 text-[11px]">التوقيع: ___________________________________</div>
</div>
</div>
</div>
<!-- Dynamic Appendix Sections -->
<div id="doc-appendices-container" class="space-y-6">
<!-- Dynamic Partner Passports -->
</div>
</div>
</div>
</div>
</main>
</div>
<!-- Script handling dynamic actions and lists -->
<script>
// Configuration
const country = "مصر";
let founders = [
{ name: '', nationality: 'أردني', id: '', share: 0 }
];
let partners = [
{ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' }
];
// Init UI inputs on DOM load
document.addEventListener("DOMContentLoaded", () => {
renderSidebar();
syncContract();
});
function renderSidebar() {
// Render Founders in Sidebar
const foundersContainer = document.getElementById('founders-container');
foundersContainer.innerHTML = '';
founders.forEach((founder, index) => {
const div = document.createElement('div');
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
div.innerHTML = `
<div class="flex justify-between items-center">
<span class="text-[10px] font-bold text-slate-400">مؤسس #${index + 1}</span>
${founders.length > 1 ? `
<button onclick="removeFounder(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
حذف
</button>
` : ''}
</div>
<div class="space-y-1.5">
<input type="text" placeholder="الاسم الكامل" value="${founder.name}" oninput="updateFounderField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<div class="grid grid-cols-2 gap-1.5">
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${founder.nationality}" oninput="updateFounderField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<input type="number" placeholder="الأرباح %" value="${founder.share || ''}" oninput="updateFounderField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
</div>
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${founder.id}" oninput="updateFounderField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
</div>
`;
foundersContainer.appendChild(div);
});
// Render Partners in Sidebar
const partnersContainer = document.getElementById('partners-container');
partnersContainer.innerHTML = '';
partners.forEach((partner, index) => {
const div = document.createElement('div');
div.className = "bg-white p-3 rounded border border-slate-200 space-y-2 relative shadow-sm";
div.innerHTML = `
<div class="flex justify-between items-center">
<span class="text-[10px] font-bold text-slate-400">شريك مستثمر #${index + 1}</span>
${partners.length > 1 ? `
<button onclick="removePartner(${index})" class="text-[10px] text-red-500 hover:text-red-700 font-bold">
حذف
</button>
` : ''}
</div>
<div class="space-y-1.5">
<input type="text" placeholder="الاسم الكامل" value="${partner.name}" oninput="updatePartnerField(${index}, 'name', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<div class="grid grid-cols-2 gap-1.5">
<input type="text" placeholder="الجنسية (مثال: أردني)" value="${partner.nationality}" oninput="updatePartnerField(${index}, 'nationality', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<input type="number" placeholder="الأرباح %" value="${partner.share || ''}" oninput="updatePartnerField(${index}, 'share', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
</div>
<input type="text" placeholder="الرقم الوطني وجواز السفر" value="${partner.id}" oninput="updatePartnerField(${index}, 'id', this.value)" class="w-full text-xs px-2 py-1 bg-white border border-slate-200 rounded">
<div class="flex flex-col">
<label class="text-[9px] text-slate-400 mb-0.5">تحميل صورة جواز السفر</label>
<input type="file" accept="image/*" onchange="uploadPartnerPassport(${index}, this)" class="w-full text-[10px] bg-slate-50 border border-slate-200 rounded p-0.5">
</div>
</div>
`;
partnersContainer.appendChild(div);
});
// Update add buttons state
document.getElementById('btn-add-founder').style.display = founders.length >= 3 ? 'none' : 'block';
document.getElementById('btn-add-partner').style.display = partners.length >= 3 ? 'none' : 'block';
}
// Founders state management
function addFounder() {
if (founders.length < 3) {
founders.push({ name: '', nationality: 'أردني', id: '', share: 0 });
renderSidebar();
syncContract();
}
}
function removeFounder(index) {
founders.splice(index, 1);
renderSidebar();
syncContract();
}
function updateFounderField(index, field, value) {
founders[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
syncContract();
}
// Partners state management
function addPartner() {
if (partners.length < 3) {
partners.push({ name: '', nationality: 'أردني', id: '', share: 0, passportDataUrl: '' });
renderSidebar();
syncContract();
}
}
function removePartner(index) {
partners.splice(index, 1);
renderSidebar();
syncContract();
}
function updatePartnerField(index, field, value) {
partners[index][field] = field === 'share' ? (parseFloat(value) || 0) : value;
syncContract();
}
function uploadPartnerPassport(index, fileInput) {
const file = fileInput.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(evt) {
partners[index].passportDataUrl = evt.target.result;
syncContract();
};
reader.readAsDataURL(file);
} else {
partners[index].passportDataUrl = '';
syncContract();
}
}
// Global Sync logic
function syncContract() {
// 1. Sync Date and Capital
const inputDateVal = document.getElementById('input-date').value || '....................';
const inputCapitalVal = parseFloat(document.getElementById('input-capital').value) || 0;
const inputCapitalWordsVal = document.getElementById('input-capital-words').value || '....................';
const inputCurrencyVal = document.getElementById('input-currency').value || 'USD';
document.getElementById('sync-contract-date').textContent = inputDateVal;
document.getElementById('sync-text-date').textContent = inputDateVal;
document.querySelectorAll('.sync-capital-words-span').forEach(el => el.textContent = inputCapitalWordsVal);
document.querySelectorAll('.sync-capital-number-span').forEach(el => el.textContent = inputCapitalVal.toLocaleString());
document.querySelectorAll('.sync-currency-span').forEach(el => el.textContent = inputCurrencyVal);
// 2. Render Founders list in document
const docFoundersList = document.getElementById('doc-founders-list');
docFoundersList.innerHTML = '';
founders.forEach((founder, idx) => {
const nameStr = founder.name ? `السيد/ <strong>${founder.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
const natStr = founder.nationality ? `${founder.nationality} الجنسية` : '.................... الجنسية';
const idStr = founder.id ? `الرقم الوطني/جواز السفر <span class="highlight-field">${founder.id}</span>` : 'الرقم الوطني/جواز السفر <span class="highlight-field">.......................................................</span>';
const p = document.createElement('p');
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المؤسس ${getArabicOrdinal(idx + 1)}"</strong>.`;
docFoundersList.appendChild(p);
});
// 3. Render Partners list in document
const docPartnersList = document.getElementById('doc-partners-list');
docPartnersList.innerHTML = '';
partners.forEach((partner, idx) => {
const nameStr = partner.name ? `السيد/ <strong>${partner.name}</strong>` : 'السيد/ <strong>.......................................................</strong>';
const natStr = partner.nationality ? `${partner.nationality} الجنسية` : '.................... الجنسية';
const idStr = partner.id ? `الرقم الوطني / رقم الهوية <span class="highlight-field">${partner.id}</span>` : 'الرقم الوطني / رقم الهوية <span class="highlight-field">.......................................................</span>';
const p = document.createElement('p');
p.innerHTML = `${idx + 1}. ${nameStr}، ${natStr}، يحمل ${idStr}، ويُشار إليه بـ <strong>"الشريك المستثمر ${getArabicOrdinal(idx + 1)}"</strong> أو <strong>"الطرف الثاني"</strong>.`;
docPartnersList.appendChild(p);
});
// 4. Render share tables and check sum
const tableBody = document.getElementById('doc-shares-table-body');
tableBody.innerHTML = '';
let totalShare = 0;
founders.forEach((founder, idx) => {
totalShare += founder.share;
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2 text-slate-600">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${founder.share}</span>%</td>
`;
tableBody.appendChild(tr);
});
partners.forEach((partner, idx) => {
totalShare += partner.share;
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2 text-slate-600">الشريك المستثمر ${getArabicOrdinal(idx + 1)} (الطرف الثاني)</td>
<td class="border border-slate-800 p-2 font-bold"><span class="text-slate-950 text-sm">${partner.share}</span>%</td>
`;
tableBody.appendChild(tr);
});
// 5. Update validation message
document.getElementById('share-sum').textContent = totalShare;
const indicator = document.getElementById('share-indicator');
const validationMsg = document.getElementById('share-validation-msg');
if (totalShare === 100) {
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-700";
validationMsg.className = "text-[11px] p-2 rounded bg-emerald-50 text-emerald-800 border border-emerald-200 font-semibold leading-relaxed";
validationMsg.innerHTML = "✅ مجموع النسب متوازن (100%). المستند آمن وجاهز تماماً للطباعة كـ PDF.";
} else {
indicator.className = "text-[10px] font-bold px-2 py-0.5 rounded-full bg-red-100 text-red-600";
validationMsg.className = "text-[11px] p-2 rounded bg-red-50 text-red-700 border border-red-200 font-medium leading-relaxed";
validationMsg.innerHTML = `⚠️ مجموع الحصص الحالي هو <b>${totalShare}%</b>. يرجى تعديل الأرقام ليكون الإجمالي 100% لمطابقة شروط العقد الأساسية.`;
}
// 6. Dynamic IP Ownership Clause (First founder solely owns IP, list exclusions)
const firstFounderName = founders[0] && founders[0].name ? founders[0].name : '.......................................................';
let exclusions = [];
founders.forEach((f, idx) => {
if (idx > 0 && f.name) exclusions.push(`الشريك المؤسس ${f.name}`);
});
partners.forEach(p => {
if (p.name) exclusions.push(`المستثمر ${p.name}`);
});
const exclusionsStr = exclusions.length > 0 ? ` (بما فيهم ${exclusions.join(' و ')})` : '';
const ipClause = document.getElementById('ip-ownership-clause');
ipClause.innerHTML = `
يُقرّ ويتفق جميع الأطراف صراحةً على أن الكود المصدري (Source Code) والبرمجي لتطبيق "Siro" بجميع إصداراته (الراكب، السائق، لوحة الإدارة)، وكافة التصاميم والبنية الهندسية وقواعد البيانات والخوارزميات والعلامة التجارية والاسم التجاري والشعار، هي ملكية خاصة وحصرية ومطلقة وأبدية وتؤول بالكامل وتحديداً للسيد <span class="text-slate-950 font-extrabold border-b-2 border-legal-gold/70 pb-0.5">${firstFounderName} بمفرده وبشكل أبدّي</span> دون غيره، ولا يحق لأي طرف آخر${exclusionsStr} منازعته عليها أو الادعاء بأي حقوق عليها تحت أي ظرف كان.
`;
// 7. Render Signatures
const sigTableBody = document.getElementById('doc-signatures-table-body');
sigTableBody.innerHTML = '';
founders.forEach((founder, idx) => {
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المؤسس ${getArabicOrdinal(idx + 1)}</td>
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${founder.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
`;
sigTableBody.appendChild(tr);
});
partners.forEach((partner, idx) => {
const tr = document.createElement('tr');
tr.className = "border-b border-slate-800";
tr.innerHTML = `
<td class="border border-slate-800 p-2.5 text-slate-700 font-medium">الشريك المستثمر ${getArabicOrdinal(idx + 1)}</td>
<td class="border border-slate-800 p-2.5 text-right pr-4 font-bold">${partner.name || '.......................................................'}</td>
<td class="border border-slate-800 p-2.5 text-slate-400">.......................</td>
<td class="border border-slate-800 p-2.5 font-bold sync-text-table-date">${inputDateVal}</td>
`;
sigTableBody.appendChild(tr);
});
// 8. Render Appendices for Passports
const appendicesContainer = document.getElementById('doc-appendices-container');
appendicesContainer.innerHTML = '';
partners.forEach((partner, idx) => {
const pName = partner.name || `الشريك المستثمر ${getArabicOrdinal(idx + 1)}`;
const div = document.createElement('div');
div.className = "page-break no-print my-6 border-t-2 border-dashed border-slate-300 pt-6";
div.innerHTML = `
<div class="space-y-4">
<h3 class="font-sans font-extrabold text-slate-950 text-[14px] border-b border-slate-800 pb-1.5">المرفقات: صورة جواز سفر الشريك المستثمر (${pName})</h3>
<div class="flex flex-col items-center justify-center p-6 border border-dashed border-slate-300 rounded-lg bg-slate-50/50">
${partner.passportDataUrl ? `
<img class="max-h-[140mm] max-w-full rounded shadow-sm border border-slate-200" src="${partner.passportDataUrl}" alt="جواز سفر ${pName}">
` : `
<div class="text-center py-10 text-slate-400 text-xs font-sans">
<svg class="w-12 h-12 mx-auto mb-2 opacity-50" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path>
</svg>
<span>لم يتم إرفاق صورة جواز السفر للشريك (${pName}) بعد. استخدم خيار التحميل في لوحة التحكم لإرفاق الصورة.</span>
</div>
`}
</div>
</div>
`;
appendicesContainer.appendChild(div);
});
}
// Helper to get Arabic Ordinals
function getArabicOrdinal(num) {
const ordinals = ["", "الأول", "الثاني", "الثالث", "الرابع", "الخامس"];
return ordinals[num] || `${num}`;
}
// Sync inputs from date & capital changes
document.getElementById('input-date').addEventListener('input', syncContract);
document.getElementById('input-capital').addEventListener('input', (e) => {
const num = parseInt(e.target.value) || 0;
// Auto mapping simple numbers to words
const mapper = {
100000: "مائة ألف",
150000: "مائة وخمسون ألف",
180000: "مائة وثمانون ألف",
200000: "مائتا ألف",
250000: "مائتان وخمسون ألف",
300000: "ثلاثمائة ألف",
400000: "أربعمائة ألف",
500000: "خمسمائة ألف"
};
const currencyLabel = document.getElementById('input-currency').value === 'USD' ? 'دولار أمريكي' : '';
if (mapper[num]) {
document.getElementById('input-capital-words').value = mapper[num] + (currencyLabel ? ' ' + currencyLabel : '');
}
syncContract();
});
document.getElementById('input-capital-words').addEventListener('input', syncContract);
document.getElementById('input-currency').addEventListener('input', syncContract);
</script>
</body>
</html>