rabietiji1's picture
Upload 8 files
c3f05ee verified
Raw History Blame Contribute Delete
5.14 kB
# app.py
from flask import Flask, render_template, request
import PyPDF2
from docx import Document
# استدعاء جميع الدوال من ملف models.py
from models import (
calculate_value_added,
analyze_contract_arabert_deep,
calculate_riba_value_added,
simulate_zakat_impact,
compare_financing_systems
)
app = Flask(__name__)
def extract_text_from_file(file):
"""دالة مساعدة لاستخراج النص من ملفات PDF و Word"""
text = ""
filename = file.filename.lower()
try:
if filename.endswith('.pdf'):
pdf_reader = PyPDF2.PdfReader(file)
for page in pdf_reader.pages:
if page.extract_text():
text += page.extract_text() + "\n"
elif filename.endswith('.docx') or filename.endswith('.doc'):
doc = Document(file)
for para in doc.paragraphs:
text += para.text + "\n"
except Exception as e:
print(f"حدث خطأ أثناء قراءة الملف: {e}")
return text
# ==========================================
# مسارات النموذج الأول (العقود، القيمة المضافة، الربا)
# ==========================================
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
@app.route('/calculate_va', methods=['POST'])
def calculate_va():
try:
t_type = request.form.get('transaction_type')
q = float(request.form.get('quantity', 0))
p1 = float(request.form.get('price_1', 0))
p2 = float(request.form.get('price_2', 0))
va_result = calculate_value_added(t_type, q, p1, p2)
except ValueError:
va_result = {"va": 0, "status": "خطأ", "message": "الرجاء إدخال أرقام صحيحة."}
return render_template('index.html', va_result=va_result)
@app.route('/analyze_nlp', methods=['POST'])
def analyze_nlp():
contract_text = request.form.get('contract_text', '')
file = request.files.get('contract_file')
if file and file.filename != '':
extracted_text = extract_text_from_file(file)
contract_text = extracted_text + "\n\n" + contract_text
if contract_text.strip():
nlp_result = analyze_contract_arabert_deep(contract_text)
else:
nlp_result = {
"risk_level": "تنبيه",
"finding": "لم يتم إدخال بيانات",
"explanation": "الرجاء رفع ملف العقد أو كتابة النص للتحليل."
}
return render_template('index.html', nlp_result=nlp_result)
@app.route('/calculate_riba', methods=['POST'])
def calculate_riba():
try:
is_same_nature = request.form.get('is_same_nature') == 'yes'
is_delayed = request.form.get('is_delayed') == 'yes'
q1 = float(request.form.get('quantity_1', 0))
q2 = float(request.form.get('quantity_2', 0))
p1 = float(request.form.get('price_1', 0))
p2 = float(request.form.get('price_2', 0))
riba_result = calculate_riba_value_added(is_same_nature, q1, q2, p1, p2, is_delayed)
except ValueError:
riba_result = {"va": 0, "status": "خطأ", "type": "", "message": "الرجاء إدخال أرقام صحيحة."}
return render_template('index.html', riba_result=riba_result)
# ==========================================
# مسارات النموذج الثاني (الزكاة والمشاركة PLS)
# ==========================================
@app.route('/zakat_pls_dashboard', methods=['GET', 'POST'])
def zakat_pls_dashboard():
zakat_results = None
finance_results = None
if request.method == 'POST':
form_type = request.form.get('form_type')
if form_type == 'zakat':
try:
wealth = float(request.form.get('wealth', 300000))
poor_count = int(request.form.get('poor_count', 70))
poor_income = float(request.form.get('poor_income', 2500))
zakat_results = simulate_zakat_impact(wealth, poor_count, poor_income)
except ValueError:
pass # يمكن إضافة معالجة للأخطاء هنا
elif form_type == 'finance':
try:
p1 = float(request.form.get('p1', 10000))
p2 = float(request.form.get('p2', 12000))
revenue = float(request.form.get('revenue', 50000))
cost = float(request.form.get('cost', 30000))
phi = float(request.form.get('phi', 0.4))
finance_results = compare_financing_systems(p1, p2, revenue, cost, phi)
except ValueError:
pass
return render_template('zakat_pls.html', zakat_results=zakat_results, finance_results=finance_results)
if __name__ == '__main__':
# Running the Flask app on port 7860 as required by Hugging Face Spaces
app.run(host='0.0.0.0', port=7860, debug=False)