"""Finance routes. Moved from app.admin_dashboard in v4.7.2. The handlers still reuse legacy helpers to keep this refactor behavior-preserving. """ from fastapi import APIRouter import app.admin_dashboard as legacy from app.admin_dashboard import * # noqa: F401,F403 router = APIRouter() @router.get("/finance", response_class=HTMLResponse) @router.get("/financeiro", response_class=HTMLResponse) async def finance_page(q: Optional[str] = None): finance_tasks = list_tasks(status=None, route="financeiro", q=q, limit=200) finance_actions = {"SEND_PROFORMA", "SEND_INVOICE", "CONFIRM_PAYMENT"} finance_tasks = [t for t in finance_tasks if str(t.get("action_code") or "") in finance_actions or str(t.get("route") or "") == "financeiro"] opportunities = list_opportunities(status="all", q=q, limit=300) payment_opps = [o for o in opportunities if str(o.get("stage") or "") in {"PROFORMA_REQUESTED", "PROFORMA_SENT", "INVOICE_REQUESTED", "INVOICE_SENT", "WAITING_PAYMENT", "PAYMENT_CONFIRMED"}] rows = "" for task in finance_tasks[:80]: tid = str(task.get("id") or "") customer = customer_display(task) code = str(task.get("action_code") or "") rows += f""" {esc(action_label(code))}
{esc(code)}
{esc(customer)}
{esc(task.get('customer_email') or '')}
{status_badge(task.get('status'))} {esc(task.get('created_at') or '—')} Abrir """ if not rows: rows = 'Sem tarefas financeiras.' body = f"""
{kpi_card('Tarefas financeiras', len(finance_tasks), '/finance', 'ativas/histórico', 'bi-list-check')} {kpi_card('A aguardar pagamento', sum(1 for o in payment_opps if str(o.get('stage')) == 'WAITING_PAYMENT'), '/opportunities', 'oportunidades', 'bi-hourglass-split', 'cf-kpi-tone-orange')} {kpi_card('Pendentes', sum(1 for t in finance_tasks if str(t.get('status')) == 'pending'), '/tasks?status=pending&route=financeiro', 'abrir tarefas', 'bi-list-check')} {kpi_card('Pagamentos confirmados', sum(1 for o in payment_opps if str(o.get('stage')) == 'PAYMENT_CONFIRMED'), '/opportunities', 'seguir para envio', 'bi-check2-circle', 'cf-kpi-tone-green')}
Limpar

Financeiro operacional

Pró-formas, faturas e pagamentos a tratar.
{rows}
AçãoClienteEstadoCriada
""" return layout("Financeiro", "O que falta faturar ou confirmar?", body, "finance")