Skip to content

Customer Reports

Backlog fieldValue
Story IDAP-SAL-002
EpicSales
Story typeReport
Review statusDraft - business analyst and business owner review required
Source evidenceAppsPortal.Apis controller, application command/query handlers, validators, domain entities, and matching MFE workflow where available
Last source review2026-07-10

User story

As credit and sales managers, I want to review balances, statements, aging, follow-up, and profitability so that customer exposure and value can be analyzed.

Acceptance criteria

  1. Only authorized users can view or execute the feature's actions.
  2. Required business data, active dependencies, tenant/branch scope, and current document state are validated.
  3. Invalid requests return actionable validation errors without applying a partial change.
  4. Search, list, view, print, and export operations use the same authorized business scope.
  5. Material create, edit, status, approval, posting, reversal, and integration actions are auditable where applicable.
  6. Financial or stock effects are applied atomically and no more than once.

Business rules

Required

Date/as-of period and authorized customer scope are required as applicable.

Optional or conditional

Customer/category, currency, aging buckets, salesperson, status, and branch are optional filters.

Action behavior

Balance/statement/aging/follow-up/profitability reports are read-only.

Blocking rule or downstream effect

Opening plus posted invoices minus returns/payments/reconciliations must equal closing balance.

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/pageComponentModeRoute permission/guardMapping confidenceSource
customer-aging-detail-reportCustomerAgingDetailsReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:44
customer-aging-reportCustomerAgingReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:37
customer-aging-report-printCustomerAgingReportPrintComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:52
customer-balance-reportCustomerBalanceReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:29
customer-invoices-follow-up-reportCustomerInvoiceFollowUpReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:68
customer-profitability-reportCustomerProfitabilityReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:101
customer-statement-reportCustomerReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:21
item-profitability-reportItemProfitabilityReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:109
reportsLazy-loaded routeReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/entry.routes.ts:18
sales-invoice-reportSalesInvoiceReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:60
salesman-target&commissiondetail-reportSalesCommissionReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:85
salesman-target&commissiondetail-report/:idSalesCommissionReportComponentReport/printNo route-level permission/guard found in source windowFeature token matchapps/sales/src/app/remote-entry/reports/reports.module.ts:93

Observed frontend fields and validation

ComponentControlObserved frontend ruleComponent source
CustomerAgingDetailsReportComponentBucketsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingDetailsReportComponentCustomerIdRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingDetailsReportComponentsalesManIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingDetailsReportComponentToDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingReportComponentCustomerIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-aging-report/customer-aging-report.component.ts
CustomerAgingReportComponentsalesManIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-aging-report/customer-aging-report.component.ts
CustomerAgingReportComponentShowZeroValuesVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-aging-report/customer-aging-report.component.ts
CustomerAgingReportComponentToDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-aging-report/customer-aging-report.component.ts
CustomerBalanceReportComponentCustomerIdsRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerBalanceReportComponentFromDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerBalanceReportComponentSalesManIdVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerBalanceReportComponentToDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerInvoiceFollowUpReportComponentCustomerCategoryIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentCustomerIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentFromDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentToDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerProfitabilityReportComponentcustomerIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerProfitabilityReportComponentfromDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerProfitabilityReportComponentinvoiceIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerProfitabilityReportComponentsalesManIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerProfitabilityReportComponenttoDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerReportComponentCustomerIdRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-report/customer-report.component.ts
CustomerReportComponentfromDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-report/customer-report.component.ts
CustomerReportComponenttoDateRequired in component validatorapps/sales/src/app/remote-entry/reports/pages/customer-report/customer-report.component.ts
ItemProfitabilityReportComponentcategoryIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentcustomerIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentfromDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentinvoiceHeaderIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentitemIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentsalesManIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponenttoDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentwarehouseIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
SalesCommissionReportComponentcustomerIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesCommissionReportComponentfromDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesCommissionReportComponentsalesManIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesCommissionReportComponenttoDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesInvoiceReportFiltersComponentcustomerIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/components/sales-invoice-report-filters/sales-invoice-report-filters.component.ts
SalesInvoiceReportFiltersComponentfromDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/components/sales-invoice-report-filters/sales-invoice-report-filters.component.ts
SalesInvoiceReportFiltersComponentpaymentTermIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/components/sales-invoice-report-filters/sales-invoice-report-filters.component.ts
SalesInvoiceReportFiltersComponentsalesmanIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/components/sales-invoice-report-filters/sales-invoice-report-filters.component.ts
SalesInvoiceReportFiltersComponentstatusesVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/components/sales-invoice-report-filters/sales-invoice-report-filters.component.ts
SalesInvoiceReportFiltersComponenttoDateVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/components/sales-invoice-report-filters/sales-invoice-report-filters.component.ts
SalesInvoiceReportFiltersComponentwarehouseIdsVisible control; optional or API-dependentapps/sales/src/app/remote-entry/reports/components/sales-invoice-report-filters/sales-invoice-report-filters.component.ts

