Wire DocumentNumberSequence allocator, ledger-based subsidiary/detail reports, and posted-voucher reopen flow without mock ops forms. Co-authored-by: Cursor <cursoragent@cursor.com>
6.3 KiB
6.3 KiB
Accounting Frontend Completion Report
Date: 2026-07-25
Mission: Business workflow audit & UI completion (no architecture redesign, no mocks)
Scope: Entire Accounting frontend underfrontend/app/accounting
Executive summary
Audited 118 accounting routes against the full sidebar and existing /api/v1 surface. Replaced generic BusinessDocsPage stubs with either:
- Domain workflow screens backed by thin APIs on existing ORM models, or
- SpecializedOpsPage typed forms (real
/opspersistence) 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 /transfersGET/POST /disposalsGET/POST /revaluations
Payroll (/api/v1/payroll)
GET/POST /contractsGET/POST /salary-componentsGET /payrolls
Compliance (/api/v1/compliance)
GET/POST /workflowsGET /approvals(approve/reject already existed)GET/POST /governance-rules(SoD)GET/POST /controlsGET/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
MoneyInputthousand separators - Party/item lookups use
PartyCombobox/ItemComboboxon 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
staleTimeon 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.tsxfrontend/components/accounting/SpecializedOpsPage.tsxfrontend/components/accounting/EntityCombobox.tsxfrontend/components/ds/FormControls.tsx(MoneyInput)backend/services/accounting/app/api/v1/{fixed_assets,payroll,compliance}.pydocs/frontend/accounting-menu-qa.mdscripts/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 |