From 2fbc2b9ee0dfcf211f57b04769b7694d539d7312 Mon Sep 17 00:00:00 2001
From: Cai <cai@nbcai.cc>
Date: Thu, 03 Sep 2026 18:15:12 +0800
Subject: [PATCH] chore: 更新2026-09-03股票估值每日台账
---
ai-valuation-analyst/tools/revalue_midyear_full_20260826.py | 19 ++++++++++++-------
1 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/ai-valuation-analyst/tools/revalue_midyear_full_20260826.py b/ai-valuation-analyst/tools/revalue_midyear_full_20260826.py
index 3520c9e..dcde973 100644
--- a/ai-valuation-analyst/tools/revalue_midyear_full_20260826.py
+++ b/ai-valuation-analyst/tools/revalue_midyear_full_20260826.py
@@ -343,14 +343,14 @@
"retained_base_low": item["base_low"],
"retained_base_high": item["base_high"],
}
- write_json(out_dir / "估值快照.json", gap_snapshot)
+ write_json(out_dir / f"{safe_name(item['company'])}估值快照_当前.json", gap_snapshot)
calc_dir = out_dir / "calculation"
calc_dir.mkdir(parents=True, exist_ok=True)
for stale_name in ("valuation_results.json", "valuation_report.md", "run_manifest.json"):
stale_path = calc_dir / stale_name
if stale_path.exists():
stale_path.unlink()
- formal_path = out_dir / f"{safe_name(item['company'])}价格合理性评估.md"
+ formal_path = out_dir / f"{safe_name(item['company'])}价格合理性评估_当前.md"
formal_path.write_text(
"\n".join(
[
@@ -394,10 +394,15 @@
ttm_attr = annual["attributable_profit"] + current["attributable_profit"] - prior["attributable_profit"]
ttm_deduct = annual["deduct_profit"] + current["deduct_profit"] - prior["deduct_profit"]
ttm_revenue = annual["revenue"] + current["revenue"] - prior["revenue"]
- shares = item.get("static_total_shares") or number(selected.get("current_main") or {}, "TOTAL_SHARE") or float(old["market"]["diluted_shares"])
+ # Latest statutory report equity units take precedence over the older
+ # instrument-static snapshot. This matters after bonus issues, splits,
+ # conversions and other H1 capital changes.
+ reported_shares = number(selected.get("current_main") or {}, "TOTAL_SHARE")
+ shares = reported_shares or item.get("static_total_shares") or float(old["market"]["diluted_shares"])
shares = float(shares)
if shares < 1_000_000 and float(old["market"]["diluted_shares"]) > 10_000_000:
shares *= 10000
+ shares_date = current_end if reported_shares else PRICE_DATE
price = item.get("close") or float(old["market"]["price"])
notice_date = str(selected["current_income"].get("NOTICE_DATE") or selected["current_income"].get("UPDATE_DATE"))[:10]
included, excluded = included_forecasts(raw, notice_date, current["attributable_profit"], shares)
@@ -512,7 +517,7 @@
},
"market": {
"price": price, "price_type": "前复权完整交易日收盘价", "price_timestamp": f"{PRICE_DATE}T15:00:00+08:00",
- "diluted_shares": shares, "shares_date": PRICE_DATE, "platform_market_cap": price * shares,
+ "diluted_shares": shares, "shares_date": shares_date, "platform_market_cap": price * shares,
},
"financials": financials,
"balance_sheet": bal,
@@ -558,7 +563,7 @@
}
out_dir = CURRENT_ROOT / ticker
out_dir.mkdir(parents=True, exist_ok=True)
- snapshot_path = out_dir / "估值快照.json"
+ snapshot_path = out_dir / f"{safe_name(item['company'])}估值快照_当前.json"
write_json(snapshot_path, snapshot)
calc_dir = out_dir / "calculation"
if method == "pb" and bal["equity"] <= 0:
@@ -567,7 +572,7 @@
stale_path = calc_dir / stale_name
if stale_path.exists():
stale_path.unlink()
- formal_path = out_dir / f"{safe_name(item['company'])}价格合理性评估.md"
+ formal_path = out_dir / f"{safe_name(item['company'])}价格合理性评估_当前.md"
formal_path.write_text(
"\n".join(
[
@@ -687,7 +692,7 @@
)
formal = calc_text.replace("\n## 1. 结论先行", intro + "\n## 1. 结论先行", 1)
formal = formal.replace("价格合理性评估(流水线生成底稿)", "当前价格合理性评估", 1)
- formal_path = out_dir / f"{safe_name(item['company'])}价格合理性评估.md"
+ formal_path = out_dir / f"{safe_name(item['company'])}价格合理性评估_当前.md"
formal_path.write_text("\n".join(line.rstrip() for line in formal.splitlines()) + "\n", encoding="utf-8")
evidence = {
"batch_id": BATCH_ID, "ticker": ticker, "company": item["company"], "as_of": AS_OF,
--
Gitblit v1.9.3