@tailor-platform/erp-kit 0.3.0 → 0.4.1
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 +30 -0
- package/README.md +35 -7
- package/dist/cli.mjs +783 -272
- package/package.json +5 -4
- package/skills/erp-kit-app-1-requirements/SKILL.md +39 -12
- package/skills/{erp-kit-app-3-plan → erp-kit-app-1-requirements}/references/story-extraction.md +1 -1
- package/skills/erp-kit-app-2-requirements-review/SKILL.md +29 -5
- package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +4 -0
- package/skills/erp-kit-app-2-requirements-review/references/boundary-consistency-check.md +4 -0
- package/skills/erp-kit-app-2-requirements-review/references/story-quality-check.md +67 -0
- package/skills/erp-kit-app-3-plan/SKILL.md +51 -50
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +24 -18
- package/skills/erp-kit-app-3-plan/references/screen-extraction.md +18 -2
- package/skills/erp-kit-app-4-plan-review/SKILL.md +16 -13
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +19 -11
- package/skills/erp-kit-app-5-impl-backend/references/app-config.md +1 -22
- package/skills/erp-kit-app-5-impl-backend/references/module-wiring.md +0 -1
- package/skills/erp-kit-app-5-impl-backend/references/resolver-patterns.md +13 -4
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +16 -0
- package/skills/erp-kit-app-6-impl-frontend/references/pages.md +16 -46
- package/skills/erp-kit-app-7-impl-review/SKILL.md +29 -23
- package/skills/erp-kit-app-7-impl-review/references/resolver-doc-code-parity.md +16 -17
- package/skills/erp-kit-module-1-requirements/SKILL.md +6 -12
- package/skills/erp-kit-module-2-requirements-review/SKILL.md +29 -5
- package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md +19 -0
- package/skills/erp-kit-module-3-plan/SKILL.md +2 -4
- package/skills/erp-kit-module-4-plan-review/SKILL.md +30 -7
- package/skills/erp-kit-module-4-plan-review/references/parity-report-format.md +15 -0
- package/skills/erp-kit-module-6-impl-review/SKILL.md +21 -7
- package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +15 -0
- package/skills/erp-kit-module-shared/SKILL.md +4 -0
- package/skills/erp-kit-module-shared/references/commands.md +1 -1
- package/skills/erp-kit-module-shared/references/queries.md +5 -6
- package/src/commands/app/index.ts +28 -17
- package/src/commands/check.test.ts +1 -1
- package/src/commands/check.ts +2 -35
- package/src/commands/doc/index.ts +83 -0
- package/src/commands/doc/module.test.ts +119 -0
- package/src/commands/doc/module.ts +114 -0
- package/src/commands/doc/modules.test.ts +103 -0
- package/src/commands/doc/modules.ts +98 -0
- package/src/commands/doc/search.test.ts +94 -0
- package/src/commands/doc/search.ts +111 -0
- package/src/commands/generate-doc.ts +17 -10
- package/src/commands/index.ts +20 -8
- package/src/commands/lib/command-result.ts +30 -0
- package/src/commands/lib/discovery.test.ts +74 -0
- package/src/commands/lib/discovery.ts +106 -0
- package/src/commands/lib/paths.ts +22 -0
- package/src/commands/lib/sync-check-source.test.ts +197 -0
- package/src/commands/lib/sync-check-source.ts +100 -0
- package/src/commands/lib/sync-check-tests.test.ts +178 -0
- package/src/commands/lib/sync-check-tests.ts +69 -0
- package/src/commands/mock/index.ts +11 -6
- package/src/commands/module/generate.ts +13 -8
- package/src/commands/module/index.ts +17 -21
- package/src/commands/parse-doc-test-cases.ts +13 -2
- package/src/commands/sync-check.test.ts +6 -364
- package/src/commands/sync-check.ts +7 -251
- package/src/generator/generate-app-code.test.ts +121 -0
- package/src/generator/generate-app-code.ts +51 -0
- package/src/generator/generate-code-boilerplate.test.ts +1 -2
- package/src/generator/generate-code.test.ts +43 -12
- package/src/generator/generate-code.ts +12 -226
- package/src/generator/generate-errors.ts +34 -0
- package/src/generator/generate-permissions.ts +12 -0
- package/src/generator/generate-shells.ts +28 -0
- package/src/generator/generate-stubs.ts +31 -0
- package/src/generator/parse-resolver-doc.test.ts +89 -0
- package/src/generator/parse-resolver-doc.ts +125 -0
- package/src/generator/scaffold.ts +57 -0
- package/src/generator/stub-templates.test.ts +55 -0
- package/src/generator/stub-templates.ts +145 -0
- package/src/module.ts +3 -0
- package/src/modules/audit/README.md +46 -0
- package/src/modules/audit/command/activateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/activateAuditPolicy.test.ts +186 -0
- package/src/modules/audit/command/activateAuditPolicy.ts +97 -0
- package/src/modules/audit/command/createAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/createAuditPolicy.test.ts +395 -0
- package/src/modules/audit/command/createAuditPolicy.ts +131 -0
- package/src/modules/audit/command/deactivateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/deactivateAuditPolicy.test.ts +138 -0
- package/src/modules/audit/command/deactivateAuditPolicy.ts +58 -0
- package/src/modules/audit/command/deleteAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/deleteAuditPolicy.test.ts +121 -0
- package/src/modules/audit/command/deleteAuditPolicy.ts +52 -0
- package/src/modules/audit/command/logAuditEvent.generated.ts +6 -0
- package/src/modules/audit/command/logAuditEvent.test.ts +991 -0
- package/src/modules/audit/command/logAuditEvent.ts +357 -0
- package/src/modules/audit/command/reactivateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/reactivateAuditPolicy.test.ts +143 -0
- package/src/modules/audit/command/reactivateAuditPolicy.ts +79 -0
- package/src/modules/audit/command/registerAuditableEntity.generated.ts +6 -0
- package/src/modules/audit/command/registerAuditableEntity.test.ts +268 -0
- package/src/modules/audit/command/registerAuditableEntity.ts +94 -0
- package/src/modules/audit/command/replaceAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/replaceAuditPolicy.test.ts +242 -0
- package/src/modules/audit/command/replaceAuditPolicy.ts +91 -0
- package/src/modules/audit/command/updateAuditPolicy.generated.ts +6 -0
- package/src/modules/audit/command/updateAuditPolicy.test.ts +284 -0
- package/src/modules/audit/command/updateAuditPolicy.ts +151 -0
- package/src/modules/audit/db/auditEntry.ts +47 -0
- package/src/modules/audit/db/auditPolicy.ts +33 -0
- package/src/modules/audit/db/auditableEntity.ts +22 -0
- package/src/modules/audit/db/changeDetail.ts +28 -0
- package/src/modules/audit/db/policyFieldRule.ts +23 -0
- package/src/modules/audit/docs/commands/ActivateAuditPolicy.md +69 -0
- package/src/modules/audit/docs/commands/CreateAuditPolicy.md +79 -0
- package/src/modules/audit/docs/commands/DeactivateAuditPolicy.md +55 -0
- package/src/modules/audit/docs/commands/DeleteAuditPolicy.md +55 -0
- package/src/modules/audit/docs/commands/LogAuditEvent.md +137 -0
- package/src/modules/audit/docs/commands/ReactivateAuditPolicy.md +58 -0
- package/src/modules/audit/docs/commands/RegisterAuditableEntity.md +62 -0
- package/src/modules/audit/docs/commands/ReplaceAuditPolicy.md +72 -0
- package/src/modules/audit/docs/commands/UpdateAuditPolicy.md +77 -0
- package/src/modules/audit/docs/features/audit-event-logging.md +126 -0
- package/src/modules/audit/docs/features/audit-policy-configuration.md +135 -0
- package/src/modules/audit/docs/features/field-level-change-tracking.md +95 -0
- package/src/modules/audit/docs/models/AuditEntry.md +55 -0
- package/src/modules/audit/docs/models/AuditPolicy.md +79 -0
- package/src/modules/audit/docs/models/AuditableEntity.md +38 -0
- package/src/modules/audit/docs/models/ChangeDetail.md +55 -0
- package/src/modules/audit/docs/models/PolicyFieldRule.md +45 -0
- package/src/modules/audit/docs/queries/GetAuditEntry.md +49 -0
- package/src/modules/audit/docs/queries/GetAuditPolicy.md +54 -0
- package/src/modules/audit/docs/queries/GetAuditSummary.md +84 -0
- package/src/modules/audit/docs/queries/GetChangeDetails.md +56 -0
- package/src/modules/audit/docs/queries/ListAuditPolicies.md +58 -0
- package/src/modules/audit/docs/queries/SearchAuditEntries.md +91 -0
- package/src/modules/audit/generated/kysely-tailordb.ts +92 -0
- package/src/modules/audit/index.ts +2 -0
- package/src/modules/audit/lib/_db_deps.ts +13 -0
- package/src/modules/audit/lib/errors.generated.ts +120 -0
- package/src/modules/audit/lib/permissions.generated.ts +14 -0
- package/src/modules/audit/lib/types.ts +33 -0
- package/src/modules/audit/module.ts +57 -0
- package/src/modules/audit/permissions.ts +39 -0
- package/src/modules/audit/query/getAuditEntry.generated.ts +5 -0
- package/src/modules/audit/query/getAuditEntry.test.ts +123 -0
- package/src/modules/audit/query/getAuditEntry.ts +42 -0
- package/src/modules/audit/query/getAuditPolicy.generated.ts +5 -0
- package/src/modules/audit/query/getAuditPolicy.test.ts +169 -0
- package/src/modules/audit/query/getAuditPolicy.ts +48 -0
- package/src/modules/audit/query/getAuditSummary.generated.ts +5 -0
- package/src/modules/audit/query/getAuditSummary.test.ts +632 -0
- package/src/modules/audit/query/getAuditSummary.ts +170 -0
- package/src/modules/audit/query/getChangeDetails.generated.ts +5 -0
- package/src/modules/audit/query/getChangeDetails.test.ts +195 -0
- package/src/modules/audit/query/getChangeDetails.ts +48 -0
- package/src/modules/audit/query/listAuditPolicies.generated.ts +5 -0
- package/src/modules/audit/query/listAuditPolicies.test.ts +239 -0
- package/src/modules/audit/query/listAuditPolicies.ts +100 -0
- package/src/modules/audit/query/searchAuditEntries.generated.ts +5 -0
- package/src/modules/audit/query/searchAuditEntries.test.ts +424 -0
- package/src/modules/audit/query/searchAuditEntries.ts +121 -0
- package/src/modules/audit/tailor.config.ts +13 -0
- package/src/modules/audit/tailor.d.ts +13 -0
- package/src/modules/audit/testing/fixtures.ts +215 -0
- package/src/modules/business-partner/README.md +60 -0
- package/src/modules/business-partner/command/activatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/activatePartner.test.ts +59 -0
- package/src/modules/business-partner/command/activatePartner.ts +45 -0
- package/src/modules/business-partner/command/assignRoleToPartner.generated.ts +6 -0
- package/src/modules/business-partner/command/assignRoleToPartner.test.ts +113 -0
- package/src/modules/business-partner/command/assignRoleToPartner.ts +72 -0
- package/src/modules/business-partner/command/createContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/createContactPerson.test.ts +193 -0
- package/src/modules/business-partner/command/createContactPerson.ts +98 -0
- package/src/modules/business-partner/command/createPartner.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartner.test.ts +179 -0
- package/src/modules/business-partner/command/createPartner.ts +82 -0
- package/src/modules/business-partner/command/createPartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartnerAddress.test.ts +195 -0
- package/src/modules/business-partner/command/createPartnerAddress.ts +119 -0
- package/src/modules/business-partner/command/createPartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartnerBankAccount.test.ts +297 -0
- package/src/modules/business-partner/command/createPartnerBankAccount.ts +114 -0
- package/src/modules/business-partner/command/createPartnerIdentification.generated.ts +6 -0
- package/src/modules/business-partner/command/createPartnerIdentification.test.ts +255 -0
- package/src/modules/business-partner/command/createPartnerIdentification.ts +97 -0
- package/src/modules/business-partner/command/deactivateContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/deactivateContactPerson.test.ts +70 -0
- package/src/modules/business-partner/command/deactivateContactPerson.ts +54 -0
- package/src/modules/business-partner/command/deactivatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/deactivatePartner.test.ts +59 -0
- package/src/modules/business-partner/command/deactivatePartner.ts +46 -0
- package/src/modules/business-partner/command/deleteContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/deleteContactPerson.test.ts +61 -0
- package/src/modules/business-partner/command/deleteContactPerson.ts +48 -0
- package/src/modules/business-partner/command/deletePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartner.test.ts +58 -0
- package/src/modules/business-partner/command/deletePartner.ts +46 -0
- package/src/modules/business-partner/command/deletePartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartnerAddress.test.ts +74 -0
- package/src/modules/business-partner/command/deletePartnerAddress.ts +52 -0
- package/src/modules/business-partner/command/deletePartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartnerBankAccount.test.ts +55 -0
- package/src/modules/business-partner/command/deletePartnerBankAccount.ts +36 -0
- package/src/modules/business-partner/command/deletePartnerIdentification.generated.ts +6 -0
- package/src/modules/business-partner/command/deletePartnerIdentification.test.ts +47 -0
- package/src/modules/business-partner/command/deletePartnerIdentification.ts +37 -0
- package/src/modules/business-partner/command/reactivateContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/reactivateContactPerson.test.ts +48 -0
- package/src/modules/business-partner/command/reactivateContactPerson.ts +48 -0
- package/src/modules/business-partner/command/reactivatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/reactivatePartner.test.ts +59 -0
- package/src/modules/business-partner/command/reactivatePartner.ts +46 -0
- package/src/modules/business-partner/command/removeRoleFromPartner.generated.ts +6 -0
- package/src/modules/business-partner/command/removeRoleFromPartner.test.ts +82 -0
- package/src/modules/business-partner/command/removeRoleFromPartner.ts +73 -0
- package/src/modules/business-partner/command/setDefaultPartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/setDefaultPartnerAddress.test.ts +60 -0
- package/src/modules/business-partner/command/setDefaultPartnerAddress.ts +48 -0
- package/src/modules/business-partner/command/setDefaultPartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/setDefaultPartnerBankAccount.test.ts +56 -0
- package/src/modules/business-partner/command/setDefaultPartnerBankAccount.ts +51 -0
- package/src/modules/business-partner/command/setPrimaryContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/setPrimaryContactPerson.test.ts +63 -0
- package/src/modules/business-partner/command/setPrimaryContactPerson.ts +55 -0
- package/src/modules/business-partner/command/updateContactPerson.generated.ts +6 -0
- package/src/modules/business-partner/command/updateContactPerson.test.ts +193 -0
- package/src/modules/business-partner/command/updateContactPerson.ts +92 -0
- package/src/modules/business-partner/command/updatePartner.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartner.test.ts +101 -0
- package/src/modules/business-partner/command/updatePartner.ts +76 -0
- package/src/modules/business-partner/command/updatePartnerAddress.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartnerAddress.test.ts +148 -0
- package/src/modules/business-partner/command/updatePartnerAddress.ts +64 -0
- package/src/modules/business-partner/command/updatePartnerBankAccount.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartnerBankAccount.test.ts +249 -0
- package/src/modules/business-partner/command/updatePartnerBankAccount.ts +109 -0
- package/src/modules/business-partner/command/updatePartnerIdentification.generated.ts +6 -0
- package/src/modules/business-partner/command/updatePartnerIdentification.test.ts +162 -0
- package/src/modules/business-partner/command/updatePartnerIdentification.ts +105 -0
- package/src/modules/business-partner/db/.gitkeep +0 -0
- package/src/modules/business-partner/db/businessPartner.ts +59 -0
- package/src/modules/business-partner/db/contactPerson.ts +49 -0
- package/src/modules/business-partner/db/partnerAddress.ts +45 -0
- package/src/modules/business-partner/db/partnerBankAccount.ts +53 -0
- package/src/modules/business-partner/db/partnerIdentification.ts +53 -0
- package/src/modules/business-partner/db/partnerRole.ts +43 -0
- package/src/modules/business-partner/docs/commands/ActivatePartner.md +39 -0
- package/src/modules/business-partner/docs/commands/AssignRoleToPartner.md +49 -0
- package/src/modules/business-partner/docs/commands/CreateContactPerson.md +59 -0
- package/src/modules/business-partner/docs/commands/CreatePartner.md +54 -0
- package/src/modules/business-partner/docs/commands/CreatePartnerAddress.md +60 -0
- package/src/modules/business-partner/docs/commands/CreatePartnerBankAccount.md +68 -0
- package/src/modules/business-partner/docs/commands/CreatePartnerIdentification.md +59 -0
- package/src/modules/business-partner/docs/commands/DeactivateContactPerson.md +42 -0
- package/src/modules/business-partner/docs/commands/DeactivatePartner.md +39 -0
- package/src/modules/business-partner/docs/commands/DeleteContactPerson.md +43 -0
- package/src/modules/business-partner/docs/commands/DeletePartner.md +40 -0
- package/src/modules/business-partner/docs/commands/DeletePartnerAddress.md +40 -0
- package/src/modules/business-partner/docs/commands/DeletePartnerBankAccount.md +35 -0
- package/src/modules/business-partner/docs/commands/DeletePartnerIdentification.md +33 -0
- package/src/modules/business-partner/docs/commands/ReactivateContactPerson.md +38 -0
- package/src/modules/business-partner/docs/commands/ReactivatePartner.md +39 -0
- package/src/modules/business-partner/docs/commands/RemoveRoleFromPartner.md +46 -0
- package/src/modules/business-partner/docs/commands/SetDefaultPartnerAddress.md +38 -0
- package/src/modules/business-partner/docs/commands/SetDefaultPartnerBankAccount.md +38 -0
- package/src/modules/business-partner/docs/commands/SetPrimaryContactPerson.md +43 -0
- package/src/modules/business-partner/docs/commands/UpdateContactPerson.md +66 -0
- package/src/modules/business-partner/docs/commands/UpdatePartner.md +48 -0
- package/src/modules/business-partner/docs/commands/UpdatePartnerAddress.md +46 -0
- package/src/modules/business-partner/docs/commands/UpdatePartnerBankAccount.md +64 -0
- package/src/modules/business-partner/docs/commands/UpdatePartnerIdentification.md +52 -0
- package/src/modules/business-partner/docs/features/contact-person-management.md +70 -0
- package/src/modules/business-partner/docs/features/partner-address-management.md +96 -0
- package/src/modules/business-partner/docs/features/partner-bank-account.md +70 -0
- package/src/modules/business-partner/docs/features/partner-identification.md +76 -0
- package/src/modules/business-partner/docs/features/partner-lifecycle.md +59 -0
- package/src/modules/business-partner/docs/features/partner-role-classification.md +73 -0
- package/src/modules/business-partner/docs/models/BusinessPartner.md +64 -0
- package/src/modules/business-partner/docs/models/ContactPerson.md +62 -0
- package/src/modules/business-partner/docs/models/PartnerAddress.md +52 -0
- package/src/modules/business-partner/docs/models/PartnerBankAccount.md +50 -0
- package/src/modules/business-partner/docs/models/PartnerIdentification.md +46 -0
- package/src/modules/business-partner/docs/models/PartnerRole.md +42 -0
- package/src/modules/business-partner/docs/queries/GetContactPerson.md +34 -0
- package/src/modules/business-partner/docs/queries/GetDefaultPartnerAddress.md +40 -0
- package/src/modules/business-partner/docs/queries/GetDefaultPartnerBankAccount.md +36 -0
- package/src/modules/business-partner/docs/queries/GetPartner.md +35 -0
- package/src/modules/business-partner/docs/queries/GetPartnerAddress.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPartnerBankAccount.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPartnerIdentification.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPartnerRole.md +34 -0
- package/src/modules/business-partner/docs/queries/GetPrimaryContactPerson.md +36 -0
- package/src/modules/business-partner/docs/queries/ListContactPersonsByPartner.md +39 -0
- package/src/modules/business-partner/docs/queries/ListPartnerAddressesByPartner.md +41 -0
- package/src/modules/business-partner/docs/queries/ListPartnerBankAccountsByPartner.md +39 -0
- package/src/modules/business-partner/docs/queries/ListPartnerIdentificationsByPartner.md +41 -0
- package/src/modules/business-partner/docs/queries/ListPartnersByRole.md +47 -0
- package/src/modules/business-partner/executor/.gitkeep +0 -0
- package/src/modules/business-partner/generated/.gitkeep +0 -0
- package/src/modules/business-partner/generated/enums.ts +60 -0
- package/src/modules/business-partner/generated/kysely-tailordb.ts +114 -0
- package/src/modules/business-partner/index.ts +2 -0
- package/src/modules/business-partner/lib/_db_deps.ts +17 -0
- package/src/modules/business-partner/lib/errors.generated.ts +172 -0
- package/src/modules/business-partner/lib/permissions.generated.ts +30 -0
- package/src/modules/business-partner/lib/types.ts +58 -0
- package/src/modules/business-partner/module.ts +181 -0
- package/src/modules/business-partner/permissions.ts +3 -0
- package/src/modules/business-partner/query/.gitkeep +0 -0
- package/src/modules/business-partner/query/getContactPerson.generated.ts +5 -0
- package/src/modules/business-partner/query/getContactPerson.test.ts +31 -0
- package/src/modules/business-partner/query/getContactPerson.ts +16 -0
- package/src/modules/business-partner/query/getDefaultPartnerAddress.generated.ts +5 -0
- package/src/modules/business-partner/query/getDefaultPartnerAddress.test.ts +45 -0
- package/src/modules/business-partner/query/getDefaultPartnerAddress.ts +30 -0
- package/src/modules/business-partner/query/getDefaultPartnerBankAccount.generated.ts +5 -0
- package/src/modules/business-partner/query/getDefaultPartnerBankAccount.test.ts +43 -0
- package/src/modules/business-partner/query/getDefaultPartnerBankAccount.ts +17 -0
- package/src/modules/business-partner/query/getPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartner.test.ts +31 -0
- package/src/modules/business-partner/query/getPartner.ts +16 -0
- package/src/modules/business-partner/query/getPartnerAddress.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerAddress.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerAddress.ts +16 -0
- package/src/modules/business-partner/query/getPartnerBankAccount.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerBankAccount.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerBankAccount.ts +16 -0
- package/src/modules/business-partner/query/getPartnerIdentification.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerIdentification.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerIdentification.ts +16 -0
- package/src/modules/business-partner/query/getPartnerRole.generated.ts +5 -0
- package/src/modules/business-partner/query/getPartnerRole.test.ts +31 -0
- package/src/modules/business-partner/query/getPartnerRole.ts +19 -0
- package/src/modules/business-partner/query/getPrimaryContactPerson.generated.ts +5 -0
- package/src/modules/business-partner/query/getPrimaryContactPerson.test.ts +43 -0
- package/src/modules/business-partner/query/getPrimaryContactPerson.ts +17 -0
- package/src/modules/business-partner/query/listContactPersonsByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listContactPersonsByPartner.test.ts +77 -0
- package/src/modules/business-partner/query/listContactPersonsByPartner.ts +32 -0
- package/src/modules/business-partner/query/listPartnerAddressesByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnerAddressesByPartner.test.ts +71 -0
- package/src/modules/business-partner/query/listPartnerAddressesByPartner.ts +37 -0
- package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.test.ts +59 -0
- package/src/modules/business-partner/query/listPartnerBankAccountsByPartner.ts +32 -0
- package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.test.ts +72 -0
- package/src/modules/business-partner/query/listPartnerIdentificationsByPartner.ts +40 -0
- package/src/modules/business-partner/query/listPartnersByRole.generated.ts +5 -0
- package/src/modules/business-partner/query/listPartnersByRole.test.ts +103 -0
- package/src/modules/business-partner/query/listPartnersByRole.ts +47 -0
- package/src/modules/business-partner/tailor.config.ts +13 -0
- package/src/modules/business-partner/tailor.d.ts +13 -0
- package/src/modules/business-partner/testing/fixtures.ts +204 -0
- package/src/modules/coa-management/README.md +61 -0
- package/src/modules/coa-management/command/.gitkeep +0 -0
- package/src/modules/coa-management/command/activateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/activateAccount.test.ts +125 -0
- package/src/modules/coa-management/command/activateAccount.ts +105 -0
- package/src/modules/coa-management/command/activateChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/activateChartOfAccounts.test.ts +113 -0
- package/src/modules/coa-management/command/activateChartOfAccounts.ts +104 -0
- package/src/modules/coa-management/command/createAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/createAccount.test.ts +767 -0
- package/src/modules/coa-management/command/createAccount.ts +247 -0
- package/src/modules/coa-management/command/createAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/createAccountGroup.test.ts +494 -0
- package/src/modules/coa-management/command/createAccountGroup.ts +207 -0
- package/src/modules/coa-management/command/createChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/createChartOfAccounts.test.ts +502 -0
- package/src/modules/coa-management/command/createChartOfAccounts.ts +267 -0
- package/src/modules/coa-management/command/deactivateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/deactivateAccount.test.ts +199 -0
- package/src/modules/coa-management/command/deactivateAccount.ts +142 -0
- package/src/modules/coa-management/command/deactivateChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/deactivateChartOfAccounts.test.ts +91 -0
- package/src/modules/coa-management/command/deactivateChartOfAccounts.ts +88 -0
- package/src/modules/coa-management/command/deleteAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/deleteAccount.test.ts +122 -0
- package/src/modules/coa-management/command/deleteAccount.ts +103 -0
- package/src/modules/coa-management/command/deleteAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/deleteAccountGroup.test.ts +120 -0
- package/src/modules/coa-management/command/deleteAccountGroup.ts +113 -0
- package/src/modules/coa-management/command/deleteChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/deleteChartOfAccounts.test.ts +154 -0
- package/src/modules/coa-management/command/deleteChartOfAccounts.ts +133 -0
- package/src/modules/coa-management/command/moveAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/moveAccountGroup.test.ts +199 -0
- package/src/modules/coa-management/command/moveAccountGroup.ts +145 -0
- package/src/modules/coa-management/command/reactivateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/reactivateAccount.test.ts +126 -0
- package/src/modules/coa-management/command/reactivateAccount.ts +123 -0
- package/src/modules/coa-management/command/updateAccount.generated.ts +6 -0
- package/src/modules/coa-management/command/updateAccount.test.ts +669 -0
- package/src/modules/coa-management/command/updateAccount.ts +370 -0
- package/src/modules/coa-management/command/updateAccountGroup.generated.ts +6 -0
- package/src/modules/coa-management/command/updateAccountGroup.test.ts +253 -0
- package/src/modules/coa-management/command/updateAccountGroup.ts +191 -0
- package/src/modules/coa-management/command/updateChartOfAccounts.generated.ts +6 -0
- package/src/modules/coa-management/command/updateChartOfAccounts.test.ts +153 -0
- package/src/modules/coa-management/command/updateChartOfAccounts.ts +133 -0
- package/src/modules/coa-management/db/.gitkeep +0 -0
- package/src/modules/coa-management/db/account.ts +119 -0
- package/src/modules/coa-management/db/accountGroup.ts +57 -0
- package/src/modules/coa-management/db/chartOfAccounts.ts +55 -0
- package/src/modules/coa-management/docs/commands/ActivateAccount.md +49 -0
- package/src/modules/coa-management/docs/commands/ActivateChartOfAccounts.md +47 -0
- package/src/modules/coa-management/docs/commands/CreateAccount.md +94 -0
- package/src/modules/coa-management/docs/commands/CreateAccountGroup.md +70 -0
- package/src/modules/coa-management/docs/commands/CreateChartOfAccounts.md +72 -0
- package/src/modules/coa-management/docs/commands/DeactivateAccount.md +65 -0
- package/src/modules/coa-management/docs/commands/DeactivateChartOfAccounts.md +44 -0
- package/src/modules/coa-management/docs/commands/DeleteAccount.md +52 -0
- package/src/modules/coa-management/docs/commands/DeleteAccountGroup.md +50 -0
- package/src/modules/coa-management/docs/commands/DeleteChartOfAccounts.md +48 -0
- package/src/modules/coa-management/docs/commands/MoveAccountGroup.md +57 -0
- package/src/modules/coa-management/docs/commands/ReactivateAccount.md +50 -0
- package/src/modules/coa-management/docs/commands/UpdateAccount.md +102 -0
- package/src/modules/coa-management/docs/commands/UpdateAccountGroup.md +62 -0
- package/src/modules/coa-management/docs/commands/UpdateChartOfAccounts.md +49 -0
- package/src/modules/coa-management/docs/features/account-group-hierarchy.md +81 -0
- package/src/modules/coa-management/docs/features/account-lifecycle.md +80 -0
- package/src/modules/coa-management/docs/features/account-management.md +114 -0
- package/src/modules/coa-management/docs/features/chart-of-accounts-setup.md +86 -0
- package/src/modules/coa-management/docs/models/Account.md +84 -0
- package/src/modules/coa-management/docs/models/AccountGroup.md +55 -0
- package/src/modules/coa-management/docs/models/ChartOfAccounts.md +65 -0
- package/src/modules/coa-management/docs/queries/DetectCircularReference.md +52 -0
- package/src/modules/coa-management/docs/queries/GetAccount.md +42 -0
- package/src/modules/coa-management/docs/queries/GetAccountGroup.md +42 -0
- package/src/modules/coa-management/docs/queries/GetChartOfAccounts.md +48 -0
- package/src/modules/coa-management/docs/queries/ListAccountGroups.md +42 -0
- package/src/modules/coa-management/docs/queries/ListAccounts.md +54 -0
- package/src/modules/coa-management/docs/queries/ListUnassignedAccounts.md +40 -0
- package/src/modules/coa-management/executor/.gitkeep +0 -0
- package/src/modules/coa-management/generated/.gitkeep +0 -0
- package/src/modules/coa-management/generated/enums.ts +45 -0
- package/src/modules/coa-management/generated/kysely-tailordb.ts +81 -0
- package/src/modules/coa-management/index.ts +2 -0
- package/src/modules/coa-management/lib/_db_deps.ts +17 -0
- package/src/modules/coa-management/lib/errors.generated.ts +162 -0
- package/src/modules/coa-management/lib/permissions.generated.ts +20 -0
- package/src/modules/coa-management/lib/types.ts +27 -0
- package/src/modules/coa-management/module.ts +136 -0
- package/src/modules/coa-management/permissions.ts +3 -0
- package/src/modules/coa-management/query/.gitkeep +0 -0
- package/src/modules/coa-management/query/detectCircularReference.generated.ts +5 -0
- package/src/modules/coa-management/query/detectCircularReference.test.ts +88 -0
- package/src/modules/coa-management/query/detectCircularReference.ts +46 -0
- package/src/modules/coa-management/query/getAccount.generated.ts +5 -0
- package/src/modules/coa-management/query/getAccount.test.ts +55 -0
- package/src/modules/coa-management/query/getAccount.ts +25 -0
- package/src/modules/coa-management/query/getAccountGroup.generated.ts +5 -0
- package/src/modules/coa-management/query/getAccountGroup.test.ts +55 -0
- package/src/modules/coa-management/query/getAccountGroup.ts +25 -0
- package/src/modules/coa-management/query/getChartOfAccounts.generated.ts +5 -0
- package/src/modules/coa-management/query/getChartOfAccounts.test.ts +79 -0
- package/src/modules/coa-management/query/getChartOfAccounts.ts +28 -0
- package/src/modules/coa-management/query/listAccountGroups.generated.ts +5 -0
- package/src/modules/coa-management/query/listAccountGroups.test.ts +72 -0
- package/src/modules/coa-management/query/listAccountGroups.ts +49 -0
- package/src/modules/coa-management/query/listAccounts.generated.ts +5 -0
- package/src/modules/coa-management/query/listAccounts.test.ts +136 -0
- package/src/modules/coa-management/query/listAccounts.ts +82 -0
- package/src/modules/coa-management/query/listUnassignedAccounts.generated.ts +5 -0
- package/src/modules/coa-management/query/listUnassignedAccounts.test.ts +96 -0
- package/src/modules/coa-management/query/listUnassignedAccounts.ts +39 -0
- package/src/modules/coa-management/tailor.config.ts +13 -0
- package/src/modules/coa-management/tailor.d.ts +13 -0
- package/src/modules/coa-management/testing/fixtures.ts +201 -0
- package/src/modules/item-management/README.md +1 -1
- package/src/modules/item-management/command/activateItem.generated.ts +1 -1
- package/src/modules/item-management/command/activateItem.ts +1 -1
- package/src/modules/item-management/command/assignItemToTaxonomy.generated.ts +1 -1
- package/src/modules/item-management/command/assignItemToTaxonomy.ts +1 -1
- package/src/modules/item-management/command/createItem.generated.ts +1 -1
- package/src/modules/item-management/command/createItem.test.ts +1 -1
- package/src/modules/item-management/command/createItem.ts +1 -1
- package/src/modules/item-management/command/createTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/createTaxonomyNode.test.ts +1 -1
- package/src/modules/item-management/command/createTaxonomyNode.ts +1 -1
- package/src/modules/item-management/command/deactivateItem.generated.ts +1 -1
- package/src/modules/item-management/command/deactivateItem.ts +1 -1
- package/src/modules/item-management/command/deleteItem.generated.ts +1 -1
- package/src/modules/item-management/command/deleteItem.ts +1 -1
- package/src/modules/item-management/command/deleteTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/deleteTaxonomyNode.ts +1 -1
- package/src/modules/item-management/command/moveTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/moveTaxonomyNode.test.ts +1 -1
- package/src/modules/item-management/command/moveTaxonomyNode.ts +1 -1
- package/src/modules/item-management/command/reactivateItem.generated.ts +1 -1
- package/src/modules/item-management/command/reactivateItem.ts +1 -1
- package/src/modules/item-management/command/removeItemFromTaxonomy.generated.ts +1 -1
- package/src/modules/item-management/command/removeItemFromTaxonomy.ts +1 -1
- package/src/modules/item-management/command/updateItem.generated.ts +1 -1
- package/src/modules/item-management/command/updateItem.test.ts +1 -1
- package/src/modules/item-management/command/updateItem.ts +1 -1
- package/src/modules/item-management/command/updateTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/command/updateTaxonomyNode.ts +1 -1
- package/src/modules/item-management/lib/errors.generated.ts +1 -1
- package/src/modules/item-management/lib/permissions.generated.ts +1 -1
- package/src/modules/item-management/lib/types.ts +6 -1
- package/src/modules/item-management/module.ts +1 -1
- package/src/modules/item-management/query/calculateNodeDepth.generated.ts +1 -1
- package/src/modules/item-management/query/calculateNodeDepth.ts +1 -1
- package/src/modules/item-management/query/calculateSubtreeDepth.generated.ts +1 -1
- package/src/modules/item-management/query/calculateSubtreeDepth.ts +1 -1
- package/src/modules/item-management/query/detectCircularReference.generated.ts +1 -1
- package/src/modules/item-management/query/detectCircularReference.ts +1 -1
- package/src/modules/item-management/query/getItem.generated.ts +1 -1
- package/src/modules/item-management/query/getItem.ts +1 -1
- package/src/modules/item-management/query/getItemTaxonomyAssignment.generated.ts +1 -1
- package/src/modules/item-management/query/getItemTaxonomyAssignment.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNode.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNode.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeAssignments.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeChildren.generated.ts +1 -1
- package/src/modules/item-management/query/getTaxonomyNodeChildren.ts +1 -1
- package/src/modules/organization/README.md +57 -0
- package/src/modules/organization/command/.gitkeep +0 -0
- package/src/modules/organization/command/activateCompany.generated.ts +6 -0
- package/src/modules/organization/command/activateCompany.test.ts +184 -0
- package/src/modules/organization/command/activateCompany.ts +92 -0
- package/src/modules/organization/command/createCompany.generated.ts +6 -0
- package/src/modules/organization/command/createCompany.test.ts +156 -0
- package/src/modules/organization/command/createCompany.ts +80 -0
- package/src/modules/organization/command/createDepartment.generated.ts +6 -0
- package/src/modules/organization/command/createDepartment.test.ts +239 -0
- package/src/modules/organization/command/createDepartment.ts +98 -0
- package/src/modules/organization/command/createSite.generated.ts +6 -0
- package/src/modules/organization/command/createSite.test.ts +262 -0
- package/src/modules/organization/command/createSite.ts +155 -0
- package/src/modules/organization/command/deactivateCompany.generated.ts +6 -0
- package/src/modules/organization/command/deactivateCompany.test.ts +58 -0
- package/src/modules/organization/command/deactivateCompany.ts +47 -0
- package/src/modules/organization/command/deactivateDepartment.generated.ts +6 -0
- package/src/modules/organization/command/deactivateDepartment.test.ts +115 -0
- package/src/modules/organization/command/deactivateDepartment.ts +63 -0
- package/src/modules/organization/command/deactivateSite.generated.ts +6 -0
- package/src/modules/organization/command/deactivateSite.test.ts +53 -0
- package/src/modules/organization/command/deactivateSite.ts +47 -0
- package/src/modules/organization/command/deleteCompany.generated.ts +6 -0
- package/src/modules/organization/command/deleteCompany.test.ts +99 -0
- package/src/modules/organization/command/deleteCompany.ts +66 -0
- package/src/modules/organization/command/reactivateCompany.generated.ts +6 -0
- package/src/modules/organization/command/reactivateCompany.test.ts +58 -0
- package/src/modules/organization/command/reactivateCompany.ts +47 -0
- package/src/modules/organization/command/reactivateDepartment.generated.ts +6 -0
- package/src/modules/organization/command/reactivateDepartment.test.ts +59 -0
- package/src/modules/organization/command/reactivateDepartment.ts +47 -0
- package/src/modules/organization/command/reactivateSite.generated.ts +6 -0
- package/src/modules/organization/command/reactivateSite.test.ts +53 -0
- package/src/modules/organization/command/reactivateSite.ts +47 -0
- package/src/modules/organization/command/updateCompany.generated.ts +6 -0
- package/src/modules/organization/command/updateCompany.test.ts +239 -0
- package/src/modules/organization/command/updateCompany.ts +127 -0
- package/src/modules/organization/command/updateDepartment.generated.ts +6 -0
- package/src/modules/organization/command/updateDepartment.test.ts +232 -0
- package/src/modules/organization/command/updateDepartment.ts +120 -0
- package/src/modules/organization/command/updateSite.generated.ts +6 -0
- package/src/modules/organization/command/updateSite.test.ts +274 -0
- package/src/modules/organization/command/updateSite.ts +176 -0
- package/src/modules/organization/db/.gitkeep +0 -0
- package/src/modules/organization/db/company.ts +44 -0
- package/src/modules/organization/db/department.ts +46 -0
- package/src/modules/organization/db/site.ts +44 -0
- package/src/modules/organization/docs/commands/ActivateCompany.md +62 -0
- package/src/modules/organization/docs/commands/CreateCompany.md +49 -0
- package/src/modules/organization/docs/commands/CreateDepartment.md +62 -0
- package/src/modules/organization/docs/commands/CreateSite.md +74 -0
- package/src/modules/organization/docs/commands/DeactivateCompany.md +40 -0
- package/src/modules/organization/docs/commands/DeactivateDepartment.md +44 -0
- package/src/modules/organization/docs/commands/DeactivateSite.md +38 -0
- package/src/modules/organization/docs/commands/DeleteCompany.md +50 -0
- package/src/modules/organization/docs/commands/ReactivateCompany.md +39 -0
- package/src/modules/organization/docs/commands/ReactivateDepartment.md +37 -0
- package/src/modules/organization/docs/commands/ReactivateSite.md +37 -0
- package/src/modules/organization/docs/commands/UpdateCompany.md +58 -0
- package/src/modules/organization/docs/commands/UpdateDepartment.md +64 -0
- package/src/modules/organization/docs/commands/UpdateSite.md +80 -0
- package/src/modules/organization/docs/features/company-lifecycle.md +76 -0
- package/src/modules/organization/docs/features/department-management.md +66 -0
- package/src/modules/organization/docs/features/site-management.md +86 -0
- package/src/modules/organization/docs/models/Company.md +60 -0
- package/src/modules/organization/docs/models/Department.md +57 -0
- package/src/modules/organization/docs/models/Site.md +57 -0
- package/src/modules/organization/docs/queries/DetectDepartmentCircularReference.md +50 -0
- package/src/modules/organization/docs/queries/GetCompany.md +40 -0
- package/src/modules/organization/docs/queries/GetDepartment.md +44 -0
- package/src/modules/organization/docs/queries/GetDepartmentChildren.md +40 -0
- package/src/modules/organization/docs/queries/GetSite.md +37 -0
- package/src/modules/organization/docs/queries/ListDepartmentsByCompany.md +54 -0
- package/src/modules/organization/docs/queries/ListSitesByCompany.md +54 -0
- package/src/modules/organization/executor/.gitkeep +0 -0
- package/src/modules/organization/generated/.gitkeep +0 -0
- package/src/modules/organization/generated/kysely-tailordb.ts +77 -0
- package/src/modules/organization/index.ts +2 -0
- package/src/modules/organization/lib/_db_deps.ts +10 -0
- package/src/modules/organization/lib/errors.generated.ts +117 -0
- package/src/modules/organization/lib/permissions.generated.ts +19 -0
- package/src/modules/organization/lib/types.ts +21 -0
- package/src/modules/organization/module.ts +89 -0
- package/src/modules/organization/permissions.ts +3 -0
- package/src/modules/organization/query/.gitkeep +0 -0
- package/src/modules/organization/query/detectDepartmentCircularReference.generated.ts +5 -0
- package/src/modules/organization/query/detectDepartmentCircularReference.test.ts +102 -0
- package/src/modules/organization/query/detectDepartmentCircularReference.ts +27 -0
- package/src/modules/organization/query/getCompany.generated.ts +5 -0
- package/src/modules/organization/query/getCompany.test.ts +70 -0
- package/src/modules/organization/query/getCompany.ts +16 -0
- package/src/modules/organization/query/getDepartment.generated.ts +5 -0
- package/src/modules/organization/query/getDepartment.test.ts +85 -0
- package/src/modules/organization/query/getDepartment.ts +17 -0
- package/src/modules/organization/query/getDepartmentChildren.generated.ts +5 -0
- package/src/modules/organization/query/getDepartmentChildren.test.ts +75 -0
- package/src/modules/organization/query/getDepartmentChildren.ts +21 -0
- package/src/modules/organization/query/getSite.generated.ts +5 -0
- package/src/modules/organization/query/getSite.test.ts +55 -0
- package/src/modules/organization/query/getSite.ts +16 -0
- package/src/modules/organization/query/listDepartmentsByCompany.generated.ts +5 -0
- package/src/modules/organization/query/listDepartmentsByCompany.test.ts +124 -0
- package/src/modules/organization/query/listDepartmentsByCompany.ts +43 -0
- package/src/modules/organization/query/listSitesByCompany.generated.ts +5 -0
- package/src/modules/organization/query/listSitesByCompany.test.ts +126 -0
- package/src/modules/organization/query/listSitesByCompany.ts +41 -0
- package/src/modules/organization/tailor.config.ts +13 -0
- package/src/modules/organization/tailor.d.ts +13 -0
- package/src/modules/organization/testing/fixtures.ts +155 -0
- package/src/modules/primitives/README.md +1 -1
- package/src/modules/primitives/command/activateCategory.generated.ts +1 -1
- package/src/modules/primitives/command/activateCategory.ts +1 -1
- package/src/modules/primitives/command/activateCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/activateCurrency.ts +1 -1
- package/src/modules/primitives/command/activateUnit.generated.ts +1 -1
- package/src/modules/primitives/command/activateUnit.ts +1 -1
- package/src/modules/primitives/command/createCategory.generated.ts +1 -1
- package/src/modules/primitives/command/createCategory.ts +1 -1
- package/src/modules/primitives/command/createCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/createCurrency.ts +1 -1
- package/src/modules/primitives/command/createExchangeRate.generated.ts +1 -1
- package/src/modules/primitives/command/createExchangeRate.ts +1 -1
- package/src/modules/primitives/command/createUnit.generated.ts +1 -1
- package/src/modules/primitives/command/createUnit.ts +1 -1
- package/src/modules/primitives/command/deactivateCategory.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateCategory.ts +1 -1
- package/src/modules/primitives/command/deactivateCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateCurrency.ts +1 -1
- package/src/modules/primitives/command/deactivateUnit.generated.ts +1 -1
- package/src/modules/primitives/command/deactivateUnit.ts +1 -1
- package/src/modules/primitives/command/setBaseCurrency.generated.ts +1 -1
- package/src/modules/primitives/command/setBaseCurrency.test.ts +8 -64
- package/src/modules/primitives/command/setBaseCurrency.ts +6 -64
- package/src/modules/primitives/command/setReferenceUnit.generated.ts +1 -1
- package/src/modules/primitives/command/setReferenceUnit.ts +1 -1
- package/src/modules/primitives/docs/commands/ActivateCategory.md +1 -1
- package/src/modules/primitives/docs/commands/ActivateCurrency.md +1 -1
- package/src/modules/primitives/docs/commands/ActivateUnit.md +1 -1
- package/src/modules/primitives/docs/commands/CreateExchangeRate.md +2 -2
- package/src/modules/primitives/docs/commands/CreateUnit.md +1 -1
- package/src/modules/primitives/docs/commands/DeactivateCategory.md +1 -1
- package/src/modules/primitives/docs/commands/DeactivateCurrency.md +1 -1
- package/src/modules/primitives/docs/commands/DeactivateUnit.md +1 -1
- package/src/modules/primitives/docs/commands/SetBaseCurrency.md +13 -23
- package/src/modules/primitives/docs/commands/SetReferenceUnit.md +1 -1
- package/src/modules/primitives/docs/features/currency-definitions.md +13 -14
- package/src/modules/primitives/docs/models/Currency.md +3 -4
- package/src/modules/primitives/docs/queries/ConvertAmount.md +2 -2
- package/src/modules/primitives/docs/queries/ConvertQuantity.md +2 -2
- package/src/modules/primitives/lib/errors.generated.ts +6 -1
- package/src/modules/primitives/lib/permissions.generated.ts +1 -1
- package/src/modules/primitives/lib/types.ts +6 -1
- package/src/modules/primitives/module.ts +1 -1
- package/src/modules/primitives/query/convertAmount.generated.ts +1 -1
- package/src/modules/primitives/query/convertAmount.test.ts +1 -1
- package/src/modules/primitives/query/convertAmount.ts +1 -1
- package/src/modules/primitives/query/convertQuantity.generated.ts +1 -1
- package/src/modules/primitives/query/convertQuantity.test.ts +1 -1
- package/src/modules/primitives/query/convertQuantity.ts +1 -1
- package/src/modules/primitives/query/getBaseCurrency.generated.ts +1 -1
- package/src/modules/primitives/query/getBaseCurrency.test.ts +1 -1
- package/src/modules/primitives/query/getBaseCurrency.ts +1 -1
- package/src/modules/primitives/query/getCurrency.generated.ts +1 -1
- package/src/modules/primitives/query/getCurrency.ts +1 -1
- package/src/modules/primitives/query/getUnit.generated.ts +1 -1
- package/src/modules/primitives/query/getUnit.ts +1 -1
- package/src/modules/primitives/query/getUoMCategory.generated.ts +1 -1
- package/src/modules/primitives/query/getUoMCategory.ts +1 -1
- package/src/modules/primitives/query/listUnitsByCategory.generated.ts +1 -1
- package/src/modules/primitives/query/listUnitsByCategory.ts +2 -2
- package/src/modules/product-management/README.md +1 -1
- package/src/modules/product-management/command/activateProduct.generated.ts +1 -1
- package/src/modules/product-management/command/activateProduct.ts +1 -1
- package/src/modules/product-management/command/assignProductToCategory.generated.ts +1 -1
- package/src/modules/product-management/command/assignProductToCategory.ts +1 -1
- package/src/modules/product-management/command/createProduct.generated.ts +1 -1
- package/src/modules/product-management/command/createProduct.test.ts +1 -1
- package/src/modules/product-management/command/createProduct.ts +1 -1
- package/src/modules/product-management/command/createProductAttribute.generated.ts +1 -1
- package/src/modules/product-management/command/createProductAttribute.ts +1 -1
- package/src/modules/product-management/command/createProductAttributeValue.generated.ts +1 -1
- package/src/modules/product-management/command/createProductAttributeValue.ts +1 -1
- package/src/modules/product-management/command/createProductCategory.generated.ts +1 -1
- package/src/modules/product-management/command/createProductCategory.test.ts +1 -1
- package/src/modules/product-management/command/createProductCategory.ts +1 -1
- package/src/modules/product-management/command/deactivateProduct.generated.ts +1 -1
- package/src/modules/product-management/command/deactivateProduct.ts +1 -1
- package/src/modules/product-management/command/deleteProduct.generated.ts +1 -1
- package/src/modules/product-management/command/deleteProduct.ts +1 -1
- package/src/modules/product-management/command/deleteProductAttribute.generated.ts +1 -1
- package/src/modules/product-management/command/deleteProductAttribute.ts +1 -1
- package/src/modules/product-management/command/deleteProductAttributeValue.generated.ts +1 -1
- package/src/modules/product-management/command/deleteProductAttributeValue.ts +1 -1
- package/src/modules/product-management/command/deleteProductCategory.generated.ts +1 -1
- package/src/modules/product-management/command/deleteProductCategory.ts +1 -1
- package/src/modules/product-management/command/generateVariants.generated.ts +1 -1
- package/src/modules/product-management/command/generateVariants.test.ts +1 -1
- package/src/modules/product-management/command/generateVariants.ts +1 -1
- package/src/modules/product-management/command/moveProductCategory.generated.ts +1 -1
- package/src/modules/product-management/command/moveProductCategory.test.ts +1 -1
- package/src/modules/product-management/command/moveProductCategory.ts +1 -1
- package/src/modules/product-management/command/reactivateProduct.generated.ts +1 -1
- package/src/modules/product-management/command/reactivateProduct.ts +1 -1
- package/src/modules/product-management/command/removeProductFromCategory.generated.ts +1 -1
- package/src/modules/product-management/command/removeProductFromCategory.ts +1 -1
- package/src/modules/product-management/command/setProductAttributeAssignment.generated.ts +1 -1
- package/src/modules/product-management/command/setProductAttributeAssignment.ts +1 -1
- package/src/modules/product-management/command/updateProduct.generated.ts +1 -1
- package/src/modules/product-management/command/updateProduct.test.ts +1 -1
- package/src/modules/product-management/command/updateProduct.ts +1 -1
- package/src/modules/product-management/command/updateProductAttribute.generated.ts +1 -1
- package/src/modules/product-management/command/updateProductAttribute.ts +1 -1
- package/src/modules/product-management/command/updateProductAttributeValue.generated.ts +1 -1
- package/src/modules/product-management/command/updateProductAttributeValue.ts +1 -1
- package/src/modules/product-management/command/updateProductCategory.generated.ts +1 -1
- package/src/modules/product-management/command/updateProductCategory.ts +1 -1
- package/src/modules/product-management/lib/errors.generated.ts +1 -1
- package/src/modules/product-management/lib/permissions.generated.ts +1 -1
- package/src/modules/product-management/lib/types.ts +6 -1
- package/src/modules/product-management/module.ts +1 -1
- package/src/modules/product-management/query/calculateCategoryDepth.generated.ts +1 -1
- package/src/modules/product-management/query/calculateCategoryDepth.ts +1 -1
- package/src/modules/product-management/query/detectCategoryCircularReference.generated.ts +1 -1
- package/src/modules/product-management/query/detectCategoryCircularReference.ts +1 -1
- package/src/modules/product-management/query/getProduct.generated.ts +1 -1
- package/src/modules/product-management/query/getProduct.ts +1 -1
- package/src/modules/product-management/query/getProductAttribute.generated.ts +1 -1
- package/src/modules/product-management/query/getProductAttribute.ts +1 -1
- package/src/modules/product-management/query/getProductAttributeAssignment.generated.ts +1 -1
- package/src/modules/product-management/query/getProductAttributeAssignment.ts +1 -1
- package/src/modules/product-management/query/getProductAttributeValue.generated.ts +1 -1
- package/src/modules/product-management/query/getProductAttributeValue.ts +1 -1
- package/src/modules/product-management/query/getProductCategory.generated.ts +1 -1
- package/src/modules/product-management/query/getProductCategory.ts +1 -1
- package/src/modules/product-management/query/getProductCategoryAssignment.generated.ts +1 -1
- package/src/modules/product-management/query/getProductCategoryAssignment.ts +1 -1
- package/src/modules/product-management/query/getProductVariant.generated.ts +1 -1
- package/src/modules/product-management/query/getProductVariant.ts +1 -1
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.generated.ts +1 -1
- package/src/modules/product-management/query/listAttributeAssignmentsByAttribute.ts +1 -1
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.generated.ts +1 -1
- package/src/modules/product-management/query/listCategoryAssignmentsByProduct.ts +1 -1
- package/src/modules/product-management/query/listProductAttributeAssignments.generated.ts +1 -1
- package/src/modules/product-management/query/listProductAttributeAssignments.ts +1 -1
- package/src/modules/product-management/query/listProductAttributeValues.generated.ts +1 -1
- package/src/modules/product-management/query/listProductAttributeValues.ts +1 -1
- package/src/modules/product-management/query/listProductCategoryAssignments.generated.ts +1 -1
- package/src/modules/product-management/query/listProductCategoryAssignments.ts +1 -1
- package/src/modules/product-management/query/listProductCategoryChildren.generated.ts +1 -1
- package/src/modules/product-management/query/listProductCategoryChildren.ts +1 -1
- package/src/modules/product-management/query/listProductVariants.generated.ts +1 -1
- package/src/modules/product-management/query/listProductVariants.ts +1 -1
- package/src/modules/user-management/command/activateUser.generated.ts +1 -1
- package/src/modules/user-management/command/activateUser.ts +1 -1
- package/src/modules/user-management/command/assignPermissionToRole.generated.ts +1 -1
- package/src/modules/user-management/command/assignPermissionToRole.ts +1 -1
- package/src/modules/user-management/command/assignRoleToUser.generated.ts +1 -1
- package/src/modules/user-management/command/assignRoleToUser.ts +1 -1
- package/src/modules/user-management/command/createPermission.generated.ts +1 -1
- package/src/modules/user-management/command/createPermission.ts +1 -1
- package/src/modules/user-management/command/createRole.generated.ts +1 -1
- package/src/modules/user-management/command/createRole.ts +1 -1
- package/src/modules/user-management/command/createUser.generated.ts +1 -1
- package/src/modules/user-management/command/createUser.ts +1 -1
- package/src/modules/user-management/command/deactivateUser.generated.ts +1 -1
- package/src/modules/user-management/command/deactivateUser.ts +1 -1
- package/src/modules/user-management/command/reactivateUser.generated.ts +1 -1
- package/src/modules/user-management/command/reactivateUser.ts +1 -1
- package/src/modules/user-management/command/revokePermissionFromRole.generated.ts +1 -1
- package/src/modules/user-management/command/revokePermissionFromRole.ts +1 -1
- package/src/modules/user-management/command/revokeRoleFromUser.generated.ts +1 -1
- package/src/modules/user-management/command/revokeRoleFromUser.ts +1 -1
- package/src/modules/user-management/docs/commands/CreatePermission.md +3 -3
- package/src/modules/user-management/docs/commands/CreateRole.md +1 -1
- package/src/modules/user-management/docs/queries/ListRolePermissionsByRole.md +39 -0
- package/src/modules/user-management/docs/queries/ListUserRolesByUser.md +39 -0
- package/src/modules/user-management/generated/enums.ts +0 -15
- package/src/modules/user-management/generated/kysely-tailordb.ts +0 -11
- package/src/modules/user-management/lib/errors.generated.ts +1 -1
- package/src/modules/user-management/lib/permissions.generated.ts +1 -1
- package/src/modules/user-management/lib/types.ts +6 -1
- package/src/modules/user-management/module.ts +1 -1
- package/src/shared/createContext.ts +2 -1
- package/src/shared/defineQuery.ts +36 -1
- package/src/shared/requirePermission.ts +3 -3
- package/src/shared/types.ts +3 -0
- package/templates/scaffold/app/backend/package.json +4 -3
- package/templates/scaffold/app/frontend/eslint.config.js +12 -0
- package/templates/scaffold/app/frontend/package.json +10 -7
- package/templates/scaffold/app/frontend/src/hooks/use-toast.ts +30 -0
- package/templates/scaffold/app/frontend/src/pages/user-management/user/create/components/create-user-form.tsx +3 -2
- package/templates/scaffold/app/frontend/vite.config.ts +5 -5
- package/templates/scaffold/module/lib/types.ts +6 -1
- package/templates/scaffold/module/permissions.ts +1 -1
- package/src/commands/module/list.test.ts +0 -57
- package/src/commands/module/list.ts +0 -64
- package/templates/scaffold/module/lib/errors.ts +0 -1
- /package/src/modules/{accounting → audit/db}/.gitkeep +0 -0
- /package/src/modules/audit/{.gitkeep → executor/.gitkeep} +0 -0
- /package/src/modules/{coa-management → business-partner}/.gitkeep +0 -0
- /package/src/modules/{supplier-management → business-partner/command}/.gitkeep +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { company as companyStub, currency as currencyStub } from "../lib/_db_deps";
|
|
9
|
+
|
|
10
|
+
export const BASE_COA_STATUSES = ["DRAFT", "ACTIVE", "ARCHIVED"] as const;
|
|
11
|
+
|
|
12
|
+
export interface CreateChartOfAccountsTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
13
|
+
fields?: F;
|
|
14
|
+
additionalStatuses?: string[];
|
|
15
|
+
companyType?: TailorAnyDBType;
|
|
16
|
+
currencyType?: TailorAnyDBType;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function createChartOfAccountsType<const F extends Record<string, TailorAnyDBField>>(
|
|
20
|
+
params: CreateChartOfAccountsTypeParams<F>,
|
|
21
|
+
) {
|
|
22
|
+
const statuses = [...BASE_COA_STATUSES, ...(params.additionalStatuses ?? [])] as [
|
|
23
|
+
string,
|
|
24
|
+
...string[],
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
return db
|
|
28
|
+
.type(["ChartOfAccounts", "ChartsOfAccounts"], {
|
|
29
|
+
name: db.string().description("Name of the chart of accounts"),
|
|
30
|
+
description: db.string({ optional: true }).description("Optional description of the CoA"),
|
|
31
|
+
companyId: db
|
|
32
|
+
.uuid()
|
|
33
|
+
.relation({
|
|
34
|
+
type: "n-1",
|
|
35
|
+
toward: { type: params.companyType ?? companyStub },
|
|
36
|
+
backward: "chartOfAccounts",
|
|
37
|
+
})
|
|
38
|
+
.description("Foreign key to Company from organization module"),
|
|
39
|
+
baseCurrencyId: db
|
|
40
|
+
.uuid()
|
|
41
|
+
.relation({
|
|
42
|
+
type: "n-1",
|
|
43
|
+
toward: { type: params.currencyType ?? currencyStub },
|
|
44
|
+
backward: "chartsOfAccounts",
|
|
45
|
+
})
|
|
46
|
+
.description("Base currency inherited from the parent company at creation time"),
|
|
47
|
+
status: db.enum(statuses).description("Lifecycle status: DRAFT, ACTIVE, ARCHIVED"),
|
|
48
|
+
...((params.fields ?? {}) as F),
|
|
49
|
+
...db.fields.timestamps(),
|
|
50
|
+
})
|
|
51
|
+
.permission(unsafeAllowAllTypePermission)
|
|
52
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const chartOfAccounts = createChartOfAccountsType({});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# ActivateAccount
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
activateAccount transitions a GL account from DRAFT to ACTIVE status, making it eligible to receive journal postings from downstream modules. Only DRAFT accounts can be activated; already ACTIVE or INACTIVE accounts require different transitions.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target account must exist
|
|
10
|
+
- Parent CoA must be in ACTIVE status; activating an account under a DRAFT CoA is rejected because the CoA itself has not yet been activated, and activating an account under an ARCHIVED CoA is rejected because archived CoAs are immutable
|
|
11
|
+
- Target account must be in DRAFT status
|
|
12
|
+
- Activating an already ACTIVE account fails with an invalid state transition error
|
|
13
|
+
- Activating an INACTIVE account fails (use reactivateAccount instead)
|
|
14
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, and status transition from DRAFT to ACTIVE
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive activate request] --> B{Account exists?}
|
|
21
|
+
B -->|No| C[Return error: not found]
|
|
22
|
+
B -->|Yes| B2{Parent CoA is ACTIVE?}
|
|
23
|
+
B2 -->|No| B3[Return error: CoA is not ACTIVE]
|
|
24
|
+
B2 -->|Yes| D{Status is DRAFT?}
|
|
25
|
+
D -->|No| E[Return error: invalid state transition]
|
|
26
|
+
D -->|Yes| F[Update status to ACTIVE]
|
|
27
|
+
F --> G[Emit audit event]
|
|
28
|
+
G --> H[Return activated account]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## External Dependencies
|
|
32
|
+
|
|
33
|
+
- None
|
|
34
|
+
|
|
35
|
+
## Error Scenarios
|
|
36
|
+
|
|
37
|
+
- **ACCOUNT_NOT_FOUND**: Specified account ID does not exist
|
|
38
|
+
- **CHART_OF_ACCOUNTS_NOT_ACTIVE**: Parent CoA is not in ACTIVE status; account activation requires the CoA to be ACTIVE
|
|
39
|
+
- **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
|
|
40
|
+
|
|
41
|
+
## Test Cases
|
|
42
|
+
|
|
43
|
+
- returns error when account does not exist
|
|
44
|
+
- returns error when parent CoA is DRAFT
|
|
45
|
+
- returns error when parent CoA is ARCHIVED
|
|
46
|
+
- returns error when account is already ACTIVE
|
|
47
|
+
- returns error when account is INACTIVE
|
|
48
|
+
- activates a DRAFT account
|
|
49
|
+
- emits audit event recording status transition from DRAFT to ACTIVE
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# ActivateChartOfAccounts
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
activateChartOfAccounts transitions a Chart of Accounts from DRAFT to ACTIVE status. Activation makes the CoA the authoritative account structure for its company, enabling accounts within it to receive journal postings from downstream modules. Only one CoA per company can be ACTIVE at a time.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target CoA must exist
|
|
10
|
+
- Target CoA must be in DRAFT status
|
|
11
|
+
- Activating an already ACTIVE or ARCHIVED CoA fails with an invalid state transition error
|
|
12
|
+
- Only one CoA per company can be in ACTIVE status; activating a second CoA for the same company fails with a uniqueness constraint error
|
|
13
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, and status transition from DRAFT to ACTIVE
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive activate request] --> B{CoA exists?}
|
|
20
|
+
B -->|No| C[Return error: not found]
|
|
21
|
+
B -->|Yes| D{Status is DRAFT?}
|
|
22
|
+
D -->|No| E[Return error: invalid state transition]
|
|
23
|
+
D -->|Yes| F{Another ACTIVE CoA for same company?}
|
|
24
|
+
F -->|Yes| G[Return error: duplicate active CoA]
|
|
25
|
+
F -->|No| H[Update status to ACTIVE]
|
|
26
|
+
H --> I[Emit audit event]
|
|
27
|
+
I --> J[Return activated CoA]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## External Dependencies
|
|
31
|
+
|
|
32
|
+
- None
|
|
33
|
+
|
|
34
|
+
## Error Scenarios
|
|
35
|
+
|
|
36
|
+
- **CHART_OF_ACCOUNTS_NOT_FOUND**: Specified CoA ID does not exist
|
|
37
|
+
- **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
|
|
38
|
+
- **DUPLICATE_ACTIVE_CHART_OF_ACCOUNTS**: Another ACTIVE CoA already exists for the same company
|
|
39
|
+
|
|
40
|
+
## Test Cases
|
|
41
|
+
|
|
42
|
+
- returns error when CoA does not exist
|
|
43
|
+
- returns error when CoA is already ACTIVE
|
|
44
|
+
- returns error when CoA is ARCHIVED
|
|
45
|
+
- returns error when another ACTIVE CoA exists for the same company
|
|
46
|
+
- activates a DRAFT CoA
|
|
47
|
+
- emits audit event recording status transition from DRAFT to ACTIVE
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# CreateAccount
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createAccount establishes a new GL account in DRAFT status within a Chart of Accounts. Each account carries a structured numeric code, name, account type, account classification, and optional attributes (currency restriction, reconciliation flag, default tax code, tags, account group assignment). The parent CoA must be in DRAFT or ACTIVE status.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Account code is required, must be a structured numeric identifier, and must be unique within the CoA
|
|
10
|
+
- Account name is required and must be non-empty
|
|
11
|
+
- Account type must be one of ASSET, LIABILITY, EQUITY, REVENUE, or EXPENSE
|
|
12
|
+
- Account classification must be one of REGULAR, RECEIVABLE, PAYABLE, BANK_CASH, FIXED_ASSET, RETAINED_EARNINGS, or NON_POSTING; defaults to REGULAR
|
|
13
|
+
- Classification must be compatible with account type: RECEIVABLE, BANK_CASH, and FIXED_ASSET require ASSET; PAYABLE requires LIABILITY; RETAINED_EARNINGS requires EQUITY; REGULAR and NON_POSTING are allowed with any type
|
|
14
|
+
- Only one account per CoA may carry the RETAINED_EARNINGS classification
|
|
15
|
+
- Accounts with RECEIVABLE, PAYABLE, or BANK_CASH classification must have reconciliation enabled; attempting to set reconciliation to false for these classifications is rejected
|
|
16
|
+
- Reconciliation flag defaults to false when not explicitly set for REGULAR, FIXED_ASSET, RETAINED_EARNINGS, and NON_POSTING classifications
|
|
17
|
+
- NON_POSTING classification marks the account as excluded from journal entry posting target selection; this constraint is stored on the account and enforced by downstream posting modules
|
|
18
|
+
- RECEIVABLE and PAYABLE classifications mark the account as a sub-ledger control account; direct manual journal postings are blocked (only automated sub-ledger module postings are permitted). This constraint is stored on the account and enforced by the GL/posting layer
|
|
19
|
+
- Currency restriction, when provided, must reference a valid currency from the primitives module. An account with currency restriction only accepts postings denominated in that currency (enforced by downstream posting modules)
|
|
20
|
+
- Account group, when provided, must belong to the same CoA and account code must fall within the group's number range (if defined)
|
|
21
|
+
- Parent CoA must exist and be in DRAFT or ACTIVE status
|
|
22
|
+
- Account is always created in DRAFT status
|
|
23
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, classification, and initial field values
|
|
24
|
+
|
|
25
|
+
## Process Flow
|
|
26
|
+
|
|
27
|
+
```mermaid
|
|
28
|
+
flowchart TD
|
|
29
|
+
A[Receive create request] --> B{CoA exists and is DRAFT or ACTIVE?}
|
|
30
|
+
B -->|No| C[Return error: CoA not found or invalid status]
|
|
31
|
+
B -->|Yes| D{Account code unique within CoA?}
|
|
32
|
+
D -->|No| E[Return error: duplicate code]
|
|
33
|
+
D -->|Yes| F{Classification compatible with type?}
|
|
34
|
+
F -->|No| G[Return error: incompatible classification]
|
|
35
|
+
F -->|Yes| H{RETAINED_EARNINGS unique in CoA?}
|
|
36
|
+
H -->|No| I[Return error: duplicate retained earnings]
|
|
37
|
+
H -->|Yes| J{Currency valid if provided?}
|
|
38
|
+
J -->|No| K[Return error: currency not found]
|
|
39
|
+
J -->|Yes| L{Group valid if provided?}
|
|
40
|
+
L -->|No| M[Return error: group not found or code out of range]
|
|
41
|
+
L -->|Yes| N{Reconciliation valid for classification?}
|
|
42
|
+
N -->|No| Q[Return error: reconciliation required]
|
|
43
|
+
N -->|Yes| O[Create account in DRAFT]
|
|
44
|
+
O --> P[Emit audit event]
|
|
45
|
+
P --> Q[Return created account]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## External Dependencies
|
|
49
|
+
|
|
50
|
+
- [primitives::getCurrency](../../../primitives/docs/queries/GetCurrency.md) - Validates that the referenced currency exists and is active
|
|
51
|
+
|
|
52
|
+
## Error Scenarios
|
|
53
|
+
|
|
54
|
+
- **CHART_OF_ACCOUNTS_NOT_FOUND**: Referenced CoA does not exist or is not in DRAFT/ACTIVE status
|
|
55
|
+
- **DUPLICATE_ACCOUNT_CODE**: An account with the same code already exists in the CoA
|
|
56
|
+
- **INCOMPATIBLE_CLASSIFICATION**: Account classification is not compatible with the account type
|
|
57
|
+
- **DUPLICATE_RETAINED_EARNINGS**: Another account in the CoA already has RETAINED_EARNINGS classification
|
|
58
|
+
- **CURRENCY_NOT_FOUND**: Referenced currency does not exist or is not active
|
|
59
|
+
- **ACCOUNT_GROUP_NOT_FOUND**: Referenced account group does not exist or belongs to a different CoA
|
|
60
|
+
- **CODE_OUT_OF_RANGE**: Account code does not fall within the assigned group's number range
|
|
61
|
+
- **NAME_REQUIRED**: Account name is empty or not provided
|
|
62
|
+
- **INVALID_ACCOUNT_CODE**: Account code is not a valid structured numeric identifier
|
|
63
|
+
- **RECONCILIATION_REQUIRED**: Reconciliation cannot be set to false for RECEIVABLE, PAYABLE, or BANK_CASH classifications
|
|
64
|
+
|
|
65
|
+
## Test Cases
|
|
66
|
+
|
|
67
|
+
- returns error when CoA does not exist
|
|
68
|
+
- returns error when CoA is ARCHIVED
|
|
69
|
+
- returns error when account code already exists in CoA
|
|
70
|
+
- returns error when account code is not a valid numeric identifier
|
|
71
|
+
- returns error when name is empty
|
|
72
|
+
- returns error when classification is incompatible with type
|
|
73
|
+
- returns error when RETAINED_EARNINGS already exists in CoA
|
|
74
|
+
- returns error when currency does not exist
|
|
75
|
+
- returns error when account group belongs to different CoA
|
|
76
|
+
- returns error when account code is outside group number range
|
|
77
|
+
- creates account in DRAFT status with defaults
|
|
78
|
+
- creates account with RECEIVABLE classification and enforces reconciliation
|
|
79
|
+
- creates account with PAYABLE classification and enforces reconciliation
|
|
80
|
+
- creates account with BANK_CASH classification and enforces reconciliation
|
|
81
|
+
- creates NON_POSTING account that is marked as excluded from journal entry posting
|
|
82
|
+
- creates RECEIVABLE account that is marked as control account blocking manual postings
|
|
83
|
+
- creates PAYABLE account that is marked as control account blocking manual postings
|
|
84
|
+
- creates account with currency restriction that constrains posting currency
|
|
85
|
+
- creates account with optional currency restriction
|
|
86
|
+
- creates account with optional tags
|
|
87
|
+
- creates account with optional default tax code
|
|
88
|
+
- creates account assigned to a group
|
|
89
|
+
- defaults classification to REGULAR when not specified
|
|
90
|
+
- returns error when reconciliation explicitly set to false for RECEIVABLE classification
|
|
91
|
+
- returns error when reconciliation explicitly set to false for PAYABLE classification
|
|
92
|
+
- returns error when reconciliation explicitly set to false for BANK_CASH classification
|
|
93
|
+
- emits audit event recording acting user, timestamp, CoA reference, account code, and classification
|
|
94
|
+
- passes custom fields through to insert
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# CreateAccountGroup
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createAccountGroup establishes a new account group within a Chart of Accounts. Groups organize GL accounts into logical categories and can be nested to form a multi-level tree hierarchy. Each group has a code, name, optional parent reference, sort order, and optional account number range.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Parent CoA must exist and be in DRAFT or ACTIVE status; creating a group under an ARCHIVED CoA is rejected
|
|
10
|
+
- Group code is required and must be unique within the CoA
|
|
11
|
+
- Group name is required and must be non-empty
|
|
12
|
+
- Parent group, when provided, must exist within the same CoA
|
|
13
|
+
- Account number range, when defined, requires both start and end to be provided together, must be a valid interval (start < end), and must not overlap with other groups' ranges within the CoA
|
|
14
|
+
- Sort order controls display sequence among sibling groups
|
|
15
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, group code, and initial field values
|
|
16
|
+
|
|
17
|
+
## Process Flow
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
flowchart TD
|
|
21
|
+
A[Receive create request] --> B{CoA exists?}
|
|
22
|
+
B -->|No| C[Return error: CoA not found]
|
|
23
|
+
B -->|Yes| B2{CoA is DRAFT or ACTIVE?}
|
|
24
|
+
B2 -->|No| B3[Return error: CoA is ARCHIVED]
|
|
25
|
+
B2 -->|Yes| C2{Code non-empty?}
|
|
26
|
+
C2 -->|No| C3[Return error: code required]
|
|
27
|
+
C2 -->|Yes| D{Code unique within CoA?}
|
|
28
|
+
D -->|No| E[Return error: duplicate code]
|
|
29
|
+
D -->|Yes| F{Parent group valid if provided?}
|
|
30
|
+
F -->|No| G[Return error: parent not found]
|
|
31
|
+
F -->|Yes| H{Number range valid and non-overlapping?}
|
|
32
|
+
H -->|No| I[Return error: invalid or overlapping range]
|
|
33
|
+
H -->|Yes| J[Create account group]
|
|
34
|
+
J --> K[Emit audit event]
|
|
35
|
+
K --> L[Return created group]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## External Dependencies
|
|
39
|
+
|
|
40
|
+
- [audit](../../../audit/README.md) — Receives audit events emitted by this command
|
|
41
|
+
|
|
42
|
+
## Error Scenarios
|
|
43
|
+
|
|
44
|
+
- **CHART_OF_ACCOUNTS_NOT_FOUND**: Referenced CoA does not exist
|
|
45
|
+
- **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
|
|
46
|
+
- **CODE_REQUIRED**: Group code is empty or not provided
|
|
47
|
+
- **DUPLICATE_GROUP_CODE**: A group with the same code already exists in the CoA
|
|
48
|
+
- **NAME_REQUIRED**: Group name is empty or not provided
|
|
49
|
+
- **PARENT_GROUP_NOT_FOUND**: Specified parent group does not exist or belongs to a different CoA
|
|
50
|
+
- **INVALID_NUMBER_RANGE**: Number range is invalid (start >= end) or overlaps with another group's range
|
|
51
|
+
|
|
52
|
+
## Test Cases
|
|
53
|
+
|
|
54
|
+
- returns error when CoA does not exist
|
|
55
|
+
- returns error when parent CoA is ARCHIVED
|
|
56
|
+
- returns error when group code is empty
|
|
57
|
+
- returns error when group code already exists in CoA
|
|
58
|
+
- returns error when name is empty
|
|
59
|
+
- returns error when parent group does not exist
|
|
60
|
+
- returns error when parent group belongs to different CoA
|
|
61
|
+
- returns error when number range is invalid
|
|
62
|
+
- returns error when number range overlaps with existing group
|
|
63
|
+
- returns error when only numberRangeStart is provided
|
|
64
|
+
- returns error when only numberRangeEnd is provided
|
|
65
|
+
- creates a root group with no parent
|
|
66
|
+
- creates a child group with valid parent
|
|
67
|
+
- creates a group with account number range
|
|
68
|
+
- creates a group with sort order
|
|
69
|
+
- emits audit event recording acting user, timestamp, CoA reference, group code, and initial field values
|
|
70
|
+
- passes custom fields through to insert
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# CreateChartOfAccounts
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createChartOfAccounts establishes a new Chart of Accounts container in DRAFT status for a company. The CoA inherits its base currency from the parent company. The referenced company must be in ACTIVE status, which guarantees structural identity completeness including base currency assignment.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- CoA name is required and must be non-empty
|
|
10
|
+
- CoA must reference a valid companyId from the organization module
|
|
11
|
+
- The referenced company must be in ACTIVE status; creating a CoA for a DRAFT or INACTIVE company is rejected
|
|
12
|
+
- CoA inherits its base currency from the parent company's base currency
|
|
13
|
+
- CoA is always created in DRAFT status
|
|
14
|
+
- Description is optional
|
|
15
|
+
- An optional `templateId` can be provided to initialize the CoA from a country-specific localized template; when omitted, a blank CoA is created with no pre-populated account groups or accounts
|
|
16
|
+
- Templates are externally managed configuration data (not owned by this module). Each template is an immutable snapshot containing pre-defined account groups (with numbering ranges) and GL accounts for a specific country or industry. Template storage, versioning, and catalog management are outside the scope of coa-management
|
|
17
|
+
- When `templateId` is provided, the command delegates template resolution to the template provider (external dependency). The provider must return the template's account groups and accounts. If no template provider is configured, templateId is rejected with TEMPLATE_PROVIDER_NOT_CONFIGURED
|
|
18
|
+
- When a valid template is resolved, the command copies the template's account groups (with numbering ranges) and GL accounts into the new CoA in DRAFT status
|
|
19
|
+
- Template-based creation is a convenience shortcut — all copied entities are fully mutable in DRAFT and can be modified before activation
|
|
20
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, initial field values, and whether the CoA was created from a template or blank
|
|
21
|
+
|
|
22
|
+
## Process Flow
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
flowchart TD
|
|
26
|
+
A[Receive create request] --> B{Company exists and is ACTIVE?}
|
|
27
|
+
B -->|No| C[Return error: company not found or not active]
|
|
28
|
+
B -->|Yes| D{Name non-empty?}
|
|
29
|
+
D -->|No| E[Return error: name required]
|
|
30
|
+
D -->|Yes| F[Inherit base currency from company]
|
|
31
|
+
F --> G{templateId provided?}
|
|
32
|
+
G -->|Yes| G2{Template provider configured?}
|
|
33
|
+
G2 -->|No| G3[Return error: template provider not configured]
|
|
34
|
+
G2 -->|Yes| H{Template exists and is valid?}
|
|
35
|
+
H -->|No| I[Return error: template not found]
|
|
36
|
+
H -->|Yes| J[Create CoA in DRAFT with template contents]
|
|
37
|
+
G -->|No| K[Create blank CoA in DRAFT]
|
|
38
|
+
J --> L[Emit audit event]
|
|
39
|
+
K --> L
|
|
40
|
+
L --> M[Return created CoA]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## External Dependencies
|
|
44
|
+
|
|
45
|
+
- [organization::getCompany](../../../organization/docs/queries/GetCompany.md) - Validates that the referenced company exists and is ACTIVE
|
|
46
|
+
- **Template Provider (external)** - Resolves templateId to a template snapshot containing account groups and GL accounts. Template storage, versioning, and catalog management are outside the scope of this module. When no template provider is configured, only blank CoA creation is available
|
|
47
|
+
|
|
48
|
+
## Error Scenarios
|
|
49
|
+
|
|
50
|
+
- **COMPANY_NOT_FOUND**: Referenced company does not exist or is not in ACTIVE status
|
|
51
|
+
- **NAME_REQUIRED**: CoA name is empty or not provided
|
|
52
|
+
- **TEMPLATE_NOT_FOUND**: Specified templateId does not reference a valid template in the template provider
|
|
53
|
+
- **TEMPLATE_PROVIDER_NOT_CONFIGURED**: templateId was provided but no template provider is configured
|
|
54
|
+
|
|
55
|
+
## Test Cases
|
|
56
|
+
|
|
57
|
+
- returns error when company does not exist
|
|
58
|
+
- returns error when company is not ACTIVE
|
|
59
|
+
- returns error when name is empty
|
|
60
|
+
- returns error when templateId is provided but no template provider is configured
|
|
61
|
+
- returns error when templateId does not reference a valid template
|
|
62
|
+
- creates blank CoA in DRAFT status when no templateId is provided
|
|
63
|
+
- creates CoA from template with pre-populated account groups and accounts in DRAFT status
|
|
64
|
+
- creates CoA from template with nested groups provided in child-first order
|
|
65
|
+
- creates CoA with optional description
|
|
66
|
+
- passes custom fields through to insert
|
|
67
|
+
- validates company via organizationQueries when provided
|
|
68
|
+
- returns error when organizationQueries reports company not found
|
|
69
|
+
- creates blank CoA in DRAFT status with inherited base currency when no templateId is provided
|
|
70
|
+
- template-copied entities are mutable and can be modified before activation
|
|
71
|
+
- emits audit event recording acting user, timestamp, and initial field values
|
|
72
|
+
- audit event includes whether CoA was created from template or blank
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# DeactivateAccount
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
deactivateAccount transitions a GL account from ACTIVE to INACTIVE status, preventing new journal postings while preserving the account and its history for regulatory reporting and audit purposes. An optional successor account can be designated during deactivation; posting redirection is owned by the general-ledger module. A pre-deactivation hook is exposed for the GL module to block deactivation when open or unreconciled balances exist.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target account must exist
|
|
10
|
+
- Parent CoA must be in ACTIVE status; deactivating an account under an ARCHIVED CoA is rejected. Note: the DRAFT CoA case is unreachable because account activation requires an ACTIVE CoA, so an ACTIVE account cannot exist under a DRAFT CoA
|
|
11
|
+
- Target account must be in ACTIVE status
|
|
12
|
+
- Deactivating a DRAFT account fails with an invalid state transition error
|
|
13
|
+
- A successor account, when provided, must be ACTIVE at the time of mapping
|
|
14
|
+
- Deactivation exposes a pre-deactivation hook for the GL module to block the transition when open balances exist
|
|
15
|
+
- Without a GL module integrated, deactivation proceeds without balance checks
|
|
16
|
+
- Successor account mapping is optional
|
|
17
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, status transition from ACTIVE to INACTIVE, and successor mapping if provided
|
|
18
|
+
|
|
19
|
+
## Process Flow
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart TD
|
|
23
|
+
A[Receive deactivate request] --> B{Account exists?}
|
|
24
|
+
B -->|No| C[Return error: not found]
|
|
25
|
+
B -->|Yes| B2{Parent CoA is ACTIVE?}
|
|
26
|
+
B2 -->|No| B3[Return error: CoA is not ACTIVE]
|
|
27
|
+
B2 -->|Yes| D{Status is ACTIVE?}
|
|
28
|
+
D -->|No| E[Return error: invalid state transition]
|
|
29
|
+
D -->|Yes| F{Pre-deactivation hook registered?}
|
|
30
|
+
F -->|Yes| G{Balance check passes?}
|
|
31
|
+
G -->|No| H[Return error: open balances]
|
|
32
|
+
G -->|Yes| I{Successor provided?}
|
|
33
|
+
F -->|No| I
|
|
34
|
+
I -->|Yes| J{Successor is ACTIVE?}
|
|
35
|
+
J -->|No| K[Return error: successor not active]
|
|
36
|
+
J -->|Yes| L[Map successor and set INACTIVE]
|
|
37
|
+
I -->|No| L[Set status to INACTIVE]
|
|
38
|
+
L --> M[Emit audit event]
|
|
39
|
+
M --> N[Return deactivated account]
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## External Dependencies
|
|
43
|
+
|
|
44
|
+
- None (GL module balance check is an optional integration hook)
|
|
45
|
+
|
|
46
|
+
## Error Scenarios
|
|
47
|
+
|
|
48
|
+
- **ACCOUNT_NOT_FOUND**: Specified account ID does not exist
|
|
49
|
+
- **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
|
|
50
|
+
- **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
|
|
51
|
+
- **OPEN_BALANCES_EXIST**: Pre-deactivation hook reports open or unreconciled balances (GL module integration)
|
|
52
|
+
- **SUCCESSOR_NOT_ACTIVE**: Specified successor account is not in ACTIVE status
|
|
53
|
+
|
|
54
|
+
## Test Cases
|
|
55
|
+
|
|
56
|
+
- returns error when account does not exist
|
|
57
|
+
- returns error when parent CoA is ARCHIVED
|
|
58
|
+
- returns error when account is not ACTIVE
|
|
59
|
+
- returns error when account is DRAFT
|
|
60
|
+
- returns error when successor account is not ACTIVE
|
|
61
|
+
- deactivates an ACTIVE account without successor
|
|
62
|
+
- deactivates an ACTIVE account with successor mapping
|
|
63
|
+
- deactivates without balance check when GL hook is not registered
|
|
64
|
+
- returns error when GL hook reports open balances
|
|
65
|
+
- emits audit event recording status transition from ACTIVE to INACTIVE and successor mapping
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# DeactivateChartOfAccounts
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
deactivateChartOfAccounts transitions a Chart of Accounts from ACTIVE to ARCHIVED status. Archiving permanently retires the CoA while preserving the historical account structure for audit and restatement purposes. This is a one-way transition — ARCHIVED CoA records cannot be reactivated. The command name follows the canonical verb convention (`deactivate` instead of `archive`); the target status is ARCHIVED.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target CoA must exist
|
|
10
|
+
- Target CoA must be in ACTIVE status
|
|
11
|
+
- Deactivating a DRAFT or already ARCHIVED CoA fails with an invalid state transition error
|
|
12
|
+
- Archived CoA records and their accounts remain queryable for reporting and audit
|
|
13
|
+
- This is a one-way transition; reactivation from ARCHIVED is not permitted
|
|
14
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, and status transition from ACTIVE to ARCHIVED
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive deactivate request] --> B{CoA exists?}
|
|
21
|
+
B -->|No| C[Return error: not found]
|
|
22
|
+
B -->|Yes| D{Status is ACTIVE?}
|
|
23
|
+
D -->|No| E[Return error: invalid state transition]
|
|
24
|
+
D -->|Yes| F[Update status to ARCHIVED]
|
|
25
|
+
F --> G[Emit audit event]
|
|
26
|
+
G --> H[Return archived CoA]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## External Dependencies
|
|
30
|
+
|
|
31
|
+
- None
|
|
32
|
+
|
|
33
|
+
## Error Scenarios
|
|
34
|
+
|
|
35
|
+
- **CHART_OF_ACCOUNTS_NOT_FOUND**: Specified CoA ID does not exist
|
|
36
|
+
- **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
|
|
37
|
+
|
|
38
|
+
## Test Cases
|
|
39
|
+
|
|
40
|
+
- returns error when CoA does not exist
|
|
41
|
+
- returns error when CoA is DRAFT
|
|
42
|
+
- returns error when CoA is already ARCHIVED
|
|
43
|
+
- archives an ACTIVE CoA
|
|
44
|
+
- emits audit event recording status transition from ACTIVE to ARCHIVED
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# DeleteAccount
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
deleteAccount permanently removes a GL account that is in DRAFT status and has no posted transactions. Accounts in ACTIVE or INACTIVE status cannot be deleted — they must be deactivated instead. Accounts with posted transactions cannot be deleted regardless of status, preserving ledger integrity.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target account must exist
|
|
10
|
+
- Parent CoA must be in DRAFT or ACTIVE status; deleting an account under an ARCHIVED CoA is rejected
|
|
11
|
+
- Target account must be in DRAFT status
|
|
12
|
+
- Target account must have no posted transactions
|
|
13
|
+
- Deleting ACTIVE or INACTIVE accounts is rejected
|
|
14
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, CoA reference, account code, and deletion
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive delete request] --> B{Account exists?}
|
|
21
|
+
B -->|No| C[Return error: not found]
|
|
22
|
+
B -->|Yes| B2{Parent CoA is DRAFT or ACTIVE?}
|
|
23
|
+
B2 -->|No| B3[Return error: CoA is ARCHIVED]
|
|
24
|
+
B2 -->|Yes| D{Status is DRAFT?}
|
|
25
|
+
D -->|No| E[Return error: only DRAFT can be deleted]
|
|
26
|
+
D -->|Yes| F{Has posted transactions?}
|
|
27
|
+
F -->|Yes| G[Return error: has posted transactions]
|
|
28
|
+
F -->|No| H[Delete account record]
|
|
29
|
+
H --> I[Emit audit event]
|
|
30
|
+
I --> J[Return success]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## External Dependencies
|
|
34
|
+
|
|
35
|
+
- None
|
|
36
|
+
|
|
37
|
+
## Error Scenarios
|
|
38
|
+
|
|
39
|
+
- **ACCOUNT_NOT_FOUND**: Specified account ID does not exist
|
|
40
|
+
- **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
|
|
41
|
+
- **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
|
|
42
|
+
- **HAS_POSTED_TRANSACTIONS**: Account has posted transactions and cannot be deleted
|
|
43
|
+
|
|
44
|
+
## Test Cases
|
|
45
|
+
|
|
46
|
+
- returns error when account does not exist
|
|
47
|
+
- returns error when parent CoA is ARCHIVED
|
|
48
|
+
- returns error when account is ACTIVE
|
|
49
|
+
- returns error when account is INACTIVE
|
|
50
|
+
- returns error when DRAFT account has posted transactions
|
|
51
|
+
- deletes a DRAFT account with no posted transactions
|
|
52
|
+
- emits audit event recording deletion, acting user, and account code
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# DeleteAccountGroup
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
deleteAccountGroup permanently removes an account group that has no child groups and no assigned accounts. Groups with children or assigned accounts must have those relationships resolved before deletion.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target group must exist
|
|
10
|
+
- Parent CoA must be in DRAFT or ACTIVE status; deleting a group under an ARCHIVED CoA is rejected
|
|
11
|
+
- Group must have no child groups
|
|
12
|
+
- Group must have no accounts assigned to it
|
|
13
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, and deletion of the group
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive delete request] --> B{Group exists?}
|
|
20
|
+
B -->|No| C[Return error: not found]
|
|
21
|
+
B -->|Yes| B2{Parent CoA is DRAFT or ACTIVE?}
|
|
22
|
+
B2 -->|No| B3[Return error: CoA is ARCHIVED]
|
|
23
|
+
B2 -->|Yes| D{Has child groups?}
|
|
24
|
+
D -->|Yes| E[Return error: has children]
|
|
25
|
+
D -->|No| F{Has assigned accounts?}
|
|
26
|
+
F -->|Yes| G[Return error: has assigned accounts]
|
|
27
|
+
F -->|No| H[Delete group]
|
|
28
|
+
H --> I[Emit audit event]
|
|
29
|
+
I --> J[Return success]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## External Dependencies
|
|
33
|
+
|
|
34
|
+
- None
|
|
35
|
+
|
|
36
|
+
## Error Scenarios
|
|
37
|
+
|
|
38
|
+
- **ACCOUNT_GROUP_NOT_FOUND**: Specified group ID does not exist
|
|
39
|
+
- **CHART_OF_ACCOUNTS_ARCHIVED**: Parent CoA is in ARCHIVED status; no modifications are permitted
|
|
40
|
+
- **HAS_CHILD_GROUPS**: Group contains child groups and cannot be deleted
|
|
41
|
+
- **HAS_ASSIGNED_ACCOUNTS**: Group has accounts assigned to it and cannot be deleted
|
|
42
|
+
|
|
43
|
+
## Test Cases
|
|
44
|
+
|
|
45
|
+
- returns error when group does not exist
|
|
46
|
+
- returns error when parent CoA is ARCHIVED
|
|
47
|
+
- returns error when group has child groups
|
|
48
|
+
- returns error when group has assigned accounts
|
|
49
|
+
- deletes a leaf group with no assigned accounts
|
|
50
|
+
- emits audit event recording deletion and acting user
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# DeleteChartOfAccounts
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
deleteChartOfAccounts permanently removes a Chart of Accounts that is still in DRAFT status. Only DRAFT CoA records can be deleted. ACTIVE and ARCHIVED records are preserved for operational and audit purposes.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Target CoA must exist
|
|
10
|
+
- Target CoA must be in DRAFT status; deleting ACTIVE or ARCHIVED CoA is rejected
|
|
11
|
+
- Deletion cascade-deletes all child Account and AccountGroup records belonging to the CoA. Because only DRAFT CoA records can be deleted, and accounts can only be created under a DRAFT or ACTIVE CoA, all child accounts are guaranteed to be in DRAFT status with no posted transactions at this point — making cascade deletion safe and consistent with the account deletion invariant
|
|
12
|
+
- Each cascade-deleted child record (Account and AccountGroup) emits its own audit event, followed by the CoA deletion audit event
|
|
13
|
+
- Emits an audit event via the audit module recording the acting user, timestamp, and deletion of the CoA
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive delete request] --> B{CoA exists?}
|
|
20
|
+
B -->|No| C[Return error: not found]
|
|
21
|
+
B -->|Yes| D{Status is DRAFT?}
|
|
22
|
+
D -->|No| E[Return error: only DRAFT can be deleted]
|
|
23
|
+
D -->|Yes| F[Cascade-delete all child Accounts]
|
|
24
|
+
F --> G[Cascade-delete all child AccountGroups]
|
|
25
|
+
G --> H[Delete CoA record]
|
|
26
|
+
H --> I[Emit audit events for each deleted child and the CoA]
|
|
27
|
+
I --> J[Return success]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## External Dependencies
|
|
31
|
+
|
|
32
|
+
- None
|
|
33
|
+
|
|
34
|
+
## Error Scenarios
|
|
35
|
+
|
|
36
|
+
- **CHART_OF_ACCOUNTS_NOT_FOUND**: Specified CoA ID does not exist
|
|
37
|
+
- **INVALID_STATE_TRANSITION**: Entity is not in the required status for the requested state transition
|
|
38
|
+
|
|
39
|
+
## Test Cases
|
|
40
|
+
|
|
41
|
+
- returns error when CoA does not exist
|
|
42
|
+
- returns error when CoA is ACTIVE
|
|
43
|
+
- returns error when CoA is ARCHIVED
|
|
44
|
+
- deletes a DRAFT CoA with no child records
|
|
45
|
+
- deletes a DRAFT CoA and cascade-deletes all child Accounts
|
|
46
|
+
- deletes a DRAFT CoA and cascade-deletes all child AccountGroups
|
|
47
|
+
- emits audit events for each cascade-deleted Account and AccountGroup
|
|
48
|
+
- emits audit event recording CoA deletion and acting user
|