Clarify intraday suppression headlines

This commit is contained in:
2569718930@qq.com
2026-04-19 14:15:46 +08:00
parent 658689bc92
commit b2f15ae7d8
2 changed files with 51 additions and 2 deletions
+32
View File
@@ -312,6 +312,38 @@ def test_intraday_meteorology_suppressed_cloud_rain_case():
assert any(item["direction"] == "suppress" for item in payload["signal_contributions"])
def test_intraday_meteorology_structural_cap_does_not_claim_taf_cloud_rain():
payload = _build_intraday_meteorology(
{
"local_time": "11:30",
"temp_symbol": "°C",
"current": {"temp": 39.0, "max_so_far": 39.0},
"deb": {"prediction": 40.4},
"probabilities": {"distribution": [{"value": 42, "probability": 0.35}]},
"peak": {"first_h": 12, "last_h": 16, "status": "before"},
"deviation_monitor": {"direction": "cold", "severity": "strong", "current_delta": -1.4},
"vertical_profile_signal": {
"heating_setup": "suppressed",
"suppression_risk": "medium",
"summary_zh": "边界层混合偏弱,午后上修需要后续观测确认。",
},
"taf": {
"signal": {
"available": True,
"suppression_level": "low",
"disruption_level": "low",
"summary_zh": "TAF 在峰值窗口暂未提示明显云雨压温。",
}
},
}
)
assert "结构信号压制" in payload["headline"]
assert "TAF 云雨层暂未构成主压温理由" in payload["headline"]
assert "存在云雨或结构压制" not in payload["headline"]
assert any(item["label"] == "TAF 云雨扰动" and item["direction"] == "support" for item in payload["signal_contributions"])
def test_intraday_meteorology_handles_sparse_observations():
payload = _build_intraday_meteorology(
{
+19 -2
View File
@@ -1320,6 +1320,11 @@ def _build_intraday_meteorology(data: Dict[str, Any]) -> Dict[str, Any]:
taf_suppression = str(taf_signal.get("suppression_level") or "").lower()
taf_disruption = str(taf_signal.get("disruption_level") or "").lower()
taf_has_cloud_rain_cap = taf_suppression in {"medium", "high"} or taf_disruption in {
"medium",
"high",
}
structural_cap = False
if taf_signal.get("available") or taf_suppression:
available_layers += 1
if taf_suppression == "high" or taf_disruption == "high":
@@ -1405,8 +1410,20 @@ def _build_intraday_meteorology(data: Dict[str, Any]) -> Dict[str, Any]:
headline_en = "The peak window has passed; the read now shifts toward confirming the final high rather than chasing further upside."
confidence = "high" if available_layers >= 2 else "medium"
elif suppress_score >= support_score + 2:
headline = "峰值存在云雨或结构压制,当前更偏防守高温上修。"
headline_en = "Cloud/rain or structural suppression is capping the peak; defend against aggressive high-temperature upside for now."
structural_cap = any(
signal.get("direction") == "suppress"
and signal.get("label") in {"边界层结构", "站网对比", "日内节奏"}
for signal in signals
)
if taf_has_cloud_rain_cap and structural_cap:
headline = "峰值同时存在 TAF 云雨扰动和结构压制,当前更偏防守高温上修。"
headline_en = "Both TAF cloud/rain disruption and structural signals are capping the peak; defend against aggressive high-temperature upside for now."
elif taf_has_cloud_rain_cap:
headline = "TAF 提示峰值窗口有云雨扰动,当前更偏防守高温上修。"
headline_en = "TAF flags cloud/rain disruption near the peak window; defend against aggressive high-temperature upside for now."
else:
headline = "峰值主要受结构信号压制,TAF 云雨层暂未构成主压温理由。"
headline_en = "The peak is mainly capped by structural signals; TAF cloud/rain is not the primary suppression reason for now."
confidence = "high" if available_layers >= 3 else "medium"
elif support_score >= suppress_score + 2:
headline = "峰值仍有上修空间,后续重点看峰值窗口内报文能否继续抬升。"