diff --git a/frontend/src/App.vue b/frontend/src/App.vue index f83b3c1..9849628 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -159,6 +159,23 @@ function dividendIsEstimate(method) { // only dated_ledger rows are real dated cash flows; everything else is an estimate/proxy return method !== 'dated_ledger' } +function dividendIsDated(method) { + // real dated cash-flow ledger (per-share x qty on actual ex/pay dates) + return method === 'dated_ledger' +} +function dividendBadge(method) { + // cls: use classes known to exist in this project (status-tag/neutral-tag/ + // warning-tag); dated gets an inline green style so "real cash flow" reads + // as clearly better than "estimate". + if (dividendIsDated(method)) return { label: 'ตามวันจริง', cls: 'status-tag', style: 'background:#1a7f37;color:#fff' } + if (method === 'dps_annual_proxy') return { label: 'Proxy (ต่อหุ้น)', cls: 'status-tag warning-tag' } + return { label: 'Proxy', cls: 'status-tag warning-tag' } +} +function dividendFootnote(method) { + if (dividendIsDated(method)) return 'ปันผลตามวันจริงจาก ledger (ex-date × จำนวนหุ้น) — กระแสเงินสดจริง' + if (method === 'dps_annual_proxy') return 'ประมาณการปันผลต่อหุ้น (DPS ล่าสุด × จำนวนหุ้น) ไม่ใช่กระแสเงินสดตามวันจริง' + return 'ประมาณจาก dividend yield ของพอร์ตสุดท้าย ไม่ใช่กระแสเงินสดปันผลจริง' +} function formatDate(value) { if (!value) return '—' @@ -777,12 +794,12 @@ onMounted(async () => { await loadDashboard(); await loadBacktestRuns() })
กำไรจากราคา{{ formatNumber(btResult.price_pnl) }} บาท
-
{{ dividendMethodLabel(btResult.dividend_method) }}Proxy{{ formatNumber(btResult.dividend_income) }} บาท
+
{{ dividendMethodLabel(btResult.dividend_method) }}{{ dividendBadge(btResult.dividend_method).label }}{{ formatNumber(btResult.dividend_income) }} บาท
มูลค่าสุดท้าย{{ formatNumber(btResult.final_value) }} บาท
ผลตอบแทนสุทธิ{{ (btResult.net_return * 100).toFixed(2) }}%
Trades: {{ btResult.trades }} · ช่วง {{ btResult.start }} → {{ btResult.end }}
-
*{{ dividendIsEstimate(btResult.dividend_method) ? 'ประมาณการปันผล ไม่ใช่กระแสเงินสดปันผลตามวันจริง' : 'ปันผลตามวันจริงจาก ledger (ex-date/per-share)' }}
+
*{{ dividendFootnote(btResult.dividend_method) }}
คำเตือน: ผลนี้ใช้คะแนนปัจจุบันย้อนหลัง จึงเป็น descriptive non-PIT และไม่ใช่หลักฐานประสิทธิภาพกลยุทธ์
พอร์ตสุดท้าย: @@ -800,7 +817,7 @@ onMounted(async () => { await loadDashboard(); await loadBacktestRuns() }) {{ r.id }}{{ r.start }} → {{ r.end }} descriptive non-PIT {{ formatNumber(r.capital) }} {{ formatNumber(r.price_pnl) }} - {{ formatNumber(r.dividend_income) }}Proxy + {{ formatNumber(r.dividend_income) }}{{ dividendBadge(r.dividend_method).label }} {{ (r.net_return * 100).toFixed(2) }}% {{ r.ran_at ? formatDate(r.ran_at) : '—' }}