@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
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "../lib/errors.generated";
|
|
9
9
|
import { ok, err } from "@tailor-platform/erp-kit/module";
|
|
10
10
|
|
|
11
|
-
export
|
|
11
|
+
export type UpdateContactPersonInput = {
|
|
12
12
|
id: string;
|
|
13
13
|
firstName?: string;
|
|
14
14
|
lastName?: string;
|
|
@@ -16,8 +16,7 @@ export interface UpdateContactPersonInput {
|
|
|
16
16
|
phone?: string | null;
|
|
17
17
|
jobTitle?: string | null;
|
|
18
18
|
department?: string | null;
|
|
19
|
-
}
|
|
20
|
-
|
|
19
|
+
};
|
|
21
20
|
/**
|
|
22
21
|
* Function: updateContactPerson
|
|
23
22
|
*
|
|
@@ -27,7 +26,7 @@ export interface UpdateContactPersonInput {
|
|
|
27
26
|
*/
|
|
28
27
|
export async function run<CF extends Record<string, unknown>>(
|
|
29
28
|
db: Transaction,
|
|
30
|
-
input: UpdateContactPersonInput & CF
|
|
29
|
+
input: UpdateContactPersonInput & Omit<Partial<CF>, "status">,
|
|
31
30
|
) {
|
|
32
31
|
const { id, firstName, lastName, email, phone, jobTitle, department, ...customFields } = input;
|
|
33
32
|
|
|
@@ -10,12 +10,11 @@ import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
|
10
10
|
type PrimitivesModule = ReturnType<typeof definePrimitivesModule>;
|
|
11
11
|
type PrimitivesQueries = PrimitivesModule["queries"];
|
|
12
12
|
|
|
13
|
-
export
|
|
13
|
+
export type UpdatePartnerInput = {
|
|
14
14
|
id: string;
|
|
15
15
|
name?: string;
|
|
16
16
|
preferredCurrencyId?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
17
|
+
};
|
|
19
18
|
/**
|
|
20
19
|
* Function: updatePartner
|
|
21
20
|
*
|
|
@@ -24,11 +23,19 @@ export interface UpdatePartnerInput {
|
|
|
24
23
|
*/
|
|
25
24
|
export async function run<CF extends Record<string, unknown>>(
|
|
26
25
|
db: Transaction,
|
|
27
|
-
input: UpdatePartnerInput & Partial<CF>,
|
|
26
|
+
input: UpdatePartnerInput & Omit<Partial<CF>, "status">,
|
|
28
27
|
ctx: CommandContext,
|
|
29
28
|
primitivesQueries?: Pick<PrimitivesQueries, "getCurrency">,
|
|
30
29
|
) {
|
|
31
|
-
const { id, name, preferredCurrencyId
|
|
30
|
+
const { id, name, preferredCurrencyId } = input;
|
|
31
|
+
|
|
32
|
+
const KNOWN_KEYS = new Set(["id", "name", "preferredCurrencyId"]);
|
|
33
|
+
const customFields: Record<string, unknown> = {};
|
|
34
|
+
for (const [key, value] of Object.entries(input as Record<string, unknown>)) {
|
|
35
|
+
if (!KNOWN_KEYS.has(key)) {
|
|
36
|
+
customFields[key] = value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
32
39
|
|
|
33
40
|
// 1. Check partner exists
|
|
34
41
|
const partner = await db
|
|
@@ -59,7 +66,7 @@ export async function run<CF extends Record<string, unknown>>(
|
|
|
59
66
|
|
|
60
67
|
// 4. Apply updates
|
|
61
68
|
const updates: Record<string, unknown> = {
|
|
62
|
-
...
|
|
69
|
+
...customFields,
|
|
63
70
|
updatedAt: new Date(),
|
|
64
71
|
};
|
|
65
72
|
if (name !== undefined) updates.name = name;
|
|
@@ -2,7 +2,7 @@ import type { Transaction } from "../generated/kysely-tailordb";
|
|
|
2
2
|
import { AddressNotFoundError, InvalidCountryCodeError } from "../lib/errors.generated";
|
|
3
3
|
import { ok, err } from "@tailor-platform/erp-kit/module";
|
|
4
4
|
|
|
5
|
-
export
|
|
5
|
+
export type UpdatePartnerAddressInput = {
|
|
6
6
|
id: string;
|
|
7
7
|
line1?: string;
|
|
8
8
|
line2?: string | null;
|
|
@@ -10,8 +10,7 @@ export interface UpdatePartnerAddressInput {
|
|
|
10
10
|
state?: string | null;
|
|
11
11
|
postalCode?: string;
|
|
12
12
|
country?: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
13
|
+
};
|
|
15
14
|
/**
|
|
16
15
|
* Function: updatePartnerAddress
|
|
17
16
|
*
|
|
@@ -20,9 +19,17 @@ export interface UpdatePartnerAddressInput {
|
|
|
20
19
|
*/
|
|
21
20
|
export async function run<CF extends Record<string, unknown>>(
|
|
22
21
|
db: Transaction,
|
|
23
|
-
input: UpdatePartnerAddressInput & Partial<CF>,
|
|
22
|
+
input: UpdatePartnerAddressInput & Omit<Partial<CF>, "status">,
|
|
24
23
|
) {
|
|
25
|
-
const { id, line1, line2, city, state, postalCode, country
|
|
24
|
+
const { id, line1, line2, city, state, postalCode, country } = input;
|
|
25
|
+
|
|
26
|
+
const KNOWN_KEYS = new Set(["id", "line1", "line2", "city", "state", "postalCode", "country"]);
|
|
27
|
+
const customFields: Record<string, unknown> = {};
|
|
28
|
+
for (const [key, value] of Object.entries(input as Record<string, unknown>)) {
|
|
29
|
+
if (!KNOWN_KEYS.has(key)) {
|
|
30
|
+
customFields[key] = value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
26
33
|
|
|
27
34
|
// 1. Check address exists
|
|
28
35
|
const address = await db
|
|
@@ -43,7 +50,7 @@ export async function run<CF extends Record<string, unknown>>(
|
|
|
43
50
|
|
|
44
51
|
// 3. Apply updates
|
|
45
52
|
const updates: Record<string, unknown> = {
|
|
46
|
-
...
|
|
53
|
+
...customFields,
|
|
47
54
|
updatedAt: new Date(),
|
|
48
55
|
};
|
|
49
56
|
if (line1 !== undefined) updates.line1 = line1;
|
|
@@ -12,7 +12,7 @@ import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
|
12
12
|
type PrimitivesModule = ReturnType<typeof definePrimitivesModule>;
|
|
13
13
|
type PrimitivesQueries = PrimitivesModule["queries"];
|
|
14
14
|
|
|
15
|
-
export
|
|
15
|
+
export type UpdatePartnerBankAccountInput = {
|
|
16
16
|
id: string;
|
|
17
17
|
bankName?: string;
|
|
18
18
|
accountHolderName?: string;
|
|
@@ -21,8 +21,7 @@ export interface UpdatePartnerBankAccountInput {
|
|
|
21
21
|
iban?: string;
|
|
22
22
|
swiftBic?: string | null;
|
|
23
23
|
currencyId?: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
24
|
+
};
|
|
26
25
|
/**
|
|
27
26
|
* Function: updatePartnerBankAccount
|
|
28
27
|
*
|
|
@@ -31,7 +30,7 @@ export interface UpdatePartnerBankAccountInput {
|
|
|
31
30
|
*/
|
|
32
31
|
export async function run<CF extends Record<string, unknown>>(
|
|
33
32
|
db: Transaction,
|
|
34
|
-
input: UpdatePartnerBankAccountInput & CF
|
|
33
|
+
input: UpdatePartnerBankAccountInput & Omit<Partial<CF>, "status">,
|
|
35
34
|
ctx: CommandContext,
|
|
36
35
|
primitivesQueries?: Pick<PrimitivesQueries, "getCurrency">,
|
|
37
36
|
) {
|
|
@@ -7,14 +7,13 @@ import {
|
|
|
7
7
|
} from "../lib/errors.generated";
|
|
8
8
|
import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
9
9
|
|
|
10
|
-
export
|
|
10
|
+
export type UpdatePartnerIdentificationInput = {
|
|
11
11
|
id: string;
|
|
12
12
|
value?: string;
|
|
13
13
|
issuingCountry?: string;
|
|
14
14
|
validFrom?: Date;
|
|
15
15
|
validTo?: Date;
|
|
16
|
-
}
|
|
17
|
-
|
|
16
|
+
};
|
|
18
17
|
/**
|
|
19
18
|
* Function: updatePartnerIdentification
|
|
20
19
|
*
|
|
@@ -24,7 +23,7 @@ export interface UpdatePartnerIdentificationInput {
|
|
|
24
23
|
*/
|
|
25
24
|
export async function run<CF extends Record<string, unknown>>(
|
|
26
25
|
db: Transaction,
|
|
27
|
-
input: UpdatePartnerIdentificationInput & CF
|
|
26
|
+
input: UpdatePartnerIdentificationInput & Omit<Partial<CF>, "status">,
|
|
28
27
|
_ctx: CommandContext,
|
|
29
28
|
) {
|
|
30
29
|
const { id, value, issuingCountry, validFrom, validTo, ...customFields } = input;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
updateContactPerson modifies the details of an existing contact person. All fields are optional, but validation rules are enforced for any provided values. The contact person's association
|
|
5
|
+
updateContactPerson modifies the details of an existing contact person. All fields are optional, but validation rules are enforced for any provided values. The contact person's organization association is fixed by the existing record and is not part of the update input. After the update, at least one communication channel (email or phone) must remain present.
|
|
6
6
|
|
|
7
7
|
## Business Rules
|
|
8
8
|
|
|
@@ -11,8 +11,8 @@ updateContactPerson modifies the details of an existing contact person. All fiel
|
|
|
11
11
|
- Last name, if provided, must be non-empty and not whitespace-only
|
|
12
12
|
- Email, if provided, must be in a valid format
|
|
13
13
|
- After update, at least one of email or phone must still be present (whitespace-only values do not count)
|
|
14
|
-
- The organization association is
|
|
15
|
-
- The primary contact designation (isPrimary) is not
|
|
14
|
+
- The organization association is not part of the update input
|
|
15
|
+
- The primary contact designation (`isPrimary`) is not part of the update input; the existing value is preserved as-is
|
|
16
16
|
- Only provided fields are updated; omitted fields retain their current values
|
|
17
17
|
|
|
18
18
|
## Process Flow
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
updatePartner modifies the mutable fields of an existing business partner. Only name and preferred currency can be updated.
|
|
5
|
+
updatePartner modifies the mutable fields of an existing business partner. Only name and preferred currency can be updated. Partner type is fixed by the existing record and is not part of the update input. This command supports incremental enrichment of partner data throughout the partner lifecycle.
|
|
6
6
|
|
|
7
7
|
## Business Rules
|
|
8
8
|
|
|
9
9
|
- Partner must exist in the system
|
|
10
10
|
- Name, if provided, must be non-empty
|
|
11
11
|
- Preferred currency, if provided, must reference an existing Currency in the primitives module
|
|
12
|
-
- Partner type
|
|
12
|
+
- Partner type is not part of the update input
|
|
13
13
|
|
|
14
14
|
## Process Flow
|
|
15
15
|
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
updatePartnerAddress modifies the fields of an existing partner address.
|
|
5
|
+
updatePartnerAddress modifies the fields of an existing partner address. Address type is fixed by the existing record and is not part of the update input. All other address fields (line1, line2, city, state, postalCode, country) can be updated individually. Country validation is enforced when a new country value is provided. Updates are permitted regardless of the parent partner's lifecycle status (DRAFT, ACTIVE, or INACTIVE) — existing addresses always remain updatable.
|
|
6
6
|
|
|
7
7
|
## Business Rules
|
|
8
8
|
|
|
9
9
|
- Address must exist in the system
|
|
10
10
|
- Parent partner's lifecycle status is not checked — updates are permitted in any state (DRAFT, ACTIVE, or INACTIVE)
|
|
11
|
-
- Address type is
|
|
11
|
+
- Address type is not part of the update input
|
|
12
12
|
- Country, if provided, must be a valid ISO 3166-1 alpha-2 code
|
|
13
13
|
- Only provided fields are updated; omitted fields retain their current values
|
|
14
14
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
updatePartnerIdentification modifies the fields of an existing partner identification.
|
|
5
|
+
updatePartnerIdentification modifies the fields of an existing partner identification. Identification type is fixed by the existing record and is not part of the update input. When the value is updated, uniqueness is re-validated against the company scope to prevent duplicate registrations.
|
|
6
6
|
|
|
7
7
|
## Business Rules
|
|
8
8
|
|
|
9
9
|
- Identification must exist in the system
|
|
10
|
-
- Type is
|
|
10
|
+
- Type is not part of the update input
|
|
11
11
|
- If value is provided, it must be non-empty and not whitespace-only
|
|
12
12
|
- If value is changed, the new (type, value) combination must be unique within the company scope
|
|
13
13
|
- When both validFrom and validTo are set, validTo must be greater than or equal to validFrom
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
} from "../lib/errors.generated";
|
|
17
17
|
import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
18
18
|
|
|
19
|
-
export
|
|
19
|
+
export type UpdateAccountInput = {
|
|
20
20
|
id: string;
|
|
21
21
|
name?: string;
|
|
22
22
|
code?: string;
|
|
@@ -34,7 +34,7 @@ export interface UpdateAccountInput {
|
|
|
34
34
|
defaultTaxCode?: string | null;
|
|
35
35
|
tags?: string | null;
|
|
36
36
|
accountGroupId?: string | null;
|
|
37
|
-
}
|
|
37
|
+
};
|
|
38
38
|
|
|
39
39
|
export interface AuditCommands {
|
|
40
40
|
logAuditEvent: (
|
|
@@ -80,7 +80,7 @@ const RECONCILIATION_REQUIRED_CLASSIFICATIONS = ["RECEIVABLE", "PAYABLE", "BANK_
|
|
|
80
80
|
*/
|
|
81
81
|
export async function run<CF extends Record<string, unknown>>(
|
|
82
82
|
db: Transaction,
|
|
83
|
-
input: UpdateAccountInput & CF
|
|
83
|
+
input: UpdateAccountInput & Omit<Partial<CF>, "status">,
|
|
84
84
|
ctx: CommandContext,
|
|
85
85
|
deps?: GetCurrencyDep,
|
|
86
86
|
auditCommands?: AuditCommands,
|
|
@@ -52,6 +52,28 @@ describe("updateAccountGroup", () => {
|
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
54
|
|
|
55
|
+
it("looks up group by chartOfAccountsId and code and updates name", async () => {
|
|
56
|
+
const { db, spies } = createMockDb<Transaction>();
|
|
57
|
+
const updatedGroup = { ...baseRootGroup, name: "Lookup Assets" };
|
|
58
|
+
spies.select.mockReturnValueOnce(baseRootGroup).mockReturnValueOnce(baseActiveCoa);
|
|
59
|
+
spies.update.mockReturnValue(updatedGroup);
|
|
60
|
+
|
|
61
|
+
const result = await run(
|
|
62
|
+
db,
|
|
63
|
+
{
|
|
64
|
+
chartOfAccountsId: baseRootGroup.chartOfAccountsId,
|
|
65
|
+
code: baseRootGroup.code,
|
|
66
|
+
name: "Lookup Assets",
|
|
67
|
+
},
|
|
68
|
+
ctx,
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
expect(result.ok).toBe(true);
|
|
72
|
+
if (result.ok) {
|
|
73
|
+
expect(result.value.accountGroup.name).toBe("Lookup Assets");
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
55
77
|
it("returns error when name is empty", async () => {
|
|
56
78
|
const { db, spies } = createMockDb<Transaction>();
|
|
57
79
|
spies.select
|
|
@@ -9,13 +9,15 @@ import {
|
|
|
9
9
|
} from "../lib/errors.generated";
|
|
10
10
|
import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
11
11
|
|
|
12
|
-
export
|
|
13
|
-
id: string
|
|
12
|
+
export type UpdateAccountGroupInput = (
|
|
13
|
+
| { id: string }
|
|
14
|
+
| { chartOfAccountsId: string; code: string }
|
|
15
|
+
) & {
|
|
14
16
|
name?: string;
|
|
15
17
|
sortOrder?: number | null;
|
|
16
18
|
numberRangeStart?: number | null;
|
|
17
19
|
numberRangeEnd?: number | null;
|
|
18
|
-
}
|
|
20
|
+
};
|
|
19
21
|
|
|
20
22
|
export interface AuditCommands {
|
|
21
23
|
logAuditEvent: (
|
|
@@ -33,7 +35,6 @@ export interface AuditCommands {
|
|
|
33
35
|
ctx: CommandContext,
|
|
34
36
|
) => Promise<{ ok: true; value: unknown }>;
|
|
35
37
|
}
|
|
36
|
-
|
|
37
38
|
/**
|
|
38
39
|
* Function: updateAccountGroup
|
|
39
40
|
*
|
|
@@ -42,22 +43,33 @@ export interface AuditCommands {
|
|
|
42
43
|
*/
|
|
43
44
|
export async function run<CF extends Record<string, unknown>>(
|
|
44
45
|
db: Transaction,
|
|
45
|
-
input: UpdateAccountGroupInput & CF
|
|
46
|
+
input: UpdateAccountGroupInput & Omit<Partial<CF>, "status">,
|
|
46
47
|
ctx: CommandContext,
|
|
47
48
|
auditCommands?: AuditCommands,
|
|
48
49
|
) {
|
|
49
|
-
const {
|
|
50
|
+
const { name, sortOrder, numberRangeStart, numberRangeEnd, ...customFields } = input;
|
|
51
|
+
delete (customFields as Record<string, unknown>).id;
|
|
52
|
+
delete (customFields as Record<string, unknown>).chartOfAccountsId;
|
|
53
|
+
delete (customFields as Record<string, unknown>).code;
|
|
50
54
|
|
|
51
55
|
// 1. Find the group
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
let existingQuery = db.selectFrom("AccountGroup").selectAll();
|
|
57
|
+
if ("id" in input) {
|
|
58
|
+
existingQuery = existingQuery.where("id", "=", (input as { id: string }).id);
|
|
59
|
+
} else {
|
|
60
|
+
const lookup = input as { chartOfAccountsId: string; code: string };
|
|
61
|
+
existingQuery = existingQuery
|
|
62
|
+
.where("chartOfAccountsId", "=", lookup.chartOfAccountsId)
|
|
63
|
+
.where("code", "=", lookup.code);
|
|
64
|
+
}
|
|
65
|
+
const existing = await existingQuery.forUpdate().executeTakeFirst();
|
|
58
66
|
|
|
59
67
|
if (!existing) {
|
|
60
|
-
|
|
68
|
+
const key =
|
|
69
|
+
"id" in input
|
|
70
|
+
? (input as { id: string }).id
|
|
71
|
+
: `${(input as { chartOfAccountsId: string; code: string }).chartOfAccountsId}:${(input as { chartOfAccountsId: string; code: string }).code}`;
|
|
72
|
+
return err(new AccountGroupNotFoundError(key));
|
|
61
73
|
}
|
|
62
74
|
|
|
63
75
|
// 2. Check parent CoA status
|
|
@@ -101,7 +113,7 @@ export async function run<CF extends Record<string, unknown>>(
|
|
|
101
113
|
.execute();
|
|
102
114
|
|
|
103
115
|
for (const group of existingGroups) {
|
|
104
|
-
if (group.id === id) continue;
|
|
116
|
+
if (group.id === existing.id) continue;
|
|
105
117
|
if (group.numberRangeStart !== null && group.numberRangeEnd !== null) {
|
|
106
118
|
if (newRangeStart <= group.numberRangeEnd && newRangeEnd >= group.numberRangeStart) {
|
|
107
119
|
return err(new InvalidNumberRangeError(`${newRangeStart}-${newRangeEnd}`));
|
|
@@ -113,14 +125,14 @@ export async function run<CF extends Record<string, unknown>>(
|
|
|
113
125
|
const assignedAccounts = await db
|
|
114
126
|
.selectFrom("Account")
|
|
115
127
|
.selectAll()
|
|
116
|
-
.where("accountGroupId", "=", id)
|
|
128
|
+
.where("accountGroupId", "=", existing.id)
|
|
117
129
|
.execute();
|
|
118
130
|
|
|
119
131
|
for (const account of assignedAccounts) {
|
|
120
132
|
const accountCode = parseInt(account.code, 10);
|
|
121
133
|
if (!isNaN(accountCode)) {
|
|
122
134
|
if (accountCode < newRangeStart || accountCode > newRangeEnd) {
|
|
123
|
-
return err(new AccountsOutOfRangeError(id));
|
|
135
|
+
return err(new AccountsOutOfRangeError(existing.id));
|
|
124
136
|
}
|
|
125
137
|
}
|
|
126
138
|
}
|
|
@@ -141,7 +153,7 @@ export async function run<CF extends Record<string, unknown>>(
|
|
|
141
153
|
const accountGroup = await db
|
|
142
154
|
.updateTable("AccountGroup")
|
|
143
155
|
.set(updateData)
|
|
144
|
-
.where("id", "=", id)
|
|
156
|
+
.where("id", "=", existing.id)
|
|
145
157
|
.returningAll()
|
|
146
158
|
.executeTakeFirst();
|
|
147
159
|
|
|
@@ -177,7 +189,7 @@ export async function run<CF extends Record<string, unknown>>(
|
|
|
177
189
|
actorType: "USER",
|
|
178
190
|
actorId: ctx.actorId,
|
|
179
191
|
entityType: "AccountGroup",
|
|
180
|
-
entityId: id,
|
|
192
|
+
entityId: existing.id,
|
|
181
193
|
operationType: "UPDATE",
|
|
182
194
|
companyId: coa!.companyId,
|
|
183
195
|
changes,
|
|
@@ -7,11 +7,11 @@ import {
|
|
|
7
7
|
} from "../lib/errors.generated";
|
|
8
8
|
import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
9
9
|
|
|
10
|
-
export
|
|
10
|
+
export type UpdateChartOfAccountsInput = {
|
|
11
11
|
id: string;
|
|
12
12
|
name?: string;
|
|
13
13
|
description?: string | null;
|
|
14
|
-
}
|
|
14
|
+
};
|
|
15
15
|
|
|
16
16
|
export interface AuditCommands {
|
|
17
17
|
logAuditEvent: (
|
|
@@ -29,7 +29,6 @@ export interface AuditCommands {
|
|
|
29
29
|
ctx: CommandContext,
|
|
30
30
|
) => Promise<{ ok: true; value: unknown }>;
|
|
31
31
|
}
|
|
32
|
-
|
|
33
32
|
/**
|
|
34
33
|
* Function: updateChartOfAccounts
|
|
35
34
|
*
|
|
@@ -38,7 +37,7 @@ export interface AuditCommands {
|
|
|
38
37
|
*/
|
|
39
38
|
export async function run<CF extends Record<string, unknown>>(
|
|
40
39
|
db: Transaction,
|
|
41
|
-
input: UpdateChartOfAccountsInput & CF
|
|
40
|
+
input: UpdateChartOfAccountsInput & Omit<Partial<CF>, "status">,
|
|
42
41
|
ctx: CommandContext,
|
|
43
42
|
auditCommands?: AuditCommands,
|
|
44
43
|
) {
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
updateAccountGroup modifies the mutable fields (name, sort order, number range) of an existing account group.
|
|
5
|
+
updateAccountGroup modifies the mutable fields (name, sort order, number range) of an existing account group. The target group can be looked up by `id` or by `chartOfAccountsId` + `code`. Group code is fixed by the existing record and is used only as a lookup key when paired with `chartOfAccountsId`. Number range changes must not conflict with existing account assignments or overlap with other groups' ranges.
|
|
6
6
|
|
|
7
7
|
## Business Rules
|
|
8
8
|
|
|
9
|
-
- Target group must exist
|
|
9
|
+
- Target group must exist (looked up by `id` or `chartOfAccountsId` + `code`)
|
|
10
10
|
- Parent CoA must be in DRAFT or ACTIVE status; updating a group under an ARCHIVED CoA is rejected
|
|
11
11
|
- Name, when provided, must be non-empty
|
|
12
|
-
- Group code is
|
|
12
|
+
- Group code is not part of the update input
|
|
13
13
|
- Number range changes, when provided, require both start and end to be provided together, must remain a valid non-overlapping interval within the CoA
|
|
14
14
|
- Changing a number range must not invalidate existing accounts already assigned to the group (their codes must still fall within the new range)
|
|
15
15
|
- Emits an audit event via the audit module recording the acting user, timestamp, and previous and new field values for all changed attributes
|
|
@@ -48,6 +48,7 @@ flowchart TD
|
|
|
48
48
|
## Test Cases
|
|
49
49
|
|
|
50
50
|
- returns error when group does not exist
|
|
51
|
+
- looks up group by chartOfAccountsId and code and updates name
|
|
51
52
|
- returns error when parent CoA is ARCHIVED
|
|
52
53
|
- returns error when name is empty
|
|
53
54
|
- returns error when new number range is invalid
|
|
@@ -8,13 +8,12 @@ import {
|
|
|
8
8
|
OverlappingFiscalYearError,
|
|
9
9
|
} from "../lib/errors.generated";
|
|
10
10
|
|
|
11
|
-
export
|
|
11
|
+
export type UpdateFiscalYearInput = {
|
|
12
12
|
id: string;
|
|
13
13
|
yearName?: string;
|
|
14
14
|
startDate?: Date;
|
|
15
15
|
endDate?: Date;
|
|
16
|
-
}
|
|
17
|
-
|
|
16
|
+
};
|
|
18
17
|
export async function run(db: Transaction, input: UpdateFiscalYearInput, ctx: CommandContext) {
|
|
19
18
|
const existing = await db
|
|
20
19
|
.selectFrom("FiscalYear")
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
JournalEntryNotFoundError,
|
|
6
6
|
InvalidStatusForUpdateError,
|
|
7
7
|
DuplicateReferenceNumberError,
|
|
8
|
-
JournalTypeImmutableError,
|
|
9
8
|
} from "../lib/errors.generated";
|
|
10
9
|
import { baseJournalEntry, postedJournalEntry, reversedJournalEntry } from "../testing/fixtures";
|
|
11
10
|
import { commandCtx, expectErr, expectOk } from "../testing/commandTestUtils";
|
|
@@ -60,22 +59,6 @@ describe("updateJournalEntry", () => {
|
|
|
60
59
|
expectErr(result, InvalidStatusForUpdateError);
|
|
61
60
|
});
|
|
62
61
|
|
|
63
|
-
it("returns error when attempting to change journal type", async () => {
|
|
64
|
-
const { db, spies } = createMockDb<Transaction>();
|
|
65
|
-
spies.select.mockReturnValueOnce(baseJournalEntry);
|
|
66
|
-
|
|
67
|
-
const result = await run(
|
|
68
|
-
db,
|
|
69
|
-
{
|
|
70
|
-
journalEntryId: baseJournalEntry.id,
|
|
71
|
-
journalType: "SALES",
|
|
72
|
-
},
|
|
73
|
-
commandCtx,
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
expectErr(result, JournalTypeImmutableError);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
62
|
it("updates description on a DRAFT journal entry", async () => {
|
|
80
63
|
const updatedEntry = { ...baseJournalEntry, description: "New description" };
|
|
81
64
|
const { db, spies } = createMockDb<Transaction>();
|
|
@@ -4,18 +4,15 @@ import {
|
|
|
4
4
|
JournalEntryNotFoundError,
|
|
5
5
|
InvalidStatusForUpdateError,
|
|
6
6
|
DuplicateReferenceNumberError,
|
|
7
|
-
JournalTypeImmutableError,
|
|
8
7
|
} from "../lib/errors.generated";
|
|
9
8
|
|
|
10
|
-
export
|
|
9
|
+
export type UpdateJournalEntryInput = {
|
|
11
10
|
journalEntryId: string;
|
|
12
|
-
journalType?: string;
|
|
13
11
|
description?: string;
|
|
14
12
|
sourceDocumentReference?: string;
|
|
15
13
|
entryDate?: Date;
|
|
16
14
|
referenceNumber?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
15
|
+
};
|
|
19
16
|
/**
|
|
20
17
|
* Function: updateJournalEntry
|
|
21
18
|
*
|
|
@@ -43,11 +40,6 @@ export async function run(db: Transaction, input: UpdateJournalEntryInput, _ctx:
|
|
|
43
40
|
return err(new InvalidStatusForUpdateError(journalEntryId));
|
|
44
41
|
}
|
|
45
42
|
|
|
46
|
-
// 2b. Journal type cannot be changed after creation
|
|
47
|
-
if (input.journalType !== undefined && input.journalType !== existing.journalType) {
|
|
48
|
-
return err(new JournalTypeImmutableError(journalEntryId));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
43
|
// 3. If referenceNumber is being updated, check uniqueness within company
|
|
52
44
|
if (referenceNumber !== undefined) {
|
|
53
45
|
const duplicate = await db
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
CurrencyNotFoundError,
|
|
10
10
|
} from "../lib/errors.generated";
|
|
11
11
|
|
|
12
|
-
export
|
|
12
|
+
export type UpdateJournalLineInput = {
|
|
13
13
|
id: string;
|
|
14
14
|
accountId?: string;
|
|
15
15
|
debitAmount?: number | null;
|
|
@@ -17,8 +17,7 @@ export interface UpdateJournalLineInput {
|
|
|
17
17
|
description?: string;
|
|
18
18
|
currencyCode?: string | null;
|
|
19
19
|
exchangeRate?: number | null;
|
|
20
|
-
}
|
|
21
|
-
|
|
20
|
+
};
|
|
22
21
|
export async function run(db: Transaction, input: UpdateJournalLineInput, ctx: CommandContext) {
|
|
23
22
|
// 1. Fetch journal line
|
|
24
23
|
const existing = await db
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
updateJournalEntry modifies the header fields of an existing journal entry that is in DRAFT status. Updatable fields include description, source document reference, and
|
|
5
|
+
updateJournalEntry modifies the header fields of an existing journal entry that is in DRAFT status. Updatable fields include description, source document reference, entry date, and reference number. Posted and reversed entries are immutable and cannot be updated. This command does not affect journal lines, which are managed via addJournalLine, updateJournalLine, and removeJournalLine.
|
|
6
6
|
|
|
7
7
|
## Business Rules
|
|
8
8
|
|
|
9
9
|
- Journal entry must exist and be in DRAFT status
|
|
10
10
|
- Only DRAFT entries can be updated; POSTED and REVERSED entries are immutable
|
|
11
|
-
- Journal type cannot be changed after the entry is created
|
|
12
11
|
- Entry date can be updated while in DRAFT status
|
|
13
12
|
- Description and source document reference can be updated while in DRAFT status
|
|
14
13
|
- Emits an audit event recording previous and new field values, acting user, and timestamp
|
|
@@ -34,7 +33,6 @@ flowchart TD
|
|
|
34
33
|
|
|
35
34
|
- **JOURNAL_ENTRY_NOT_FOUND**: Referenced journal entry does not exist
|
|
36
35
|
- **INVALID_STATUS_FOR_UPDATE**: Journal entry is not in DRAFT status; POSTED and REVERSED entries cannot be modified
|
|
37
|
-
- **JOURNAL_TYPE_IMMUTABLE**: Attempted to change the journal type after creation; journal type is immutable once created
|
|
38
36
|
|
|
39
37
|
## Test Cases
|
|
40
38
|
|
|
@@ -46,5 +44,4 @@ flowchart TD
|
|
|
46
44
|
- updates entry date on a DRAFT journal entry
|
|
47
45
|
- updates reference number on a DRAFT journal entry with uniqueness check
|
|
48
46
|
- returns error when updated reference number already exists
|
|
49
|
-
- returns error when attempting to change journal type
|
|
50
47
|
- emits audit event recording previous and new field values and acting user
|
|
@@ -61,7 +61,7 @@ describe("updateLot", () => {
|
|
|
61
61
|
}
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
it("lot number
|
|
64
|
+
it("lot number is not part of the update input", async () => {
|
|
65
65
|
const { db, spies } = createMockDb<Transaction>();
|
|
66
66
|
const updatedLot = { ...baseActiveLot }; // lotNumber remains the same
|
|
67
67
|
spies.select.mockReturnValueOnce(baseActiveLot); // existing lot
|
|
@@ -2,13 +2,12 @@ import type { Transaction } from "../generated/kysely-tailordb";
|
|
|
2
2
|
import { LotNotFoundError, LotFullyConsumedError } from "../lib/errors.generated";
|
|
3
3
|
import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
4
4
|
|
|
5
|
-
export
|
|
5
|
+
export type UpdateLotInput = {
|
|
6
6
|
id: string;
|
|
7
7
|
manufactureDate?: Date | null;
|
|
8
8
|
expirationDate?: Date | null;
|
|
9
9
|
supplierLotReference?: string | null;
|
|
10
|
-
}
|
|
11
|
-
|
|
10
|
+
};
|
|
12
11
|
/**
|
|
13
12
|
* Function: updateLot
|
|
14
13
|
*
|
|
@@ -20,11 +20,11 @@ export interface UpdateMoveLineInput {
|
|
|
20
20
|
serialNumberId?: string | null;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export
|
|
23
|
+
export type UpdateStockMovementInput = {
|
|
24
24
|
id: string;
|
|
25
25
|
reasonCode?: string | null;
|
|
26
26
|
lines?: UpdateMoveLineInput[];
|
|
27
|
-
}
|
|
27
|
+
};
|
|
28
28
|
|
|
29
29
|
export interface ItemManagementQueries {
|
|
30
30
|
getItem: (
|
|
@@ -36,7 +36,6 @@ export interface ItemManagementQueries {
|
|
|
36
36
|
value: { item: { id: string; status: string; isLotTracked?: boolean } | null };
|
|
37
37
|
}>;
|
|
38
38
|
}
|
|
39
|
-
|
|
40
39
|
/**
|
|
41
40
|
* Function: updateStockMovement
|
|
42
41
|
*
|