feat(investigations): refine report authoring and replay flushing
This commit is contained in:
@@ -79,7 +79,7 @@ async def authorize_query(
|
||||
"get_element_properties", "list_elements", "query_nearby_elements", "get_network_options",
|
||||
"get_node_connections", "get_element_gis_properties", "query_network_extent",
|
||||
"list_regions", "get_region", "get_region_nodes",
|
||||
"analyze_valve_isolation", "generate_node_coverage", "run_burst_simulation", "run_contaminant_simulation",
|
||||
"analyze_valve_isolation", "generate_node_coverage", "run_burst_simulation", "run_contaminant_simulation", "analyze_flushing",
|
||||
"get_calculation_job", "get_calculation_result", "list_calculation_jobs"}
|
||||
if tool.name not in allowed:
|
||||
raise HTTPException(403, "回放调查仅开放冻结 SCADA、资产、拓扑分析及指定模型情景;时序观测请使用 query_scada_readings")
|
||||
@@ -91,6 +91,8 @@ async def authorize_query(
|
||||
if not args.include_impact_coverage:
|
||||
raise HTTPException(422, "回放污染情景必须启用影响覆盖,按当前模型估计传播范围")
|
||||
check_replay_window(replay_context, args.start_time, args.start_time)
|
||||
if tool.name == "analyze_flushing":
|
||||
check_replay_window(replay_context, args.start_time, args.start_time)
|
||||
if tool.name == "query_scada_readings":
|
||||
check_replay_window(replay_context, args.start, args.end)
|
||||
if tool.name == "run_contaminant_source_trace":
|
||||
@@ -233,6 +235,17 @@ async def execute_query(
|
||||
data = {"parameters": args.model_dump(mode="json", exclude={"context_handle"}), "result": result}
|
||||
origin = "synthetic"
|
||||
gaps = ["回放污染传播为当前模型的独立假设情景,不读取实时SCADA,不代表冻结观测或历史模型重建。未来模拟样本仅为预测;浓度阈值仅用于情景展示,不是饮用水安全限值。"]
|
||||
elif name == "analyze_flushing" and replay_context:
|
||||
from app.mcp.analysis_service import calculate_replay_flushing
|
||||
|
||||
await conn.commit()
|
||||
async with scope.simulation_routing():
|
||||
result = await calculate_replay_flushing(
|
||||
args, network=scope.project.project_code, username=scope.user.username,
|
||||
)
|
||||
data = {"parameters": args.model_dump(mode="json", exclude={"context_handle"}), "result": result}
|
||||
origin = "synthetic"
|
||||
gaps = ["回放冲洗为当前模型的独立水力情景,不读取实时SCADA,不继承上次模拟;未来模拟样本仅为预测,不验证污染清除、水质合格或现场操作。"]
|
||||
elif name == "run_burst_location" and replay_context:
|
||||
from app.mcp.analysis_service import calculate_replay_burst_location
|
||||
from app.services.scada_replay_queries import replay_burst_location_inputs
|
||||
@@ -540,7 +553,8 @@ async def execute_query(
|
||||
"algorithm_status": "provisional",
|
||||
"required_inputs": ["candidate_node_ids", "start", "end"],
|
||||
"next_steps": ["present_node", "interim_report", "propose_task_action", "run_contaminant_simulation",
|
||||
"analyze_valve_isolation", "generate_node_coverage", "report"],
|
||||
"source_control", "analyze_valve_isolation", "generate_node_coverage",
|
||||
"analyze_flushing", "field_feedback", "clearance_verification", "report"],
|
||||
"work_order_wait_blocks_analysis": False,
|
||||
"simulation_parameters": {"include_impact_coverage": True},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user