@tailor-platform/erp-kit 0.5.1 → 0.7.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 +29 -0
- package/README.md +10 -10
- package/dist/cli.mjs +499 -81
- package/package.json +1 -1
- package/skills/erp-kit-app-1-requirements/SKILL.md +33 -17
- package/skills/erp-kit-app-2-requirements-review/SKILL.md +12 -0
- package/skills/erp-kit-app-3-plan/SKILL.md +18 -4
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +1 -1
- package/skills/erp-kit-app-3-plan/references/screen-extraction.md +1 -1
- package/skills/erp-kit-app-4-plan-review/SKILL.md +12 -0
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +19 -4
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +12 -0
- package/skills/erp-kit-app-7-impl-review/SKILL.md +14 -2
- package/skills/erp-kit-app-shared/references/progress-protocol.md +77 -0
- package/skills/erp-kit-mock-scenario/SKILL.md +1 -1
- package/skills/erp-kit-module-1-requirements/SKILL.md +1 -1
- package/skills/erp-kit-module-3-plan/SKILL.md +3 -3
- package/skills/erp-kit-module-3-update-plan/SKILL.md +3 -3
- package/skills/erp-kit-module-5-impl/SKILL.md +1 -1
- package/skills/erp-kit-module-6-impl-review/SKILL.md +39 -17
- package/src/commands/app/index.ts +2 -0
- package/src/commands/app/progress/git-context.ts +16 -0
- package/src/commands/app/progress/index.ts +45 -0
- package/src/commands/app/progress/log.ts +49 -0
- package/src/commands/app/progress/progress.test.ts +128 -0
- package/src/commands/app/progress/schema-cmd.ts +10 -0
- package/src/commands/check.test.ts +4 -4
- package/src/commands/generate-doc.ts +1 -1
- package/src/commands/lib/discovery.test.ts +18 -10
- package/src/commands/lib/discovery.ts +17 -9
- package/src/commands/lib/paths.ts +4 -2
- package/src/commands/lib/sync-check-source.test.ts +1 -1
- package/src/commands/lib/sync-check-source.ts +6 -1
- package/src/commands/lib/sync-check-tests.test.ts +127 -6
- package/src/commands/lib/sync-check-tests.ts +82 -4
- package/src/commands/sync-check.ts +10 -3
- package/src/generator/generate-app-code.test.ts +0 -6
- package/src/generator/generate-app-code.ts +47 -22
- package/src/generator/generate-code.test.ts +10 -40
- package/src/generator/generate-code.ts +6 -12
- package/src/generator/stub-templates.test.ts +9 -5
- package/src/generator/stub-templates.ts +16 -9
- package/src/modules/finance-ledger/README.md +50 -0
- package/src/modules/finance-ledger/command/.gitkeep +0 -0
- package/src/modules/finance-ledger/command/addJournalLine.generated.ts +6 -0
- package/src/modules/finance-ledger/command/addJournalLine.test.ts +438 -0
- package/src/modules/finance-ledger/command/addJournalLine.ts +122 -0
- package/src/modules/finance-ledger/command/approveAndLockPeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/approveAndLockPeriod.test.ts +107 -0
- package/src/modules/finance-ledger/command/approveAndLockPeriod.ts +72 -0
- package/src/modules/finance-ledger/command/beginClose.generated.ts +6 -0
- package/src/modules/finance-ledger/command/beginClose.test.ts +106 -0
- package/src/modules/finance-ledger/command/beginClose.ts +58 -0
- package/src/modules/finance-ledger/command/closePeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/closePeriod.test.ts +87 -0
- package/src/modules/finance-ledger/command/closePeriod.ts +44 -0
- package/src/modules/finance-ledger/command/createAccountingPeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/createAccountingPeriod.test.ts +425 -0
- package/src/modules/finance-ledger/command/createAccountingPeriod.ts +133 -0
- package/src/modules/finance-ledger/command/createFiscalYear.generated.ts +6 -0
- package/src/modules/finance-ledger/command/createFiscalYear.test.ts +197 -0
- package/src/modules/finance-ledger/command/createFiscalYear.ts +70 -0
- package/src/modules/finance-ledger/command/createJournalEntry.generated.ts +6 -0
- package/src/modules/finance-ledger/command/createJournalEntry.test.ts +261 -0
- package/src/modules/finance-ledger/command/createJournalEntry.ts +121 -0
- package/src/modules/finance-ledger/command/deleteAccountingPeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/deleteAccountingPeriod.test.ts +71 -0
- package/src/modules/finance-ledger/command/deleteAccountingPeriod.ts +55 -0
- package/src/modules/finance-ledger/command/deleteFiscalYear.generated.ts +6 -0
- package/src/modules/finance-ledger/command/deleteFiscalYear.test.ts +38 -0
- package/src/modules/finance-ledger/command/deleteFiscalYear.ts +34 -0
- package/src/modules/finance-ledger/command/deleteJournalEntry.generated.ts +6 -0
- package/src/modules/finance-ledger/command/deleteJournalEntry.test.ts +58 -0
- package/src/modules/finance-ledger/command/deleteJournalEntry.ts +43 -0
- package/src/modules/finance-ledger/command/executeYearEndClose.generated.ts +6 -0
- package/src/modules/finance-ledger/command/executeYearEndClose.test.ts +239 -0
- package/src/modules/finance-ledger/command/executeYearEndClose.ts +415 -0
- package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.test.ts +102 -0
- package/src/modules/finance-ledger/command/finalCloseAndLockPeriod.ts +76 -0
- package/src/modules/finance-ledger/command/finalizeFinancialStatement.generated.ts +6 -0
- package/src/modules/finance-ledger/command/finalizeFinancialStatement.test.ts +73 -0
- package/src/modules/finance-ledger/command/finalizeFinancialStatement.ts +73 -0
- package/src/modules/finance-ledger/command/generateFinancialStatement.generated.ts +6 -0
- package/src/modules/finance-ledger/command/generateFinancialStatement.test.ts +311 -0
- package/src/modules/finance-ledger/command/generateFinancialStatement.ts +275 -0
- package/src/modules/finance-ledger/command/generatePreliminaryStatements.generated.ts +6 -0
- package/src/modules/finance-ledger/command/generatePreliminaryStatements.test.ts +152 -0
- package/src/modules/finance-ledger/command/generatePreliminaryStatements.ts +140 -0
- package/src/modules/finance-ledger/command/generateTrialBalance.generated.ts +6 -0
- package/src/modules/finance-ledger/command/generateTrialBalance.test.ts +439 -0
- package/src/modules/finance-ledger/command/generateTrialBalance.ts +268 -0
- package/src/modules/finance-ledger/command/initiatePeriodClose.generated.ts +6 -0
- package/src/modules/finance-ledger/command/initiatePeriodClose.test.ts +153 -0
- package/src/modules/finance-ledger/command/initiatePeriodClose.ts +84 -0
- package/src/modules/finance-ledger/command/openForAdvanceEntry.generated.ts +6 -0
- package/src/modules/finance-ledger/command/openForAdvanceEntry.test.ts +87 -0
- package/src/modules/finance-ledger/command/openForAdvanceEntry.ts +44 -0
- package/src/modules/finance-ledger/command/openPeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/openPeriod.test.ts +90 -0
- package/src/modules/finance-ledger/command/openPeriod.ts +44 -0
- package/src/modules/finance-ledger/command/permanentlyClosePeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/permanentlyClosePeriod.test.ts +87 -0
- package/src/modules/finance-ledger/command/permanentlyClosePeriod.ts +48 -0
- package/src/modules/finance-ledger/command/postAdjustingEntries.generated.ts +6 -0
- package/src/modules/finance-ledger/command/postAdjustingEntries.test.ts +392 -0
- package/src/modules/finance-ledger/command/postAdjustingEntries.ts +156 -0
- package/src/modules/finance-ledger/command/postJournalEntry.generated.ts +6 -0
- package/src/modules/finance-ledger/command/postJournalEntry.test.ts +346 -0
- package/src/modules/finance-ledger/command/postJournalEntry.ts +160 -0
- package/src/modules/finance-ledger/command/processInventoryHandoff.generated.ts +6 -0
- package/src/modules/finance-ledger/command/processInventoryHandoff.test.ts +211 -0
- package/src/modules/finance-ledger/command/processInventoryHandoff.ts +133 -0
- package/src/modules/finance-ledger/command/processManufacturingHandoff.generated.ts +6 -0
- package/src/modules/finance-ledger/command/processManufacturingHandoff.test.ts +221 -0
- package/src/modules/finance-ledger/command/processManufacturingHandoff.ts +133 -0
- package/src/modules/finance-ledger/command/processPurchaseHandoff.generated.ts +6 -0
- package/src/modules/finance-ledger/command/processPurchaseHandoff.test.ts +222 -0
- package/src/modules/finance-ledger/command/processPurchaseHandoff.ts +133 -0
- package/src/modules/finance-ledger/command/processSalesHandoff.generated.ts +6 -0
- package/src/modules/finance-ledger/command/processSalesHandoff.test.ts +257 -0
- package/src/modules/finance-ledger/command/processSalesHandoff.ts +135 -0
- package/src/modules/finance-ledger/command/regenerateFinancialStatement.generated.ts +6 -0
- package/src/modules/finance-ledger/command/regenerateFinancialStatement.test.ts +129 -0
- package/src/modules/finance-ledger/command/regenerateFinancialStatement.ts +186 -0
- package/src/modules/finance-ledger/command/removeJournalLine.generated.ts +6 -0
- package/src/modules/finance-ledger/command/removeJournalLine.test.ts +65 -0
- package/src/modules/finance-ledger/command/removeJournalLine.ts +39 -0
- package/src/modules/finance-ledger/command/reopenPeriod.generated.ts +6 -0
- package/src/modules/finance-ledger/command/reopenPeriod.test.ts +87 -0
- package/src/modules/finance-ledger/command/reopenPeriod.ts +44 -0
- package/src/modules/finance-ledger/command/reverseJournalEntry.generated.ts +6 -0
- package/src/modules/finance-ledger/command/reverseJournalEntry.test.ts +337 -0
- package/src/modules/finance-ledger/command/reverseJournalEntry.ts +140 -0
- package/src/modules/finance-ledger/command/revertSoftLock.generated.ts +6 -0
- package/src/modules/finance-ledger/command/revertSoftLock.test.ts +96 -0
- package/src/modules/finance-ledger/command/revertSoftLock.ts +67 -0
- package/src/modules/finance-ledger/command/updateFiscalYear.generated.ts +6 -0
- package/src/modules/finance-ledger/command/updateFiscalYear.test.ts +138 -0
- package/src/modules/finance-ledger/command/updateFiscalYear.ts +85 -0
- package/src/modules/finance-ledger/command/updateJournalEntry.generated.ts +6 -0
- package/src/modules/finance-ledger/command/updateJournalEntry.test.ts +195 -0
- package/src/modules/finance-ledger/command/updateJournalEntry.ts +86 -0
- package/src/modules/finance-ledger/command/updateJournalLine.generated.ts +6 -0
- package/src/modules/finance-ledger/command/updateJournalLine.test.ts +385 -0
- package/src/modules/finance-ledger/command/updateJournalLine.ts +155 -0
- package/src/modules/finance-ledger/command/verifySubledgerTransfers.generated.ts +6 -0
- package/src/modules/finance-ledger/command/verifySubledgerTransfers.test.ts +201 -0
- package/src/modules/finance-ledger/command/verifySubledgerTransfers.ts +113 -0
- package/src/modules/finance-ledger/command/verifyTrialBalance.generated.ts +6 -0
- package/src/modules/finance-ledger/command/verifyTrialBalance.test.ts +136 -0
- package/src/modules/finance-ledger/command/verifyTrialBalance.ts +97 -0
- package/src/modules/finance-ledger/db/.gitkeep +0 -0
- package/src/modules/finance-ledger/db/accountingPeriod.ts +58 -0
- package/src/modules/finance-ledger/db/financialStatement.ts +92 -0
- package/src/modules/finance-ledger/db/financialStatementLineItem.ts +76 -0
- package/src/modules/finance-ledger/db/fiscalYear.ts +41 -0
- package/src/modules/finance-ledger/db/journalEntry.ts +101 -0
- package/src/modules/finance-ledger/db/journalLine.ts +64 -0
- package/src/modules/finance-ledger/db/periodClose.ts +97 -0
- package/src/modules/finance-ledger/db/trialBalance.ts +63 -0
- package/src/modules/finance-ledger/db/trialBalanceLine.ts +63 -0
- package/src/modules/finance-ledger/docs/commands/AddJournalLine.md +74 -0
- package/src/modules/finance-ledger/docs/commands/ApproveAndLockPeriod.md +53 -0
- package/src/modules/finance-ledger/docs/commands/BeginClose.md +47 -0
- package/src/modules/finance-ledger/docs/commands/ClosePeriod.md +45 -0
- package/src/modules/finance-ledger/docs/commands/CreateAccountingPeriod.md +69 -0
- package/src/modules/finance-ledger/docs/commands/CreateFiscalYear.md +56 -0
- package/src/modules/finance-ledger/docs/commands/CreateJournalEntry.md +63 -0
- package/src/modules/finance-ledger/docs/commands/DeleteAccountingPeriod.md +46 -0
- package/src/modules/finance-ledger/docs/commands/DeleteFiscalYear.md +40 -0
- package/src/modules/finance-ledger/docs/commands/DeleteJournalEntry.md +44 -0
- package/src/modules/finance-ledger/docs/commands/ExecuteYearEndClose.md +81 -0
- package/src/modules/finance-ledger/docs/commands/FinalCloseAndLockPeriod.md +49 -0
- package/src/modules/finance-ledger/docs/commands/FinalizeFinancialStatement.md +43 -0
- package/src/modules/finance-ledger/docs/commands/GenerateFinancialStatement.md +86 -0
- package/src/modules/finance-ledger/docs/commands/GeneratePreliminaryStatements.md +53 -0
- package/src/modules/finance-ledger/docs/commands/GenerateTrialBalance.md +75 -0
- package/src/modules/finance-ledger/docs/commands/InitiatePeriodClose.md +58 -0
- package/src/modules/finance-ledger/docs/commands/OpenForAdvanceEntry.md +44 -0
- package/src/modules/finance-ledger/docs/commands/OpenPeriod.md +45 -0
- package/src/modules/finance-ledger/docs/commands/PermanentlyClosePeriod.md +45 -0
- package/src/modules/finance-ledger/docs/commands/PostAdjustingEntries.md +61 -0
- package/src/modules/finance-ledger/docs/commands/PostJournalEntry.md +81 -0
- package/src/modules/finance-ledger/docs/commands/ProcessInventoryHandoff.md +72 -0
- package/src/modules/finance-ledger/docs/commands/ProcessManufacturingHandoff.md +68 -0
- package/src/modules/finance-ledger/docs/commands/ProcessPurchaseHandoff.md +68 -0
- package/src/modules/finance-ledger/docs/commands/ProcessSalesHandoff.md +71 -0
- package/src/modules/finance-ledger/docs/commands/RegenerateFinancialStatement.md +60 -0
- package/src/modules/finance-ledger/docs/commands/RemoveJournalLine.md +42 -0
- package/src/modules/finance-ledger/docs/commands/ReopenPeriod.md +45 -0
- package/src/modules/finance-ledger/docs/commands/ReverseJournalEntry.md +62 -0
- package/src/modules/finance-ledger/docs/commands/RevertSoftLock.md +49 -0
- package/src/modules/finance-ledger/docs/commands/UpdateFiscalYear.md +60 -0
- package/src/modules/finance-ledger/docs/commands/UpdateJournalEntry.md +50 -0
- package/src/modules/finance-ledger/docs/commands/UpdateJournalLine.md +61 -0
- package/src/modules/finance-ledger/docs/commands/VerifySubledgerTransfers.md +59 -0
- package/src/modules/finance-ledger/docs/commands/VerifyTrialBalance.md +53 -0
- package/src/modules/finance-ledger/docs/features/accounting-period-management.md +110 -0
- package/src/modules/finance-ledger/docs/features/financial-statement-generation.md +115 -0
- package/src/modules/finance-ledger/docs/features/journal-entry-management.md +138 -0
- package/src/modules/finance-ledger/docs/features/period-end-close.md +102 -0
- package/src/modules/finance-ledger/docs/features/subledger-integration.md +141 -0
- package/src/modules/finance-ledger/docs/features/trial-balance.md +99 -0
- package/src/modules/finance-ledger/docs/features/year-end-close.md +84 -0
- package/src/modules/finance-ledger/docs/models/AccountingPeriod.md +71 -0
- package/src/modules/finance-ledger/docs/models/FinancialStatement.md +76 -0
- package/src/modules/finance-ledger/docs/models/FinancialStatementLineItem.md +41 -0
- package/src/modules/finance-ledger/docs/models/FiscalYear.md +41 -0
- package/src/modules/finance-ledger/docs/models/JournalEntry.md +80 -0
- package/src/modules/finance-ledger/docs/models/JournalLine.md +47 -0
- package/src/modules/finance-ledger/docs/models/PeriodClose.md +83 -0
- package/src/modules/finance-ledger/docs/models/TrialBalance.md +56 -0
- package/src/modules/finance-ledger/docs/models/TrialBalanceLine.md +37 -0
- package/src/modules/finance-ledger/docs/queries/GetAccountingPeriod.md +35 -0
- package/src/modules/finance-ledger/docs/queries/GetFinancialStatement.md +38 -0
- package/src/modules/finance-ledger/docs/queries/GetFiscalYear.md +35 -0
- package/src/modules/finance-ledger/docs/queries/GetJournalEntry.md +37 -0
- package/src/modules/finance-ledger/docs/queries/GetPeriodByDate.md +38 -0
- package/src/modules/finance-ledger/docs/queries/GetPeriodClose.md +36 -0
- package/src/modules/finance-ledger/docs/queries/GetSubledgerTransferStatus.md +45 -0
- package/src/modules/finance-ledger/docs/queries/GetTrialBalance.md +38 -0
- package/src/modules/finance-ledger/docs/queries/ListAccountingPeriods.md +46 -0
- package/src/modules/finance-ledger/docs/queries/ListFinancialStatements.md +46 -0
- package/src/modules/finance-ledger/docs/queries/ListFiscalYears.md +42 -0
- package/src/modules/finance-ledger/docs/queries/ListJournalEntries.md +48 -0
- package/src/modules/finance-ledger/docs/queries/ListPeriodCloses.md +46 -0
- package/src/modules/finance-ledger/docs/queries/ListTrialBalances.md +51 -0
- package/src/modules/finance-ledger/executor/.gitkeep +0 -0
- package/src/modules/finance-ledger/generated/enums.ts +109 -0
- package/src/modules/finance-ledger/generated/kysely-tailordb.ts +202 -0
- package/src/modules/finance-ledger/index.ts +2 -0
- package/src/modules/finance-ledger/lib/_db_deps.ts +56 -0
- package/src/modules/finance-ledger/lib/errors.generated.ts +332 -0
- package/src/modules/finance-ledger/lib/permissions.generated.ts +41 -0
- package/src/modules/finance-ledger/lib/types.ts +66 -0
- package/src/modules/finance-ledger/module.ts +262 -0
- package/src/modules/finance-ledger/package.json +26 -0
- package/src/modules/finance-ledger/permissions.ts +3 -0
- package/src/modules/finance-ledger/query/.gitkeep +0 -0
- package/src/modules/finance-ledger/query/getAccountingPeriod.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getAccountingPeriod.test.ts +31 -0
- package/src/modules/finance-ledger/query/getAccountingPeriod.ts +21 -0
- package/src/modules/finance-ledger/query/getFinancialStatement.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getFinancialStatement.test.ts +35 -0
- package/src/modules/finance-ledger/query/getFinancialStatement.ts +29 -0
- package/src/modules/finance-ledger/query/getFiscalYear.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getFiscalYear.test.ts +31 -0
- package/src/modules/finance-ledger/query/getFiscalYear.ts +21 -0
- package/src/modules/finance-ledger/query/getJournalEntry.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getJournalEntry.test.ts +35 -0
- package/src/modules/finance-ledger/query/getJournalEntry.ts +29 -0
- package/src/modules/finance-ledger/query/getPeriodByDate.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getPeriodByDate.test.ts +53 -0
- package/src/modules/finance-ledger/query/getPeriodByDate.ts +27 -0
- package/src/modules/finance-ledger/query/getPeriodClose.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getPeriodClose.test.ts +31 -0
- package/src/modules/finance-ledger/query/getPeriodClose.ts +21 -0
- package/src/modules/finance-ledger/query/getSubledgerTransferStatus.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getSubledgerTransferStatus.test.ts +101 -0
- package/src/modules/finance-ledger/query/getSubledgerTransferStatus.ts +68 -0
- package/src/modules/finance-ledger/query/getTrialBalance.generated.ts +5 -0
- package/src/modules/finance-ledger/query/getTrialBalance.test.ts +33 -0
- package/src/modules/finance-ledger/query/getTrialBalance.ts +30 -0
- package/src/modules/finance-ledger/query/listAccountingPeriods.generated.ts +5 -0
- package/src/modules/finance-ledger/query/listAccountingPeriods.test.ts +81 -0
- package/src/modules/finance-ledger/query/listAccountingPeriods.ts +61 -0
- package/src/modules/finance-ledger/query/listFinancialStatements.generated.ts +5 -0
- package/src/modules/finance-ledger/query/listFinancialStatements.test.ts +76 -0
- package/src/modules/finance-ledger/query/listFinancialStatements.ts +62 -0
- package/src/modules/finance-ledger/query/listFiscalYears.generated.ts +5 -0
- package/src/modules/finance-ledger/query/listFiscalYears.test.ts +63 -0
- package/src/modules/finance-ledger/query/listFiscalYears.ts +45 -0
- package/src/modules/finance-ledger/query/listJournalEntries.generated.ts +5 -0
- package/src/modules/finance-ledger/query/listJournalEntries.test.ts +91 -0
- package/src/modules/finance-ledger/query/listJournalEntries.ts +64 -0
- package/src/modules/finance-ledger/query/listPeriodCloses.generated.ts +5 -0
- package/src/modules/finance-ledger/query/listPeriodCloses.test.ts +63 -0
- package/src/modules/finance-ledger/query/listPeriodCloses.ts +64 -0
- package/src/modules/finance-ledger/query/listTrialBalances.generated.ts +5 -0
- package/src/modules/finance-ledger/query/listTrialBalances.test.ts +78 -0
- package/src/modules/finance-ledger/query/listTrialBalances.ts +56 -0
- package/src/modules/finance-ledger/seed/index.ts +19 -0
- package/src/modules/finance-ledger/tailor.config.ts +13 -0
- package/src/modules/finance-ledger/tailor.d.ts +13 -0
- package/src/modules/finance-ledger/testing/commandTestUtils.ts +35 -0
- package/src/modules/finance-ledger/testing/fixtures.ts +382 -0
- package/src/modules/finance-ledger/tsconfig.json +16 -0
- package/src/modules/inventory/docs/features/inventory-adjustment.md +2 -1
- package/src/modules/inventory/docs/features/scrap-management.md +39 -1
- package/src/modules/manufacturing/README.md +63 -0
- package/src/modules/manufacturing/command/.gitkeep +0 -0
- package/src/modules/manufacturing/command/activateBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/activateBillOfMaterial.test.ts +166 -0
- package/src/modules/manufacturing/command/activateBillOfMaterial.ts +173 -0
- package/src/modules/manufacturing/command/activateRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/activateRouting.test.ts +152 -0
- package/src/modules/manufacturing/command/activateRouting.ts +92 -0
- package/src/modules/manufacturing/command/activateWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/activateWorkCenter.test.ts +135 -0
- package/src/modules/manufacturing/command/activateWorkCenter.ts +91 -0
- package/src/modules/manufacturing/command/cancelProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/cancelProductionOrder.test.ts +151 -0
- package/src/modules/manufacturing/command/cancelProductionOrder.ts +114 -0
- package/src/modules/manufacturing/command/closeProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/closeProductionOrder.test.ts +126 -0
- package/src/modules/manufacturing/command/closeProductionOrder.ts +87 -0
- package/src/modules/manufacturing/command/completeProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/completeProductionOrder.test.ts +132 -0
- package/src/modules/manufacturing/command/completeProductionOrder.ts +97 -0
- package/src/modules/manufacturing/command/completeWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/completeWorkOrder.test.ts +369 -0
- package/src/modules/manufacturing/command/completeWorkOrder.ts +212 -0
- package/src/modules/manufacturing/command/createBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/createBillOfMaterial.test.ts +210 -0
- package/src/modules/manufacturing/command/createBillOfMaterial.ts +176 -0
- package/src/modules/manufacturing/command/createProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/createProductionOrder.test.ts +160 -0
- package/src/modules/manufacturing/command/createProductionOrder.ts +129 -0
- package/src/modules/manufacturing/command/createRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/createRouting.test.ts +168 -0
- package/src/modules/manufacturing/command/createRouting.ts +128 -0
- package/src/modules/manufacturing/command/createWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/createWorkCenter.test.ts +148 -0
- package/src/modules/manufacturing/command/createWorkCenter.ts +131 -0
- package/src/modules/manufacturing/command/deactivateBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/deactivateBillOfMaterial.test.ts +103 -0
- package/src/modules/manufacturing/command/deactivateBillOfMaterial.ts +78 -0
- package/src/modules/manufacturing/command/deactivateRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/deactivateRouting.test.ts +112 -0
- package/src/modules/manufacturing/command/deactivateRouting.ts +76 -0
- package/src/modules/manufacturing/command/deactivateWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/deactivateWorkCenter.test.ts +113 -0
- package/src/modules/manufacturing/command/deactivateWorkCenter.ts +85 -0
- package/src/modules/manufacturing/command/pauseWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/pauseWorkOrder.test.ts +118 -0
- package/src/modules/manufacturing/command/pauseWorkOrder.ts +82 -0
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.generated.ts +6 -0
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.test.ts +183 -0
- package/src/modules/manufacturing/command/recordInventoryIssueOutcome.ts +139 -0
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.generated.ts +6 -0
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.test.ts +120 -0
- package/src/modules/manufacturing/command/recordManufacturingCostSettlementAcknowledgment.ts +110 -0
- package/src/modules/manufacturing/command/releaseProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/releaseProductionOrder.test.ts +220 -0
- package/src/modules/manufacturing/command/releaseProductionOrder.ts +450 -0
- package/src/modules/manufacturing/command/reopenProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/reopenProductionOrder.test.ts +196 -0
- package/src/modules/manufacturing/command/reopenProductionOrder.ts +98 -0
- package/src/modules/manufacturing/command/reportWorkOrderProgress.generated.ts +6 -0
- package/src/modules/manufacturing/command/reportWorkOrderProgress.test.ts +204 -0
- package/src/modules/manufacturing/command/reportWorkOrderProgress.ts +129 -0
- package/src/modules/manufacturing/command/rescheduleProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/rescheduleProductionOrder.test.ts +185 -0
- package/src/modules/manufacturing/command/rescheduleProductionOrder.ts +95 -0
- package/src/modules/manufacturing/command/resumeWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/resumeWorkOrder.test.ts +122 -0
- package/src/modules/manufacturing/command/resumeWorkOrder.ts +94 -0
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.generated.ts +6 -0
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.test.ts +231 -0
- package/src/modules/manufacturing/command/reviewManufacturingCostSummary.ts +137 -0
- package/src/modules/manufacturing/command/startWorkOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/startWorkOrder.test.ts +118 -0
- package/src/modules/manufacturing/command/startWorkOrder.ts +126 -0
- package/src/modules/manufacturing/command/technicallyCompleteProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/technicallyCompleteProductionOrder.test.ts +153 -0
- package/src/modules/manufacturing/command/technicallyCompleteProductionOrder.ts +106 -0
- package/src/modules/manufacturing/command/unreleaseProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/unreleaseProductionOrder.test.ts +140 -0
- package/src/modules/manufacturing/command/unreleaseProductionOrder.ts +131 -0
- package/src/modules/manufacturing/command/updateBillOfMaterial.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateBillOfMaterial.test.ts +149 -0
- package/src/modules/manufacturing/command/updateBillOfMaterial.ts +174 -0
- package/src/modules/manufacturing/command/updateProductionOrder.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateProductionOrder.test.ts +112 -0
- package/src/modules/manufacturing/command/updateProductionOrder.ts +145 -0
- package/src/modules/manufacturing/command/updateRouting.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateRouting.test.ts +211 -0
- package/src/modules/manufacturing/command/updateRouting.ts +124 -0
- package/src/modules/manufacturing/command/updateWorkCenter.generated.ts +6 -0
- package/src/modules/manufacturing/command/updateWorkCenter.test.ts +152 -0
- package/src/modules/manufacturing/command/updateWorkCenter.ts +137 -0
- package/src/modules/manufacturing/db/.gitkeep +0 -0
- package/src/modules/manufacturing/db/billOfMaterial.ts +70 -0
- package/src/modules/manufacturing/db/billOfMaterialLine.ts +49 -0
- package/src/modules/manufacturing/db/costVarianceLine.ts +53 -0
- package/src/modules/manufacturing/db/manufacturingCostLine.ts +35 -0
- package/src/modules/manufacturing/db/manufacturingCostSettlementRecord.ts +39 -0
- package/src/modules/manufacturing/db/manufacturingCostSummary.ts +59 -0
- package/src/modules/manufacturing/db/productionOrder.ts +83 -0
- package/src/modules/manufacturing/db/productionOrderBomSnapshot.ts +44 -0
- package/src/modules/manufacturing/db/productionOrderCostBaseline.ts +44 -0
- package/src/modules/manufacturing/db/productionOrderMaterialRequirement.ts +57 -0
- package/src/modules/manufacturing/db/productionOrderRoutingSnapshot.ts +43 -0
- package/src/modules/manufacturing/db/routing.ts +63 -0
- package/src/modules/manufacturing/db/routingOperation.ts +57 -0
- package/src/modules/manufacturing/db/workCenter.ts +87 -0
- package/src/modules/manufacturing/db/workOrder.ts +65 -0
- package/src/modules/manufacturing/db/workOrderExecutionEvent.ts +54 -0
- package/src/modules/manufacturing/docs/commands/ActivateBillOfMaterial.md +50 -0
- package/src/modules/manufacturing/docs/commands/ActivateRouting.md +48 -0
- package/src/modules/manufacturing/docs/commands/ActivateWorkCenter.md +49 -0
- package/src/modules/manufacturing/docs/commands/CancelProductionOrder.md +48 -0
- package/src/modules/manufacturing/docs/commands/CloseProductionOrder.md +46 -0
- package/src/modules/manufacturing/docs/commands/CompleteProductionOrder.md +48 -0
- package/src/modules/manufacturing/docs/commands/CompleteWorkOrder.md +66 -0
- package/src/modules/manufacturing/docs/commands/CreateBillOfMaterial.md +54 -0
- package/src/modules/manufacturing/docs/commands/CreateProductionOrder.md +49 -0
- package/src/modules/manufacturing/docs/commands/CreateRouting.md +50 -0
- package/src/modules/manufacturing/docs/commands/CreateWorkCenter.md +51 -0
- package/src/modules/manufacturing/docs/commands/DeactivateBillOfMaterial.md +45 -0
- package/src/modules/manufacturing/docs/commands/DeactivateRouting.md +45 -0
- package/src/modules/manufacturing/docs/commands/DeactivateWorkCenter.md +45 -0
- package/src/modules/manufacturing/docs/commands/PauseWorkOrder.md +44 -0
- package/src/modules/manufacturing/docs/commands/RecordInventoryIssueOutcome.md +59 -0
- package/src/modules/manufacturing/docs/commands/RecordManufacturingCostSettlementAcknowledgment.md +49 -0
- package/src/modules/manufacturing/docs/commands/ReleaseProductionOrder.md +57 -0
- package/src/modules/manufacturing/docs/commands/ReopenProductionOrder.md +54 -0
- package/src/modules/manufacturing/docs/commands/ReportWorkOrderProgress.md +53 -0
- package/src/modules/manufacturing/docs/commands/RescheduleProductionOrder.md +45 -0
- package/src/modules/manufacturing/docs/commands/ResumeWorkOrder.md +44 -0
- package/src/modules/manufacturing/docs/commands/ReviewManufacturingCostSummary.md +52 -0
- package/src/modules/manufacturing/docs/commands/StartWorkOrder.md +46 -0
- package/src/modules/manufacturing/docs/commands/TechnicallyCompleteProductionOrder.md +51 -0
- package/src/modules/manufacturing/docs/commands/UnreleaseProductionOrder.md +46 -0
- package/src/modules/manufacturing/docs/commands/UpdateBillOfMaterial.md +48 -0
- package/src/modules/manufacturing/docs/commands/UpdateProductionOrder.md +48 -0
- package/src/modules/manufacturing/docs/commands/UpdateRouting.md +52 -0
- package/src/modules/manufacturing/docs/commands/UpdateWorkCenter.md +48 -0
- package/src/modules/manufacturing/docs/features/bill-of-material-management.md +83 -0
- package/src/modules/manufacturing/docs/features/manufacturing-cost-and-variance.md +191 -0
- package/src/modules/manufacturing/docs/features/production-order-lifecycle.md +103 -0
- package/src/modules/manufacturing/docs/features/routing-and-work-center-definition.md +63 -0
- package/src/modules/manufacturing/docs/features/work-order-execution.md +115 -0
- package/src/modules/manufacturing/docs/models/BillOfMaterial.md +60 -0
- package/src/modules/manufacturing/docs/models/ManufacturingCostSummary.md +66 -0
- package/src/modules/manufacturing/docs/models/ProductionOrder.md +76 -0
- package/src/modules/manufacturing/docs/models/Routing.md +58 -0
- package/src/modules/manufacturing/docs/models/WorkCenter.md +56 -0
- package/src/modules/manufacturing/docs/models/WorkOrder.md +63 -0
- package/src/modules/manufacturing/docs/queries/DetectBillOfMaterialCircularReference.md +39 -0
- package/src/modules/manufacturing/docs/queries/ExplodeBillOfMaterial.md +56 -0
- package/src/modules/manufacturing/docs/queries/GetBillOfMaterial.md +37 -0
- package/src/modules/manufacturing/docs/queries/GetManufacturingCostSummary.md +39 -0
- package/src/modules/manufacturing/docs/queries/GetProductionOrder.md +37 -0
- package/src/modules/manufacturing/docs/queries/GetRouting.md +39 -0
- package/src/modules/manufacturing/docs/queries/GetWorkCenter.md +35 -0
- package/src/modules/manufacturing/docs/queries/GetWorkOrder.md +38 -0
- package/src/modules/manufacturing/docs/queries/ListBillOfMaterialsByItem.md +42 -0
- package/src/modules/manufacturing/docs/queries/ListManufacturingCostSummariesByStatus.md +41 -0
- package/src/modules/manufacturing/docs/queries/ListProductionOrdersByStatus.md +41 -0
- package/src/modules/manufacturing/docs/queries/ListRoutingsByItem.md +42 -0
- package/src/modules/manufacturing/docs/queries/ListWorkCentersBySite.md +38 -0
- package/src/modules/manufacturing/docs/queries/ListWorkOrdersByProductionOrder.md +39 -0
- package/src/modules/manufacturing/docs/queries/ListWorkOrdersByWorkCenter.md +43 -0
- package/src/modules/manufacturing/executor/.gitkeep +0 -0
- package/src/modules/manufacturing/generated/enums.ts +113 -0
- package/src/modules/manufacturing/generated/kysely-tailordb.ts +247 -0
- package/src/modules/manufacturing/index.ts +2 -0
- package/src/modules/manufacturing/lib/_db_deps.ts +22 -0
- package/src/modules/manufacturing/lib/errors.generated.ts +592 -0
- package/src/modules/manufacturing/lib/permissions.generated.ts +35 -0
- package/src/modules/manufacturing/lib/types.ts +111 -0
- package/src/modules/manufacturing/module.ts +226 -0
- package/src/modules/manufacturing/permissions.ts +3 -0
- package/src/modules/manufacturing/query/.gitkeep +0 -0
- package/src/modules/manufacturing/query/detectBillOfMaterialCircularReference.generated.ts +5 -0
- package/src/modules/manufacturing/query/detectBillOfMaterialCircularReference.test.ts +115 -0
- package/src/modules/manufacturing/query/detectBillOfMaterialCircularReference.ts +79 -0
- package/src/modules/manufacturing/query/explodeBillOfMaterial.generated.ts +5 -0
- package/src/modules/manufacturing/query/explodeBillOfMaterial.test.ts +445 -0
- package/src/modules/manufacturing/query/explodeBillOfMaterial.ts +306 -0
- package/src/modules/manufacturing/query/getBillOfMaterial.generated.ts +5 -0
- package/src/modules/manufacturing/query/getBillOfMaterial.test.ts +64 -0
- package/src/modules/manufacturing/query/getBillOfMaterial.ts +27 -0
- package/src/modules/manufacturing/query/getManufacturingCostSummary.generated.ts +5 -0
- package/src/modules/manufacturing/query/getManufacturingCostSummary.test.ts +147 -0
- package/src/modules/manufacturing/query/getManufacturingCostSummary.ts +46 -0
- package/src/modules/manufacturing/query/getProductionOrder.generated.ts +5 -0
- package/src/modules/manufacturing/query/getProductionOrder.test.ts +139 -0
- package/src/modules/manufacturing/query/getProductionOrder.ts +84 -0
- package/src/modules/manufacturing/query/getRouting.generated.ts +5 -0
- package/src/modules/manufacturing/query/getRouting.test.ts +71 -0
- package/src/modules/manufacturing/query/getRouting.ts +34 -0
- package/src/modules/manufacturing/query/getWorkCenter.generated.ts +5 -0
- package/src/modules/manufacturing/query/getWorkCenter.test.ts +37 -0
- package/src/modules/manufacturing/query/getWorkCenter.ts +21 -0
- package/src/modules/manufacturing/query/getWorkOrder.generated.ts +5 -0
- package/src/modules/manufacturing/query/getWorkOrder.test.ts +73 -0
- package/src/modules/manufacturing/query/getWorkOrder.ts +28 -0
- package/src/modules/manufacturing/query/listBillOfMaterialsByItem.generated.ts +5 -0
- package/src/modules/manufacturing/query/listBillOfMaterialsByItem.test.ts +107 -0
- package/src/modules/manufacturing/query/listBillOfMaterialsByItem.ts +58 -0
- package/src/modules/manufacturing/query/listManufacturingCostSummariesByStatus.generated.ts +5 -0
- package/src/modules/manufacturing/query/listManufacturingCostSummariesByStatus.test.ts +96 -0
- package/src/modules/manufacturing/query/listManufacturingCostSummariesByStatus.ts +77 -0
- package/src/modules/manufacturing/query/listProductionOrdersByStatus.generated.ts +5 -0
- package/src/modules/manufacturing/query/listProductionOrdersByStatus.test.ts +121 -0
- package/src/modules/manufacturing/query/listProductionOrdersByStatus.ts +83 -0
- package/src/modules/manufacturing/query/listRoutingsByItem.generated.ts +5 -0
- package/src/modules/manufacturing/query/listRoutingsByItem.test.ts +110 -0
- package/src/modules/manufacturing/query/listRoutingsByItem.ts +54 -0
- package/src/modules/manufacturing/query/listWorkCentersBySite.generated.ts +5 -0
- package/src/modules/manufacturing/query/listWorkCentersBySite.test.ts +81 -0
- package/src/modules/manufacturing/query/listWorkCentersBySite.ts +70 -0
- package/src/modules/manufacturing/query/listWorkOrdersByProductionOrder.generated.ts +5 -0
- package/src/modules/manufacturing/query/listWorkOrdersByProductionOrder.test.ts +102 -0
- package/src/modules/manufacturing/query/listWorkOrdersByProductionOrder.ts +53 -0
- package/src/modules/manufacturing/query/listWorkOrdersByWorkCenter.generated.ts +5 -0
- package/src/modules/manufacturing/query/listWorkOrdersByWorkCenter.test.ts +143 -0
- package/src/modules/manufacturing/query/listWorkOrdersByWorkCenter.ts +56 -0
- package/src/modules/manufacturing/seed/index.ts +19 -0
- package/src/modules/manufacturing/tailor.config.ts +13 -0
- package/src/modules/manufacturing/tailor.d.ts +13 -0
- package/src/modules/manufacturing/testing/commandTestUtils.ts +29 -0
- package/src/modules/manufacturing/testing/fixtures.ts +402 -0
- package/src/progress/schema.test.ts +161 -0
- package/src/progress/schema.ts +316 -0
- package/templates/scaffold/app/backend/package.json +7 -2
- package/templates/scaffold/app/backend/src/tests/utils/graphql-client.ts +66 -0
- package/templates/scaffold/app/backend/src/tests/utils/setup.ts +21 -0
- package/templates/scaffold/app/backend/tsconfig.json +9 -2
- package/templates/scaffold/app/backend/vitest.config.ts +18 -0
- package/templates/scaffold/app/frontend/package.json +2 -2
- package/src/generator/generate-stubs.ts +0 -31
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { productionOrder } from "./productionOrder";
|
|
9
|
+
|
|
10
|
+
export interface CreateProductionOrderRoutingSnapshotTypeParams<
|
|
11
|
+
F extends Record<string, TailorAnyDBField>,
|
|
12
|
+
> {
|
|
13
|
+
fields?: F;
|
|
14
|
+
productionOrderType: TailorAnyDBType;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function createProductionOrderRoutingSnapshotType<
|
|
18
|
+
const F extends Record<string, TailorAnyDBField>,
|
|
19
|
+
>(params: CreateProductionOrderRoutingSnapshotTypeParams<F>) {
|
|
20
|
+
return db
|
|
21
|
+
.type("ProductionOrderRoutingSnapshot", {
|
|
22
|
+
productionOrderId: db
|
|
23
|
+
.uuid()
|
|
24
|
+
.relation({
|
|
25
|
+
type: "1-1",
|
|
26
|
+
toward: { type: params.productionOrderType },
|
|
27
|
+
backward: "routingSnapshot",
|
|
28
|
+
})
|
|
29
|
+
.description("Foreign key to ProductionOrder (one snapshot per order)"),
|
|
30
|
+
routingId: db.uuid().description("Routing ID reference for the snapshot"),
|
|
31
|
+
snapshotData: db
|
|
32
|
+
.string({ optional: true })
|
|
33
|
+
.description("JSON blob containing the full routing snapshot"),
|
|
34
|
+
...((params.fields ?? {}) as F),
|
|
35
|
+
...db.fields.timestamps(),
|
|
36
|
+
})
|
|
37
|
+
.permission(unsafeAllowAllTypePermission)
|
|
38
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const productionOrderRoutingSnapshot = createProductionOrderRoutingSnapshotType({
|
|
42
|
+
productionOrderType: productionOrder,
|
|
43
|
+
});
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { company as companyStub, site as siteStub, item as itemStub } from "../lib/_db_deps";
|
|
9
|
+
|
|
10
|
+
export const BASE_ROUTING_STATUSES = ["DRAFT", "ACTIVE", "INACTIVE"] as const;
|
|
11
|
+
|
|
12
|
+
export interface CreateRoutingTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
13
|
+
fields?: F;
|
|
14
|
+
companyType: TailorAnyDBType;
|
|
15
|
+
siteType: TailorAnyDBType;
|
|
16
|
+
itemType: TailorAnyDBType;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function createRoutingType<const F extends Record<string, TailorAnyDBField>>(
|
|
20
|
+
params: CreateRoutingTypeParams<F>,
|
|
21
|
+
) {
|
|
22
|
+
return db
|
|
23
|
+
.type("Routing", {
|
|
24
|
+
parentItemId: db
|
|
25
|
+
.uuid()
|
|
26
|
+
.relation({
|
|
27
|
+
type: "n-1",
|
|
28
|
+
toward: { type: params.itemType },
|
|
29
|
+
backward: "routings",
|
|
30
|
+
})
|
|
31
|
+
.description("Foreign key to Item – the manufactured item"),
|
|
32
|
+
companyId: db
|
|
33
|
+
.uuid()
|
|
34
|
+
.relation({
|
|
35
|
+
type: "n-1",
|
|
36
|
+
toward: { type: params.companyType },
|
|
37
|
+
backward: "routings",
|
|
38
|
+
})
|
|
39
|
+
.description("Foreign key to Company"),
|
|
40
|
+
siteId: db
|
|
41
|
+
.uuid({ optional: true })
|
|
42
|
+
.relation({
|
|
43
|
+
type: "n-1",
|
|
44
|
+
toward: { type: params.siteType },
|
|
45
|
+
backward: "routings",
|
|
46
|
+
})
|
|
47
|
+
.description("Foreign key to Site – optional site scope"),
|
|
48
|
+
revisionNumber: db.string({ optional: true }).description("Version identity of the routing"),
|
|
49
|
+
status: db
|
|
50
|
+
.enum([...BASE_ROUTING_STATUSES] as [string, ...string[]])
|
|
51
|
+
.description("Lifecycle status: DRAFT, ACTIVE, INACTIVE"),
|
|
52
|
+
...((params.fields ?? {}) as F),
|
|
53
|
+
...db.fields.timestamps(),
|
|
54
|
+
})
|
|
55
|
+
.permission(unsafeAllowAllTypePermission)
|
|
56
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const routing = createRoutingType({
|
|
60
|
+
companyType: companyStub,
|
|
61
|
+
siteType: siteStub,
|
|
62
|
+
itemType: itemStub,
|
|
63
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBType,
|
|
4
|
+
unsafeAllowAllGqlPermission,
|
|
5
|
+
unsafeAllowAllTypePermission,
|
|
6
|
+
} from "@tailor-platform/sdk";
|
|
7
|
+
import { routing } from "./routing";
|
|
8
|
+
import { workCenter } from "./workCenter";
|
|
9
|
+
|
|
10
|
+
export interface CreateRoutingOperationTypeParams {
|
|
11
|
+
routingType: TailorAnyDBType;
|
|
12
|
+
workCenterType: TailorAnyDBType;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function createRoutingOperationType(params: CreateRoutingOperationTypeParams) {
|
|
16
|
+
return db
|
|
17
|
+
.type("RoutingOperation", {
|
|
18
|
+
routingId: db
|
|
19
|
+
.uuid()
|
|
20
|
+
.relation({
|
|
21
|
+
type: "n-1",
|
|
22
|
+
toward: { type: params.routingType },
|
|
23
|
+
backward: "routingOperations",
|
|
24
|
+
})
|
|
25
|
+
.description("Foreign key to Routing"),
|
|
26
|
+
sequenceNumber: db.int().description("Step order within the routing"),
|
|
27
|
+
operationDescription: db
|
|
28
|
+
.string({ optional: true })
|
|
29
|
+
.description("Human-readable description of the operation"),
|
|
30
|
+
workCenterId: db
|
|
31
|
+
.uuid()
|
|
32
|
+
.relation({
|
|
33
|
+
type: "n-1",
|
|
34
|
+
toward: { type: params.workCenterType },
|
|
35
|
+
backward: "routingOperations",
|
|
36
|
+
})
|
|
37
|
+
.description("Foreign key to WorkCenter"),
|
|
38
|
+
standardSetupTime: db.float().description("Standard setup time (>= 0)"),
|
|
39
|
+
standardRunTime: db.float().description("Standard run time per unit (>= 0)"),
|
|
40
|
+
operatorInstructions: db
|
|
41
|
+
.string({ optional: true })
|
|
42
|
+
.description("Free-text instructions for the operator"),
|
|
43
|
+
...db.fields.timestamps(),
|
|
44
|
+
})
|
|
45
|
+
.indexes({
|
|
46
|
+
fields: ["routingId", "sequenceNumber"],
|
|
47
|
+
unique: true,
|
|
48
|
+
name: "routing_operation_routing_seq_idx",
|
|
49
|
+
})
|
|
50
|
+
.permission(unsafeAllowAllTypePermission)
|
|
51
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export const routingOperation = createRoutingOperationType({
|
|
55
|
+
routingType: routing,
|
|
56
|
+
workCenterType: workCenter,
|
|
57
|
+
});
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { company as companyStub, site as siteStub } from "../lib/_db_deps";
|
|
9
|
+
|
|
10
|
+
export const BASE_WORK_CENTER_STATUSES = ["DRAFT", "ACTIVE", "INACTIVE"] as const;
|
|
11
|
+
|
|
12
|
+
export const OVERHEAD_ABSORPTION_METHODS = [
|
|
13
|
+
"PERCENT_OF_LABOR_COST",
|
|
14
|
+
"PERCENT_OF_MACHINE_COST",
|
|
15
|
+
"FIXED_AMOUNT_PER_GOOD_UNIT",
|
|
16
|
+
] as const;
|
|
17
|
+
|
|
18
|
+
export interface CreateWorkCenterTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
19
|
+
fields?: F;
|
|
20
|
+
companyType: TailorAnyDBType;
|
|
21
|
+
siteType: TailorAnyDBType;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function createWorkCenterType<const F extends Record<string, TailorAnyDBField>>(
|
|
25
|
+
params: CreateWorkCenterTypeParams<F>,
|
|
26
|
+
) {
|
|
27
|
+
return db
|
|
28
|
+
.type("WorkCenter", {
|
|
29
|
+
code: db.string().description("Work-center code, unique within company and site scope"),
|
|
30
|
+
companyId: db
|
|
31
|
+
.uuid()
|
|
32
|
+
.relation({
|
|
33
|
+
type: "n-1",
|
|
34
|
+
toward: { type: params.companyType },
|
|
35
|
+
backward: "workCenters",
|
|
36
|
+
})
|
|
37
|
+
.description("Foreign key to Company"),
|
|
38
|
+
siteId: db
|
|
39
|
+
.uuid({ optional: true })
|
|
40
|
+
.relation({
|
|
41
|
+
type: "n-1",
|
|
42
|
+
toward: { type: params.siteType },
|
|
43
|
+
backward: "workCenters",
|
|
44
|
+
})
|
|
45
|
+
.description("Foreign key to Site; required when company uses site-level work centers"),
|
|
46
|
+
status: db
|
|
47
|
+
.enum([...BASE_WORK_CENTER_STATUSES] as [string, ...string[]])
|
|
48
|
+
.description("Lifecycle status: DRAFT, ACTIVE, INACTIVE"),
|
|
49
|
+
capacityAssumptions: db
|
|
50
|
+
.float()
|
|
51
|
+
.description(
|
|
52
|
+
"Capacity assumption expressed in a consistent planning unit; must be positive",
|
|
53
|
+
),
|
|
54
|
+
laborRate: db
|
|
55
|
+
.float({ optional: true })
|
|
56
|
+
.description("Standard labor rate per planning unit; must be zero or greater"),
|
|
57
|
+
machineRate: db
|
|
58
|
+
.float({ optional: true })
|
|
59
|
+
.description("Standard machine rate per planning unit; must be zero or greater"),
|
|
60
|
+
calendarReference: db
|
|
61
|
+
.string({ optional: true })
|
|
62
|
+
.description("Calendar identifier; required when activating the work center"),
|
|
63
|
+
overheadAbsorptionMethod: db
|
|
64
|
+
.enum([...OVERHEAD_ABSORPTION_METHODS] as [string, ...string[]], {
|
|
65
|
+
optional: true,
|
|
66
|
+
})
|
|
67
|
+
.description(
|
|
68
|
+
"Method for absorbing overhead: PERCENT_OF_LABOR_COST, PERCENT_OF_MACHINE_COST, or FIXED_AMOUNT_PER_GOOD_UNIT",
|
|
69
|
+
),
|
|
70
|
+
overheadAbsorptionCurrency: db
|
|
71
|
+
.string({ optional: true })
|
|
72
|
+
.description(
|
|
73
|
+
"ISO 4217 currency code for overhead absorption; required when method is FIXED_AMOUNT_PER_GOOD_UNIT",
|
|
74
|
+
),
|
|
75
|
+
...((params.fields ?? {}) as F),
|
|
76
|
+
...db.fields.timestamps(),
|
|
77
|
+
})
|
|
78
|
+
.indexes({
|
|
79
|
+
fields: ["code", "companyId", "siteId"],
|
|
80
|
+
unique: true,
|
|
81
|
+
name: "work_center_code_company_site_idx",
|
|
82
|
+
})
|
|
83
|
+
.permission(unsafeAllowAllTypePermission)
|
|
84
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export const workCenter = createWorkCenterType({ companyType: companyStub, siteType: siteStub });
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBType,
|
|
4
|
+
unsafeAllowAllGqlPermission,
|
|
5
|
+
unsafeAllowAllTypePermission,
|
|
6
|
+
} from "@tailor-platform/sdk";
|
|
7
|
+
import { productionOrder } from "./productionOrder";
|
|
8
|
+
import { workCenter } from "./workCenter";
|
|
9
|
+
|
|
10
|
+
export const BASE_WORK_ORDER_STATUSES = [
|
|
11
|
+
"PENDING",
|
|
12
|
+
"IN_PROGRESS",
|
|
13
|
+
"PAUSED",
|
|
14
|
+
"COMPLETE",
|
|
15
|
+
"CANCELLED",
|
|
16
|
+
] as const;
|
|
17
|
+
|
|
18
|
+
export interface CreateWorkOrderTypeParams {
|
|
19
|
+
productionOrderType: TailorAnyDBType;
|
|
20
|
+
workCenterType: TailorAnyDBType;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function createWorkOrderType(params: CreateWorkOrderTypeParams) {
|
|
24
|
+
return db
|
|
25
|
+
.type("WorkOrder", {
|
|
26
|
+
productionOrderId: db
|
|
27
|
+
.uuid()
|
|
28
|
+
.relation({
|
|
29
|
+
type: "n-1",
|
|
30
|
+
toward: { type: params.productionOrderType },
|
|
31
|
+
backward: "workOrders",
|
|
32
|
+
})
|
|
33
|
+
.description("Foreign key to ProductionOrder"),
|
|
34
|
+
routingOperationSequenceNumber: db
|
|
35
|
+
.int()
|
|
36
|
+
.description("Sequence number of the routing operation"),
|
|
37
|
+
workCenterId: db
|
|
38
|
+
.uuid()
|
|
39
|
+
.relation({
|
|
40
|
+
type: "n-1",
|
|
41
|
+
toward: { type: params.workCenterType },
|
|
42
|
+
backward: "workOrders",
|
|
43
|
+
})
|
|
44
|
+
.description("Foreign key to WorkCenter"),
|
|
45
|
+
plannedQuantity: db.float().description("Planned quantity to produce, must be >= 0"),
|
|
46
|
+
completedQuantity: db.float().description("Completed quantity, must be >= 0"),
|
|
47
|
+
scrapQuantity: db.float().description("Scrap quantity, must be >= 0"),
|
|
48
|
+
actualSetupTime: db.float().description("Actual setup time in minutes, must be >= 0"),
|
|
49
|
+
actualRunTime: db.float().description("Actual run time in minutes, must be >= 0"),
|
|
50
|
+
actualStartDate: db.datetime({ optional: true }).description("Actual start date and time"),
|
|
51
|
+
pauseReason: db.string({ optional: true }).description("Reason for pausing the work order"),
|
|
52
|
+
executionNotes: db.string({ optional: true }).description("Free-form notes about execution"),
|
|
53
|
+
status: db
|
|
54
|
+
.enum([...BASE_WORK_ORDER_STATUSES] as [string, ...string[]])
|
|
55
|
+
.description("Lifecycle status: PENDING, IN_PROGRESS, PAUSED, COMPLETE, CANCELLED"),
|
|
56
|
+
...db.fields.timestamps(),
|
|
57
|
+
})
|
|
58
|
+
.permission(unsafeAllowAllTypePermission)
|
|
59
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const workOrder = createWorkOrderType({
|
|
63
|
+
productionOrderType: productionOrder,
|
|
64
|
+
workCenterType: workCenter,
|
|
65
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBType,
|
|
4
|
+
unsafeAllowAllGqlPermission,
|
|
5
|
+
unsafeAllowAllTypePermission,
|
|
6
|
+
} from "@tailor-platform/sdk";
|
|
7
|
+
import { workOrder } from "./workOrder";
|
|
8
|
+
|
|
9
|
+
export const EXECUTION_EVENT_TYPES = [
|
|
10
|
+
"STARTED",
|
|
11
|
+
"PAUSED",
|
|
12
|
+
"RESUMED",
|
|
13
|
+
"PROGRESS_REPORTED",
|
|
14
|
+
"COMPLETED",
|
|
15
|
+
] as const;
|
|
16
|
+
|
|
17
|
+
export interface CreateWorkOrderExecutionEventTypeParams {
|
|
18
|
+
workOrderType: TailorAnyDBType;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function createWorkOrderExecutionEventType(params: CreateWorkOrderExecutionEventTypeParams) {
|
|
22
|
+
return db
|
|
23
|
+
.type("WorkOrderExecutionEvent", {
|
|
24
|
+
workOrderId: db
|
|
25
|
+
.uuid()
|
|
26
|
+
.relation({
|
|
27
|
+
type: "n-1",
|
|
28
|
+
toward: { type: params.workOrderType },
|
|
29
|
+
backward: "executionEvents",
|
|
30
|
+
})
|
|
31
|
+
.description("Foreign key to WorkOrder"),
|
|
32
|
+
eventType: db
|
|
33
|
+
.enum([...EXECUTION_EVENT_TYPES] as [string, ...string[]])
|
|
34
|
+
.description("Event type: STARTED, PAUSED, RESUMED, PROGRESS_REPORTED, COMPLETED"),
|
|
35
|
+
timestamp: db.datetime().description("When the event occurred"),
|
|
36
|
+
quantity: db
|
|
37
|
+
.float({ optional: true })
|
|
38
|
+
.description("Quantity associated with the event, must be >= 0"),
|
|
39
|
+
timeValue: db
|
|
40
|
+
.float({ optional: true })
|
|
41
|
+
.description("Time value associated with the event, must be >= 0"),
|
|
42
|
+
scrapValue: db
|
|
43
|
+
.float({ optional: true })
|
|
44
|
+
.description("Scrap value associated with the event, must be >= 0"),
|
|
45
|
+
notes: db.string({ optional: true }).description("Optional notes about the event"),
|
|
46
|
+
...db.fields.timestamps(),
|
|
47
|
+
})
|
|
48
|
+
.permission(unsafeAllowAllTypePermission)
|
|
49
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const workOrderExecutionEvent = createWorkOrderExecutionEventType({
|
|
53
|
+
workOrderType: workOrder,
|
|
54
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# ActivateBillOfMaterial
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ActivateBillOfMaterial validates a draft BOM version and makes it selectable for production-order release. Activation is where circular-reference checks, effectivity conflicts, and component readiness are enforced.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target BOM must exist and be in `DRAFT`.
|
|
10
|
+
- The BOM must contain at least one valid component line.
|
|
11
|
+
- All referenced items must be active in the required scope.
|
|
12
|
+
- Manufactured-child references must not create a direct or indirect circular structure.
|
|
13
|
+
- Overlapping active effectivity windows for the same parent item and scope are rejected unless selection remains unambiguous.
|
|
14
|
+
- Activation preserves any already released production-order snapshots from other versions.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive activate request] --> B{BOM exists and is DRAFT?}
|
|
21
|
+
B -->|No| C[Return BOM_NOT_ACTIVATABLE]
|
|
22
|
+
B -->|Yes| D[Validate component readiness]
|
|
23
|
+
D --> E[Check circular references]
|
|
24
|
+
E --> F[Check effectivity conflicts]
|
|
25
|
+
F --> G[Set status to ACTIVE]
|
|
26
|
+
G --> H[Return active BOM]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [detectBillOfMaterialCircularReference](../queries/DetectBillOfMaterialCircularReference.md) - Prevent cyclical manufactured-item structures.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **BOM_NOT_FOUND**: Target BOM does not exist.
|
|
36
|
+
- **BOM_NOT_ACTIVATABLE**: The BOM is not in `DRAFT`.
|
|
37
|
+
- **COMPONENT_LINE_REQUIRED**: The BOM has no component lines.
|
|
38
|
+
- **COMPONENT_ITEM_INACTIVE**: A referenced component is inactive.
|
|
39
|
+
- **CIRCULAR_BOM_REFERENCE**: A direct or indirect manufactured-item loop was detected.
|
|
40
|
+
- **EFFECTIVITY_CONFLICT**: Activation would create conflicting active effectivity windows.
|
|
41
|
+
|
|
42
|
+
## Test Cases
|
|
43
|
+
|
|
44
|
+
- activates a valid draft BOM
|
|
45
|
+
- returns error when the BOM does not exist
|
|
46
|
+
- returns error when the BOM is not in `DRAFT`
|
|
47
|
+
- returns error when the BOM has no component lines
|
|
48
|
+
- returns error when a component item is inactive
|
|
49
|
+
- returns error when a circular manufactured-item structure is detected
|
|
50
|
+
- returns error when activation would create an effectivity conflict
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# ActivateRouting
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ActivateRouting validates a draft routing and makes it eligible for production-order release. Activation enforces operation completeness, sequence integrity, and active work-center readiness.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target routing must exist and be in `DRAFT`.
|
|
10
|
+
- The routing must contain at least one operation.
|
|
11
|
+
- Operation sequence numbers must be unique and ordered.
|
|
12
|
+
- Every referenced work center must be active and within the same company.
|
|
13
|
+
- Activation preserves existing operation snapshots already frozen on released orders.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive activate request] --> B{Routing exists and is DRAFT?}
|
|
20
|
+
B -->|No| C[Return ROUTING_NOT_ACTIVATABLE]
|
|
21
|
+
B -->|Yes| D[Validate operations]
|
|
22
|
+
D --> E[Validate work-center readiness]
|
|
23
|
+
E --> F[Set status to ACTIVE]
|
|
24
|
+
F --> G[Return active routing]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## External Dependencies
|
|
28
|
+
|
|
29
|
+
- [WorkCenter](../models/WorkCenter.md) - Referenced work centers must already be active.
|
|
30
|
+
|
|
31
|
+
## Error Scenarios
|
|
32
|
+
|
|
33
|
+
- **ROUTING_NOT_FOUND**: Target routing does not exist.
|
|
34
|
+
- **ROUTING_NOT_ACTIVATABLE**: The routing is not in `DRAFT`.
|
|
35
|
+
- **OPERATION_REQUIRED**: The routing has no operations.
|
|
36
|
+
- **DUPLICATE_OPERATION_SEQUENCE**: Two operations use the same sequence number.
|
|
37
|
+
- **WORK_CENTER_NOT_ACTIVE**: A referenced work center is inactive.
|
|
38
|
+
- **CROSS_COMPANY_WORK_CENTER**: A work center belongs to a different company scope.
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- activates a valid draft routing
|
|
43
|
+
- returns error when the routing does not exist
|
|
44
|
+
- returns error when the routing is not in DRAFT
|
|
45
|
+
- returns error when the routing has no operations
|
|
46
|
+
- returns error when operation sequence numbers are duplicated
|
|
47
|
+
- returns error when a referenced work center is inactive
|
|
48
|
+
- returns error when a referenced work center is outside the routing company
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# ActivateWorkCenter
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ActivateWorkCenter validates that a draft or inactive work center has the execution data required by planning and costing, then marks it available for routing and work-order use.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target work center must exist.
|
|
10
|
+
- Only `DRAFT` or `INACTIVE` work centers can be activated.
|
|
11
|
+
- Required calendar or availability context must be present.
|
|
12
|
+
- Capacity must be positive.
|
|
13
|
+
- Any configured rates and overhead settings must be internally valid.
|
|
14
|
+
- Activation makes the work center eligible for active routing operations.
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive activate request] --> B{Work center exists?}
|
|
21
|
+
B -->|No| C[Return WORK_CENTER_NOT_FOUND]
|
|
22
|
+
B -->|Yes| D{Status activatable?}
|
|
23
|
+
D -->|No| E[Return WORK_CENTER_NOT_ACTIVATABLE]
|
|
24
|
+
D -->|Yes| F[Validate calendar, capacity, and rates]
|
|
25
|
+
F --> G[Set status to ACTIVE]
|
|
26
|
+
G --> H[Return active work center]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [Site](../../../organization/docs/models/Site.md) - Site-scoped activation requires a valid site context.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **WORK_CENTER_NOT_FOUND**: Target work center does not exist.
|
|
36
|
+
- **WORK_CENTER_NOT_ACTIVATABLE**: The current status does not allow activation.
|
|
37
|
+
- **MISSING_CALENDAR_CONTEXT**: Required calendar or availability data is missing.
|
|
38
|
+
- **INVALID_CAPACITY**: Capacity is zero or negative.
|
|
39
|
+
- **INVALID_RATE**: Labor or machine rate is negative.
|
|
40
|
+
- **OVERHEAD_CURRENCY_REQUIRED**: Fixed-amount overhead requires a currency.
|
|
41
|
+
|
|
42
|
+
## Test Cases
|
|
43
|
+
|
|
44
|
+
- activates a valid draft work center
|
|
45
|
+
- reactivates a valid inactive work center
|
|
46
|
+
- returns error when the work center does not exist
|
|
47
|
+
- returns error when the status does not allow activation
|
|
48
|
+
- returns error when required calendar context is missing
|
|
49
|
+
- returns error when capacity is not positive
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# CancelProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CancelProductionOrder abandons a draft or not-yet-started released order. It preserves audit history while blocking further execution updates and cascading cancellation to pending work orders.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target order must exist.
|
|
10
|
+
- Only `DRAFT` or `RELEASED` orders may be cancelled.
|
|
11
|
+
- Released orders cannot be cancelled once meaningful execution or inventory evidence exists.
|
|
12
|
+
- Cancelling a released order cascades cancellation to pending work orders.
|
|
13
|
+
- Cancelled orders reject all further execution, completion, and closeout commands.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive cancel request] --> B{Order exists?}
|
|
20
|
+
B -->|No| C[Return PRODUCTION_ORDER_NOT_FOUND]
|
|
21
|
+
B -->|Yes| D{Status cancellable?}
|
|
22
|
+
D -->|No| E[Return PRODUCTION_ORDER_NOT_CANCELLABLE]
|
|
23
|
+
D -->|Yes| F{Execution or inventory evidence exists?}
|
|
24
|
+
F -->|Yes| G[Return EXECUTION_ALREADY_STARTED]
|
|
25
|
+
F -->|No| H[Cancel order and pending work orders]
|
|
26
|
+
H --> I[Return cancelled order]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [WorkOrder](../models/WorkOrder.md) - Pending child work orders are cancelled with the parent order.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Target order does not exist.
|
|
36
|
+
- **PRODUCTION_ORDER_NOT_CANCELLABLE**: The current status does not allow cancellation.
|
|
37
|
+
- **EXECUTION_ALREADY_STARTED**: Work-order execution evidence already exists.
|
|
38
|
+
- **INVENTORY_HANDOFF_EXISTS**: Inventory issue or receipt evidence already exists.
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- cancels a draft production order
|
|
43
|
+
- cancels a released order before execution starts
|
|
44
|
+
- returns error when the order does not exist
|
|
45
|
+
- returns error when the status does not allow cancellation
|
|
46
|
+
- returns error when execution evidence already exists
|
|
47
|
+
- returns error when inventory handoff evidence already exists
|
|
48
|
+
- cascades cancellation to pending work orders
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# CloseProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CloseProductionOrder performs the final administrative close after technical completion and downstream cost settlement are done. The command is the last lifecycle step for the production order.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target order must exist and be in `TECHNICALLY_COMPLETE`.
|
|
10
|
+
- All open work orders and execution exceptions must already be resolved.
|
|
11
|
+
- The linked manufacturing cost summary must be in `SETTLED`.
|
|
12
|
+
- Closed orders reject further execution, reopen, or rescheduling commands.
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive close request] --> B{Order exists and is TECHNICALLY_COMPLETE?}
|
|
19
|
+
B -->|No| C[Return PRODUCTION_ORDER_NOT_CLOSABLE]
|
|
20
|
+
B -->|Yes| D{Open work or exceptions remain?}
|
|
21
|
+
D -->|Yes| E[Return OPEN_WORK_REMAINS]
|
|
22
|
+
D -->|No| F{Cost summary settled?}
|
|
23
|
+
F -->|No| G[Return COST_SUMMARY_NOT_SETTLED]
|
|
24
|
+
F -->|Yes| H[Set order status to CLOSED]
|
|
25
|
+
H --> I[Return closed order]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- [ManufacturingCostSummary](../models/ManufacturingCostSummary.md) - Administrative close depends on settled variance review.
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Target order does not exist.
|
|
35
|
+
- **PRODUCTION_ORDER_NOT_CLOSABLE**: The order is not in `TECHNICALLY_COMPLETE`.
|
|
36
|
+
- **OPEN_WORK_REMAINS**: Open work orders or execution exceptions still exist.
|
|
37
|
+
- **COST_SUMMARY_NOT_SETTLED**: The linked cost summary is not in `SETTLED`.
|
|
38
|
+
|
|
39
|
+
## Test Cases
|
|
40
|
+
|
|
41
|
+
- closes a technically complete order with a settled cost summary
|
|
42
|
+
- returns error when the order does not exist
|
|
43
|
+
- returns error when the order is not technically complete
|
|
44
|
+
- returns error when open work or execution exceptions remain
|
|
45
|
+
- returns error when the linked cost summary is not settled
|
|
46
|
+
- blocks further execution commands after close
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# CompleteProductionOrder
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
CompleteProductionOrder marks physical production complete once required work orders are finished and final receipt obligations are satisfied. The command freezes production execution while still allowing later technical completion and review.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target order must exist and be in `IN_PROGRESS`.
|
|
10
|
+
- All mandatory work orders must be completed.
|
|
11
|
+
- Final output reporting must exist for the required good quantity.
|
|
12
|
+
- Finished-goods or intermediate receipt handoff required by policy must already be submitted.
|
|
13
|
+
- Completing the order blocks additional operational production work except through controlled reopen.
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive complete request] --> B{Order exists and is IN_PROGRESS?}
|
|
20
|
+
B -->|No| C[Return PRODUCTION_ORDER_NOT_COMPLETABLE]
|
|
21
|
+
B -->|Yes| D{All required work orders complete?}
|
|
22
|
+
D -->|No| E[Return OPEN_WORK_ORDER_REMAINS]
|
|
23
|
+
D -->|Yes| F{Final reporting and receipt handoff complete?}
|
|
24
|
+
F -->|No| G[Return FINAL_RECEIPT_REQUIRED]
|
|
25
|
+
F -->|Yes| H[Set status to COMPLETED]
|
|
26
|
+
H --> I[Return completed order]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- [WorkOrder](../models/WorkOrder.md) - Completion requires the operation-level plan to be done.
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **PRODUCTION_ORDER_NOT_FOUND**: Target order does not exist.
|
|
36
|
+
- **PRODUCTION_ORDER_NOT_COMPLETABLE**: The order is not in `IN_PROGRESS`.
|
|
37
|
+
- **OPEN_WORK_ORDER_REMAINS**: One or more required work orders are still open.
|
|
38
|
+
- **FINAL_OUTPUT_REQUIRED**: Final output reporting is incomplete.
|
|
39
|
+
- **FINAL_RECEIPT_REQUIRED**: Required receipt handoff evidence is missing.
|
|
40
|
+
|
|
41
|
+
## Test Cases
|
|
42
|
+
|
|
43
|
+
- completes an in-progress order after all required work orders finish
|
|
44
|
+
- returns error when the order does not exist
|
|
45
|
+
- returns error when the order is not in `IN_PROGRESS`
|
|
46
|
+
- returns error when required work orders remain open
|
|
47
|
+
- returns error when final output reporting is incomplete
|
|
48
|
+
- returns error when required receipt handoff evidence is missing
|