Files
jarca-ledger-mcp/docs/srs/Data/req-009_asset-snapshot-manual-assets-valuation-model.md
T

100 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# REQ-009 Asset snapshot/manual assets valuation model
- Status: Implemented
- Type: Data
- Priority: High
- Owner: 렛저장인
- Source Discovery: `docs/discovery/dcy-008_20260630_asset-snapshot-manual-valuation-system.md`
- Batch: BAT-008
- Created At (KST): 2026-06-30 21:17 KST
- Approved At (KST): 2026-06-30 21:24 KST
- Implemented At (KST): 2026-06-30 22:05 KST
## 1. 배경
REQ-005는 `accounts.liquidity_bucket` + `last_balance` 기반 자산 유동성/순자산 표시를 구현했지만, 시점별 자산 평가 이력과 비거래 자산/부채의 독립 모델은 의도적으로 제외했다. dcy-008 confirmed Discovery에 따라 자산 스냅샷 이력과 수기 자산 모델을 별도 테이블로 도입하고, 계좌 `last_balance` + 수기 자산 보강을 단일 평가 권위 소스로 정립해 기준일별 순자산 재현과 후속 MCP 조회 기능의 데이터 기반을 마련해야 한다.
## 2. Intent
자산 평가 모델을 계좌 한 줄의 최신 값에서 벗어나, 기준일별 스냅샷과 비거래 자산/부채의 명시적 엔티티로 분리한다. 이 REQ의 목적은 `asset_snapshots`/`manual_assets` 데이터 모델, 순자산 산식, 권위 소스 우선순위, 월말 수동 스냅샷 정책을 구현 가능한 저장 계층 요구사항으로 고정하는 것이다.
## 3. 범위
### In Scope
- `asset_snapshots`와 `manual_assets`를 별도 additive/idempotent 테이블로 도입한다.
- 비거래 자산/부채의 필수 속성(이름, 평가값, 기준일, `liquidity_bucket`, 출처 메모)을 정의한다.
- 자산 스냅샷의 필수 속성(기준일, 평가 대상, 평가 금액, `liquidity_bucket`, 출처/메모)을 정의한다.
- 자산성 합계 − `loan` 차감, 미평가 제외 규칙을 저장/집계 계층 기준으로 고정한다.
- 월말 수동 스냅샷 생성 정책과 항목 단위 수용 구조를 반영한다.
- `docs/data-model.md`에 위 모델과 권위 소스 규칙을 반영한다.
### Out of Scope
- 외부 시세/부동산 자동 평가 연동.
- 실시간 자동 스냅샷 생성 스케줄러.
- 수익률/세금/리밸런싱 계산.
- 조회성 MCP 응답 shape 정의 자체(별도 Interface REQ에서 다룸).
## 4. Requirement
### FR-1. Manual assets data model
- `manual_assets`는 거래로 산출되지 않는 비거래 자산/부채를 저장해야 한다.
- 각 항목은 최소한 이름, 자산/부채 구분 또는 `liquidity_bucket`, 평가값, 기준일, 출처 메모를 가져야 한다.
- 허용 `liquidity_bucket` 값은 `cash`, `investment`, `deposit`, `real_estate`, `loan`, `other`다.
- 사용자 입력 기반 평가값이 권위 소스가 되는 항목은 계좌 모델과 혼합 저장하지 않고 별도 엔티티로 유지해야 한다.
### FR-2. Asset snapshots history model
- `asset_snapshots`는 기준일 시점의 자산 평가 결과를 누적 저장해야 한다.
- 스냅샷은 계좌와 수기 자산 항목을 모두 담을 수 있는 항목 단위 구조를 수용해야 한다.
- 기존 스냅샷은 파괴적으로 덮어쓰지 않고 신규 행으로 누적해야 한다.
- 각 행은 최소한 기준일, 평가 대상 식별자, 평가 금액, `liquidity_bucket`, 평가 출처/메모를 보존해야 한다.
### FR-3. Valuation authority source rule
- 계좌 기반 자산은 기존 `accounts.last_balance`를 기본 평가 권위 소스로 사용해야 한다.
- 거래로 산출되지 않는 비거래 자산/부채는 `manual_assets`를 권위 소스로 사용해야 한다.
- 스냅샷은 위 권위 소스를 기준일 시점에 고정한 기록층이어야 하며, 실시간 권위 소스를 대체하는 별도 1차 입력원이 되어서는 안 된다.
- 동일 자산이 중복 집계되지 않도록 계좌 항목과 수기 자산 항목의 책임 경계를 정의해야 한다.
### FR-4. Net worth formula and exclusion policy
- 순자산은 자산성 버킷(`cash`, `investment`, `deposit`, `real_estate`, `other`) 합계에서 `loan` 부채를 차감해 계산해야 한다.
- 평가값이 없는 항목은 임의 거래 합계로 추정하지 않고 제외해야 한다.
- 제외된 항목은 후속 화면/응답 계층에서 설명 가능하도록 상태 또는 근거를 남길 수 있어야 한다.
### FR-5. Manual month-end snapshot policy
- 초기 운영 정책은 월말 수동 스냅샷 생성이어야 한다.
- 스냅샷 생성 흐름은 월말 마감 시점에 계좌 `last_balance`와 수기 자산 평가값을 함께 고정할 수 있어야 한다.
- 자동 생성/스케줄링은 후속 범위로 남긴다.
### FR-6. Baseline documentation alignment
- `docs/data-model.md`는 `asset_snapshots`, `manual_assets`, 권위 소스 우선순위, 순자산 산식을 반영해야 한다.
- 필요 시 `docs/project-structure.md`와 `docs/runtime-flows.md`에 데이터 모델 책임과 월말 스냅샷 흐름을 참조 수준으로 반영해야 한다.
## 5. Acceptance Criteria
- AC-1: 신규 DB/기존 DB 모두에서 `asset_snapshots`, `manual_assets`가 additive/idempotent migration으로 생성된다.
- AC-2: `manual_assets`는 이름, 평가값, 기준일, `liquidity_bucket`, 출처 메모를 저장할 수 있다.
- AC-3: `asset_snapshots`는 기준일, 평가 대상, 평가 금액, `liquidity_bucket`, 출처/메모를 누적 저장할 수 있다.
- AC-4: 계좌 기반 자산은 `last_balance`, 비거래 자산/부채는 `manual_assets`를 권위 소스로 사용하는 규칙이 구현/문서에 반영된다.
- AC-5: 순자산 계산이 자산성 합계 − `loan` 차감, 미평가 제외 규칙을 따른다.
- AC-6: 빈 신규 테이블 상태에서도 기존 `REQ-005` 대시보드 흐름이 깨지지 않는다.
- AC-7: `docs/data-model.md`와 필요 baseline 문서가 본 REQ 범위를 반영한다.
## 6. Impacted Area
- `jarca_ledger_mcp/db.py`
- `jarca_ledger_mcp/service.py`
- `docs/data-model.md`
- 필요 시 `docs/project-structure.md`
- 필요 시 `docs/runtime-flows.md`
## 7. Notes
- 이 REQ는 저장 구조/권위 소스/순자산 산식 같은 데이터 모델 책임을 다루므로 `Data` 타입으로 관리한다.
- 조회성 MCP 응답 계약과 대시보드 노출 shape는 `REQ-010`에서 다룬다.
- 실제 초기 수기 자산 목록은 구현 전 사용자가 입력해야 하며, 본 REQ는 그 입력 포맷과 저장 규칙을 다루는 수준으로 제한한다.
## 8. Change Log
- 2026-06-30 21:17 KST: dcy-008 confirmed 범위를 바탕으로 Proposed 초안을 생성.
- 2026-06-30 21:24 KST: dcy-008 confirmed 결정사항과 Acceptance Criteria를 재검토해 Approved로 전환.
- 2026-06-30 22:05 KST: BAT-008 구현·검증 evidence와 jarcaledgerqc PASS gate를 근거로 Implemented로 전환.