@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,55 @@
|
|
|
1
|
+
# CreateAllocationCycle
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createAllocationCycle establishes a new allocation cycle in DRAFT status. An allocation cycle groups a set of allocation rules that define how overhead costs are distributed from sender cost centers to receiver cost objects. It requires a name, allocation type (ASSESSMENT or DISTRIBUTION), a company reference, and an accounting period reference.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Allocation cycle is always created in DRAFT status
|
|
10
|
+
- Requires a valid `companyId` referencing an ACTIVE company from the organization module
|
|
11
|
+
- Requires a valid `name`
|
|
12
|
+
- Requires a valid `type` of either ASSESSMENT or DISTRIBUTION
|
|
13
|
+
- Requires a valid `accountingPeriodId` referencing an existing accounting period from finance-ledger
|
|
14
|
+
- Allocation cycles are scoped to a company; cycles from different companies are fully isolated
|
|
15
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
16
|
+
|
|
17
|
+
## Process Flow
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart TD
|
|
21
|
+
A[Receive create allocation cycle request] --> B{Company exists and is ACTIVE?}
|
|
22
|
+
B -->|No| C[Return error: COMPANY_NOT_FOUND]
|
|
23
|
+
B -->|Yes| D{Valid allocation type?}
|
|
24
|
+
D -->|No| E[Return error: INVALID_ALLOCATION_TYPE]
|
|
25
|
+
D -->|Yes| F{Accounting period exists?}
|
|
26
|
+
F -->|No| G[Return error: ACCOUNTING_PERIOD_NOT_FOUND]
|
|
27
|
+
F -->|Yes| H{Name provided?}
|
|
28
|
+
H -->|No| I[Return error: INVALID_NAME]
|
|
29
|
+
H -->|Yes| J[Create allocation cycle in DRAFT status]
|
|
30
|
+
J --> K[Emit audit event]
|
|
31
|
+
K --> L[Return created allocation cycle]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## External Dependencies
|
|
35
|
+
|
|
36
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
|
|
37
|
+
- [finance-ledger::getAccountingPeriod](../../../finance-ledger/docs/queries/GetAccountingPeriod.md) — Validates that the referenced accounting period exists
|
|
38
|
+
|
|
39
|
+
## Error Scenarios
|
|
40
|
+
|
|
41
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
42
|
+
- **INVALID_ALLOCATION_TYPE**: Type is not ASSESSMENT or DISTRIBUTION
|
|
43
|
+
- **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
|
|
44
|
+
- **INVALID_NAME**: Name is missing or empty
|
|
45
|
+
|
|
46
|
+
## Test Cases
|
|
47
|
+
|
|
48
|
+
- creates allocation cycle in DRAFT status with required fields
|
|
49
|
+
- returns error when company does not exist
|
|
50
|
+
- returns error when company is not ACTIVE
|
|
51
|
+
- returns error when allocation type is invalid
|
|
52
|
+
- returns error when accounting period does not exist
|
|
53
|
+
- returns error when name is missing
|
|
54
|
+
- allocation cycles from different companies are isolated
|
|
55
|
+
- emits audit event recording acting user, timestamp, and initial field values
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# CreateAllocationRule
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createAllocationRule adds an allocation rule to a DRAFT allocation cycle. Each rule defines a sender cost center, one or more receiver cost objects (cost center, profit center, or internal order), and the allocation percentage for each receiver. The sender cannot also appear as a receiver within the same rule. Percentage values must be positive.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Allocation cycle must exist and be in DRAFT status
|
|
10
|
+
- Rules cannot be added to cycles in VALIDATED, EXECUTED, POSTED, or REVERSED status
|
|
11
|
+
- Requires a valid sender cost center reference
|
|
12
|
+
- Requires one or more valid receiver cost objects (cost center, profit center, or internal order)
|
|
13
|
+
- Sender cost center cannot also be a receiver within the same rule set
|
|
14
|
+
- Percentage values for each receiver must be positive (greater than zero)
|
|
15
|
+
- Emits an audit event recording the rule creation and acting user
|
|
16
|
+
|
|
17
|
+
## Process Flow
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart TD
|
|
21
|
+
A[Receive create allocation rule request] --> B{Allocation cycle exists?}
|
|
22
|
+
B -->|No| C[Return error: ALLOCATION_CYCLE_NOT_FOUND]
|
|
23
|
+
B -->|Yes| D{Status is DRAFT?}
|
|
24
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
25
|
+
D -->|Yes| F{Sender cost center valid?}
|
|
26
|
+
F -->|No| G[Return error: SENDER_NOT_FOUND]
|
|
27
|
+
F -->|Yes| H{All receivers valid?}
|
|
28
|
+
H -->|No| I[Return error: RECEIVER_NOT_FOUND]
|
|
29
|
+
H -->|Yes| J{Sender appears as receiver?}
|
|
30
|
+
J -->|Yes| K[Return error: SENDER_IS_RECEIVER]
|
|
31
|
+
J -->|No| L{All percentages positive?}
|
|
32
|
+
L -->|No| M[Return error: INVALID_PERCENTAGE]
|
|
33
|
+
L -->|Yes| N[Create allocation rule]
|
|
34
|
+
N --> O[Emit audit event]
|
|
35
|
+
O --> P[Return created allocation rule]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## External Dependencies
|
|
39
|
+
|
|
40
|
+
- None
|
|
41
|
+
|
|
42
|
+
## Error Scenarios
|
|
43
|
+
|
|
44
|
+
- **ALLOCATION_CYCLE_NOT_FOUND**: Allocation cycle with the specified ID does not exist
|
|
45
|
+
- **INVALID_STATE**: Allocation cycle is not in DRAFT status
|
|
46
|
+
- **SENDER_NOT_FOUND**: Referenced sender cost center does not exist
|
|
47
|
+
- **RECEIVER_NOT_FOUND**: One or more referenced receiver cost objects do not exist
|
|
48
|
+
- **SENDER_IS_RECEIVER**: Sender cost center appears as a receiver in the same rule
|
|
49
|
+
- **INVALID_PERCENTAGE**: One or more percentage values are not positive
|
|
50
|
+
|
|
51
|
+
## Test Cases
|
|
52
|
+
|
|
53
|
+
- adds an allocation rule to a DRAFT allocation cycle
|
|
54
|
+
- returns error when allocation cycle does not exist
|
|
55
|
+
- returns error when allocation cycle is not in DRAFT status
|
|
56
|
+
- returns error when sender cost center does not exist
|
|
57
|
+
- returns error when a receiver cost object does not exist
|
|
58
|
+
- returns error when sender appears as a receiver
|
|
59
|
+
- returns error when percentage value is zero or negative
|
|
60
|
+
- emits audit event recording the rule creation and acting user
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# CreateBudget
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createBudget establishes a new budget in DRAFT status. A budget is a financial plan that allocates planned amounts to cost elements across accounting periods for a specific cost object. It requires a name, budget holder, fiscal year reference, company reference, cost object type and ID, and a plan version reference.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Budget is always created in DRAFT status
|
|
10
|
+
- Requires a valid `companyId` referencing an ACTIVE company from the organization module
|
|
11
|
+
- Requires a `name`
|
|
12
|
+
- Requires a `budgetHolderId`
|
|
13
|
+
- Requires a valid `fiscalYearId` referencing an existing fiscal year from finance-ledger
|
|
14
|
+
- Requires a `costObjectType` and `costObjectId` referencing a valid cost object (cost center, profit center, or internal order)
|
|
15
|
+
- Requires a valid `planVersionId` referencing an existing plan version
|
|
16
|
+
- Budgets are scoped to a company; budgets from different companies are fully isolated
|
|
17
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
18
|
+
|
|
19
|
+
## Process Flow
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart TD
|
|
23
|
+
A[Receive create budget request] --> B{Company exists and is ACTIVE?}
|
|
24
|
+
B -->|No| C[Return error: COMPANY_NOT_FOUND]
|
|
25
|
+
B -->|Yes| D{Fiscal year exists?}
|
|
26
|
+
D -->|No| E[Return error: FISCAL_YEAR_NOT_FOUND]
|
|
27
|
+
D -->|Yes| F{Cost object exists?}
|
|
28
|
+
F -->|No| G[Return error: COST_OBJECT_NOT_FOUND]
|
|
29
|
+
F -->|Yes| H{Plan version exists?}
|
|
30
|
+
H -->|No| I[Return error: PLAN_VERSION_NOT_FOUND]
|
|
31
|
+
H -->|Yes| J{Name provided?}
|
|
32
|
+
J -->|No| K[Return error: INVALID_NAME]
|
|
33
|
+
J -->|Yes| L{Budget holder provided?}
|
|
34
|
+
L -->|No| M[Return error: BUDGET_HOLDER_REQUIRED]
|
|
35
|
+
L -->|Yes| N[Create budget in DRAFT status]
|
|
36
|
+
N --> O[Emit audit event]
|
|
37
|
+
O --> P[Return created budget]
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## External Dependencies
|
|
41
|
+
|
|
42
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
|
|
43
|
+
- [finance-ledger::getFiscalYear](../../../finance-ledger/docs/queries/GetFiscalYear.md) — Validates that the referenced fiscal year exists
|
|
44
|
+
|
|
45
|
+
## Error Scenarios
|
|
46
|
+
|
|
47
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
48
|
+
- **FISCAL_YEAR_NOT_FOUND**: Referenced fiscal year does not exist
|
|
49
|
+
- **COST_OBJECT_NOT_FOUND**: Referenced cost object (cost center, profit center, or internal order) does not exist
|
|
50
|
+
- **PLAN_VERSION_NOT_FOUND**: Referenced plan version does not exist
|
|
51
|
+
- **INVALID_NAME**: Name is missing or empty
|
|
52
|
+
- **BUDGET_HOLDER_REQUIRED**: Budget holder reference is missing
|
|
53
|
+
|
|
54
|
+
## Test Cases
|
|
55
|
+
|
|
56
|
+
- creates budget in DRAFT status with required fields
|
|
57
|
+
- returns error when company does not exist
|
|
58
|
+
- returns error when company is not ACTIVE
|
|
59
|
+
- returns error when fiscal year does not exist
|
|
60
|
+
- returns error when cost object does not exist
|
|
61
|
+
- returns error when plan version does not exist
|
|
62
|
+
- returns error when name is missing
|
|
63
|
+
- returns error when budget holder is missing
|
|
64
|
+
- budgets from different companies are isolated
|
|
65
|
+
- emits audit event recording acting user, timestamp, and initial field values
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# CreateBudgetLineItem
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createBudgetLineItem adds a line item to a DRAFT budget. Each line item specifies a cost element, an accounting period, and a planned amount. The GL account is derived automatically from the primary cost element's GL account mapping. Duplicate line items (same cost element and period) within a single budget are rejected.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Budget must exist and be in DRAFT status
|
|
10
|
+
- Line items cannot be added to budgets in SUBMITTED, APPROVED, ACTIVE, or CLOSED status
|
|
11
|
+
- Requires a valid `costElementId` referencing a PRIMARY cost element in ACTIVE status
|
|
12
|
+
- Requires a valid `accountingPeriodId` referencing an existing accounting period from finance-ledger
|
|
13
|
+
- Requires a `plannedAmount` that is a positive value
|
|
14
|
+
- GL account is derived automatically from the referenced primary cost element's GL account mapping
|
|
15
|
+
- Duplicate line items (same cost element and same period) within the same budget are rejected
|
|
16
|
+
- Emits an audit event recording the line item creation and acting user
|
|
17
|
+
|
|
18
|
+
## Process Flow
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart TD
|
|
22
|
+
A[Receive create budget line item request] --> B{Budget exists?}
|
|
23
|
+
B -->|No| C[Return error: BUDGET_NOT_FOUND]
|
|
24
|
+
B -->|Yes| D{Status is DRAFT?}
|
|
25
|
+
D -->|No| E[Return error: INVALID_STATE]
|
|
26
|
+
D -->|Yes| F{Cost element exists, is PRIMARY, and ACTIVE?}
|
|
27
|
+
F -->|No| G[Return error: INVALID_COST_ELEMENT]
|
|
28
|
+
F -->|Yes| H{Accounting period exists?}
|
|
29
|
+
H -->|No| I[Return error: ACCOUNTING_PERIOD_NOT_FOUND]
|
|
30
|
+
H -->|Yes| J{Planned amount is positive?}
|
|
31
|
+
J -->|No| K[Return error: INVALID_PLANNED_AMOUNT]
|
|
32
|
+
J -->|Yes| L{Duplicate line item exists?}
|
|
33
|
+
L -->|Yes| M[Return error: DUPLICATE_LINE_ITEM]
|
|
34
|
+
L -->|No| N[Derive GL account from cost element]
|
|
35
|
+
N --> O[Create budget line item]
|
|
36
|
+
O --> P[Emit audit event]
|
|
37
|
+
P --> Q[Return created line item]
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## External Dependencies
|
|
41
|
+
|
|
42
|
+
- [finance-ledger::getAccountingPeriod](../../../finance-ledger/docs/queries/GetAccountingPeriod.md) — Validates that the referenced accounting period exists
|
|
43
|
+
|
|
44
|
+
## Error Scenarios
|
|
45
|
+
|
|
46
|
+
- **BUDGET_NOT_FOUND**: Budget with the specified ID does not exist
|
|
47
|
+
- **INVALID_STATE**: Budget is not in DRAFT status
|
|
48
|
+
- **INVALID_COST_ELEMENT**: Referenced cost element does not exist, is not PRIMARY type, or is not in ACTIVE status
|
|
49
|
+
- **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
|
|
50
|
+
- **INVALID_PLANNED_AMOUNT**: Planned amount is not a positive value
|
|
51
|
+
- **DUPLICATE_LINE_ITEM**: A line item with the same cost element and period already exists in this budget
|
|
52
|
+
|
|
53
|
+
## Test Cases
|
|
54
|
+
|
|
55
|
+
- adds a line item to a DRAFT budget with valid cost element, period, and amount
|
|
56
|
+
- derives GL account automatically from the primary cost element
|
|
57
|
+
- returns error when budget does not exist
|
|
58
|
+
- returns error when budget is not in DRAFT status
|
|
59
|
+
- returns error when cost element does not exist
|
|
60
|
+
- returns error when cost element is not PRIMARY type
|
|
61
|
+
- returns error when cost element is not in ACTIVE status
|
|
62
|
+
- returns error when accounting period does not exist
|
|
63
|
+
- returns error when planned amount is zero
|
|
64
|
+
- returns error when planned amount is negative
|
|
65
|
+
- returns error when duplicate line item exists (same cost element and period)
|
|
66
|
+
- emits audit event recording the line item creation and acting user
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# CreateCostCenter
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createCostCenter establishes a new cost center within a company. A cost center is a responsibility area that accumulates overhead costs for management accounting reporting. It requires a unique code within the company, a name, a category, a reference to a hierarchy node within the same company, and a valid-from date. Cost centers serve as the primary receiver for overhead costs and are foundational cost objects for allocation, budgeting, and variance analysis.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Requires a valid `companyId` referencing an ACTIVE company from the organization module
|
|
10
|
+
- Requires a `code` that is unique within the company scope
|
|
11
|
+
- Requires a `name`
|
|
12
|
+
- Requires a `category` from a defined set: overhead, production, administration, sales, or research
|
|
13
|
+
- Requires a `hierarchyNodeId` referencing an existing node within the same company's cost center hierarchy
|
|
14
|
+
- A cost center hierarchy must exist before cost centers can be created
|
|
15
|
+
- Requires a `validFrom` date
|
|
16
|
+
- `validTo` is optional; when provided, it must be on or after the `validFrom` date
|
|
17
|
+
- `responsiblePersonId` is optional
|
|
18
|
+
- `departmentId` is optional (informational mapping to the organization module)
|
|
19
|
+
- Cost centers are scoped to a company; cost centers from different companies are fully isolated
|
|
20
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
21
|
+
|
|
22
|
+
## Process Flow
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
flowchart TD
|
|
26
|
+
A[Receive create cost center request] --> B{Company exists and is ACTIVE?}
|
|
27
|
+
B -->|No| C[Return error: COMPANY_NOT_FOUND]
|
|
28
|
+
B -->|Yes| D{Code unique within company?}
|
|
29
|
+
D -->|No| E[Return error: DUPLICATE_COST_CENTER_CODE]
|
|
30
|
+
D -->|Yes| F{Valid category?}
|
|
31
|
+
F -->|No| G[Return error: INVALID_CATEGORY]
|
|
32
|
+
F -->|Yes| H{Hierarchy node exists in same company?}
|
|
33
|
+
H -->|No| I[Return error: HIERARCHY_NODE_NOT_FOUND]
|
|
34
|
+
H -->|Yes| J{validTo >= validFrom when both set?}
|
|
35
|
+
J -->|No| K[Return error: INVALID_VALIDITY_PERIOD]
|
|
36
|
+
J -->|Yes| L[Create cost center]
|
|
37
|
+
L --> M[Emit audit event]
|
|
38
|
+
M --> N[Return created cost center]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## External Dependencies
|
|
42
|
+
|
|
43
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
|
|
44
|
+
|
|
45
|
+
## Error Scenarios
|
|
46
|
+
|
|
47
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
48
|
+
- **DUPLICATE_COST_CENTER_CODE**: A cost center with the same code already exists within the company
|
|
49
|
+
- **INVALID_CATEGORY**: Category is not one of the recognized values (overhead, production, administration, sales, research)
|
|
50
|
+
- **HIERARCHY_NODE_NOT_FOUND**: Referenced hierarchy node does not exist or does not belong to the same company
|
|
51
|
+
- **INVALID_VALIDITY_PERIOD**: validTo is before validFrom
|
|
52
|
+
|
|
53
|
+
## Test Cases
|
|
54
|
+
|
|
55
|
+
- returns error when company does not exist
|
|
56
|
+
- returns error when company is not ACTIVE
|
|
57
|
+
- returns error when name is empty
|
|
58
|
+
- returns error when code already exists within company
|
|
59
|
+
- returns error when category is invalid
|
|
60
|
+
- returns error when hierarchy node does not exist
|
|
61
|
+
- returns error when hierarchy node belongs to different company
|
|
62
|
+
- returns error when validTo is before validFrom
|
|
63
|
+
- creates cost center with valid inputs
|
|
64
|
+
- creates cost center without optional fields
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# CreateCostCenterHierarchy
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createCostCenterHierarchy establishes a new cost center hierarchy within a company. The hierarchy provides the tree structure required for organizing cost centers into grouping nodes for hierarchical roll-up reporting. A hierarchy carries a name, version identifier, and company reference. Hierarchies are scoped to a company and must be established before cost centers can be created.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Requires a valid `companyId` referencing an ACTIVE company from the organization module
|
|
10
|
+
- Requires a `name` for the hierarchy
|
|
11
|
+
- Requires a `version` identifier
|
|
12
|
+
- Hierarchy is scoped to a company; hierarchies from different companies are fully isolated
|
|
13
|
+
- A company can have multiple hierarchy versions
|
|
14
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create cost center hierarchy request] --> B{Company exists and is ACTIVE?}
|
|
21
|
+
B -->|No| C[Return error: COMPANY_NOT_FOUND]
|
|
22
|
+
B -->|Yes| D{Name provided?}
|
|
23
|
+
D -->|No| E[Return error: INVALID_NAME]
|
|
24
|
+
D -->|Yes| F[Create cost center hierarchy]
|
|
25
|
+
F --> G[Emit audit event]
|
|
26
|
+
G --> H[Return created hierarchy]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
36
|
+
- **INVALID_NAME**: Hierarchy name is missing or empty
|
|
37
|
+
|
|
38
|
+
## Test Cases
|
|
39
|
+
|
|
40
|
+
- returns error when company does not exist
|
|
41
|
+
- returns error when company is not ACTIVE
|
|
42
|
+
- returns error when name is empty
|
|
43
|
+
- returns error when name is whitespace only
|
|
44
|
+
- creates hierarchy with valid inputs
|
|
45
|
+
- emits audit event by calling insert
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# CreateCostCenterHierarchyNode
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createCostCenterHierarchyNode adds a new node to an existing cost center hierarchy. Nodes form a tree structure with parent-child relationships, supporting hierarchical roll-up reporting. A root node must be created before child nodes can be added. Nodes carry a name, sort order, and level attribute within the hierarchy.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Hierarchy must exist
|
|
10
|
+
- Parent node must exist when creating a child node (except for root node creation)
|
|
11
|
+
- A root node must be established before child nodes can be added
|
|
12
|
+
- A node cannot reference itself as its parent (no self-referencing)
|
|
13
|
+
- Creating a node must not introduce a circular reference in the hierarchy
|
|
14
|
+
- Node carries a name, sort order, and level attribute
|
|
15
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
16
|
+
|
|
17
|
+
## Process Flow
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart TD
|
|
21
|
+
A[Receive create hierarchy node request] --> B{Hierarchy exists?}
|
|
22
|
+
B -->|No| C[Return error: HIERARCHY_NOT_FOUND]
|
|
23
|
+
B -->|Yes| D{Is root node creation?}
|
|
24
|
+
D -->|Yes| E{Root node already exists?}
|
|
25
|
+
E -->|Yes| F[Return error: DUPLICATE_ROOT_NODE]
|
|
26
|
+
E -->|No| G[Create root node]
|
|
27
|
+
D -->|No| H{Parent node exists?}
|
|
28
|
+
H -->|No| I[Return error: PARENT_NODE_NOT_FOUND]
|
|
29
|
+
H -->|Yes| J{Self-referencing?}
|
|
30
|
+
J -->|Yes| K[Return error: SELF_REFERENCE]
|
|
31
|
+
J -->|No| L{Circular reference?}
|
|
32
|
+
L -->|Yes| M[Return error: CIRCULAR_REFERENCE]
|
|
33
|
+
L -->|No| N[Create child node under parent]
|
|
34
|
+
G --> O[Emit audit event]
|
|
35
|
+
N --> O
|
|
36
|
+
O --> P[Return created node]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## External Dependencies
|
|
40
|
+
|
|
41
|
+
- None
|
|
42
|
+
|
|
43
|
+
## Error Scenarios
|
|
44
|
+
|
|
45
|
+
- **HIERARCHY_NOT_FOUND**: Referenced hierarchy does not exist
|
|
46
|
+
- **PARENT_NODE_NOT_FOUND**: Referenced parent node does not exist within the hierarchy
|
|
47
|
+
- **DUPLICATE_ROOT_NODE**: A root node already exists in this hierarchy
|
|
48
|
+
- **SELF_REFERENCE**: Node cannot reference itself as its parent
|
|
49
|
+
- **CIRCULAR_REFERENCE**: Creating this node would introduce a circular reference in the hierarchy
|
|
50
|
+
|
|
51
|
+
## Test Cases
|
|
52
|
+
|
|
53
|
+
- returns error when name is empty
|
|
54
|
+
- returns error when hierarchy does not exist
|
|
55
|
+
- returns error when parent node does not exist in hierarchy
|
|
56
|
+
- returns error when creating duplicate root node (no parentNodeId)
|
|
57
|
+
- creates root node when no root exists
|
|
58
|
+
- creates child node with correct computed level
|
|
59
|
+
- returns error when node references itself as parent
|
|
60
|
+
- returns error when node would create a circular reference
|
|
61
|
+
- emits audit event by calling insert
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# CreateCostElement
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createCostElement establishes a new cost element in DRAFT status within the management accounting module. The cost element carries a company reference, a unique code within the company scope, a name, a type (PRIMARY or SECONDARY), a category that must match the type, an optional GL account reference (required for PRIMARY, forbidden for SECONDARY), optional validity dates (validFrom, validTo), and an optional description. Cost elements are the foundational classification for all cost postings and allocations in the accounting module.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Cost element is always created in DRAFT status
|
|
10
|
+
- Requires a valid `companyId` referencing an ACTIVE company from the organization module
|
|
11
|
+
- Requires a `code` that is unique within the company scope
|
|
12
|
+
- Requires a `name`
|
|
13
|
+
- Requires a `type` of either PRIMARY or SECONDARY
|
|
14
|
+
- Requires a `category` appropriate to its type: overhead, material, labor, or depreciation for PRIMARY; assessment, distribution, internal_activity_allocation, or settlement for SECONDARY
|
|
15
|
+
- PRIMARY cost elements must provide a `glAccountId` referencing an active GL account from an active Chart of Accounts
|
|
16
|
+
- SECONDARY cost elements must not provide a `glAccountId`; supplying one is rejected
|
|
17
|
+
- Two PRIMARY cost elements within the same company cannot reference the same GL account
|
|
18
|
+
- When both `validFrom` and `validTo` are provided, `validFrom` must be less than or equal to `validTo`
|
|
19
|
+
- `validFrom` and `validTo` are optional; omitting them means the element is valid indefinitely
|
|
20
|
+
- `description` is optional and can be set on creation
|
|
21
|
+
- Cost elements are scoped to a company; elements from different companies are fully isolated
|
|
22
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
23
|
+
|
|
24
|
+
## Process Flow
|
|
25
|
+
|
|
26
|
+
```mermaid
|
|
27
|
+
flowchart TD
|
|
28
|
+
A[Receive create cost element request] --> B{Company exists and is ACTIVE?}
|
|
29
|
+
B -->|No| C[Return error: COMPANY_NOT_FOUND]
|
|
30
|
+
B -->|Yes| D{Code unique within company?}
|
|
31
|
+
D -->|No| E[Return error: DUPLICATE_COST_ELEMENT_CODE]
|
|
32
|
+
D -->|Yes| F{Valid type: PRIMARY or SECONDARY?}
|
|
33
|
+
F -->|No| G[Return error: INVALID_COST_ELEMENT_TYPE]
|
|
34
|
+
F -->|Yes| H{Category matches type?}
|
|
35
|
+
H -->|No| I[Return error: INVALID_CATEGORY_FOR_TYPE]
|
|
36
|
+
H -->|Yes| J{Type is PRIMARY?}
|
|
37
|
+
J -->|Yes| K{glAccountId provided?}
|
|
38
|
+
K -->|No| L[Return error: GL_ACCOUNT_REQUIRED]
|
|
39
|
+
K -->|Yes| M{GL account exists and is active in active CoA?}
|
|
40
|
+
M -->|No| N[Return error: GL_ACCOUNT_NOT_FOUND]
|
|
41
|
+
M -->|Yes| O{Another PRIMARY element references same GL account?}
|
|
42
|
+
O -->|Yes| P[Return error: DUPLICATE_GL_ACCOUNT_REFERENCE]
|
|
43
|
+
O -->|No| Q[Validate dates]
|
|
44
|
+
J -->|No| R{glAccountId provided?}
|
|
45
|
+
R -->|Yes| S[Return error: GL_ACCOUNT_NOT_ALLOWED]
|
|
46
|
+
R -->|No| Q
|
|
47
|
+
Q --> T{validFrom <= validTo when both set?}
|
|
48
|
+
T -->|No| U[Return error: INVALID_VALIDITY_PERIOD]
|
|
49
|
+
T -->|Yes| V[Create cost element in DRAFT status]
|
|
50
|
+
V --> W[Emit audit event]
|
|
51
|
+
W --> X[Return created cost element]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## External Dependencies
|
|
55
|
+
|
|
56
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
|
|
57
|
+
- [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) — Validates that the referenced GL account exists and is active within an active Chart of Accounts
|
|
58
|
+
|
|
59
|
+
## Error Scenarios
|
|
60
|
+
|
|
61
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
62
|
+
- **DUPLICATE_COST_ELEMENT_CODE**: A cost element with the same code already exists within the company
|
|
63
|
+
- **INVALID_COST_ELEMENT_TYPE**: Type is not PRIMARY or SECONDARY
|
|
64
|
+
- **INVALID_CATEGORY_FOR_TYPE**: Category does not match the cost element type (e.g., assessment category on a PRIMARY element)
|
|
65
|
+
- **GL_ACCOUNT_REQUIRED**: PRIMARY cost element is missing the required glAccountId
|
|
66
|
+
- **GL_ACCOUNT_NOT_FOUND**: Referenced GL account does not exist or is not active within an active Chart of Accounts
|
|
67
|
+
- **GL_ACCOUNT_NOT_ALLOWED**: SECONDARY cost element must not reference a GL account
|
|
68
|
+
- **DUPLICATE_GL_ACCOUNT_REFERENCE**: Another PRIMARY cost element within the same company already references the specified GL account
|
|
69
|
+
- **INVALID_VALIDITY_PERIOD**: validFrom is after validTo
|
|
70
|
+
|
|
71
|
+
## Test Cases
|
|
72
|
+
|
|
73
|
+
- creates cost element in DRAFT status with required fields
|
|
74
|
+
- returns error when company does not exist
|
|
75
|
+
- returns error when company is not ACTIVE
|
|
76
|
+
- returns error when code already exists within the company
|
|
77
|
+
- returns error when type is not PRIMARY or SECONDARY
|
|
78
|
+
- returns error when category does not match the type (primary category on secondary element)
|
|
79
|
+
- returns error when category does not match the type (secondary category on primary element)
|
|
80
|
+
- returns error when PRIMARY element is missing glAccountId
|
|
81
|
+
- returns error when GL account does not exist
|
|
82
|
+
- returns error when GL account is not active
|
|
83
|
+
- returns error when GL account is not in an active Chart of Accounts
|
|
84
|
+
- returns error when SECONDARY element provides a glAccountId
|
|
85
|
+
- returns error when another PRIMARY element in the same company references the same GL account
|
|
86
|
+
- returns error when validFrom is after validTo
|
|
87
|
+
- creates cost element with optional description
|
|
88
|
+
- creates cost element with validFrom and validTo dates
|
|
89
|
+
- creates cost element without validity dates (indefinitely valid)
|
|
90
|
+
- cost elements from different companies are isolated
|
|
91
|
+
- emits audit event recording acting user, timestamp, and initial field values
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# CreateInternalOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createInternalOrder establishes a new internal order in CREATED status. An internal order is a temporary cost collector for tracking expenses associated with specific short-to-medium-term activities such as projects, marketing campaigns, and R&D initiatives. It requires a unique order number within the company, an order type, a description, a responsible person, a responsible cost center within the same company, and a company reference. Optional fields include validity dates and a budget reference.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Internal order is always created in CREATED status
|
|
10
|
+
- Requires a valid `companyId` referencing an ACTIVE company from the organization module
|
|
11
|
+
- Requires an `orderNumber` that is unique within the company scope
|
|
12
|
+
- Requires an `orderType` of OVERHEAD, INVESTMENT, or ACCRUAL
|
|
13
|
+
- Requires a `description`
|
|
14
|
+
- Requires a `responsiblePersonId`
|
|
15
|
+
- Requires a `costCenterId` referencing a valid cost center within the same company
|
|
16
|
+
- `validFrom` and `validTo` are optional; when both are provided, validFrom must precede validTo
|
|
17
|
+
- Budget assignment is optional; when assigned, the budget must exist and belong to the same company
|
|
18
|
+
- Internal orders are scoped to a company; orders from different companies are fully isolated
|
|
19
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
20
|
+
|
|
21
|
+
## Process Flow
|
|
22
|
+
|
|
23
|
+
```mermaid
|
|
24
|
+
flowchart TD
|
|
25
|
+
A[Receive create internal order request] --> B{Company exists and is ACTIVE?}
|
|
26
|
+
B -->|No| C[Return error: COMPANY_NOT_FOUND]
|
|
27
|
+
B -->|Yes| D{Order number unique within company?}
|
|
28
|
+
D -->|No| E[Return error: DUPLICATE_ORDER_NUMBER]
|
|
29
|
+
D -->|Yes| F{Valid order type?}
|
|
30
|
+
F -->|No| G[Return error: INVALID_ORDER_TYPE]
|
|
31
|
+
F -->|Yes| H{Description provided?}
|
|
32
|
+
H -->|No| I[Return error: DESCRIPTION_REQUIRED]
|
|
33
|
+
H -->|Yes| J{Responsible person provided?}
|
|
34
|
+
J -->|No| K[Return error: RESPONSIBLE_PERSON_REQUIRED]
|
|
35
|
+
J -->|Yes| L{Cost center exists in same company?}
|
|
36
|
+
L -->|No| M[Return error: COST_CENTER_NOT_FOUND]
|
|
37
|
+
L -->|Yes| N{validFrom <= validTo when both set?}
|
|
38
|
+
N -->|No| O[Return error: INVALID_VALIDITY_PERIOD]
|
|
39
|
+
N -->|Yes| P[Create internal order in CREATED status]
|
|
40
|
+
P --> Q[Emit audit event]
|
|
41
|
+
Q --> R[Return created internal order]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## External Dependencies
|
|
45
|
+
|
|
46
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
|
|
47
|
+
|
|
48
|
+
## Error Scenarios
|
|
49
|
+
|
|
50
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
51
|
+
- **DUPLICATE_ORDER_NUMBER**: An internal order with the same order number already exists within the company
|
|
52
|
+
- **INVALID_ORDER_TYPE**: Order type is not one of the recognized values (OVERHEAD, INVESTMENT, ACCRUAL)
|
|
53
|
+
- **DESCRIPTION_REQUIRED**: Description is missing or empty
|
|
54
|
+
- **RESPONSIBLE_PERSON_REQUIRED**: Responsible person reference is missing
|
|
55
|
+
- **COST_CENTER_NOT_FOUND**: Referenced cost center does not exist or does not belong to the same company
|
|
56
|
+
- **INVALID_VALIDITY_PERIOD**: validFrom is after validTo
|
|
57
|
+
|
|
58
|
+
## Test Cases
|
|
59
|
+
|
|
60
|
+
- creates internal order in CREATED status with required fields
|
|
61
|
+
- returns error when company does not exist
|
|
62
|
+
- returns error when company is not ACTIVE
|
|
63
|
+
- returns error when order number already exists within the company
|
|
64
|
+
- returns error when order type is invalid
|
|
65
|
+
- returns error when description is missing
|
|
66
|
+
- returns error when responsible person is missing
|
|
67
|
+
- returns error when cost center does not exist
|
|
68
|
+
- returns error when cost center belongs to a different company
|
|
69
|
+
- returns error when validFrom is after validTo
|
|
70
|
+
- creates internal order with optional validity dates
|
|
71
|
+
- internal orders from different companies are isolated
|
|
72
|
+
- emits audit event recording acting user, timestamp, and initial field values
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# CreatePlanVersion
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createPlanVersion establishes a new plan version for multi-version budget planning. A plan version defines the type of planning exercise (BUDGET, FORECAST, or SIMULATION) and is scoped to a company. An optional base version can be referenced to copy line items from an existing version.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Requires a `name`
|
|
10
|
+
- Requires a valid `type` of BUDGET, FORECAST, or SIMULATION
|
|
11
|
+
- Requires a valid `companyId` referencing an ACTIVE company from the organization module
|
|
12
|
+
- `baseVersionId` is optional; when provided, it must reference an existing plan version from which line items can be copied
|
|
13
|
+
- Plan versions are scoped to a company
|
|
14
|
+
- Emits an audit event recording the acting user, timestamp, and initial field values
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create plan version request] --> B{Company exists and is ACTIVE?}
|
|
21
|
+
B -->|No| C[Return error: COMPANY_NOT_FOUND]
|
|
22
|
+
B -->|Yes| D{Valid version type?}
|
|
23
|
+
D -->|No| E[Return error: INVALID_VERSION_TYPE]
|
|
24
|
+
D -->|Yes| F{Name provided?}
|
|
25
|
+
F -->|No| G[Return error: INVALID_NAME]
|
|
26
|
+
F -->|Yes| H{Base version provided?}
|
|
27
|
+
H -->|Yes| I{Base version exists?}
|
|
28
|
+
I -->|No| J[Return error: BASE_VERSION_NOT_FOUND]
|
|
29
|
+
I -->|Yes| K[Create plan version with base reference]
|
|
30
|
+
H -->|No| L[Create plan version without base reference]
|
|
31
|
+
K --> M[Emit audit event]
|
|
32
|
+
L --> M
|
|
33
|
+
M --> N[Return created plan version]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## External Dependencies
|
|
37
|
+
|
|
38
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) — Validates that the referenced company exists and is ACTIVE
|
|
39
|
+
|
|
40
|
+
## Error Scenarios
|
|
41
|
+
|
|
42
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
43
|
+
- **INVALID_VERSION_TYPE**: Type is not BUDGET, FORECAST, or SIMULATION
|
|
44
|
+
- **INVALID_NAME**: Name is missing or empty
|
|
45
|
+
- **BASE_VERSION_NOT_FOUND**: Referenced base version does not exist
|
|
46
|
+
|
|
47
|
+
## Test Cases
|
|
48
|
+
|
|
49
|
+
- creates a plan version of type BUDGET
|
|
50
|
+
- creates a plan version of type FORECAST
|
|
51
|
+
- creates a plan version of type SIMULATION
|
|
52
|
+
- creates a plan version with a base version reference
|
|
53
|
+
- creates a plan version without a base version reference
|
|
54
|
+
- returns error when company does not exist
|
|
55
|
+
- returns error when company is not ACTIVE
|
|
56
|
+
- returns error when version type is invalid
|
|
57
|
+
- returns error when name is missing
|
|
58
|
+
- returns error when base version does not exist
|
|
59
|
+
- emits audit event recording acting user, timestamp, and initial field values
|