Add engagement margin reporting
This commit is contained in:
parent
33883e0977
commit
8338c501ed
10 changed files with 397 additions and 8 deletions
|
|
@ -17,9 +17,11 @@ from fin_hub.services.alerts import evaluate_budget_alerts
|
|||
from fin_hub.services.evaluate import evaluate_runway
|
||||
from fin_hub.services.evidence import write_runway_evidence
|
||||
from fin_hub.services.ledger import (
|
||||
client_margin_report,
|
||||
default_ledger_path,
|
||||
import_csv,
|
||||
ledger_stats_json,
|
||||
record_engagement_price,
|
||||
set_opening_balance,
|
||||
)
|
||||
from fin_hub.services.runway import compute_runway
|
||||
|
|
@ -125,6 +127,28 @@ def _cmd_ledger_set_balance(args: argparse.Namespace) -> int:
|
|||
return 0
|
||||
|
||||
|
||||
def _cmd_ledger_set_price(args: argparse.Namespace) -> int:
|
||||
price = record_engagement_price(
|
||||
client_id=args.client,
|
||||
application_id=args.application,
|
||||
app_instance_id=args.instance,
|
||||
period_month=args.period,
|
||||
amount=args.amount,
|
||||
currency=args.currency,
|
||||
source=args.source,
|
||||
revision_of=args.revision_of,
|
||||
ledger_path=_ledger_path(args),
|
||||
)
|
||||
print(json.dumps(price.__dict__, indent=2))
|
||||
return 0
|
||||
|
||||
|
||||
def _cmd_ledger_margins(args: argparse.Namespace) -> int:
|
||||
rows = client_margin_report(ledger_path=_ledger_path(args))
|
||||
print(json.dumps([row.as_dict() for row in rows], indent=2))
|
||||
return 0
|
||||
|
||||
|
||||
def _cmd_evaluate(args: argparse.Namespace) -> int:
|
||||
report = evaluate_runway(
|
||||
ledger_path=_ledger_path(args),
|
||||
|
|
@ -217,6 +241,26 @@ def build_parser() -> argparse.ArgumentParser:
|
|||
ledger_balance.add_argument("--ledger", help="Ledger database path (default: .fin-hub/ledger.db)")
|
||||
ledger_balance.set_defaults(func=_cmd_ledger_set_balance)
|
||||
|
||||
ledger_price = ledger_sub.add_parser(
|
||||
"set-price", help="Record or revise an engagement price for a reporting period"
|
||||
)
|
||||
ledger_price.add_argument("--client", required=True)
|
||||
ledger_price.add_argument("--application", required=True)
|
||||
ledger_price.add_argument("--instance", required=True)
|
||||
ledger_price.add_argument("--period", required=True, help="Reporting month in YYYY-MM")
|
||||
ledger_price.add_argument("--amount", required=True, type=float)
|
||||
ledger_price.add_argument("--currency", default="EUR")
|
||||
ledger_price.add_argument("--source", required=True)
|
||||
ledger_price.add_argument("--revision-of")
|
||||
ledger_price.add_argument("--ledger", help="Ledger database path")
|
||||
ledger_price.set_defaults(func=_cmd_ledger_set_price)
|
||||
|
||||
ledger_margins = ledger_sub.add_parser(
|
||||
"margins", help="Report revenue, attributed cost, and margin by engagement"
|
||||
)
|
||||
ledger_margins.add_argument("--ledger", help="Ledger database path")
|
||||
ledger_margins.set_defaults(func=_cmd_ledger_margins)
|
||||
|
||||
evaluate = sub.add_parser(
|
||||
"evaluate",
|
||||
help="Evaluate runway from ledger burns (cron/systemd friendly)",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue