@tailor-platform/erp-kit 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +8 -4
- package/dist/cli.mjs +70 -70
- package/package.json +1 -1
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +5 -5
- package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -1
- package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +37 -12
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +3 -1
- package/skills/erp-kit-app-6-impl-frontend/references/component.md +90 -0
- package/skills/erp-kit-app-6-impl-frontend/references/detail-view.md +255 -0
- package/skills/erp-kit-app-6-impl-frontend/references/pages.md +1 -5
- package/skills/erp-kit-app-7-impl-review/SKILL.md +3 -2
- package/skills/erp-kit-app-7-impl-review/references/module-wiring-parity.md +14 -8
- package/skills/erp-kit-module-6-impl-review/SKILL.md +16 -19
- package/skills/erp-kit-module-shared/references/commands.md +68 -1
- package/src/commands/index.ts +8 -2
- package/src/commands/init.test.ts +24 -8
- package/src/commands/init.ts +5 -12
- package/src/commands/lib/distribute.test.ts +1 -20
- package/src/commands/lib/distribute.ts +0 -14
- package/src/commands/update.test.ts +1 -1
- package/src/generator/scaffold.ts +25 -4
- package/src/module.ts +4 -1
- package/src/modules/accounting/README.md +63 -0
- package/src/modules/accounting/command/activateBudget.generated.ts +6 -0
- package/src/modules/accounting/command/activateBudget.test.ts +119 -0
- package/src/modules/accounting/command/activateBudget.ts +77 -0
- package/src/modules/accounting/command/activateCostElement.generated.ts +6 -0
- package/src/modules/accounting/command/activateCostElement.test.ts +59 -0
- package/src/modules/accounting/command/activateCostElement.ts +41 -0
- package/src/modules/accounting/command/activateProfitCenter.generated.ts +6 -0
- package/src/modules/accounting/command/activateProfitCenter.test.ts +60 -0
- package/src/modules/accounting/command/activateProfitCenter.ts +38 -0
- package/src/modules/accounting/command/approveBudget.generated.ts +6 -0
- package/src/modules/accounting/command/approveBudget.test.ts +69 -0
- package/src/modules/accounting/command/approveBudget.ts +47 -0
- package/src/modules/accounting/command/assignCostCenterToHierarchyNode.generated.ts +6 -0
- package/src/modules/accounting/command/assignCostCenterToHierarchyNode.test.ts +112 -0
- package/src/modules/accounting/command/assignCostCenterToHierarchyNode.ts +67 -0
- package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.generated.ts +6 -0
- package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.test.ts +123 -0
- package/src/modules/accounting/command/assignProfitCenterToHierarchyNode.ts +71 -0
- package/src/modules/accounting/command/closeBudget.generated.ts +6 -0
- package/src/modules/accounting/command/closeBudget.test.ts +93 -0
- package/src/modules/accounting/command/closeBudget.ts +40 -0
- package/src/modules/accounting/command/closeInternalOrder.generated.ts +6 -0
- package/src/modules/accounting/command/closeInternalOrder.test.ts +74 -0
- package/src/modules/accounting/command/closeInternalOrder.ts +38 -0
- package/src/modules/accounting/command/consumeCommitment.generated.ts +6 -0
- package/src/modules/accounting/command/consumeCommitment.test.ts +123 -0
- package/src/modules/accounting/command/consumeCommitment.ts +62 -0
- package/src/modules/accounting/command/createAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/createAllocationCycle.test.ts +166 -0
- package/src/modules/accounting/command/createAllocationCycle.ts +68 -0
- package/src/modules/accounting/command/createAllocationRule.generated.ts +6 -0
- package/src/modules/accounting/command/createAllocationRule.test.ts +195 -0
- package/src/modules/accounting/command/createAllocationRule.ts +103 -0
- package/src/modules/accounting/command/createBudget.generated.ts +6 -0
- package/src/modules/accounting/command/createBudget.test.ts +159 -0
- package/src/modules/accounting/command/createBudget.ts +100 -0
- package/src/modules/accounting/command/createBudgetLineItem.generated.ts +6 -0
- package/src/modules/accounting/command/createBudgetLineItem.test.ts +178 -0
- package/src/modules/accounting/command/createBudgetLineItem.ts +104 -0
- package/src/modules/accounting/command/createCostCenter.generated.ts +6 -0
- package/src/modules/accounting/command/createCostCenter.test.ts +179 -0
- package/src/modules/accounting/command/createCostCenter.ts +112 -0
- package/src/modules/accounting/command/createCostCenterHierarchy.generated.ts +6 -0
- package/src/modules/accounting/command/createCostCenterHierarchy.test.ts +91 -0
- package/src/modules/accounting/command/createCostCenterHierarchy.ts +48 -0
- package/src/modules/accounting/command/createCostCenterHierarchyNode.generated.ts +6 -0
- package/src/modules/accounting/command/createCostCenterHierarchyNode.test.ts +171 -0
- package/src/modules/accounting/command/createCostCenterHierarchyNode.ts +117 -0
- package/src/modules/accounting/command/createCostElement.generated.ts +6 -0
- package/src/modules/accounting/command/createCostElement.test.ts +317 -0
- package/src/modules/accounting/command/createCostElement.ts +149 -0
- package/src/modules/accounting/command/createInternalOrder.generated.ts +6 -0
- package/src/modules/accounting/command/createInternalOrder.test.ts +206 -0
- package/src/modules/accounting/command/createInternalOrder.ts +104 -0
- package/src/modules/accounting/command/createPlanVersion.generated.ts +6 -0
- package/src/modules/accounting/command/createPlanVersion.test.ts +230 -0
- package/src/modules/accounting/command/createPlanVersion.ts +71 -0
- package/src/modules/accounting/command/createProfitCenter.generated.ts +6 -0
- package/src/modules/accounting/command/createProfitCenter.test.ts +227 -0
- package/src/modules/accounting/command/createProfitCenter.ts +81 -0
- package/src/modules/accounting/command/createProfitCenterHierarchy.generated.ts +6 -0
- package/src/modules/accounting/command/createProfitCenterHierarchy.test.ts +91 -0
- package/src/modules/accounting/command/createProfitCenterHierarchy.ts +46 -0
- package/src/modules/accounting/command/createProfitCenterHierarchyNode.generated.ts +6 -0
- package/src/modules/accounting/command/createProfitCenterHierarchyNode.test.ts +160 -0
- package/src/modules/accounting/command/createProfitCenterHierarchyNode.ts +109 -0
- package/src/modules/accounting/command/deactivateCostElement.generated.ts +6 -0
- package/src/modules/accounting/command/deactivateCostElement.test.ts +59 -0
- package/src/modules/accounting/command/deactivateCostElement.ts +41 -0
- package/src/modules/accounting/command/deactivateProfitCenter.generated.ts +6 -0
- package/src/modules/accounting/command/deactivateProfitCenter.test.ts +60 -0
- package/src/modules/accounting/command/deactivateProfitCenter.ts +42 -0
- package/src/modules/accounting/command/deleteAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/deleteAllocationCycle.test.ts +90 -0
- package/src/modules/accounting/command/deleteAllocationCycle.ts +39 -0
- package/src/modules/accounting/command/deleteAllocationRule.generated.ts +6 -0
- package/src/modules/accounting/command/deleteAllocationRule.test.ts +98 -0
- package/src/modules/accounting/command/deleteAllocationRule.ts +40 -0
- package/src/modules/accounting/command/deleteBudget.generated.ts +6 -0
- package/src/modules/accounting/command/deleteBudget.test.ts +90 -0
- package/src/modules/accounting/command/deleteBudget.ts +35 -0
- package/src/modules/accounting/command/deleteBudgetLineItem.generated.ts +6 -0
- package/src/modules/accounting/command/deleteBudgetLineItem.test.ts +85 -0
- package/src/modules/accounting/command/deleteBudgetLineItem.ts +50 -0
- package/src/modules/accounting/command/deleteCostCenter.generated.ts +6 -0
- package/src/modules/accounting/command/deleteCostCenter.test.ts +79 -0
- package/src/modules/accounting/command/deleteCostCenter.ts +67 -0
- package/src/modules/accounting/command/deleteCostCenterHierarchyNode.generated.ts +6 -0
- package/src/modules/accounting/command/deleteCostCenterHierarchyNode.test.ts +59 -0
- package/src/modules/accounting/command/deleteCostCenterHierarchyNode.ts +58 -0
- package/src/modules/accounting/command/deleteCostElement.generated.ts +6 -0
- package/src/modules/accounting/command/deleteCostElement.test.ts +58 -0
- package/src/modules/accounting/command/deleteCostElement.ts +33 -0
- package/src/modules/accounting/command/deleteInternalOrder.generated.ts +6 -0
- package/src/modules/accounting/command/deleteInternalOrder.test.ts +81 -0
- package/src/modules/accounting/command/deleteInternalOrder.ts +37 -0
- package/src/modules/accounting/command/deleteProfitCenter.generated.ts +6 -0
- package/src/modules/accounting/command/deleteProfitCenter.test.ts +68 -0
- package/src/modules/accounting/command/deleteProfitCenter.ts +39 -0
- package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.generated.ts +6 -0
- package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.test.ts +72 -0
- package/src/modules/accounting/command/deleteProfitCenterHierarchyNode.ts +61 -0
- package/src/modules/accounting/command/executeAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/executeAllocationCycle.test.ts +167 -0
- package/src/modules/accounting/command/executeAllocationCycle.ts +94 -0
- package/src/modules/accounting/command/finalizeVarianceReport.generated.ts +6 -0
- package/src/modules/accounting/command/finalizeVarianceReport.test.ts +60 -0
- package/src/modules/accounting/command/finalizeVarianceReport.ts +45 -0
- package/src/modules/accounting/command/generateVarianceReport.generated.ts +6 -0
- package/src/modules/accounting/command/generateVarianceReport.test.ts +386 -0
- package/src/modules/accounting/command/generateVarianceReport.ts +219 -0
- package/src/modules/accounting/command/invalidateAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/invalidateAllocationCycle.test.ts +84 -0
- package/src/modules/accounting/command/invalidateAllocationCycle.ts +45 -0
- package/src/modules/accounting/command/moveCostCenterHierarchyNode.generated.ts +6 -0
- package/src/modules/accounting/command/moveCostCenterHierarchyNode.test.ts +135 -0
- package/src/modules/accounting/command/moveCostCenterHierarchyNode.ts +81 -0
- package/src/modules/accounting/command/postAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/postAllocationCycle.test.ts +98 -0
- package/src/modules/accounting/command/postAllocationCycle.ts +65 -0
- package/src/modules/accounting/command/reactivateCostElement.generated.ts +6 -0
- package/src/modules/accounting/command/reactivateCostElement.test.ts +59 -0
- package/src/modules/accounting/command/reactivateCostElement.ts +41 -0
- package/src/modules/accounting/command/reactivateProfitCenter.generated.ts +6 -0
- package/src/modules/accounting/command/reactivateProfitCenter.test.ts +60 -0
- package/src/modules/accounting/command/reactivateProfitCenter.ts +42 -0
- package/src/modules/accounting/command/recordCommitment.generated.ts +6 -0
- package/src/modules/accounting/command/recordCommitment.test.ts +157 -0
- package/src/modules/accounting/command/recordCommitment.ts +113 -0
- package/src/modules/accounting/command/rejectBudget.generated.ts +6 -0
- package/src/modules/accounting/command/rejectBudget.test.ts +105 -0
- package/src/modules/accounting/command/rejectBudget.ts +51 -0
- package/src/modules/accounting/command/releaseCommitment.generated.ts +6 -0
- package/src/modules/accounting/command/releaseCommitment.test.ts +94 -0
- package/src/modules/accounting/command/releaseCommitment.ts +51 -0
- package/src/modules/accounting/command/releaseInternalOrder.generated.ts +6 -0
- package/src/modules/accounting/command/releaseInternalOrder.test.ts +74 -0
- package/src/modules/accounting/command/releaseInternalOrder.ts +38 -0
- package/src/modules/accounting/command/reverseAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/reverseAllocationCycle.test.ts +124 -0
- package/src/modules/accounting/command/reverseAllocationCycle.ts +63 -0
- package/src/modules/accounting/command/submitBudget.generated.ts +6 -0
- package/src/modules/accounting/command/submitBudget.test.ts +60 -0
- package/src/modules/accounting/command/submitBudget.ts +51 -0
- package/src/modules/accounting/command/technicallyCompleteInternalOrder.generated.ts +6 -0
- package/src/modules/accounting/command/technicallyCompleteInternalOrder.test.ts +74 -0
- package/src/modules/accounting/command/technicallyCompleteInternalOrder.ts +42 -0
- package/src/modules/accounting/command/updateAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/updateAllocationCycle.test.ts +112 -0
- package/src/modules/accounting/command/updateAllocationCycle.ts +41 -0
- package/src/modules/accounting/command/updateBudget.generated.ts +6 -0
- package/src/modules/accounting/command/updateBudget.test.ts +112 -0
- package/src/modules/accounting/command/updateBudget.ts +44 -0
- package/src/modules/accounting/command/updateCostCenter.generated.ts +6 -0
- package/src/modules/accounting/command/updateCostCenter.test.ts +105 -0
- package/src/modules/accounting/command/updateCostCenter.ts +79 -0
- package/src/modules/accounting/command/updateCostElement.generated.ts +6 -0
- package/src/modules/accounting/command/updateCostElement.test.ts +265 -0
- package/src/modules/accounting/command/updateCostElement.ts +158 -0
- package/src/modules/accounting/command/updateInternalOrder.generated.ts +6 -0
- package/src/modules/accounting/command/updateInternalOrder.test.ts +209 -0
- package/src/modules/accounting/command/updateInternalOrder.ts +88 -0
- package/src/modules/accounting/command/updateProfitCenter.generated.ts +6 -0
- package/src/modules/accounting/command/updateProfitCenter.test.ts +162 -0
- package/src/modules/accounting/command/updateProfitCenter.ts +73 -0
- package/src/modules/accounting/command/validateAllocationCycle.generated.ts +6 -0
- package/src/modules/accounting/command/validateAllocationCycle.test.ts +141 -0
- package/src/modules/accounting/command/validateAllocationCycle.ts +80 -0
- package/src/modules/accounting/db/allocationCycle.ts +59 -0
- package/src/modules/accounting/db/allocationResult.ts +58 -0
- package/src/modules/accounting/db/allocationRule.ts +48 -0
- package/src/modules/accounting/db/budget.ts +84 -0
- package/src/modules/accounting/db/budgetLineItem.ts +64 -0
- package/src/modules/accounting/db/commitment.ts +60 -0
- package/src/modules/accounting/db/costCenter.ts +73 -0
- package/src/modules/accounting/db/costCenterHierarchy.ts +37 -0
- package/src/modules/accounting/db/costCenterHierarchyNode.ts +48 -0
- package/src/modules/accounting/db/costElement.ts +56 -0
- package/src/modules/accounting/db/internalOrder.ts +69 -0
- package/src/modules/accounting/db/planVersion.ts +47 -0
- package/src/modules/accounting/db/profitCenter.ts +52 -0
- package/src/modules/accounting/db/profitCenterHierarchy.ts +36 -0
- package/src/modules/accounting/db/profitCenterHierarchyAssignment.ts +62 -0
- package/src/modules/accounting/db/profitCenterHierarchyNode.ts +48 -0
- package/src/modules/accounting/db/varianceReport.ts +54 -0
- package/src/modules/accounting/db/varianceReportLine.ts +62 -0
- package/src/modules/accounting/docs/commands/ActivateBudget.md +54 -0
- package/src/modules/accounting/docs/commands/ActivateCostElement.md +43 -0
- package/src/modules/accounting/docs/commands/ActivateProfitCenter.md +43 -0
- package/src/modules/accounting/docs/commands/ApproveBudget.md +46 -0
- package/src/modules/accounting/docs/commands/AssignCostCenterToHierarchyNode.md +46 -0
- package/src/modules/accounting/docs/commands/AssignProfitCenterToHierarchyNode.md +47 -0
- package/src/modules/accounting/docs/commands/CloseBudget.md +47 -0
- package/src/modules/accounting/docs/commands/CloseInternalOrder.md +45 -0
- package/src/modules/accounting/docs/commands/ConsumeCommitment.md +53 -0
- package/src/modules/accounting/docs/commands/CreateAllocationCycle.md +55 -0
- package/src/modules/accounting/docs/commands/CreateAllocationRule.md +60 -0
- package/src/modules/accounting/docs/commands/CreateBudget.md +65 -0
- package/src/modules/accounting/docs/commands/CreateBudgetLineItem.md +66 -0
- package/src/modules/accounting/docs/commands/CreateCostCenter.md +64 -0
- package/src/modules/accounting/docs/commands/CreateCostCenterHierarchy.md +45 -0
- package/src/modules/accounting/docs/commands/CreateCostCenterHierarchyNode.md +61 -0
- package/src/modules/accounting/docs/commands/CreateCostElement.md +91 -0
- package/src/modules/accounting/docs/commands/CreateInternalOrder.md +72 -0
- package/src/modules/accounting/docs/commands/CreatePlanVersion.md +59 -0
- package/src/modules/accounting/docs/commands/CreateProfitCenter.md +63 -0
- package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchy.md +45 -0
- package/src/modules/accounting/docs/commands/CreateProfitCenterHierarchyNode.md +60 -0
- package/src/modules/accounting/docs/commands/DeactivateCostElement.md +43 -0
- package/src/modules/accounting/docs/commands/DeactivateProfitCenter.md +44 -0
- package/src/modules/accounting/docs/commands/DeleteAllocationCycle.md +46 -0
- package/src/modules/accounting/docs/commands/DeleteAllocationRule.md +45 -0
- package/src/modules/accounting/docs/commands/DeleteBudget.md +46 -0
- package/src/modules/accounting/docs/commands/DeleteBudgetLineItem.md +45 -0
- package/src/modules/accounting/docs/commands/DeleteCostCenter.md +50 -0
- package/src/modules/accounting/docs/commands/DeleteCostCenterHierarchyNode.md +45 -0
- package/src/modules/accounting/docs/commands/DeleteCostElement.md +43 -0
- package/src/modules/accounting/docs/commands/DeleteInternalOrder.md +45 -0
- package/src/modules/accounting/docs/commands/DeleteProfitCenter.md +46 -0
- package/src/modules/accounting/docs/commands/DeleteProfitCenterHierarchyNode.md +46 -0
- package/src/modules/accounting/docs/commands/ExecuteAllocationCycle.md +54 -0
- package/src/modules/accounting/docs/commands/FinalizeVarianceReport.md +44 -0
- package/src/modules/accounting/docs/commands/GenerateVarianceReport.md +83 -0
- package/src/modules/accounting/docs/commands/InvalidateAllocationCycle.md +45 -0
- package/src/modules/accounting/docs/commands/MoveCostCenterHierarchyNode.md +51 -0
- package/src/modules/accounting/docs/commands/PostAllocationCycle.md +58 -0
- package/src/modules/accounting/docs/commands/ReactivateCostElement.md +43 -0
- package/src/modules/accounting/docs/commands/ReactivateProfitCenter.md +43 -0
- package/src/modules/accounting/docs/commands/RecordCommitment.md +60 -0
- package/src/modules/accounting/docs/commands/RejectBudget.md +49 -0
- package/src/modules/accounting/docs/commands/ReleaseCommitment.md +45 -0
- package/src/modules/accounting/docs/commands/ReleaseInternalOrder.md +44 -0
- package/src/modules/accounting/docs/commands/ReverseAllocationCycle.md +55 -0
- package/src/modules/accounting/docs/commands/SubmitBudget.md +47 -0
- package/src/modules/accounting/docs/commands/TechnicallyCompleteInternalOrder.md +44 -0
- package/src/modules/accounting/docs/commands/UpdateAllocationCycle.md +45 -0
- package/src/modules/accounting/docs/commands/UpdateBudget.md +47 -0
- package/src/modules/accounting/docs/commands/UpdateCostCenter.md +50 -0
- package/src/modules/accounting/docs/commands/UpdateCostElement.md +82 -0
- package/src/modules/accounting/docs/commands/UpdateInternalOrder.md +62 -0
- package/src/modules/accounting/docs/commands/UpdateProfitCenter.md +56 -0
- package/src/modules/accounting/docs/commands/ValidateAllocationCycle.md +57 -0
- package/src/modules/accounting/docs/features/budget-management.md +147 -0
- package/src/modules/accounting/docs/features/cost-allocation.md +129 -0
- package/src/modules/accounting/docs/features/cost-center-management.md +118 -0
- package/src/modules/accounting/docs/features/cost-element-management.md +114 -0
- package/src/modules/accounting/docs/features/internal-order-management.md +111 -0
- package/src/modules/accounting/docs/features/profit-center-management.md +120 -0
- package/src/modules/accounting/docs/features/variance-analysis.md +130 -0
- package/src/modules/accounting/docs/models/AllocationCycle.md +81 -0
- package/src/modules/accounting/docs/models/AllocationResult.md +37 -0
- package/src/modules/accounting/docs/models/AllocationRule.md +41 -0
- package/src/modules/accounting/docs/models/Budget.md +77 -0
- package/src/modules/accounting/docs/models/BudgetLineItem.md +40 -0
- package/src/modules/accounting/docs/models/Commitment.md +45 -0
- package/src/modules/accounting/docs/models/CostCenter.md +51 -0
- package/src/modules/accounting/docs/models/CostCenterHierarchy.md +38 -0
- package/src/modules/accounting/docs/models/CostCenterHierarchyNode.md +41 -0
- package/src/modules/accounting/docs/models/CostElement.md +66 -0
- package/src/modules/accounting/docs/models/InternalOrder.md +67 -0
- package/src/modules/accounting/docs/models/PlanVersion.md +36 -0
- package/src/modules/accounting/docs/models/ProfitCenter.md +66 -0
- package/src/modules/accounting/docs/models/ProfitCenterHierarchy.md +36 -0
- package/src/modules/accounting/docs/models/ProfitCenterHierarchyAssignment.md +36 -0
- package/src/modules/accounting/docs/models/ProfitCenterHierarchyNode.md +39 -0
- package/src/modules/accounting/docs/models/VarianceReport.md +58 -0
- package/src/modules/accounting/docs/models/VarianceReportLine.md +43 -0
- package/src/modules/accounting/docs/queries/CalculateBudgetAvailability.md +64 -0
- package/src/modules/accounting/docs/queries/GetAllocationCycle.md +43 -0
- package/src/modules/accounting/docs/queries/GetBudget.md +42 -0
- package/src/modules/accounting/docs/queries/GetCostCenter.md +38 -0
- package/src/modules/accounting/docs/queries/GetCostCenterHierarchy.md +45 -0
- package/src/modules/accounting/docs/queries/GetCostElement.md +39 -0
- package/src/modules/accounting/docs/queries/GetInternalOrder.md +42 -0
- package/src/modules/accounting/docs/queries/GetProfitCenter.md +38 -0
- package/src/modules/accounting/docs/queries/GetProfitCenterHierarchy.md +46 -0
- package/src/modules/accounting/docs/queries/GetVarianceReport.md +45 -0
- package/src/modules/accounting/docs/queries/ListAllocationCycles.md +63 -0
- package/src/modules/accounting/docs/queries/ListBudgets.md +70 -0
- package/src/modules/accounting/docs/queries/ListCostCenters.md +55 -0
- package/src/modules/accounting/docs/queries/ListCostElements.md +63 -0
- package/src/modules/accounting/docs/queries/ListInternalOrders.md +62 -0
- package/src/modules/accounting/docs/queries/ListProfitCenters.md +49 -0
- package/src/modules/accounting/generated/enums.ts +110 -0
- package/src/modules/accounting/generated/kysely-tailordb.ts +302 -0
- package/src/modules/accounting/index.ts +2 -0
- package/src/modules/accounting/lib/_db_deps.ts +70 -0
- package/src/modules/accounting/lib/actualAmounts.ts +93 -0
- package/src/modules/accounting/lib/allocationPosting.ts +152 -0
- package/src/modules/accounting/lib/errors.generated.ts +432 -0
- package/src/modules/accounting/lib/permissions.generated.ts +61 -0
- package/src/modules/accounting/lib/types.ts +114 -0
- package/src/modules/accounting/module.ts +428 -0
- package/src/modules/accounting/permissions.ts +3 -0
- package/src/modules/accounting/query/calculateBudgetAvailability.generated.ts +5 -0
- package/src/modules/accounting/query/calculateBudgetAvailability.test.ts +229 -0
- package/src/modules/accounting/query/calculateBudgetAvailability.ts +147 -0
- package/src/modules/accounting/query/getAllocationCycle.generated.ts +5 -0
- package/src/modules/accounting/query/getAllocationCycle.test.ts +94 -0
- package/src/modules/accounting/query/getAllocationCycle.ts +37 -0
- package/src/modules/accounting/query/getBudget.generated.ts +5 -0
- package/src/modules/accounting/query/getBudget.test.ts +80 -0
- package/src/modules/accounting/query/getBudget.ts +31 -0
- package/src/modules/accounting/query/getCostCenter.generated.ts +5 -0
- package/src/modules/accounting/query/getCostCenter.test.ts +50 -0
- package/src/modules/accounting/query/getCostCenter.ts +33 -0
- package/src/modules/accounting/query/getCostCenterHierarchy.generated.ts +5 -0
- package/src/modules/accounting/query/getCostCenterHierarchy.test.ts +100 -0
- package/src/modules/accounting/query/getCostCenterHierarchy.ts +80 -0
- package/src/modules/accounting/query/getCostElement.generated.ts +5 -0
- package/src/modules/accounting/query/getCostElement.test.ts +57 -0
- package/src/modules/accounting/query/getCostElement.ts +21 -0
- package/src/modules/accounting/query/getInternalOrder.generated.ts +5 -0
- package/src/modules/accounting/query/getInternalOrder.test.ts +73 -0
- package/src/modules/accounting/query/getInternalOrder.ts +21 -0
- package/src/modules/accounting/query/getProfitCenter.generated.ts +5 -0
- package/src/modules/accounting/query/getProfitCenter.test.ts +65 -0
- package/src/modules/accounting/query/getProfitCenter.ts +31 -0
- package/src/modules/accounting/query/getProfitCenterHierarchy.generated.ts +5 -0
- package/src/modules/accounting/query/getProfitCenterHierarchy.test.ts +97 -0
- package/src/modules/accounting/query/getProfitCenterHierarchy.ts +87 -0
- package/src/modules/accounting/query/getVarianceReport.generated.ts +5 -0
- package/src/modules/accounting/query/getVarianceReport.test.ts +108 -0
- package/src/modules/accounting/query/getVarianceReport.ts +31 -0
- package/src/modules/accounting/query/listAllocationCycles.generated.ts +5 -0
- package/src/modules/accounting/query/listAllocationCycles.test.ts +152 -0
- package/src/modules/accounting/query/listAllocationCycles.ts +96 -0
- package/src/modules/accounting/query/listBudgets.generated.ts +5 -0
- package/src/modules/accounting/query/listBudgets.test.ts +150 -0
- package/src/modules/accounting/query/listBudgets.ts +85 -0
- package/src/modules/accounting/query/listCostCenters.generated.ts +5 -0
- package/src/modules/accounting/query/listCostCenters.test.ts +111 -0
- package/src/modules/accounting/query/listCostCenters.ts +71 -0
- package/src/modules/accounting/query/listCostElements.generated.ts +5 -0
- package/src/modules/accounting/query/listCostElements.test.ts +138 -0
- package/src/modules/accounting/query/listCostElements.ts +105 -0
- package/src/modules/accounting/query/listInternalOrders.generated.ts +5 -0
- package/src/modules/accounting/query/listInternalOrders.test.ts +129 -0
- package/src/modules/accounting/query/listInternalOrders.ts +94 -0
- package/src/modules/accounting/query/listProfitCenters.generated.ts +5 -0
- package/src/modules/accounting/query/listProfitCenters.test.ts +94 -0
- package/src/modules/accounting/query/listProfitCenters.ts +56 -0
- package/src/modules/accounting/seed/index.ts +19 -0
- package/src/modules/accounting/tailor.config.ts +13 -0
- package/src/modules/accounting/testing/commandTestUtils.ts +35 -0
- package/src/modules/accounting/testing/fixtures.ts +502 -0
- package/src/modules/audit/command/logAuditEvent.ts +43 -38
- package/src/modules/audit/command/updateAuditPolicy.ts +2 -2
- package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +1 -1
- package/src/modules/audit/module.ts +4 -0
- package/src/modules/business-partner/command/updateContactPerson.ts +3 -4
- package/src/modules/business-partner/command/updatePartner.ts +13 -6
- package/src/modules/business-partner/command/updatePartnerAddress.ts +13 -6
- package/src/modules/business-partner/command/updatePartnerBankAccount.ts +3 -4
- package/src/modules/business-partner/command/updatePartnerIdentification.ts +3 -4
- package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +3 -3
- package/src/modules/business-partner/docs/commands/UpdatePartner.md +2 -2
- package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +2 -2
- package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +2 -2
- package/src/modules/coa-management/command/updateAccount.ts +3 -3
- package/src/modules/coa-management/command/updateAccountGroup.test.ts +22 -0
- package/src/modules/coa-management/command/updateAccountGroup.ts +30 -18
- package/src/modules/coa-management/command/updateChartOfAccounts.ts +3 -4
- package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +4 -3
- package/src/modules/finance-ledger/command/updateFiscalYear.ts +2 -3
- package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +0 -17
- package/src/modules/finance-ledger/command/updateJournalEntry.ts +2 -10
- package/src/modules/finance-ledger/command/updateJournalLine.ts +2 -3
- package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +1 -4
- package/src/modules/inventory/command/updateLot.test.ts +1 -1
- package/src/modules/inventory/command/updateLot.ts +2 -3
- package/src/modules/inventory/command/updateStockMovement.ts +2 -3
- package/src/modules/inventory/command/updateStorageLocation.ts +12 -17
- package/src/modules/inventory/command/updateValuationPolicy.ts +2 -3
- package/src/modules/inventory/command/updateWarehouse.ts +2 -3
- package/src/modules/inventory/docs/commands/UpdateLot.md +3 -3
- package/src/modules/inventory/docs/commands/UpdateStorageLocation.md +6 -6
- package/src/modules/inventory/docs/commands/UpdateWarehouse.md +2 -2
- package/src/modules/item-management/command/updateItem.test.ts +16 -12
- package/src/modules/item-management/command/updateItem.ts +47 -31
- package/src/modules/item-management/command/updateTaxonomyNode.test.ts +15 -16
- package/src/modules/item-management/command/updateTaxonomyNode.ts +42 -29
- package/src/modules/item-management/docs/commands/UpdateItem.md +7 -11
- package/src/modules/item-management/docs/commands/UpdateTaxonomyNode.md +10 -14
- package/src/modules/manufacturing/command/updateBillOfMaterial.ts +3 -4
- package/src/modules/manufacturing/command/updateProductionOrder.ts +3 -4
- package/src/modules/manufacturing/command/updateRouting.ts +3 -4
- package/src/modules/manufacturing/command/updateWorkCenter.test.ts +16 -7
- package/src/modules/manufacturing/command/updateWorkCenter.ts +41 -38
- package/src/modules/manufacturing/docs/commands/ActivateWorkCenter.md +2 -0
- package/src/modules/manufacturing/docs/commands/CompleteWorkOrder.md +2 -0
- package/src/modules/manufacturing/docs/commands/CreateBillOfMaterial.md +1 -0
- package/src/modules/manufacturing/docs/commands/ReviewManufacturingCostSummary.md +1 -0
- package/src/modules/manufacturing/docs/commands/UpdateWorkCenter.md +6 -5
- package/src/modules/manufacturing/docs/models/BillOfMaterialLine.md +42 -0
- package/src/modules/manufacturing/docs/models/CostVarianceLine.md +36 -0
- package/src/modules/manufacturing/docs/models/ManufacturingCostLine.md +37 -0
- package/src/modules/manufacturing/docs/models/ManufacturingCostSettlementRecord.md +34 -0
- package/src/modules/manufacturing/docs/models/ProductionOrderBomSnapshot.md +35 -0
- package/src/modules/manufacturing/docs/models/ProductionOrderCostBaseline.md +36 -0
- package/src/modules/manufacturing/docs/models/ProductionOrderMaterialRequirement.md +35 -0
- package/src/modules/manufacturing/docs/models/ProductionOrderRoutingSnapshot.md +34 -0
- package/src/modules/manufacturing/docs/models/RoutingOperation.md +40 -0
- package/src/modules/manufacturing/docs/models/WorkOrderExecutionEvent.md +38 -0
- package/src/modules/manufacturing/docs/queries/ExplodeBillOfMaterial.md +1 -0
- package/src/modules/manufacturing/docs/queries/ListWorkCentersBySite.md +1 -0
- package/src/modules/organization/command/updateCompany.test.ts +6 -6
- package/src/modules/organization/command/updateCompany.ts +3 -4
- package/src/modules/organization/command/updateDepartment.test.ts +7 -7
- package/src/modules/organization/command/updateDepartment.ts +13 -12
- package/src/modules/organization/command/updateSite.test.ts +10 -10
- package/src/modules/organization/command/updateSite.ts +3 -4
- package/src/modules/organization/docs/commands/UpdateCompany.md +6 -6
- package/src/modules/organization/docs/commands/UpdateDepartment.md +9 -10
- package/src/modules/organization/docs/commands/UpdateSite.md +12 -12
- package/src/modules/product-management/command/updateProduct.test.ts +17 -11
- package/src/modules/product-management/command/updateProduct.ts +45 -28
- package/src/modules/product-management/command/updateProductAttribute.test.ts +16 -21
- package/src/modules/product-management/command/updateProductAttribute.ts +40 -26
- package/src/modules/product-management/command/updateProductAttributeValue.ts +2 -3
- package/src/modules/product-management/command/updateProductCategory.test.ts +14 -19
- package/src/modules/product-management/command/updateProductCategory.ts +42 -26
- package/src/modules/product-management/docs/commands/UpdateProduct.md +16 -20
- package/src/modules/product-management/docs/commands/UpdateProductAttribute.md +10 -14
- package/src/modules/product-management/docs/commands/UpdateProductCategory.md +10 -14
- package/src/modules/purchase/command/updateGoodsReceipt.ts +2 -3
- package/src/modules/purchase/command/updatePurchaseBill.ts +2 -3
- package/src/modules/purchase/command/updatePurchaseOrder.ts +2 -3
- package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +2 -3
- package/src/modules/purchase/command/updatePurchasePriceList.ts +2 -3
- package/src/modules/purchase/command/updatePurchasePriceRule.ts +2 -3
- package/src/modules/sales/command/updateChannel.test.ts +4 -4
- package/src/modules/sales/command/updateChannel.ts +2 -3
- package/src/modules/sales/command/updateListing.test.ts +2 -2
- package/src/modules/sales/command/updateListing.ts +2 -3
- package/src/modules/sales/command/updateSalesCreditNote.test.ts +2 -2
- package/src/modules/sales/command/updateSalesCreditNote.ts +2 -3
- package/src/modules/sales/command/updateSalesInvoice.test.ts +2 -2
- package/src/modules/sales/command/updateSalesInvoice.ts +2 -3
- package/src/modules/sales/command/updateSalesOrder.test.ts +3 -3
- package/src/modules/sales/command/updateSalesOrder.ts +2 -3
- package/src/modules/sales/command/updateSalesPaymentTerm.test.ts +2 -2
- package/src/modules/sales/command/updateSalesPaymentTerm.ts +2 -3
- package/src/modules/sales/command/updateSalesPriceList.test.ts +3 -3
- package/src/modules/sales/command/updateSalesPriceList.ts +2 -3
- package/src/modules/sales/command/updateSalesPriceRule.test.ts +3 -3
- package/src/modules/sales/command/updateSalesPriceRule.ts +2 -3
- package/src/modules/sales/command/updateShipment.test.ts +2 -2
- package/src/modules/sales/command/updateShipment.ts +2 -3
- package/src/modules/sales/docs/commands/UpdateChannel.md +4 -4
- package/src/modules/sales/docs/commands/UpdateListing.md +2 -2
- package/src/modules/sales/docs/commands/UpdateSalesCreditNote.md +2 -2
- package/src/modules/sales/docs/commands/UpdateSalesInvoice.md +2 -2
- package/src/modules/sales/docs/commands/UpdateSalesOrder.md +3 -3
- package/src/modules/sales/docs/commands/UpdateSalesPaymentTerm.md +2 -2
- package/src/modules/sales/docs/commands/UpdateSalesPriceList.md +3 -3
- package/src/modules/sales/docs/commands/UpdateSalesPriceRule.md +3 -3
- package/src/modules/sales/docs/commands/UpdateShipment.md +2 -2
- package/src/modules/user-management/README.md +2 -1
- package/src/modules/user-management/command/updateOwnProfile.generated.ts +6 -0
- package/src/modules/user-management/command/updateOwnProfile.test.ts +191 -0
- package/src/modules/user-management/command/updateOwnProfile.ts +82 -0
- package/src/modules/user-management/command/updateUser.generated.ts +6 -0
- package/src/modules/user-management/command/updateUser.test.ts +195 -0
- package/src/modules/user-management/command/updateUser.ts +76 -0
- package/src/modules/user-management/docs/commands/UpdateOwnProfile.md +68 -0
- package/src/modules/user-management/docs/commands/UpdateUser.md +67 -0
- package/src/modules/user-management/docs/features/user-account-management.md +28 -3
- package/src/modules/user-management/docs/models/User.md +2 -0
- package/src/modules/user-management/lib/errors.generated.ts +5 -0
- package/src/modules/user-management/lib/permissions.generated.ts +2 -0
- package/src/modules/user-management/module.ts +5 -0
- package/src/modules/user-management/seed/index.ts +19 -0
- package/templates/scaffold/app/backend/seed/data/AuditEntry.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/AuditPolicy.jsonl +7 -0
- package/templates/scaffold/app/backend/seed/data/AuditPolicy.schema.ts +15 -0
- package/templates/scaffold/app/backend/seed/data/AuditableEntity.jsonl +4 -0
- package/templates/scaffold/app/backend/seed/data/AuditableEntity.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/ChangeDetail.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/Company.schema.ts +15 -0
- package/templates/scaffold/app/backend/seed/data/Permission.jsonl +13 -0
- package/templates/scaffold/app/backend/seed/data/Permission.schema.ts +1 -1
- package/templates/scaffold/app/backend/seed/data/PolicyFieldRule.schema.ts +20 -0
- package/templates/scaffold/app/backend/seed/data/Role.jsonl +1 -0
- package/templates/scaffold/app/backend/seed/data/Role.schema.ts +1 -1
- package/templates/scaffold/app/backend/seed/data/RolePermission.jsonl +13 -0
- package/templates/scaffold/app/backend/seed/data/RolePermission.schema.ts +1 -1
- package/templates/scaffold/app/backend/seed/data/User.jsonl +1 -1
- package/templates/scaffold/app/backend/seed/data/User.schema.ts +1 -1
- package/templates/scaffold/app/backend/seed/data/UserRole.jsonl +1 -0
- package/templates/scaffold/app/backend/seed/data/UserRole.schema.ts +1 -1
- package/templates/scaffold/app/backend/seed/data/_User.jsonl +1 -1
- package/templates/scaffold/app/backend/seed/exec.mjs +12 -0
- package/templates/scaffold/app/backend/src/executors/permissionCreated.ts +2 -2
- package/templates/scaffold/app/backend/src/executors/permissionDeleted.ts +2 -2
- package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +62 -0
- package/templates/scaffold/app/backend/src/modules-db.ts +13 -0
- package/templates/scaffold/app/backend/src/modules.ts +3 -5
- package/templates/scaffold/app/backend/src/resolvers/assignPermissionToRole.ts +70 -0
- package/templates/scaffold/app/backend/src/resolvers/assignRoleToUser.ts +72 -0
- package/templates/scaffold/app/backend/src/resolvers/createRole.ts +92 -0
- package/templates/scaffold/app/backend/src/resolvers/createUser.ts +113 -13
- package/templates/scaffold/app/backend/src/resolvers/deactivateUser.ts +67 -0
- package/templates/scaffold/app/backend/src/resolvers/reactivateUser.ts +63 -0
- package/templates/scaffold/app/backend/src/resolvers/revokePermissionFromRole.ts +72 -0
- package/templates/scaffold/app/backend/src/resolvers/revokeRoleFromUser.ts +72 -0
- package/templates/scaffold/app/backend/src/resolvers/updateOwnProfile.ts +107 -0
- package/templates/scaffold/app/backend/src/resolvers/updateUserProfile.ts +107 -0
- package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log-detail.test.ts +79 -0
- package/templates/scaffold/app/backend/src/tests/stories/audit-log/user--view-audit-log.test.ts +86 -0
- package/templates/scaffold/app/backend/src/tests/stories/role-management/user--assign-role-to-user.test.ts +103 -0
- package/templates/scaffold/app/backend/src/tests/stories/role-management/user--create-role.test.ts +61 -0
- package/templates/scaffold/app/backend/src/tests/stories/role-management/user--remove-role-from-user.test.ts +89 -0
- package/templates/scaffold/app/backend/src/tests/stories/role-management/user--update-role-permissions.test.ts +125 -0
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--browse-user-list.test.ts +91 -0
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--create-user-account.test.ts +97 -0
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--toggle-user-status.test.ts +131 -0
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-own-profile.test.ts +85 -0
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--update-user-profile.test.ts +158 -0
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-own-profile.test.ts +30 -0
- package/templates/scaffold/app/backend/src/tests/stories/user-lifecycle/user--view-user-detail.test.ts +98 -0
- package/templates/scaffold/app/backend/tailor.config.ts +6 -2
- package/templates/scaffold/app/docs/actors/user.md +11 -0
- package/templates/scaffold/app/docs/business-flow/audit-log/README.md +31 -0
- package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log-detail.md +35 -0
- package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log.md +44 -0
- package/templates/scaffold/app/docs/business-flow/role-management/README.md +33 -0
- package/templates/scaffold/app/docs/business-flow/role-management/story/user--assign-role-to-user.md +35 -0
- package/templates/scaffold/app/docs/business-flow/role-management/story/user--create-role.md +41 -0
- package/templates/scaffold/app/docs/business-flow/role-management/story/user--remove-role-from-user.md +33 -0
- package/templates/scaffold/app/docs/business-flow/role-management/story/user--update-role-permissions.md +41 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/README.md +48 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--browse-user-list.md +38 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--create-user-account.md +45 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--toggle-user-status.md +38 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-own-profile.md +36 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-user-profile.md +41 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-own-profile.md +30 -0
- package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--view-user-detail.md +33 -0
- package/templates/scaffold/app/docs/resolver/assignPermissionToRole.md +16 -0
- package/templates/scaffold/app/docs/resolver/assignRoleToUser.md +17 -0
- package/templates/scaffold/app/docs/resolver/createRole.md +17 -0
- package/templates/scaffold/app/docs/resolver/createUser.md +23 -0
- package/templates/scaffold/app/docs/resolver/deactivateUser.md +17 -0
- package/templates/scaffold/app/docs/resolver/reactivateUser.md +16 -0
- package/templates/scaffold/app/docs/resolver/revokePermissionFromRole.md +17 -0
- package/templates/scaffold/app/docs/resolver/revokeRoleFromUser.md +17 -0
- package/templates/scaffold/app/docs/resolver/updateOwnProfile.md +20 -0
- package/templates/scaffold/app/docs/resolver/updateUserProfile.md +19 -0
- package/templates/scaffold/app/docs/screen/audit-entry-detail.md +30 -0
- package/templates/scaffold/app/docs/screen/audit-entry-list.md +25 -0
- package/templates/scaffold/app/docs/screen/my-profile-edit-form.md +22 -0
- package/templates/scaffold/app/docs/screen/my-profile.md +27 -0
- package/templates/scaffold/app/docs/screen/role-create-form.md +23 -0
- package/templates/scaffold/app/docs/screen/role-detail.md +27 -0
- package/templates/scaffold/app/docs/screen/role-edit-form.md +21 -0
- package/templates/scaffold/app/docs/screen/role-list.md +23 -0
- package/templates/scaffold/app/docs/screen/user-create-form.md +23 -0
- package/templates/scaffold/app/docs/screen/user-detail.md +33 -0
- package/templates/scaffold/app/docs/screen/user-edit-form.md +22 -0
- package/templates/scaffold/app/docs/screen/user-list.md +24 -0
- package/templates/scaffold/app/frontend/package.json +1 -1
- package/templates/scaffold/app/frontend/src/App.tsx +4 -0
- package/templates/scaffold/app/frontend/src/components/composed/error-fallback.tsx +1 -1
- package/templates/scaffold/app/frontend/src/graphql/generated/graphql-env.d.ts +59 -31
- package/templates/scaffold/app/frontend/src/graphql/generated/schema.graphql +1411 -688
- package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +1 -1
- package/templates/scaffold/app/frontend/src/lib/permission-groups.ts +59 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/components/audit-entry-detail.tsx +102 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/audit/[id]/page.tsx +65 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/audit/components/audit-entries-table.tsx +90 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/audit/page.tsx +52 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/components/edit-profile-form.tsx +125 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/profile/edit/page.tsx +19 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/profile/page.tsx +41 -21
- package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-actions.tsx +26 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/components/role-detail.tsx +69 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/components/edit-role-form.tsx +192 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/edit/page.tsx +51 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/[id]/page.tsx +56 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/components/roles-table.tsx +85 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/create/components/create-role-form.tsx +204 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/create/page.tsx +19 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/role/page.tsx +60 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-actions.tsx +216 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/components/user-detail.tsx +97 -33
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/components/edit-user-form.tsx +115 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/edit/page.tsx +51 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/[id]/page.tsx +8 -2
- package/templates/scaffold/app/frontend/src/pages/user-management/user/components/users-table.tsx +43 -42
- package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +120 -45
- package/templates/scaffold/app/frontend/src/pages/user-management/user/page.tsx +3 -4
- package/templates/scaffold/app/frontend/src/providers/graphql-provider.tsx +8 -1
- package/templates/scaffold/module/eslint.config.js +8 -0
- package/templates/scaffold/project/__dot__gitignore +1 -0
- package/templates/scaffold/project/__pnpm-workspace.yaml +3 -0
- package/templates/scaffold/project/apps/.gitkeep +0 -0
- package/templates/scaffold/project/modules/.gitkeep +0 -0
- package/templates/scaffold/project/package.json +15 -0
- package/templates/workflows/erp-kit-check.yml +10 -4
- package/templates/scaffold/app/frontend/src/components/ui/badge.tsx +0 -39
- package/templates/scaffold/app/frontend/src/components/ui/button.tsx +0 -60
- package/templates/scaffold/app/frontend/src/components/ui/card.tsx +0 -75
- package/templates/scaffold/app/frontend/src/components/ui/input.tsx +0 -21
- package/templates/scaffold/app/frontend/src/components/ui/table.tsx +0 -90
- /package/src/modules/{supplier-portal → accounting/executor}/.gitkeep +0 -0
- /package/templates/scaffold/app/{docs/actors/.gitkeep → backend/seed/data/AuditEntry.jsonl} +0 -0
- /package/templates/scaffold/app/{docs/business-flow/.gitkeep → backend/seed/data/ChangeDetail.jsonl} +0 -0
- /package/templates/scaffold/app/{docs/resolver/.gitkeep → backend/seed/data/Company.jsonl} +0 -0
- /package/templates/scaffold/app/{docs/screen/.gitkeep → backend/seed/data/PolicyFieldRule.jsonl} +0 -0
- /package/templates/{config → scaffold/project}/license.config.json +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { describe, expect, inject, it } from "vitest";
|
|
2
|
+
import { createGraphQLClient, graphql } from "@/tests/utils/graphql-client";
|
|
3
|
+
|
|
4
|
+
const listUsers = graphql(`
|
|
5
|
+
query ListUsers {
|
|
6
|
+
users {
|
|
7
|
+
edges {
|
|
8
|
+
node {
|
|
9
|
+
id
|
|
10
|
+
name
|
|
11
|
+
email
|
|
12
|
+
status
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
`);
|
|
18
|
+
|
|
19
|
+
describe("user--view-own-profile", () => {
|
|
20
|
+
const gql = createGraphQLClient(inject("url"), inject("token"));
|
|
21
|
+
|
|
22
|
+
it("Navigate to the profile page; verify name, email, and assigned roles are displayed correctly", async () => {
|
|
23
|
+
const res = await gql.query(listUsers, {}).toPromise();
|
|
24
|
+
|
|
25
|
+
expect(res.data?.users.edges.length).toBeGreaterThan(0);
|
|
26
|
+
const user = res.data?.users.edges[0].node;
|
|
27
|
+
expect(user?.name).toBeDefined();
|
|
28
|
+
expect(user?.email).toBeDefined();
|
|
29
|
+
});
|
|
30
|
+
});
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { describe, expect, inject, it } from "vitest";
|
|
2
|
+
import { createGraphQLClient, graphql } from "@/tests/utils/graphql-client";
|
|
3
|
+
|
|
4
|
+
const listUserIds = graphql(`
|
|
5
|
+
query ListUserIds {
|
|
6
|
+
users {
|
|
7
|
+
edges {
|
|
8
|
+
node {
|
|
9
|
+
id
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
`);
|
|
15
|
+
|
|
16
|
+
const getUser = graphql(`
|
|
17
|
+
query GetUser($id: ID!) {
|
|
18
|
+
user(id: $id) {
|
|
19
|
+
id
|
|
20
|
+
name
|
|
21
|
+
email
|
|
22
|
+
status
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
`);
|
|
26
|
+
|
|
27
|
+
const getUserStatus = graphql(`
|
|
28
|
+
query GetUserStatus($id: ID!) {
|
|
29
|
+
user(id: $id) {
|
|
30
|
+
id
|
|
31
|
+
status
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`);
|
|
35
|
+
|
|
36
|
+
const listRoles = graphql(`
|
|
37
|
+
query ListRoles {
|
|
38
|
+
roles {
|
|
39
|
+
edges {
|
|
40
|
+
node {
|
|
41
|
+
id
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`);
|
|
47
|
+
|
|
48
|
+
const createUserIdOnly = graphql(`
|
|
49
|
+
mutation CreateUserIdOnly($name: String!, $email: String!, $roleId: String!) {
|
|
50
|
+
createUser(name: $name, email: $email, roleId: $roleId) {
|
|
51
|
+
id
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
`);
|
|
55
|
+
|
|
56
|
+
const deactivateUserIdOnly = graphql(`
|
|
57
|
+
mutation DeactivateUserIdOnly($userId: String!) {
|
|
58
|
+
deactivateUser(userId: $userId) {
|
|
59
|
+
id
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
`);
|
|
63
|
+
|
|
64
|
+
describe("user--view-user-detail", () => {
|
|
65
|
+
const gql = createGraphQLClient(inject("url"), inject("token"));
|
|
66
|
+
|
|
67
|
+
it("Click on a user in the list; verify name, email, status, and assigned roles are displayed", async () => {
|
|
68
|
+
const listResult = await gql.query(listUserIds, {}).toPromise();
|
|
69
|
+
const userId = listResult.data!.users.edges[0].node.id;
|
|
70
|
+
|
|
71
|
+
const res = await gql.query(getUser, { id: userId }).toPromise();
|
|
72
|
+
|
|
73
|
+
expect(res.data?.user?.id).toBe(userId);
|
|
74
|
+
expect(res.data?.user?.name).toBeDefined();
|
|
75
|
+
expect(res.data?.user?.email).toBeDefined();
|
|
76
|
+
expect(res.data?.user?.status).toBeDefined();
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("Click on an INACTIVE user; verify the profile is displayed with INACTIVE status clearly indicated", async () => {
|
|
80
|
+
const rolesResult = await gql.query(listRoles, {}).toPromise();
|
|
81
|
+
const roleId = rolesResult.data?.roles.edges[0].node.id;
|
|
82
|
+
|
|
83
|
+
const createResult = await gql
|
|
84
|
+
.mutation(createUserIdOnly, {
|
|
85
|
+
name: "Inactive Detail User",
|
|
86
|
+
email: `inactive-detail-${Date.now()}@example.com`,
|
|
87
|
+
roleId: roleId!,
|
|
88
|
+
})
|
|
89
|
+
.toPromise();
|
|
90
|
+
const userId = createResult.data!.createUser.id;
|
|
91
|
+
|
|
92
|
+
await gql.mutation(deactivateUserIdOnly, { userId }).toPromise();
|
|
93
|
+
|
|
94
|
+
const res = await gql.query(getUserStatus, { id: userId }).toPromise();
|
|
95
|
+
|
|
96
|
+
expect(res.data?.user?.status).toBe("INACTIVE");
|
|
97
|
+
});
|
|
98
|
+
});
|
|
@@ -7,11 +7,15 @@ import {
|
|
|
7
7
|
} from "@tailor-platform/sdk";
|
|
8
8
|
import { kyselyTypePlugin } from "@tailor-platform/sdk/plugin/kysely-type";
|
|
9
9
|
import { seedPlugin } from "@tailor-platform/sdk/plugin/seed";
|
|
10
|
-
import { user } from "@/modules";
|
|
10
|
+
import { user } from "@/modules-db";
|
|
11
11
|
|
|
12
12
|
const idp = defineIdp("default", {
|
|
13
13
|
authorization: "loggedIn",
|
|
14
14
|
clients: ["default"],
|
|
15
|
+
userAuthPolicy: {
|
|
16
|
+
allowSelfPasswordReset: true,
|
|
17
|
+
},
|
|
18
|
+
gqlOperations: "query",
|
|
15
19
|
});
|
|
16
20
|
|
|
17
21
|
const website = defineStaticWebSite("default-web", {
|
|
@@ -49,7 +53,7 @@ export default defineConfig({
|
|
|
49
53
|
cors: ["http://localhost:5173", website.url],
|
|
50
54
|
db: {
|
|
51
55
|
"main-db": {
|
|
52
|
-
files: [`./src/modules.ts`],
|
|
56
|
+
files: [`./src/modules-db.ts`],
|
|
53
57
|
gqlOperations: "query",
|
|
54
58
|
},
|
|
55
59
|
},
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# User
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
An internal user of the system. Capabilities are determined by assigned roles — users with appropriate roles can manage other users, roles, and audit logs. Without specific roles, a user can only view and update their own profile.
|
|
6
|
+
|
|
7
|
+
## Authorized Business Flows
|
|
8
|
+
|
|
9
|
+
- [user-lifecycle](../business-flow/user-lifecycle/README.md) — initiator
|
|
10
|
+
- [role-management](../business-flow/role-management/README.md) — initiator
|
|
11
|
+
- [audit-log](../business-flow/audit-log/README.md) — viewer
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# audit-log
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Provides a chronological record of all entity operations (create, update) across the system. Status toggles such as deactivation are recorded as update operations. Users with appropriate roles can search and filter audit log entries to track changes for compliance and troubleshooting.
|
|
6
|
+
|
|
7
|
+
## Actors Involved
|
|
8
|
+
|
|
9
|
+
- [user](../../actors/user.md)
|
|
10
|
+
|
|
11
|
+
## Flow Diagram
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
sequenceDiagram
|
|
15
|
+
actor User as user
|
|
16
|
+
participant System
|
|
17
|
+
|
|
18
|
+
User->>System: View Audit Log List
|
|
19
|
+
System-->>User: Paginated log entries
|
|
20
|
+
User->>System: Filter by Entity Type
|
|
21
|
+
System-->>User: Filtered results
|
|
22
|
+
User->>System: Filter by Date Range
|
|
23
|
+
System-->>User: Filtered results
|
|
24
|
+
User->>System: View Log Entry Detail
|
|
25
|
+
System-->>User: Full change details
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Stories
|
|
29
|
+
|
|
30
|
+
- [View Audit Log](./story/user--view-audit-log.md)
|
|
31
|
+
- [View Audit Log Detail](./story/user--view-audit-log-detail.md)
|
package/templates/scaffold/app/docs/business-flow/audit-log/story/user--view-audit-log-detail.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# View Audit Log Detail
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to view the full details of an audit log entry, so that I can see what changed (before/after values).
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open Audit Log List] --> B[Click entry]
|
|
12
|
+
B --> C[Open Audit Log Detail]
|
|
13
|
+
C --> D[Display actor and timestamp]
|
|
14
|
+
D --> E[Display old values]
|
|
15
|
+
D --> F[Display new values]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Scenario Patterns
|
|
19
|
+
|
|
20
|
+
- View detail of an update entry that includes both old and new values
|
|
21
|
+
- View detail of a creation entry where no old values exist
|
|
22
|
+
|
|
23
|
+
## Test Cases
|
|
24
|
+
|
|
25
|
+
- Click an update entry in the audit log list; verify the detail screen shows the actor, timestamp, and both old and new field values
|
|
26
|
+
- Click a creation entry; verify old values are empty and new values reflect the created record
|
|
27
|
+
|
|
28
|
+
## Screens
|
|
29
|
+
|
|
30
|
+
- [audit-entry-list](../../../screen/audit-entry-list.md)
|
|
31
|
+
- [audit-entry-detail](../../../screen/audit-entry-detail.md)
|
|
32
|
+
|
|
33
|
+
## Resolvers
|
|
34
|
+
|
|
35
|
+
- None
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# View Audit Log
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to view and filter the audit log, so that I can track all entity operations for compliance.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open Audit Log List] --> B[Apply filters]
|
|
12
|
+
B --> C{Filter type}
|
|
13
|
+
C -- Entity type selected --> D[Show entries for that entity type]
|
|
14
|
+
C -- Date range selected --> E[Show entries within date range]
|
|
15
|
+
C -- No filter --> F[Show all entries]
|
|
16
|
+
D --> G[View paginated results]
|
|
17
|
+
E --> G
|
|
18
|
+
F --> G
|
|
19
|
+
G --> H{Results}
|
|
20
|
+
H -- Entries found --> I[Display audit log entries]
|
|
21
|
+
H -- No entries --> J[Show empty state]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Scenario Patterns
|
|
25
|
+
|
|
26
|
+
- View all audit log entries without any filter applied
|
|
27
|
+
- Filter entries by a specific entity type
|
|
28
|
+
- Filter entries by a date range
|
|
29
|
+
- Combined filter returns no results and an empty state is shown
|
|
30
|
+
|
|
31
|
+
## Test Cases
|
|
32
|
+
|
|
33
|
+
- Open the audit log list with no filters; verify all entries are displayed with pagination
|
|
34
|
+
- Select an entity type filter; verify only entries for that entity type are shown
|
|
35
|
+
- Set a date range filter; verify only entries within the specified range are shown
|
|
36
|
+
- Set a date range with no matching entries; verify an empty state is displayed
|
|
37
|
+
|
|
38
|
+
## Screens
|
|
39
|
+
|
|
40
|
+
- [audit-entry-list](../../../screen/audit-entry-list.md)
|
|
41
|
+
|
|
42
|
+
## Resolvers
|
|
43
|
+
|
|
44
|
+
- None
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# role-management
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Manages roles within the organization. Users with appropriate roles can define roles with specific permissions, and assign or remove roles from users to control access.
|
|
6
|
+
|
|
7
|
+
## Actors Involved
|
|
8
|
+
|
|
9
|
+
- [user](../../actors/user.md)
|
|
10
|
+
|
|
11
|
+
## Flow Diagram
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
sequenceDiagram
|
|
15
|
+
actor User as user
|
|
16
|
+
participant System
|
|
17
|
+
|
|
18
|
+
User->>System: Create Role
|
|
19
|
+
System-->>User: Role created
|
|
20
|
+
User->>System: Update Role Permissions
|
|
21
|
+
System-->>User: Role updated
|
|
22
|
+
User->>System: Assign Role to User
|
|
23
|
+
System-->>User: Role assigned
|
|
24
|
+
User->>System: Remove Role from User
|
|
25
|
+
System-->>User: Role removed
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Stories
|
|
29
|
+
|
|
30
|
+
- [Create Role](./story/user--create-role.md)
|
|
31
|
+
- [Update Role Permissions](./story/user--update-role-permissions.md)
|
|
32
|
+
- [Assign Role to User](./story/user--assign-role-to-user.md)
|
|
33
|
+
- [Remove Role from User](./story/user--remove-role-from-user.md)
|
package/templates/scaffold/app/docs/business-flow/role-management/story/user--assign-role-to-user.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Assign Role To User
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to assign a role to a user, so that they gain the role's permissions.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open User Detail] --> B[Click Assign Role]
|
|
12
|
+
B --> C[Select role from list]
|
|
13
|
+
C --> D[Confirm]
|
|
14
|
+
D --> E{Validation}
|
|
15
|
+
E -- Role already assigned --> F[Show duplicate assignment error]
|
|
16
|
+
E -- Valid --> G[Role assigned to user]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Scenario Patterns
|
|
20
|
+
|
|
21
|
+
- Assign a role that is not yet assigned to the user
|
|
22
|
+
- Assigning a role the user already holds is rejected with an error
|
|
23
|
+
|
|
24
|
+
## Test Cases
|
|
25
|
+
|
|
26
|
+
- Select a role not yet assigned to the user and confirm; verify the role appears in the user's role list
|
|
27
|
+
- Attempt to assign a role the user already holds; verify an error is shown and no duplicate assignment is created
|
|
28
|
+
|
|
29
|
+
## Screens
|
|
30
|
+
|
|
31
|
+
- [user-detail](../../../screen/user-detail.md)
|
|
32
|
+
|
|
33
|
+
## Resolvers
|
|
34
|
+
|
|
35
|
+
- [assignRoleToUser](../../../resolver/assignRoleToUser.md)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Create Role
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to create a new role with permissions, so that I can define access levels.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open Role List] --> B[Click Create]
|
|
12
|
+
B --> C[Enter role name]
|
|
13
|
+
C --> D[Select permissions]
|
|
14
|
+
D --> E[Submit]
|
|
15
|
+
E --> F{Validation}
|
|
16
|
+
F -- Role name already exists --> G[Show duplicate name error]
|
|
17
|
+
F -- Required field missing --> H[Show validation error]
|
|
18
|
+
F -- Valid --> I[Role created and available for assignment]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Scenario Patterns
|
|
22
|
+
|
|
23
|
+
- Create a role with a unique name and one or more permissions
|
|
24
|
+
- Duplicate role name is rejected with an error
|
|
25
|
+
- Submission with a missing role name is blocked by validation
|
|
26
|
+
|
|
27
|
+
## Test Cases
|
|
28
|
+
|
|
29
|
+
- Submit the form with a unique name and selected permissions; verify the role appears in the role list
|
|
30
|
+
- Submit the form with a name already used by an existing role; verify an error is shown and no role is created
|
|
31
|
+
- Submit the form with the name field empty; verify a validation error is shown and submission is blocked
|
|
32
|
+
|
|
33
|
+
## Screens
|
|
34
|
+
|
|
35
|
+
- [role-list](../../../screen/role-list.md)
|
|
36
|
+
- [role-create-form](../../../screen/role-create-form.md)
|
|
37
|
+
|
|
38
|
+
## Resolvers
|
|
39
|
+
|
|
40
|
+
- [createRole](../../../resolver/createRole.md)
|
|
41
|
+
- [assignPermissionToRole](../../../resolver/assignPermissionToRole.md)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Remove Role From User
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to remove a role from a user, so that their permissions are revoked.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open User Detail] --> B[Select role to remove]
|
|
12
|
+
B --> C[Click Remove]
|
|
13
|
+
C --> D[Confirm removal]
|
|
14
|
+
D --> E[Role removed from user]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Scenario Patterns
|
|
18
|
+
|
|
19
|
+
- Remove an assigned role from a user
|
|
20
|
+
- Cancelling the confirmation leaves the role assignment unchanged
|
|
21
|
+
|
|
22
|
+
## Test Cases
|
|
23
|
+
|
|
24
|
+
- Select an assigned role on a user, click Remove, and confirm; verify the role no longer appears in the user's role list
|
|
25
|
+
- Select an assigned role on a user, click Remove, and cancel; verify the role still appears in the user's role list
|
|
26
|
+
|
|
27
|
+
## Screens
|
|
28
|
+
|
|
29
|
+
- [user-detail](../../../screen/user-detail.md)
|
|
30
|
+
|
|
31
|
+
## Resolvers
|
|
32
|
+
|
|
33
|
+
- [revokeRoleFromUser](../../../resolver/revokeRoleFromUser.md)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Update Role Permissions
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to modify a role's permissions, so that access levels stay current.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open Role List] --> B[Select role]
|
|
12
|
+
B --> C[Click Edit]
|
|
13
|
+
C --> D[Modify permission selection]
|
|
14
|
+
D --> E[Submit]
|
|
15
|
+
E --> F{Validation}
|
|
16
|
+
F -- No permissions selected --> G[Show validation error]
|
|
17
|
+
F -- Valid --> H[Role permissions updated]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Scenario Patterns
|
|
21
|
+
|
|
22
|
+
- Add one or more permissions to an existing role
|
|
23
|
+
- Remove one or more permissions from an existing role
|
|
24
|
+
- Submission with no permissions selected is blocked by validation
|
|
25
|
+
|
|
26
|
+
## Test Cases
|
|
27
|
+
|
|
28
|
+
- Add a permission to a role and submit; verify the updated permissions are reflected on the role detail
|
|
29
|
+
- Remove all permissions from a role and submit; verify a validation error is shown and the role is not updated
|
|
30
|
+
- Remove one permission while keeping others and submit; verify the permission is no longer listed on the role
|
|
31
|
+
|
|
32
|
+
## Screens
|
|
33
|
+
|
|
34
|
+
- [role-list](../../../screen/role-list.md)
|
|
35
|
+
- [role-detail](../../../screen/role-detail.md)
|
|
36
|
+
- [role-edit-form](../../../screen/role-edit-form.md)
|
|
37
|
+
|
|
38
|
+
## Resolvers
|
|
39
|
+
|
|
40
|
+
- [assignPermissionToRole](../../../resolver/assignPermissionToRole.md)
|
|
41
|
+
- [revokePermissionFromRole](../../../resolver/revokePermissionFromRole.md)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# user-lifecycle
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Manages the lifecycle of user accounts. Users with appropriate roles can create accounts, browse and view other users, edit profile information, and control the active/inactive status. Any user can view and update their own profile.
|
|
6
|
+
|
|
7
|
+
## Actors Involved
|
|
8
|
+
|
|
9
|
+
- [user](../../actors/user.md)
|
|
10
|
+
|
|
11
|
+
## Flow Diagram
|
|
12
|
+
|
|
13
|
+
```mermaid
|
|
14
|
+
sequenceDiagram
|
|
15
|
+
actor User as user
|
|
16
|
+
participant System
|
|
17
|
+
|
|
18
|
+
User->>System: Create User Account
|
|
19
|
+
System-->>User: User created (ACTIVE)
|
|
20
|
+
User->>System: Browse User List
|
|
21
|
+
System-->>User: Paginated user list
|
|
22
|
+
User->>System: View User Detail
|
|
23
|
+
System-->>User: User profile details
|
|
24
|
+
User->>System: Update User Profile
|
|
25
|
+
System-->>User: Profile updated
|
|
26
|
+
User->>System: View Own Profile
|
|
27
|
+
System-->>User: Own profile details
|
|
28
|
+
User->>System: Update Own Profile
|
|
29
|
+
System-->>User: Own profile updated
|
|
30
|
+
alt Deactivate
|
|
31
|
+
User->>System: Deactivate User
|
|
32
|
+
System-->>User: User set to INACTIVE
|
|
33
|
+
end
|
|
34
|
+
alt Reactivate
|
|
35
|
+
User->>System: Reactivate User
|
|
36
|
+
System-->>User: User set to ACTIVE
|
|
37
|
+
end
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Stories
|
|
41
|
+
|
|
42
|
+
- [Create User Account](./story/user--create-user-account.md)
|
|
43
|
+
- [Browse User List](./story/user--browse-user-list.md)
|
|
44
|
+
- [View User Detail](./story/user--view-user-detail.md)
|
|
45
|
+
- [Update User Profile](./story/user--update-user-profile.md)
|
|
46
|
+
- [View Own Profile](./story/user--view-own-profile.md)
|
|
47
|
+
- [Update Own Profile](./story/user--update-own-profile.md)
|
|
48
|
+
- [Toggle User Status](./story/user--toggle-user-status.md)
|
package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--browse-user-list.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Browse User List
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to browse a list of all users, so that I can find and manage user accounts.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open User List] --> B[View paginated user list]
|
|
12
|
+
B --> C{Filter or search?}
|
|
13
|
+
C -- Yes --> D[Apply name/email/status filter]
|
|
14
|
+
D --> B
|
|
15
|
+
C -- No --> E[Select a user to view detail]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Scenario Patterns
|
|
19
|
+
|
|
20
|
+
- View the full list of users with name, email, role, and status columns
|
|
21
|
+
- Filter users by status (ACTIVE / INACTIVE)
|
|
22
|
+
- Search users by name or email
|
|
23
|
+
- Empty list when no users match the filter criteria
|
|
24
|
+
|
|
25
|
+
## Test Cases
|
|
26
|
+
|
|
27
|
+
- Open the user list page; verify all users are displayed with name, email, role, and status
|
|
28
|
+
- Filter by INACTIVE status; verify only inactive users are shown
|
|
29
|
+
- Search by a partial name; verify matching users are displayed
|
|
30
|
+
- Apply a filter that matches no users; verify an empty state message is shown
|
|
31
|
+
|
|
32
|
+
## Screens
|
|
33
|
+
|
|
34
|
+
- [user-list](../../../screen/user-list.md)
|
|
35
|
+
|
|
36
|
+
## Resolvers
|
|
37
|
+
|
|
38
|
+
- None
|
package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--create-user-account.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Create User Account
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to create a new user account with name, email, and optionally one or more roles, so that new employees can access the system.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open User List] --> B[Click Create]
|
|
12
|
+
B --> C[Enter name and email]
|
|
13
|
+
C --> D[Select roles - optional, multiple allowed]
|
|
14
|
+
D --> E[Submit]
|
|
15
|
+
E --> F{Validation}
|
|
16
|
+
F -- Email already exists --> G[Show duplicate email error]
|
|
17
|
+
F -- Required field missing --> H[Show validation error]
|
|
18
|
+
F -- Valid --> I[User created with ACTIVE status]
|
|
19
|
+
I --> J[Display initial password dialog]
|
|
20
|
+
J --> K[Admin copies password and confirms]
|
|
21
|
+
K --> L[Navigate to user list]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Scenario Patterns
|
|
25
|
+
|
|
26
|
+
- Create user with all required fields and one or more roles; initial password is displayed in a dialog
|
|
27
|
+
- Create user with no roles assigned; user is created and roles can be assigned later
|
|
28
|
+
- Duplicate email address is rejected with an error
|
|
29
|
+
- Submission with missing required fields is blocked by validation
|
|
30
|
+
|
|
31
|
+
## Test Cases
|
|
32
|
+
|
|
33
|
+
- Submit the form with valid name, email, and one or more roles; verify the user appears in the list with ACTIVE status and an initial password is returned
|
|
34
|
+
- Submit the form with valid name and email but no roles; verify the user is created with ACTIVE status
|
|
35
|
+
- Submit the form with an email address already assigned to another user; verify an error is shown and no user is created
|
|
36
|
+
- Submit the form with the name field empty; verify a validation error is shown and submission is blocked
|
|
37
|
+
|
|
38
|
+
## Screens
|
|
39
|
+
|
|
40
|
+
- [user-list](../../../screen/user-list.md)
|
|
41
|
+
- [user-create-form](../../../screen/user-create-form.md)
|
|
42
|
+
|
|
43
|
+
## Resolvers
|
|
44
|
+
|
|
45
|
+
- [createUser](../../../resolver/createUser.md)
|
package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--toggle-user-status.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Toggle User Status
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user with the appropriate role, I want to activate or deactivate a user account, so that I can control system access.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open User Detail] --> B{Current status}
|
|
12
|
+
B -- ACTIVE --> C[Click Deactivate]
|
|
13
|
+
B -- INACTIVE --> D[Click Reactivate]
|
|
14
|
+
C --> E[Confirm]
|
|
15
|
+
D --> E
|
|
16
|
+
E --> F[Status changed]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Scenario Patterns
|
|
20
|
+
|
|
21
|
+
- Deactivate an ACTIVE user account
|
|
22
|
+
- Reactivate an INACTIVE user account
|
|
23
|
+
- Cannot deactivate own account
|
|
24
|
+
|
|
25
|
+
## Test Cases
|
|
26
|
+
|
|
27
|
+
- Open the detail page for an ACTIVE user and click Deactivate; verify the user's status changes to INACTIVE
|
|
28
|
+
- Open the detail page for an INACTIVE user and click Reactivate; verify the user's status changes to ACTIVE
|
|
29
|
+
- Open the detail page for the currently authenticated user; verify the Deactivate action is not available
|
|
30
|
+
|
|
31
|
+
## Screens
|
|
32
|
+
|
|
33
|
+
- [user-detail](../../../screen/user-detail.md)
|
|
34
|
+
|
|
35
|
+
## Resolvers
|
|
36
|
+
|
|
37
|
+
- [deactivateUser](../../../resolver/deactivateUser.md)
|
|
38
|
+
- [reactivateUser](../../../resolver/reactivateUser.md)
|
package/templates/scaffold/app/docs/business-flow/user-lifecycle/story/user--update-own-profile.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Update Own Profile
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
|
|
5
|
+
As a user, I want to update my personal information, so that my profile stays accurate.
|
|
6
|
+
|
|
7
|
+
## Story Diagram
|
|
8
|
+
|
|
9
|
+
```mermaid
|
|
10
|
+
flowchart TD
|
|
11
|
+
A[Open Profile Page] --> B[Click Edit]
|
|
12
|
+
B --> C[Update fields]
|
|
13
|
+
C --> D[Submit]
|
|
14
|
+
D --> E{Validation}
|
|
15
|
+
E -- Invalid input --> F[Show validation error]
|
|
16
|
+
E -- Valid --> G[Profile updated]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Scenario Patterns
|
|
20
|
+
|
|
21
|
+
- Update name or email with valid values
|
|
22
|
+
- Submission with invalid values is blocked by validation
|
|
23
|
+
|
|
24
|
+
## Test Cases
|
|
25
|
+
|
|
26
|
+
- Edit the name field with a new valid value and submit; verify the profile page reflects the updated name
|
|
27
|
+
- Clear a required field and submit; verify a validation error is shown and the profile is not updated
|
|
28
|
+
|
|
29
|
+
## Screens
|
|
30
|
+
|
|
31
|
+
- [my-profile](../../../screen/my-profile.md)
|
|
32
|
+
- [my-profile-edit-form](../../../screen/my-profile-edit-form.md)
|
|
33
|
+
|
|
34
|
+
## Resolvers
|
|
35
|
+
|
|
36
|
+
- [updateOwnProfile](../../../resolver/updateOwnProfile.md)
|