@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,45 @@
|
|
|
1
|
+
# PolicyFieldRule
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
PolicyFieldRule defines how a specific field is handled during audit capture for a parent AuditPolicy. Each rule specifies a fieldName and a sensitivityMode that controls how the field's value is stored in ChangeDetail records. Sensitivity modes include CAPTURE (store raw value, default), MASK (store masked representation), HASH (store one-way hash), and EXCLUDE (record that the field changed but store null for both values). Field names must be a subset of the target entity's registered auditableFields.
|
|
6
|
+
|
|
7
|
+
Examples: "socialSecurityNumber with EXCLUDE mode", "salary with MASK mode", "amount with CAPTURE mode (default)".
|
|
8
|
+
|
|
9
|
+
## Domain Model Definitions
|
|
10
|
+
|
|
11
|
+
### Model type
|
|
12
|
+
|
|
13
|
+
Standard
|
|
14
|
+
|
|
15
|
+
### Command Definitions
|
|
16
|
+
|
|
17
|
+
- [createAuditPolicy](../commands/CreateAuditPolicy.md) - PolicyFieldRules are created as part of audit policy creation
|
|
18
|
+
- [updateAuditPolicy](../commands/UpdateAuditPolicy.md) - PolicyFieldRules are modified as part of audit policy updates
|
|
19
|
+
|
|
20
|
+
### Query Definitions
|
|
21
|
+
|
|
22
|
+
- [getAuditPolicy](../queries/GetAuditPolicy.md) - PolicyFieldRules are returned as part of audit policy retrieval
|
|
23
|
+
- [listAuditPolicies](../queries/ListAuditPolicies.md) - PolicyFieldRules are returned as part of audit policy listing
|
|
24
|
+
|
|
25
|
+
### Models
|
|
26
|
+
|
|
27
|
+
- PolicyFieldRule
|
|
28
|
+
|
|
29
|
+
### Invariants
|
|
30
|
+
|
|
31
|
+
- Each PolicyFieldRule belongs to exactly one AuditPolicy via auditPolicyId
|
|
32
|
+
- fieldName is required and must be non-empty
|
|
33
|
+
- fieldName must be a member of the target entity's registered auditableFields
|
|
34
|
+
- Duplicate fieldNames within the same AuditPolicy are rejected
|
|
35
|
+
- sensitivityMode must be one of CAPTURE, MASK, HASH, or EXCLUDE; defaults to CAPTURE if not specified
|
|
36
|
+
- When sensitivityMode is MASK, the stored value replaces all but the last 4 characters with asterisks (or stores "***" if the value is 4 characters or fewer)
|
|
37
|
+
- When sensitivityMode is HASH, the stored value is a one-way hash of the original value
|
|
38
|
+
- When sensitivityMode is EXCLUDE, ChangeDetail records store null for both oldValue and newValue
|
|
39
|
+
- Sensitivity modes are enforced at write time — once an audit entry is persisted, the original raw value cannot be recovered from MASK, HASH, or EXCLUDE entries
|
|
40
|
+
- Binary / BLOB fields are not eligible for policy field rules and cannot be added as a fieldName
|
|
41
|
+
|
|
42
|
+
### Relationships
|
|
43
|
+
|
|
44
|
+
- **Belongs To AuditPolicy**: Each PolicyFieldRule is linked to exactly one AuditPolicy via auditPolicyId
|
|
45
|
+
- **Validated Against AuditableEntity**: fieldName must be a member of the target entity's registered auditableFields
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# GetAuditEntry
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetAuditEntry retrieves a single audit entry by its unique identifier. Returns the full AuditEntry record including eventId, actor identity, entity reference, operation type, timestamp, and scope, or null if no matching entry exists.
|
|
6
|
+
|
|
7
|
+
This query requires the `viewAuditHistory` permission at the appropriate scope.
|
|
8
|
+
|
|
9
|
+
## Business Rules
|
|
10
|
+
|
|
11
|
+
- Lookup by `id` performs an exact UUID match
|
|
12
|
+
- Returns the full AuditEntry record including all fields
|
|
13
|
+
- Returns null when no matching entry is found
|
|
14
|
+
- Caller must hold `viewAuditHistory` permission at the appropriate scope
|
|
15
|
+
- A caller with company-scoped permission can only retrieve entries for their assigned companies
|
|
16
|
+
- A caller with global-scoped permission can retrieve global (company-unscoped) entries
|
|
17
|
+
|
|
18
|
+
## Process Flow
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart TD
|
|
22
|
+
A[Receive lookup request] --> B{Caller has viewAuditHistory?}
|
|
23
|
+
B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
|
|
24
|
+
B -->|Yes| D[Query AuditEntry by id]
|
|
25
|
+
D --> E{Found?}
|
|
26
|
+
E -->|Yes| F{Caller authorized for entry's scope?}
|
|
27
|
+
F -->|No| G[Return error: UNAUTHORIZED]
|
|
28
|
+
F -->|Yes| H[Return audit entry]
|
|
29
|
+
E -->|No| I[Return null]
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## External Dependencies
|
|
33
|
+
|
|
34
|
+
- None
|
|
35
|
+
|
|
36
|
+
## Error Scenarios
|
|
37
|
+
|
|
38
|
+
- **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditHistory` permission
|
|
39
|
+
- **UNAUTHORIZED**: Caller's permission scope does not cover the requested entry's scope
|
|
40
|
+
|
|
41
|
+
## Test Cases
|
|
42
|
+
|
|
43
|
+
- returns audit entry when found by id
|
|
44
|
+
- returns null when audit entry not found
|
|
45
|
+
- returns entry with all fields populated
|
|
46
|
+
- returns company-scoped entry when caller has matching company permission
|
|
47
|
+
- returns global entry when caller has global-scoped permission
|
|
48
|
+
- rejects when caller lacks viewAuditHistory permission
|
|
49
|
+
- rejects when caller lacks permission for entry's company scope
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# GetAuditPolicy
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetAuditPolicy retrieves a single audit policy by its unique identifier. Returns the full AuditPolicy record including status, entity name, operation type, company scope, and associated PolicyFieldRule records, or null if no matching policy exists.
|
|
6
|
+
|
|
7
|
+
This query requires the `manageAuditPolicies` permission at the appropriate scope.
|
|
8
|
+
|
|
9
|
+
## Business Rules
|
|
10
|
+
|
|
11
|
+
- Lookup by `id` performs an exact UUID match
|
|
12
|
+
- Returns the full AuditPolicy record including associated PolicyFieldRules
|
|
13
|
+
- Does not filter by status — returns DRAFT, ACTIVE, and INACTIVE policies
|
|
14
|
+
- Returns null when no matching policy is found
|
|
15
|
+
- Caller must hold `manageAuditPolicies` permission at the appropriate scope
|
|
16
|
+
- A caller with company-scoped `manageAuditPolicies` can only retrieve policies for their assigned companies
|
|
17
|
+
- A caller with global-scoped `manageAuditPolicies` can only retrieve global policies
|
|
18
|
+
|
|
19
|
+
## Process Flow
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart TD
|
|
23
|
+
A[Receive lookup request] --> B{Caller has manageAuditPolicies?}
|
|
24
|
+
B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
|
|
25
|
+
B -->|Yes| D[Query AuditPolicy by id]
|
|
26
|
+
D --> E{Found?}
|
|
27
|
+
E -->|Yes| F{Caller authorized for policy's scope?}
|
|
28
|
+
F -->|No| G[Return error: UNAUTHORIZED]
|
|
29
|
+
F -->|Yes| H[Load associated PolicyFieldRules]
|
|
30
|
+
H --> I[Return policy with field rules]
|
|
31
|
+
E -->|No| J[Return null]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## External Dependencies
|
|
35
|
+
|
|
36
|
+
- None
|
|
37
|
+
|
|
38
|
+
## Error Scenarios
|
|
39
|
+
|
|
40
|
+
- **INSUFFICIENT_PERMISSION**: Caller lacks `manageAuditPolicies` permission
|
|
41
|
+
- **UNAUTHORIZED**: Caller's permission scope does not cover the policy's scope
|
|
42
|
+
|
|
43
|
+
## Test Cases
|
|
44
|
+
|
|
45
|
+
- returns audit policy when found by id
|
|
46
|
+
- returns null when audit policy not found
|
|
47
|
+
- returns DRAFT policy
|
|
48
|
+
- returns ACTIVE policy
|
|
49
|
+
- returns INACTIVE policy
|
|
50
|
+
- includes associated PolicyFieldRules in response
|
|
51
|
+
- rejects when caller lacks manageAuditPolicies permission
|
|
52
|
+
- rejects when caller lacks permission for policy's company scope
|
|
53
|
+
- returns global policy when caller has global-scoped permission
|
|
54
|
+
- rejects when global-scoped caller retrieves company-scoped policy
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# GetAuditSummary
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetAuditSummary returns aggregated audit statistics without exposing field-level change details. It provides counts of audit entries grouped by configurable dimensions such as entityType, operationType, actorType, and time period. This query is designed for compliance dashboards and operational oversight where administrators need a high-level view of audit activity without access to sensitive before/after field values.
|
|
6
|
+
|
|
7
|
+
This query requires the `viewAuditSummary` permission at the appropriate scope — a lower-privilege alternative to `viewAuditHistory` which grants access to full audit entry details.
|
|
8
|
+
|
|
9
|
+
## Business Rules
|
|
10
|
+
|
|
11
|
+
- Caller must hold `viewAuditSummary` permission at the appropriate scope
|
|
12
|
+
- A caller with company-scoped `viewAuditSummary` can only retrieve summaries for their assigned companies
|
|
13
|
+
- A caller with global-scoped `viewAuditSummary` can retrieve summaries for global (company-unscoped) entries
|
|
14
|
+
- At least one grouping dimension must be specified (entityType, operationType, actorType, or timePeriod)
|
|
15
|
+
- Optional filters: entityType, operationType, actorType, companyId, date range
|
|
16
|
+
- An optional `scope` parameter accepts COMPANY, GLOBAL, or ALL to control which entries are summarized
|
|
17
|
+
- When `scope` is COMPANY (or companyId is provided without explicit scope), returns summary counts scoped to that company only; companyId is required in this case
|
|
18
|
+
- When `scope` is GLOBAL (or companyId is omitted without explicit scope), returns summary counts for global entries only
|
|
19
|
+
- When `scope` is ALL, returns combined summary counts for all scopes the caller is authorized for; if companyId is also provided, it acts as an additional filter within the combined results
|
|
20
|
+
- When both company and global scope are requested via `scope=ALL`, the caller must hold `viewAuditSummary` at each scope they wish to see — unauthorized scopes are silently excluded from the result
|
|
21
|
+
- Response contains only aggregate counts — no eventId, entityId, actorId, change details, or other entry-level data is returned
|
|
22
|
+
- Time period grouping supports DAY, WEEK, and MONTH granularities
|
|
23
|
+
|
|
24
|
+
## Process Flow
|
|
25
|
+
|
|
26
|
+
```mermaid
|
|
27
|
+
flowchart TD
|
|
28
|
+
A[Receive summary request] --> B{Caller has viewAuditSummary?}
|
|
29
|
+
B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
|
|
30
|
+
B -->|Yes| D{At least one grouping dimension?}
|
|
31
|
+
D -->|No| E[Return error: VALIDATION_ERROR]
|
|
32
|
+
D -->|Yes| F[Apply scope and filter criteria]
|
|
33
|
+
F --> G{Determine scope}
|
|
34
|
+
G -->|scope=COMPANY or companyId provided| H[Scope to company entries]
|
|
35
|
+
G -->|scope=GLOBAL or no companyId| I[Scope to global entries]
|
|
36
|
+
G -->|scope=ALL| I2[Combine company + global entries\nfor scopes caller is authorized for]
|
|
37
|
+
H --> J[Aggregate counts by grouping dimensions]
|
|
38
|
+
I --> J
|
|
39
|
+
I2 --> J
|
|
40
|
+
J --> K[Return summary results]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## External Dependencies
|
|
44
|
+
|
|
45
|
+
- None
|
|
46
|
+
|
|
47
|
+
## Error Scenarios
|
|
48
|
+
|
|
49
|
+
- **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditSummary` permission
|
|
50
|
+
- **UNAUTHORIZED**: Caller's permission scope does not cover the requested company scope
|
|
51
|
+
- **VALIDATION_ERROR**: No grouping dimension specified (at least one of entityType, operationType, actorType, or timePeriod is required)
|
|
52
|
+
- **VALIDATION_ERROR**: `scope` is COMPANY but no companyId is provided
|
|
53
|
+
- **INVALID_SCOPE**: `scope` is not one of COMPANY, GLOBAL, or ALL
|
|
54
|
+
|
|
55
|
+
## Test Cases
|
|
56
|
+
|
|
57
|
+
- returns entry counts grouped by entityType
|
|
58
|
+
- returns entry counts grouped by operationType
|
|
59
|
+
- returns entry counts grouped by actorType
|
|
60
|
+
- returns entry counts grouped by time period (DAY)
|
|
61
|
+
- returns entry counts grouped by time period (WEEK)
|
|
62
|
+
- returns entry counts grouped by time period (MONTH)
|
|
63
|
+
- combines multiple grouping dimensions
|
|
64
|
+
- filters by entityType before aggregation
|
|
65
|
+
- filters by operationType before aggregation
|
|
66
|
+
- filters by date range before aggregation
|
|
67
|
+
- filters by companyId returning only company-scoped counts
|
|
68
|
+
- returns global entry counts when companyId is omitted
|
|
69
|
+
- returns combined company and global counts when scope is ALL
|
|
70
|
+
- restricts combined results to scopes the caller is authorized for
|
|
71
|
+
- returns only company counts in combined scope when caller lacks global permission
|
|
72
|
+
- returns only global counts in combined scope when caller lacks company permission
|
|
73
|
+
- filters combined scope results by companyId when both scope=ALL and companyId are provided
|
|
74
|
+
- rejects scope=COMPANY when companyId is not provided
|
|
75
|
+
- rejects invalid scope value
|
|
76
|
+
- returns zero counts when no entries match filters
|
|
77
|
+
- rejects when no grouping dimension is specified
|
|
78
|
+
- rejects when caller lacks viewAuditSummary permission
|
|
79
|
+
- rejects when caller lacks permission for requested company scope
|
|
80
|
+
- restricts company-scoped caller to their company even when scope=GLOBAL
|
|
81
|
+
- restricts company-scoped caller to their company even when scope=ALL
|
|
82
|
+
- restricts global-scoped caller to global entries even when scope=COMPANY
|
|
83
|
+
- restricts global-scoped caller to global entries even when scope=ALL
|
|
84
|
+
- does not expose field-level change details in response
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# GetChangeDetails
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetChangeDetails retrieves all field-level change detail records linked to a specific audit entry. Returns a list of ChangeDetail records containing the fieldName, oldValue, and newValue for each field that changed, enabling precise before/after comparison at the field level.
|
|
6
|
+
|
|
7
|
+
This query requires the `viewAuditHistory` permission at the appropriate scope.
|
|
8
|
+
|
|
9
|
+
## Business Rules
|
|
10
|
+
|
|
11
|
+
- Lookup by `auditEntryId` returns all ChangeDetail records for that audit entry
|
|
12
|
+
- Returns an empty list if the audit entry has no change details
|
|
13
|
+
- Returns an error if the referenced audit entry does not exist
|
|
14
|
+
- Authorization is checked against the parent AuditEntry's scope: if the entry is company-scoped, the caller must hold `viewAuditHistory` for that company; if the entry is global, the caller must hold global-scoped `viewAuditHistory`
|
|
15
|
+
- A caller with company-scoped permission can only retrieve change details for entries belonging to their assigned companies
|
|
16
|
+
- A caller with global-scoped permission can retrieve change details for global (company-unscoped) entries
|
|
17
|
+
- ChangeDetail records reflect sensitivity mode processing applied at write time (values may be masked, hashed, or excluded)
|
|
18
|
+
- Caller must hold `viewAuditHistory` permission at the appropriate scope
|
|
19
|
+
|
|
20
|
+
## Process Flow
|
|
21
|
+
|
|
22
|
+
```mermaid
|
|
23
|
+
flowchart TD
|
|
24
|
+
A[Receive query request] --> B{Caller has viewAuditHistory?}
|
|
25
|
+
B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
|
|
26
|
+
B -->|Yes| D{AuditEntry exists?}
|
|
27
|
+
D -->|No| E[Return error: AUDIT_ENTRY_NOT_FOUND]
|
|
28
|
+
D -->|Yes| F{Caller authorized for entry's scope?}
|
|
29
|
+
F -->|No| F2[Return error: UNAUTHORIZED]
|
|
30
|
+
F -->|Yes| G[Query ChangeDetails by auditEntryId]
|
|
31
|
+
G --> H[Return list of change details]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## External Dependencies
|
|
35
|
+
|
|
36
|
+
- None
|
|
37
|
+
|
|
38
|
+
## Error Scenarios
|
|
39
|
+
|
|
40
|
+
- **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditHistory` permission
|
|
41
|
+
- **UNAUTHORIZED**: Caller's permission scope does not cover the entry's scope
|
|
42
|
+
- **AUDIT_ENTRY_NOT_FOUND**: Referenced audit entry does not exist
|
|
43
|
+
|
|
44
|
+
## Test Cases
|
|
45
|
+
|
|
46
|
+
- returns all change details for an audit entry
|
|
47
|
+
- returns empty list when audit entry has no change details
|
|
48
|
+
- returns change details with masked values for MASK sensitivity mode
|
|
49
|
+
- returns change details with hashed values for HASH sensitivity mode
|
|
50
|
+
- returns change details with null values for EXCLUDE sensitivity mode
|
|
51
|
+
- returns change details with raw values for CAPTURE sensitivity mode
|
|
52
|
+
- returns change details for company-scoped entry when caller has matching company permission
|
|
53
|
+
- returns change details for global entry when caller has global-scoped permission
|
|
54
|
+
- rejects when caller lacks permission for entry's company scope
|
|
55
|
+
- returns error when audit entry does not exist
|
|
56
|
+
- rejects when caller lacks viewAuditHistory permission
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# ListAuditPolicies
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
ListAuditPolicies retrieves a list of audit policies with optional filters by entity name, status, company scope, and operation type. Returns policies with their associated PolicyFieldRule records. This query supports administrative views for managing audit configurations across entities and companies.
|
|
6
|
+
|
|
7
|
+
This query requires the `manageAuditPolicies` permission at the appropriate scope.
|
|
8
|
+
|
|
9
|
+
## Business Rules
|
|
10
|
+
|
|
11
|
+
- All filter parameters are optional
|
|
12
|
+
- Filtering by entityName returns only policies targeting that entity
|
|
13
|
+
- Filtering by status returns only policies in the specified status (DRAFT, ACTIVE, INACTIVE)
|
|
14
|
+
- Filtering by companyId returns only policies scoped to that company
|
|
15
|
+
- Filtering by companyId explicitly set to null returns only global policies (companyId = null)
|
|
16
|
+
- Omitting the companyId filter entirely returns policies of all scopes (global and company-scoped), subject to the caller's permission scope
|
|
17
|
+
- Filtering by operationType returns only policies for that operation
|
|
18
|
+
- Caller must hold `manageAuditPolicies` permission at the appropriate scope
|
|
19
|
+
- A caller with company-scoped `manageAuditPolicies` can only retrieve policies for their assigned companies
|
|
20
|
+
- A caller with global-scoped `manageAuditPolicies` can only retrieve global policies
|
|
21
|
+
|
|
22
|
+
## Process Flow
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
flowchart TD
|
|
26
|
+
A[Receive list request] --> B{Caller has manageAuditPolicies?}
|
|
27
|
+
B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
|
|
28
|
+
B -->|Yes| D[Build query from filter criteria]
|
|
29
|
+
D --> E[Apply scope restrictions based on caller's permissions]
|
|
30
|
+
E --> F[Load matching policies with PolicyFieldRules]
|
|
31
|
+
F --> G[Return list of policies]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## External Dependencies
|
|
35
|
+
|
|
36
|
+
- None
|
|
37
|
+
|
|
38
|
+
## Error Scenarios
|
|
39
|
+
|
|
40
|
+
- **INSUFFICIENT_PERMISSION**: Caller lacks `manageAuditPolicies` permission
|
|
41
|
+
- **UNAUTHORIZED**: Caller's permission scope does not cover the requested scope
|
|
42
|
+
|
|
43
|
+
## Test Cases
|
|
44
|
+
|
|
45
|
+
- returns all policies when no filters applied
|
|
46
|
+
- returns policies filtered by entityName
|
|
47
|
+
- returns policies filtered by status
|
|
48
|
+
- returns policies filtered by companyId
|
|
49
|
+
- returns only global policies when companyId filter is explicitly null
|
|
50
|
+
- returns policies filtered by operationType
|
|
51
|
+
- combines multiple filter criteria
|
|
52
|
+
- returns policy objects with expected fields
|
|
53
|
+
- returns empty list when no policies match
|
|
54
|
+
- paginates results correctly
|
|
55
|
+
- rejects when caller lacks manageAuditPolicies permission
|
|
56
|
+
- rejects when caller with company-scoped permission requests policies for a different company
|
|
57
|
+
- returns only global policies when caller has global-scoped permission
|
|
58
|
+
- rejects when global-scoped caller requests company-scoped policies
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# SearchAuditEntries
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
SearchAuditEntries searches and filters audit entries using multiple criteria: actor identity (actorType, actorId), entity reference (entityType, entityId), operation type, date range, company scope, and correlationId. Results are returned in chronological order by default and support pagination for efficient retrieval of large result sets.
|
|
6
|
+
|
|
7
|
+
This query requires the `viewAuditHistory` permission at the appropriate scope.
|
|
8
|
+
|
|
9
|
+
## Business Rules
|
|
10
|
+
|
|
11
|
+
- All filter parameters are optional; at least one must be provided
|
|
12
|
+
- Querying by actorId returns only entries for that actor
|
|
13
|
+
- Querying by entityType and entityId returns the full change history for a specific record
|
|
14
|
+
- Querying by operationType filters entries to only the specified operation
|
|
15
|
+
- Querying by date range returns only entries whose timestamp falls within the range
|
|
16
|
+
- An optional `scope` parameter accepts COMPANY, GLOBAL, or ALL to control which entries are returned
|
|
17
|
+
- When `scope` is COMPANY (or companyId is provided without explicit scope), returns only entries scoped to that company; companyId is required in this case
|
|
18
|
+
- When `scope` is GLOBAL (or companyId is omitted without explicit scope), returns only global (company-unscoped) entries
|
|
19
|
+
- When `scope` is ALL, returns combined results for all scopes the caller is authorized for; if companyId is also provided, it acts as an additional filter within the combined results
|
|
20
|
+
- When `scope` is ALL, the caller must hold `viewAuditHistory` at each scope they wish to see — unauthorized scopes are silently excluded from the result
|
|
21
|
+
- An invalid `scope` value is rejected with INVALID_SCOPE
|
|
22
|
+
- `scope` is COMPANY but no companyId is provided is rejected with VALIDATION_ERROR
|
|
23
|
+
- Results are returned in chronological order by default
|
|
24
|
+
- Large result sets support pagination
|
|
25
|
+
- Caller must hold `viewAuditHistory` permission at the appropriate scope
|
|
26
|
+
- A caller with company-scoped permission can only retrieve entries for their assigned companies
|
|
27
|
+
|
|
28
|
+
## Process Flow
|
|
29
|
+
|
|
30
|
+
```mermaid
|
|
31
|
+
flowchart TD
|
|
32
|
+
A[Receive search request] --> B{Caller has viewAuditHistory?}
|
|
33
|
+
B -->|No| C[Return error: INSUFFICIENT_PERMISSION]
|
|
34
|
+
B -->|Yes| D[Build query from filter criteria]
|
|
35
|
+
D --> D2{At least one filter provided?}
|
|
36
|
+
D2 -->|No| D3[Return error: VALIDATION_ERROR]
|
|
37
|
+
D2 -->|Yes| E{Determine scope}
|
|
38
|
+
E -->|scope=COMPANY or companyId provided| F[Scope to company entries]
|
|
39
|
+
E -->|scope=GLOBAL or no companyId| G[Scope to global entries]
|
|
40
|
+
E -->|scope=ALL| G2[Combine company + global entries\nfor scopes caller is authorized for]
|
|
41
|
+
F --> H[Apply remaining filters]
|
|
42
|
+
G --> H
|
|
43
|
+
G2 --> H
|
|
44
|
+
H --> I[Order by timestamp ascending]
|
|
45
|
+
I --> J[Apply pagination]
|
|
46
|
+
J --> K[Return paginated results]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## External Dependencies
|
|
50
|
+
|
|
51
|
+
- None
|
|
52
|
+
|
|
53
|
+
## Error Scenarios
|
|
54
|
+
|
|
55
|
+
- **INSUFFICIENT_PERMISSION**: Caller lacks `viewAuditHistory` permission
|
|
56
|
+
- **UNAUTHORIZED**: Caller's permission scope does not cover the requested company scope
|
|
57
|
+
- **VALIDATION_ERROR**: No filter parameters provided (at least one is required)
|
|
58
|
+
- **VALIDATION_ERROR**: `scope` is COMPANY but no companyId is provided
|
|
59
|
+
- **INVALID_SCOPE**: `scope` is not one of COMPANY, GLOBAL, or ALL
|
|
60
|
+
|
|
61
|
+
## Test Cases
|
|
62
|
+
|
|
63
|
+
- returns entries filtered by actorId
|
|
64
|
+
- returns entries filtered by actorType and actorId
|
|
65
|
+
- returns entries filtered by entityType
|
|
66
|
+
- returns entries filtered by entityType and entityId
|
|
67
|
+
- returns entries filtered by operationType
|
|
68
|
+
- returns entries filtered by date range
|
|
69
|
+
- returns entries filtered by companyId
|
|
70
|
+
- returns global entries when companyId is omitted
|
|
71
|
+
- returns only company entries when scope is COMPANY
|
|
72
|
+
- returns only global entries when scope is GLOBAL
|
|
73
|
+
- returns combined company and global entries when scope is ALL
|
|
74
|
+
- restricts combined results to scopes the caller is authorized for when scope is ALL
|
|
75
|
+
- returns only company entries in combined scope when caller lacks global permission
|
|
76
|
+
- returns only global entries in combined scope when caller lacks company permission
|
|
77
|
+
- filters combined scope results by companyId when both scope=ALL and companyId are provided
|
|
78
|
+
- rejects scope=COMPANY when companyId is not provided
|
|
79
|
+
- rejects invalid scope value
|
|
80
|
+
- returns entries filtered by correlationId
|
|
81
|
+
- combines multiple filter criteria
|
|
82
|
+
- returns results in chronological order
|
|
83
|
+
- paginates large result sets
|
|
84
|
+
- returns empty list when no entries match
|
|
85
|
+
- rejects when no filter parameters are provided
|
|
86
|
+
- rejects when caller lacks viewAuditHistory permission
|
|
87
|
+
- rejects when caller lacks permission for requested company scope
|
|
88
|
+
- restricts company-scoped caller to their company even when scope=GLOBAL
|
|
89
|
+
- restricts company-scoped caller to their company even when scope=ALL
|
|
90
|
+
- restricts global-scoped caller to global entries even when scope=COMPANY
|
|
91
|
+
- restricts global-scoped caller to global entries even when scope=ALL
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createGetDB,
|
|
3
|
+
type Generated,
|
|
4
|
+
type Timestamp,
|
|
5
|
+
type NamespaceDB,
|
|
6
|
+
type NamespaceInsertable,
|
|
7
|
+
type NamespaceSelectable,
|
|
8
|
+
type NamespaceTable,
|
|
9
|
+
type NamespaceTableName,
|
|
10
|
+
type NamespaceTransaction,
|
|
11
|
+
type NamespaceUpdateable,
|
|
12
|
+
} from "@tailor-platform/sdk/kysely";
|
|
13
|
+
|
|
14
|
+
export interface Namespace {
|
|
15
|
+
"main-db": {
|
|
16
|
+
AuditEntry: {
|
|
17
|
+
id: Generated<string>;
|
|
18
|
+
eventId: string;
|
|
19
|
+
actorType: string;
|
|
20
|
+
actorId: string;
|
|
21
|
+
entityType: string;
|
|
22
|
+
entityId: string;
|
|
23
|
+
operationType: string;
|
|
24
|
+
companyId: string | null;
|
|
25
|
+
correlationId: string | null;
|
|
26
|
+
ipAddress: string | null;
|
|
27
|
+
userAgent: string | null;
|
|
28
|
+
sessionId: string | null;
|
|
29
|
+
requestId: string | null;
|
|
30
|
+
onBehalfOf: string | null;
|
|
31
|
+
timestamp: Timestamp;
|
|
32
|
+
createdAt: Generated<Timestamp>;
|
|
33
|
+
updatedAt: Timestamp | null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
AuditPolicy: {
|
|
37
|
+
id: Generated<string>;
|
|
38
|
+
entityName: string;
|
|
39
|
+
companyId: string | null;
|
|
40
|
+
operationType: string;
|
|
41
|
+
status: string;
|
|
42
|
+
createdAt: Generated<Timestamp>;
|
|
43
|
+
updatedAt: Timestamp | null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
AuditableEntity: {
|
|
47
|
+
id: Generated<string>;
|
|
48
|
+
entityName: string;
|
|
49
|
+
entityScope: string;
|
|
50
|
+
auditableFields: string;
|
|
51
|
+
createdAt: Generated<Timestamp>;
|
|
52
|
+
updatedAt: Timestamp | null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
ChangeDetail: {
|
|
56
|
+
id: Generated<string>;
|
|
57
|
+
auditEntryId: string;
|
|
58
|
+
fieldName: string;
|
|
59
|
+
oldValue: string | null;
|
|
60
|
+
newValue: string | null;
|
|
61
|
+
createdAt: Generated<Timestamp>;
|
|
62
|
+
updatedAt: Timestamp | null;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
PolicyFieldRule: {
|
|
66
|
+
id: Generated<string>;
|
|
67
|
+
auditPolicyId: string;
|
|
68
|
+
fieldName: string;
|
|
69
|
+
sensitivityMode: string;
|
|
70
|
+
createdAt: Generated<Timestamp>;
|
|
71
|
+
updatedAt: Timestamp | null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
Company: {
|
|
75
|
+
id: Generated<string>;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const getDB = createGetDB<Namespace>();
|
|
81
|
+
|
|
82
|
+
export type DB<N extends keyof Namespace = keyof Namespace> = NamespaceDB<Namespace, N>;
|
|
83
|
+
|
|
84
|
+
export type Transaction<K extends keyof Namespace | DB = keyof Namespace> =
|
|
85
|
+
NamespaceTransaction<Namespace, K>;
|
|
86
|
+
|
|
87
|
+
type TableName = NamespaceTableName<Namespace>;
|
|
88
|
+
export type Table<T extends TableName> = NamespaceTable<Namespace, T>;
|
|
89
|
+
|
|
90
|
+
export type Insertable<T extends TableName> = NamespaceInsertable<Namespace, T>;
|
|
91
|
+
export type Selectable<T extends TableName> = NamespaceSelectable<Namespace, T>;
|
|
92
|
+
export type Updateable<T extends TableName> = NamespaceUpdateable<Namespace, T>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Stub types for cross-module dependencies — used only for codegen.
|
|
2
|
+
// At runtime, actual types are injected via defineModule() params.
|
|
3
|
+
// TODO: Replace with SDK-level externalTypes support when available.
|
|
4
|
+
import {
|
|
5
|
+
db,
|
|
6
|
+
unsafeAllowAllGqlPermission,
|
|
7
|
+
unsafeAllowAllTypePermission,
|
|
8
|
+
} from "@tailor-platform/sdk";
|
|
9
|
+
|
|
10
|
+
export const company = db
|
|
11
|
+
.type("Company", {})
|
|
12
|
+
.permission(unsafeAllowAllTypePermission)
|
|
13
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// @generated — do not edit
|
|
2
|
+
import { createDomainError } from "@tailor-platform/erp-kit/module";
|
|
3
|
+
|
|
4
|
+
// Note: Permission checks use the shared InsufficientPermissionError from defineCommand,
|
|
5
|
+
// not a module-specific variant. See shared/errors.ts and shared/defineCommand.ts.
|
|
6
|
+
|
|
7
|
+
export const UnauthorizedError = createDomainError(
|
|
8
|
+
"UnauthorizedError", "AUDIT_UNAUTHORIZED",
|
|
9
|
+
(identifier: string) => `Caller's permission scope does not cover this policy (e.g., company-scoped caller managing a different company's policy, or global-scoped caller managing a company-scoped policy): ${identifier}`,
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
export const PolicyNotFoundError = createDomainError(
|
|
13
|
+
"PolicyNotFoundError", "AUDIT_POLICY_NOT_FOUND",
|
|
14
|
+
(identifier: string) => `Specified policy ID does not exist: ${identifier}`,
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export const InvalidStateError = createDomainError(
|
|
18
|
+
"InvalidStateError", "AUDIT_INVALID_STATE",
|
|
19
|
+
(identifier: string) => `Policy is not in the required status for this operation: ${identifier}`,
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export const IncompletePolicyError = createDomainError(
|
|
23
|
+
"IncompletePolicyError", "AUDIT_INCOMPLETE_POLICY",
|
|
24
|
+
(identifier: string) => `Policy is missing entity name or operation type: ${identifier}`,
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export const EntityTypeNotRegisteredError = createDomainError(
|
|
28
|
+
"EntityTypeNotRegisteredError", "AUDIT_ENTITY_TYPE_NOT_REGISTERED",
|
|
29
|
+
(identifier: string) => `The target entity name does not reference a currently registered auditable entity: ${identifier}`,
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
export const ConflictingActivePolicyError = createDomainError(
|
|
33
|
+
"ConflictingActivePolicyError", "AUDIT_CONFLICTING_ACTIVE_POLICY",
|
|
34
|
+
(identifier: string) => `An ACTIVE policy already exists for the same (entityName, companyId, operationType); deactivate it first or use replaceAuditPolicy: ${identifier}`,
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
export const ScopeMismatchError = createDomainError(
|
|
38
|
+
"ScopeMismatchError", "AUDIT_SCOPE_MISMATCH",
|
|
39
|
+
(identifier: string) => `companyId provided for a global entity, or companyId null for a company-bound entity: ${identifier}`,
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
export const InvalidFieldNameError = createDomainError(
|
|
43
|
+
"InvalidFieldNameError", "AUDIT_INVALID_FIELD_NAME",
|
|
44
|
+
(identifier: string) => `A field name in field-level rules is empty or not in the entity's auditableFields: ${identifier}`,
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
export const DuplicateFieldNameError = createDomainError(
|
|
48
|
+
"DuplicateFieldNameError", "AUDIT_DUPLICATE_FIELD_NAME",
|
|
49
|
+
(identifier: string) => `The same field name appears more than once in field-level rules: ${identifier}`,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
export const InvalidOperationTypeError = createDomainError(
|
|
53
|
+
"InvalidOperationTypeError", "AUDIT_INVALID_OPERATION_TYPE",
|
|
54
|
+
(identifier: string) => `operationType is missing or not one of CREATE, UPDATE, DELETE: ${identifier}`,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
export const InvalidSensitivityModeError = createDomainError(
|
|
58
|
+
"InvalidSensitivityModeError", "AUDIT_INVALID_SENSITIVITY_MODE",
|
|
59
|
+
(identifier: string) => `sensitivityMode is not one of CAPTURE, MASK, HASH, EXCLUDE: ${identifier}`,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
export const InvalidActorError = createDomainError(
|
|
63
|
+
"InvalidActorError", "AUDIT_INVALID_ACTOR",
|
|
64
|
+
(identifier: string) => `actorType is missing or not one of USER, SYSTEM, SERVICE; or actorId is empty: ${identifier}`,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
export const MissingEntityIdError = createDomainError(
|
|
68
|
+
"MissingEntityIdError", "AUDIT_MISSING_ENTITY_ID",
|
|
69
|
+
(identifier: string) => `entityId is empty or not provided: ${identifier}`,
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
export const MissingEventIdError = createDomainError(
|
|
73
|
+
"MissingEventIdError", "AUDIT_MISSING_EVENT_ID",
|
|
74
|
+
(identifier: string) => `eventId is empty or not a valid UUID: ${identifier}`,
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
export const ValidationErrorError = createDomainError(
|
|
78
|
+
"ValidationErrorError", "AUDIT_VALIDATION_ERROR",
|
|
79
|
+
(identifier: string) => `CREATE or DELETE operation submitted with an empty changes array or with no auditable changes remaining after policy filtering; or correlationId provided but not a valid UUID: ${identifier}`,
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
export const InvalidEntityNameError = createDomainError(
|
|
83
|
+
"InvalidEntityNameError", "AUDIT_INVALID_ENTITY_NAME",
|
|
84
|
+
(identifier: string) => `entityName is empty or not provided: ${identifier}`,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
export const DuplicateEntityNameError = createDomainError(
|
|
88
|
+
"DuplicateEntityNameError", "AUDIT_DUPLICATE_ENTITY_NAME",
|
|
89
|
+
(identifier: string) => `An entity with the same name is already registered: ${identifier}`,
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
export const InvalidEntityScopeError = createDomainError(
|
|
93
|
+
"InvalidEntityScopeError", "AUDIT_INVALID_ENTITY_SCOPE",
|
|
94
|
+
(identifier: string) => `entityScope is missing or not one of COMPANY_BOUND, GLOBAL: ${identifier}`,
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
export const InvalidAuditableFieldsError = createDomainError(
|
|
98
|
+
"InvalidAuditableFieldsError", "AUDIT_INVALID_AUDITABLE_FIELDS",
|
|
99
|
+
(identifier: string) => `auditableFields is empty, contains an empty field name, or contains a field with an ineligible fieldType (any type outside scalar, richtext, array, relation, file): ${identifier}`,
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
export const NoActivePolicyToReplaceError = createDomainError(
|
|
103
|
+
"NoActivePolicyToReplaceError", "AUDIT_NO_ACTIVE_POLICY_TO_REPLACE",
|
|
104
|
+
(identifier: string) => `No ACTIVE policy exists for the same entityName; use activateAuditPolicy instead: ${identifier}`,
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
export const TargetMismatchError = createDomainError(
|
|
108
|
+
"TargetMismatchError", "AUDIT_TARGET_MISMATCH",
|
|
109
|
+
(identifier: string) => `The existing ACTIVE policy does not match the replacement's companyId or operationType: ${identifier}`,
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
export const InvalidScopeError = createDomainError(
|
|
113
|
+
"InvalidScopeError", "AUDIT_INVALID_SCOPE",
|
|
114
|
+
(identifier: string) => `scope is not one of COMPANY, GLOBAL, or ALL: ${identifier}`,
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
export const AuditEntryNotFoundError = createDomainError(
|
|
118
|
+
"AuditEntryNotFoundError", "AUDIT_AUDIT_ENTRY_NOT_FOUND",
|
|
119
|
+
(identifier: string) => `Referenced audit entry does not exist: ${identifier}`,
|
|
120
|
+
);
|