File size: 9,756 Bytes
c3f05ee | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# ==========================================
# 1. إعداد وتحميل نموذج الذكاء الاصطناعي (AraBERT)
# ==========================================
tokenizer = AutoTokenizer.from_pretrained("aubmindlab/bert-base-arabertv02")
model = AutoModelForSequenceClassification.from_pretrained("aubmindlab/bert-base-arabertv02", num_labels=3)
# ==========================================
# 2. دوال تحليل العقود والنصوص
# ==========================================
def analyze_contract_arabert_deep(contract_text):
"""
تحليل نص العقد البنكي باستخدام القواعد النصية (الكلمات المفتاحية) أولاً،
ثم استخدام نموذج AraBERT للتحليل العميق إذا لم تكن الشروط واضحة.
"""
# أ. فحص الخصائص الربوية الصريحة (القواعد النصية)
riba_explicit = ["فائدة منصوص عليها", "تكلفة ثابتة", "مكافأة ثابتة محددة مسبقاً", "زيادة رأس المال بشكل مستقل"]
fadl_explicit = ["ذهب بذهب", "فضة بفضة", "مثلاً بمثل", "تبادل نفس الطبيعة مع زيادة"]
for phrase in riba_explicit:
if phrase in contract_text:
return {
"risk_level": "عالي جداً (حرام)",
"finding": f"اكتشاف شرط ربوي صريح: ({phrase})",
"explanation": "الربا يُعرّف بأنه فائدة منصوص عليها تعاقدياً وتكلفة ثابتة يتحملها المقترض."
}
for phrase in fadl_explicit:
if phrase in contract_text:
return {
"risk_level": "عالي (ربا الفضل)",
"finding": f"شبهة ربا الفضل: ({phrase})",
"explanation": "يُشترط تكافؤ الكميات وتزامن التبادل لإتمام عملية بيع صحيحة للأشياء من نفس الطبيعة."
}
if "خسارة كلية" in contract_text or "تقاسم حقيقي" in contract_text or "حصص متغيرة" in contract_text:
return {
"risk_level": "منخفض (مباح/مشاركة)",
"finding": "توافق مع نظام المشاركة (PLS)",
"explanation": "هناك تقاسم حقيقي للمخاطر بين الشركاء وهو متوافق مع الشريعة."
}
# ب. التحليل العميق باستخدام الذكاء الاصطناعي (AraBERT) للحالات غير الواضحة
inputs = tokenizer(contract_text, return_tensors="pt", truncation=True, padding=True, max_length=512)
with torch.no_grad():
outputs = model(**inputs)
predicted_class = torch.argmax(outputs.logits, dim=-1).item()
classes = ["عقد صحيح (سلم/استصناع)", "شبهة غرر مرتفعة", "معاملة محظورة (عينة/تورق/ربا)"]
return {
"risk_level": "تقييم الذكاء الاصطناعي",
"finding": classes[predicted_class],
"explanation": "تم تصنيف العقد بناءً على فهم النموذج العميق لسياق المعاملة المكتوبة."
}
# ==========================================
# 3. دوال الاقتصاد الكلي والقيمة المضافة
# ==========================================
def calculate_value_added(transaction_type, Q, P1, P2):
"""
حساب القيمة المضافة للاقتصاد الكلي بناءً على نوع العقد.
"""
result = {"va": 0, "status": "", "message": ""}
if transaction_type == "taqsit":
va = 2 * Q * (P2 - P1)
result["va"] = round(va, 2)
result["status"] = "موجبة (محفزة للنمو)"
result["message"] = "هذه المعاملة تخلق قيمة مضافة إيجابية للاقتصاد، مما يسهل التعامل التجاري."
elif transaction_type == "eina":
va = Q * (P2 - P1)
result["va"] = round(va, 2)
result["status"] = "سالبة (تدهور اقتصادي)"
result["message"] = "معاملة محظورة لأنها تؤدي إلى تدهور وتراجع النمو الاقتصادي وتقتطع من القيمة المضافة."
else:
result["message"] = "نوع المعاملة غير معروف."
return result
def calculate_riba_value_added(is_same_nature, q1, q2, p1, p2, is_delayed):
"""
النمذجة الرياضية لاكتشاف الربا (الفضل والنسيئة) وحساب أثره على القيمة المضافة.
"""
result = {"va": 0, "status": "", "type": "", "message": ""}
# حالة ربا الفضل
if is_same_nature and q1 != q2:
va = -p1 * (q1 + q2)
result["va"] = round(va, 2)
result["status"] = "معاملة محظورة"
result["type"] = "شبهة ربا الفضل"
result["message"] = "تبادل شيئين من نفس الطبيعة بكميات مختلفة يقتطع قيماً من الاقتصاد."
# حالة ربا النسيئة
elif not is_same_nature and q1 == q2 and is_delayed:
va = -q1 * (p1 + p2)
result["va"] = round(va, 2)
result["status"] = "معاملة محظورة"
result["type"] = "شبهة ربا النسيئة"
result["message"] = "زيادة الثمن مقابل الأجل دون مبرر حقيقي يطرح قيماً من الاقتصاد."
# حالة القرض الحسن
elif is_same_nature and q1 == q2 and is_delayed:
va = 9 * q1
result["va"] = round(va, 2)
result["status"] = "معاملة مباحة"
result["type"] = "قرض حسن (بدون فائدة)"
result["message"] = "المعاملة تساهم في التكافل الاجتماعي وتضيف قيمة إيجابية غير مباشرة للاقتصاد."
else:
result["status"] = "يتطلب مراجعة"
result["message"] = "المعاملة تتطلب معطيات إضافية لتصنيفها بدقة."
return result
# ==========================================
# 4. دوال التكافل والزكاة
# ==========================================
def simulate_zakat_impact(total_wealth_rich, poor_count, years=5, growth_rate=0.05, zakat_rate=0.025):
"""
محاكاة أثر الزكاة على الدخل الفردي للفقراء وتوزيع الثروة عبر عدة سنوات.
"""
results = []
current_wealth = total_wealth_rich
if poor_count <= 0:
return results # تجنب القسمة على صفر
for year in range(1, years + 1):
zakat_amount = current_wealth * zakat_rate
individual_zakat_share = zakat_amount / poor_count
results.append({
"year": year,
"rich_wealth": round(current_wealth, 2),
"zakat_fund": round(zakat_amount, 2),
"individual_share": round(individual_zakat_share, 2)
})
current_wealth = current_wealth * (1 + growth_rate)
return results
# أضف هذا الكود إلى ملف models.py
def simulate_zakat_impact(initial_wealth, poor_count, initial_poor_income, growth_rate=0.05, zakat_rate=0.025, years=5):
"""
نموذج يحاكي أثر الزكاة على الفقر وتحفيز الاقتصاد عبر عدة سنوات.
يعتمد على معدل نمو سنوي ونسبة زكاة ثابتة[cite: 1].
"""
results = []
current_wealth = initial_wealth
# إجمالي الدخل الأولي للفقراء قبل الزكاة
base_poor_income_total = poor_count * initial_poor_income
for year in range(1, years + 1):
# حساب مقدار الزكاة الواجبة[cite: 1]
zakat_due = current_wealth * zakat_rate
# حساب إجمالي دخل الفقراء بعد استلام الزكاة[cite: 1]
total_poor_income_after = base_poor_income_total + zakat_due
# متوسط دخل الفرد الفقير بعد الزكاة[cite: 1]
avg_poor_income = total_poor_income_after / poor_count
results.append({
"year": year,
"wealth": round(current_wealth, 2),
"zakat_due": round(zakat_due, 2),
"total_poor_income": round(total_poor_income_after, 2),
"avg_poor_income": round(avg_poor_income, 2)
})
# تطبيق معدل النمو الاقتصادي للسنة القادمة على ثروة الأغنياء ودخل الفقراء الأساسي[cite: 1]
current_wealth *= (1 + growth_rate)
base_poor_income_total *= (1 + growth_rate)
return results
def compare_financing_systems(P1, P2, revenue, cost, phi):
"""
مقارنة بين نظام سعر الفائدة ونظام المشاركة (PLS)[cite: 1].
"""
# نظام سعر الفائدة: إجمالي الربح = مبلغ السداد - مبلغ القرض[cite: 1]
interest_profit = P2 - P1
# نظام المشاركة (PPP): دخل الفترة = نسبة المشاركة * (إجمالي الإيرادات - إجمالي التكاليف)[cite: 1]
pls_profit = phi * (revenue - cost)
return {
"interest_profit": round(interest_profit, 2),
"pls_profit": round(pls_profit, 2)
} |