@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,59 @@
|
|
|
1
|
+
# Partner Lifecycle
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Business Partner is the unified entity representing any external party — customer, vendor, or both — with whom the organization conducts business. Partners are classified by type: ORGANIZATION (a legal entity such as a company) or INDIVIDUAL (a natural person). Each partner has a lifecycle state machine (DRAFT → ACTIVE ↔ INACTIVE) that controls when the partner can be referenced in downstream transactions.
|
|
6
|
+
|
|
7
|
+
Partners are scoped to a company (via `companyId` from the organization module) and carry core master data such as name, type, and optional preferred transaction currency. All downstream modules — sales, purchasing, and accounting — reference the business partner as the authoritative counterparty record.
|
|
8
|
+
|
|
9
|
+
## Business Purpose
|
|
10
|
+
|
|
11
|
+
Organizations need a single source of truth for counterparty master data to avoid duplication and ensure consistency across transaction domains:
|
|
12
|
+
|
|
13
|
+
- **Unified counterparty record**: A single partner entity can act as both customer and vendor, eliminating redundant records
|
|
14
|
+
- **Type distinction**: Separating ORGANIZATION and INDIVIDUAL partners enables different compliance, tax, and legal handling
|
|
15
|
+
- **Lifecycle gating**: Only ACTIVE partners can be referenced in new transactions, preventing accidental use of incomplete or retired records
|
|
16
|
+
- **Company scoping**: Partners are isolated per company, supporting multi-tenant and multi-entity deployments
|
|
17
|
+
- **Audit preservation**: INACTIVE partners are retained for historical reference rather than deleted
|
|
18
|
+
|
|
19
|
+
## Process Flow
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
stateDiagram-v2
|
|
23
|
+
[*] --> Draft: createPartner
|
|
24
|
+
Draft --> Active: activatePartner
|
|
25
|
+
Active --> Inactive: deactivatePartner
|
|
26
|
+
Inactive --> Active: reactivatePartner
|
|
27
|
+
Draft --> [*]: deletePartner
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Scenario Patterns
|
|
31
|
+
|
|
32
|
+
- **New Vendor Onboarding**: A procurement team creates a new ORGANIZATION partner in DRAFT, validates the legal name and tax details, then activates it before issuing the first purchase order
|
|
33
|
+
- **New Individual Customer**: A sales team creates an INDIVIDUAL partner in DRAFT for a sole trader, completes KYC review, and activates before raising a sales order
|
|
34
|
+
- **Partner Retirement**: A vendor is no longer used; the partner is deactivated to prevent new transactions while preserving full history on past orders
|
|
35
|
+
- **Reactivated Supplier**: A previously inactive supplier resumes business; the partner is reactivated rather than creating a duplicate record
|
|
36
|
+
- **Draft Cleanup**: An incomplete partner record created in error is deleted while still in DRAFT status before it enters any transactions
|
|
37
|
+
- **Dual-Role Partner**: A single ORGANIZATION partner is classified as both customer and vendor through partner-role-classification, referencing the same lifecycle-managed record
|
|
38
|
+
|
|
39
|
+
## Test Cases
|
|
40
|
+
|
|
41
|
+
- Partner lifecycle follows DRAFT → ACTIVE ↔ INACTIVE state machine
|
|
42
|
+
- Partners can only be created in DRAFT status
|
|
43
|
+
- Partner name is required and must be non-empty
|
|
44
|
+
- Partner type is required and must be either ORGANIZATION or INDIVIDUAL
|
|
45
|
+
- Only DRAFT partners can be deleted; ACTIVE and INACTIVE partners cannot
|
|
46
|
+
- Only ACTIVE partners can be referenced in new downstream transactions (sales orders, purchase orders, invoices)
|
|
47
|
+
- Activating a DRAFT partner transitions status to ACTIVE
|
|
48
|
+
- Activating an already ACTIVE partner fails with an invalid status transition error
|
|
49
|
+
- Deactivating an ACTIVE partner transitions status to INACTIVE
|
|
50
|
+
- Deactivating a DRAFT partner fails with an invalid status transition error
|
|
51
|
+
- Reactivating an INACTIVE partner transitions status to ACTIVE
|
|
52
|
+
- Partners are scoped to a company; partners from different companies are isolated
|
|
53
|
+
- Preferred transaction currency, when provided, must reference a valid currency from the primitives module
|
|
54
|
+
|
|
55
|
+
## Reference Links
|
|
56
|
+
|
|
57
|
+
- [SAP Business Partner Concept](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f325a3e3a5514e85aab72db8bab710c8/4b0a1e1c2d6b3e41e10000000a42189c.html)
|
|
58
|
+
- [Odoo Contacts (res.partner)](https://www.odoo.com/documentation/19.0/applications/contacts.html)
|
|
59
|
+
- [ISO 17442 Legal Entity Identifier (LEI)](https://www.iso.org/standard/59771.html)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Partner Role Classification
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Partner Role Classification allows a single business partner record to be designated as a CUSTOMER, a SUPPLIER, or both simultaneously. Rather than maintaining separate customer and vendor master records for the same real-world entity, the system attaches roles to one canonical partner record and tracks role-specific data alongside it.
|
|
6
|
+
|
|
7
|
+
This approach follows the SAP unified Business Partner (BP) model, which eliminates duplicate records and the reconciliation problems they create. A partner with no roles assigned is a valid state — for example, a newly created partner that has not yet been classified.
|
|
8
|
+
|
|
9
|
+
## Business Purpose
|
|
10
|
+
|
|
11
|
+
A unified role model provides practical advantages across finance and operations:
|
|
12
|
+
|
|
13
|
+
- **No duplicate records**: A manufacturer who is also a customer for returned goods does not require two separate master records, keeping data consistent and avoiding reconciliation overhead
|
|
14
|
+
- **Additive assignment**: Assigning the SUPPLIER role to an existing CUSTOMER partner does not remove the CUSTOMER role; roles accumulate independently
|
|
15
|
+
- **Controlled classification**: Only ACTIVE partners can have roles assigned or removed, preventing accidental classification of partners that are not yet fully set up
|
|
16
|
+
- **Flexible starting state**: Newly created partners carry no roles, allowing data entry to be completed before classification
|
|
17
|
+
- **Downstream filtering**: Systems consuming partner data (purchasing, sales, accounts payable, accounts receivable) can filter partners by role without joining separate entity tables
|
|
18
|
+
|
|
19
|
+
## Process Flow
|
|
20
|
+
|
|
21
|
+
Role assignment and removal share the same prerequisite — the partner must be ACTIVE:
|
|
22
|
+
|
|
23
|
+
```mermaid
|
|
24
|
+
flowchart TD
|
|
25
|
+
A[Partner Created] --> B{Partner Status?}
|
|
26
|
+
B -->|ACTIVE| C[Assign Role]
|
|
27
|
+
B -->|INACTIVE / other| D[Return Error: PARTNER_NOT_ACTIVE]
|
|
28
|
+
C --> E{Role already assigned?}
|
|
29
|
+
E -->|Yes| F[No-op / Idempotent]
|
|
30
|
+
E -->|No| G[Role Added to Partner]
|
|
31
|
+
G --> H[Partner holds role]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
A partner can accumulate both roles independently:
|
|
35
|
+
|
|
36
|
+
```mermaid
|
|
37
|
+
flowchart LR
|
|
38
|
+
P[Partner]
|
|
39
|
+
P -->|assignRole CUSTOMER| C[CUSTOMER role]
|
|
40
|
+
P -->|assignRole SUPPLIER| S[SUPPLIER role]
|
|
41
|
+
C & S -->|both present| B[Partner is CUSTOMER + SUPPLIER]
|
|
42
|
+
B -->|removeRole CUSTOMER| S2[Partner is SUPPLIER only]
|
|
43
|
+
B -->|removeRole SUPPLIER| C2[Partner is CUSTOMER only]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Scenario Patterns
|
|
47
|
+
|
|
48
|
+
- **Pure customer**: A retail buyer is created and activated. The CUSTOMER role is assigned. The partner appears in sales order lookups but not in purchasing workflows.
|
|
49
|
+
- **Pure supplier**: A raw-material vendor is created and activated. The SUPPLIER role is assigned. The partner appears in purchase order lookups but not in sales workflows.
|
|
50
|
+
- **Dual role — same entity**: An existing CUSTOMER partner is discovered to also supply services. The SUPPLIER role is assigned without any change to the CUSTOMER role. The partner is now visible in both sales and purchasing workflows under the same record.
|
|
51
|
+
- **Role removal**: A supplier relationship ends. The SUPPLIER role is removed. The partner retains its CUSTOMER role and continues to appear in sales workflows.
|
|
52
|
+
- **Idempotent assignment**: Assigning CUSTOMER to a partner that already holds CUSTOMER produces no error and no duplicate.
|
|
53
|
+
- **Inactive partner guard**: Attempting to assign or remove a role on an INACTIVE partner is rejected, ensuring classification only occurs for properly onboarded partners.
|
|
54
|
+
- **Unclassified partner**: A partner is created but not yet approved for trading. No roles are assigned. The partner record exists in the system but does not appear in role-filtered lookups.
|
|
55
|
+
|
|
56
|
+
## Test Cases
|
|
57
|
+
|
|
58
|
+
- Assigning CUSTOMER to an ACTIVE partner with no roles should succeed and result in exactly one role: CUSTOMER
|
|
59
|
+
- Assigning SUPPLIER to an ACTIVE partner that already holds CUSTOMER should succeed and result in both roles present
|
|
60
|
+
- Assigning CUSTOMER to a partner that already holds CUSTOMER should be idempotent — no error, no duplicate
|
|
61
|
+
- Removing CUSTOMER from a partner that holds both CUSTOMER and SUPPLIER should leave SUPPLIER intact
|
|
62
|
+
- Removing a role from a partner that does not hold that role should be idempotent — no error
|
|
63
|
+
- Assigning a role to an INACTIVE partner should fail with PARTNER_NOT_ACTIVE error
|
|
64
|
+
- Removing a role from an INACTIVE partner should fail with PARTNER_NOT_ACTIVE error
|
|
65
|
+
- A newly created partner with no roles assigned is a valid state — no validation error
|
|
66
|
+
- Partners can be filtered by role; a partner holding both roles appears in results for both CUSTOMER and SUPPLIER queries
|
|
67
|
+
- Role assignment does not modify any other partner fields (name, status, identifiers)
|
|
68
|
+
|
|
69
|
+
## Reference Links
|
|
70
|
+
|
|
71
|
+
- [SAP Business Partner Roles](https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/f4b14f75b28e4af6acc6fc8a8cc25600/4631dda7ec8c6d1be10000000a42189d.html)
|
|
72
|
+
- [Odoo Contact Customer/Vendor Flags](https://www.odoo.com/documentation/19.0/applications/inventory_and_mrp/purchase/products/vendor_bill.html)
|
|
73
|
+
- [Oracle Trading Community Architecture — Party Model](https://docs.oracle.com/en/applications/oracle-fusion-applications/implementation-guide/party-model.html)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# BusinessPartner
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
BusinessPartner is the unified entity representing any external party — customer, supplier, or both — with whom the organization conducts business. Partners are classified by type: ORGANIZATION (a legal entity such as a company) or INDIVIDUAL (a natural person). Each partner has a lifecycle state machine (DRAFT → ACTIVE ↔ INACTIVE) that controls when the partner can be referenced in downstream transactions.
|
|
6
|
+
|
|
7
|
+
Partners are scoped to a company (via `companyId` from the organization module) and carry core master data such as name, type, and optional preferred transaction currency.
|
|
8
|
+
|
|
9
|
+
## Domain Model Definitions
|
|
10
|
+
|
|
11
|
+
### Model type
|
|
12
|
+
|
|
13
|
+
Stateful
|
|
14
|
+
|
|
15
|
+
#### State Transitions
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
stateDiagram-v2
|
|
19
|
+
[*] --> Draft: createPartner
|
|
20
|
+
Draft --> Active: activatePartner
|
|
21
|
+
Active --> Inactive: deactivatePartner
|
|
22
|
+
Inactive --> Active: reactivatePartner
|
|
23
|
+
Draft --> [*]: deletePartner
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Command Definitions
|
|
27
|
+
|
|
28
|
+
- [createPartner](../commands/CreatePartner.md) - Create a new business partner in DRAFT status
|
|
29
|
+
- [updatePartner](../commands/UpdatePartner.md) - Update mutable fields (name, preferredCurrencyId) of an existing partner
|
|
30
|
+
- [activatePartner](../commands/ActivatePartner.md) - Transition partner from DRAFT to ACTIVE
|
|
31
|
+
- [deactivatePartner](../commands/DeactivatePartner.md) - Transition partner from ACTIVE to INACTIVE
|
|
32
|
+
- [reactivatePartner](../commands/ReactivatePartner.md) - Transition partner from INACTIVE to ACTIVE
|
|
33
|
+
- [deletePartner](../commands/DeletePartner.md) - Permanently delete a DRAFT partner
|
|
34
|
+
|
|
35
|
+
### Query Definitions
|
|
36
|
+
|
|
37
|
+
- [GetPartner](../queries/GetPartner.md) - Retrieve a partner by id
|
|
38
|
+
|
|
39
|
+
### Models
|
|
40
|
+
|
|
41
|
+
- BusinessPartner
|
|
42
|
+
|
|
43
|
+
### Invariants
|
|
44
|
+
|
|
45
|
+
- Partner name is required and must be non-empty
|
|
46
|
+
- Partner type is required and must be either ORGANIZATION or INDIVIDUAL
|
|
47
|
+
- Partner type is immutable after creation
|
|
48
|
+
- Partners are always created in DRAFT status
|
|
49
|
+
- Only DRAFT partners can be deleted; ACTIVE and INACTIVE partners are preserved
|
|
50
|
+
- Only ACTIVE partners can be referenced in new downstream transactions (sales orders, purchase orders, invoices)
|
|
51
|
+
- Activating an already ACTIVE partner fails with an invalid status transition error
|
|
52
|
+
- Deactivating a DRAFT partner fails with an invalid status transition error
|
|
53
|
+
- Preferred currency, when provided, must reference a valid Currency from the primitives module
|
|
54
|
+
- Partners are scoped to a company; partners from different companies are isolated
|
|
55
|
+
|
|
56
|
+
### Relationships
|
|
57
|
+
|
|
58
|
+
- **References Company**: Each partner is scoped to a company via `companyId` from the organization module
|
|
59
|
+
- **References Currency**: Each partner optionally references a Currency from the primitives module as preferred transaction currency
|
|
60
|
+
- **Referenced By PartnerRole**: Partners hold zero or more roles (CUSTOMER, SUPPLIER) via PartnerRole
|
|
61
|
+
- **Referenced By PartnerBankAccount**: Partners hold zero or more bank accounts via PartnerBankAccount
|
|
62
|
+
- **Referenced By PartnerAddress**: Partners hold zero or more addresses via PartnerAddress
|
|
63
|
+
- **Referenced By PartnerIdentification**: Partners hold zero or more identification records via PartnerIdentification
|
|
64
|
+
- **Referenced By ContactPerson**: ORGANIZATION-type partners hold zero or more contact persons via ContactPerson
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# ContactPerson
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
ContactPerson is a child entity of an ORGANIZATION-type BusinessPartner that tracks individual people who represent that organization. Each contact person carries their own identifying information (firstName, lastName, email, phone, jobTitle, department) and maintains an independent ACTIVE/INACTIVE status.
|
|
6
|
+
|
|
7
|
+
One contact person per organization can be designated as the primary contact. Contact persons are not business partners themselves — they are named individuals who act on behalf of a partner organization.
|
|
8
|
+
|
|
9
|
+
## Domain Model Definitions
|
|
10
|
+
|
|
11
|
+
### Model type
|
|
12
|
+
|
|
13
|
+
Stateful
|
|
14
|
+
|
|
15
|
+
#### State Transitions
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
stateDiagram-v2
|
|
19
|
+
[*] --> Active: createContactPerson
|
|
20
|
+
Active --> Inactive: deactivateContactPerson
|
|
21
|
+
Inactive --> Active: reactivateContactPerson
|
|
22
|
+
Active --> [*]: deleteContactPerson (only when not primary)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Command Definitions
|
|
26
|
+
|
|
27
|
+
- [createContactPerson](../commands/CreateContactPerson.md) - Add a contact person to an ORGANIZATION-type partner
|
|
28
|
+
- [updateContactPerson](../commands/UpdateContactPerson.md) - Update contact person details
|
|
29
|
+
- [deactivateContactPerson](../commands/DeactivateContactPerson.md) - Transition contact person from ACTIVE to INACTIVE
|
|
30
|
+
- [reactivateContactPerson](../commands/ReactivateContactPerson.md) - Transition contact person from INACTIVE to ACTIVE
|
|
31
|
+
- [deleteContactPerson](../commands/DeleteContactPerson.md) - Permanently delete a non-primary contact person
|
|
32
|
+
- [setPrimaryContactPerson](../commands/SetPrimaryContactPerson.md) - Designate a contact person as the primary for the organization
|
|
33
|
+
|
|
34
|
+
### Query Definitions
|
|
35
|
+
|
|
36
|
+
- [GetContactPerson](../queries/GetContactPerson.md) - Retrieve a contact person by id
|
|
37
|
+
- [GetPrimaryContactPerson](../queries/GetPrimaryContactPerson.md) - Retrieve the primary contact person for a partner
|
|
38
|
+
- [ListContactPersonsByPartner](../queries/ListContactPersonsByPartner.md) - List all contact persons for an organization partner
|
|
39
|
+
|
|
40
|
+
### Models
|
|
41
|
+
|
|
42
|
+
- ContactPerson
|
|
43
|
+
|
|
44
|
+
### Invariants
|
|
45
|
+
|
|
46
|
+
- Contact persons can only be linked to ORGANIZATION-type partners; linking to an INDIVIDUAL-type partner is rejected
|
|
47
|
+
- `firstName` and `lastName` are required
|
|
48
|
+
- `email`, `phone`, `jobTitle`, and `department` are optional; however at least one communication channel (`email` or `phone`) must be provided
|
|
49
|
+
- Email format must be validated on creation and update
|
|
50
|
+
- Contact persons are created with ACTIVE status by default
|
|
51
|
+
- An ACTIVE contact person can be deactivated; an INACTIVE contact person can be reactivated
|
|
52
|
+
- At most one contact person per organization may hold primary contact designation at any given time
|
|
53
|
+
- Designating a new primary contact automatically removes the designation from the previous primary contact
|
|
54
|
+
- A contact person marked as primary cannot be deleted; the primary designation must be transferred first
|
|
55
|
+
- Deactivating a primary contact person removes their primary designation; the organization has no primary contact until one is explicitly set
|
|
56
|
+
- Multiple contact persons with distinct roles may exist under the same organization
|
|
57
|
+
- Updating a contact person's details does not change their organization association or primary status
|
|
58
|
+
- Listing contact persons for an organization returns only those linked to that specific organization
|
|
59
|
+
|
|
60
|
+
### Relationships
|
|
61
|
+
|
|
62
|
+
- **References BusinessPartner**: Each contact person belongs to exactly one ORGANIZATION-type BusinessPartner
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# PartnerAddress
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
PartnerAddress is a child entity of BusinessPartner that stores structured addresses classified by purpose (BILLING, SHIPPING, REGISTERED, or OTHER). Each address carries the same structured format as the organization module's Site entity: line1, line2, city, state, postalCode, and country (ISO 3166-1 alpha-2). One address per partner per address type may be designated as the default.
|
|
6
|
+
|
|
7
|
+
Adding new addresses requires the partner to be in DRAFT or ACTIVE state; INACTIVE partners may only have existing addresses read or updated.
|
|
8
|
+
|
|
9
|
+
## Domain Model Definitions
|
|
10
|
+
|
|
11
|
+
### Model type
|
|
12
|
+
|
|
13
|
+
Standard
|
|
14
|
+
|
|
15
|
+
### Command Definitions
|
|
16
|
+
|
|
17
|
+
- [createPartnerAddress](../commands/CreatePartnerAddress.md) - Add an address to a partner
|
|
18
|
+
- [updatePartnerAddress](../commands/UpdatePartnerAddress.md) - Update address fields
|
|
19
|
+
- [deletePartnerAddress](../commands/DeletePartnerAddress.md) - Remove an address (with referential integrity check)
|
|
20
|
+
- [setDefaultPartnerAddress](../commands/SetDefaultPartnerAddress.md) - Designate an address as the default for its type
|
|
21
|
+
|
|
22
|
+
### Query Definitions
|
|
23
|
+
|
|
24
|
+
- [GetPartnerAddress](../queries/GetPartnerAddress.md) - Retrieve an address by id
|
|
25
|
+
- [GetDefaultPartnerAddress](../queries/GetDefaultPartnerAddress.md) - Retrieve the default address for a partner and address type
|
|
26
|
+
- [ListPartnerAddressesByPartner](../queries/ListPartnerAddressesByPartner.md) - List addresses for a partner with optional type filter
|
|
27
|
+
|
|
28
|
+
### Models
|
|
29
|
+
|
|
30
|
+
- PartnerAddress
|
|
31
|
+
|
|
32
|
+
### Invariants
|
|
33
|
+
|
|
34
|
+
- `line1`, `city`, `postalCode`, `country`, and `addressType` are required at creation
|
|
35
|
+
- `line2` and `state` are optional
|
|
36
|
+
- `country` must be a valid ISO 3166-1 alpha-2 code
|
|
37
|
+
- `addressType` must be one of BILLING, SHIPPING, REGISTERED, OTHER
|
|
38
|
+
- `addressType` is immutable after creation; changing type requires deleting the old address and creating a new one
|
|
39
|
+
- A partner may hold multiple addresses of the same type
|
|
40
|
+
- Only one address per partner per addressType may be marked as default at any time
|
|
41
|
+
- A partner can have independent defaults for BILLING, SHIPPING, REGISTERED, and OTHER simultaneously
|
|
42
|
+
- Setting isDefault = true for an addressType automatically unsets isDefault on the previous default of the same type for the same partner
|
|
43
|
+
- Deleting the default address does not automatically promote another address of the same type to default; no default exists until one is explicitly set
|
|
44
|
+
- Deleting an address referenced on historical or open transactions is rejected (referential integrity)
|
|
45
|
+
- Adding new addresses requires the partner to be in DRAFT or ACTIVE state; adding to an INACTIVE partner is rejected
|
|
46
|
+
- Reading and updating existing addresses is permitted regardless of partner status (DRAFT, ACTIVE, or INACTIVE)
|
|
47
|
+
- A partner with no addresses returns an empty list, not an error
|
|
48
|
+
- When no default address exists for a requested type, the system returns an error rather than silently picking an arbitrary address
|
|
49
|
+
|
|
50
|
+
### Relationships
|
|
51
|
+
|
|
52
|
+
- **References BusinessPartner**: Each address belongs to exactly one BusinessPartner
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# PartnerBankAccount
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
PartnerBankAccount is a child entity of BusinessPartner that stores the banking details required to execute financial transactions with that partner. Each record captures bank name, account holder name, account number, routing number, IBAN, SWIFT/BIC, and transaction currency. A partner may hold multiple bank accounts, and one account per partner may be designated as the default.
|
|
6
|
+
|
|
7
|
+
Bank account records can be created and maintained regardless of the partner's current lifecycle state (DRAFT, ACTIVE, or INACTIVE).
|
|
8
|
+
|
|
9
|
+
## Domain Model Definitions
|
|
10
|
+
|
|
11
|
+
### Model type
|
|
12
|
+
|
|
13
|
+
Standard
|
|
14
|
+
|
|
15
|
+
### Command Definitions
|
|
16
|
+
|
|
17
|
+
- [createPartnerBankAccount](../commands/CreatePartnerBankAccount.md) - Add a bank account to a partner
|
|
18
|
+
- [updatePartnerBankAccount](../commands/UpdatePartnerBankAccount.md) - Update bank account details
|
|
19
|
+
- [deletePartnerBankAccount](../commands/DeletePartnerBankAccount.md) - Remove a bank account from a partner
|
|
20
|
+
- [setDefaultPartnerBankAccount](../commands/SetDefaultPartnerBankAccount.md) - Designate a bank account as the default for a partner
|
|
21
|
+
|
|
22
|
+
### Query Definitions
|
|
23
|
+
|
|
24
|
+
- [GetPartnerBankAccount](../queries/GetPartnerBankAccount.md) - Retrieve a bank account by id
|
|
25
|
+
- [GetDefaultPartnerBankAccount](../queries/GetDefaultPartnerBankAccount.md) - Retrieve the default bank account for a partner
|
|
26
|
+
- [ListPartnerBankAccountsByPartner](../queries/ListPartnerBankAccountsByPartner.md) - List all bank accounts for a partner
|
|
27
|
+
|
|
28
|
+
### Models
|
|
29
|
+
|
|
30
|
+
- PartnerBankAccount
|
|
31
|
+
|
|
32
|
+
### Invariants
|
|
33
|
+
|
|
34
|
+
- `bankName` is required and must be non-empty
|
|
35
|
+
- `accountHolderName` is required and must be non-empty
|
|
36
|
+
- At least one of `accountNumber` or `iban` must be provided; both may be provided simultaneously
|
|
37
|
+
- `routingNumber` is optional (domestic routing conventions)
|
|
38
|
+
- `swiftBic` is optional (international transfers)
|
|
39
|
+
- `currencyId` must reference a valid, existing Currency from the primitives module
|
|
40
|
+
- Bank accounts can be added to a partner in any lifecycle state (DRAFT, ACTIVE, or INACTIVE)
|
|
41
|
+
- At most one bank account per partner can be designated as default at any time
|
|
42
|
+
- Marking a bank account as default automatically unsets the default flag on all other accounts for that partner
|
|
43
|
+
- The first bank account added to a partner is automatically designated as the default
|
|
44
|
+
- Removing the default bank account does not automatically promote another account; the partner has no default until one is explicitly designated
|
|
45
|
+
- Bank accounts are isolated per partner; accounts belonging to one partner are not visible on another
|
|
46
|
+
|
|
47
|
+
### Relationships
|
|
48
|
+
|
|
49
|
+
- **References BusinessPartner**: Each bank account belongs to exactly one BusinessPartner
|
|
50
|
+
- **References Currency**: Each bank account references a Currency from the primitives module
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# PartnerIdentification
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
PartnerIdentification is a child entity of BusinessPartner that stores official registration numbers — tax IDs, VAT numbers, DUNS numbers, company registry codes, national IDs, and other identification documents. Each record captures the type, value, and optional metadata including issuing country and validity period.
|
|
6
|
+
|
|
7
|
+
Uniqueness is enforced on the combination of (type, value) within a company scope. Identifications can be added at any point in the partner's lifecycle.
|
|
8
|
+
|
|
9
|
+
## Domain Model Definitions
|
|
10
|
+
|
|
11
|
+
### Model type
|
|
12
|
+
|
|
13
|
+
Standard
|
|
14
|
+
|
|
15
|
+
### Command Definitions
|
|
16
|
+
|
|
17
|
+
- [createPartnerIdentification](../commands/CreatePartnerIdentification.md) - Add an identification record to a partner
|
|
18
|
+
- [updatePartnerIdentification](../commands/UpdatePartnerIdentification.md) - Update identification details
|
|
19
|
+
- [deletePartnerIdentification](../commands/DeletePartnerIdentification.md) - Remove an identification record
|
|
20
|
+
|
|
21
|
+
### Query Definitions
|
|
22
|
+
|
|
23
|
+
- [GetPartnerIdentification](../queries/GetPartnerIdentification.md) - Retrieve an identification record by id
|
|
24
|
+
- [ListPartnerIdentificationsByPartner](../queries/ListPartnerIdentificationsByPartner.md) - List all identification records for a partner
|
|
25
|
+
|
|
26
|
+
### Models
|
|
27
|
+
|
|
28
|
+
- PartnerIdentification
|
|
29
|
+
|
|
30
|
+
### Invariants
|
|
31
|
+
|
|
32
|
+
- `type` and `value` are both required; records missing either field are rejected
|
|
33
|
+
- Supported types are: TAX_ID, VAT, DUNS, COMPANY_REGISTRY, NATIONAL_ID, OTHER
|
|
34
|
+
- The combination of (type, value) must be unique within the company scope (cross-company deduplication is not enforced)
|
|
35
|
+
- Two partners within the same company may not share an identification record with the same (type, value) combination
|
|
36
|
+
- A single partner can hold multiple identification records with different types
|
|
37
|
+
- `type` is immutable after creation; changing the identification type requires deleting the existing record and creating a new one
|
|
38
|
+
- `issuingCountry`, `validFrom`, and `validTo` are optional and may be omitted
|
|
39
|
+
- When both `validFrom` and `validTo` are set, `validTo` must be equal to or later than `validFrom`
|
|
40
|
+
- Identifications can be added to partners in any lifecycle state (DRAFT, ACTIVE, INACTIVE)
|
|
41
|
+
- Updating an identification's value must re-validate the (type, value) uniqueness constraint
|
|
42
|
+
- Deleting an identification record does not affect the parent partner or other identifications
|
|
43
|
+
|
|
44
|
+
### Relationships
|
|
45
|
+
|
|
46
|
+
- **References BusinessPartner**: Each identification record belongs to exactly one BusinessPartner
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# PartnerRole
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
|
|
5
|
+
PartnerRole is a child entity that assigns a role classification (CUSTOMER or SUPPLIER) to a business partner. A single partner can hold multiple roles simultaneously — for example, both CUSTOMER and SUPPLIER — without record duplication. Role assignment is additive and follows the SAP unified Business Partner model.
|
|
6
|
+
|
|
7
|
+
Roles can only be assigned to or removed from ACTIVE partners. A partner with no roles is a valid state.
|
|
8
|
+
|
|
9
|
+
## Domain Model Definitions
|
|
10
|
+
|
|
11
|
+
### Model type
|
|
12
|
+
|
|
13
|
+
Standard
|
|
14
|
+
|
|
15
|
+
### Command Definitions
|
|
16
|
+
|
|
17
|
+
- [assignRoleToPartner](../commands/AssignRoleToPartner.md) - Assign a CUSTOMER or SUPPLIER role to an ACTIVE partner
|
|
18
|
+
- [removeRoleFromPartner](../commands/RemoveRoleFromPartner.md) - Remove a role from an ACTIVE partner
|
|
19
|
+
|
|
20
|
+
### Query Definitions
|
|
21
|
+
|
|
22
|
+
- [GetPartnerRole](../queries/GetPartnerRole.md) - Retrieve a role assignment by partnerId and role
|
|
23
|
+
- [ListPartnersByRole](../queries/ListPartnersByRole.md) - List all partners holding a specified role
|
|
24
|
+
|
|
25
|
+
### Models
|
|
26
|
+
|
|
27
|
+
- PartnerRole
|
|
28
|
+
|
|
29
|
+
### Invariants
|
|
30
|
+
|
|
31
|
+
- Role must be one of CUSTOMER or SUPPLIER
|
|
32
|
+
- The combination of (partnerId, role) must be unique — no duplicate role assignments
|
|
33
|
+
- Roles can only be assigned to or removed from ACTIVE partners; assigning or removing a role on a DRAFT or INACTIVE partner is rejected
|
|
34
|
+
- Assigning a role that is already held is idempotent — no error, no duplicate
|
|
35
|
+
- Removing a role that is not held is idempotent — no error
|
|
36
|
+
- A partner with no roles assigned is a valid state
|
|
37
|
+
- Role assignment does not modify any other partner fields (name, status, identifiers)
|
|
38
|
+
- Partners can be filtered by role; a partner holding both roles appears in results for both CUSTOMER and SUPPLIER queries
|
|
39
|
+
|
|
40
|
+
### Relationships
|
|
41
|
+
|
|
42
|
+
- **References BusinessPartner**: Each role assignment belongs to exactly one BusinessPartner
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# GetContactPerson
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetContactPerson retrieves a single contact person record by id. This serves as the lookup for update, deactivate, reactivate, delete, and setPrimary contact person commands.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Accepts `{ id }` as input — retrieves by unique identifier
|
|
10
|
+
- Returns the full ContactPerson record or null if no matching contact person is found
|
|
11
|
+
- Used by update, deactivate, reactivate, delete, and setPrimary commands to verify the contact person exists before operating on it
|
|
12
|
+
|
|
13
|
+
## Process Flow
|
|
14
|
+
|
|
15
|
+
```mermaid
|
|
16
|
+
flowchart TD
|
|
17
|
+
A[Receive input] --> B[SELECT from ContactPerson where id = input.id]
|
|
18
|
+
B --> C{Contact person found?}
|
|
19
|
+
C -->|Yes| D[Return contact person record]
|
|
20
|
+
C -->|No| E[Return null]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## External Dependencies
|
|
24
|
+
|
|
25
|
+
- None
|
|
26
|
+
|
|
27
|
+
## Error Scenarios
|
|
28
|
+
|
|
29
|
+
- **CONTACT_PERSON_NOT_FOUND**: No contact person matches the given id — caller receives null
|
|
30
|
+
|
|
31
|
+
## Test Cases
|
|
32
|
+
|
|
33
|
+
- returns contact person when found
|
|
34
|
+
- returns null when not found
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# GetDefaultPartnerAddress
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetDefaultPartnerAddress retrieves the default address for a partner and address type. This is used by downstream modules (AP, order management, shipping) to resolve the relevant default address for a given business partner.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Accepts `{ partnerId, addressType }` as input — retrieves the address with isDefault=true for the given partner and type
|
|
10
|
+
- Returns the PartnerAddress record where isDefault is true for the specified address type
|
|
11
|
+
- At most one address per partner per address type can be marked as default
|
|
12
|
+
- When no default address exists for the requested type, returns an error — the caller must either set a default or select an address explicitly
|
|
13
|
+
- When the partner has no addresses of the given type, returns an error indicating no address of that type exists
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive input] --> B[SELECT from PartnerAddress where partnerId = input.partnerId AND addressType = input.addressType AND isDefault = true]
|
|
20
|
+
B --> C{Default address found?}
|
|
21
|
+
C -->|Yes| D[Return address record]
|
|
22
|
+
C -->|No| E{Any address of this type exists?}
|
|
23
|
+
E -->|Yes| F[Return error: no default set — caller must select explicitly]
|
|
24
|
+
E -->|No| G[Return error: no address of this type exists]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## External Dependencies
|
|
28
|
+
|
|
29
|
+
- None
|
|
30
|
+
|
|
31
|
+
## Error Scenarios
|
|
32
|
+
|
|
33
|
+
- **NO_DEFAULT_ADDRESS**: Addresses of the requested type exist for the partner, but none is marked as default — the caller must set a default or select an address explicitly
|
|
34
|
+
- **NO_ADDRESS_OF_TYPE**: The partner has no addresses of the requested address type
|
|
35
|
+
|
|
36
|
+
## Test Cases
|
|
37
|
+
|
|
38
|
+
- returns default address when one exists
|
|
39
|
+
- returns error when addresses of the type exist but no default is set
|
|
40
|
+
- returns error when partner has no addresses of the given type
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# GetDefaultPartnerBankAccount
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetDefaultPartnerBankAccount retrieves the default bank account for a partner. This is used by downstream payment modules to resolve the default payment account for a given business partner.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Accepts `{ partnerId }` as input — retrieves the bank account with isDefault=true for the given partner
|
|
10
|
+
- Returns the PartnerBankAccount record where isDefault is true, or null if no default is set
|
|
11
|
+
- At most one bank account per partner can be marked as default
|
|
12
|
+
- Returns null when the partner has no bank accounts at all
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive input] --> B[SELECT from PartnerBankAccount where partnerId = input.partnerId AND isDefault = true]
|
|
19
|
+
B --> C{Default bank account found?}
|
|
20
|
+
C -->|Yes| D[Return bank account record]
|
|
21
|
+
C -->|No| E[Return null]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## External Dependencies
|
|
25
|
+
|
|
26
|
+
- None
|
|
27
|
+
|
|
28
|
+
## Error Scenarios
|
|
29
|
+
|
|
30
|
+
- No explicit error — returns null when no default bank account exists
|
|
31
|
+
|
|
32
|
+
## Test Cases
|
|
33
|
+
|
|
34
|
+
- returns default bank account when one exists
|
|
35
|
+
- returns null when no default is set
|
|
36
|
+
- returns null when partner has no bank accounts
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# GetPartner
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetPartner retrieves a single business partner record by id. This serves as the core partner lookup for existence checks, state validation, and all partner lifecycle commands.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Accepts `{ id }` as input — retrieves by unique identifier
|
|
10
|
+
- Returns the full partner record including all fields (id, companyId, name, type, status, preferredCurrencyId, timestamps)
|
|
11
|
+
- Returns null if no matching partner is found
|
|
12
|
+
- All comparisons are exact (case-sensitive)
|
|
13
|
+
|
|
14
|
+
## Process Flow
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
flowchart TD
|
|
18
|
+
A[Receive input] --> B[SELECT from Partner where id = input.id]
|
|
19
|
+
B --> C{Partner found?}
|
|
20
|
+
C -->|Yes| D[Return partner record]
|
|
21
|
+
C -->|No| E[Return null]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## External Dependencies
|
|
25
|
+
|
|
26
|
+
- None
|
|
27
|
+
|
|
28
|
+
## Error Scenarios
|
|
29
|
+
|
|
30
|
+
- **PARTNER_NOT_FOUND**: No partner matches the given id — caller receives null
|
|
31
|
+
|
|
32
|
+
## Test Cases
|
|
33
|
+
|
|
34
|
+
- returns partner when found by id
|
|
35
|
+
- returns null when partner not found
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# GetPartnerAddress
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
GetPartnerAddress retrieves a single address record by id. This serves as the lookup for update, delete, and setDefault address commands.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Accepts `{ id }` as input — retrieves by unique identifier
|
|
10
|
+
- Returns the full PartnerAddress record or null if no matching address is found
|
|
11
|
+
- Used by update, delete, and setDefault commands to verify the address exists before operating on it
|
|
12
|
+
|
|
13
|
+
## Process Flow
|
|
14
|
+
|
|
15
|
+
```mermaid
|
|
16
|
+
flowchart TD
|
|
17
|
+
A[Receive input] --> B[SELECT from PartnerAddress where id = input.id]
|
|
18
|
+
B --> C{Address found?}
|
|
19
|
+
C -->|Yes| D[Return address record]
|
|
20
|
+
C -->|No| E[Return null]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## External Dependencies
|
|
24
|
+
|
|
25
|
+
- None
|
|
26
|
+
|
|
27
|
+
## Error Scenarios
|
|
28
|
+
|
|
29
|
+
- **ADDRESS_NOT_FOUND**: No address matches the given id — caller receives null
|
|
30
|
+
|
|
31
|
+
## Test Cases
|
|
32
|
+
|
|
33
|
+
- returns address when found
|
|
34
|
+
- returns null when not found
|