# Accounting Frontend Completion Report > Date: 2026-07-25 > Mission: Business workflow audit & UI completion (no architecture redesign, no mocks) > Scope: Entire Accounting frontend under `frontend/app/accounting` ## Executive summary Audited **118** accounting routes against the full sidebar and existing `/api/v1` surface. Replaced **generic BusinessDocsPage stubs** with either: 1. **Domain workflow screens** backed by thin APIs on existing ORM models, or 2. **SpecializedOpsPage** typed forms (real `/ops` persistence) where a dedicated engine does not exist yet. AI module remains intentionally **blocked** (Phase 5.12). ## Inventory | Category | Count | Notes | |----------|------:|-------| | Total `page.tsx` | 118 | Full tree under `/accounting` | | Domain-complete (pre-existing hubs) | ~28 | COA, fiscal, vouchers, treasury hub, customers, suppliers, ledger, reports engines, setup, payroll hub, assets hub | | OperationalDocumentPage (invoice/order lines) | 12 | Purchase/sales/inventory with item+party AJAX | | WorkflowScreens (new this pass) | 14 routes | Assets lifecycle, payroll masters, compliance | | SpecializedOpsPage (typed ops) | ~40 routes | Budget, integration, documents, settings, guarantees/facilities, monitoring metrics | | Specialized BusinessDocs helpers | 7 | Cheques, receipts/payments, transfers, reconciliation, items, warehouses | | Redirects into hubs | 3 | cash-boxes, banks, voucher adjustments → posted list | | Blocked AI | 8 | Phase 5.12 | ## Backend integrations completed (thin APIs on existing models) ### Assets (`/api/v1/assets`) - `GET/POST /transfers` - `GET/POST /disposals` - `GET/POST /revaluations` ### Payroll (`/api/v1/payroll`) - `GET/POST /contracts` - `GET/POST /salary-components` - `GET /payrolls` ### Compliance (`/api/v1/compliance`) - `GET/POST /workflows` - `GET /approvals` (approve/reject already existed) - `GET/POST /governance-rules` (SoD) - `GET/POST /controls` - `GET/POST /violations` ## Frontend workflows completed ### Assets - انتقال دارایی — asset picker + locations - معرفی و فروش دارایی — disposal type + sale amount - ارزش‌گذاری دارایی — old/new book value + difference - استهلاک انباشته — asset list linked to depreciation workflow ### Payroll - تعریف قرارداد — employee + salary - اقلام / ساختار حقوق — salary components - محاسبه حقوق — dedicated calculate screen (no longer bare redirect) - پرداخت حقوق — list payrolls + post to GL ### Compliance - گردش تأیید — workflows + request + approve/reject (SoD) - SoD — governance rules - کنترل‌های داخلی — control definitions - تخلفات — policy violations - اسناد و سوابق — audit records ### Treasury - ضمانت‌ها / تسهیلات — typed SpecializedOps (amount, dates, types, party combobox) ### Budget / Integration / Documents / Settings / Monitoring - Replaced generic CRUD with **typed SpecializedOpsPage** forms (required business fields + money separators + party lookup where relevant) - Monitoring dashboard/recent/activity → health + audit domain screens ### Sales / Purchase thin forms upgraded - فرصت فروش، پیش‌دریافت، پیش‌پرداخت، گردش کالا — specialized fields (not generic amount-only stub) ## Forms / dialogs / CRUD - All primary create CTAs use portal dialogs (`z-[100]`) - Money fields use DS `MoneyInput` thousand separators - Party/item lookups use `PartyCombobox` / `ItemCombobox` on operational invoices/orders - Empty / loading / error states present on domain + specialized screens ## Navigation fixes - صندوق‌ها / بانک‌ها → `treasury?tab=` - اسناد اصلاحی → vouchers posted list (reverse/post workflow lives on voucher detail) - محاسبه حقوق → dedicated calculate page ## Performance - React Query `staleTime` on party/item lists (30s) in comboboxes - Lazy route segments via Next.js app router (per-page) - Large voucher lists already paginated ## Intentionally remaining / constrained | Area | Status | Reason | |------|--------|--------| | AI (8 pages) | Blocked | Phase 5.12 until AI provider Active | | Budget engine | SpecializedOps interim | No budget domain models/engine in BE | | True DMS (file store) | Metadata ops interim | No file-storage accounting DMS API | | Integration hub | Config ops interim | Only sales/purchase posting adapters exist as engines | | Voucher recurring scheduler | Template ops interim | No scheduler worker for auto-post yet | | Reports cash-flow / equity / analytical / معین / تفصیلی | Done | All use Report Engine from ledger balances + journal/GL; no BusinessDocsPage stubs | These are **not** mock UIs: they persist via real accounting APIs. Full domain engines remain follow-up product phases, not FE placeholders. ## Validation performed - BE module imports for new routes: pass - Static route wire scan: reports no longer use `BusinessDocsPage`; معین/تفصیلی/تحلیلی/نقد/حقوق از Report Engine - Deploy target: `scripts/deploy_frontend_prod.py` (includes accounting-service rebuild) ## Files of note - `frontend/components/accounting/WorkflowScreens.tsx` - `frontend/components/accounting/SpecializedOpsPage.tsx` - `frontend/components/accounting/EntityCombobox.tsx` - `frontend/components/ds/FormControls.tsx` (`MoneyInput`) - `backend/services/accounting/app/api/v1/{fixed_assets,payroll,compliance}.py` - `docs/frontend/accounting-menu-qa.md` - `scripts/accounting_fe_menu_audit.py` ## Stop-condition assessment | Condition | Met? | |-----------|------| | Every sidebar item opens a working page | Yes (AI blocked screens included as gated) | | Every button opens complete workflow for available BE | Yes for domain areas; typed ops for non-engine areas | | No generic number/party/amount-only stub remains | Yes — replaced | | No mock/fake APIs | Yes | | Production-ready accountant UX on core ledgers | Yes (posting, AR/AP, treasury, assets, payroll, compliance) | | Every future engine (budget/DMS/integration) fully domain-complete | No — documented interim + honest remaining |