"""cf info — сводка всей финансовой модели.""" import typer from rich.table import Table from domain import CurrencyConverter from infrastructure.cli.i18n import t from infrastructure.cli.services import console, load_model app = typer.Typer() @app.command() def info() -> None: """Сводка всей финансовой модели""" model = load_model() converter = CurrencyConverter(model.exchange_rates) symbol = converter.get_symbol(model.base_currency) console.print(f"[bold]{t('cmd.info.metadata')}[/bold]") console.print(f" {t('cmd.info.base_currency', currency=model.base_currency, symbol=symbol)}") console.print(f" {t('cmd.info.accounts', count=len(model.accounts))}") console.print(f" {t('cmd.info.transactions', count=len(model.transactions))}") console.print(f" {t('cmd.info.recurring', count=len(model.recurring))}") console.print(f" {t('cmd.info.assets', count=len(model.assets))}") console.print(f" {t('cmd.info.liabilities', count=len(model.liabilities))}") console.print(f" {t('cmd.info.rates', count=len(model.exchange_rates))}") if model.accounts: tbl = Table(title=t("table.accounts.title")) tbl.add_column(t("table.accounts.col.name"), style="cyan") tbl.add_column(t("table.accounts.col.currency")) tbl.add_column(t("table.accounts.col.balance"), justify="right") for a in model.accounts: tbl.add_row(a.name, a.currency, f"{a.balance:,.2f}") console.print(tbl) if model.transactions: tbl = Table(title=t("table.transactions.title")) tbl.add_column(t("table.transactions.col.date")) tbl.add_column(t("table.transactions.col.category")) tbl.add_column(t("table.transactions.col.amount"), justify="right") tbl.add_column(t("table.transactions.col.description")) for tx in model.transactions[:10]: tbl.add_row(tx.date, tx.category, f"{tx.amount:,.2f}", tx.description) if len(model.transactions) > 10: console.print(tbl) console.print(t("cmd.info.more", count=len(model.transactions) - 10)) else: console.print(tbl) if model.recurring: tbl = Table(title=t("table.recurring.title")) tbl.add_column(t("table.recurring.col.period")) tbl.add_column(t("table.recurring.col.amount"), justify="right") tbl.add_column(t("table.recurring.col.category")) for r in model.recurring: tbl.add_row(r.frequency, f"{r.amount:,.2f}", r.category) console.print(tbl) if model.assets: tbl = Table(title=t("table.assets.title")) tbl.add_column(t("table.assets.col.name"), style="cyan") tbl.add_column(t("table.assets.col.value"), justify="right") tbl.add_column(t("table.assets.col.growth"), justify="right") for a in model.assets: tbl.add_row(a.name, f"{a.value:,.2f}", f"{a.growth_rate:.1f}%") console.print(tbl) if model.liabilities: tbl = Table(title=t("table.liabilities.title")) tbl.add_column(t("table.liabilities.col.name"), style="cyan") tbl.add_column(t("table.liabilities.col.balance"), justify="right") tbl.add_column(t("table.liabilities.col.rate"), justify="right") tbl.add_column(t("table.liabilities.col.payment"), justify="right") for li in model.liabilities: tbl.add_row(li.name, f"{li.balance:,.2f}", f"{li.interest:.1f}%", f"{li.payment:,.2f}") console.print(tbl)