[verified] Implement account valuation history for issue 12
This commit is contained in:
@@ -117,6 +117,26 @@ def update_ledger_account(account_id: str, name: str | None = None, type: str |
|
||||
return contracts.update_ledger_account(account_id, name=name, type=type, institution=institution, currency=currency, active=active, memo=memo, account_number_masked=account_number_masked, holder_name=holder_name, last_balance=last_balance, last_synced_at=last_synced_at, statement_status=statement_status, liquidity_bucket=liquidity_bucket)
|
||||
|
||||
@mcp.tool()
|
||||
def register_account_valuation(account_id: str, basis_date: str, amount: int, currency: str = "KRW", valuation_kind: str = "balance", source_type: str = "manual", source_ref: str = "", verification_status: str = "unverified", memo: str = "", idempotency_key: str = "", as_of_at: str | None = None, timezone: str | None = None, cost_basis: int | None = None, net_contributed: int | None = None, reported_principal_kind: str | None = None, reported_principal_label: str | None = None, profit: int | None = None, return_rate: float | None = None, return_basis: str | None = None, principal: int | None = None, interest: int | None = None, fee: int | None = None, representative_liability_definition: str | None = None) -> dict:
|
||||
"""Register an append-only account valuation evidence row."""
|
||||
return contracts.register_account_valuation(account_id, basis_date, amount, currency, valuation_kind, source_type, source_ref, verification_status, memo, idempotency_key, as_of_at, timezone, cost_basis, net_contributed, reported_principal_kind, reported_principal_label, profit, return_rate, return_basis, principal, interest, fee, representative_liability_definition)
|
||||
|
||||
@mcp.tool()
|
||||
def list_account_valuations(account_id: str, include_rejected: bool = True) -> dict:
|
||||
"""List account valuation history."""
|
||||
return contracts.list_account_valuations(account_id, include_rejected=include_rejected)
|
||||
|
||||
@mcp.tool()
|
||||
def select_account_valuation(account_id: str, basis_date: str, as_of: bool = False, currency: str | None = None, valuation_kind: str | None = None) -> dict:
|
||||
"""Select an exact verified valuation or latest verified value as of a basis date."""
|
||||
return contracts.select_account_valuation(account_id, basis_date, as_of=as_of, currency=currency, valuation_kind=valuation_kind)
|
||||
|
||||
@mcp.tool()
|
||||
def correct_account_valuation(valuation_id: str, amount: int, correction_reason: str, idempotency_key: str = "", currency: str | None = None, valuation_kind: str | None = None, source_type: str | None = None, source_ref: str | None = None, verification_status: str | None = None, memo: str | None = None, as_of_at: str | None = None, timezone: str | None = None, cost_basis: int | None = None, net_contributed: int | None = None, reported_principal_kind: str | None = None, reported_principal_label: str | None = None, profit: int | None = None, return_rate: float | None = None, return_basis: str | None = None, principal: int | None = None, interest: int | None = None, fee: int | None = None, representative_liability_definition: str | None = None) -> dict:
|
||||
"""Append a reasoned correction to an account valuation."""
|
||||
fields = {k: v for k, v in locals().items() if k not in {"valuation_id", "amount", "correction_reason", "idempotency_key"} and v is not None}
|
||||
return contracts.correct_account_valuation(valuation_id, amount, correction_reason, idempotency_key=idempotency_key, **fields)
|
||||
@mcp.tool()
|
||||
def get_asset_liquidity_report() -> dict:
|
||||
"""Return asset liquidity, debt, and net worth from shared account/manual valuation sources."""
|
||||
return contracts.get_asset_liquidity_report()
|
||||
@@ -142,19 +162,19 @@ def deactivate_manual_asset(asset_id: str, hard_delete: bool = False) -> dict:
|
||||
return contracts.deactivate_manual_asset(asset_id, hard_delete=hard_delete)
|
||||
|
||||
@mcp.tool()
|
||||
def preview_asset_snapshot_close(basis_date: str = "") -> dict:
|
||||
def preview_asset_snapshot_close(basis_date: str = "", selection_policy: str = "exact") -> dict:
|
||||
"""Preview a month-end asset snapshot close without mutating the database."""
|
||||
return contracts.preview_asset_snapshot_close(basis_date=basis_date)
|
||||
return contracts.preview_asset_snapshot_close(basis_date=basis_date, selection_policy=selection_policy)
|
||||
|
||||
@mcp.tool()
|
||||
def close_asset_snapshot(basis_date: str = "", source_note: str = "", memo: str = "", correction_reason: str = "") -> dict:
|
||||
def close_asset_snapshot(basis_date: str = "", source_note: str = "", memo: str = "", correction_reason: str = "", selection_policy: str = "exact", idempotency_key: str = "", allow_missing_exclusions: bool = False, allow_as_of_carry_forward: bool = False, approved_by: str = "", approval_reason: str = "", approval_reference: str = "") -> dict:
|
||||
"""Close an asset snapshot for a basis date; same-date re-close appends correction rows."""
|
||||
return contracts.close_asset_snapshot(basis_date=basis_date, source_note=source_note, memo=memo, correction_reason=correction_reason)
|
||||
return contracts.close_asset_snapshot(basis_date=basis_date, source_note=source_note, memo=memo, correction_reason=correction_reason, selection_policy=selection_policy, idempotency_key=idempotency_key, allow_missing_exclusions=allow_missing_exclusions, allow_as_of_carry_forward=allow_as_of_carry_forward, approved_by=approved_by, approval_reason=approval_reason, approval_reference=approval_reference)
|
||||
|
||||
@mcp.tool()
|
||||
def get_asset_snapshot_report(basis_date: str = "") -> dict:
|
||||
def get_asset_snapshot_report(basis_date: str = "", selection_policy: str = "exact") -> dict:
|
||||
"""Return basis-date asset snapshot/net-worth report with live-authority fallback."""
|
||||
return contracts.get_asset_snapshot_report(basis_date=basis_date)
|
||||
return contracts.get_asset_snapshot_report(basis_date=basis_date, selection_policy=selection_policy)
|
||||
|
||||
@mcp.tool()
|
||||
def get_net_worth_timeseries(start_date: str = "", end_date: str = "", months: int = 12) -> dict:
|
||||
@@ -246,6 +266,11 @@ def get_monthly_cashflow_report(month: str = "") -> dict:
|
||||
"""Return income, expenses, net cashflow, and savings rate for a month."""
|
||||
return contracts.get_monthly_cashflow_report(month)
|
||||
|
||||
@mcp.tool()
|
||||
def get_monthly_settlement_summary(month: str = "") -> dict:
|
||||
"""Return the read-only monthly settlement summary."""
|
||||
return contracts.get_monthly_settlement_summary(month)
|
||||
|
||||
@mcp.tool()
|
||||
def get_category_spending_report(month: str = "", start_date: str = "", end_date: str = "", person: str = "") -> dict:
|
||||
"""Return category/subcategory spending for a month or date range."""
|
||||
|
||||
@@ -25,6 +25,11 @@ from ...service import (
|
||||
get_ledger_backup_status as get_ledger_backup_status,
|
||||
get_ledger_db_status as get_ledger_db_status,
|
||||
get_monthly_cashflow_report as get_monthly_cashflow_report,
|
||||
get_monthly_settlement_summary as get_monthly_settlement_summary,
|
||||
register_account_valuation as register_account_valuation,
|
||||
list_account_valuations as list_account_valuations,
|
||||
select_account_valuation as select_account_valuation,
|
||||
correct_account_valuation as correct_account_valuation,
|
||||
get_net_worth_timeseries as get_net_worth_timeseries,
|
||||
get_review_operating_indicators as get_review_operating_indicators,
|
||||
get_uncategorized_merchant_summary as get_uncategorized_merchant_summary,
|
||||
@@ -94,6 +99,11 @@ __all__ = [
|
||||
"get_ledger_backup_status",
|
||||
"get_ledger_db_status",
|
||||
"get_monthly_cashflow_report",
|
||||
"get_monthly_settlement_summary",
|
||||
"register_account_valuation",
|
||||
"list_account_valuations",
|
||||
"select_account_valuation",
|
||||
"correct_account_valuation",
|
||||
"get_net_worth_timeseries",
|
||||
"get_review_operating_indicators",
|
||||
"get_uncategorized_merchant_summary",
|
||||
|
||||
@@ -1,11 +1,19 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from ...service import (
|
||||
correct_account_valuation as correct_account_valuation,
|
||||
list_account_valuations as list_account_valuations,
|
||||
list_ledger_accounts as list_ledger_accounts,
|
||||
register_account_valuation as register_account_valuation,
|
||||
select_account_valuation as select_account_valuation,
|
||||
update_ledger_account as update_ledger_account,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"list_ledger_accounts",
|
||||
"update_ledger_account",
|
||||
"register_account_valuation",
|
||||
"list_account_valuations",
|
||||
"select_account_valuation",
|
||||
"correct_account_valuation",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user