@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,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { profitCenter } from "./profitCenter";
|
|
9
|
+
import { profitCenterHierarchy } from "./profitCenterHierarchy";
|
|
10
|
+
import { profitCenterHierarchyNode } from "./profitCenterHierarchyNode";
|
|
11
|
+
|
|
12
|
+
export interface CreateProfitCenterHierarchyAssignmentTypeParams<
|
|
13
|
+
F extends Record<string, TailorAnyDBField>,
|
|
14
|
+
> {
|
|
15
|
+
fields?: F;
|
|
16
|
+
profitCenterType?: TailorAnyDBType;
|
|
17
|
+
profitCenterHierarchyType?: TailorAnyDBType;
|
|
18
|
+
profitCenterHierarchyNodeType?: TailorAnyDBType;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function createProfitCenterHierarchyAssignmentType<
|
|
22
|
+
const F extends Record<string, TailorAnyDBField>,
|
|
23
|
+
>(params: CreateProfitCenterHierarchyAssignmentTypeParams<F>) {
|
|
24
|
+
return db
|
|
25
|
+
.type("ProfitCenterHierarchyAssignment", {
|
|
26
|
+
profitCenterId: db
|
|
27
|
+
.uuid()
|
|
28
|
+
.relation({
|
|
29
|
+
type: "n-1",
|
|
30
|
+
toward: { type: params.profitCenterType ?? profitCenter },
|
|
31
|
+
backward: "hierarchyAssignments",
|
|
32
|
+
})
|
|
33
|
+
.description("Foreign key to ProfitCenter"),
|
|
34
|
+
hierarchyId: db
|
|
35
|
+
.uuid()
|
|
36
|
+
.relation({
|
|
37
|
+
type: "n-1",
|
|
38
|
+
toward: { type: params.profitCenterHierarchyType ?? profitCenterHierarchy },
|
|
39
|
+
backward: "profitCenterAssignments",
|
|
40
|
+
})
|
|
41
|
+
.description("Foreign key to ProfitCenterHierarchy"),
|
|
42
|
+
hierarchyNodeId: db
|
|
43
|
+
.uuid()
|
|
44
|
+
.relation({
|
|
45
|
+
type: "n-1",
|
|
46
|
+
toward: { type: params.profitCenterHierarchyNodeType ?? profitCenterHierarchyNode },
|
|
47
|
+
backward: "profitCenterAssignments",
|
|
48
|
+
})
|
|
49
|
+
.description("Foreign key to ProfitCenterHierarchyNode"),
|
|
50
|
+
...((params.fields ?? {}) as F),
|
|
51
|
+
...db.fields.timestamps(),
|
|
52
|
+
})
|
|
53
|
+
.indexes({
|
|
54
|
+
fields: ["profitCenterId", "hierarchyId"],
|
|
55
|
+
unique: true,
|
|
56
|
+
name: "profit_center_hierarchy_assignment_unique_idx",
|
|
57
|
+
})
|
|
58
|
+
.permission(unsafeAllowAllTypePermission)
|
|
59
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const profitCenterHierarchyAssignment = createProfitCenterHierarchyAssignmentType({});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { profitCenterHierarchy } from "./profitCenterHierarchy";
|
|
9
|
+
|
|
10
|
+
export interface CreateProfitCenterHierarchyNodeTypeParams<
|
|
11
|
+
F extends Record<string, TailorAnyDBField>,
|
|
12
|
+
> {
|
|
13
|
+
fields?: F;
|
|
14
|
+
profitCenterHierarchyType?: TailorAnyDBType;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function createProfitCenterHierarchyNodeType<
|
|
18
|
+
const F extends Record<string, TailorAnyDBField>,
|
|
19
|
+
>(params: CreateProfitCenterHierarchyNodeTypeParams<F>) {
|
|
20
|
+
return db
|
|
21
|
+
.type("ProfitCenterHierarchyNode", {
|
|
22
|
+
name: db.string().description("Name of the hierarchy node"),
|
|
23
|
+
hierarchyId: db
|
|
24
|
+
.uuid()
|
|
25
|
+
.relation({
|
|
26
|
+
type: "n-1",
|
|
27
|
+
toward: { type: params.profitCenterHierarchyType ?? profitCenterHierarchy },
|
|
28
|
+
backward: "nodes",
|
|
29
|
+
})
|
|
30
|
+
.description("Foreign key to ProfitCenterHierarchy"),
|
|
31
|
+
parentNodeId: db
|
|
32
|
+
.uuid({ optional: true })
|
|
33
|
+
.relation({
|
|
34
|
+
type: "n-1",
|
|
35
|
+
toward: { type: "self" },
|
|
36
|
+
backward: "childNodes",
|
|
37
|
+
})
|
|
38
|
+
.description("Optional self-referencing foreign key to parent node"),
|
|
39
|
+
sortOrder: db.int().description("Sort order within the hierarchy level"),
|
|
40
|
+
level: db.int().description("Depth level in the hierarchy"),
|
|
41
|
+
...((params.fields ?? {}) as F),
|
|
42
|
+
...db.fields.timestamps(),
|
|
43
|
+
})
|
|
44
|
+
.permission(unsafeAllowAllTypePermission)
|
|
45
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const profitCenterHierarchyNode = createProfitCenterHierarchyNodeType({});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { accountingPeriod as accountingPeriodStub, company as companyStub } from "../lib/_db_deps";
|
|
9
|
+
|
|
10
|
+
export const VARIANCE_REPORT_STATUSES = ["DRAFT", "FINAL"] as const;
|
|
11
|
+
|
|
12
|
+
export interface CreateVarianceReportTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
13
|
+
fields?: F;
|
|
14
|
+
companyType?: TailorAnyDBType;
|
|
15
|
+
accountingPeriodType?: TailorAnyDBType;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function createVarianceReportType<const F extends Record<string, TailorAnyDBField>>(
|
|
19
|
+
params: CreateVarianceReportTypeParams<F>,
|
|
20
|
+
) {
|
|
21
|
+
return db
|
|
22
|
+
.type("VarianceReport", {
|
|
23
|
+
costObjectType: db.string().description("Polymorphic cost object type"),
|
|
24
|
+
costObjectId: db.uuid().description("Polymorphic cost object identifier"),
|
|
25
|
+
accountingPeriodId: db
|
|
26
|
+
.uuid()
|
|
27
|
+
.relation({
|
|
28
|
+
type: "n-1",
|
|
29
|
+
toward: { type: params.accountingPeriodType ?? accountingPeriodStub },
|
|
30
|
+
backward: "varianceReports",
|
|
31
|
+
})
|
|
32
|
+
.description("Foreign key to AccountingPeriod"),
|
|
33
|
+
companyId: db
|
|
34
|
+
.uuid()
|
|
35
|
+
.relation({
|
|
36
|
+
type: "n-1",
|
|
37
|
+
toward: { type: params.companyType ?? companyStub },
|
|
38
|
+
backward: "varianceReports",
|
|
39
|
+
})
|
|
40
|
+
.description("Foreign key to Company"),
|
|
41
|
+
totalPlanned: db.float().description("Total planned amount"),
|
|
42
|
+
totalActual: db.float().description("Total actual amount"),
|
|
43
|
+
totalVariance: db.float().description("Total variance amount"),
|
|
44
|
+
status: db
|
|
45
|
+
.enum([...VARIANCE_REPORT_STATUSES])
|
|
46
|
+
.description("Variance report lifecycle status"),
|
|
47
|
+
...((params.fields ?? {}) as F),
|
|
48
|
+
...db.fields.timestamps(),
|
|
49
|
+
})
|
|
50
|
+
.permission(unsafeAllowAllTypePermission)
|
|
51
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export const varianceReport = createVarianceReportType({});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { accountingPeriod as accountingPeriodStub } from "../lib/_db_deps";
|
|
9
|
+
import { varianceReport } from "./varianceReport";
|
|
10
|
+
import { costElement } from "./costElement";
|
|
11
|
+
|
|
12
|
+
export const VARIANCE_DIRECTIONS = ["FAVORABLE", "UNFAVORABLE"] as const;
|
|
13
|
+
|
|
14
|
+
export interface CreateVarianceReportLineTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
15
|
+
fields?: F;
|
|
16
|
+
varianceReportType?: TailorAnyDBType;
|
|
17
|
+
costElementType?: TailorAnyDBType;
|
|
18
|
+
accountingPeriodType?: TailorAnyDBType;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function createVarianceReportLineType<const F extends Record<string, TailorAnyDBField>>(
|
|
22
|
+
params: CreateVarianceReportLineTypeParams<F>,
|
|
23
|
+
) {
|
|
24
|
+
return db
|
|
25
|
+
.type("VarianceReportLine", {
|
|
26
|
+
varianceReportId: db
|
|
27
|
+
.uuid()
|
|
28
|
+
.relation({
|
|
29
|
+
type: "n-1",
|
|
30
|
+
toward: { type: params.varianceReportType ?? varianceReport },
|
|
31
|
+
backward: "lines",
|
|
32
|
+
})
|
|
33
|
+
.description("Foreign key to VarianceReport"),
|
|
34
|
+
costElementId: db
|
|
35
|
+
.uuid()
|
|
36
|
+
.relation({
|
|
37
|
+
type: "n-1",
|
|
38
|
+
toward: { type: params.costElementType ?? costElement },
|
|
39
|
+
backward: "varianceReportLines",
|
|
40
|
+
})
|
|
41
|
+
.description("Foreign key to CostElement"),
|
|
42
|
+
accountingPeriodId: db
|
|
43
|
+
.uuid()
|
|
44
|
+
.relation({
|
|
45
|
+
type: "n-1",
|
|
46
|
+
toward: { type: params.accountingPeriodType ?? accountingPeriodStub },
|
|
47
|
+
backward: "varianceReportLines",
|
|
48
|
+
})
|
|
49
|
+
.description("Foreign key to AccountingPeriod"),
|
|
50
|
+
plannedAmount: db.float().description("Planned/budgeted amount"),
|
|
51
|
+
actualAmount: db.float().description("Actual amount"),
|
|
52
|
+
varianceAmount: db.float().description("Variance amount (actual - planned)"),
|
|
53
|
+
variancePercentage: db.float().description("Variance as a percentage"),
|
|
54
|
+
varianceDirection: db.enum([...VARIANCE_DIRECTIONS]).description("Direction of the variance"),
|
|
55
|
+
...((params.fields ?? {}) as F),
|
|
56
|
+
...db.fields.timestamps(),
|
|
57
|
+
})
|
|
58
|
+
.permission(unsafeAllowAllTypePermission)
|
|
59
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const varianceReportLine = createVarianceReportLineType({});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# ActivateBudget
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
activateBudget transitions a budget from APPROVED status to ACTIVE status, enabling funds checking (budgetary control) for the associated cost object. Only one ACTIVE budget of type BUDGET can exist per cost object per fiscal year. Multiple FORECAST or SIMULATION versions can coexist.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Budget must exist
|
|
10
|
+
- Budget must be in APPROVED status to be activated
|
|
11
|
+
- Upon activation, funds checking is enabled for the cost object
|
|
12
|
+
- Only one ACTIVE budget of type BUDGET can exist per cost object per fiscal year
|
|
13
|
+
- Multiple ACTIVE FORECAST or SIMULATION plan versions can coexist for the same cost object and fiscal year
|
|
14
|
+
- Transitions status from APPROVED to ACTIVE
|
|
15
|
+
- Emits an audit event recording the status transition and acting user
|
|
16
|
+
|
|
17
|
+
## Process Flow
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart TD
|
|
21
|
+
A[Receive activate budget request] --> B{Budget exists?}
|
|
22
|
+
B -->|No| C[Return error: BUDGET_NOT_FOUND]
|
|
23
|
+
B -->|Yes| D{Status is APPROVED?}
|
|
24
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
25
|
+
D -->|Yes| F{Plan version type is BUDGET?}
|
|
26
|
+
F -->|Yes| G{Another ACTIVE BUDGET exists for same cost object and fiscal year?}
|
|
27
|
+
G -->|Yes| H[Return error: DUPLICATE_ACTIVE_BUDGET]
|
|
28
|
+
G -->|No| I[Transition status from APPROVED to ACTIVE]
|
|
29
|
+
F -->|No| I
|
|
30
|
+
I --> J[Enable funds checking]
|
|
31
|
+
J --> K[Emit audit event]
|
|
32
|
+
K --> L[Return activated budget]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## External Dependencies
|
|
36
|
+
|
|
37
|
+
- None
|
|
38
|
+
|
|
39
|
+
## Error Scenarios
|
|
40
|
+
|
|
41
|
+
- **BUDGET_NOT_FOUND**: Budget with the specified ID does not exist
|
|
42
|
+
- **INVALID_STATE**: Budget is not in APPROVED status
|
|
43
|
+
- **DUPLICATE_ACTIVE_BUDGET**: Another ACTIVE budget of type BUDGET already exists for the same cost object and fiscal year
|
|
44
|
+
|
|
45
|
+
## Test Cases
|
|
46
|
+
|
|
47
|
+
- activates an APPROVED budget transitioning it to ACTIVE status
|
|
48
|
+
- enables funds checking upon activation
|
|
49
|
+
- returns error when budget does not exist
|
|
50
|
+
- returns error when budget is not in APPROVED status
|
|
51
|
+
- returns error when another ACTIVE BUDGET exists for the same cost object and fiscal year
|
|
52
|
+
- allows multiple ACTIVE FORECAST versions for the same cost object and fiscal year
|
|
53
|
+
- allows multiple ACTIVE SIMULATION versions for the same cost object and fiscal year
|
|
54
|
+
- emits audit event recording the status transition and acting user
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ActivateCostElement
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
activateCostElement transitions a cost element from DRAFT status to ACTIVE status, making it available for use in cost postings and allocation processes. Only cost elements currently in DRAFT status can be activated.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Cost element must exist
|
|
10
|
+
- Cost element must be in DRAFT status to be activated
|
|
11
|
+
- Activating an already ACTIVE or INACTIVE cost element is rejected as an invalid state transition
|
|
12
|
+
- Upon activation, the cost element becomes available for cost postings and allocations
|
|
13
|
+
- Emits an audit event recording the status transition and acting user
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive activate cost element request] --> B{Cost element exists?}
|
|
20
|
+
B -->|No| C[Return error: COST_ELEMENT_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Status is DRAFT?}
|
|
22
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
23
|
+
D -->|Yes| F[Transition status from DRAFT to ACTIVE]
|
|
24
|
+
F --> G[Emit audit event]
|
|
25
|
+
G --> H[Return activated cost element]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- None
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **COST_ELEMENT_NOT_FOUND**: Cost element with the specified ID does not exist
|
|
35
|
+
- **INVALID_STATE**: Cost element is not in DRAFT status (e.g., already ACTIVE or INACTIVE)
|
|
36
|
+
|
|
37
|
+
## Test Cases
|
|
38
|
+
|
|
39
|
+
- activates a DRAFT cost element transitioning it to ACTIVE status
|
|
40
|
+
- returns error when cost element does not exist
|
|
41
|
+
- returns error when cost element is already ACTIVE
|
|
42
|
+
- returns error when cost element is INACTIVE
|
|
43
|
+
- emits audit event recording the status transition and acting user
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ActivateProfitCenter
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
activateProfitCenter transitions a profit center from DRAFT status to ACTIVE status, making it available for transaction tagging and profitability reporting. Only profit centers currently in DRAFT status can be activated.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Profit center must exist
|
|
10
|
+
- Profit center must be in DRAFT status to be activated
|
|
11
|
+
- Activating an already ACTIVE or INACTIVE profit center is rejected as an invalid state transition
|
|
12
|
+
- Upon activation, the profit center becomes available for revenue and cost transaction assignments
|
|
13
|
+
- Emits an audit event recording the status transition and acting user
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive activate profit center request] --> B{Profit center exists?}
|
|
20
|
+
B -->|No| C[Return error: PROFIT_CENTER_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Status is DRAFT?}
|
|
22
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
23
|
+
D -->|Yes| F[Transition status from DRAFT to ACTIVE]
|
|
24
|
+
F --> G[Emit audit event]
|
|
25
|
+
G --> H[Return activated profit center]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- None
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **PROFIT_CENTER_NOT_FOUND**: Profit center with the specified ID does not exist
|
|
35
|
+
- **INVALID_STATE**: Profit center is not in DRAFT status (e.g., already ACTIVE or INACTIVE)
|
|
36
|
+
|
|
37
|
+
## Test Cases
|
|
38
|
+
|
|
39
|
+
- activates a DRAFT profit center transitioning it to ACTIVE status
|
|
40
|
+
- returns error when profit center does not exist
|
|
41
|
+
- returns error when profit center is already ACTIVE
|
|
42
|
+
- returns error when profit center is INACTIVE
|
|
43
|
+
- emits audit event recording the status transition and acting user
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# ApproveBudget
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
approveBudget transitions a budget from SUBMITTED status to APPROVED status. The approver must be a different user from the budget creator to enforce segregation of duties. Only SUBMITTED budgets can be approved.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Budget must exist
|
|
10
|
+
- Budget must be in SUBMITTED status to be approved
|
|
11
|
+
- Approver must be a different user from the budget creator (segregation of duties)
|
|
12
|
+
- Transitions status from SUBMITTED to APPROVED
|
|
13
|
+
- Emits an audit event recording the status transition, approver, and acting user
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive approve budget request] --> B{Budget exists?}
|
|
20
|
+
B -->|No| C[Return error: BUDGET_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Status is SUBMITTED?}
|
|
22
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
23
|
+
D -->|Yes| F{Approver different from creator?}
|
|
24
|
+
F -->|No| G[Return error: SELF_APPROVAL_NOT_ALLOWED]
|
|
25
|
+
F -->|Yes| H[Transition status from SUBMITTED to APPROVED]
|
|
26
|
+
H --> I[Emit audit event]
|
|
27
|
+
I --> J[Return approved budget]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## External Dependencies
|
|
31
|
+
|
|
32
|
+
- None
|
|
33
|
+
|
|
34
|
+
## Error Scenarios
|
|
35
|
+
|
|
36
|
+
- **BUDGET_NOT_FOUND**: Budget with the specified ID does not exist
|
|
37
|
+
- **INVALID_STATE**: Budget is not in SUBMITTED status
|
|
38
|
+
- **SELF_APPROVAL_NOT_ALLOWED**: Approver is the same user who created the budget (segregation of duties violation)
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- approves a SUBMITTED budget transitioning it to APPROVED status
|
|
43
|
+
- returns error when budget does not exist
|
|
44
|
+
- returns error when budget is not in SUBMITTED status
|
|
45
|
+
- returns error when approver is the same as the budget creator
|
|
46
|
+
- emits audit event recording the status transition and approver
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# AssignCostCenterToHierarchyNode
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
assignCostCenterToHierarchyNode moves an existing cost center to a different hierarchy node within the same company's cost center hierarchy. This enables reorganization of the cost center structure without recreating cost center master data.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Cost center must exist
|
|
10
|
+
- Target hierarchy node must exist within the same company's hierarchy
|
|
11
|
+
- Cost center and target node must belong to the same company
|
|
12
|
+
- Multiple cost centers can be assigned to the same hierarchy node
|
|
13
|
+
- Emits an audit event recording the hierarchy assignment change and acting user
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive assign cost center to hierarchy node request] --> B{Cost center exists?}
|
|
20
|
+
B -->|No| C[Return error: COST_CENTER_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Target hierarchy node exists?}
|
|
22
|
+
D -->|No| E[Return error: HIERARCHY_NODE_NOT_FOUND]
|
|
23
|
+
D -->|Yes| F{Same company?}
|
|
24
|
+
F -->|No| G[Return error: COMPANY_MISMATCH]
|
|
25
|
+
F -->|Yes| H[Assign cost center to target hierarchy node]
|
|
26
|
+
H --> I[Emit audit event]
|
|
27
|
+
I --> J[Return updated cost center]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## External Dependencies
|
|
31
|
+
|
|
32
|
+
- None
|
|
33
|
+
|
|
34
|
+
## Error Scenarios
|
|
35
|
+
|
|
36
|
+
- **COST_CENTER_NOT_FOUND**: Cost center with the specified ID does not exist
|
|
37
|
+
- **HIERARCHY_NODE_NOT_FOUND**: Target hierarchy node does not exist
|
|
38
|
+
- **COMPANY_MISMATCH**: Cost center and target hierarchy node do not belong to the same company
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- returns error when cost center does not exist
|
|
43
|
+
- returns error when target hierarchy node does not exist
|
|
44
|
+
- returns error when cost center and node belong to different companies
|
|
45
|
+
- assigns cost center to hierarchy node successfully
|
|
46
|
+
- updates the hierarchyNodeId field on the cost center
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# AssignProfitCenterToHierarchyNode
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
assignProfitCenterToHierarchyNode assigns a profit center to a specific node within a profit center hierarchy. A profit center can be assigned to exactly one node per hierarchy but can be assigned to nodes in multiple hierarchies simultaneously, enabling multi-dimensional reporting.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Profit center must exist
|
|
10
|
+
- Target hierarchy node must exist
|
|
11
|
+
- A profit center can be assigned to exactly one node within a given hierarchy
|
|
12
|
+
- A profit center can be assigned to nodes in multiple hierarchies simultaneously
|
|
13
|
+
- Assigning to a new node within the same hierarchy replaces the previous assignment
|
|
14
|
+
- Emits an audit event recording the hierarchy assignment and acting user
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive assign profit center to hierarchy node request] --> B{Profit center exists?}
|
|
21
|
+
B -->|No| C[Return error: PROFIT_CENTER_NOT_FOUND]
|
|
22
|
+
B -->|Yes| D{Target hierarchy node exists?}
|
|
23
|
+
D -->|No| E[Return error: HIERARCHY_NODE_NOT_FOUND]
|
|
24
|
+
D -->|Yes| F{Already assigned to a node in this hierarchy?}
|
|
25
|
+
F -->|Yes| G[Replace existing assignment with new node]
|
|
26
|
+
F -->|No| H[Create new assignment to target node]
|
|
27
|
+
G --> I[Emit audit event]
|
|
28
|
+
H --> I
|
|
29
|
+
I --> J[Return updated assignment]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## External Dependencies
|
|
33
|
+
|
|
34
|
+
- None
|
|
35
|
+
|
|
36
|
+
## Error Scenarios
|
|
37
|
+
|
|
38
|
+
- **PROFIT_CENTER_NOT_FOUND**: Profit center with the specified ID does not exist
|
|
39
|
+
- **HIERARCHY_NODE_NOT_FOUND**: Target hierarchy node does not exist
|
|
40
|
+
|
|
41
|
+
## Test Cases
|
|
42
|
+
|
|
43
|
+
- assigns a profit center to a hierarchy node (creates new assignment)
|
|
44
|
+
- replaces existing assignment when profit center is already assigned in the same hierarchy
|
|
45
|
+
- allows a profit center to be assigned to nodes in multiple hierarchies
|
|
46
|
+
- returns error when profit center does not exist
|
|
47
|
+
- returns error when target hierarchy node does not exist
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# CloseBudget
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
closeBudget transitions a budget from ACTIVE status to CLOSED status. Once closed, no further modifications are permitted and the budget cannot be reopened. This is the terminal state of the budget lifecycle.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Budget must exist
|
|
10
|
+
- Budget must be in ACTIVE status to be closed
|
|
11
|
+
- Transitions status from ACTIVE to CLOSED
|
|
12
|
+
- No further modifications are permitted after closure
|
|
13
|
+
- A CLOSED budget cannot be reopened
|
|
14
|
+
- Emits an audit event recording the status transition and acting user
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive close budget request] --> B{Budget exists?}
|
|
21
|
+
B -->|No| C[Return error: BUDGET_NOT_FOUND]
|
|
22
|
+
B -->|Yes| D{Status is ACTIVE?}
|
|
23
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
24
|
+
D -->|Yes| F[Transition status from ACTIVE to CLOSED]
|
|
25
|
+
F --> G[Emit audit event]
|
|
26
|
+
G --> H[Return closed budget]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- None
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **BUDGET_NOT_FOUND**: Budget with the specified ID does not exist
|
|
36
|
+
- **INVALID_STATE**: Budget is not in ACTIVE status
|
|
37
|
+
|
|
38
|
+
## Test Cases
|
|
39
|
+
|
|
40
|
+
- closes an ACTIVE budget transitioning it to CLOSED status
|
|
41
|
+
- returns error when budget does not exist
|
|
42
|
+
- returns error when budget is not in ACTIVE status
|
|
43
|
+
- returns error when budget is in DRAFT status
|
|
44
|
+
- returns error when budget is in SUBMITTED status
|
|
45
|
+
- returns error when budget is in APPROVED status
|
|
46
|
+
- returns error when budget is already CLOSED
|
|
47
|
+
- emits audit event recording the status transition and acting user
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# CloseInternalOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
closeInternalOrder transitions an internal order from TECHNICALLY_COMPLETED status to CLOSED status. Once closed, no further changes or cost postings are permitted. This is the terminal state of the internal order lifecycle.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Internal order must exist
|
|
10
|
+
- Internal order must be in TECHNICALLY_COMPLETED status to be closed
|
|
11
|
+
- Closing a CREATED, RELEASED, or already CLOSED order is rejected as an invalid state transition
|
|
12
|
+
- CLOSED orders cannot transition to any other status
|
|
13
|
+
- No further modifications are permitted after closure
|
|
14
|
+
- Emits an audit event recording the status transition and acting user
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive close internal order request] --> B{Internal order exists?}
|
|
21
|
+
B -->|No| C[Return error: INTERNAL_ORDER_NOT_FOUND]
|
|
22
|
+
B -->|Yes| D{Status is TECHNICALLY_COMPLETED?}
|
|
23
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
24
|
+
D -->|Yes| F[Transition status from TECHNICALLY_COMPLETED to CLOSED]
|
|
25
|
+
F --> G[Emit audit event]
|
|
26
|
+
G --> H[Return closed internal order]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- None
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **INTERNAL_ORDER_NOT_FOUND**: Internal order with the specified ID does not exist
|
|
36
|
+
- **INVALID_STATE**: Internal order is not in TECHNICALLY_COMPLETED status
|
|
37
|
+
|
|
38
|
+
## Test Cases
|
|
39
|
+
|
|
40
|
+
- closes a TECHNICALLY_COMPLETED internal order transitioning it to CLOSED status
|
|
41
|
+
- returns error when internal order does not exist
|
|
42
|
+
- returns error when internal order is in CREATED status
|
|
43
|
+
- returns error when internal order is in RELEASED status
|
|
44
|
+
- returns error when internal order is already CLOSED
|
|
45
|
+
- emits audit event recording the status transition and acting user
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# ConsumeCommitment
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
consumeCommitment reduces an existing commitment and increases the actual amount when goods are received or an invoice is matched against a purchase order. This reclassifies committed funds as actual expenditure, keeping budget availability unchanged for the consumed portion.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Commitment must exist for the specified cost element, cost object, and period
|
|
10
|
+
- Requires a positive consumption amount
|
|
11
|
+
- Consumption amount must not exceed the remaining commitment amount
|
|
12
|
+
- Reduces the commitment amount by the consumption amount
|
|
13
|
+
- Increases the actual amount by the consumption amount
|
|
14
|
+
- Budget availability remains unchanged for the consumed portion (commitment decreases, actual increases by the same amount)
|
|
15
|
+
- Emits an audit event recording the consumption and acting user
|
|
16
|
+
|
|
17
|
+
## Process Flow
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart TD
|
|
21
|
+
A[Receive consume commitment request] --> B{Commitment exists?}
|
|
22
|
+
B -->|No| C[Return error: COMMITMENT_NOT_FOUND]
|
|
23
|
+
B -->|Yes| D{Consumption amount positive?}
|
|
24
|
+
D -->|No| E[Return error: INVALID_CONSUMPTION_AMOUNT]
|
|
25
|
+
D -->|Yes| F{Consumption amount <= remaining commitment?}
|
|
26
|
+
F -->|No| G[Return error: CONSUMPTION_EXCEEDS_COMMITMENT]
|
|
27
|
+
F -->|Yes| H[Reduce commitment by consumption amount]
|
|
28
|
+
H --> I[Increase actual by consumption amount]
|
|
29
|
+
I --> J[Emit audit event]
|
|
30
|
+
J --> K[Return updated commitment]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## External Dependencies
|
|
34
|
+
|
|
35
|
+
- None
|
|
36
|
+
|
|
37
|
+
## Error Scenarios
|
|
38
|
+
|
|
39
|
+
- **COMMITMENT_NOT_FOUND**: No commitment exists for the specified cost element, cost object, and period
|
|
40
|
+
- **INVALID_CONSUMPTION_AMOUNT**: Consumption amount is not positive
|
|
41
|
+
- **CONSUMPTION_EXCEEDS_COMMITMENT**: Consumption amount exceeds the remaining commitment amount
|
|
42
|
+
|
|
43
|
+
## Test Cases
|
|
44
|
+
|
|
45
|
+
- consumes a portion of an existing commitment
|
|
46
|
+
- reduces commitment amount by the consumption amount
|
|
47
|
+
- increases actual amount by the consumption amount
|
|
48
|
+
- budget availability remains unchanged for the consumed portion
|
|
49
|
+
- returns error when commitment does not exist
|
|
50
|
+
- returns error when consumption amount is zero or negative
|
|
51
|
+
- returns error when consumption amount exceeds remaining commitment
|
|
52
|
+
- fully consumes a commitment when consumption equals remaining amount
|
|
53
|
+
- emits audit event recording the consumption and acting user
|