Skip to content

Asset Master Data

Backlog fieldValue
Story IDAP-FA-003
EpicFixed Assets
Story typeBusiness workflow
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 asset accountants, I want to maintain asset groups, assets, locations, useful life, and accounting defaults so that each controlled asset has a complete financial identity.

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.

Configuration hierarchy

An asset requires code/name, asset group, location/custody context, acquisition data, useful life/depreciation method and start data where depreciable, currency/local value, and active/status data. Serial/reference, supplier, notes, attachments, item linkage, and asset-specific account overrides are conditional.

Account priority used by sales/disposal/returns is asset-level account first, then asset-group account. Profit/Loss additionally falls back to Fixed Assets General Settings Assets Sales P/L account. Missing required Asset, Accumulated Depreciation, Expense, or P/L account blocks the relevant Post.

Master edits affect future calculations only; posted purchase, depreciation, transfer, sale, or disposal history remains unchanged.

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)GeneralSettingComponentList/navigationPermission: AppFixedAssetsPermissions.FixedAssetsGeneralSettings_Edit , AppFixedAssetsPermissions.FixedAssetsGeneralSettings_View; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/general-settings/general-settings-routing.module.ts:17
(module default)ListAssetsDefinitionsComponentList/navigationPermission: AppFixedAssetsPermissions.AssetsDefault_List,; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/assets-definitions-routing.module.ts:27
(module default)ListAssetsGroupsComponentList/navigationPermission: AppFixedAssetsPermissions.FixedAssetsGroups_List; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/assets-groups-routing.module.ts:21
(module default)MainAssetsDefinitionsComponentList/navigationPermission: AppFixedAssetsPermissions.AssetsDefault_List,; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/assets-definitions-routing.module.ts:19
(module default)MainAssetsGroupsComponentList/navigationPermission: AppFixedAssetsPermissions.FixedAssetsGroups_List; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/assets-groups-routing.module.ts:13
(module default)MainGeneralSettingsComponentList/navigationPermission: AppFixedAssetsPermissions.FixedAssetsGeneralSettings_Edit , AppFixedAssetsPermissions.FixedAssetsGeneralSettings_View; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/general-settings/general-settings-routing.module.ts:9
(module default)TreeAssetsLocationComponentList/navigationPermission: AppFixedAssetsPermissions.AssetsLocation_List; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-location/assets-location-routing.module.ts:8
addAddAssetsGroupsComponentAddPermission: AppFixedAssetsPermissions.FixedAssetsGroups_Add; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/assets-groups-routing.module.ts:31
assets-definitionsLazy-loaded routeList/navigationNo route-level permission/guard found in source windowFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/masterdata-routing.module.ts:10
assets-groupsLazy-loaded routeList/navigationNo route-level permission/guard found in source windowFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/masterdata-routing.module.ts:5
assets-locationsLazy-loaded routeList/navigationNo route-level permission/guard found in source windowFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/masterdata-routing.module.ts:17
edit/:idEditAssetsDefinitionsComponentEditPermission: AppFixedAssetsPermissions.AssetsDefault_Edit,; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/assets-definitions-routing.module.ts:40
edit/:idEditAssetsGroupsComponentEditPermission: AppFixedAssetsPermissions.FixedAssetsGroups_Edit; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/assets-groups-routing.module.ts:41
general-settingsLazy-loaded routeList/navigationNo route-level permission/guard found in source windowFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/masterdata-routing.module.ts:22
import/:errorTypeListFileComponentImportPermission: AppFixedAssetsPermissions.AssetsDefault_Add,; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/assets-definitions-routing.module.ts:74
sequenceSequenceComponentSequenceNo route-level permission/guard found in source windowFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/assets-definitions-routing.module.ts:64
sequenceSequenceComponentSequenceNo route-level permission/guard found in source windowFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/assets-groups-routing.module.ts:61
sequenceSequenceComponentSequenceNo route-level permission/guard found in source windowFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-location/assets-location-routing.module.ts:18
view/:idViewAssetsDefinitionsComponentView/detailPermission: AppFixedAssetsPermissions.AssetsDefault_View,; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/assets-definitions-routing.module.ts:52
view/:idViewAssetsGroupsComponentView/detailPermission: AppFixedAssetsPermissions.FixedAssetsGroups_View; Guards: PolicyAuthGuardFeature token matchapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/assets-groups-routing.module.ts:51

Observed frontend fields and validation

ComponentControlObserved frontend ruleComponent source
AssetsGroupsComponentaccumulatedDepreciationAccountIdVisible control; optional or API-dependentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentassetAccountIdVisible control; optional or API-dependentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentassetExpenseAccountIdVisible control; optional or API-dependentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentdepreciationMethodConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentdepreciationRateConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentisDepreciateConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentnameRequired in component validatorapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentplAccountIdVisible control; optional or API-dependentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentsalvageValueConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
AssetsGroupsComponentusefulLifeConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-groups/component/assets-groups/assets-groups.component.ts
EditAssetsDefinitionsComponentassetGroupIdRequired in component validatorapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/edit-assets-definitions/edit-assets-definitions.component.ts
EditAssetsDefinitionsComponentbarcodeVisible control; optional or API-dependentapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/edit-assets-definitions/edit-assets-definitions.component.ts
EditAssetsDefinitionsComponentdepreciationMethodConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/edit-assets-definitions/edit-assets-definitions.component.ts
EditAssetsDefinitionsComponentdepreciationRateConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/edit-assets-definitions/edit-assets-definitions.component.ts
EditAssetsDefinitionsComponentnameRequired in component validatorapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/edit-assets-definitions/edit-assets-definitions.component.ts
EditAssetsDefinitionsComponentsalvageValueConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/edit-assets-definitions/edit-assets-definitions.component.ts
EditAssetsDefinitionsComponentusefulLifeConditionally required/validated in componentapps/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/edit-assets-definitions/edit-assets-definitions.component.ts
GeneralSettingComponentassetsDisposalAccountIdVisible control; optional or API-dependentapps/fixedAssets/src/app/remote-entry/master-data/general-settings/pages/general-settings/general-setting.component.ts
GeneralSettingComponentassetsSalesPLAccountIdVisible control; optional or API-dependentapps/fixedAssets/src/app/remote-entry/master-data/general-settings/pages/general-settings/general-setting.component.ts

