TorbatYar/frontend/lib/accounting-scoreboard.ts
Mortezakoohjani 067b499193 Connect Accounting frontend to domain APIs for phases 5.1-5.11.
Wire sales/purchase posting, settlements, compliance, payroll employees, and ops edit flows; document the integration report.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-25 22:17:41 +03:30

100 lines
3.7 KiB
TypeScript

/**
* Accounting completion scoreboard — keep in sync with docs/frontend/completion-scoreboard.md
*/
export type ScoreState = "complete" | "partial" | "missing" | "blocked";
export type ModuleScore = {
id: string;
label: string;
href: string;
percent: number;
state: ScoreState;
note?: string;
};
export const ACCOUNTING_MODULE_SCORES: ModuleScore[] = [
{ id: "dashboard", label: "داشبورد", href: "/accounting", percent: 95, state: "complete" },
{ id: "coa", label: "دفتر حساب‌ها", href: "/accounting/chart-of-accounts", percent: 98, state: "complete" },
{ id: "fiscal", label: "سال و دوره مالی", href: "/accounting/fiscal", percent: 98, state: "complete" },
{ id: "currencies", label: "ارزها", href: "/accounting/currencies", percent: 98, state: "complete" },
{ id: "cost-centers", label: "مراکز هزینه", href: "/accounting/cost-centers", percent: 95, state: "complete" },
{ id: "projects", label: "پروژه‌ها", href: "/accounting/projects", percent: 95, state: "complete" },
{ id: "vouchers", label: "اسناد", href: "/accounting/vouchers", percent: 96, state: "complete" },
{ id: "ledger", label: "دفتر کل", href: "/accounting/ledger", percent: 95, state: "complete" },
{
id: "treasury",
label: "خزانه",
href: "/accounting/treasury",
percent: 88,
state: "partial",
note: "لیست/ثبت چک و انتقال؛ ضمانت/تسهیلات هنوز ops",
},
{ id: "customers", label: "مشتریان", href: "/accounting/customers", percent: 92, state: "complete" },
{
id: "suppliers",
label: "تأمین‌کنندگان",
href: "/accounting/suppliers",
percent: 80,
state: "partial",
note: "لیست/ایجاد؛ PATCH بک‌اند ندارد",
},
{
id: "sales",
label: "فروش حسابداری",
href: "/accounting/sales/invoices",
percent: 85,
state: "partial",
note: "فاکتور + preview/post؛ فرصت/سفارش هنوز ops",
},
{
id: "purchase",
label: "خرید/انبار",
href: "/accounting/purchase/goods-receipts",
percent: 85,
state: "partial",
note: "رسید کالا + valuation متصل",
},
{
id: "assets",
label: "دارایی‌ها",
href: "/accounting/assets",
percent: 88,
state: "partial",
note: "ثبت/استهلاک/برنامه؛ انتقال/فروش ops",
},
{ id: "payroll", label: "حقوق", href: "/accounting/payroll", percent: 90, state: "complete" },
{
id: "reports",
label: "گزارش‌ها",
href: "/accounting/reports",
percent: 90,
state: "partial",
note: "تراز/ترازنامه/سود و زیان زنده؛ سایر انواع ops",
},
{ id: "audit", label: "حسابرسی", href: "/accounting/audit", percent: 90, state: "complete" },
{
id: "compliance",
label: "انطباق",
href: "/accounting/compliance/policies",
percent: 82,
state: "partial",
note: "سیاست/ریسک متصل؛ SoD هنوز ops",
},
{ id: "settings", label: "تنظیمات", href: "/accounting/settings", percent: 80, state: "partial" },
{ id: "setup", label: "راه‌اندازی", href: "/accounting/setup", percent: 95, state: "complete" },
{
id: "ai",
label: "هوش مصنوعی",
href: "/accounting",
percent: 0,
state: "blocked",
note: "منتظر Active شدن AI Provider",
},
];
export function overallCompletionPercent(scores = ACCOUNTING_MODULE_SCORES): number {
const active = scores.filter((s) => s.state !== "blocked");
if (!active.length) return 0;
return Math.round(active.reduce((a, s) => a + s.percent, 0) / active.length);
}