@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
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: erp-kit-app-4-plan-review
|
|
3
|
-
description: Review parity between Tier 2 (business flows, actors) and Tier 3-4 (
|
|
3
|
+
description: Review parity between Tier 2 (business flows, actors, stories) and Tier 3-4 (screens, resolvers). Use after creating plan documentation with erp-kit-app-3-plan to validate completeness.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Documentation Parity Review
|
|
7
7
|
|
|
8
|
-
Review **documentation consistency** across Tier 2, 3, and 4 documentation.
|
|
8
|
+
Review **documentation consistency** across Tier 2 (business flows, actors, stories), Tier 3 (screens), and Tier 4 (resolvers) documentation.
|
|
9
9
|
|
|
10
10
|
## When to Use
|
|
11
11
|
|
|
@@ -29,26 +29,29 @@ Verify at least `BUSINESS_FLOW_DOCS` is non-empty. If no business flow docs exis
|
|
|
29
29
|
|
|
30
30
|
## Step 2: Dispatch Agents (parallelize if possible)
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
Dispatch agents in parallel — one per item in each group. All groups are dispatched simultaneously.
|
|
33
|
+
|
|
34
|
+
Each agent receives: APP_NAME and the relevant doc file paths for its item.
|
|
34
35
|
Each agent returns: structured JSON per [references/parity-report-format.md](references/parity-report-format.md).
|
|
35
36
|
If a doc directory is empty, the agent reports "no docs found" and skips.
|
|
36
37
|
|
|
37
|
-
|
|
|
38
|
-
| ----- | ------------------------------------------------------------------------------------ |
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
38
|
+
| Group | Prompt Template | Per-item scope | Inputs per agent |
|
|
39
|
+
| ----- | ------------------------------------------------------------------------------------ | -------------------------- | --------------------------------------------- |
|
|
40
|
+
| A | [references/business-flow-story-parity.md](references/business-flow-story-parity.md) | One per business flow | Single BUSINESS_FLOW_DOC + its STORY_DOCS |
|
|
41
|
+
| B | [references/actor-flow-parity.md](references/actor-flow-parity.md) | One per actor | Single ACTOR_DOC + all BUSINESS_FLOW_DOCS |
|
|
42
|
+
| C | [references/story-screen-parity.md](references/story-screen-parity.md) | One per story | Single STORY_DOC + all SCREEN_DOCS |
|
|
43
|
+
| D | [references/story-resolver-parity.md](references/story-resolver-parity.md) | One per story | Single STORY_DOC + all RESOLVER_DOCS |
|
|
44
|
+
| E | [references/orphan-detection.md](references/orphan-detection.md) | One global agent | ALL doc paths |
|
|
44
45
|
|
|
45
46
|
For each agent:
|
|
46
47
|
|
|
47
48
|
1. Read the prompt template file
|
|
48
49
|
2. Replace `{{APP_NAME}}` with the resolved app name
|
|
49
|
-
3. Replace doc path placeholders with the actual file paths
|
|
50
|
+
3. Replace doc path placeholders with the actual file paths for that item
|
|
50
51
|
4. Dispatch the agent with the filled prompt
|
|
51
52
|
|
|
53
|
+
With F flows, A actors, and S stories, this produces F + A + S + S + 1 parallel agents.
|
|
54
|
+
|
|
52
55
|
## Step 3: Aggregate Results
|
|
53
56
|
|
|
54
57
|
After ALL agents return:
|
|
@@ -56,7 +59,7 @@ After ALL agents return:
|
|
|
56
59
|
1. Collect the JSON results from each agent
|
|
57
60
|
2. Merge all `gaps[]` arrays into a single list
|
|
58
61
|
3. Merge all `inconsistencies[]` arrays into a single list
|
|
59
|
-
4. Deduplicate: if two
|
|
62
|
+
4. Deduplicate: if two agents report the same gap (same `source + target + check`), keep only one
|
|
60
63
|
5. Calculate totals across all summaries
|
|
61
64
|
6. Render the final report below
|
|
62
65
|
|
|
@@ -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:
|
|
@@ -40,6 +44,8 @@ Read all resolver and screen specs to build a complete picture:
|
|
|
40
44
|
|
|
41
45
|
Classify resolvers per [erp-kit-app-shared/references/resolver-classification.md](../erp-kit-app-shared/references/resolver-classification.md).
|
|
42
46
|
|
|
47
|
+
> **Parallelize if possible:** Dispatch one agent per resolver spec to extract inputs, outputs, module mapping, and error scenarios. Each agent reads a single resolver doc and returns structured analysis.
|
|
48
|
+
|
|
43
49
|
### Phase 2: Wire Modules (`src/modules.ts`)
|
|
44
50
|
|
|
45
51
|
Create the module wiring file that composes all required erp-kit modules.
|
|
@@ -63,28 +69,30 @@ Key points:
|
|
|
63
69
|
- Auth with OAuth2, DPoP, and user profile mapping
|
|
64
70
|
- Generators for Kysely types and seed data
|
|
65
71
|
|
|
72
|
+
> **Sync barrier:** Module wiring and configuration must complete before resolver implementation. These files are shared across all resolvers.
|
|
73
|
+
|
|
66
74
|
### Phase 4: Implement Backend Resolvers and Executors
|
|
67
75
|
|
|
68
|
-
Write one file per resolver under `src/
|
|
76
|
+
Write one file per resolver under `src/resolvers/`, one per executor under `executors/`.
|
|
69
77
|
|
|
70
78
|
**Read [resolver & executor patterns reference](references/resolver-patterns.md).**
|
|
71
79
|
|
|
80
|
+
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`.
|
|
81
|
+
|
|
72
82
|
Do not directly mutate module-owned tables via Kysely — always use module commands.
|
|
73
83
|
|
|
84
|
+
> **Parallelize if possible:** Dispatch one agent per resolver. Each agent writes only to its own files:
|
|
85
|
+
> - `src/resolvers/<resolverName>.ts`
|
|
86
|
+
> - `src/executors/<resolverName>.ts`
|
|
87
|
+
>
|
|
88
|
+
> **Shared-file guard:** `src/modules.ts` and `tailor.config.ts` are written in the sync barrier phase above. Resolver agents must NOT modify these files.
|
|
89
|
+
|
|
74
90
|
### Phase 5: Generated Files
|
|
75
91
|
|
|
76
92
|
- **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
93
|
- **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
94
|
|
|
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
|
|
95
|
+
### Phase 6: Deploy Backend & Next Steps
|
|
88
96
|
|
|
89
97
|
Frontend implementation requires a deployed backend (for GraphQL schema generation). Prompt the user to:
|
|
90
98
|
|
|
@@ -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
|
---
|
|
@@ -33,6 +33,8 @@ ANALYZE SCREENS → GENERATE GRAPHQL SCHEMA → IMPLEMENT PAGES → VERIFY
|
|
|
33
33
|
|
|
34
34
|
Read all screen specs (`docs/screen/*.md`) to build a complete picture:
|
|
35
35
|
|
|
36
|
+
> **Parallelize if possible:** Dispatch one agent per screen spec to extract page structure, fields, actions, and navigation. Each agent reads a single screen doc and returns structured analysis.
|
|
37
|
+
|
|
36
38
|
1. **Screen types** — Identify each screen as ListView, Form (create/edit), or DetailView
|
|
37
39
|
2. **Fields and columns** — Map required columns (ListView), form fields (Form), and detail fields (DetailView) from each spec
|
|
38
40
|
3. **Actions** — Identify navigation actions (create, edit, back-to-list) and mutation actions (save, delete, activate/deactivate)
|
|
@@ -41,10 +43,21 @@ Read all screen specs (`docs/screen/*.md`) to build a complete picture:
|
|
|
41
43
|
|
|
42
44
|
Run `pnpm generate` in the frontend directory to fetch the GraphQL schema from the deployed backend.
|
|
43
45
|
|
|
46
|
+
> **Sync barrier:** Schema generation must complete before page implementation. Generated types are shared across all pages.
|
|
47
|
+
|
|
44
48
|
### Phase 3: Implement Frontend Pages
|
|
45
49
|
|
|
50
|
+
> **Barrier step:** Write shared layout and router files before dispatching page agents. These files are shared across all pages and must not be modified by individual page agents.
|
|
51
|
+
|
|
52
|
+
Run `pnpm lint`, `pnpm typecheck`, and `pnpm gql-tada:check` regularly during implementation. Fix errors before moving on.
|
|
53
|
+
|
|
46
54
|
Create pages driven by screen spec docs. Each screen type has a standard implementation pattern.
|
|
47
55
|
|
|
56
|
+
> **Parallelize if possible:** Dispatch one agent per screen. Each agent writes only to its own directory:
|
|
57
|
+
> - `src/pages/<screen-name>/`
|
|
58
|
+
>
|
|
59
|
+
> **Shared-file guard:** Layout files, router configuration, and generated types are written before dispatch. Page agents must NOT modify shared files.
|
|
60
|
+
|
|
48
61
|
**Read [pages reference](references/pages.md) for the full pattern catalog.**
|
|
49
62
|
|
|
50
63
|
Page types and their file structure:
|
|
@@ -70,5 +83,8 @@ Key frontend patterns:
|
|
|
70
83
|
cd <app-root>/frontend
|
|
71
84
|
pnpm lint
|
|
72
85
|
pnpm typecheck
|
|
86
|
+
pnpm gql-tada:check
|
|
73
87
|
pnpm build
|
|
74
88
|
```
|
|
89
|
+
|
|
90
|
+
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`
|
|
@@ -31,35 +31,39 @@ Verify at least `RESOLVER_DOCS` or `SCREEN_DOCS` is non-empty. If no docs exist,
|
|
|
31
31
|
|
|
32
32
|
## Step 2: Dispatch Agents (parallelize if possible)
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Dispatch agents in parallel — one per item in each group. All groups are dispatched simultaneously.
|
|
35
35
|
Each agent receives: APP_NAME, relevant doc/code file paths.
|
|
36
36
|
Each agent returns: structured JSON per [references/impl-parity-report-format.md](references/impl-parity-report-format.md).
|
|
37
37
|
If a doc or code directory is empty, the agent reports "no files found" and skips.
|
|
38
|
+
All review agents are read-only — no shared-file conflict risk.
|
|
38
39
|
|
|
39
|
-
|
|
|
40
|
-
| ----- | -------------------------------------------------------------------------------- |
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
40
|
+
| Group | Prompt Template | Per-item scope | Inputs per agent |
|
|
41
|
+
| ----- | -------------------------------------------------------------------------------- | ------------------ | ------------------------------------------------------------ |
|
|
42
|
+
| A | [references/resolver-doc-code-parity.md](references/resolver-doc-code-parity.md) | One per resolver | Single RESOLVER_DOC + matching BACKEND_RESOLVER + BACKEND_EXECUTOR |
|
|
43
|
+
| B | [references/screen-doc-code-parity.md](references/screen-doc-code-parity.md) | One per screen | Single SCREEN_DOC + matching FRONTEND_PAGE directory |
|
|
44
|
+
| C | [references/module-wiring-parity.md](references/module-wiring-parity.md) | One per resolver | Single RESOLVER_DOC + BACKEND_MODULES + BACKEND_CONFIG |
|
|
45
|
+
| D | Build verification (inline) | One global agent | All source paths |
|
|
45
46
|
|
|
46
|
-
|
|
47
|
+
With R resolvers and S screens, this produces R + S + R + 1 parallel agents.
|
|
48
|
+
|
|
49
|
+
For groups A-C:
|
|
47
50
|
|
|
48
51
|
1. Read the prompt template file
|
|
49
52
|
2. Replace `{{APP_NAME}}` with the resolved app name
|
|
50
|
-
3. Replace doc/code path placeholders with the actual file paths
|
|
51
|
-
4. Dispatch
|
|
53
|
+
3. Replace doc/code path placeholders with the actual file paths for that single item
|
|
54
|
+
4. Dispatch one agent per item with the filled prompt
|
|
52
55
|
|
|
53
|
-
For
|
|
56
|
+
For group D (build & sync verification):
|
|
54
57
|
|
|
55
|
-
Run build checks inline:
|
|
58
|
+
Run build checks and source-doc sync check inline:
|
|
56
59
|
|
|
57
60
|
```bash
|
|
58
61
|
cd <APP_ROOT>/backend && pnpm lint && pnpm typecheck
|
|
59
62
|
cd <APP_ROOT>/frontend && pnpm lint && pnpm typecheck && pnpm build
|
|
63
|
+
erp-kit app sync-check -p <APP_ROOT>/..
|
|
60
64
|
```
|
|
61
65
|
|
|
62
|
-
Report pass/fail for each check.
|
|
66
|
+
Report pass/fail for each check. `sync-check` detects missing resolver implementations and orphaned docs, so groups A-C agents can skip file-existence checks and focus on content parity.
|
|
63
67
|
|
|
64
68
|
## Step 3: Aggregate Results
|
|
65
69
|
|
|
@@ -69,8 +73,9 @@ After ALL agents return:
|
|
|
69
73
|
2. Merge all `gaps[]` arrays into a single list
|
|
70
74
|
3. Merge all `inconsistencies[]` arrays into a single list
|
|
71
75
|
4. Deduplicate: if two gaps share the same `source + target + check`, keep only one
|
|
72
|
-
5.
|
|
73
|
-
6.
|
|
76
|
+
5. Deduplicate findings: if agents from groups A and C report the same resolver issue, keep only one
|
|
77
|
+
6. Calculate totals across all summaries
|
|
78
|
+
7. Render the final report below
|
|
74
79
|
|
|
75
80
|
## Report Format
|
|
76
81
|
|
|
@@ -109,13 +114,14 @@ Render the aggregated results as markdown:
|
|
|
109
114
|
|
|
110
115
|
---
|
|
111
116
|
|
|
112
|
-
### 4. Build Verification
|
|
117
|
+
### 4. Build & Sync Verification
|
|
113
118
|
|
|
114
|
-
| Check
|
|
115
|
-
|
|
|
116
|
-
| Lint
|
|
117
|
-
| Types
|
|
118
|
-
| Build
|
|
119
|
+
| Check | Backend | Frontend |
|
|
120
|
+
| ---------- | ------- | -------- |
|
|
121
|
+
| Lint | | |
|
|
122
|
+
| Types | | |
|
|
123
|
+
| Build | N/A | |
|
|
124
|
+
| Sync-check | | N/A |
|
|
119
125
|
|
|
120
126
|
(Populated from agent 4 results)
|
|
121
127
|
|
|
@@ -158,7 +164,7 @@ Render the aggregated results as markdown:
|
|
|
158
164
|
| Resolver Doc → Code Coverage | | X/Y checks passed |
|
|
159
165
|
| Screen Doc → Code Coverage | | X/Y checks passed |
|
|
160
166
|
| Module Wiring Consistency | | X/Y checks passed |
|
|
161
|
-
| Build Verification
|
|
167
|
+
| Build & Sync Verification | | pass / fail |
|
|
162
168
|
|
|
163
169
|
### 8. Recommendations
|
|
164
170
|
|
|
@@ -28,7 +28,7 @@ From each resolver doc, extract:
|
|
|
28
28
|
|
|
29
29
|
## Extraction: Backend Code
|
|
30
30
|
|
|
31
|
-
From each resolver file (`src/
|
|
31
|
+
From each resolver file (`src/resolvers/*.ts`), extract:
|
|
32
32
|
|
|
33
33
|
- Resolver name (from `createResolver()` call or filename)
|
|
34
34
|
- Module command called (import path and function name)
|
|
@@ -42,28 +42,27 @@ From each executor file (`executors/*.ts`), extract:
|
|
|
42
42
|
|
|
43
43
|
## Parity Checks
|
|
44
44
|
|
|
45
|
-
| Check ID
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
45
|
+
| Check ID | Question |
|
|
46
|
+
| ------------------ | --------------------------------------------------------------- |
|
|
47
|
+
| command_reference | Does the resolver code call the correct module command? |
|
|
48
|
+
| input_coverage | Does the resolver handle all documented input parameters? |
|
|
49
|
+
| error_handling | Does the resolver handle all documented error scenarios? |
|
|
50
|
+
| return_shape | Does the resolver return the documented output shape? |
|
|
51
|
+
| executor_exists | Does an executor exist for each module that has event handlers? |
|
|
52
|
+
| no_direct_mutation | Does the resolver avoid directly mutating module-owned tables? |
|
|
53
|
+
|
|
54
|
+
File existence checks (`resolver_impl_exists`) are handled by `erp-kit app sync-check` in the build verification step. This agent focuses on content parity only.
|
|
54
55
|
|
|
55
56
|
### How to Check
|
|
56
57
|
|
|
57
|
-
1. For each resolver doc
|
|
58
|
-
2.
|
|
59
|
-
3. Check that `
|
|
60
|
-
4.
|
|
61
|
-
5.
|
|
62
|
-
6. Check executors re-export module event handlers without custom logic
|
|
58
|
+
1. For each resolver doc that has a corresponding code file, verify the code imports and calls the documented module command
|
|
59
|
+
2. Check that `context.input.*` accesses match documented inputs
|
|
60
|
+
3. Check that error `switch` cases cover all documented error codes
|
|
61
|
+
4. Verify return value structure matches documentation
|
|
62
|
+
5. Check executors re-export module event handlers without custom logic
|
|
63
63
|
|
|
64
64
|
## Common Gap Patterns
|
|
65
65
|
|
|
66
|
-
- **Missing resolver file**: Doc exists but no code file
|
|
67
66
|
- **Wrong command**: Code calls a different module command than documented
|
|
68
67
|
- **Missing input handling**: Doc specifies an input parameter not accessed in code
|
|
69
68
|
- **Missing error cases**: Error scenario in doc not handled in code's switch
|
|
@@ -5,7 +5,7 @@ description: Create ERP module requirements and feature documentation. Use when
|
|
|
5
5
|
|
|
6
6
|
# Module Requirements Workflow
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Autonomous workflow for creating ERP module requirements. Uses parallel agents for research, then automatically decides scope based on recommendations.
|
|
9
9
|
|
|
10
10
|
## Workflow
|
|
11
11
|
|
|
@@ -22,7 +22,7 @@ Define shared context for all agents:
|
|
|
22
22
|
- `DOMAIN`: the business domain (e.g., "inventory management", "purchasing")
|
|
23
23
|
- `OTHER_MODULES`: glob `<MODULES_ROOT>/*/README.md` (to understand existing module landscape)
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Infer MODULE_NAME and DOMAIN from the current working directory or argument context. If insufficient, use the module's README or directory name.
|
|
26
26
|
|
|
27
27
|
## Step 2: Dispatch Agents (parallelize if possible)
|
|
28
28
|
|
|
@@ -63,9 +63,7 @@ For each feature:
|
|
|
63
63
|
- **Recommendation:** `Include` or `Skip`
|
|
64
64
|
- **Why:** reasoning for the recommendation
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
The final feature set becomes the union of all `Include` features. Iterate until the user approves.
|
|
66
|
+
The final feature set becomes the union of all `Include` features. Proceed with the recommended scope.
|
|
69
67
|
|
|
70
68
|
## Step 4: Create — Agent per feature
|
|
71
69
|
|
|
@@ -96,19 +94,15 @@ pnpm run module:doc:check
|
|
|
96
94
|
|
|
97
95
|
## Step 5: Review
|
|
98
96
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
**Split detection**: If a feature covers multiple distinct workflows, split into separate feature files.
|
|
97
|
+
**Split detection**: If a feature covers multiple distinct workflows, split into separate feature files automatically.
|
|
102
98
|
|
|
103
|
-
**
|
|
99
|
+
**Auto-split pattern:**
|
|
104
100
|
|
|
105
|
-
1.
|
|
101
|
+
1. Detect features that cover multiple distinct workflows
|
|
106
102
|
2. Create new feature file for split-out content
|
|
107
103
|
3. Remove split content from original file
|
|
108
104
|
4. Update README.md feature list if needed
|
|
109
105
|
|
|
110
|
-
Continue iterating until user approves.
|
|
111
|
-
|
|
112
106
|
# Framework Schemas Reference
|
|
113
107
|
|
|
114
108
|
Schemas are bundled in `@tailor-platform/erp-kit`.
|
|
@@ -52,7 +52,22 @@ After ALL agents return:
|
|
|
52
52
|
2. Merge all `issues[]` arrays into a single list
|
|
53
53
|
3. Merge all `recommendations[]` arrays into a single list
|
|
54
54
|
4. Calculate totals across all summaries
|
|
55
|
-
|
|
55
|
+
|
|
56
|
+
## Step 4: Severity Validation
|
|
57
|
+
|
|
58
|
+
Subagents tend to over-classify. Before rendering the report, re-evaluate every non-pass finding:
|
|
59
|
+
|
|
60
|
+
- **"Is this even this module's responsibility?"** — If the concern belongs to another module or is out of scope, drop it from the report
|
|
61
|
+
- **"Does this block planning?"** → `critical`
|
|
62
|
+
- **"Will this force model/command/query rework?"** → `major`
|
|
63
|
+
- All no → `nit`, regardless of subagent label
|
|
64
|
+
|
|
65
|
+
## Step 5: Determine Verdict
|
|
66
|
+
|
|
67
|
+
- **APPROVED**: zero `critical` and zero `major`
|
|
68
|
+
- **NEEDS CHANGES**: one or more `critical` or `major`
|
|
69
|
+
|
|
70
|
+
## Step 6: Render Report
|
|
56
71
|
|
|
57
72
|
## Report Format
|
|
58
73
|
|
|
@@ -100,11 +115,20 @@ Render the aggregated results as markdown:
|
|
|
100
115
|
|
|
101
116
|
### 5. Recommendations
|
|
102
117
|
|
|
103
|
-
Numbered list of actionable fixes, grouped by
|
|
118
|
+
Numbered list of actionable fixes, grouped by severity:
|
|
119
|
+
|
|
120
|
+
1. `critical` — boundary issues, fundamental design flaws (must fix)
|
|
121
|
+
2. `major` — best practice violations, missing capabilities (should fix)
|
|
122
|
+
3. `nit` — cosmetic, stylistic, minor improvements (informational only)
|
|
123
|
+
|
|
124
|
+
### 6. Verdict
|
|
125
|
+
|
|
126
|
+
**Verdict: APPROVED / NEEDS CHANGES**
|
|
127
|
+
|
|
128
|
+
- If APPROVED with nits: "Review passed. The following nits are informational and do not block progress:" followed by the nit list.
|
|
129
|
+
- If NEEDS CHANGES: "Review requires changes. Fix all critical and major issues, then re-run the review."
|
|
104
130
|
|
|
105
|
-
|
|
106
|
-
2. Best practice violations
|
|
107
|
-
3. Improvement suggestions
|
|
131
|
+
Severity counts: `critical: N, major: N, nit: N`
|
|
108
132
|
|
|
109
133
|
## References
|
|
110
134
|
|
package/skills/erp-kit-module-2-requirements-review/references/requirements-report-format.md
CHANGED
|
@@ -23,3 +23,22 @@ A numbered list of actionable suggestions, grouped by priority:
|
|
|
23
23
|
### Summary
|
|
24
24
|
|
|
25
25
|
A summary table with aggregate counts: total checks, passed, failed, warned.
|
|
26
|
+
|
|
27
|
+
## Router-Level Severity and Verdict
|
|
28
|
+
|
|
29
|
+
The router (SKILL.md Step 3) assigns severity to each non-pass finding after collecting all agent results. Agents do NOT assign severity — they only report `status` and `detail`.
|
|
30
|
+
|
|
31
|
+
The router classifies each finding as:
|
|
32
|
+
|
|
33
|
+
| Severity | Meaning | Examples |
|
|
34
|
+
| ---------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
|
35
|
+
| `critical` | Blocks progress — fundamental design flaw, missing required capability, or boundary violation | Missing entity ownership, overlapping CRUD with another module, broken state machine |
|
|
36
|
+
| `major` | Should fix — will likely cause issues downstream but not a design blocker | Missing standard ERP state, unclear dependency direction, incomplete business rules |
|
|
37
|
+
| `nit` | Nice to have — cosmetic, stylistic, or minor improvement suggestion | Naming convention preference, optional field suggestion, documentation wording improvement |
|
|
38
|
+
|
|
39
|
+
Verdict rule:
|
|
40
|
+
|
|
41
|
+
- **APPROVED**: zero `critical` and zero `major` findings (nits only, or all pass)
|
|
42
|
+
- **NEEDS CHANGES**: one or more `critical` or `major` findings
|
|
43
|
+
|
|
44
|
+
When verdict is APPROVED with nits, list the nits as informational notes — they do NOT block the review.
|
|
@@ -33,17 +33,15 @@ Use the extraction rules from:
|
|
|
33
33
|
- [references/command-extraction.md](references/command-extraction.md) — write operations, business rules, error scenarios, process flows
|
|
34
34
|
- [references/query-extraction.md](references/query-extraction.md) — read operations, lookups, aggregations, conversions
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Produce consolidated plan:
|
|
37
37
|
|
|
38
38
|
- Models to create (with fields, relationships, states)
|
|
39
39
|
- Commands to create (with business rules, error scenarios)
|
|
40
40
|
- Queries to create (with inputs, outputs)
|
|
41
41
|
|
|
42
|
-
Wait for user approval.
|
|
43
|
-
|
|
44
42
|
## Step 3: Scaffold & Populate
|
|
45
43
|
|
|
46
|
-
|
|
44
|
+
Scaffold using `erp-kit` CLI. **Names must be PascalCase** (see [naming convention](references/naming.md)):
|
|
47
45
|
|
|
48
46
|
```bash
|
|
49
47
|
erp-kit module generate doc model ModelName -p <MODULES_ROOT>/<module-name>
|