Observed frontend actions

ComponentClick action/handlerBusiness review requirementComponent source
AddAssetsLocationsComponentonCancelLeave or close without persisting; warn when the current form has unsaved changes and restore the prior list/filter context.apps/fixedAssets/src/app/remote-entry/master-data/assets-location/component/add-assets-locations/add-assets-locations.component.ts
AddAssetsLocationsComponentsaveValidate 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/fixedAssets/src/app/remote-entry/master-data/assets-location/component/add-assets-locations/add-assets-locations.component.ts
EditAssetsLocationsComponentonCancelLeave or close without persisting; warn when the current form has unsaved changes and restore the prior list/filter context.apps/fixedAssets/src/app/remote-entry/master-data/assets-location/component/edit-assets-locations/edit-assets-locations.component.ts
EditAssetsLocationsComponentsaveValidate 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/fixedAssets/src/app/remote-entry/master-data/assets-location/component/edit-assets-locations/edit-assets-locations.component.ts
ListAssetsDefinitionsComponentonDeleteAvailable 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/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/list-assets-definitions/list-assets-definitions.component.ts
ListAssetsDefinitionsComponentonEditOpen 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/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/list-assets-definitions/list-assets-definitions.component.ts
ListAssetsDefinitionsComponentonViewOpen 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/fixedAssets/src/app/remote-entry/master-data/assets-definitions/pages/list-assets-definitions/list-assets-definitions.component.ts
ListAssetsGroupsComponentonDeleteAvailable 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/fixedAssets/src/app/remote-entry/master-data/assets-groups/pages/list-assets-groups/list-assets-groups.component.ts
ListAssetsGroupsComponentonEditOpen 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/fixedAssets/src/app/remote-entry/master-data/assets-groups/pages/list-assets-groups/list-assets-groups.component.ts
ListAssetsGroupsComponentonViewOpen 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/fixedAssets/src/app/remote-entry/master-data/assets-groups/pages/list-assets-groups/list-assets-groups.component.ts
TreeAssetsLocationComponentaddChildDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/fixedAssets/src/app/remote-entry/master-data/assets-location/pages/tree-assets-location/tree-assets-location.component.ts
TreeAssetsLocationComponentdeleteAccountAvailable 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/fixedAssets/src/app/remote-entry/master-data/assets-location/pages/tree-assets-location/tree-assets-location.component.ts
TreeAssetsLocationComponenteditAccountOpen 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/fixedAssets/src/app/remote-entry/master-data/assets-location/pages/tree-assets-location/tree-assets-location.component.ts
TreeAssetsLocationComponenthandleTabClickDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/fixedAssets/src/app/remote-entry/master-data/assets-location/pages/tree-assets-location/tree-assets-location.component.ts
TreeAssetsLocationComponentnewChildDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/fixedAssets/src/app/remote-entry/master-data/assets-location/pages/tree-assets-location/tree-assets-location.component.ts
TreeAssetsLocationComponenttoggelTreeDocument the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler.apps/fixedAssets/src/app/remote-entry/master-data/assets-location/pages/tree-assets-location/tree-assets-location.component.ts
ViewAssetsLocationsComponentrouteToEditOpen 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/fixedAssets/src/app/remote-entry/master-data/assets-location/component/view-assets-locations/view-assets-locations.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: Permission: AppFixedAssetsPermissions.FixedAssetsGroups_List; Guards: PolicyAuthGuard
  2. add - Add: Render permitted fields, required indicators, defaults, dependent lookups, validation, Save/Cancel, loading, success, and API-error states. Security observed: Permission: AppFixedAssetsPermissions.FixedAssetsGroups_Add; Guards: PolicyAuthGuard
  3. assets-definitions - 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
  4. assets-groups - 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
  5. assets-locations - 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
  6. edit/:id - Edit: Load the identified record, enforce state/permission field locks, preserve concurrency identity, validate changes, and return without losing filters. Security observed: Permission: AppFixedAssetsPermissions.FixedAssetsGroups_Edit; Guards: PolicyAuthGuard
  7. general-settings - 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
  8. import/:errorType - Import: Provide template/download and upload flow, file/type/size validation, row-level preview/errors, confirmation, duplicate policy, and partial-failure rules. Security observed: Permission: AppFixedAssetsPermissions.AssetsDefault_Add,; Guards: PolicyAuthGuard
  9. sequence - Sequence: Show current numbering scope and permit only authorized, valid sequence configuration without retroactively renumbering posted documents. Security observed: No route-level permission/guard found in source window
  10. view/: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: Permission: AppFixedAssetsPermissions.FixedAssetsGroups_View; Guards: PolicyAuthGuard

Internal Documentation — Microtec