Spaces:
Paused
Paused
File size: 7,360 Bytes
ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 ee08f53 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 49acda5 b66f0a9 78b9e35 |
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 |
import re
import os
import json
import numpy as np
from typing import Dict, List, Any
from datetime import datetime
# استيراد نماذج الذكاء الاصطناعي
from modules.ai_models import LLMProcessor
class RequirementAnalyzer:
"""
فئة لتحليل متطلبات المناقصة وتقييمها
"""
def __init__(self, use_ai: bool = True):
"""
تهيئة محلل المتطلبات
"""
self.use_ai = use_ai
# تحميل قاعدة بيانات المتطلبات القياسية
self.standard_requirements = self._load_standard_requirements()
# تحميل معايير التقييم
self.evaluation_criteria = self._load_evaluation_criteria()
# إنشاء معالج نماذج الذكاء الاصطناعي إذا تم تفعيله
if self.use_ai:
self.llm_processor = LLMProcessor()
def _load_standard_requirements(self) -> Dict[str, List[Dict[str, Any]]]:
"""
تحميل قاعدة بيانات المتطلبات القياسية
"""
return {
"عام": [
{
"id": "G001",
"title": "شهادات الاعتماد",
"description": "يجب أن يكون المورد/المقاول حاصل على الشهادات والاعتمادات الضرورية للعمل",
"importance": "عالية",
"category": "إدارية"
},
{
"id": "G002",
"title": "الخبرة السابقة",
"description": "يجب أن يكون لدى المورد/المقاول خبرة سابقة في أعمال مماثلة",
"importance": "عالية",
"category": "فنية"
}
]
}
def _load_evaluation_criteria(self) -> Dict[str, Dict[str, Any]]:
"""
تحميل معايير التقييم للمتطلبات
"""
return {
"فنية": {
"weight": 0.6,
"subcriteria": {
"جودة الحلول المقترحة": 0.3,
"الخبرة في مشاريع مماثلة": 0.25,
"الكوادر الفنية": 0.25,
"المنهجية وخطة العمل": 0.2
}
},
"مالية": {
"weight": 0.3,
"subcriteria": {
"السعر الإجمالي": 0.7,
"تفاصيل التكاليف": 0.2,
"شروط الدفع": 0.1
}
}
}
def analyze(self, extracted_data: Dict[str, Any]) -> Dict[str, Any]:
"""
تحليل البيانات المستخرجة وتقييم المتطلبات
"""
analysis_results = {
"requirements": [],
"compliance": {},
"gaps": [],
"risks": [],
"recommendations": [],
"evaluation": {}
}
# استخراج المتطلبات من البيانات المستخرجة
requirements = extracted_data.get("requirements", [])
# تحليل الامتثال للمتطلبات القياسية
compliance_results = self._analyze_compliance(requirements)
analysis_results["compliance"] = compliance_results
# تحديد الفجوات في المتطلبات
gaps = self._identify_gaps(requirements, extracted_data)
analysis_results["gaps"] = gaps
# تحليل المخاطر المتعلقة بالمتطلبات
risks = self._analyze_risks(requirements, extracted_data)
analysis_results["risks"] = risks
# إعداد التوصيات
recommendations = self._generate_recommendations(requirements, compliance_results, gaps, risks, extracted_data)
analysis_results["recommendations"] = recommendations
return analysis_results
def _analyze_compliance(self, requirements: List[Dict[str, Any]]) -> Dict[str, Any]:
"""
تحليل امتثال المتطلبات للمعايير القياسية
"""
compliance_results = {
"compliant": [],
"missing": [],
"compliance_rate": 0.0
}
standard_reqs = self.standard_requirements["عام"]
for std_req in standard_reqs:
found = any(std_req["title"].lower() in req.get("title", "").lower() for req in requirements)
if found:
compliance_results["compliant"].append(std_req)
else:
compliance_results["missing"].append(std_req)
total_std_reqs = len(standard_reqs)
if total_std_reqs > 0:
compliance_results["compliance_rate"] = round(
len(compliance_results["compliant"]) / total_std_reqs * 100, 2
)
return compliance_results
def _identify_gaps(self, requirements: List[Dict[str, Any]], extracted_data: Dict[str, Any]) -> List[Dict[str, Any]]:
"""
تحديد الفجوات في المتطلبات
"""
gaps = []
for missing_req in self.standard_requirements.get("عام", []):
if not any(missing_req["title"].lower() in req.get("title", "").lower() for req in requirements):
gaps.append({
"type": "متطلب قياسي مفقود",
"requirement": missing_req,
"severity": "عالية"
})
return gaps
def _analyze_risks(self, requirements: List[Dict[str, Any]], extracted_data: Dict[str, Any]) -> List[Dict[str, Any]]:
"""
تحليل المخاطر المتعلقة بالمتطلبات
"""
risks = []
# مخاطر وجود متطلبات غامضة
vague_requirements = [req for req in requirements if len(req.get("description", "")) < 30]
if vague_requirements:
risks.append({
"title": "متطلبات غير واضحة",
"severity": "عالية",
"impact": "قد يؤدي إلى نزاعات وتأخير في التنفيذ"
})
return risks
def _generate_recommendations(self, requirements: List[Dict[str, Any]], compliance_results: Dict[str, Any],
gaps: List[Dict[str, Any]], risks: List[Dict[str, Any]],
extracted_data: Dict[str, Any]) -> List[Dict[str, Any]]:
"""
إعداد توصيات لتحسين المتطلبات
"""
recommendations = []
# توصيات لسد الفجوات
for gap in gaps:
recommendations.append({
"title": f"معالجة فجوة: {gap['type']}",
"priority": "عالية"
})
# توصيات لمعالجة المخاطر
for risk in risks:
recommendations.append({
"title": f"معالجة خطر: {risk['title']}",
"priority": "عالية"
})
return recommendations
|