Appearance
Inventory General Settings
| Backlog field | Value |
|---|---|
| Story ID | INV-DASH-003 |
| Epic | Inventory |
| Story type | Dashboard |
| Review status | Draft - business analyst and business owner review required |
| Source evidence | Inventory MFE route/form, Inventory.Apis controller, application command/query handlers, validators, domain entities, and posting services |
| Last source review | 2026-07-10 |
Purpose
Control default valuation, warehouse, tax, slow-moving, and accounting behavior for Inventory.
User stories
- As an inventory administrator, I want to choose the costing/valuation method and default warehouse so that transactions use consistent defaults.
- As a tax administrator, I want to control inventory VAT and selling-price VAT behavior so that tax is calculated consistently.
- As an accountant, I want to assign inventory control accounts so that posting produces valid journals.
- As a manager, I want to set the slow-moving-day threshold so that the report follows company policy.
Configured values
- Costing evaluation method
- Default warehouse
- VAT applied and default tax
- Selling price includes VAT
- Minimum slow-moving days
- Cost of goods sold account
- General purchase account
- Goods in transit account
- Adjustment account
- Re-evaluation account
- Item revenue account
Acceptance criteria
- Authorized viewers can read settings; only users with edit permission can change them.
- VAT-dependent fields are required only when VAT is enabled.
- Referenced warehouses, taxes, and accounts must be active and valid for their intended usage.
- A setting change affects future calculations/transactions and does not silently rewrite posted history.
- The system warns or blocks operational workflows when mandatory general settings are incomplete.
- Save is atomic: either the full valid settings set is stored or no partial update is applied.
Required, optional, and conditional data
- Costing Evaluation Method is required because Stock Out, Transfer, and Reconciliation valuation use it.
- Branch ID is optional and indicates branch-scoped settings where supported.
- Default Warehouse is optional as storage but required for workflows that depend on a default.
- VAT Applied and Selling Price Includes VAT are switches. Tax and Tax Ratio are conditional when VAT is enabled.
- Minimum Slow-Moving Days is required/non-negative for report classification.
- COGS, General Purchase, Goods in Transit, Adjustment, Re-evaluation, and Items Revenue accounts are nullable at configuration time but become mandatory in the transactions that consume them.
Confirmed consumers
| Setting | Confirmed effect |
|---|---|
| Costing Evaluation Method | Chooses Weighted Average or Last Purchase cost for transfers, counts, and stock valuation lookups. |
| COGS | Sales Invoice Stock Out, Sales Return Stock In, and current reconciliation shortage. |
| Goods in Transit | Purchase/transfer/default internal Stock In/Out counterpart. |
| Minimum Slow-Moving Days | Slow-Moving Items classification unless an item-specific value overrides it. |
| VAT/tax defaults | Defaults item and transaction tax behavior; item-level configuration may override. |
| Default Warehouse | Preselects warehouse in applicable workflows; user authorization still applies. |
| Adjustment/Re-evaluation/General Purchase/Items Revenue | Used by their specific accounting flows; presence alone does not make them a fallback for every post. |
Changing settings affects future posting/calculation. Existing posted journals, stock costs, tax snapshots, and printed documents remain 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/page | Component | Mode | Route permission/guard | Mapping confidence | Source |
|---|---|---|---|---|---|
| general/:id | ItemDefinitionGeneralComponent | View/detail | Permission: AppInventoryPermissions.Items_Edit; Guards: PolicyAuthGuard | Feature token match | apps/inventory/src/app/remote-entry/items/items.module.ts:101 |
| general-setting | GeneralSettingInvComponent | List/navigation | Permission: AppInventoryPermissions.InventoryGeneralSettings_Edit,AppInventoryPermissions.InventoryGeneralSettings_View; Guards: PolicyAuthGuard | Feature token match | apps/inventory/src/app/remote-entry/items/items.module.ts:442 |
| general-setting/general-form | GeneralSettingInvComponent | List/navigation | Permission: AppInventoryPermissions.InventoryGeneralSettings_Edit,AppInventoryPermissions.InventoryGeneralSettings_View; Guards: PolicyAuthGuard | Feature token match | apps/inventory/src/app/remote-entry/items/items.module.ts:447 |
Observed frontend fields and validation
| Component | Control | Observed frontend rule | Component source |
|---|---|---|---|
| GeneralSettingInvComponent | adjustmentAccountId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | costingEvaluationMethod | Required in component validator | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | costOfGoodsSoldAccountId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | defaultWarehouseId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | generalPurchaseAccountId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | goodsInTransitAccountId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | isSellingPriceIncludeVat | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | isVatApplied | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | itemsRevenueAccountId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | minSlowMovingDays | Required in component validator | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | reEvaluationAccountId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| GeneralSettingInvComponent | taxId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/general-setting-inv/general-setting-inv.component.ts |
| ItemDefinitionGeneralComponent | categoryId | Required in component validator | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | code | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | color | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | countryId | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | etaCode | Conditionally required/validated in component | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | etaCodeType | Conditionally required/validated in component | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | lifeTime | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | maxDiscount | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | minSlowMovingDays | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | name | Required in component validator | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | nameAr | Required in component validator | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | photo | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | shortName | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | specialCare | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | tags | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | warranty | Visible control; optional or API-dependent | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
Observed frontend actions
| Component | Click action/handler | Business review requirement | Component source |
|---|---|---|---|
| ItemDefinitionGeneralComponent | onCancel | Leave or close without persisting; warn when the current form has unsaved changes and restore the prior list/filter context. | apps/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
| ItemDefinitionGeneralComponent | onSave | 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/inventory/src/app/remote-entry/items/pages/item-definition/item-definition-general/item-definition-general.component.ts |
Page-specific frontend acceptance criteria
- general/: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: AppInventoryPermissions.Items_Edit; Guards: PolicyAuthGuard
- general-setting - 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: AppInventoryPermissions.InventoryGeneralSettings_Edit,AppInventoryPermissions.InventoryGeneralSettings_View; Guards: PolicyAuthGuard
- general-setting/general-form - 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: AppInventoryPermissions.InventoryGeneralSettings_Edit,AppInventoryPermissions.InventoryGeneralSettings_View; Guards: PolicyAuthGuard