Skip to content

Preprint Templates

Backlog fieldValue
Story IDAP-TPL-001
EpicDynamic Templates
Story typeMaster data / configuration
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 application administrators, I want to manage seeded and reusable preprint templates so that new tenants start from controlled template defaults.

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

Supported document type, template identity/content, and seed/version information are required.

Optional or conditional

Tenant customization and alternate layouts are optional.

Action behavior

Seeding creates controlled defaults without overwriting tenant-edited templates unless an explicit migration says so.

Blocking rule or downstream effect

Preprint management has no financial or stock effect.

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
(module default)LayoutPageComponentList/navigationGuards: AuthGuard, moduleLicenseGuardFeature token matchapps/templates/src/app/remote-entry/routes.ts:21
(module default)ReportTemplatesListComponentReport/printPermission: AppTemplatesPermissions.ReportTemplates_List; Guards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/report-templates/report-templates-routing.module.ts:19
(module default)ReportTemplatesMainComponentReport/printPermission: AppTemplatesPermissions.ReportTemplates_List; Guards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/report-templates/report-templates-routing.module.ts:11
addReportTemplatesSelectComponentReport/printPermission: AppTemplatesPermissions.ReportTemplates_Add; Guards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/report-templates/report-templates-routing.module.ts:29
edit/:templateId/:screenConfigIdReportBuilderComponentReport/printPermission: AppTemplatesPermissions.ReportTemplates_Edit; Guards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/report-templates/report-templates-routing.module.ts:61
edit/:templateId/:screenConfigId/:presetIdReportBuilderComponentReport/printPermission: AppTemplatesPermissions.ReportTemplates_Edit; Guards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/report-templates/report-templates-routing.module.ts:72
loginLogoutComponent }List/navigationGuards: AuthGuard, moduleLicenseGuardFeature token matchapps/templates/src/app/remote-entry/routes.ts:15
login-redirectLogoutRedirectComponent }List/navigationGuards: AuthGuard, moduleLicenseGuardFeature token matchapps/templates/src/app/remote-entry/routes.ts:17
logoutLoginRedirectComponent }List/navigationGuards: AuthGuard, moduleLicenseGuardFeature token matchapps/templates/src/app/remote-entry/routes.ts:16
logout-redirectUnAuthorizedComponent }List/navigationGuards: AuthGuard, moduleLicenseGuardFeature token matchapps/templates/src/app/remote-entry/routes.ts:18
report-templatesLazy-loaded routeReport/printGuards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/routes.ts:30
un-authorizedLayoutPageComponentList/navigationGuards: AuthGuard, moduleLicenseGuardFeature token matchapps/templates/src/app/remote-entry/routes.ts:19
view/:templateId/:screenConfigIdReportBuilderComponentReport/printPermission: AppTemplatesPermissions.ReportTemplates_View; Guards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/report-templates/report-templates-routing.module.ts:83
view/:templateId/:screenConfigId/:presetIdReportBuilderComponentReport/printPermission: AppTemplatesPermissions.ReportTemplates_View; Guards: PolicyAuthGuardFeature token matchapps/templates/src/app/remote-entry/report-templates/report-templates-routing.module.ts:94

Observed frontend fields and validation

ComponentControlObserved frontend ruleComponent source
ReportBuilderComponentalignmentVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentbackgroundColorVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentboldVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentcolorVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentcolumnKeyVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentdescriptionVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentfontColorVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentfontFamilyVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentfontSizeVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentfooterEmailVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentfooterWebsiteVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentheaderBackgroundColorVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentheaderBoldVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentheaderFontColorVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentheaderFontFamilyVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentheaderFontSizeVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentisDefaultVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentisDescendingVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentitalicVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentnameRequired in component validatorapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentnotesVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentnumberFormatVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentopacityVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentoperatorVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentpageNameVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowClientNameVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowCompanyInfoVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowCustomerInfoVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowDateVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowFooterVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowFooterLogoVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowInvoiceNoVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowLogoVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowMainInfoVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowQrVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowRefundNoVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentshowStatusVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentsignatureEnabledVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentsignatureLabelVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponenttextVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponenttypeVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentvalueVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentvalueToVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentwidthVisible control; optional or API-dependentapps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportTemplatesSelectComponentscreenIdRequired in component validatorapps/templates/src/app/remote-entry/report-templates/pages/report-templates-select/report-templates-select.component.ts

Observed frontend actions

