fix: address account valuation review findings

This commit is contained in:
2026-10-07 00:12:45 +00:00
parent 6a8a27a74e
commit f25b30c750
23 changed files with 1506 additions and 62 deletions
+17 -5
View File
@@ -30,6 +30,12 @@ ACCOUNT_TYPE_STYLES = {
"other": "#57606a",
}
def _account_balance_basis_date(account: dict[str, Any]) -> str:
"""Return only an explicit evidence date, never a sync timestamp."""
return str(account.get("last_balance_basis_date") or "")[:10]
def render_accounts_list_header(items: list[dict[str, Any]]) -> None:
st.markdown(
f'{len(items)}개 계좌',
@@ -113,14 +119,19 @@ def account_edit_dialog(account: dict[str, Any], db_path: str) -> None:
format_func=lambda value: ACCOUNT_TYPE_LABELS[value],
)
balance_columns = st.columns(2)
balance_columns = st.columns(3)
last_balance_raw = balance_columns[0].text_input(
"기준 잔액",
value="" if account.get("last_balance") is None else str(account.get("last_balance")),
help="원 단위 정수",
)
last_synced_at = balance_columns[1].text_input(
"기준 시각",
last_balance_basis_date = balance_columns[1].text_input(
"잔액 기준일",
value=account.get("last_balance_basis_date") or "",
help="실제 증빙 기준일(YYYY-MM-DD). 미상인 경우 비워 둡니다.",
)
last_synced_at = balance_columns[2].text_input(
"동기화 시각",
value=account.get("last_synced_at") or "",
help="예: 2026-08-20 또는 2026-08-20T23:59:00+09:00",
)
@@ -156,6 +167,7 @@ def account_edit_dialog(account: dict[str, Any], db_path: str) -> None:
institution=institution,
type=account_type,
last_balance=last_balance,
last_balance_basis_date=last_balance_basis_date,
last_synced_at=last_synced_at,
statement_status=statement_status,
liquidity_bucket=liquidity_bucket,
@@ -184,7 +196,7 @@ def page_accounts(db_path: str) -> None:
st.dataframe(valuations, width="stretch", hide_index=True)
# The list is historical insertion order; a rejected/corrected
# tail is not necessarily the effective current valuation.
basis = (selected_account.get("last_synced_at") or "")[:10]
basis = _account_balance_basis_date(selected_account)
selected = accounts_gateway.select_account_valuation(selected_id, basis, as_of=True, db_path=db_path) if basis else {}
selected_valuation = selected.get("valuation") if selected.get("success") else None
latest = selected_valuation or next(
@@ -195,7 +207,7 @@ def page_accounts(db_path: str) -> None:
st.warning("평가 이력이 없습니다.")
with st.expander("계좌 평가 등록"):
with st.form(f"account_valuation_register_{selected_id}"):
v_date = st.text_input("평가 기준일", value=selected_account.get("last_synced_at", "")[:10])
v_date = st.text_input("평가 기준일", value=_account_balance_basis_date(selected_account))
v_amount = st.number_input("평가 금액", value=int(selected_account.get("last_balance") or 0), step=1)
default_kind = "loan_balance" if selected_account.get("type") == "loan" else ("total_value" if selected_account.get("type") == "investment" else "cash_balance")
v_kind = st.selectbox("평가 종류", ["cash_balance", "balance", "total_value", "loan_balance", "loan"], index=["cash_balance", "balance", "total_value", "loan_balance", "loan"].index(default_kind))