EGYADMIN commited on
Commit
842447f
·
verified ·
1 Parent(s): 91b0294

Update modules/cost_risk_analyzer.py

Browse files
Files changed (1) hide show
  1. modules/cost_risk_analyzer.py +23 -11
modules/cost_risk_analyzer.py CHANGED
@@ -637,37 +637,49 @@ class CostRiskAnalyzer:
637
  costs : Dict[str, Any]
638
  بيانات التكاليف
639
 
 
 
 
 
 
 
 
 
 
640
  المخرجات:
641
  --------
642
  List[Dict[str, Any]]
643
- قائمة مخاطر تجاوز التكاليف
644
  """
645
  # استخراج التكاليف الفعلية والمخططة
646
  actual_costs = costs.get("actual", {})
647
  planned_costs = costs.get("planned", {})
648
-
649
  overrun_risks = []
650
-
651
  if not actual_costs or not planned_costs:
652
  return overrun_risks
653
-
654
  # تحليل الانحرافات لكل فئة وتحديد المخاطر
655
- for category in set(list(actual_costs.keys()) + list(planned_costs.keys())):
656
  actual = actual_costs.get(category, 0)
657
  planned = planned_costs.get(category, 0)
658
-
659
  if planned > 0:
660
  deviation_percentage = ((actual - planned) / planned) * 100
661
-
662
  # إذا كان هناك تجاوز، أضف المخاطرة
663
  if deviation_percentage > 5:
664
  risk_level = "مرتفع" if deviation_percentage > 20 else "متوسط" if deviation_percentage > 10 else "منخفض"
665
-
666
  overrun_risks.append({
667
  "category": category,
668
  "planned": planned,
669
  "actual": actual,
670
- "deviation_percentage": deviation_percentage,
671
  "risk_level": risk_level,
672
- "impact": "تأثير على هامش الربح وزيادة التكاليف الإجمالية",
673
- "mitigation": self._generate_overrun
 
 
 
 
637
  costs : Dict[str, Any]
638
  بيانات التكاليف
639
 
640
+ def _analyze_cost_overrun_risks(self, costs: Dict[str, Dict[str, float]]) -> List[Dict[str, Any]]:
641
+ """
642
+ تحليل مخاطر تجاوز التكاليف.
643
+
644
+ المعاملات:
645
+ ----------
646
+ costs : Dict[str, Dict[str, float]]
647
+ قاموس يحتوي على التكاليف الفعلية والمخططة للمشروع.
648
+
649
  المخرجات:
650
  --------
651
  List[Dict[str, Any]]
652
+ قائمة مخاطر تجاوز التكاليف.
653
  """
654
  # استخراج التكاليف الفعلية والمخططة
655
  actual_costs = costs.get("actual", {})
656
  planned_costs = costs.get("planned", {})
657
+
658
  overrun_risks = []
659
+
660
  if not actual_costs or not planned_costs:
661
  return overrun_risks
662
+
663
  # تحليل الانحرافات لكل فئة وتحديد المخاطر
664
+ for category in set(actual_costs.keys()).union(planned_costs.keys()):
665
  actual = actual_costs.get(category, 0)
666
  planned = planned_costs.get(category, 0)
667
+
668
  if planned > 0:
669
  deviation_percentage = ((actual - planned) / planned) * 100
670
+
671
  # إذا كان هناك تجاوز، أضف المخاطرة
672
  if deviation_percentage > 5:
673
  risk_level = "مرتفع" if deviation_percentage > 20 else "متوسط" if deviation_percentage > 10 else "منخفض"
674
+
675
  overrun_risks.append({
676
  "category": category,
677
  "planned": planned,
678
  "actual": actual,
679
+ "deviation_percentage": round(deviation_percentage, 2),
680
  "risk_level": risk_level,
681
+ "impact": "تأثير على هامش الربح وزيادة التكاليف",
682
+ "mitigation": "مراجعة الميزانية وإيجاد بدائل أقل تكلفة"
683
+ })
684
+
685
+ return overrun_risks