uchihamadara1816's picture
Upload 172 files
d02bacd verified
from __future__ import annotations
import pandas as pd
from subenvs.autodatalab.analytics import clean_orders, monthly_revenue
from ..models import ExpertReport
from .finance_tools import break_even, compute_variance, project_next_quarter
_FINANCE_QUERY = (
"finance forecasting next quarter projection confidence band "
"variance plan_value favorable unfavorable break-even unit_margin fixed_cost"
)
class FinanceExpert:
expert_id = "finance"
def run(
self,
task_name: str,
question: str,
raw_df: pd.DataFrame,
analyst_metrics: dict,
task_meta: dict,
focused: bool = False,
use_rag: bool = False,
) -> ExpertReport:
cleaned = clean_orders(raw_df).df
monthly = monthly_revenue(cleaned)
projection = project_next_quarter(monthly)
variance = compute_variance(float(analyst_metrics.get("total_revenue", 0.0)), float(task_meta.get("plan_value", 1.0)))
be = break_even(float(task_meta.get("fixed_cost", 10000.0)), float(task_meta.get("unit_margin", 500.0)))
metrics = {
**projection,
**variance,
**be,
}
bullets = [
f"Next-quarter revenue projection is {metrics['projection_next_quarter']:.2f} with +/- {metrics['confidence_band']:.2f} band.",
f"Variance versus plan is {metrics['variance_abs']:.2f} ({metrics['variance_pct']:.2f}%).",
f"Break-even sits at {metrics['break_even_units']:.2f} units.",
]
memory_citations: list[str] = []
memory_snippets: list[str] = []
summary = (
f"Finance projects next quarter at {metrics['projection_next_quarter']:.2f} and "
f"marks performance as {metrics['variance_flag']} plan."
)
if use_rag:
from memory import get_retriever
hits = get_retriever().query(_FINANCE_QUERY, k=2)
memory_citations = [h.as_citation() for h in hits]
memory_snippets = [h.snippet for h in hits]
if hits:
summary = summary + f" Following SOP {hits[0].source.split('#')[0]}."
bullets.append(
f"SOP alignment: {hits[0].source.split('#')[0]} (score {hits[0].score:.2f})."
)
return ExpertReport(
expert_id="finance",
title="Finance Forecast",
summary=summary,
metrics=metrics,
bullet_points=bullets,
citations=list(monthly['Month'].astype(str).tail(3)),
memory_citations=memory_citations,
memory_snippets=memory_snippets,
)