Wire sales/purchase posting, settlements, compliance, payroll employees, and ops edit flows; document the integration report. Co-authored-by: Cursor <cursoragent@cursor.com>
100 lines
3.7 KiB
TypeScript
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);
|
|
}
|