|
|
|
|
@ -104,7 +104,7 @@ async def get_simulation_results(*, simulation_id: str, token: str):
|
|
|
|
|
|
|
|
|
|
# return results
|
|
|
|
|
|
|
|
|
|
def calculate_asset_eaf_contributions(plant_result, eq_results):
|
|
|
|
|
def calculate_asset_eaf_contributions(plant_result, eq_results, standard_scope):
|
|
|
|
|
"""
|
|
|
|
|
Calculate each asset's negative contribution to plant EAF
|
|
|
|
|
Higher contribution = more impact on reducing plant EAF
|
|
|
|
|
@ -117,6 +117,9 @@ def calculate_asset_eaf_contributions(plant_result, eq_results):
|
|
|
|
|
for asset in eq_results:
|
|
|
|
|
# # Weight based on production capacity (just for seri)
|
|
|
|
|
# capacity_weight = asset.get('total_downtime', 0) / plant_production if plant_production > 0 else 0
|
|
|
|
|
if asset.get('aeros_node').get('node_name') not in standard_scope:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# # Get asset EAF and downtime
|
|
|
|
|
plant_eaf_minus = 100 - plant_eaf
|
|
|
|
|
@ -137,7 +140,6 @@ def calculate_asset_eaf_contributions(plant_result, eq_results):
|
|
|
|
|
)
|
|
|
|
|
results.append(contribution)
|
|
|
|
|
|
|
|
|
|
# Sort by contribution (worst contributors first)
|
|
|
|
|
results.sort(key=lambda x: x.contribution, reverse=True)
|
|
|
|
|
return results
|
|
|
|
|
|
|
|
|
|
@ -170,23 +172,25 @@ async def identify_worst_eaf_contributors(*, simulation_result, target_eaf: floa
|
|
|
|
|
|
|
|
|
|
# Get equipment results from calc_result
|
|
|
|
|
eq_results = calc_result if isinstance(calc_result, list) else [calc_result]
|
|
|
|
|
|
|
|
|
|
asset_contributions = calculate_asset_eaf_contributions(plant_result, eq_results)
|
|
|
|
|
current_plant_eaf = plant_result.get("eaf", 0)
|
|
|
|
|
eaf_gap = target_eaf - current_plant_eaf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Verify our calculation by summing contributions
|
|
|
|
|
total_calculated_downtime = sum(contrib.eaf_impact for contrib in asset_contributions)
|
|
|
|
|
calculated_plant_eaf = 100 - total_calculated_downtime
|
|
|
|
|
|
|
|
|
|
# # Verify our calculation by summing contributions
|
|
|
|
|
# total_calculated_downtime = sum(contrib.eaf_impact for contrib in asset_contributions)
|
|
|
|
|
# calculated_plant_eaf = 100 - total_calculated_downtime
|
|
|
|
|
|
|
|
|
|
standard_scope = await get_standard_scope_by_session_id(
|
|
|
|
|
db_session=db_session,
|
|
|
|
|
overhaul_session_id=oh_session_id,
|
|
|
|
|
collector_db=collector_db
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
standard_scope_location_tags = [tag.location_tag for tag in standard_scope]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
asset_contributions = calculate_asset_eaf_contributions(plant_result, eq_results, standard_scope_location_tags)
|
|
|
|
|
|
|
|
|
|
project_eaf_improvement = 0.0
|
|
|
|
|
selected_eq = []
|
|
|
|
|
|
|
|
|
|
|