@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,86 @@
|
|
|
1
|
+
# GenerateFinancialStatement
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
generateFinancialStatement creates a financial statement in DRAFT status from trial balance data. The statement can be a Balance Sheet, Profit & Loss, or Cash Flow Statement, scoped to a single company and structured according to the account group hierarchy from coa-management. Statement generation maps GL accounts to the appropriate report sections based on account type and aggregates balances per account group. A DRAFT statement can be regenerated with updated trial balance data before finalization.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Requires a valid `companyId` referencing an ACTIVE company
|
|
10
|
+
- Requires a valid `chartOfAccountsId` referencing an ACTIVE CoA
|
|
11
|
+
- Statement type must be one of: BALANCE_SHEET, PROFIT_AND_LOSS, or CASH_FLOW
|
|
12
|
+
- Balance Sheet requires a single reporting date (as-of date)
|
|
13
|
+
- Profit & Loss requires a date range (start date and end date)
|
|
14
|
+
- Cash Flow Statement requires a date range and a method (DIRECT or INDIRECT)
|
|
15
|
+
- The reporting date or date range must fall within a closed or active accounting period
|
|
16
|
+
- Balance Sheet includes only ASSET, LIABILITY, and EQUITY accounts
|
|
17
|
+
- Profit & Loss includes only REVENUE and EXPENSE accounts
|
|
18
|
+
- On a correctly generated Balance Sheet, total assets equal total liabilities plus equity
|
|
19
|
+
- Statement line items are structured by the account group hierarchy from coa-management
|
|
20
|
+
- Accounts not assigned to any group are reported in an "Unclassified" section with warnings
|
|
21
|
+
- Comparative period data, when requested, is aligned to same sections as current period
|
|
22
|
+
- If comparative period trial balance data is unavailable, generation fails with an error
|
|
23
|
+
- Statement is created in DRAFT status
|
|
24
|
+
- A DRAFT statement can be regenerated (replaced) with updated trial balance data
|
|
25
|
+
- Generating for a period with no posted journal entries fails with a validation error
|
|
26
|
+
- Statement output includes subtotals at each level of the account group hierarchy
|
|
27
|
+
- All monetary amounts are denominated in the company's base currency
|
|
28
|
+
- Each statement records a reference to the trial balance snapshot it was generated from
|
|
29
|
+
- Emits an audit event recording the acting user, timestamp, statement type, and parameters
|
|
30
|
+
|
|
31
|
+
## Process Flow
|
|
32
|
+
|
|
33
|
+
```mermaid
|
|
34
|
+
flowchart TD
|
|
35
|
+
A[Receive generate financial statement request] --> B{Company ACTIVE with ACTIVE CoA?}
|
|
36
|
+
B -->|No| C[Return error: invalid company or CoA]
|
|
37
|
+
B -->|Yes| D{Valid statement type?}
|
|
38
|
+
D -->|No| E[Return error: invalid statement type]
|
|
39
|
+
D -->|Yes| F{Valid reporting parameters?}
|
|
40
|
+
F -->|No| G[Return error: invalid parameters]
|
|
41
|
+
F -->|Yes| H{Trial balance data available?}
|
|
42
|
+
H -->|No| I[Return error: no trial balance data]
|
|
43
|
+
H -->|Yes| J[Retrieve trial balance for period]
|
|
44
|
+
J --> K[Map accounts to statement sections by type]
|
|
45
|
+
K --> L[Aggregate balances per account group]
|
|
46
|
+
L --> M{Comparative period requested?}
|
|
47
|
+
M -->|Yes| N[Retrieve and align prior period data]
|
|
48
|
+
M -->|No| O[Assemble statement line items]
|
|
49
|
+
N --> O
|
|
50
|
+
O --> P[Create FinancialStatement in DRAFT]
|
|
51
|
+
P --> Q[Emit audit event]
|
|
52
|
+
Q --> R[Return DRAFT financial statement]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## External Dependencies
|
|
56
|
+
|
|
57
|
+
- [coa-management::getChartOfAccounts](../../../coa-management/docs/queries/GetChartOfAccounts.md) - Retrieves the active CoA and account group hierarchy for statement structure
|
|
58
|
+
- [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) - Retrieves GL accounts for type-based classification
|
|
59
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) - Validates that the referenced company is ACTIVE and retrieves base currency
|
|
60
|
+
|
|
61
|
+
## Error Scenarios
|
|
62
|
+
|
|
63
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not ACTIVE
|
|
64
|
+
- **CHART_OF_ACCOUNTS_NOT_FOUND**: Referenced CoA does not exist or is not ACTIVE
|
|
65
|
+
- **INVALID_STATEMENT_TYPE**: Statement type is not BALANCE_SHEET, PROFIT_AND_LOSS, or CASH_FLOW
|
|
66
|
+
- **INVALID_REPORTING_PARAMETERS**: Missing or invalid reporting date, date range, or cash flow method
|
|
67
|
+
- **NO_TRIAL_BALANCE_DATA**: No trial balance data exists for the requested period
|
|
68
|
+
- **COMPARATIVE_DATA_UNAVAILABLE**: Comparative period trial balance data is not available
|
|
69
|
+
|
|
70
|
+
## Test Cases
|
|
71
|
+
|
|
72
|
+
- returns error when company does not exist
|
|
73
|
+
- returns error when company is not ACTIVE
|
|
74
|
+
- returns error when CoA does not exist
|
|
75
|
+
- returns error when CoA is not ACTIVE
|
|
76
|
+
- returns error for invalid statement type
|
|
77
|
+
- returns error when BALANCE_SHEET is missing reportingDate
|
|
78
|
+
- returns error when PROFIT_AND_LOSS is missing date range
|
|
79
|
+
- returns error when CASH_FLOW is missing cashFlowMethod
|
|
80
|
+
- returns error when trial balance does not exist
|
|
81
|
+
- returns error when comparative trial balance does not exist
|
|
82
|
+
- returns error when trial balance has no lines
|
|
83
|
+
- successfully generates a BALANCE_SHEET financial statement
|
|
84
|
+
- successfully generates a PROFIT_AND_LOSS financial statement
|
|
85
|
+
- generates subtotal lines for each section
|
|
86
|
+
- emits audit event recording the generation
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# GeneratePreliminaryStatements
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
generatePreliminaryStatements generates preliminary financial statements (Balance Sheet, Profit & Loss) for the closing period and transitions the PeriodClose from TRIAL_BALANCE_VERIFIED to UNDER_REVIEW status. Preliminary statements can only be generated after the trial balance has been verified, ensuring that all figures are based on a balanced ledger. These statements are generated in DRAFT status for management review and approval.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- PeriodClose record must exist and be in TRIAL_BALANCE_VERIFIED status
|
|
10
|
+
- Only TRIAL_BALANCE_VERIFIED records can transition to UNDER_REVIEW
|
|
11
|
+
- Preliminary financial statements can only be generated after the trial balance is verified
|
|
12
|
+
- Statements are generated in DRAFT status for review purposes
|
|
13
|
+
- The trial balance must still be balanced at time of generation
|
|
14
|
+
- Updates completionPercentage to reflect progress
|
|
15
|
+
- Records the userId of the operator who generated the preliminary statements
|
|
16
|
+
- Emits an audit event recording the acting user, timestamp, generated statement references, and status transition
|
|
17
|
+
|
|
18
|
+
## Process Flow
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart TD
|
|
22
|
+
A[Receive generate preliminary statements request] --> B{PeriodClose record exists?}
|
|
23
|
+
B -->|No| C[Return error: period close not found]
|
|
24
|
+
B -->|Yes| D{PeriodClose in TRIAL_BALANCE_VERIFIED status?}
|
|
25
|
+
D -->|No| E[Return error: invalid status transition]
|
|
26
|
+
D -->|Yes| F[Retrieve verified trial balance for the period]
|
|
27
|
+
F --> G[Generate preliminary Balance Sheet in DRAFT]
|
|
28
|
+
G --> H[Generate preliminary Profit & Loss in DRAFT]
|
|
29
|
+
H --> I[Transition PeriodClose to UNDER_REVIEW]
|
|
30
|
+
I --> J[Update completionPercentage]
|
|
31
|
+
J --> K[Emit audit event]
|
|
32
|
+
K --> L[Return updated PeriodClose with statement references]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## External Dependencies
|
|
36
|
+
|
|
37
|
+
- [coa-management::getChartOfAccounts](../../../coa-management/docs/queries/GetChartOfAccounts.md) - Retrieves the active CoA and account group hierarchy for statement structure
|
|
38
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) - Retrieves company details and base currency for statement denomination
|
|
39
|
+
|
|
40
|
+
## Error Scenarios
|
|
41
|
+
|
|
42
|
+
- **PERIOD_CLOSE_NOT_FOUND**: No PeriodClose record matches the given id
|
|
43
|
+
- **INVALID_STATUS_TRANSITION**: PeriodClose is not in TRIAL_BALANCE_VERIFIED status; only TRIAL_BALANCE_VERIFIED can transition to UNDER_REVIEW
|
|
44
|
+
- **TRIAL_BALANCE_NOT_FOUND**: The verified trial balance for the period no longer exists or is invalid
|
|
45
|
+
|
|
46
|
+
## Test Cases
|
|
47
|
+
|
|
48
|
+
- returns error when PeriodClose record does not exist
|
|
49
|
+
- returns error when PeriodClose is in SOFT_LOCKED status
|
|
50
|
+
- returns error when PeriodClose is in IN_PROGRESS status
|
|
51
|
+
- returns error when trial balance is not found
|
|
52
|
+
- generates both BS and P&L and transitions to UNDER_REVIEW with completionPercentage=75
|
|
53
|
+
- emits audit event recording status transition and statement ids
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# GenerateTrialBalance
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
generateTrialBalance creates a point-in-time snapshot report summarizing the balances of all GL accounts for a specific accounting period within a company. The report includes opening balance, period debits, period credits, and closing balance for each account, organized by the account group hierarchy from coa-management. The trial balance supports two variants: PRE_CLOSE (before closing entries) and POST_CLOSE (after closing entries have zeroed temporary accounts). It serves as the fundamental verification mechanism for double-entry bookkeeping and is a prerequisite for financial statement generation.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Requires a valid `companyId` referencing a company with an ACTIVE Chart of Accounts
|
|
10
|
+
- Requires a valid `accountingPeriodId` referencing an existing accounting period
|
|
11
|
+
- Requires a variant: PRE_CLOSE or POST_CLOSE
|
|
12
|
+
- Must include all GL accounts from the active CoA, including those with zero balances
|
|
13
|
+
- Opening balance per account equals the closing balance from the immediately preceding period
|
|
14
|
+
- Opening balance for the first period of a new CoA defaults to zero for all accounts
|
|
15
|
+
- Period debits per account equal the sum of all debit amounts from posted journal lines for the period
|
|
16
|
+
- Period credits per account equal the sum of all credit amounts from posted journal lines for the period
|
|
17
|
+
- Closing balance per account equals opening balance plus period debits minus period credits
|
|
18
|
+
- Total debits across all accounts must equal total credits (fundamental equilibrium check)
|
|
19
|
+
- If totals do not balance, an imbalance error is produced with the discrepancy amount
|
|
20
|
+
- Pre-close variant excludes closing entries; post-close variant includes closing entries
|
|
21
|
+
- Post-close variant shows zero balances for all temporary accounts (revenue, expense)
|
|
22
|
+
- Only posted journal entries are included; draft or voided entries are excluded
|
|
23
|
+
- Accounts are ordered by account code in ascending order within each group
|
|
24
|
+
- Balances are organized by account group hierarchy with subtotals at each level
|
|
25
|
+
- Snapshot includes a generation timestamp
|
|
26
|
+
- Regenerating for the same period and variant produces an updated snapshot
|
|
27
|
+
- Generating for a period with no posted entries produces a valid report with zero debits/credits and carried-forward opening balances
|
|
28
|
+
- Emits an audit event recording the acting user, company, period, variant, and timestamp
|
|
29
|
+
|
|
30
|
+
## Process Flow
|
|
31
|
+
|
|
32
|
+
```mermaid
|
|
33
|
+
flowchart TD
|
|
34
|
+
A[Receive generate trial balance request] --> B{Company has ACTIVE CoA?}
|
|
35
|
+
B -->|No| C[Return error: no active CoA]
|
|
36
|
+
B -->|Yes| D{Accounting period exists?}
|
|
37
|
+
D -->|No| E[Return error: period not found]
|
|
38
|
+
D -->|Yes| F[Retrieve all GL accounts from active CoA]
|
|
39
|
+
F --> G[Calculate opening balances from prior period]
|
|
40
|
+
G --> H[Aggregate period debits and credits from posted journal lines]
|
|
41
|
+
H --> I[Compute closing balance per account]
|
|
42
|
+
I --> J{Total debits equal total credits?}
|
|
43
|
+
J -->|No| K[Return imbalance error with discrepancy amount]
|
|
44
|
+
J -->|Yes| L[Group balances by account group hierarchy]
|
|
45
|
+
L --> M[Generate snapshot with timestamp]
|
|
46
|
+
M --> N[Emit audit event]
|
|
47
|
+
N --> O[Return trial balance snapshot]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## External Dependencies
|
|
51
|
+
|
|
52
|
+
- [coa-management::getChartOfAccounts](../../../coa-management/docs/queries/GetChartOfAccounts.md) - Retrieves the active CoA and account group hierarchy
|
|
53
|
+
- [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) - Retrieves GL accounts for balance aggregation
|
|
54
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) - Validates the referenced company
|
|
55
|
+
|
|
56
|
+
## Error Scenarios
|
|
57
|
+
|
|
58
|
+
- **NO_ACTIVE_CHART_OF_ACCOUNTS**: Company does not have an ACTIVE Chart of Accounts
|
|
59
|
+
- **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
|
|
60
|
+
- **TRIAL_BALANCE_IMBALANCED**: Total debits do not equal total credits; includes discrepancy amount
|
|
61
|
+
- **INVALID_VARIANT**: Variant is not PRE_CLOSE or POST_CLOSE
|
|
62
|
+
|
|
63
|
+
## Test Cases
|
|
64
|
+
|
|
65
|
+
- returns error when company has no active CoA
|
|
66
|
+
- returns error when accounting period not found
|
|
67
|
+
- returns error when variant is invalid
|
|
68
|
+
- generates trial balance with correct balances for PRE_CLOSE
|
|
69
|
+
- includes zero-balance accounts from active CoA
|
|
70
|
+
- returns error when trial balance is imbalanced
|
|
71
|
+
- emits audit event with correct actor and trial balance details
|
|
72
|
+
- uses accountGroupId from Account record when available
|
|
73
|
+
- zeros closing balances for revenue and expense accounts in POST_CLOSE variant
|
|
74
|
+
- deletes existing TrialBalance before inserting when regenerating for same period and variant
|
|
75
|
+
- sorts trial balance lines by account code ascending
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# InitiatePeriodClose
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
initiatePeriodClose creates a new PeriodClose record in NOT_STARTED status for a given accounting period. This establishes the close checklist that will track the period through the structured close workflow. Only periods in OPEN status can have a close initiated, and each period can have at most one active PeriodClose record.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Requires a valid `accountingPeriodId` referencing an existing accounting period
|
|
10
|
+
- The accounting period must be in OPEN status
|
|
11
|
+
- A PeriodClose cannot be initiated for a period that is already CLOSED or PERMANENTLY_CLOSED
|
|
12
|
+
- A PeriodClose cannot be initiated if the period already has an active close record in progress
|
|
13
|
+
- Concurrent close attempts for the same period are rejected with a conflict error
|
|
14
|
+
- The PeriodClose record is created in NOT_STARTED status
|
|
15
|
+
- Records the userId of the operator who initiated the close
|
|
16
|
+
- Sets completionPercentage to 0
|
|
17
|
+
- PeriodClose is scoped to a single AccountingPeriod; each period has at most one active PeriodClose record
|
|
18
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, and period reference
|
|
19
|
+
|
|
20
|
+
## Process Flow
|
|
21
|
+
|
|
22
|
+
```mermaid
|
|
23
|
+
flowchart TD
|
|
24
|
+
A[Receive initiate period close request] --> B{Accounting period exists?}
|
|
25
|
+
B -->|No| C[Return error: period not found]
|
|
26
|
+
B -->|Yes| D{Period in OPEN status?}
|
|
27
|
+
D -->|No| E[Return error: invalid period status]
|
|
28
|
+
D -->|Yes| F{Active PeriodClose already exists?}
|
|
29
|
+
F -->|Yes| G[Return error: close already in progress]
|
|
30
|
+
F -->|No| H[Create PeriodClose in NOT_STARTED status]
|
|
31
|
+
H --> I[Record initiating user and set completion to 0%]
|
|
32
|
+
I --> J[Emit audit event]
|
|
33
|
+
J --> K[Return PeriodClose record]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## External Dependencies
|
|
37
|
+
|
|
38
|
+
- None (same-module read for accounting period and period close lookup)
|
|
39
|
+
|
|
40
|
+
## Error Scenarios
|
|
41
|
+
|
|
42
|
+
- **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
|
|
43
|
+
- **INVALID_PERIOD_STATUS**: Accounting period is not in OPEN status
|
|
44
|
+
- **CLOSE_ALREADY_IN_PROGRESS**: An active PeriodClose record already exists for this period
|
|
45
|
+
- **CONCURRENT_CLOSE_CONFLICT**: A concurrent close attempt for the same period was detected
|
|
46
|
+
|
|
47
|
+
## Test Cases
|
|
48
|
+
|
|
49
|
+
- returns error when accounting period does not exist
|
|
50
|
+
- returns error when accounting period is in NEVER_OPENED status
|
|
51
|
+
- returns error when accounting period is in CLOSED status
|
|
52
|
+
- returns error when accounting period is in PERMANENTLY_CLOSED status
|
|
53
|
+
- returns error when period already has an active close in progress
|
|
54
|
+
- returns error on concurrent close attempt for the same period
|
|
55
|
+
- creates PeriodClose in NOT_STARTED status for an OPEN period
|
|
56
|
+
- records the initiating user's userId
|
|
57
|
+
- sets completionPercentage to 0
|
|
58
|
+
- emits audit event recording acting user, timestamp, and period reference
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# OpenForAdvanceEntry
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
openForAdvanceEntry transitions an accounting period from NEVER_OPENED to FUTURE_ENTERABLE status. This allows advance postings such as recurring journals, accruals, and depreciation entries to be recorded in the period before it is fully opened. This is commonly used when automated entries need to be posted to upcoming periods in advance of the period start date.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Period must exist and be in NEVER_OPENED status
|
|
10
|
+
- Only NEVER_OPENED periods can transition to FUTURE_ENTERABLE
|
|
11
|
+
- After transition, the period accepts advance journal postings (e.g., recurring journals, accruals)
|
|
12
|
+
- Emits an audit event recording the status transition, acting user, and timestamp
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive openForAdvanceEntry request] --> B{Period exists?}
|
|
19
|
+
B -->|No| C[Return error: period not found]
|
|
20
|
+
B -->|Yes| D{Period status is NEVER_OPENED?}
|
|
21
|
+
D -->|No| E[Return error: invalid status transition]
|
|
22
|
+
D -->|Yes| F[Transition period to FUTURE_ENTERABLE]
|
|
23
|
+
F --> G[Emit audit event]
|
|
24
|
+
G --> H[Return updated period]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## External Dependencies
|
|
28
|
+
|
|
29
|
+
- None
|
|
30
|
+
|
|
31
|
+
## Error Scenarios
|
|
32
|
+
|
|
33
|
+
- **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
|
|
34
|
+
- **INVALID_STATUS_TRANSITION**: Period is not in NEVER_OPENED status; only NEVER_OPENED can transition to FUTURE_ENTERABLE
|
|
35
|
+
|
|
36
|
+
## Test Cases
|
|
37
|
+
|
|
38
|
+
- returns error when accounting period does not exist
|
|
39
|
+
- returns error when period is in FUTURE_ENTERABLE status
|
|
40
|
+
- returns error when period is in OPEN status
|
|
41
|
+
- returns error when period is in CLOSED status
|
|
42
|
+
- returns error when period is in PERMANENTLY_CLOSED status
|
|
43
|
+
- transitions NEVER_OPENED period to FUTURE_ENTERABLE
|
|
44
|
+
- emits audit event recording status transition from NEVER_OPENED to FUTURE_ENTERABLE and acting user
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# OpenPeriod
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
openPeriod transitions an accounting period to OPEN status, enabling standard journal entry postings. The period can transition from either NEVER_OPENED (skipping FUTURE_ENTERABLE) or FUTURE_ENTERABLE. An OPEN period is the primary active state for accepting routine transactional postings from both manual entry and subledger integrations.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Period must exist and be in NEVER_OPENED or FUTURE_ENTERABLE status
|
|
10
|
+
- NEVER_OPENED periods can transition directly to OPEN (skipping FUTURE_ENTERABLE)
|
|
11
|
+
- FUTURE_ENTERABLE periods can transition to OPEN
|
|
12
|
+
- After transition, the period accepts all journal entry postings
|
|
13
|
+
- Emits an audit event recording the status transition, acting user, and timestamp
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive openPeriod request] --> B{Period exists?}
|
|
20
|
+
B -->|No| C[Return error: period not found]
|
|
21
|
+
B -->|Yes| D{Period status is NEVER_OPENED or FUTURE_ENTERABLE?}
|
|
22
|
+
D -->|No| E[Return error: invalid status transition]
|
|
23
|
+
D -->|Yes| F[Transition period to OPEN]
|
|
24
|
+
F --> G[Emit audit event]
|
|
25
|
+
G --> H[Return updated period]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- None
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
|
|
35
|
+
- **INVALID_STATUS_TRANSITION**: Period is not in NEVER_OPENED or FUTURE_ENTERABLE status
|
|
36
|
+
|
|
37
|
+
## Test Cases
|
|
38
|
+
|
|
39
|
+
- returns error when accounting period does not exist
|
|
40
|
+
- returns error when period is in OPEN status
|
|
41
|
+
- returns error when period is in CLOSED status
|
|
42
|
+
- returns error when period is in PERMANENTLY_CLOSED status
|
|
43
|
+
- transitions NEVER_OPENED period directly to OPEN
|
|
44
|
+
- transitions FUTURE_ENTERABLE period to OPEN
|
|
45
|
+
- emits audit event recording status transition and acting user
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# PermanentlyClosePeriod
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
permanentlyClosePeriod transitions an accounting period from CLOSED to PERMANENTLY_CLOSED status. This is an irreversible operation -- once permanently closed, no further journal entries can be posted to the period regardless of user role, and the period cannot be reopened. This enforces financial statement integrity after external audit finalization and satisfies GAAP/IFRS requirements for period locking.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Period must exist and be in CLOSED status
|
|
10
|
+
- Only CLOSED periods can transition to PERMANENTLY_CLOSED
|
|
11
|
+
- The transition is irreversible; PERMANENTLY_CLOSED periods cannot be changed to any other status
|
|
12
|
+
- After transition, all journal entry postings to this period are rejected regardless of user role
|
|
13
|
+
- Emits an audit event recording the irreversible transition, acting user, and timestamp
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive permanentlyClosePeriod request] --> B{Period exists?}
|
|
20
|
+
B -->|No| C[Return error: period not found]
|
|
21
|
+
B -->|Yes| D{Period status is CLOSED?}
|
|
22
|
+
D -->|No| E[Return error: invalid status transition]
|
|
23
|
+
D -->|Yes| F[Transition period to PERMANENTLY_CLOSED]
|
|
24
|
+
F --> G[Emit audit event]
|
|
25
|
+
G --> H[Return updated period]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## External Dependencies
|
|
29
|
+
|
|
30
|
+
- None
|
|
31
|
+
|
|
32
|
+
## Error Scenarios
|
|
33
|
+
|
|
34
|
+
- **ACCOUNTING_PERIOD_NOT_FOUND**: Referenced accounting period does not exist
|
|
35
|
+
- **INVALID_STATUS_TRANSITION**: Period is not in CLOSED status; only CLOSED periods can transition to PERMANENTLY_CLOSED
|
|
36
|
+
|
|
37
|
+
## Test Cases
|
|
38
|
+
|
|
39
|
+
- returns error when accounting period does not exist
|
|
40
|
+
- returns error when period is in NEVER_OPENED status
|
|
41
|
+
- returns error when period is in OPEN status
|
|
42
|
+
- returns error when period is in FUTURE_ENTERABLE status
|
|
43
|
+
- returns error when period is already PERMANENTLY_CLOSED
|
|
44
|
+
- transitions CLOSED period to PERMANENTLY_CLOSED
|
|
45
|
+
- emits audit event recording the irreversible transition and acting user
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# PostAdjustingEntries
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
postAdjustingEntries records adjusting entries (accruals, deferrals, reclassifications) during the period-end close process and transitions the PeriodClose from SUBLEDGERS_VERIFIED to ADJUSTMENTS_POSTED status. Adjusting entries are flagged with an `adjustingEntryType` to distinguish them from regular operational entries for reporting and audit purposes. All adjusting entries must be balanced before the close can proceed.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- PeriodClose record must exist and be in SUBLEDGERS_VERIFIED status
|
|
10
|
+
- Only SUBLEDGERS_VERIFIED records can transition to ADJUSTMENTS_POSTED
|
|
11
|
+
- Adjusting entries created during this step must have a valid `adjustingEntryType` (ACCRUAL, DEFERRAL, or RECLASSIFICATION)
|
|
12
|
+
- Adjusting entries are flagged distinctly from regular journal entries for audit trail purposes
|
|
13
|
+
- All adjusting entries must be balanced (total debits equal total credits) before the close can proceed
|
|
14
|
+
- Adjusting entries follow the same posting rules as regular journal entries (valid period, valid accounts, etc.)
|
|
15
|
+
- Updates completionPercentage to reflect progress
|
|
16
|
+
- Records the userId of the operator who posted the adjusting entries
|
|
17
|
+
- Emits an audit event recording the acting user, timestamp, adjusting entry details, and status transition
|
|
18
|
+
|
|
19
|
+
## Process Flow
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart TD
|
|
23
|
+
A[Receive post adjusting entries request] --> B{PeriodClose record exists?}
|
|
24
|
+
B -->|No| C[Return error: period close not found]
|
|
25
|
+
B -->|Yes| D{PeriodClose in SUBLEDGERS_VERIFIED status?}
|
|
26
|
+
D -->|No| E[Return error: invalid status transition]
|
|
27
|
+
D -->|Yes| F{Adjusting entries have valid types?}
|
|
28
|
+
F -->|No| G[Return error: invalid adjusting entry type]
|
|
29
|
+
F -->|Yes| H{All adjusting entries balanced?}
|
|
30
|
+
H -->|No| I[Return error: unbalanced adjusting entries]
|
|
31
|
+
H -->|Yes| J[Post adjusting entries to the period]
|
|
32
|
+
J --> K[Transition PeriodClose to ADJUSTMENTS_POSTED]
|
|
33
|
+
K --> L[Update completionPercentage]
|
|
34
|
+
L --> M[Emit audit event]
|
|
35
|
+
M --> N[Return updated PeriodClose]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## External Dependencies
|
|
39
|
+
|
|
40
|
+
- [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) - Validates GL accounts referenced in adjusting entries
|
|
41
|
+
|
|
42
|
+
## Error Scenarios
|
|
43
|
+
|
|
44
|
+
- **PERIOD_CLOSE_NOT_FOUND**: No PeriodClose record matches the given id
|
|
45
|
+
- **INVALID_STATUS_TRANSITION**: PeriodClose is not in SUBLEDGERS_VERIFIED status; only SUBLEDGERS_VERIFIED can transition to ADJUSTMENTS_POSTED
|
|
46
|
+
- **INVALID_ADJUSTING_ENTRY_TYPE**: Adjusting entry type is not ACCRUAL, DEFERRAL, or RECLASSIFICATION
|
|
47
|
+
- **UNBALANCED_ADJUSTING_ENTRIES**: One or more adjusting entries have total debits not equal to total credits
|
|
48
|
+
|
|
49
|
+
## Test Cases
|
|
50
|
+
|
|
51
|
+
- returns error when PeriodClose record does not exist
|
|
52
|
+
- returns error when PeriodClose is in IN_PROGRESS status
|
|
53
|
+
- returns error when PeriodClose is already in ADJUSTMENTS_POSTED status
|
|
54
|
+
- returns error when adjusting entry type is invalid
|
|
55
|
+
- returns error when adjusting entries are not balanced
|
|
56
|
+
- posts accrual adjusting entries and transitions to ADJUSTMENTS_POSTED
|
|
57
|
+
- posts deferral adjusting entries and transitions to ADJUSTMENTS_POSTED
|
|
58
|
+
- posts reclassification adjusting entries and transitions to ADJUSTMENTS_POSTED
|
|
59
|
+
- adjusting entries are flagged distinctly from regular journal entries
|
|
60
|
+
- updates completionPercentage after posting adjusting entries
|
|
61
|
+
- emits audit event recording adjusting entry details and status transition
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# PostJournalEntry
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
postJournalEntry transitions a journal entry from DRAFT to POSTED status, making it an immutable part of the general ledger. Posting validates the fundamental accounting constraint (total debits must equal total credits in the functional currency), verifies that the target accounting period is in OPEN or FUTURE_ENTERABLE status, confirms all referenced GL accounts are active, and ensures the entry has at least two journal lines. When a GL account has a successor mapping (deprecated account), the posting is redirected to the successor account.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Journal entry must exist and be in DRAFT status
|
|
10
|
+
- Entry must have at least two journal lines
|
|
11
|
+
- Total debits must equal total credits in the functional currency (balance validation)
|
|
12
|
+
- An unbalanced entry cannot be posted
|
|
13
|
+
- The target accounting period must be in OPEN or FUTURE_ENTERABLE status
|
|
14
|
+
- Posting to a NEVER_OPENED, CLOSED, or PERMANENTLY_CLOSED period is rejected
|
|
15
|
+
- All referenced GL accounts must be from an ACTIVE Chart of Accounts
|
|
16
|
+
- Journal lines referencing an inactive or draft GL account are rejected at posting time
|
|
17
|
+
- Journal lines referencing a deprecated GL account with a successor mapping are redirected to the successor account
|
|
18
|
+
- If the successor account is itself inactive or deprecated without a further successor, the posting is rejected
|
|
19
|
+
- Successor account redirect is recorded in the audit trail
|
|
20
|
+
- Once posted, the entry is immutable (no field updates, no line additions or removals)
|
|
21
|
+
- Posted entries cannot be deleted; only reversal is permitted
|
|
22
|
+
- Emits an audit event recording the status transition from DRAFT to POSTED and the posting user
|
|
23
|
+
|
|
24
|
+
## Process Flow
|
|
25
|
+
|
|
26
|
+
```mermaid
|
|
27
|
+
flowchart TD
|
|
28
|
+
A[Receive post journal entry request] --> B{Journal entry exists?}
|
|
29
|
+
B -->|No| C[Return error: journal entry not found]
|
|
30
|
+
B -->|Yes| D{Entry status is DRAFT?}
|
|
31
|
+
D -->|No| E[Return error: invalid status for posting]
|
|
32
|
+
D -->|Yes| F{At least 2 journal lines?}
|
|
33
|
+
F -->|No| G[Return error: minimum lines not met]
|
|
34
|
+
F -->|Yes| H{All GL accounts active?}
|
|
35
|
+
H -->|No| I{Successor account available?}
|
|
36
|
+
I -->|No| J[Return error: inactive account]
|
|
37
|
+
I -->|Yes| K[Redirect to successor account]
|
|
38
|
+
K --> H
|
|
39
|
+
H -->|Yes| L{Period OPEN or FUTURE_ENTERABLE?}
|
|
40
|
+
L -->|No| M[Return error: invalid period status]
|
|
41
|
+
L -->|Yes| N{Debits equal credits in functional currency?}
|
|
42
|
+
N -->|No| O[Return error: unbalanced entry]
|
|
43
|
+
N -->|Yes| P[Transition entry to POSTED]
|
|
44
|
+
P --> Q[Emit audit event]
|
|
45
|
+
Q --> R[Return posted journal entry]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## External Dependencies
|
|
49
|
+
|
|
50
|
+
- [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) - Validates that all referenced GL accounts are active and resolves successor account mappings
|
|
51
|
+
|
|
52
|
+
## Error Scenarios
|
|
53
|
+
|
|
54
|
+
- **JOURNAL_ENTRY_NOT_FOUND**: Referenced journal entry does not exist
|
|
55
|
+
- **INVALID_STATUS_FOR_POSTING**: Journal entry is not in DRAFT status; only DRAFT entries can be posted
|
|
56
|
+
- **MINIMUM_LINES_NOT_MET**: Journal entry has fewer than two journal lines
|
|
57
|
+
- **UNBALANCED_ENTRY**: Total debits do not equal total credits in the functional currency
|
|
58
|
+
- **INVALID_PERIOD_STATUS**: Target accounting period is not in OPEN or FUTURE_ENTERABLE status
|
|
59
|
+
- **INACTIVE_ACCOUNT**: A referenced GL account is inactive or in draft status with no successor mapping
|
|
60
|
+
- **SUCCESSOR_ACCOUNT_INVALID**: A successor account is itself inactive or deprecated without a further successor
|
|
61
|
+
|
|
62
|
+
## Test Cases
|
|
63
|
+
|
|
64
|
+
- returns error when journal entry does not exist
|
|
65
|
+
- returns error when journal entry is already POSTED
|
|
66
|
+
- returns error when journal entry is REVERSED
|
|
67
|
+
- returns error when entry has fewer than two journal lines
|
|
68
|
+
- returns error when entry has only one line (debit only or credit only)
|
|
69
|
+
- returns error when total debits do not equal total credits in functional currency
|
|
70
|
+
- returns error when target period is in NEVER_OPENED status
|
|
71
|
+
- returns error when target period is in CLOSED status
|
|
72
|
+
- returns error when target period is in PERMANENTLY_CLOSED status
|
|
73
|
+
- returns error when a GL account is inactive
|
|
74
|
+
- returns error when a GL account is in draft status
|
|
75
|
+
- returns error when successor account is itself inactive without further successor
|
|
76
|
+
- posts balanced DRAFT entry to OPEN period
|
|
77
|
+
- posts balanced DRAFT entry to FUTURE_ENTERABLE period
|
|
78
|
+
- redirects deprecated GL account to successor account at posting time
|
|
79
|
+
- records successor account redirect in audit trail
|
|
80
|
+
- entry becomes immutable after posting
|
|
81
|
+
- emits audit event recording status transition from DRAFT to POSTED and posting user
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# ProcessInventoryHandoff
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
processInventoryHandoff receives inventory valuation events from the inventory module (goods receipts, adjustments, scrap) and creates corresponding Miscellaneous-type journal entries in the general ledger. For goods receipts, the entry debits the inventory asset account and credits the clearing account. For adjustments, it debits the adjustment expense and credits the inventory asset. For scrap, it debits the scrap expense and credits the inventory asset. The command enforces idempotency and supports multi-currency transactions.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Receives a handoff event containing the inventory valuation change data and relevant account references
|
|
10
|
+
- Creates a journal entry classified as Miscellaneous journal type
|
|
11
|
+
- For goods receipts: debits inventory asset account and credits the clearing account
|
|
12
|
+
- For adjustments: debits adjustment expense account and credits inventory asset account
|
|
13
|
+
- For scrap: debits scrap expense account and credits inventory asset account
|
|
14
|
+
- The journal entry must be balanced (total debits equal total credits in functional currency)
|
|
15
|
+
- The journal entry carries a source document reference linking to the originating inventory event
|
|
16
|
+
- Idempotent processing: duplicate events with the same source document reference return the original acknowledgment without re-posting
|
|
17
|
+
- Validates that the target accounting period is in OPEN or FUTURE_ENTERABLE status
|
|
18
|
+
- Validates that all referenced GL accounts are active in the Chart of Accounts
|
|
19
|
+
- Handles deprecated GL accounts with successor mappings by redirecting to the successor
|
|
20
|
+
- Supports multi-currency: foreign currency amounts are converted to base currency using the provided exchange rate
|
|
21
|
+
- Rejects events with zero or negative amounts
|
|
22
|
+
- Events are scoped to a company
|
|
23
|
+
- Emits an audit event recording the source module, document reference, and journal entry created
|
|
24
|
+
|
|
25
|
+
## Process Flow
|
|
26
|
+
|
|
27
|
+
```mermaid
|
|
28
|
+
flowchart TD
|
|
29
|
+
A[Receive inventory handoff event] --> B{Idempotency check: already posted?}
|
|
30
|
+
B -->|Yes| C[Return existing acknowledgment]
|
|
31
|
+
B -->|No| D{Accounting period OPEN or FUTURE_ENTERABLE?}
|
|
32
|
+
D -->|No| E[Return error: invalid period status]
|
|
33
|
+
D -->|Yes| F{GL accounts valid and active?}
|
|
34
|
+
F -->|No| G[Return error: account validation failed]
|
|
35
|
+
F -->|Yes| H{Event type?}
|
|
36
|
+
H -->|Goods receipt| I[Create entry: debit inventory asset, credit clearing]
|
|
37
|
+
H -->|Adjustment| J[Create entry: debit adjustment expense, credit inventory asset]
|
|
38
|
+
H -->|Scrap| K[Create entry: debit scrap expense, credit inventory asset]
|
|
39
|
+
I --> L[Post journal entry]
|
|
40
|
+
J --> L
|
|
41
|
+
K --> L
|
|
42
|
+
L --> M[Emit audit event]
|
|
43
|
+
M --> N[Return acknowledgment]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## External Dependencies
|
|
47
|
+
|
|
48
|
+
- [coa-management::getAccount](../../../coa-management/docs/queries/GetAccount.md) - Validates that inventory, clearing, and expense GL accounts are active
|
|
49
|
+
- [primitives::getCurrency](../../../primitives/docs/queries/GetCurrency.md) - Validates currency for multi-currency transactions
|
|
50
|
+
|
|
51
|
+
## Error Scenarios
|
|
52
|
+
|
|
53
|
+
- **INVALID_PERIOD_STATUS**: Target accounting period is not in OPEN or FUTURE_ENTERABLE status
|
|
54
|
+
- **ACCOUNT_NOT_FOUND**: Referenced GL account does not exist
|
|
55
|
+
- **ACCOUNT_NOT_ACTIVE**: Referenced GL account is not in active status
|
|
56
|
+
- **INVALID_AMOUNT**: Handoff event contains zero or negative amounts
|
|
57
|
+
- **COMPANY_MISMATCH**: Handoff event company does not match the GL account company scope
|
|
58
|
+
|
|
59
|
+
## Test Cases
|
|
60
|
+
|
|
61
|
+
- returns existing entry for idempotent duplicate
|
|
62
|
+
- returns error when amount is zero or negative
|
|
63
|
+
- returns error when amount is negative
|
|
64
|
+
- returns error when period is not OPEN or FUTURE_ENTERABLE
|
|
65
|
+
- returns error when period is CLOSED
|
|
66
|
+
- returns error when company does not match period company
|
|
67
|
+
- returns error when debit account does not exist
|
|
68
|
+
- returns error when credit account does not exist
|
|
69
|
+
- returns error when debit account is not active
|
|
70
|
+
- returns error when credit account is not active
|
|
71
|
+
- creates journal entry with correct type and amounts
|
|
72
|
+
- handles multi-currency with exchange rate
|