@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,105 @@
|
|
|
1
|
+
import type { Transaction } from "../generated/kysely-tailordb";
|
|
2
|
+
import {
|
|
3
|
+
IdentificationNotFoundError,
|
|
4
|
+
InvalidValueError,
|
|
5
|
+
DuplicateIdentificationError,
|
|
6
|
+
InvalidValidityPeriodError,
|
|
7
|
+
} from "../lib/errors.generated";
|
|
8
|
+
import { ok, err, type CommandContext } from "@tailor-platform/erp-kit/module";
|
|
9
|
+
|
|
10
|
+
export interface UpdatePartnerIdentificationInput {
|
|
11
|
+
id: string;
|
|
12
|
+
value?: string;
|
|
13
|
+
issuingCountry?: string;
|
|
14
|
+
validFrom?: Date;
|
|
15
|
+
validTo?: Date;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Function: updatePartnerIdentification
|
|
20
|
+
*
|
|
21
|
+
* Updates an existing partner identification record.
|
|
22
|
+
* Type is immutable. Re-validates (type, value) uniqueness if value changes.
|
|
23
|
+
* Validates validity period using merged result with existing data.
|
|
24
|
+
*/
|
|
25
|
+
export async function run<CF extends Record<string, unknown>>(
|
|
26
|
+
db: Transaction,
|
|
27
|
+
input: UpdatePartnerIdentificationInput & CF,
|
|
28
|
+
_ctx: CommandContext,
|
|
29
|
+
) {
|
|
30
|
+
const { id, value, issuingCountry, validFrom, validTo, ...customFields } = input;
|
|
31
|
+
|
|
32
|
+
// 1. Check identification exists
|
|
33
|
+
const existing = await db
|
|
34
|
+
.selectFrom("PartnerIdentification")
|
|
35
|
+
.selectAll()
|
|
36
|
+
.where("id", "=", id)
|
|
37
|
+
.forUpdate()
|
|
38
|
+
.executeTakeFirst();
|
|
39
|
+
|
|
40
|
+
if (!existing) {
|
|
41
|
+
return err(new IdentificationNotFoundError(id));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// 2. Validate value is non-empty if provided
|
|
45
|
+
if (value !== undefined && (!value || value.trim() === "")) {
|
|
46
|
+
return err(new InvalidValueError(value ?? ""));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// 3. If value changed, re-validate (type, value) uniqueness within company scope
|
|
50
|
+
if (value !== undefined && value !== existing.value) {
|
|
51
|
+
// Get the partner to find companyId
|
|
52
|
+
const partner = await db
|
|
53
|
+
.selectFrom("BusinessPartner")
|
|
54
|
+
.selectAll()
|
|
55
|
+
.where("id", "=", existing.partnerId)
|
|
56
|
+
.executeTakeFirst();
|
|
57
|
+
|
|
58
|
+
const duplicate = await db
|
|
59
|
+
.selectFrom("PartnerIdentification")
|
|
60
|
+
.innerJoin("BusinessPartner", "BusinessPartner.id", "PartnerIdentification.partnerId")
|
|
61
|
+
.selectAll("PartnerIdentification")
|
|
62
|
+
.where("BusinessPartner.companyId", "=", partner!.companyId)
|
|
63
|
+
.where("PartnerIdentification.type", "=", existing.type)
|
|
64
|
+
.where("PartnerIdentification.value", "=", value)
|
|
65
|
+
.executeTakeFirst();
|
|
66
|
+
|
|
67
|
+
if (duplicate) {
|
|
68
|
+
return err(new DuplicateIdentificationError(`${existing.type}:${value}`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// 4. Validate validity period (merge with existing)
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- null means "clear the field", distinct from undefined (not provided)
|
|
74
|
+
const effectiveFrom = validFrom !== undefined ? validFrom : existing.validFrom;
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
76
|
+
const effectiveTo = validTo !== undefined ? validTo : existing.validTo;
|
|
77
|
+
|
|
78
|
+
if (effectiveFrom && effectiveTo && effectiveTo < effectiveFrom) {
|
|
79
|
+
return err(
|
|
80
|
+
new InvalidValidityPeriodError(
|
|
81
|
+
`${effectiveFrom instanceof Date ? effectiveFrom.toISOString() : effectiveFrom} - ${effectiveTo instanceof Date ? effectiveTo.toISOString() : effectiveTo}`,
|
|
82
|
+
),
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 5. Build update set
|
|
87
|
+
const updateSet: Record<string, unknown> = {
|
|
88
|
+
...customFields,
|
|
89
|
+
updatedAt: new Date(),
|
|
90
|
+
};
|
|
91
|
+
if (value !== undefined) updateSet.value = value;
|
|
92
|
+
if (issuingCountry !== undefined) updateSet.issuingCountry = issuingCountry;
|
|
93
|
+
if (validFrom !== undefined) updateSet.validFrom = validFrom;
|
|
94
|
+
if (validTo !== undefined) updateSet.validTo = validTo;
|
|
95
|
+
|
|
96
|
+
// 6. Update record
|
|
97
|
+
const identification = await db
|
|
98
|
+
.updateTable("PartnerIdentification")
|
|
99
|
+
.set(updateSet)
|
|
100
|
+
.where("id", "=", id)
|
|
101
|
+
.returningAll()
|
|
102
|
+
.executeTakeFirstOrThrow();
|
|
103
|
+
|
|
104
|
+
return ok({ identification });
|
|
105
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { company as companyStub, currency as currencyStub } from "../lib/_db_deps";
|
|
9
|
+
|
|
10
|
+
export const BASE_PARTNER_STATUSES = ["DRAFT", "ACTIVE", "INACTIVE"] as const;
|
|
11
|
+
|
|
12
|
+
export const PARTNER_TYPES = ["ORGANIZATION", "INDIVIDUAL"] as const;
|
|
13
|
+
|
|
14
|
+
export interface CreateBusinessPartnerTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
15
|
+
fields?: F;
|
|
16
|
+
additionalStatuses?: string[];
|
|
17
|
+
companyType?: TailorAnyDBType;
|
|
18
|
+
currencyType?: TailorAnyDBType;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function createBusinessPartnerType<const F extends Record<string, TailorAnyDBField>>(
|
|
22
|
+
params: CreateBusinessPartnerTypeParams<F>,
|
|
23
|
+
) {
|
|
24
|
+
const statuses = [...BASE_PARTNER_STATUSES, ...(params.additionalStatuses ?? [])] as [
|
|
25
|
+
string,
|
|
26
|
+
...string[],
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
return db
|
|
30
|
+
.type("BusinessPartner", {
|
|
31
|
+
name: db.string().description("Business partner display name"),
|
|
32
|
+
type: db
|
|
33
|
+
.enum(["ORGANIZATION", "INDIVIDUAL"])
|
|
34
|
+
.description("Partner type: ORGANIZATION or INDIVIDUAL"),
|
|
35
|
+
companyId: db
|
|
36
|
+
.uuid()
|
|
37
|
+
.relation({
|
|
38
|
+
type: "n-1",
|
|
39
|
+
toward: { type: params.companyType ?? companyStub },
|
|
40
|
+
backward: "businessPartners",
|
|
41
|
+
})
|
|
42
|
+
.description("Foreign key to Company from organization module"),
|
|
43
|
+
preferredCurrencyId: db
|
|
44
|
+
.uuid({ optional: true })
|
|
45
|
+
.relation({
|
|
46
|
+
type: "n-1",
|
|
47
|
+
toward: { type: params.currencyType ?? currencyStub },
|
|
48
|
+
backward: "businessPartners",
|
|
49
|
+
})
|
|
50
|
+
.description("Optional preferred transaction currency"),
|
|
51
|
+
status: db.enum(statuses).description("Lifecycle status: DRAFT, ACTIVE, INACTIVE"),
|
|
52
|
+
...((params.fields ?? {}) as F),
|
|
53
|
+
...db.fields.timestamps(),
|
|
54
|
+
})
|
|
55
|
+
.permission(unsafeAllowAllTypePermission)
|
|
56
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const businessPartner = createBusinessPartnerType({});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
unsafeAllowAllGqlPermission,
|
|
5
|
+
unsafeAllowAllTypePermission,
|
|
6
|
+
} from "@tailor-platform/sdk";
|
|
7
|
+
import { businessPartner } from "./businessPartner";
|
|
8
|
+
|
|
9
|
+
export const BASE_CONTACT_STATUSES = ["ACTIVE", "INACTIVE"] as const;
|
|
10
|
+
|
|
11
|
+
export interface CreateContactPersonTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
12
|
+
fields?: F;
|
|
13
|
+
additionalStatuses?: string[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function createContactPersonType<const F extends Record<string, TailorAnyDBField>>(
|
|
17
|
+
params: CreateContactPersonTypeParams<F>,
|
|
18
|
+
) {
|
|
19
|
+
const statuses = [...BASE_CONTACT_STATUSES, ...(params.additionalStatuses ?? [])] as [
|
|
20
|
+
string,
|
|
21
|
+
...string[],
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
return db
|
|
25
|
+
.type("ContactPerson", {
|
|
26
|
+
partnerId: db
|
|
27
|
+
.uuid()
|
|
28
|
+
.relation({
|
|
29
|
+
type: "n-1",
|
|
30
|
+
toward: { type: businessPartner },
|
|
31
|
+
backward: "contactPersons",
|
|
32
|
+
})
|
|
33
|
+
.description("Foreign key to ORGANIZATION-type BusinessPartner"),
|
|
34
|
+
firstName: db.string().description("Contact person first name"),
|
|
35
|
+
lastName: db.string().description("Contact person last name"),
|
|
36
|
+
email: db.string({ optional: true }).description("Contact person email address"),
|
|
37
|
+
phone: db.string({ optional: true }).description("Contact person phone number"),
|
|
38
|
+
jobTitle: db.string({ optional: true }).description("Contact person job title"),
|
|
39
|
+
department: db.string({ optional: true }).description("Contact person department"),
|
|
40
|
+
isPrimary: db.bool().description("Whether this is the primary contact for the organization"),
|
|
41
|
+
status: db.enum(statuses).description("Contact person status: ACTIVE or INACTIVE"),
|
|
42
|
+
...((params.fields ?? {}) as F),
|
|
43
|
+
...db.fields.timestamps(),
|
|
44
|
+
})
|
|
45
|
+
.permission(unsafeAllowAllTypePermission)
|
|
46
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const contactPerson = createContactPersonType({});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
unsafeAllowAllGqlPermission,
|
|
5
|
+
unsafeAllowAllTypePermission,
|
|
6
|
+
} from "@tailor-platform/sdk";
|
|
7
|
+
import { businessPartner } from "./businessPartner";
|
|
8
|
+
|
|
9
|
+
export const ADDRESS_TYPES = ["BILLING", "SHIPPING", "REGISTERED", "OTHER"] as const;
|
|
10
|
+
|
|
11
|
+
export interface CreatePartnerAddressTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
12
|
+
fields?: F;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function createPartnerAddressType<const F extends Record<string, TailorAnyDBField>>(
|
|
16
|
+
params: CreatePartnerAddressTypeParams<F>,
|
|
17
|
+
) {
|
|
18
|
+
return db
|
|
19
|
+
.type("PartnerAddress", {
|
|
20
|
+
partnerId: db
|
|
21
|
+
.uuid()
|
|
22
|
+
.relation({
|
|
23
|
+
type: "n-1",
|
|
24
|
+
toward: { type: businessPartner },
|
|
25
|
+
backward: "partnerAddresses",
|
|
26
|
+
})
|
|
27
|
+
.description("Foreign key to BusinessPartner"),
|
|
28
|
+
addressType: db
|
|
29
|
+
.enum(["BILLING", "SHIPPING", "REGISTERED", "OTHER"])
|
|
30
|
+
.description("Address purpose: BILLING, SHIPPING, REGISTERED, OTHER"),
|
|
31
|
+
line1: db.string().description("Address line 1"),
|
|
32
|
+
line2: db.string({ optional: true }).description("Address line 2"),
|
|
33
|
+
city: db.string().description("City"),
|
|
34
|
+
state: db.string({ optional: true }).description("State or province"),
|
|
35
|
+
postalCode: db.string().description("Postal code"),
|
|
36
|
+
country: db.string().description("ISO 3166-1 alpha-2 country code"),
|
|
37
|
+
isDefault: db.bool().description("Whether this is the default address for its type"),
|
|
38
|
+
...((params.fields ?? {}) as F),
|
|
39
|
+
...db.fields.timestamps(),
|
|
40
|
+
})
|
|
41
|
+
.permission(unsafeAllowAllTypePermission)
|
|
42
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const partnerAddress = createPartnerAddressType({});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
type TailorAnyDBType,
|
|
5
|
+
unsafeAllowAllGqlPermission,
|
|
6
|
+
unsafeAllowAllTypePermission,
|
|
7
|
+
} from "@tailor-platform/sdk";
|
|
8
|
+
import { currency as currencyStub } from "../lib/_db_deps";
|
|
9
|
+
import { businessPartner } from "./businessPartner";
|
|
10
|
+
|
|
11
|
+
export interface CreatePartnerBankAccountTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
12
|
+
fields?: F;
|
|
13
|
+
currencyType?: TailorAnyDBType;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function createPartnerBankAccountType<const F extends Record<string, TailorAnyDBField>>(
|
|
17
|
+
params: CreatePartnerBankAccountTypeParams<F>,
|
|
18
|
+
) {
|
|
19
|
+
return db
|
|
20
|
+
.type("PartnerBankAccount", {
|
|
21
|
+
partnerId: db
|
|
22
|
+
.uuid()
|
|
23
|
+
.relation({
|
|
24
|
+
type: "n-1",
|
|
25
|
+
toward: { type: businessPartner },
|
|
26
|
+
backward: "partnerBankAccounts",
|
|
27
|
+
})
|
|
28
|
+
.description("Foreign key to BusinessPartner"),
|
|
29
|
+
bankName: db.string().description("Name of the bank"),
|
|
30
|
+
accountHolderName: db.string().description("Name of the account holder"),
|
|
31
|
+
accountNumber: db.string({ optional: true }).description("Bank account number"),
|
|
32
|
+
routingNumber: db.string({ optional: true }).description("Domestic routing number"),
|
|
33
|
+
iban: db.string({ optional: true }).description("International Bank Account Number"),
|
|
34
|
+
swiftBic: db
|
|
35
|
+
.string({ optional: true })
|
|
36
|
+
.description("SWIFT/BIC code for international transfers"),
|
|
37
|
+
currencyId: db
|
|
38
|
+
.uuid()
|
|
39
|
+
.relation({
|
|
40
|
+
type: "n-1",
|
|
41
|
+
toward: { type: params.currencyType ?? currencyStub },
|
|
42
|
+
backward: "partnerBankAccounts",
|
|
43
|
+
})
|
|
44
|
+
.description("Foreign key to Currency from primitives module"),
|
|
45
|
+
isDefault: db.bool().description("Whether this is the default bank account for the partner"),
|
|
46
|
+
...((params.fields ?? {}) as F),
|
|
47
|
+
...db.fields.timestamps(),
|
|
48
|
+
})
|
|
49
|
+
.permission(unsafeAllowAllTypePermission)
|
|
50
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export const partnerBankAccount = createPartnerBankAccountType({});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
unsafeAllowAllGqlPermission,
|
|
5
|
+
unsafeAllowAllTypePermission,
|
|
6
|
+
} from "@tailor-platform/sdk";
|
|
7
|
+
import { businessPartner } from "./businessPartner";
|
|
8
|
+
|
|
9
|
+
export const IDENTIFICATION_TYPES = [
|
|
10
|
+
"TAX_ID",
|
|
11
|
+
"VAT",
|
|
12
|
+
"DUNS",
|
|
13
|
+
"COMPANY_REGISTRY",
|
|
14
|
+
"NATIONAL_ID",
|
|
15
|
+
"OTHER",
|
|
16
|
+
] as const;
|
|
17
|
+
|
|
18
|
+
export interface CreatePartnerIdentificationTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
19
|
+
fields?: F;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function createPartnerIdentificationType<const F extends Record<string, TailorAnyDBField>>(
|
|
23
|
+
params: CreatePartnerIdentificationTypeParams<F>,
|
|
24
|
+
) {
|
|
25
|
+
return db
|
|
26
|
+
.type("PartnerIdentification", {
|
|
27
|
+
partnerId: db
|
|
28
|
+
.uuid()
|
|
29
|
+
.relation({
|
|
30
|
+
type: "n-1",
|
|
31
|
+
toward: { type: businessPartner },
|
|
32
|
+
backward: "partnerIdentifications",
|
|
33
|
+
})
|
|
34
|
+
.description("Foreign key to BusinessPartner"),
|
|
35
|
+
type: db
|
|
36
|
+
.enum(["TAX_ID", "VAT", "DUNS", "COMPANY_REGISTRY", "NATIONAL_ID", "OTHER"])
|
|
37
|
+
.description(
|
|
38
|
+
"Identification type: TAX_ID, VAT, DUNS, COMPANY_REGISTRY, NATIONAL_ID, OTHER",
|
|
39
|
+
),
|
|
40
|
+
value: db.string().description("Identification value (e.g., tax number, VAT number)"),
|
|
41
|
+
issuingCountry: db
|
|
42
|
+
.string({ optional: true })
|
|
43
|
+
.description("ISO 3166-1 alpha-2 country code of the issuing authority"),
|
|
44
|
+
validFrom: db.date({ optional: true }).description("Start date of validity period"),
|
|
45
|
+
validTo: db.date({ optional: true }).description("End date of validity period"),
|
|
46
|
+
...((params.fields ?? {}) as F),
|
|
47
|
+
...db.fields.timestamps(),
|
|
48
|
+
})
|
|
49
|
+
.permission(unsafeAllowAllTypePermission)
|
|
50
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export const partnerIdentification = createPartnerIdentificationType({});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
db,
|
|
3
|
+
type TailorAnyDBField,
|
|
4
|
+
unsafeAllowAllGqlPermission,
|
|
5
|
+
unsafeAllowAllTypePermission,
|
|
6
|
+
} from "@tailor-platform/sdk";
|
|
7
|
+
import { businessPartner } from "./businessPartner";
|
|
8
|
+
|
|
9
|
+
export const PARTNER_ROLES = ["CUSTOMER", "SUPPLIER"] as const;
|
|
10
|
+
|
|
11
|
+
export interface CreatePartnerRoleTypeParams<F extends Record<string, TailorAnyDBField>> {
|
|
12
|
+
fields?: F;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function createPartnerRoleType<const F extends Record<string, TailorAnyDBField>>(
|
|
16
|
+
params: CreatePartnerRoleTypeParams<F>,
|
|
17
|
+
) {
|
|
18
|
+
return db
|
|
19
|
+
.type("PartnerRole", {
|
|
20
|
+
partnerId: db
|
|
21
|
+
.uuid()
|
|
22
|
+
.relation({
|
|
23
|
+
type: "n-1",
|
|
24
|
+
toward: { type: businessPartner },
|
|
25
|
+
backward: "partnerRoles",
|
|
26
|
+
})
|
|
27
|
+
.description("Foreign key to BusinessPartner"),
|
|
28
|
+
role: db
|
|
29
|
+
.enum(["CUSTOMER", "SUPPLIER"])
|
|
30
|
+
.description("Role classification: CUSTOMER or SUPPLIER"),
|
|
31
|
+
...((params.fields ?? {}) as F),
|
|
32
|
+
...db.fields.timestamps(),
|
|
33
|
+
})
|
|
34
|
+
.indexes({
|
|
35
|
+
fields: ["partnerId", "role"],
|
|
36
|
+
unique: true,
|
|
37
|
+
name: "partner_role_unique_idx",
|
|
38
|
+
})
|
|
39
|
+
.permission(unsafeAllowAllTypePermission)
|
|
40
|
+
.gqlPermission(unsafeAllowAllGqlPermission);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const partnerRole = createPartnerRoleType({});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ActivatePartner
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
activatePartner transitions a business partner from DRAFT to ACTIVE status, making the partner eligible for role assignments, transactions, and other downstream operations. Only partners in DRAFT status can be activated.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Partner must exist in the system
|
|
10
|
+
- Partner must be in DRAFT status
|
|
11
|
+
- After activation, the partner can be assigned roles and participate in transactions
|
|
12
|
+
|
|
13
|
+
## Process Flow
|
|
14
|
+
|
|
15
|
+
```mermaid
|
|
16
|
+
flowchart TD
|
|
17
|
+
A[Receive activate request] --> B{Partner exists?}
|
|
18
|
+
B -->|No| C[Return error: not found]
|
|
19
|
+
B -->|Yes| D{Status is DRAFT?}
|
|
20
|
+
D -->|No| E[Return error: invalid state transition]
|
|
21
|
+
D -->|Yes| F[Update status to ACTIVE]
|
|
22
|
+
F --> G[Return activated partner]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## External Dependencies
|
|
26
|
+
|
|
27
|
+
- None
|
|
28
|
+
|
|
29
|
+
## Error Scenarios
|
|
30
|
+
|
|
31
|
+
- **PARTNER_NOT_FOUND**: Specified partner ID does not exist
|
|
32
|
+
- **INVALID_STATE_TRANSITION**: The required state transition is not valid for the current status
|
|
33
|
+
|
|
34
|
+
## Test Cases
|
|
35
|
+
|
|
36
|
+
- activates a DRAFT partner
|
|
37
|
+
- returns error when partner not found
|
|
38
|
+
- returns error when partner is ACTIVE
|
|
39
|
+
- returns error when partner is INACTIVE
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# AssignRoleToPartner
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
assignRoleToPartner assigns a business role (CUSTOMER or SUPPLIER) to an active partner. Roles determine which business processes a partner can participate in. A partner can hold multiple roles simultaneously (e.g., both CUSTOMER and SUPPLIER). The operation is idempotent — assigning a role that is already present does not produce an error.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Partner must exist in the system
|
|
10
|
+
- Partner must be in ACTIVE status
|
|
11
|
+
- Role must be a valid value (CUSTOMER or SUPPLIER)
|
|
12
|
+
- A partner can hold multiple roles simultaneously
|
|
13
|
+
- Assignment is idempotent — re-assigning an existing role succeeds without error
|
|
14
|
+
|
|
15
|
+
## Process Flow
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
A[Receive assign role request] --> B{Partner exists?}
|
|
20
|
+
B -->|No| C[Return error: partner not found]
|
|
21
|
+
B -->|Yes| D{Partner is ACTIVE?}
|
|
22
|
+
D -->|No| E[Return error: partner not active]
|
|
23
|
+
D -->|Yes| F{Role valid?}
|
|
24
|
+
F -->|No| G[Return error: invalid role]
|
|
25
|
+
F -->|Yes| H{Role already assigned?}
|
|
26
|
+
H -->|Yes| I[Return success - idempotent]
|
|
27
|
+
H -->|No| J[Assign role to partner]
|
|
28
|
+
J --> K[Return updated partner]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## External Dependencies
|
|
32
|
+
|
|
33
|
+
- None
|
|
34
|
+
|
|
35
|
+
## Error Scenarios
|
|
36
|
+
|
|
37
|
+
- **PARTNER_NOT_FOUND**: Specified partner ID does not exist
|
|
38
|
+
- **PARTNER_NOT_ACTIVE**: Partner is not in ACTIVE status
|
|
39
|
+
- **INVALID_ROLE**: Role is not CUSTOMER or SUPPLIER
|
|
40
|
+
|
|
41
|
+
## Test Cases
|
|
42
|
+
|
|
43
|
+
- assigns CUSTOMER to partner with no roles
|
|
44
|
+
- assigns SUPPLIER to partner that already holds CUSTOMER
|
|
45
|
+
- idempotent when role already assigned
|
|
46
|
+
- returns error when partner not found
|
|
47
|
+
- returns error when partner is INACTIVE
|
|
48
|
+
- returns error when partner is DRAFT
|
|
49
|
+
- returns error when role is invalid
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# CreateContactPerson
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createContactPerson adds a contact person to an organization-type business partner. Contact persons represent individuals within an organization who serve as points of contact for business communications. At least one communication channel (email or phone) is required. Contact persons are created in ACTIVE status.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Partner must exist in the system
|
|
10
|
+
- Partner must be of type ORGANIZATION — contact persons cannot be added to INDIVIDUAL partners
|
|
11
|
+
- First name and last name are required and must be non-empty
|
|
12
|
+
- At least one of email or phone must be provided
|
|
13
|
+
- Email, if provided, must be in a valid format
|
|
14
|
+
- Contact person is created in ACTIVE status
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create request] --> B{Partner exists?}
|
|
21
|
+
B -->|No| C[Return error: partner not found]
|
|
22
|
+
B -->|Yes| D{Partner is ORGANIZATION?}
|
|
23
|
+
D -->|No| E[Return error: partner not organization]
|
|
24
|
+
D -->|Yes| F1{firstName and lastName non-empty?}
|
|
25
|
+
F1 -->|No| F2[Return error: invalid name]
|
|
26
|
+
F1 -->|Yes| F{Email or phone provided?}
|
|
27
|
+
F -->|No| G[Return error: missing communication channel]
|
|
28
|
+
F -->|Yes| H{Email provided?}
|
|
29
|
+
H -->|Yes| I{Email format valid?}
|
|
30
|
+
I -->|No| J[Return error: invalid email format]
|
|
31
|
+
I -->|Yes| K[Create contact person in ACTIVE status]
|
|
32
|
+
H -->|No| K
|
|
33
|
+
K --> L[Return created contact person]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## External Dependencies
|
|
37
|
+
|
|
38
|
+
- None
|
|
39
|
+
|
|
40
|
+
## Error Scenarios
|
|
41
|
+
|
|
42
|
+
- **PARTNER_NOT_FOUND**: Specified partner ID does not exist
|
|
43
|
+
- **PARTNER_NOT_ORGANIZATION**: Partner is of type INDIVIDUAL, not ORGANIZATION
|
|
44
|
+
- **INVALID_FIRST_NAME**: First name is empty or not provided
|
|
45
|
+
- **INVALID_LAST_NAME**: Last name is empty or not provided
|
|
46
|
+
- **MISSING_COMMUNICATION_CHANNEL**: Neither email nor phone was provided
|
|
47
|
+
- **INVALID_EMAIL_FORMAT**: Provided email is not in a valid format
|
|
48
|
+
|
|
49
|
+
## Test Cases
|
|
50
|
+
|
|
51
|
+
- creates contact person
|
|
52
|
+
- returns error when partner not found
|
|
53
|
+
- returns error when partner is INDIVIDUAL
|
|
54
|
+
- returns error when firstName is empty
|
|
55
|
+
- returns error when lastName is empty
|
|
56
|
+
- returns error when neither email nor phone provided
|
|
57
|
+
- returns error for invalid email format
|
|
58
|
+
- returns error when whitespace-only channels provided as only communication
|
|
59
|
+
- creates with ACTIVE status
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# CreatePartner
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createPartner establishes a new business partner in the system. Partners represent external entities (organizations or individuals) with which the company conducts business. Every partner is created in DRAFT status, allowing review and enrichment before activation. The partner type (ORGANIZATION or INDIVIDUAL) is set at creation and cannot be changed afterward.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Name is required and must be non-empty
|
|
10
|
+
- Type is required and must be one of ORGANIZATION or INDIVIDUAL
|
|
11
|
+
- Type is immutable after creation — it cannot be changed once assigned
|
|
12
|
+
- Partner is always created in DRAFT status regardless of input
|
|
13
|
+
- Preferred currency, if provided, must reference an existing Currency in the primitives module
|
|
14
|
+
- Company ID must reference an existing Company in the organization module
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create request] --> B{Company exists?}
|
|
21
|
+
B -->|No| C[Return error: company not found]
|
|
22
|
+
B -->|Yes| D{Name non-empty?}
|
|
23
|
+
D -->|No| E[Return error: invalid name]
|
|
24
|
+
D -->|Yes| F{Type valid?}
|
|
25
|
+
F -->|No| G[Return error: invalid partner type]
|
|
26
|
+
F -->|Yes| H{Currency provided?}
|
|
27
|
+
H -->|Yes| I{Currency exists?}
|
|
28
|
+
I -->|No| J[Return error: currency not found]
|
|
29
|
+
I -->|Yes| K[Create partner in DRAFT status]
|
|
30
|
+
H -->|No| K
|
|
31
|
+
K --> L[Return created partner]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## External Dependencies
|
|
35
|
+
|
|
36
|
+
- [organization::Company](../../../organization/docs/models/Company.md) - Validates that the referenced company exists
|
|
37
|
+
- [primitives::Currency](../../../primitives/docs/models/Currency.md) - Validates that the referenced preferred currency exists (when provided)
|
|
38
|
+
|
|
39
|
+
## Error Scenarios
|
|
40
|
+
|
|
41
|
+
- **COMPANY_NOT_FOUND**: Specified company ID does not exist
|
|
42
|
+
- **INVALID_NAME**: Name is empty or not provided
|
|
43
|
+
- **INVALID_PARTNER_TYPE**: Type is not ORGANIZATION or INDIVIDUAL
|
|
44
|
+
- **CURRENCY_NOT_FOUND**: Referenced preferred currency does not exist
|
|
45
|
+
|
|
46
|
+
## Test Cases
|
|
47
|
+
|
|
48
|
+
- creates partner in DRAFT status
|
|
49
|
+
- returns error when company not found
|
|
50
|
+
- returns error when type is invalid
|
|
51
|
+
- returns error when name is empty
|
|
52
|
+
- creates partner without preferred currency
|
|
53
|
+
- creates partner with preferred currency
|
|
54
|
+
- returns error when currency not found
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# CreatePartnerAddress
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
createPartnerAddress adds a physical or mailing address to a business partner. Addresses are categorized by type and can be designated as default for their type. Partners in DRAFT or ACTIVE status can have addresses added, but INACTIVE partners cannot receive new addresses. When an address is set as default, any previous default of the same type for that partner is automatically unset.
|
|
6
|
+
|
|
7
|
+
## Business Rules
|
|
8
|
+
|
|
9
|
+
- Partner must exist in the system
|
|
10
|
+
- Partner must be in DRAFT or ACTIVE status (not INACTIVE)
|
|
11
|
+
- Address type must be a valid enum value
|
|
12
|
+
- Line1, city, postal code, and country are required
|
|
13
|
+
- Country must be a valid ISO 3166-1 alpha-2 code
|
|
14
|
+
- If isDefault is true, the previous default address of the same type for the partner is unset
|
|
15
|
+
|
|
16
|
+
## Process Flow
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart TD
|
|
20
|
+
A[Receive create request] --> B{Partner exists?}
|
|
21
|
+
B -->|No| C[Return error: partner not found]
|
|
22
|
+
B -->|Yes| D{Partner is INACTIVE?}
|
|
23
|
+
D -->|Yes| E[Return error: partner inactive]
|
|
24
|
+
D -->|No| F{Address type valid?}
|
|
25
|
+
F -->|No| G[Return error: invalid address type]
|
|
26
|
+
F -->|Yes| H1{line1, city, postalCode non-empty?}
|
|
27
|
+
H1 -->|No| H2[Return error: missing required address field]
|
|
28
|
+
H1 -->|Yes| H{Country code valid?}
|
|
29
|
+
H -->|No| I[Return error: invalid country code]
|
|
30
|
+
H -->|Yes| J{isDefault true?}
|
|
31
|
+
J -->|Yes| K[Unset previous default of same type]
|
|
32
|
+
K --> L[Create address as default]
|
|
33
|
+
J -->|No| L[Create address record]
|
|
34
|
+
L --> M[Return created address]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## External Dependencies
|
|
38
|
+
|
|
39
|
+
- None
|
|
40
|
+
|
|
41
|
+
## Error Scenarios
|
|
42
|
+
|
|
43
|
+
- **PARTNER_NOT_FOUND**: Specified partner ID does not exist
|
|
44
|
+
- **PARTNER_INACTIVE**: Partner is in INACTIVE status
|
|
45
|
+
- **INVALID_ADDRESS_TYPE**: Address type is not a valid enum value
|
|
46
|
+
- **MISSING_REQUIRED_ADDRESS_FIELD**: One or more required fields (line1, city, postalCode) are empty or not provided
|
|
47
|
+
- **INVALID_COUNTRY_CODE**: Country is not a valid ISO 3166-1 alpha-2 code
|
|
48
|
+
|
|
49
|
+
## Test Cases
|
|
50
|
+
|
|
51
|
+
- creates address for active partner
|
|
52
|
+
- creates address for draft partner
|
|
53
|
+
- returns error when partner not found
|
|
54
|
+
- returns error when partner is inactive
|
|
55
|
+
- returns error when address type is invalid
|
|
56
|
+
- returns error when required fields missing
|
|
57
|
+
- returns error when country code is invalid
|
|
58
|
+
- returns error when country code is lowercase
|
|
59
|
+
- creates non-default address
|
|
60
|
+
- unsets previous default when creating with isDefault true
|