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)
    }