ComponentClick action/handlerBusiness review requirementComponent source
ReportBuilderComponentaddAggregationRowDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentaddColumnRowDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentaddFilterRowDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentaddGroupRowDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentaddSortRowDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentprintPreviewOpen 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/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentremoveAggregationAvailable only in deletable states with Delete permission; identify the record in confirmation, call delete once, remove/refresh the list row on success, and retain the row with the API reason on failure.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentremoveColumnAvailable only in deletable states with Delete permission; identify the record in confirmation, call delete once, remove/refresh the list row on success, and retain the row with the API reason on failure.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentremoveFilterAvailable only in deletable states with Delete permission; identify the record in confirmation, call delete once, remove/refresh the list row on success, and retain the row with the API reason on failure.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentremoveGroupAvailable only in deletable states with Delete permission; identify the record in confirmation, call delete once, remove/refresh the list row on success, and retain the row with the API reason on failure.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentremoveSortAvailable only in deletable states with Delete permission; identify the record in confirmation, call delete once, remove/refresh the list row on success, and retain the row with the API reason on failure.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentresetPreviewZoomOpen 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/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponenttoggleColumnStyleDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponenttoggleSectionDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentzoomInPreviewOpen 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/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportBuilderComponentzoomOutPreviewOpen 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/templates/src/app/remote-entry/report-templates/pages/report-builder/report-builder.component.ts
ReportTemplatesListComponentonDeleteAvailable only in deletable states with Delete permission; identify the record in confirmation, call delete once, remove/refresh the list row on success, and retain the row with the API reason on failure.apps/templates/src/app/remote-entry/report-templates/pages/report-templates-list/report-templates-list.component.ts
ReportTemplatesListComponentonEditOpen the identified editable record only with Edit permission; posted/locked records remain blocked by route or action state and list context must be recoverable on return.apps/templates/src/app/remote-entry/report-templates/pages/report-templates-list/report-templates-list.component.ts
ReportTemplatesListComponentonViewOpen 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/templates/src/app/remote-entry/report-templates/pages/report-templates-list/report-templates-list.component.ts
ReportTemplatesSelectComponentonBackLeave or close without persisting; warn when the current form has unsaved changes and restore the prior list/filter context.apps/templates/src/app/remote-entry/report-templates/pages/report-templates-select/report-templates-select.component.ts
ReportTemplatesSelectComponentonCancelLeave or close without persisting; warn when the current form has unsaved changes and restore the prior list/filter context.apps/templates/src/app/remote-entry/report-templates/pages/report-templates-select/report-templates-select.component.ts
ReportTemplatesSelectComponentonNextDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-templates-select/report-templates-select.component.ts
ReportTemplatesSelectComponentonSelectPresetDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/templates/src/app/remote-entry/report-templates/pages/report-templates-select/report-templates-select.component.ts

Page-specific frontend acceptance criteria

  1. (module default) - 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: Guards: AuthGuard, moduleLicenseGuard
  2. (module default) - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: Permission: AppTemplatesPermissions.ReportTemplates_List; Guards: PolicyAuthGuard
  3. add - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: Permission: AppTemplatesPermissions.ReportTemplates_Add; Guards: PolicyAuthGuard
  4. edit/:templateId/:screenConfigId - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: Permission: AppTemplatesPermissions.ReportTemplates_Edit; Guards: PolicyAuthGuard
  5. edit/:templateId/:screenConfigId/:presetId - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: Permission: AppTemplatesPermissions.ReportTemplates_Edit; Guards: PolicyAuthGuard
  6. login - 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: Guards: AuthGuard, moduleLicenseGuard
  7. login-redirect - 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: Guards: AuthGuard, moduleLicenseGuard
  8. logout - 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: Guards: AuthGuard, moduleLicenseGuard
  9. logout-redirect - 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: Guards: AuthGuard, moduleLicenseGuard
  10. report-templates - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: Guards: PolicyAuthGuard
  11. un-authorized - 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: Guards: AuthGuard, moduleLicenseGuard
  12. view/:templateId/:screenConfigId - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: Permission: AppTemplatesPermissions.ReportTemplates_View; Guards: PolicyAuthGuard
  13. view/:templateId/:screenConfigId/:presetId - Report/print: Expose documented filters, validation, empty/loading/error states, authorized results, totals, drill-through, print, and export behavior where present. Security observed: Permission: AppTemplatesPermissions.ReportTemplates_View; Guards: PolicyAuthGuard

Internal Documentation — Microtec