@tailor-platform/erp-kit 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/README.md +35 -7
- package/dist/cli.mjs +779 -268
- package/package.json +5 -4
- package/skills/erp-kit-app-1-requirements/SKILL.md +8 -9
- 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-3-plan/SKILL.md +27 -27
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +21 -17
- package/skills/erp-kit-app-3-plan/references/screen-extraction.md +15 -1
- package/skills/erp-kit-app-3-plan/references/story-extraction.md +8 -2
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +9 -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 +5 -0
- package/skills/erp-kit-app-6-impl-frontend/references/pages.md +16 -46
- package/skills/erp-kit-app-7-impl-review/SKILL.md +13 -11
- 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 +21 -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 +21 -5
- 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/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 -1
- package/src/generator/generate-code.test.ts +33 -6
- 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/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 +28 -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 +36 -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 +42 -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 +164 -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 +42 -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/.gitkeep +0 -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 +83 -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/errors.ts +2 -0
- package/src/modules/business-partner/lib/permissions.generated.ts +30 -0
- package/src/modules/business-partner/lib/types.ts +53 -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/errors.ts +0 -0
- package/src/modules/coa-management/lib/permissions.generated.ts +20 -0
- package/src/modules/coa-management/lib/types.ts +22 -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/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/errors.ts +1 -0
- package/src/modules/organization/lib/permissions.generated.ts +19 -0
- package/src/modules/organization/lib/types.ts +16 -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/setBaseCurrency.test.ts +8 -64
- package/src/modules/primitives/command/setBaseCurrency.ts +6 -64
- 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 +5 -0
- package/src/modules/product-management/README.md +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/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/src/commands/module/list.test.ts +0 -57
- package/src/commands/module/list.ts +0 -64
- /package/src/modules/{accounting → audit/db}/.gitkeep +0 -0
- /package/src/modules/audit/{.gitkeep → executor/.gitkeep} +0 -0
- /package/src/modules/{coa-management/.gitkeep → audit/lib/errors.ts} +0 -0
- /package/src/modules/{supplier-management → business-partner}/.gitkeep +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailor-platform/erp-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Opinionated ERP toolkit for building business applications on Tailor Platform",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bin": {
|
|
@@ -35,12 +35,13 @@
|
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@tailor-platform/function-kysely-tailordb": "0.1.3",
|
|
37
37
|
"@tailor-platform/function-types": "0.8.2",
|
|
38
|
-
"@tailor-platform/sdk": "1.25.
|
|
38
|
+
"@tailor-platform/sdk": "1.25.2",
|
|
39
39
|
"@types/mdast": "^4.0.4",
|
|
40
40
|
"@types/node": "^25.1.0",
|
|
41
|
+
"@typescript-eslint/parser": "^8.57.0",
|
|
41
42
|
"eslint": "10.0.3",
|
|
42
43
|
"kysely": "0.28.11",
|
|
43
|
-
"tsdown": "0.21.
|
|
44
|
+
"tsdown": "0.21.3",
|
|
44
45
|
"typescript": "^5.7.3",
|
|
45
46
|
"vitest": "^4.0.0",
|
|
46
47
|
"@tailor-platform/eslint-config": "0.0.1"
|
|
@@ -48,7 +49,7 @@
|
|
|
48
49
|
"peerDependencies": {
|
|
49
50
|
"@tailor-platform/function-kysely-tailordb": "0.1.3",
|
|
50
51
|
"@tailor-platform/function-types": "0.8.2",
|
|
51
|
-
"@tailor-platform/sdk": "1.25.
|
|
52
|
+
"@tailor-platform/sdk": "1.25.2",
|
|
52
53
|
"kysely": "0.28.11"
|
|
53
54
|
},
|
|
54
55
|
"engines": {
|
|
@@ -26,15 +26,14 @@ Focus on "what" the application should do, not "how" it will be implemented.
|
|
|
26
26
|
|
|
27
27
|
### Phase 2: Clarify
|
|
28
28
|
|
|
29
|
-
Use AskUserQuestion to clarify undefined requirements
|
|
29
|
+
Use AskUserQuestion to clarify undefined requirements. Focus on business-level scope and workflows — not platform capabilities like authentication.
|
|
30
30
|
|
|
31
|
-
| Category
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
| Lifecycle | Create only / Full lifecycle (activate/deact)? |
|
|
31
|
+
| Category | Example Questions |
|
|
32
|
+
| ---------------- | ---------------------------------------------------------------------------- |
|
|
33
|
+
| Scope | Which steps are MVP-essential? Any steps that can be deferred? |
|
|
34
|
+
| Edge Cases | How far to handle cancellation, rejection, or mid-flow abandonment? |
|
|
35
|
+
| Actor Boundaries | Are approver and executor separate? What is each actor's operational scope? |
|
|
36
|
+
| Business Rules | Which steps are automated vs manual? What conditional branches exist? |
|
|
38
37
|
|
|
39
38
|
Ask 3-4 questions at a time using multiSelect where appropriate.
|
|
40
39
|
|
|
@@ -76,7 +75,7 @@ At Tier 2, story files do not exist yet. Use `- TBD` as a placeholder to avoid b
|
|
|
76
75
|
### Phase 4: Validate
|
|
77
76
|
|
|
78
77
|
```bash
|
|
79
|
-
|
|
78
|
+
erp-kit app check -p {APP_ROOT}
|
|
80
79
|
```
|
|
81
80
|
|
|
82
81
|
See [schema-constraints.md](../erp-kit-app-shared/references/schema-constraints.md) for notes on expected "No matching files found" output.
|
|
@@ -11,6 +11,10 @@ Business flow docs: {{BUSINESS_FLOW_DOCS}}
|
|
|
11
11
|
|
|
12
12
|
Read [erp-kit-app-shared/references/schema-constraints.md](../../erp-kit-app-shared/references/schema-constraints.md) before evaluating. **Never recommend changes that violate the schema.**
|
|
13
13
|
|
|
14
|
+
## Tier 2 Scope
|
|
15
|
+
|
|
16
|
+
This review targets Tier 1-2 documentation only. Stories (`## Stories` section in business flows) are created in step 3 (`erp-kit-app-3-plan`). A `- TBD` placeholder in the Stories section is expected and correct at this stage — do **not** flag it as incomplete or missing.
|
|
17
|
+
|
|
14
18
|
## Instructions
|
|
15
19
|
|
|
16
20
|
1. Read the application README at the path above
|
|
@@ -11,6 +11,10 @@ Business flow docs: {{BUSINESS_FLOW_DOCS}}
|
|
|
11
11
|
|
|
12
12
|
Read [erp-kit-app-shared/references/schema-constraints.md](../../erp-kit-app-shared/references/schema-constraints.md) before evaluating. When checking `naming_consistency`, validate that H1 headings follow the schema rules — different doc types have different heading formats.
|
|
13
13
|
|
|
14
|
+
## Tier 2 Scope
|
|
15
|
+
|
|
16
|
+
This review targets Tier 1-2 documentation only. Stories (`## Stories` section in business flows) are created in step 3 (`erp-kit-app-3-plan`). A `- TBD` placeholder in the Stories section is expected and correct at this stage — do **not** flag it as a broken link, missing content, or incomplete documentation.
|
|
17
|
+
|
|
14
18
|
## Instructions
|
|
15
19
|
|
|
16
20
|
1. Read the application README at the path above
|
|
@@ -29,26 +29,36 @@ Define shared context for all agents:
|
|
|
29
29
|
- `APP_NAME`: basename of APP_ROOT
|
|
30
30
|
- `BUSINESS_FLOW_DOCS`: glob `<APP_ROOT>/docs/business-flow/*/README.md`
|
|
31
31
|
- `ACTOR_DOCS`: glob `<APP_ROOT>/docs/actors/*.md`
|
|
32
|
+
- `MODULE_OVERVIEW`: output of `erp-kit doc modules`
|
|
32
33
|
|
|
33
34
|
Verify at least `BUSINESS_FLOW_DOCS` is non-empty. If no business flow docs exist, stop with: "No business flow docs found under <APP_ROOT>/docs/. Run erp-kit-app-1-requirements first."
|
|
34
35
|
|
|
36
|
+
Collect module overview:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
erp-kit doc modules
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
This returns each module's name, overview, command/query/model counts, and dependencies. Save the full output as `MODULE_OVERVIEW` — all three agents receive it.
|
|
43
|
+
|
|
35
44
|
## Step 2: Dispatch Agents (parallelize if possible)
|
|
36
45
|
|
|
37
46
|
Launch 3 Agent tool calls in parallel — one per extraction concern.
|
|
38
|
-
Each agent receives: APP_NAME, relevant doc file paths.
|
|
47
|
+
Each agent receives: APP_NAME, relevant doc file paths, and MODULE_OVERVIEW.
|
|
39
48
|
|
|
40
|
-
| Agent | Prompt Template | Inputs
|
|
41
|
-
| ----- | ---------------------------------------------------------------------- |
|
|
42
|
-
| 1 | [references/story-extraction.md](references/story-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
|
|
43
|
-
| 2 | [references/screen-extraction.md](references/screen-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
|
|
44
|
-
| 3 | [references/resolver-extraction.md](references/resolver-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS |
|
|
49
|
+
| Agent | Prompt Template | Inputs |
|
|
50
|
+
| ----- | ---------------------------------------------------------------------- | --------------------------------------------------------- |
|
|
51
|
+
| 1 | [references/story-extraction.md](references/story-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS, MODULE_OVERVIEW |
|
|
52
|
+
| 2 | [references/screen-extraction.md](references/screen-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS, MODULE_OVERVIEW |
|
|
53
|
+
| 3 | [references/resolver-extraction.md](references/resolver-extraction.md) | APP_NAME, ACTOR_DOCS, BUSINESS_FLOW_DOCS, MODULE_OVERVIEW |
|
|
45
54
|
|
|
46
55
|
For each agent:
|
|
47
56
|
|
|
48
57
|
1. Read the prompt template file
|
|
49
58
|
2. Replace `{{APP_NAME}}` with the resolved app name
|
|
50
59
|
3. Replace `{{ACTOR_DOCS}}`, `{{BUSINESS_FLOW_DOCS}}` with the actual file paths
|
|
51
|
-
4.
|
|
60
|
+
4. Replace `{{MODULE_OVERVIEW}}` with the output from `erp-kit doc modules`
|
|
61
|
+
5. Dispatch the agent with the filled prompt
|
|
52
62
|
|
|
53
63
|
## Step 3: Aggregate & Present Plan
|
|
54
64
|
|
|
@@ -59,33 +69,23 @@ After ALL agents return:
|
|
|
59
69
|
- Stories to create (with actor, flow, scenario patterns)
|
|
60
70
|
- Screens to create (with type, fields, actions)
|
|
61
71
|
- Resolvers to create (with operation type, module mapping)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
## Step 4: Check Module Dependencies
|
|
72
|
+
## Step 4: Resolve Module Gaps
|
|
65
73
|
|
|
66
|
-
|
|
74
|
+
Step 2's resolver agent mapped resolvers to erp-kit modules using `MODULE_OVERVIEW` and flagged any operations that could not be mapped as module gaps.
|
|
67
75
|
|
|
68
|
-
|
|
69
|
-
ls packages/erp-kit/src/modules/
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
For each resolver that references a module command, check the module and command exist:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
ls packages/erp-kit/src/modules/<module-name>/docs/commands/
|
|
76
|
-
```
|
|
76
|
+
If there are no gaps, proceed to Step 5.
|
|
77
77
|
|
|
78
|
-
**If
|
|
78
|
+
**If resolvers require functionality that no erp-kit module provides:**
|
|
79
79
|
|
|
80
|
-
1.
|
|
81
|
-
2. Create
|
|
82
|
-
3. Return to this step after modules
|
|
80
|
+
1. Group the unmapped operations by domain to identify what custom modules are needed
|
|
81
|
+
2. Create each custom module using `erp-kit-module-1-requirements` skill
|
|
82
|
+
3. Return to this step after the custom modules are ready
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
For resolvers that reference erp-kit modules, use `MODULE_OVERVIEW` as the source of truth. For resolvers that reference custom modules, use the custom module's own documentation.
|
|
85
85
|
|
|
86
86
|
## Step 5: Scaffold & Populate
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
Scaffold using `erp-kit` CLI:
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
91
|
# Tier 3: Stories
|
|
@@ -117,7 +117,7 @@ Read-only stories should have `None` under `## Resolvers`.
|
|
|
117
117
|
## Step 6: Validate
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
|
-
|
|
120
|
+
erp-kit app check -p {APP_ROOT}
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
## Naming Conventions
|
|
@@ -6,11 +6,23 @@ App: {{APP_NAME}}
|
|
|
6
6
|
Actor docs: {{ACTOR_DOCS}}
|
|
7
7
|
Business flow docs: {{BUSINESS_FLOW_DOCS}}
|
|
8
8
|
|
|
9
|
+
## Available Modules
|
|
10
|
+
|
|
11
|
+
The following modules are available in erp-kit. Use this to map resolvers to real module commands.
|
|
12
|
+
|
|
13
|
+
{{MODULE_OVERVIEW}}
|
|
14
|
+
|
|
15
|
+
To inspect a specific module's commands in detail, run:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
erp-kit doc module <module-name> command <command-name>
|
|
19
|
+
```
|
|
20
|
+
|
|
9
21
|
## Instructions
|
|
10
22
|
|
|
11
23
|
1. Read ALL actor docs at the paths above
|
|
12
24
|
2. Read ALL business flow docs at the paths above
|
|
13
|
-
3. Identify GraphQL resolvers needed for each business flow
|
|
25
|
+
3. Identify GraphQL resolvers needed for each business flow, using the module overview and `erp-kit doc module <name> command` for detail
|
|
14
26
|
4. Return results as a structured markdown report
|
|
15
27
|
|
|
16
28
|
## Extraction Rules
|
|
@@ -21,26 +33,13 @@ For each business flow step that modifies data:
|
|
|
21
33
|
|
|
22
34
|
1. Identify the operation type (create, update, delete, approve, etc.)
|
|
23
35
|
2. Map to a resolver name using camelCase action-verb convention
|
|
24
|
-
3. Identify the module command the resolver will call
|
|
36
|
+
3. Identify the module command the resolver will call. If no erp-kit module covers the domain, flag it as a module gap.
|
|
25
37
|
4. Extract inputs, outputs, and error scenarios
|
|
26
38
|
|
|
27
39
|
### Operation → Resolver Mapping
|
|
28
40
|
|
|
29
41
|
See [erp-kit-app-shared/references/resolver-classification.md](../../erp-kit-app-shared/references/resolver-classification.md) for the full operation → resolver mapping table and custom vs built-in classification.
|
|
30
42
|
|
|
31
|
-
### Module Command Mapping
|
|
32
|
-
|
|
33
|
-
For each resolver, identify which erp-kit module provides the command:
|
|
34
|
-
|
|
35
|
-
| Resolver Operation | Typical Module |
|
|
36
|
-
| ------------------ | --------------------- |
|
|
37
|
-
| User invite/roles | `user-management` |
|
|
38
|
-
| Supplier CRUD | `supplier-management` |
|
|
39
|
-
| Document handling | `document-management` |
|
|
40
|
-
| Task workflows | `task-management` |
|
|
41
|
-
| Item CRUD | `item-management` |
|
|
42
|
-
| Unit/currency | `primitives` |
|
|
43
|
-
|
|
44
43
|
### Resolver Content
|
|
45
44
|
|
|
46
45
|
For each resolver, extract:
|
|
@@ -78,12 +77,17 @@ For each resolver:
|
|
|
78
77
|
|
|
79
78
|
List entities that only need built-in list/get queries (no custom resolver needed).
|
|
80
79
|
|
|
81
|
-
### Module
|
|
80
|
+
### Module Gaps
|
|
81
|
+
|
|
82
|
+
List any operations that could not be mapped to an existing erp-kit module. These will require a custom module. For each gap:
|
|
82
83
|
|
|
83
|
-
|
|
84
|
+
- **Operation:** what the flow requires
|
|
85
|
+
- **Suggested custom module:** proposed module name and domain
|
|
86
|
+
- **Suggested command:** proposed command name
|
|
84
87
|
|
|
85
88
|
### Summary
|
|
86
89
|
|
|
87
90
|
- Total custom resolvers
|
|
88
91
|
- Total built-in queries
|
|
89
92
|
- Resolvers per module (table)
|
|
93
|
+
- Module gaps (if any)
|
|
@@ -6,12 +6,25 @@ App: {{APP_NAME}}
|
|
|
6
6
|
Actor docs: {{ACTOR_DOCS}}
|
|
7
7
|
Business flow docs: {{BUSINESS_FLOW_DOCS}}
|
|
8
8
|
|
|
9
|
+
## Available Modules
|
|
10
|
+
|
|
11
|
+
The following modules are available in erp-kit. Use this to understand which entities exist and what operations are available.
|
|
12
|
+
|
|
13
|
+
{{MODULE_OVERVIEW}}
|
|
14
|
+
|
|
15
|
+
To inspect a specific module's model (domain description, state transitions, invariants, commands), run:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
erp-kit doc module <module-name> model <model-name>
|
|
19
|
+
```
|
|
20
|
+
|
|
9
21
|
## Instructions
|
|
10
22
|
|
|
11
23
|
1. Read ALL actor docs at the paths above
|
|
12
24
|
2. Read ALL business flow docs at the paths above
|
|
13
25
|
3. Identify screens needed for each business flow
|
|
14
|
-
4.
|
|
26
|
+
4. For screens that display or edit module entities, use `erp-kit doc module <name> model` to understand the entity's domain
|
|
27
|
+
5. Return results as a structured markdown report
|
|
15
28
|
|
|
16
29
|
## Extraction Rules
|
|
17
30
|
|
|
@@ -63,6 +76,7 @@ For each screen:
|
|
|
63
76
|
|
|
64
77
|
- **Screen:** `<screen-name>`
|
|
65
78
|
- **Type:** ListView / Form / DetailView
|
|
79
|
+
- **Module source:** which module's model provides the data (if applicable)
|
|
66
80
|
- **Fields/Columns:** bulleted list of fields with types
|
|
67
81
|
- **Actions:** bulleted list of actions
|
|
68
82
|
- **Referenced by stories:** which stories use this screen
|
|
@@ -6,6 +6,12 @@ App: {{APP_NAME}}
|
|
|
6
6
|
Actor docs: {{ACTOR_DOCS}}
|
|
7
7
|
Business flow docs: {{BUSINESS_FLOW_DOCS}}
|
|
8
8
|
|
|
9
|
+
## Available Modules
|
|
10
|
+
|
|
11
|
+
The following modules are available in erp-kit. Use this to determine whether a story needs custom resolvers or can rely on built-in queries.
|
|
12
|
+
|
|
13
|
+
{{MODULE_OVERVIEW}}
|
|
14
|
+
|
|
9
15
|
## Instructions
|
|
10
16
|
|
|
11
17
|
1. Read ALL actor docs at the paths above
|
|
@@ -49,10 +55,10 @@ For each story, extract:
|
|
|
49
55
|
|
|
50
56
|
### Resolver Classification
|
|
51
57
|
|
|
52
|
-
For each story, determine:
|
|
58
|
+
For each story, determine using the module overview:
|
|
53
59
|
|
|
54
60
|
- **Needs resolvers**: Story involves create/update/delete operations → mark as `- TBD` for resolvers
|
|
55
|
-
- **Read-only**: Story only views/lists data → mark as `None` for resolvers
|
|
61
|
+
- **Read-only**: Story only views/lists data and built-in queries suffice → mark as `None` for resolvers
|
|
56
62
|
|
|
57
63
|
## Naming Convention
|
|
58
64
|
|
|
@@ -27,9 +27,13 @@ All four tiers of documentation must exist:
|
|
|
27
27
|
## Workflow
|
|
28
28
|
|
|
29
29
|
```
|
|
30
|
-
ANALYZE DOCS → MODULE WIRING → CONFIG → RESOLVERS → GENERATED FILES →
|
|
30
|
+
ANALYZE DOCS → MODULE WIRING → CONFIG → RESOLVERS → GENERATED FILES → DEPLOY
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
### Incremental Verification
|
|
34
|
+
|
|
35
|
+
Run `pnpm lint` and `pnpm typecheck` after each of Phase 2, 3, and 4. Fix errors before moving on.
|
|
36
|
+
|
|
33
37
|
### Phase 1: Analyze Documentation
|
|
34
38
|
|
|
35
39
|
Read all resolver and screen specs to build a complete picture:
|
|
@@ -65,10 +69,12 @@ Key points:
|
|
|
65
69
|
|
|
66
70
|
### Phase 4: Implement Backend Resolvers and Executors
|
|
67
71
|
|
|
68
|
-
Write one file per resolver under `src/
|
|
72
|
+
Write one file per resolver under `src/resolvers/`, one per executor under `executors/`.
|
|
69
73
|
|
|
70
74
|
**Read [resolver & executor patterns reference](references/resolver-patterns.md).**
|
|
71
75
|
|
|
76
|
+
For each resolver, check whether its spec (`docs/resolver/*.md`) documents error codes. If it does, implement a `switch(result.error.code)` block — do not use generic `throw result.error`.
|
|
77
|
+
|
|
72
78
|
Do not directly mutate module-owned tables via Kysely — always use module commands.
|
|
73
79
|
|
|
74
80
|
### Phase 5: Generated Files
|
|
@@ -76,15 +82,7 @@ Do not directly mutate module-owned tables via Kysely — always use module comm
|
|
|
76
82
|
- **Kysely types** (`src/generated/kysely-tailordb.ts`) — Auto-generated by `pnpm generate` after deployment. Before deployment, create a minimal placeholder so the codebase typechecks.
|
|
77
83
|
- **Seed data** (`seed/`) — `exec.mjs` runner + `data/*.jsonl` (records) and `data/*.schema.ts` (validation). Create seed records for initial data (permissions, roles, test users, etc.). Seeded users must have concrete permission keys required by the wired modules.
|
|
78
84
|
|
|
79
|
-
### Phase 6:
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
cd <app-root>/backend
|
|
83
|
-
pnpm lint
|
|
84
|
-
pnpm typecheck
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Phase 7: Deploy Backend & Next Steps
|
|
85
|
+
### Phase 6: Deploy Backend & Next Steps
|
|
88
86
|
|
|
89
87
|
Frontend implementation requires a deployed backend (for GraphQL schema generation). Prompt the user to:
|
|
90
88
|
|
|
@@ -1,26 +1,6 @@
|
|
|
1
1
|
# Application Config
|
|
2
2
|
|
|
3
|
-
`tailor.config.ts` defines the Tailor application configuration.
|
|
4
|
-
|
|
5
|
-
```ts
|
|
6
|
-
export default defineConfig({
|
|
7
|
-
name: "<app-name>",
|
|
8
|
-
cors: ["http://localhost:5173", website.url],
|
|
9
|
-
db: {
|
|
10
|
-
"main-db": {
|
|
11
|
-
files: [`./src/modules.ts`],
|
|
12
|
-
gqlOperations: "query",
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
resolver: {
|
|
16
|
-
"main-resolver": { files: [`./src/modules/**/resolvers/**/*.ts`] },
|
|
17
|
-
},
|
|
18
|
-
executor: { files: [`./src/modules/**/executors/**/*.ts`] },
|
|
19
|
-
auth: auth,
|
|
20
|
-
idp: [idp],
|
|
21
|
-
staticWebsites: [website],
|
|
22
|
-
});
|
|
23
|
-
```
|
|
3
|
+
`tailor.config.ts` defines the Tailor application configuration. Refer to existing examples in the codebase for the full config structure.
|
|
24
4
|
|
|
25
5
|
Key points:
|
|
26
6
|
|
|
@@ -30,7 +10,6 @@ Key points:
|
|
|
30
10
|
|
|
31
11
|
## Auth configuration
|
|
32
12
|
|
|
33
|
-
- Define IdP (`defineIdp`), Auth (`defineAuth`), and static website (`defineStaticWebSite`) using Tailor SDK
|
|
34
13
|
- Prefer stable default naming: auth `default`, IdP `default`, OAuth2 client `default`
|
|
35
14
|
- `userProfile.type` must reference the `user` DB type from `modules.ts`
|
|
36
15
|
- `userProfile.usernameField`: stable unique field (e.g., `email`)
|
|
@@ -42,18 +42,27 @@ body: async (context) => {
|
|
|
42
42
|
|
|
43
43
|
### Error handling
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Resolver specs document error codes the command can return. When codes are documented, add a `case` for every documented code — generic `throw result.error` loses context for the frontend. The error code is a discriminated union, so TypeScript enforces exhaustive handling without a `default` branch.
|
|
46
|
+
|
|
47
|
+
**Do this:**
|
|
46
48
|
|
|
47
49
|
```ts
|
|
48
50
|
if (!result.ok) {
|
|
49
51
|
switch (result.error.code) {
|
|
50
|
-
case "
|
|
51
|
-
throw new Error(`
|
|
52
|
-
|
|
52
|
+
case "INSUFFICIENT_STOCK":
|
|
53
|
+
throw new Error(`Stock insufficient for item ${context.input.itemId}`);
|
|
54
|
+
case "ORDER_ALREADY_CONFIRMED":
|
|
55
|
+
throw new Error("Cannot modify a confirmed order");
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
58
|
```
|
|
56
59
|
|
|
60
|
+
**Not this:**
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
if (!result.ok) throw result.error;
|
|
64
|
+
```
|
|
65
|
+
|
|
57
66
|
Do not directly mutate module-owned tables via Kysely — always use module commands.
|
|
58
67
|
|
|
59
68
|
---
|
|
@@ -43,6 +43,8 @@ Run `pnpm generate` in the frontend directory to fetch the GraphQL schema from t
|
|
|
43
43
|
|
|
44
44
|
### Phase 3: Implement Frontend Pages
|
|
45
45
|
|
|
46
|
+
Run `pnpm lint`, `pnpm typecheck`, and `pnpm gql-tada:check` regularly during implementation. Fix errors before moving on.
|
|
47
|
+
|
|
46
48
|
Create pages driven by screen spec docs. Each screen type has a standard implementation pattern.
|
|
47
49
|
|
|
48
50
|
**Read [pages reference](references/pages.md) for the full pattern catalog.**
|
|
@@ -70,5 +72,8 @@ Key frontend patterns:
|
|
|
70
72
|
cd <app-root>/frontend
|
|
71
73
|
pnpm lint
|
|
72
74
|
pnpm typecheck
|
|
75
|
+
pnpm gql-tada:check
|
|
73
76
|
pnpm build
|
|
74
77
|
```
|
|
78
|
+
|
|
79
|
+
After verification passes, proceed to implementation review with `/erp-kit-app-7-impl-review`.
|
|
@@ -31,27 +31,7 @@ Key points:
|
|
|
31
31
|
|
|
32
32
|
- Two-column `Layout`: detail on left, actions on right
|
|
33
33
|
- `useParams()` to get entity ID from route
|
|
34
|
-
- `DescriptionCard` from `@tailor-platform/app-shell` for key-value fields
|
|
35
|
-
|
|
36
|
-
```tsx
|
|
37
|
-
<DescriptionCard
|
|
38
|
-
data={resource}
|
|
39
|
-
title="Overview"
|
|
40
|
-
columns={3}
|
|
41
|
-
fields={[
|
|
42
|
-
{ key: "name", label: "Name", meta: { copyable: true } },
|
|
43
|
-
{
|
|
44
|
-
key: "status",
|
|
45
|
-
label: "Status",
|
|
46
|
-
type: "badge",
|
|
47
|
-
meta: { badgeVariantMap: { ACTIVE: "success" } },
|
|
48
|
-
},
|
|
49
|
-
{ key: "createdAt", label: "Created At", type: "date", meta: { dateFormat: "medium" } },
|
|
50
|
-
]}
|
|
51
|
-
/>
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Field types: `"text"` (default), `"badge"`, `"money"`, `"date"`, `"link"`, `"address"`, `"reference"`, `"divider"`
|
|
34
|
+
- `DescriptionCard` from `@tailor-platform/app-shell` for key-value fields. Refer to existing examples in the codebase for props and field type usage.
|
|
55
35
|
|
|
56
36
|
### Form Pattern
|
|
57
37
|
|
|
@@ -59,8 +39,11 @@ Create and edit forms share the same structure:
|
|
|
59
39
|
|
|
60
40
|
- **React Hook Form + Zod** for validation with `zodResolver`
|
|
61
41
|
- **urql `useMutation`** for GraphQL mutations
|
|
62
|
-
- **Cache invalidation**: pass `additionalTypenames` to the mutation context so urql invalidates related queries
|
|
63
|
-
|
|
42
|
+
- **Cache invalidation**: pass `additionalTypenames` to the mutation context so urql invalidates related queries after create/edit/delete. Without this, list pages will show stale data.
|
|
43
|
+
```ts
|
|
44
|
+
createUser(values, { additionalTypenames: ["User"] })
|
|
45
|
+
```
|
|
46
|
+
- **Toast notifications**: `useToast` from `@/hooks/use-toast`. `toast.error()` accepts `CombinedError` directly (e.g., `toast.error(result.error)`)
|
|
64
47
|
- **Navigate `".."`** to go back to list after success
|
|
65
48
|
- Edit form pre-fills `defaultValues` from existing entity via fragment
|
|
66
49
|
|
|
@@ -81,6 +64,14 @@ Create and edit forms share the same structure:
|
|
|
81
64
|
- **Required: Yes** → `.min(1, "Field is required")` (string) / `.positive()` (number)
|
|
82
65
|
- **Required: No** → `.optional()`
|
|
83
66
|
|
|
67
|
+
#### Empty String Handling for Optional Fields
|
|
68
|
+
|
|
69
|
+
React Hook Form defaults text inputs to `""`. For optional fields (e.g., `parentId`), convert empty strings to `undefined` before submitting to avoid backend errors. Use `||` not `??` — empty string is not nullish:
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
parentId: values.parentId || undefined,
|
|
73
|
+
```
|
|
74
|
+
|
|
84
75
|
### Shared Component Patterns
|
|
85
76
|
|
|
86
77
|
#### Fragment Collocation
|
|
@@ -117,13 +108,9 @@ const UserQuery = graphql(
|
|
|
117
108
|
|
|
118
109
|
#### App.tsx
|
|
119
110
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
- `useAuth()` returns `{ isAuthenticated, isReady, login, logout }` directly (not nested in `authState`)
|
|
123
|
-
- Built-in `me` query returns the current user's `User` record — use it instead of writing a custom resolver for profile info
|
|
111
|
+
Refer to existing examples in the codebase for `AuthGuard`, `GraphQLProvider`, auth client setup, and sidebar configuration.
|
|
112
|
+
|
|
124
113
|
- Required env vars: `VITE_TAILOR_APP_URL`, `VITE_TAILOR_CLIENT_ID`
|
|
125
|
-
- Auth client: create once in `src/lib/auth-client.ts` using `createAuthClient({ appUri, clientId })`
|
|
126
|
-
- Sidebar: use `SidebarGroup` + `SidebarItem` for custom ordering
|
|
127
114
|
|
|
128
115
|
#### Module-level page.tsx (required)
|
|
129
116
|
|
|
@@ -141,20 +128,3 @@ Every page component must:
|
|
|
141
128
|
|
|
142
129
|
1. Be the **default export** of `page.tsx`
|
|
143
130
|
2. Set `appShellPageProps` with at least `meta.title`
|
|
144
|
-
|
|
145
|
-
#### Common imports
|
|
146
|
-
|
|
147
|
-
```tsx
|
|
148
|
-
import {
|
|
149
|
-
Layout,
|
|
150
|
-
Link,
|
|
151
|
-
useParams,
|
|
152
|
-
useNavigate,
|
|
153
|
-
type AppShellPageProps,
|
|
154
|
-
} from "@tailor-platform/app-shell";
|
|
155
|
-
import { useQuery, useMutation } from "urql";
|
|
156
|
-
import { graphql, type FragmentOf, readFragment } from "@/graphql";
|
|
157
|
-
import { useForm } from "react-hook-form";
|
|
158
|
-
import { zodResolver } from "@hookform/resolvers/zod";
|
|
159
|
-
import { z } from "zod";
|
|
160
|
-
```
|
|
@@ -21,7 +21,7 @@ Define shared context for all agents:
|
|
|
21
21
|
- `APP_NAME`: basename of APP_ROOT
|
|
22
22
|
- `RESOLVER_DOCS`: glob `<APP_ROOT>/docs/resolver/*.md`
|
|
23
23
|
- `SCREEN_DOCS`: glob `<APP_ROOT>/docs/screen/*.md`
|
|
24
|
-
- `BACKEND_RESOLVERS`: glob `<APP_ROOT>/backend/src/
|
|
24
|
+
- `BACKEND_RESOLVERS`: glob `<APP_ROOT>/backend/src/resolvers/*.ts`
|
|
25
25
|
- `BACKEND_EXECUTORS`: glob `<APP_ROOT>/backend/executors/*.ts`
|
|
26
26
|
- `BACKEND_MODULES`: `<APP_ROOT>/backend/src/modules.ts`
|
|
27
27
|
- `BACKEND_CONFIG`: `<APP_ROOT>/backend/tailor.config.ts`
|
|
@@ -50,16 +50,17 @@ For agents 1-3:
|
|
|
50
50
|
3. Replace doc/code path placeholders with the actual file paths
|
|
51
51
|
4. Dispatch the agent with the filled prompt
|
|
52
52
|
|
|
53
|
-
For agent 4 (build verification):
|
|
53
|
+
For agent 4 (build & sync verification):
|
|
54
54
|
|
|
55
|
-
Run build checks inline:
|
|
55
|
+
Run build checks and source-doc sync check inline:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
cd <APP_ROOT>/backend && pnpm lint && pnpm typecheck
|
|
59
59
|
cd <APP_ROOT>/frontend && pnpm lint && pnpm typecheck && pnpm build
|
|
60
|
+
erp-kit app sync-check -p <APP_ROOT>/..
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
Report pass/fail for each check.
|
|
63
|
+
Report pass/fail for each check. `sync-check` detects missing resolver implementations and orphaned docs, so agents 1-3 can skip file-existence checks and focus on content parity.
|
|
63
64
|
|
|
64
65
|
## Step 3: Aggregate Results
|
|
65
66
|
|
|
@@ -109,13 +110,14 @@ Render the aggregated results as markdown:
|
|
|
109
110
|
|
|
110
111
|
---
|
|
111
112
|
|
|
112
|
-
### 4. Build Verification
|
|
113
|
+
### 4. Build & Sync Verification
|
|
113
114
|
|
|
114
|
-
| Check
|
|
115
|
-
|
|
|
116
|
-
| Lint
|
|
117
|
-
| Types
|
|
118
|
-
| Build
|
|
115
|
+
| Check | Backend | Frontend |
|
|
116
|
+
| ---------- | ------- | -------- |
|
|
117
|
+
| Lint | | |
|
|
118
|
+
| Types | | |
|
|
119
|
+
| Build | N/A | |
|
|
120
|
+
| Sync-check | | N/A |
|
|
119
121
|
|
|
120
122
|
(Populated from agent 4 results)
|
|
121
123
|
|
|
@@ -158,7 +160,7 @@ Render the aggregated results as markdown:
|
|
|
158
160
|
| Resolver Doc → Code Coverage | | X/Y checks passed |
|
|
159
161
|
| Screen Doc → Code Coverage | | X/Y checks passed |
|
|
160
162
|
| Module Wiring Consistency | | X/Y checks passed |
|
|
161
|
-
| Build Verification
|
|
163
|
+
| Build & Sync Verification | | pass / fail |
|
|
162
164
|
|
|
163
165
|
### 8. Recommendations
|
|
164
166
|
|