Observed frontend actions

ComponentClick action/handlerBusiness review requirementComponent source
CustomerAgingDetailsReportComponentonPrintGenerate 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/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingDetailsReportComponentonRouteToTransactionDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingDetailsReportComponentrouteToCustomerDefDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingDetailsReportComponentviewDataOpen 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/sales/src/app/remote-entry/reports/pages/customer-aging-details-report/customer-aging-details-report.component.ts
CustomerAgingReportComponentonPrintGenerate 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/sales/src/app/remote-entry/reports/pages/customer-aging-report/customer-aging-report.component.ts
CustomerAgingReportComponentonViewOpen 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/sales/src/app/remote-entry/reports/pages/customer-aging-report/customer-aging-report.component.ts
CustomerAgingReportComponentviewDataOpen 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/sales/src/app/remote-entry/reports/pages/customer-aging-report/customer-aging-report.component.ts
CustomerBalanceReportComponentonRouteToCustomerDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerBalanceReportComponentprintTableGenerate 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/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerBalanceReportComponentviewDataOpen 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/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerBalanceReportComponentviewStatementOpen 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/sales/src/app/remote-entry/reports/pages/customer-balance-report/customer-balance-report.component.ts
CustomerInvoiceFollowUpReportComponentprintOutGenerate 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/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentrouteToCustomerDefDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentrouteToInvoiceDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentrouteToJournalEntryViewOpen 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/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentrouteToSalesOrderDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentrouteToStockOutNavigate only when the transaction produced a linked Stock In/Stock Out record and Inventory view permission is available; service-only/no-stock cases expose no stock link.apps/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerInvoiceFollowUpReportComponentviewDataOpen 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/sales/src/app/remote-entry/reports/pages/customer-invoice-follow-up-report/customer-invoice-follow-up-report.component.ts
CustomerProfitabilityReportComponentonInvoiceClickDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerProfitabilityReportComponentonPrintGenerate 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/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerProfitabilityReportComponentonViewDataOpen 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/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerProfitabilityReportComponentresetFiltersDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-profitability-report/customer-profitability-report.component.ts
CustomerReportComponentonRouteToJournalEntryNavigate only when a linked journal ID exists and the user can view Accounting; otherwise the action is absent/disabled and no transaction data changes.apps/sales/src/app/remote-entry/reports/pages/customer-report/customer-report.component.ts
CustomerReportComponentonRouteToTransactionDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/customer-report/customer-report.component.ts
CustomerReportComponentonViewDataOpen 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/sales/src/app/remote-entry/reports/pages/customer-report/customer-report.component.ts
CustomerReportComponentprintTableGenerate 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/sales/src/app/remote-entry/reports/pages/customer-report/customer-report.component.ts
ItemProfitabilityReportComponentonPrintGenerate 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/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentonViewReportOpen 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/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentopenItemsDialogOpen 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/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentresetFiltersDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentrouteToCustomerDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentrouteToInvoiceDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
ItemProfitabilityReportComponentrouteToWarehouseDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/item-profitability-report/item-profitability-report.component.ts
SalesCommissionReportComponentonPrintGenerate 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/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesCommissionReportComponentonRouteToInvoiceDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesCommissionReportComponentonRouteToReturnInvoiceDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesCommissionReportComponentviewDataOpen 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/sales/src/app/remote-entry/reports/pages/sales-commission-report/sales-commission-report.component.ts
SalesInvoiceReportComponentonPrintGenerate 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/sales/src/app/remote-entry/reports/pages/sales-invoice-report/sales-invoice-report.component.ts
SalesInvoiceReportComponentonRouteToJournalEntryNavigate only when a linked journal ID exists and the user can view Accounting; otherwise the action is absent/disabled and no transaction data changes.apps/sales/src/app/remote-entry/reports/pages/sales-invoice-report/sales-invoice-report.component.ts
SalesInvoiceReportComponentonRouteToSalesInvoiceDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/sales/src/app/remote-entry/reports/pages/sales-invoice-report/sales-invoice-report.component.ts
SalesInvoiceReportComponentonRouteToStockOutNavigate only when the transaction produced a linked Stock In/Stock Out record and Inventory view permission is available; service-only/no-stock cases expose no stock link.apps/sales/src/app/remote-entry/reports/pages/sales-invoice-report/sales-invoice-report.component.ts
SalesInvoiceReportComponentonViewDataOpen 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/sales/src/app/remote-entry/reports/pages/sales-invoice-report/sales-invoice-report.component.ts

Page-specific frontend acceptance criteria

  1. customer-aging-detail-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
  2. customer-aging-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
  3. customer-aging-report-print - 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
  4. customer-balance-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
  5. customer-invoices-follow-up-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
  6. customer-profitability-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
  7. customer-statement-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
  8. item-profitability-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
  9. 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
  10. sales-invoice-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
  11. salesman-target&commissiondetail-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
  12. salesman-target&commissiondetail-report/:id - 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

Internal Documentation — Microtec