Appearance
Finance Statements and Reports
| Backlog field | Value |
|---|---|
| Story ID | AP-FIN-002 |
| Epic | Finance |
| Story type | Report |
| Review status | Draft - business analyst and business owner review required |
| Source evidence | AppsPortal.Apis controller, application command/query handlers, validators, domain entities, and matching MFE workflow where available |
| Last source review | 2026-07-10 |
User story
As finance managers, I want to review cash receipts, cash payments, treasury statements, bank statements, and reconciliation reports so that cash position and movements are auditable.
Acceptance criteria
- Only authorized users can view or execute the feature's actions.
- Required business data, active dependencies, tenant/branch scope, and current document state are validated.
- Invalid requests return actionable validation errors without applying a partial change.
- Search, list, view, print, and export operations use the same authorized business scope.
- Material create, edit, status, approval, posting, reversal, and integration actions are auditable where applicable.
- Financial or stock effects are applied atomically and no more than once.
Business rules
Required
Authorized date/period and statement target (treasury, bank, receipt, payment, or reconciliation) are required as applicable.
Optional or conditional
Status, party, method, currency, account, and branch are optional filters.
Action behavior
View/Print/Export are read-only and must match posted subledger/journal records.
Blocking rule or downstream effect
Opening, movement, and closing balances must reconcile for identical filters.
Frontend page coverage
The following UI coverage is sourced from the pulled MFE route configuration. A Module-level supporting artifact mapping is evidence of a reachable screen, but requires BA confirmation that it belongs to this story rather than a more specific feature story.
| Route/page | Component | Mode | Route permission/guard | Mapping confidence | Source |
|---|---|---|---|---|---|
| bank-account-statement | BankAccountStatementComponent | List/navigation | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/reports/reports.module.ts:15 |
| bank-account-statement/:id/:accountNumber | BankAccountStatementComponent | View/detail | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/reports/reports.module.ts:31 |
| cash-payment-report | CashPaymentComponent | Report/print | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/reports/reports.module.ts:47 |
| cash-receipts | PaymentInCashRecieptComponent | List/navigation | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/reports/reports.module.ts:63 |
| reconcilation | InvoiceReconcilationHistoryComponent | List/navigation | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/reports/reports.module.ts:23 |
| reports | Lazy-loaded route | Report/print | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/entry.routes.ts:32 |
| treasury-statement | TreasuryStatementComponent | List/navigation | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/reports/reports.module.ts:39 |
| treasury-statement/:id | TreasuryStatementComponent | View/detail | No route-level permission/guard found in source window | Feature token match | apps/finance/src/app/remote-entry/reports/reports.module.ts:55 |
Observed frontend fields and validation
| Component | Control | Observed frontend rule | Component source |
|---|---|---|---|
| BankAccountStatementComponent | bankAccountId | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| BankAccountStatementComponent | bankId | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| BankAccountStatementComponent | dateFrom | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| BankAccountStatementComponent | dateTo | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| CashPaymentComponent | BankAccountIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | BankPaymentHubDetailsIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | CustomerIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | FromDate | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | GlAccountIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | ToDate | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | TreasuryPaymentHubDetailsIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | VendorIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| InvoiceReconcilationHistoryComponent | customerId | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/invoice-reconcilation-history/invoice-reconcilation-history.component.ts |
| InvoiceReconcilationHistoryComponent | invoiceId | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/invoice-reconcilation-history/invoice-reconcilation-history.component.ts |
| PaymentInCashRecieptComponent | bankAccounts | Conditionally required/validated in component | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | customerIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | fromDate | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | GLAccountIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | paymentHubBankDetailsIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | paymentHubTreasuryDetailsIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | salesManIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | toDate | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | vendorIds | Visible control; optional or API-dependent | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| TreasuryStatementComponent | dateFrom | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/treasury-statement/treasury-statement.component.ts |
| TreasuryStatementComponent | dateTo | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/treasury-statement/treasury-statement.component.ts |
| TreasuryStatementComponent | treasuryId | Required in component validator | apps/finance/src/app/remote-entry/reports/pages/treasury-statement/treasury-statement.component.ts |
Observed frontend actions
| Component | Click action/handler | Business review requirement | Component source |
|---|---|---|---|
| BankAccountStatementComponent | getAccountingReports | Document the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler. | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| BankAccountStatementComponent | printTable | Generate the printout for the selected record and authorized branch/tenant; use posted/current values and surface print, template, ZATCA/ETA, or popup failures without changing transaction state. | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| BankAccountStatementComponent | routeToJournalView | Open the authorized record in view mode with its status, totals, lines, source and generated-document links; handle deleted, forbidden, and missing records without exposing stale data. | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| BankAccountStatementComponent | routeToPaymentView | Open the authorized record in view mode with its status, totals, lines, source and generated-document links; handle deleted, forbidden, and missing records without exposing stale data. | apps/finance/src/app/remote-entry/reports/pages/bank-account-statement/bank-account-statement.component.ts |
| CashPaymentComponent | print | Generate the printout for the selected record and authorized branch/tenant; use posted/current values and surface print, template, ZATCA/ETA, or popup failures without changing transaction state. | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | redirectInCodeById | Document the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler. | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| CashPaymentComponent | submit | Validate the concrete form and line collection, prevent duplicate submission, persist once, show API field/business errors in context, and navigate/refresh only after success. | apps/finance/src/app/remote-entry/reports/pages/cash-payment/cash-payment.component.ts |
| InvoiceReconcilationHistoryComponent | openCustomerDialog | Open the item/lookup/tracking dialog with the current warehouse, item, UOM, and remaining quantity context; accepted values must return to the correct line and cancel must not mutate it. | apps/finance/src/app/remote-entry/reports/pages/invoice-reconcilation-history/invoice-reconcilation-history.component.ts |
| InvoiceReconcilationHistoryComponent | openInvoiceDialog | Open the item/lookup/tracking dialog with the current warehouse, item, UOM, and remaining quantity context; accepted values must return to the correct line and cancel must not mutate it. | apps/finance/src/app/remote-entry/reports/pages/invoice-reconcilation-history/invoice-reconcilation-history.component.ts |
| InvoiceReconcilationHistoryComponent | printTable | Generate the printout for the selected record and authorized branch/tenant; use posted/current values and surface print, template, ZATCA/ETA, or popup failures without changing transaction state. | apps/finance/src/app/remote-entry/reports/pages/invoice-reconcilation-history/invoice-reconcilation-history.component.ts |
| InvoiceReconcilationHistoryComponent | viewData | Open the authorized record in view mode with its status, totals, lines, source and generated-document links; handle deleted, forbidden, and missing records without exposing stale data. | apps/finance/src/app/remote-entry/reports/pages/invoice-reconcilation-history/invoice-reconcilation-history.component.ts |
| PaymentInCashRecieptComponent | filter | Document the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler. | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | onRedirectToPaymentInId | Document the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler. | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| PaymentInCashRecieptComponent | printout | Generate the printout for the selected record and authorized branch/tenant; use posted/current values and surface print, template, ZATCA/ETA, or popup failures without changing transaction state. | apps/finance/src/app/remote-entry/reports/pages/payment-in-cash-reciept/payment-in-cash-reciept.component.ts |
| TreasuryStatementComponent | getReportData | Document the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler. | apps/finance/src/app/remote-entry/reports/pages/treasury-statement/treasury-statement.component.ts |
| TreasuryStatementComponent | printTable | Generate the printout for the selected record and authorized branch/tenant; use posted/current values and surface print, template, ZATCA/ETA, or popup failures without changing transaction state. | apps/finance/src/app/remote-entry/reports/pages/treasury-statement/treasury-statement.component.ts |
| TreasuryStatementComponent | routeToJournalView | Open the authorized record in view mode with its status, totals, lines, source and generated-document links; handle deleted, forbidden, and missing records without exposing stale data. | apps/finance/src/app/remote-entry/reports/pages/treasury-statement/treasury-statement.component.ts |
| TreasuryStatementComponent | routeToPaymentView | Open the authorized record in view mode with its status, totals, lines, source and generated-document links; handle deleted, forbidden, and missing records without exposing stale data. | apps/finance/src/app/remote-entry/reports/pages/treasury-statement/treasury-statement.component.ts |
Page-specific frontend acceptance criteria
- bank-account-statement - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: No route-level permission/guard found in source window
- bank-account-statement/:id/:accountNumber - View/detail: Load an authorized immutable/detail representation with status-aware actions, linked records, print/export where exposed, and not-found/forbidden handling. Security observed: No route-level permission/guard found in source window
- cash-payment-report - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: No route-level permission/guard found in source window
- cash-receipts - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: No route-level permission/guard found in source window
- reconcilation - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: No route-level permission/guard found in source window
- reports - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: No route-level permission/guard found in source window
- treasury-statement - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: No route-level permission/guard found in source window
- treasury-statement/:id - View/detail: Load an authorized immutable/detail representation with status-aware actions, linked records, print/export where exposed, and not-found/forbidden handling. Security observed: No route-level permission/guard found in source window