---
name: 2026-05-01 전날대비 순자산 기준 전환 + 스냅샷 v3
description: stock_portfolio_report.py의 "전날대비" 항목을 평가금액 합 → 순자산(평가금액+예수금) 기준으로 변경. 스냅샷 스키마도 deposit 포함 v3로 전환.
type: project
---

## 변경 사항

- `state/portfolio_daily_snapshot.json` 스키마 확장 (v3):
  - 이전: `{date: {owner: {stock: {qty,...}}}}` (v2)
  - 이후: `{date: {owner: {holdings: {stock: {qty,...}}, deposit: int}}}`
  - `_normalize_prev_snap`이 v1(flat) / v2 / v3 모두 호환. legacy 일자는 `deposit=None`으로 정규화되어 해당 일 기준 비교 시 "예수금 데이터 없음" 표시.
- 전날대비 계산 기준 변경:
  - 이전: `total_eval - prev_eval` (평가금액 합 비교)
  - 이후: `(total_eval + owner_deposit) - (prev_eval + prev_deposit)` (owner별 순자산 차)
  - 매도 시 평가→예수금 이동분이 손실로 잘못 표시되던 문제 해결.
- 라벨 변경: HTML KPI / 텍스트 / 텔레그램 모두 `전날대비 순자산`으로 통일. owner 블록·전체 합계·텔레그램 헤더에 `예수금`·`순자산` 항목 추가 표시.
- 스냅샷 백업: `state/portfolio_daily_snapshot.json.bak-20260501`.

## 운영 영향

- **5/1 20:10 (전환 첫 실행)**: prev=4/30 스냅샷에 deposit이 없으므로 owner KPI에 `전날대비 순자산: 예수금 데이터 없음` 표시. 같은 실행에서 5/1 스냅샷이 v3로 저장됨.
- **5/4 20:10 이후**: 정상적으로 owner별·전체 합계 모두 순자산 기준 전날대비 표시.
- 사용자 동기 사례 (4/30 -400만원 표시): 본인 -405만원 중 약 -217만원이 매도(삼성전자 10주, 남해화학 97주, 한화엔진 6주) - 매수(SK이터닉스 9주, JYP 16주)의 평가→예수금 이동분이었고 실제 시세 손실은 약 -188만원. 새 기준은 매매 cancel out으로 시세 변동분만 표시.

## 미해결

- 정확한 매매 차익(체결가 vs 종가) 반영은 안 함. 미세 오차 ±수만원 수준. 더 정밀하게 하려면 `ka10170` 당일매매일지 체결가 합산 필요.
