Wire DocumentNumberSequence allocator, ledger-based subsidiary/detail reports, and posted-voucher reopen flow without mock ops forms. Co-authored-by: Cursor <cursoragent@cursor.com>
137 lines
6.3 KiB
Markdown
137 lines
6.3 KiB
Markdown
# 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 |
|