@tailor-platform/erp-kit 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +12 -12
- package/dist/cli.mjs +467 -20
- package/package.json +2 -11
- package/skills/erp-kit-app-2-requirements-review/SKILL.md +2 -2
- package/skills/erp-kit-app-2-requirements-review/references/best-practices-check.md +1 -1
- package/skills/erp-kit-app-3-plan/references/resolver-extraction.md +6 -3
- package/skills/erp-kit-app-4-plan-review/SKILL.md +5 -3
- package/skills/erp-kit-app-4-plan-review/references/orphan-detection.md +3 -0
- package/skills/erp-kit-app-4-plan-review/references/story-resolver-parity.md +21 -3
- package/skills/erp-kit-app-5-impl-backend/SKILL.md +12 -3
- package/skills/erp-kit-app-6-impl-frontend/SKILL.md +8 -4
- package/skills/erp-kit-app-7-impl-review/SKILL.md +1 -1
- package/skills/erp-kit-app-shared/references/resolver-classification.md +3 -0
- package/skills/erp-kit-module-2-requirements-review/SKILL.md +3 -30
- package/skills/erp-kit-module-3-update-plan/SKILL.md +132 -0
- package/skills/erp-kit-module-3-update-plan/references/command-extraction.md +87 -0
- package/skills/erp-kit-module-3-update-plan/references/model-extraction.md +72 -0
- package/skills/erp-kit-module-3-update-plan/references/naming.md +73 -0
- package/skills/erp-kit-module-3-update-plan/references/query-extraction.md +59 -0
- package/skills/erp-kit-module-4-plan-review/SKILL.md +3 -69
- package/skills/erp-kit-module-5-impl/SKILL.md +1 -0
- package/skills/erp-kit-module-6-impl-review/SKILL.md +42 -120
- package/skills/erp-kit-module-6-impl-review/references/command-doc-test-parity.md +1 -1
- package/skills/erp-kit-module-6-impl-review/references/{error-implementation-parity.md → command-error-implementation-parity.md} +3 -3
- package/skills/erp-kit-module-6-impl-review/references/impl-parity-report-format.md +1 -1
- package/skills/erp-kit-module-6-impl-review/references/query-doc-code-parity.md +110 -0
- package/skills/erp-kit-module-6-impl-review/references/query-doc-test-parity.md +108 -0
- package/skills/erp-kit-module-6-impl-review/references/query-error-implementation-parity.md +100 -0
- package/src/commands/app/index.ts +18 -3
- package/src/commands/check.test.ts +1 -1
- package/src/commands/doc/module.ts +2 -3
- package/src/commands/doc/modules.test.ts +0 -7
- package/src/commands/doc/modules.ts +1 -2
- package/src/commands/doc/search.ts +1 -2
- package/src/commands/init.ts +4 -0
- package/src/commands/lib/distribute.test.ts +32 -1
- package/src/commands/lib/distribute.ts +47 -5
- package/src/commands/lib/sync-check-source.test.ts +1 -1
- package/src/commands/update.test.ts +16 -0
- package/src/commands/update.ts +4 -1
- package/src/generator/generate-seed.ts +69 -0
- package/src/module.ts +56 -0
- package/src/modules/business-partner/README.md +2 -2
- package/src/modules/inventory/README.md +65 -0
- package/src/modules/inventory/command/approveCountLine.generated.ts +6 -0
- package/src/modules/inventory/command/approveCountLine.test.ts +89 -0
- package/src/modules/inventory/command/approveCountLine.ts +68 -0
- package/src/modules/inventory/command/approveInventoryAdjustment.generated.ts +6 -0
- package/src/modules/inventory/command/approveInventoryAdjustment.test.ts +56 -0
- package/src/modules/inventory/command/approveInventoryAdjustment.ts +50 -0
- package/src/modules/inventory/command/assignSerialNumber.generated.ts +6 -0
- package/src/modules/inventory/command/assignSerialNumber.test.ts +133 -0
- package/src/modules/inventory/command/assignSerialNumber.ts +83 -0
- package/src/modules/inventory/command/cancelInventoryCount.generated.ts +6 -0
- package/src/modules/inventory/command/cancelInventoryCount.test.ts +114 -0
- package/src/modules/inventory/command/cancelInventoryCount.ts +62 -0
- package/src/modules/inventory/command/cancelStockMovement.generated.ts +6 -0
- package/src/modules/inventory/command/cancelStockMovement.test.ts +102 -0
- package/src/modules/inventory/command/cancelStockMovement.ts +56 -0
- package/src/modules/inventory/command/completeInventoryCount.generated.ts +6 -0
- package/src/modules/inventory/command/completeInventoryCount.test.ts +99 -0
- package/src/modules/inventory/command/completeInventoryCount.ts +70 -0
- package/src/modules/inventory/command/confirmInventoryAdjustment.generated.ts +6 -0
- package/src/modules/inventory/command/confirmInventoryAdjustment.test.ts +324 -0
- package/src/modules/inventory/command/confirmInventoryAdjustment.ts +194 -0
- package/src/modules/inventory/command/confirmStockMovement.generated.ts +6 -0
- package/src/modules/inventory/command/confirmStockMovement.test.ts +126 -0
- package/src/modules/inventory/command/confirmStockMovement.ts +131 -0
- package/src/modules/inventory/command/createInventoryAdjustment.generated.ts +6 -0
- package/src/modules/inventory/command/createInventoryAdjustment.test.ts +298 -0
- package/src/modules/inventory/command/createInventoryAdjustment.ts +124 -0
- package/src/modules/inventory/command/createInventoryCount.generated.ts +6 -0
- package/src/modules/inventory/command/createInventoryCount.test.ts +157 -0
- package/src/modules/inventory/command/createInventoryCount.ts +72 -0
- package/src/modules/inventory/command/createLot.generated.ts +6 -0
- package/src/modules/inventory/command/createLot.test.ts +106 -0
- package/src/modules/inventory/command/createLot.ts +72 -0
- package/src/modules/inventory/command/createStockMovement.generated.ts +6 -0
- package/src/modules/inventory/command/createStockMovement.test.ts +342 -0
- package/src/modules/inventory/command/createStockMovement.ts +172 -0
- package/src/modules/inventory/command/createStorageLocation.generated.ts +6 -0
- package/src/modules/inventory/command/createStorageLocation.test.ts +246 -0
- package/src/modules/inventory/command/createStorageLocation.ts +126 -0
- package/src/modules/inventory/command/createValuationPolicy.generated.ts +6 -0
- package/src/modules/inventory/command/createValuationPolicy.test.ts +75 -0
- package/src/modules/inventory/command/createValuationPolicy.ts +52 -0
- package/src/modules/inventory/command/createWarehouse.generated.ts +6 -0
- package/src/modules/inventory/command/createWarehouse.test.ts +143 -0
- package/src/modules/inventory/command/createWarehouse.ts +76 -0
- package/src/modules/inventory/command/deactivateStorageLocation.generated.ts +6 -0
- package/src/modules/inventory/command/deactivateStorageLocation.test.ts +69 -0
- package/src/modules/inventory/command/deactivateStorageLocation.ts +51 -0
- package/src/modules/inventory/command/deactivateWarehouse.generated.ts +6 -0
- package/src/modules/inventory/command/deactivateWarehouse.test.ts +75 -0
- package/src/modules/inventory/command/deactivateWarehouse.ts +45 -0
- package/src/modules/inventory/command/executeStockMovement.generated.ts +6 -0
- package/src/modules/inventory/command/executeStockMovement.test.ts +502 -0
- package/src/modules/inventory/command/executeStockMovement.ts +303 -0
- package/src/modules/inventory/command/reactivateStorageLocation.generated.ts +6 -0
- package/src/modules/inventory/command/reactivateStorageLocation.test.ts +78 -0
- package/src/modules/inventory/command/reactivateStorageLocation.ts +63 -0
- package/src/modules/inventory/command/reactivateWarehouse.generated.ts +6 -0
- package/src/modules/inventory/command/reactivateWarehouse.test.ts +87 -0
- package/src/modules/inventory/command/reactivateWarehouse.ts +65 -0
- package/src/modules/inventory/command/recordCountLine.generated.ts +6 -0
- package/src/modules/inventory/command/recordCountLine.test.ts +211 -0
- package/src/modules/inventory/command/recordCountLine.ts +81 -0
- package/src/modules/inventory/command/rejectCountLine.generated.ts +6 -0
- package/src/modules/inventory/command/rejectCountLine.test.ts +66 -0
- package/src/modules/inventory/command/rejectCountLine.ts +50 -0
- package/src/modules/inventory/command/rejectInventoryAdjustment.generated.ts +6 -0
- package/src/modules/inventory/command/rejectInventoryAdjustment.test.ts +69 -0
- package/src/modules/inventory/command/rejectInventoryAdjustment.ts +50 -0
- package/src/modules/inventory/command/releaseReservation.generated.ts +6 -0
- package/src/modules/inventory/command/releaseReservation.test.ts +65 -0
- package/src/modules/inventory/command/releaseReservation.ts +50 -0
- package/src/modules/inventory/command/reserveStock.generated.ts +6 -0
- package/src/modules/inventory/command/reserveStock.test.ts +141 -0
- package/src/modules/inventory/command/reserveStock.ts +88 -0
- package/src/modules/inventory/command/reviseInventoryAdjustment.generated.ts +6 -0
- package/src/modules/inventory/command/reviseInventoryAdjustment.test.ts +68 -0
- package/src/modules/inventory/command/reviseInventoryAdjustment.ts +48 -0
- package/src/modules/inventory/command/startInventoryCount.generated.ts +6 -0
- package/src/modules/inventory/command/startInventoryCount.test.ts +100 -0
- package/src/modules/inventory/command/startInventoryCount.ts +90 -0
- package/src/modules/inventory/command/submitInventoryAdjustment.generated.ts +6 -0
- package/src/modules/inventory/command/submitInventoryAdjustment.test.ts +53 -0
- package/src/modules/inventory/command/submitInventoryAdjustment.ts +47 -0
- package/src/modules/inventory/command/updateLot.generated.ts +6 -0
- package/src/modules/inventory/command/updateLot.test.ts +88 -0
- package/src/modules/inventory/command/updateLot.ts +52 -0
- package/src/modules/inventory/command/updateStockMovement.generated.ts +6 -0
- package/src/modules/inventory/command/updateStockMovement.test.ts +250 -0
- package/src/modules/inventory/command/updateStockMovement.ts +164 -0
- package/src/modules/inventory/command/updateStorageLocation.generated.ts +6 -0
- package/src/modules/inventory/command/updateStorageLocation.test.ts +72 -0
- package/src/modules/inventory/command/updateStorageLocation.ts +77 -0
- package/src/modules/inventory/command/updateValuationPolicy.generated.ts +6 -0
- package/src/modules/inventory/command/updateValuationPolicy.test.ts +68 -0
- package/src/modules/inventory/command/updateValuationPolicy.ts +74 -0
- package/src/modules/inventory/command/updateWarehouse.generated.ts +6 -0
- package/src/modules/inventory/command/updateWarehouse.test.ts +88 -0
- package/src/modules/inventory/command/updateWarehouse.ts +64 -0
- package/src/modules/inventory/db/.gitkeep +0 -0
- package/src/modules/inventory/db/costLayer.ts +54 -0
- package/src/modules/inventory/db/inventoryAdjustment.ts +88 -0
- package/src/modules/inventory/db/inventoryCount.ts +58 -0
- package/src/modules/inventory/db/inventoryCountLine.ts +61 -0
- package/src/modules/inventory/db/itemValuation.ts +50 -0
- package/src/modules/inventory/db/lot.ts +51 -0
- package/src/modules/inventory/db/lotStockLevel.ts +48 -0
- package/src/modules/inventory/db/serialNumber.ts +53 -0
- package/src/modules/inventory/db/stockLevel.ts +51 -0
- package/src/modules/inventory/db/stockMoveLine.ts +78 -0
- package/src/modules/inventory/db/stockMovement.ts +48 -0
- package/src/modules/inventory/db/storageLocation.ts +56 -0
- package/src/modules/inventory/db/valuationPolicy.ts +33 -0
- package/src/modules/inventory/db/warehouse.ts +45 -0
- package/src/modules/inventory/docs/commands/ApproveCountLine.md +44 -0
- package/src/modules/inventory/docs/commands/ApproveInventoryAdjustment.md +37 -0
- package/src/modules/inventory/docs/commands/AssignSerialNumber.md +46 -0
- package/src/modules/inventory/docs/commands/CancelInventoryCount.md +49 -0
- package/src/modules/inventory/docs/commands/CancelStockMovement.md +44 -0
- package/src/modules/inventory/docs/commands/CompleteInventoryCount.md +47 -0
- package/src/modules/inventory/docs/commands/ConfirmInventoryAdjustment.md +72 -0
- package/src/modules/inventory/docs/commands/ConfirmStockMovement.md +43 -0
- package/src/modules/inventory/docs/commands/CreateInventoryAdjustment.md +75 -0
- package/src/modules/inventory/docs/commands/CreateInventoryCount.md +49 -0
- package/src/modules/inventory/docs/commands/CreateLot.md +40 -0
- package/src/modules/inventory/docs/commands/CreateStockMovement.md +76 -0
- package/src/modules/inventory/docs/commands/CreateStorageLocation.md +66 -0
- package/src/modules/inventory/docs/commands/CreateValuationPolicy.md +45 -0
- package/src/modules/inventory/docs/commands/CreateWarehouse.md +47 -0
- package/src/modules/inventory/docs/commands/DeactivateStorageLocation.md +39 -0
- package/src/modules/inventory/docs/commands/DeactivateWarehouse.md +38 -0
- package/src/modules/inventory/docs/commands/ExecuteStockMovement.md +82 -0
- package/src/modules/inventory/docs/commands/ReactivateStorageLocation.md +42 -0
- package/src/modules/inventory/docs/commands/ReactivateWarehouse.md +42 -0
- package/src/modules/inventory/docs/commands/RecordCountLine.md +52 -0
- package/src/modules/inventory/docs/commands/RejectCountLine.md +42 -0
- package/src/modules/inventory/docs/commands/RejectInventoryAdjustment.md +38 -0
- package/src/modules/inventory/docs/commands/ReleaseReservation.md +37 -0
- package/src/modules/inventory/docs/commands/ReserveStock.md +49 -0
- package/src/modules/inventory/docs/commands/ReviseInventoryAdjustment.md +38 -0
- package/src/modules/inventory/docs/commands/StartInventoryCount.md +47 -0
- package/src/modules/inventory/docs/commands/SubmitInventoryAdjustment.md +37 -0
- package/src/modules/inventory/docs/commands/UpdateLot.md +41 -0
- package/src/modules/inventory/docs/commands/UpdateStockMovement.md +45 -0
- package/src/modules/inventory/docs/commands/UpdateStorageLocation.md +41 -0
- package/src/modules/inventory/docs/commands/UpdateValuationPolicy.md +44 -0
- package/src/modules/inventory/docs/commands/UpdateWarehouse.md +42 -0
- package/src/modules/inventory/docs/features/inventory-adjustment.md +64 -0
- package/src/modules/inventory/docs/features/inventory-count.md +78 -0
- package/src/modules/inventory/docs/features/inventory-valuation.md +77 -0
- package/src/modules/inventory/docs/features/lot-and-batch-tracking.md +81 -0
- package/src/modules/inventory/docs/features/scrap-management.md +63 -0
- package/src/modules/inventory/docs/features/serial-number-tracking.md +68 -0
- package/src/modules/inventory/docs/features/stock-movement.md +72 -0
- package/src/modules/inventory/docs/features/stock-tracking.md +78 -0
- package/src/modules/inventory/docs/features/warehouse-management.md +97 -0
- package/src/modules/inventory/docs/models/CostLayer.md +37 -0
- package/src/modules/inventory/docs/models/InventoryAdjustment.md +69 -0
- package/src/modules/inventory/docs/models/InventoryCount.md +53 -0
- package/src/modules/inventory/docs/models/InventoryCountLine.md +53 -0
- package/src/modules/inventory/docs/models/ItemValuation.md +38 -0
- package/src/modules/inventory/docs/models/Lot.md +45 -0
- package/src/modules/inventory/docs/models/LotStockLevel.md +34 -0
- package/src/modules/inventory/docs/models/SerialNumber.md +53 -0
- package/src/modules/inventory/docs/models/StockLevel.md +41 -0
- package/src/modules/inventory/docs/models/StockMoveLine.md +44 -0
- package/src/modules/inventory/docs/models/StockMovement.md +52 -0
- package/src/modules/inventory/docs/models/StorageLocation.md +55 -0
- package/src/modules/inventory/docs/models/ValuationPolicy.md +38 -0
- package/src/modules/inventory/docs/models/Warehouse.md +50 -0
- package/src/modules/inventory/docs/queries/GetInventoryAdjustment.md +40 -0
- package/src/modules/inventory/docs/queries/GetInventoryCount.md +43 -0
- package/src/modules/inventory/docs/queries/GetItemValuation.md +42 -0
- package/src/modules/inventory/docs/queries/GetLot.md +42 -0
- package/src/modules/inventory/docs/queries/GetSerialNumber.md +43 -0
- package/src/modules/inventory/docs/queries/GetSerialNumberHistory.md +50 -0
- package/src/modules/inventory/docs/queries/GetStockLevel.md +42 -0
- package/src/modules/inventory/docs/queries/GetStockMovement.md +41 -0
- package/src/modules/inventory/docs/queries/GetStorageLocation.md +40 -0
- package/src/modules/inventory/docs/queries/GetValuationPolicy.md +38 -0
- package/src/modules/inventory/docs/queries/GetWarehouse.md +40 -0
- package/src/modules/inventory/docs/queries/GetWarehouseStockSummary.md +50 -0
- package/src/modules/inventory/docs/queries/ListCostLayers.md +49 -0
- package/src/modules/inventory/docs/queries/ListExpiringLots.md +51 -0
- package/src/modules/inventory/docs/queries/ListInventoryAdjustments.md +47 -0
- package/src/modules/inventory/docs/queries/ListInventoryCounts.md +57 -0
- package/src/modules/inventory/docs/queries/ListItemValuations.md +44 -0
- package/src/modules/inventory/docs/queries/ListLots.md +57 -0
- package/src/modules/inventory/docs/queries/ListSerialNumbers.md +44 -0
- package/src/modules/inventory/docs/queries/ListStockLevels.md +49 -0
- package/src/modules/inventory/docs/queries/ListStockMovements.md +47 -0
- package/src/modules/inventory/docs/queries/ListStorageLocations.md +47 -0
- package/src/modules/inventory/docs/queries/ListValuationPolicies.md +38 -0
- package/src/modules/inventory/docs/queries/ListWarehouses.md +42 -0
- package/src/modules/inventory/docs/queries/TraceLotBackward.md +46 -0
- package/src/modules/inventory/docs/queries/TraceLotForward.md +46 -0
- package/src/modules/inventory/executor/.gitkeep +0 -0
- package/src/modules/inventory/generated/.gitkeep +0 -0
- package/src/modules/inventory/generated/enums.ts +131 -0
- package/src/modules/inventory/generated/kysely-tailordb.ts +201 -0
- package/src/modules/inventory/index.ts +2 -0
- package/src/modules/inventory/lib/_db_deps.ts +17 -0
- package/src/modules/inventory/lib/errors.generated.ts +317 -0
- package/src/modules/inventory/lib/permissions.generated.ts +38 -0
- package/src/modules/inventory/lib/types.ts +92 -0
- package/src/modules/inventory/module.ts +202 -0
- package/src/modules/inventory/permissions.ts +3 -0
- package/src/modules/inventory/query/.gitkeep +0 -0
- package/src/modules/inventory/query/getInventoryAdjustment.generated.ts +5 -0
- package/src/modules/inventory/query/getInventoryAdjustment.test.ts +58 -0
- package/src/modules/inventory/query/getInventoryAdjustment.ts +16 -0
- package/src/modules/inventory/query/getInventoryCount.generated.ts +5 -0
- package/src/modules/inventory/query/getInventoryCount.test.ts +65 -0
- package/src/modules/inventory/query/getInventoryCount.ts +27 -0
- package/src/modules/inventory/query/getItemValuation.generated.ts +5 -0
- package/src/modules/inventory/query/getItemValuation.test.ts +72 -0
- package/src/modules/inventory/query/getItemValuation.ts +29 -0
- package/src/modules/inventory/query/getLot.generated.ts +5 -0
- package/src/modules/inventory/query/getLot.test.ts +62 -0
- package/src/modules/inventory/query/getLot.ts +28 -0
- package/src/modules/inventory/query/getSerialNumber.generated.ts +5 -0
- package/src/modules/inventory/query/getSerialNumber.test.ts +59 -0
- package/src/modules/inventory/query/getSerialNumber.ts +18 -0
- package/src/modules/inventory/query/getSerialNumberHistory.generated.ts +5 -0
- package/src/modules/inventory/query/getSerialNumberHistory.test.ts +80 -0
- package/src/modules/inventory/query/getSerialNumberHistory.ts +30 -0
- package/src/modules/inventory/query/getStockLevel.generated.ts +5 -0
- package/src/modules/inventory/query/getStockLevel.test.ts +70 -0
- package/src/modules/inventory/query/getStockLevel.ts +24 -0
- package/src/modules/inventory/query/getStockMovement.generated.ts +5 -0
- package/src/modules/inventory/query/getStockMovement.test.ts +62 -0
- package/src/modules/inventory/query/getStockMovement.ts +26 -0
- package/src/modules/inventory/query/getStorageLocation.generated.ts +5 -0
- package/src/modules/inventory/query/getStorageLocation.test.ts +54 -0
- package/src/modules/inventory/query/getStorageLocation.ts +26 -0
- package/src/modules/inventory/query/getValuationPolicy.generated.ts +5 -0
- package/src/modules/inventory/query/getValuationPolicy.test.ts +42 -0
- package/src/modules/inventory/query/getValuationPolicy.ts +16 -0
- package/src/modules/inventory/query/getWarehouse.generated.ts +5 -0
- package/src/modules/inventory/query/getWarehouse.test.ts +61 -0
- package/src/modules/inventory/query/getWarehouse.ts +26 -0
- package/src/modules/inventory/query/getWarehouseStockSummary.generated.ts +5 -0
- package/src/modules/inventory/query/getWarehouseStockSummary.test.ts +97 -0
- package/src/modules/inventory/query/getWarehouseStockSummary.ts +82 -0
- package/src/modules/inventory/query/listCostLayers.generated.ts +5 -0
- package/src/modules/inventory/query/listCostLayers.test.ts +58 -0
- package/src/modules/inventory/query/listCostLayers.ts +45 -0
- package/src/modules/inventory/query/listExpiringLots.generated.ts +5 -0
- package/src/modules/inventory/query/listExpiringLots.test.ts +70 -0
- package/src/modules/inventory/query/listExpiringLots.ts +74 -0
- package/src/modules/inventory/query/listInventoryAdjustments.generated.ts +5 -0
- package/src/modules/inventory/query/listInventoryAdjustments.test.ts +89 -0
- package/src/modules/inventory/query/listInventoryAdjustments.ts +59 -0
- package/src/modules/inventory/query/listInventoryCounts.generated.ts +5 -0
- package/src/modules/inventory/query/listInventoryCounts.test.ts +78 -0
- package/src/modules/inventory/query/listInventoryCounts.ts +55 -0
- package/src/modules/inventory/query/listItemValuations.generated.ts +5 -0
- package/src/modules/inventory/query/listItemValuations.test.ts +54 -0
- package/src/modules/inventory/query/listItemValuations.ts +39 -0
- package/src/modules/inventory/query/listLots.generated.ts +5 -0
- package/src/modules/inventory/query/listLots.test.ts +120 -0
- package/src/modules/inventory/query/listLots.ts +68 -0
- package/src/modules/inventory/query/listSerialNumbers.generated.ts +5 -0
- package/src/modules/inventory/query/listSerialNumbers.test.ts +58 -0
- package/src/modules/inventory/query/listSerialNumbers.ts +53 -0
- package/src/modules/inventory/query/listStockLevels.generated.ts +5 -0
- package/src/modules/inventory/query/listStockLevels.test.ts +73 -0
- package/src/modules/inventory/query/listStockLevels.ts +79 -0
- package/src/modules/inventory/query/listStockMovements.generated.ts +5 -0
- package/src/modules/inventory/query/listStockMovements.test.ts +98 -0
- package/src/modules/inventory/query/listStockMovements.ts +105 -0
- package/src/modules/inventory/query/listStorageLocations.generated.ts +5 -0
- package/src/modules/inventory/query/listStorageLocations.test.ts +70 -0
- package/src/modules/inventory/query/listStorageLocations.ts +53 -0
- package/src/modules/inventory/query/listValuationPolicies.generated.ts +5 -0
- package/src/modules/inventory/query/listValuationPolicies.test.ts +38 -0
- package/src/modules/inventory/query/listValuationPolicies.ts +39 -0
- package/src/modules/inventory/query/listWarehouses.generated.ts +5 -0
- package/src/modules/inventory/query/listWarehouses.test.ts +60 -0
- package/src/modules/inventory/query/listWarehouses.ts +39 -0
- package/src/modules/inventory/query/traceLotBackward.generated.ts +5 -0
- package/src/modules/inventory/query/traceLotBackward.test.ts +63 -0
- package/src/modules/inventory/query/traceLotBackward.ts +36 -0
- package/src/modules/inventory/query/traceLotForward.generated.ts +5 -0
- package/src/modules/inventory/query/traceLotForward.test.ts +63 -0
- package/src/modules/inventory/query/traceLotForward.ts +36 -0
- package/src/modules/inventory/tailor.config.ts +13 -0
- package/src/modules/inventory/tailor.d.ts +13 -0
- package/src/modules/inventory/testing/commandTestUtils.ts +29 -0
- package/src/modules/inventory/testing/fixtures.ts +412 -0
- package/src/modules/item-management/docs/models/{item.md → Item.md} +1 -1
- package/src/modules/primitives/seed/currencies.ts +22 -0
- package/src/modules/primitives/seed/exchangeRates.ts +22 -0
- package/src/modules/primitives/seed/index.ts +4 -0
- package/src/modules/primitives/seed/seed.test.ts +80 -0
- package/src/modules/primitives/seed/units.ts +62 -0
- package/src/modules/primitives/seed/uomCategories.ts +24 -0
- package/src/modules/purchase/README.md +63 -0
- package/src/modules/purchase/command/.gitkeep +0 -0
- package/src/modules/purchase/command/activatePurchasePaymentTerm.generated.ts +6 -0
- package/src/modules/purchase/command/activatePurchasePaymentTerm.test.ts +53 -0
- package/src/modules/purchase/command/activatePurchasePaymentTerm.ts +39 -0
- package/src/modules/purchase/command/activatePurchasePriceList.generated.ts +6 -0
- package/src/modules/purchase/command/activatePurchasePriceList.test.ts +39 -0
- package/src/modules/purchase/command/activatePurchasePriceList.ts +32 -0
- package/src/modules/purchase/command/activatePurchasePriceRule.generated.ts +6 -0
- package/src/modules/purchase/command/activatePurchasePriceRule.test.ts +133 -0
- package/src/modules/purchase/command/activatePurchasePriceRule.ts +75 -0
- package/src/modules/purchase/command/approvePurchaseOrder.generated.ts +6 -0
- package/src/modules/purchase/command/approvePurchaseOrder.test.ts +161 -0
- package/src/modules/purchase/command/approvePurchaseOrder.ts +89 -0
- package/src/modules/purchase/command/cancelGoodsReceipt.generated.ts +6 -0
- package/src/modules/purchase/command/cancelGoodsReceipt.test.ts +37 -0
- package/src/modules/purchase/command/cancelGoodsReceipt.ts +29 -0
- package/src/modules/purchase/command/cancelPurchaseBill.generated.ts +6 -0
- package/src/modules/purchase/command/cancelPurchaseBill.test.ts +101 -0
- package/src/modules/purchase/command/cancelPurchaseBill.ts +84 -0
- package/src/modules/purchase/command/cancelPurchaseOrder.generated.ts +6 -0
- package/src/modules/purchase/command/cancelPurchaseOrder.test.ts +119 -0
- package/src/modules/purchase/command/cancelPurchaseOrder.ts +65 -0
- package/src/modules/purchase/command/closePurchaseOrder.generated.ts +6 -0
- package/src/modules/purchase/command/closePurchaseOrder.test.ts +128 -0
- package/src/modules/purchase/command/closePurchaseOrder.ts +58 -0
- package/src/modules/purchase/command/createGoodsReceipt.generated.ts +6 -0
- package/src/modules/purchase/command/createGoodsReceipt.test.ts +233 -0
- package/src/modules/purchase/command/createGoodsReceipt.ts +93 -0
- package/src/modules/purchase/command/createPurchaseBill.generated.ts +6 -0
- package/src/modules/purchase/command/createPurchaseBill.test.ts +277 -0
- package/src/modules/purchase/command/createPurchaseBill.ts +107 -0
- package/src/modules/purchase/command/createPurchaseOrder.generated.ts +6 -0
- package/src/modules/purchase/command/createPurchaseOrder.test.ts +291 -0
- package/src/modules/purchase/command/createPurchaseOrder.ts +131 -0
- package/src/modules/purchase/command/createPurchasePaymentTerm.generated.ts +6 -0
- package/src/modules/purchase/command/createPurchasePaymentTerm.test.ts +140 -0
- package/src/modules/purchase/command/createPurchasePaymentTerm.ts +66 -0
- package/src/modules/purchase/command/createPurchasePriceList.generated.ts +6 -0
- package/src/modules/purchase/command/createPurchasePriceList.test.ts +108 -0
- package/src/modules/purchase/command/createPurchasePriceList.ts +63 -0
- package/src/modules/purchase/command/createPurchasePriceRule.generated.ts +6 -0
- package/src/modules/purchase/command/createPurchasePriceRule.test.ts +139 -0
- package/src/modules/purchase/command/createPurchasePriceRule.ts +95 -0
- package/src/modules/purchase/command/deactivatePurchasePaymentTerm.generated.ts +6 -0
- package/src/modules/purchase/command/deactivatePurchasePaymentTerm.test.ts +49 -0
- package/src/modules/purchase/command/deactivatePurchasePaymentTerm.ts +41 -0
- package/src/modules/purchase/command/deactivatePurchasePriceList.generated.ts +6 -0
- package/src/modules/purchase/command/deactivatePurchasePriceList.test.ts +50 -0
- package/src/modules/purchase/command/deactivatePurchasePriceList.ts +32 -0
- package/src/modules/purchase/command/deactivatePurchasePriceRule.generated.ts +6 -0
- package/src/modules/purchase/command/deactivatePurchasePriceRule.test.ts +50 -0
- package/src/modules/purchase/command/deactivatePurchasePriceRule.ts +32 -0
- package/src/modules/purchase/command/matchPurchaseBill.generated.ts +6 -0
- package/src/modules/purchase/command/matchPurchaseBill.test.ts +188 -0
- package/src/modules/purchase/command/matchPurchaseBill.ts +146 -0
- package/src/modules/purchase/command/postGoodsReceipt.generated.ts +6 -0
- package/src/modules/purchase/command/postGoodsReceipt.test.ts +210 -0
- package/src/modules/purchase/command/postGoodsReceipt.ts +143 -0
- package/src/modules/purchase/command/rejectPurchaseOrder.generated.ts +6 -0
- package/src/modules/purchase/command/rejectPurchaseOrder.test.ts +79 -0
- package/src/modules/purchase/command/rejectPurchaseOrder.ts +41 -0
- package/src/modules/purchase/command/releasePurchaseBill.generated.ts +6 -0
- package/src/modules/purchase/command/releasePurchaseBill.test.ts +94 -0
- package/src/modules/purchase/command/releasePurchaseBill.ts +111 -0
- package/src/modules/purchase/command/setSupplierDefaultPurchasePaymentTerm.generated.ts +6 -0
- package/src/modules/purchase/command/setSupplierDefaultPurchasePaymentTerm.test.ts +171 -0
- package/src/modules/purchase/command/setSupplierDefaultPurchasePaymentTerm.ts +90 -0
- package/src/modules/purchase/command/submitPurchaseOrder.generated.ts +6 -0
- package/src/modules/purchase/command/submitPurchaseOrder.test.ts +98 -0
- package/src/modules/purchase/command/submitPurchaseOrder.ts +73 -0
- package/src/modules/purchase/command/updateGoodsReceipt.generated.ts +6 -0
- package/src/modules/purchase/command/updateGoodsReceipt.test.ts +115 -0
- package/src/modules/purchase/command/updateGoodsReceipt.ts +73 -0
- package/src/modules/purchase/command/updatePurchaseBill.generated.ts +6 -0
- package/src/modules/purchase/command/updatePurchaseBill.test.ts +137 -0
- package/src/modules/purchase/command/updatePurchaseBill.ts +89 -0
- package/src/modules/purchase/command/updatePurchaseOrder.generated.ts +6 -0
- package/src/modules/purchase/command/updatePurchaseOrder.test.ts +195 -0
- package/src/modules/purchase/command/updatePurchaseOrder.ts +121 -0
- package/src/modules/purchase/command/updatePurchasePaymentTerm.generated.ts +6 -0
- package/src/modules/purchase/command/updatePurchasePaymentTerm.test.ts +154 -0
- package/src/modules/purchase/command/updatePurchasePaymentTerm.ts +73 -0
- package/src/modules/purchase/command/updatePurchasePriceList.generated.ts +6 -0
- package/src/modules/purchase/command/updatePurchasePriceList.test.ts +73 -0
- package/src/modules/purchase/command/updatePurchasePriceList.ts +55 -0
- package/src/modules/purchase/command/updatePurchasePriceRule.generated.ts +6 -0
- package/src/modules/purchase/command/updatePurchasePriceRule.test.ts +191 -0
- package/src/modules/purchase/command/updatePurchasePriceRule.ts +104 -0
- package/src/modules/purchase/db/.gitkeep +0 -0
- package/src/modules/purchase/db/goodsReceipt.ts +62 -0
- package/src/modules/purchase/db/purchaseBill.ts +74 -0
- package/src/modules/purchase/db/purchaseOrder.ts +100 -0
- package/src/modules/purchase/db/purchasePaymentTerm.ts +46 -0
- package/src/modules/purchase/db/purchasePriceList.ts +53 -0
- package/src/modules/purchase/db/purchasePriceRule.ts +74 -0
- package/src/modules/purchase/db/supplierProfile.ts +59 -0
- package/src/modules/purchase/docs/commands/ActivatePurchasePaymentTerm.md +39 -0
- package/src/modules/purchase/docs/commands/ActivatePurchasePriceList.md +37 -0
- package/src/modules/purchase/docs/commands/ActivatePurchasePriceRule.md +47 -0
- package/src/modules/purchase/docs/commands/ApprovePurchaseOrder.md +55 -0
- package/src/modules/purchase/docs/commands/CancelGoodsReceipt.md +39 -0
- package/src/modules/purchase/docs/commands/CancelPurchaseBill.md +49 -0
- package/src/modules/purchase/docs/commands/CancelPurchaseOrder.md +47 -0
- package/src/modules/purchase/docs/commands/ClosePurchaseOrder.md +49 -0
- package/src/modules/purchase/docs/commands/CreateGoodsReceipt.md +54 -0
- package/src/modules/purchase/docs/commands/CreatePurchaseBill.md +59 -0
- package/src/modules/purchase/docs/commands/CreatePurchaseOrder.md +66 -0
- package/src/modules/purchase/docs/commands/CreatePurchasePaymentTerm.md +52 -0
- package/src/modules/purchase/docs/commands/CreatePurchasePriceList.md +48 -0
- package/src/modules/purchase/docs/commands/CreatePurchasePriceRule.md +62 -0
- package/src/modules/purchase/docs/commands/DeactivatePurchasePaymentTerm.md +42 -0
- package/src/modules/purchase/docs/commands/DeactivatePurchasePriceList.md +39 -0
- package/src/modules/purchase/docs/commands/DeactivatePurchasePriceRule.md +39 -0
- package/src/modules/purchase/docs/commands/MatchPurchaseBill.md +63 -0
- package/src/modules/purchase/docs/commands/PostGoodsReceipt.md +61 -0
- package/src/modules/purchase/docs/commands/RejectPurchaseOrder.md +44 -0
- package/src/modules/purchase/docs/commands/ReleasePurchaseBill.md +48 -0
- package/src/modules/purchase/docs/commands/SetSupplierDefaultPurchasePaymentTerm.md +50 -0
- package/src/modules/purchase/docs/commands/SubmitPurchaseOrder.md +51 -0
- package/src/modules/purchase/docs/commands/UpdateGoodsReceipt.md +48 -0
- package/src/modules/purchase/docs/commands/UpdatePurchaseBill.md +51 -0
- package/src/modules/purchase/docs/commands/UpdatePurchaseOrder.md +59 -0
- package/src/modules/purchase/docs/commands/UpdatePurchasePaymentTerm.md +51 -0
- package/src/modules/purchase/docs/commands/UpdatePurchasePriceList.md +43 -0
- package/src/modules/purchase/docs/commands/UpdatePurchasePriceRule.md +60 -0
- package/src/modules/purchase/docs/features/goods-receipt-matching.md +71 -0
- package/src/modules/purchase/docs/features/purchase-order-lifecycle.md +87 -0
- package/src/modules/purchase/docs/features/purchase-payment-terms.md +67 -0
- package/src/modules/purchase/docs/features/supplier-bill-matching.md +79 -0
- package/src/modules/purchase/docs/features/supplier-purchase-pricing.md +72 -0
- package/src/modules/purchase/docs/models/GoodsReceipt.md +58 -0
- package/src/modules/purchase/docs/models/PurchaseBill.md +68 -0
- package/src/modules/purchase/docs/models/PurchaseOrder.md +88 -0
- package/src/modules/purchase/docs/models/PurchasePaymentTerm.md +59 -0
- package/src/modules/purchase/docs/models/PurchasePriceList.md +53 -0
- package/src/modules/purchase/docs/models/PurchasePriceRule.md +58 -0
- package/src/modules/purchase/docs/models/SupplierProfile.md +37 -0
- package/src/modules/purchase/docs/queries/CalculatePurchaseBillDueSchedule.md +47 -0
- package/src/modules/purchase/docs/queries/CalculatePurchasePrice.md +53 -0
- package/src/modules/purchase/docs/queries/GetGoodsReceipt.md +36 -0
- package/src/modules/purchase/docs/queries/GetPurchaseBill.md +41 -0
- package/src/modules/purchase/docs/queries/GetPurchaseOrder.md +42 -0
- package/src/modules/purchase/docs/queries/GetPurchasePaymentTerm.md +36 -0
- package/src/modules/purchase/docs/queries/GetPurchasePriceList.md +36 -0
- package/src/modules/purchase/docs/queries/GetSupplierProfile.md +36 -0
- package/src/modules/purchase/executor/.gitkeep +0 -0
- package/src/modules/purchase/generated/.gitkeep +0 -0
- package/src/modules/purchase/generated/enums.ts +63 -0
- package/src/modules/purchase/generated/kysely-tailordb.ts +186 -0
- package/src/modules/purchase/index.ts +2 -0
- package/src/modules/purchase/lib/_db_deps.ts +77 -0
- package/src/modules/purchase/lib/domain.ts +467 -0
- package/src/modules/purchase/lib/errors.generated.ts +367 -0
- package/src/modules/purchase/lib/permissions.generated.ts +34 -0
- package/src/modules/purchase/lib/types.ts +65 -0
- package/src/modules/purchase/module.ts +218 -0
- package/src/modules/purchase/permissions.ts +1 -0
- package/src/modules/purchase/query/.gitkeep +0 -0
- package/src/modules/purchase/query/calculatePurchaseBillDueSchedule.generated.ts +5 -0
- package/src/modules/purchase/query/calculatePurchaseBillDueSchedule.test.ts +183 -0
- package/src/modules/purchase/query/calculatePurchaseBillDueSchedule.ts +41 -0
- package/src/modules/purchase/query/calculatePurchasePrice.generated.ts +5 -0
- package/src/modules/purchase/query/calculatePurchasePrice.test.ts +143 -0
- package/src/modules/purchase/query/calculatePurchasePrice.ts +113 -0
- package/src/modules/purchase/query/getGoodsReceipt.generated.ts +5 -0
- package/src/modules/purchase/query/getGoodsReceipt.test.ts +42 -0
- package/src/modules/purchase/query/getGoodsReceipt.ts +27 -0
- package/src/modules/purchase/query/getPurchaseBill.generated.ts +5 -0
- package/src/modules/purchase/query/getPurchaseBill.test.ts +69 -0
- package/src/modules/purchase/query/getPurchaseBill.ts +35 -0
- package/src/modules/purchase/query/getPurchaseOrder.generated.ts +5 -0
- package/src/modules/purchase/query/getPurchaseOrder.test.ts +65 -0
- package/src/modules/purchase/query/getPurchaseOrder.ts +33 -0
- package/src/modules/purchase/query/getPurchasePaymentTerm.generated.ts +5 -0
- package/src/modules/purchase/query/getPurchasePaymentTerm.test.ts +44 -0
- package/src/modules/purchase/query/getPurchasePaymentTerm.ts +30 -0
- package/src/modules/purchase/query/getPurchasePriceList.generated.ts +5 -0
- package/src/modules/purchase/query/getPurchasePriceList.test.ts +48 -0
- package/src/modules/purchase/query/getPurchasePriceList.ts +30 -0
- package/src/modules/purchase/query/getSupplierProfile.generated.ts +5 -0
- package/src/modules/purchase/query/getSupplierProfile.test.ts +50 -0
- package/src/modules/purchase/query/getSupplierProfile.ts +18 -0
- package/src/modules/purchase/tailor.config.ts +13 -0
- package/src/modules/purchase/tailor.d.ts +13 -0
- package/src/modules/purchase/testing/commandTestUtils.ts +35 -0
- package/src/modules/purchase/testing/fixtures.ts +317 -0
- package/src/modules/sales/README.md +69 -0
- package/src/modules/sales/command/.gitkeep +0 -0
- package/src/modules/sales/command/activateChannel.generated.ts +6 -0
- package/src/modules/sales/command/activateChannel.test.ts +70 -0
- package/src/modules/sales/command/activateChannel.ts +48 -0
- package/src/modules/sales/command/activateListing.generated.ts +6 -0
- package/src/modules/sales/command/activateListing.test.ts +87 -0
- package/src/modules/sales/command/activateListing.ts +49 -0
- package/src/modules/sales/command/activateSalesPaymentTerm.generated.ts +6 -0
- package/src/modules/sales/command/activateSalesPaymentTerm.test.ts +58 -0
- package/src/modules/sales/command/activateSalesPaymentTerm.ts +50 -0
- package/src/modules/sales/command/activateSalesPriceList.generated.ts +6 -0
- package/src/modules/sales/command/activateSalesPriceList.test.ts +55 -0
- package/src/modules/sales/command/activateSalesPriceList.ts +46 -0
- package/src/modules/sales/command/activateSalesPriceRule.generated.ts +6 -0
- package/src/modules/sales/command/activateSalesPriceRule.test.ts +83 -0
- package/src/modules/sales/command/activateSalesPriceRule.ts +58 -0
- package/src/modules/sales/command/cancelChannelOrder.generated.ts +6 -0
- package/src/modules/sales/command/cancelChannelOrder.test.ts +47 -0
- package/src/modules/sales/command/cancelChannelOrder.ts +30 -0
- package/src/modules/sales/command/cancelSalesInvoice.generated.ts +6 -0
- package/src/modules/sales/command/cancelSalesInvoice.test.ts +47 -0
- package/src/modules/sales/command/cancelSalesInvoice.ts +37 -0
- package/src/modules/sales/command/cancelSalesOrder.generated.ts +6 -0
- package/src/modules/sales/command/cancelSalesOrder.test.ts +70 -0
- package/src/modules/sales/command/cancelSalesOrder.ts +48 -0
- package/src/modules/sales/command/cancelSyncJob.generated.ts +6 -0
- package/src/modules/sales/command/cancelSyncJob.test.ts +58 -0
- package/src/modules/sales/command/cancelSyncJob.ts +30 -0
- package/src/modules/sales/command/closeSalesOrder.generated.ts +6 -0
- package/src/modules/sales/command/closeSalesOrder.test.ts +41 -0
- package/src/modules/sales/command/closeSalesOrder.ts +51 -0
- package/src/modules/sales/command/confirmSalesOrder.generated.ts +6 -0
- package/src/modules/sales/command/confirmSalesOrder.test.ts +68 -0
- package/src/modules/sales/command/confirmSalesOrder.ts +67 -0
- package/src/modules/sales/command/convertChannelOrder.generated.ts +6 -0
- package/src/modules/sales/command/convertChannelOrder.test.ts +118 -0
- package/src/modules/sales/command/convertChannelOrder.ts +151 -0
- package/src/modules/sales/command/createChannel.generated.ts +6 -0
- package/src/modules/sales/command/createChannel.test.ts +100 -0
- package/src/modules/sales/command/createChannel.ts +58 -0
- package/src/modules/sales/command/createListing.generated.ts +6 -0
- package/src/modules/sales/command/createListing.test.ts +88 -0
- package/src/modules/sales/command/createListing.ts +76 -0
- package/src/modules/sales/command/createSalesCreditNote.generated.ts +6 -0
- package/src/modules/sales/command/createSalesCreditNote.test.ts +56 -0
- package/src/modules/sales/command/createSalesCreditNote.ts +75 -0
- package/src/modules/sales/command/createSalesInvoice.generated.ts +6 -0
- package/src/modules/sales/command/createSalesInvoice.test.ts +85 -0
- package/src/modules/sales/command/createSalesInvoice.ts +94 -0
- package/src/modules/sales/command/createSalesOrder.generated.ts +6 -0
- package/src/modules/sales/command/createSalesOrder.test.ts +134 -0
- package/src/modules/sales/command/createSalesOrder.ts +140 -0
- package/src/modules/sales/command/createSalesPaymentTerm.generated.ts +6 -0
- package/src/modules/sales/command/createSalesPaymentTerm.test.ts +59 -0
- package/src/modules/sales/command/createSalesPaymentTerm.ts +50 -0
- package/src/modules/sales/command/createSalesPriceList.generated.ts +6 -0
- package/src/modules/sales/command/createSalesPriceList.test.ts +67 -0
- package/src/modules/sales/command/createSalesPriceList.ts +45 -0
- package/src/modules/sales/command/createSalesPriceRule.generated.ts +6 -0
- package/src/modules/sales/command/createSalesPriceRule.test.ts +137 -0
- package/src/modules/sales/command/createSalesPriceRule.ts +66 -0
- package/src/modules/sales/command/createShipment.generated.ts +6 -0
- package/src/modules/sales/command/createShipment.test.ts +75 -0
- package/src/modules/sales/command/createShipment.ts +86 -0
- package/src/modules/sales/command/deactivateChannel.generated.ts +6 -0
- package/src/modules/sales/command/deactivateChannel.test.ts +29 -0
- package/src/modules/sales/command/deactivateChannel.ts +30 -0
- package/src/modules/sales/command/deactivateSalesPaymentTerm.generated.ts +6 -0
- package/src/modules/sales/command/deactivateSalesPaymentTerm.test.ts +29 -0
- package/src/modules/sales/command/deactivateSalesPaymentTerm.ts +37 -0
- package/src/modules/sales/command/deactivateSalesPriceList.generated.ts +6 -0
- package/src/modules/sales/command/deactivateSalesPriceList.test.ts +33 -0
- package/src/modules/sales/command/deactivateSalesPriceList.ts +37 -0
- package/src/modules/sales/command/deactivateSalesPriceRule.generated.ts +6 -0
- package/src/modules/sales/command/deactivateSalesPriceRule.test.ts +33 -0
- package/src/modules/sales/command/deactivateSalesPriceRule.ts +37 -0
- package/src/modules/sales/command/issueSalesCreditNote.generated.ts +6 -0
- package/src/modules/sales/command/issueSalesCreditNote.test.ts +62 -0
- package/src/modules/sales/command/issueSalesCreditNote.ts +71 -0
- package/src/modules/sales/command/issueSalesInvoice.generated.ts +6 -0
- package/src/modules/sales/command/issueSalesInvoice.test.ts +88 -0
- package/src/modules/sales/command/issueSalesInvoice.ts +115 -0
- package/src/modules/sales/command/markChannelOrderException.generated.ts +6 -0
- package/src/modules/sales/command/markChannelOrderException.test.ts +59 -0
- package/src/modules/sales/command/markChannelOrderException.ts +49 -0
- package/src/modules/sales/command/pauseListing.generated.ts +6 -0
- package/src/modules/sales/command/pauseListing.test.ts +40 -0
- package/src/modules/sales/command/pauseListing.ts +30 -0
- package/src/modules/sales/command/placeSalesOrderOnCreditHold.generated.ts +6 -0
- package/src/modules/sales/command/placeSalesOrderOnCreditHold.test.ts +74 -0
- package/src/modules/sales/command/placeSalesOrderOnCreditHold.ts +46 -0
- package/src/modules/sales/command/postShipment.generated.ts +6 -0
- package/src/modules/sales/command/postShipment.test.ts +97 -0
- package/src/modules/sales/command/postShipment.ts +89 -0
- package/src/modules/sales/command/recordChannelOrder.generated.ts +6 -0
- package/src/modules/sales/command/recordChannelOrder.test.ts +124 -0
- package/src/modules/sales/command/recordChannelOrder.ts +93 -0
- package/src/modules/sales/command/rejectSalesOrder.generated.ts +6 -0
- package/src/modules/sales/command/rejectSalesOrder.test.ts +78 -0
- package/src/modules/sales/command/rejectSalesOrder.ts +42 -0
- package/src/modules/sales/command/releaseSalesOrderCreditHold.generated.ts +6 -0
- package/src/modules/sales/command/releaseSalesOrderCreditHold.test.ts +50 -0
- package/src/modules/sales/command/releaseSalesOrderCreditHold.ts +51 -0
- package/src/modules/sales/command/retireListing.generated.ts +6 -0
- package/src/modules/sales/command/retireListing.test.ts +42 -0
- package/src/modules/sales/command/retireListing.ts +30 -0
- package/src/modules/sales/command/retrySyncJob.generated.ts +6 -0
- package/src/modules/sales/command/retrySyncJob.test.ts +54 -0
- package/src/modules/sales/command/retrySyncJob.ts +44 -0
- package/src/modules/sales/command/sendSalesInvoice.generated.ts +6 -0
- package/src/modules/sales/command/sendSalesInvoice.test.ts +50 -0
- package/src/modules/sales/command/sendSalesInvoice.ts +43 -0
- package/src/modules/sales/command/startSyncJob.generated.ts +6 -0
- package/src/modules/sales/command/startSyncJob.test.ts +65 -0
- package/src/modules/sales/command/startSyncJob.ts +54 -0
- package/src/modules/sales/command/submitSalesOrder.generated.ts +6 -0
- package/src/modules/sales/command/submitSalesOrder.test.ts +58 -0
- package/src/modules/sales/command/submitSalesOrder.ts +49 -0
- package/src/modules/sales/command/updateChannel.generated.ts +6 -0
- package/src/modules/sales/command/updateChannel.test.ts +71 -0
- package/src/modules/sales/command/updateChannel.ts +68 -0
- package/src/modules/sales/command/updateListing.generated.ts +6 -0
- package/src/modules/sales/command/updateListing.test.ts +56 -0
- package/src/modules/sales/command/updateListing.ts +60 -0
- package/src/modules/sales/command/updateSalesCreditNote.generated.ts +6 -0
- package/src/modules/sales/command/updateSalesCreditNote.test.ts +68 -0
- package/src/modules/sales/command/updateSalesCreditNote.ts +68 -0
- package/src/modules/sales/command/updateSalesInvoice.generated.ts +6 -0
- package/src/modules/sales/command/updateSalesInvoice.test.ts +73 -0
- package/src/modules/sales/command/updateSalesInvoice.ts +80 -0
- package/src/modules/sales/command/updateSalesOrder.generated.ts +6 -0
- package/src/modules/sales/command/updateSalesOrder.test.ts +93 -0
- package/src/modules/sales/command/updateSalesOrder.ts +121 -0
- package/src/modules/sales/command/updateSalesPaymentTerm.generated.ts +6 -0
- package/src/modules/sales/command/updateSalesPaymentTerm.test.ts +66 -0
- package/src/modules/sales/command/updateSalesPaymentTerm.ts +59 -0
- package/src/modules/sales/command/updateSalesPriceList.generated.ts +6 -0
- package/src/modules/sales/command/updateSalesPriceList.test.ts +71 -0
- package/src/modules/sales/command/updateSalesPriceList.ts +52 -0
- package/src/modules/sales/command/updateSalesPriceRule.generated.ts +6 -0
- package/src/modules/sales/command/updateSalesPriceRule.test.ts +95 -0
- package/src/modules/sales/command/updateSalesPriceRule.ts +81 -0
- package/src/modules/sales/command/updateShipment.generated.ts +6 -0
- package/src/modules/sales/command/updateShipment.test.ts +78 -0
- package/src/modules/sales/command/updateShipment.ts +84 -0
- package/src/modules/sales/db/.gitkeep +0 -0
- package/src/modules/sales/db/channel.ts +43 -0
- package/src/modules/sales/db/channelOrder.ts +109 -0
- package/src/modules/sales/db/channelOrderLine.ts +84 -0
- package/src/modules/sales/db/listing.ts +81 -0
- package/src/modules/sales/db/salesCreditNote.ts +63 -0
- package/src/modules/sales/db/salesCreditNoteLine.ts +49 -0
- package/src/modules/sales/db/salesInvoice.ts +95 -0
- package/src/modules/sales/db/salesInvoiceLine.ts +64 -0
- package/src/modules/sales/db/salesOrder.ts +103 -0
- package/src/modules/sales/db/salesOrderLine.ts +82 -0
- package/src/modules/sales/db/salesPaymentTerm.ts +46 -0
- package/src/modules/sales/db/salesPriceList.ts +61 -0
- package/src/modules/sales/db/salesPriceRule.ts +96 -0
- package/src/modules/sales/db/shipment.ts +78 -0
- package/src/modules/sales/db/shipmentLine.ts +58 -0
- package/src/modules/sales/db/syncJob.ts +70 -0
- package/src/modules/sales/docs/commands/ActivateChannel.md +42 -0
- package/src/modules/sales/docs/commands/ActivateListing.md +46 -0
- package/src/modules/sales/docs/commands/ActivateSalesPaymentTerm.md +41 -0
- package/src/modules/sales/docs/commands/ActivateSalesPriceList.md +39 -0
- package/src/modules/sales/docs/commands/ActivateSalesPriceRule.md +48 -0
- package/src/modules/sales/docs/commands/CancelChannelOrder.md +37 -0
- package/src/modules/sales/docs/commands/CancelSalesInvoice.md +39 -0
- package/src/modules/sales/docs/commands/CancelSalesOrder.md +40 -0
- package/src/modules/sales/docs/commands/CancelSyncJob.md +36 -0
- package/src/modules/sales/docs/commands/CloseSalesOrder.md +39 -0
- package/src/modules/sales/docs/commands/ConfirmSalesOrder.md +43 -0
- package/src/modules/sales/docs/commands/ConvertChannelOrder.md +44 -0
- package/src/modules/sales/docs/commands/CreateChannel.md +40 -0
- package/src/modules/sales/docs/commands/CreateListing.md +40 -0
- package/src/modules/sales/docs/commands/CreateSalesCreditNote.md +37 -0
- package/src/modules/sales/docs/commands/CreateSalesInvoice.md +39 -0
- package/src/modules/sales/docs/commands/CreateSalesOrder.md +51 -0
- package/src/modules/sales/docs/commands/CreateSalesPaymentTerm.md +38 -0
- package/src/modules/sales/docs/commands/CreateSalesPriceList.md +37 -0
- package/src/modules/sales/docs/commands/CreateSalesPriceRule.md +46 -0
- package/src/modules/sales/docs/commands/CreateShipment.md +38 -0
- package/src/modules/sales/docs/commands/DeactivateChannel.md +35 -0
- package/src/modules/sales/docs/commands/DeactivateSalesPaymentTerm.md +35 -0
- package/src/modules/sales/docs/commands/DeactivateSalesPriceList.md +35 -0
- package/src/modules/sales/docs/commands/DeactivateSalesPriceRule.md +35 -0
- package/src/modules/sales/docs/commands/IssueSalesCreditNote.md +38 -0
- package/src/modules/sales/docs/commands/IssueSalesInvoice.md +43 -0
- package/src/modules/sales/docs/commands/MarkChannelOrderException.md +37 -0
- package/src/modules/sales/docs/commands/PauseListing.md +36 -0
- package/src/modules/sales/docs/commands/PlaceSalesOrderOnCreditHold.md +41 -0
- package/src/modules/sales/docs/commands/PostShipment.md +41 -0
- package/src/modules/sales/docs/commands/RecordChannelOrder.md +45 -0
- package/src/modules/sales/docs/commands/RejectSalesOrder.md +41 -0
- package/src/modules/sales/docs/commands/ReleaseSalesOrderCreditHold.md +36 -0
- package/src/modules/sales/docs/commands/RetireListing.md +36 -0
- package/src/modules/sales/docs/commands/RetrySyncJob.md +39 -0
- package/src/modules/sales/docs/commands/SendSalesInvoice.md +38 -0
- package/src/modules/sales/docs/commands/StartSyncJob.md +39 -0
- package/src/modules/sales/docs/commands/SubmitSalesOrder.md +43 -0
- package/src/modules/sales/docs/commands/UpdateChannel.md +43 -0
- package/src/modules/sales/docs/commands/UpdateListing.md +38 -0
- package/src/modules/sales/docs/commands/UpdateSalesCreditNote.md +38 -0
- package/src/modules/sales/docs/commands/UpdateSalesInvoice.md +38 -0
- package/src/modules/sales/docs/commands/UpdateSalesOrder.md +45 -0
- package/src/modules/sales/docs/commands/UpdateSalesPaymentTerm.md +41 -0
- package/src/modules/sales/docs/commands/UpdateSalesPriceList.md +40 -0
- package/src/modules/sales/docs/commands/UpdateSalesPriceRule.md +49 -0
- package/src/modules/sales/docs/commands/UpdateShipment.md +38 -0
- package/src/modules/sales/docs/commands/bin/rm.md +52 -0
- package/src/modules/sales/docs/commands/opt/homebrew/bin/codex.md +52 -0
- package/src/modules/sales/docs/commands/opt/homebrew/bin/ps2ps2.md +52 -0
- package/src/modules/sales/docs/commands/opt/homebrew/bin/rg.md +52 -0
- package/src/modules/sales/docs/commands/opt/homebrew/bin/sha384sum.md +52 -0
- package/src/modules/sales/docs/commands/opt/homebrew/opt/libpq/bin/pg_combinebackup.md +52 -0
- package/src/modules/sales/docs/commands/sbin/mount_msdos.md +52 -0
- package/src/modules/sales/docs/commands/sbin/mount_nfs.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/cupstestppd.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/enc2xs.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/hash.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/jarsigner.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/mpsgraphtool.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/nano.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/pod2html5.34.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/ri.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/rs.md +52 -0
- package/src/modules/sales/docs/commands/usr/bin/trustcachectl.md +52 -0
- package/src/modules/sales/docs/commands/usr/sbin/htpasswd.md +52 -0
- package/src/modules/sales/docs/commands/usr/sbin/lpadmin.md +52 -0
- package/src/modules/sales/docs/commands/usr/sbin/setkey.md +52 -0
- package/src/modules/sales/docs/features/channel-listing-management.md +68 -0
- package/src/modules/sales/docs/features/channel-order-sync.md +78 -0
- package/src/modules/sales/docs/features/customer-invoicing.md +89 -0
- package/src/modules/sales/docs/features/customer-sales-pricing.md +72 -0
- package/src/modules/sales/docs/features/sales-order-lifecycle.md +96 -0
- package/src/modules/sales/docs/features/sales-payment-terms.md +67 -0
- package/src/modules/sales/docs/features/shipment-fulfillment.md +71 -0
- package/src/modules/sales/docs/models/Channel.md +48 -0
- package/src/modules/sales/docs/models/ChannelOrder.md +56 -0
- package/src/modules/sales/docs/models/ChannelOrderLine.md +39 -0
- package/src/modules/sales/docs/models/Listing.md +56 -0
- package/src/modules/sales/docs/models/SalesCreditNote.md +47 -0
- package/src/modules/sales/docs/models/SalesCreditNoteLine.md +37 -0
- package/src/modules/sales/docs/models/SalesInvoice.md +55 -0
- package/src/modules/sales/docs/models/SalesInvoiceLine.md +39 -0
- package/src/modules/sales/docs/models/SalesOrder.md +79 -0
- package/src/modules/sales/docs/models/SalesOrderLine.md +42 -0
- package/src/modules/sales/docs/models/SalesPaymentTerm.md +53 -0
- package/src/modules/sales/docs/models/SalesPriceList.md +50 -0
- package/src/modules/sales/docs/models/SalesPriceRule.md +51 -0
- package/src/modules/sales/docs/models/Shipment.md +49 -0
- package/src/modules/sales/docs/models/ShipmentLine.md +38 -0
- package/src/modules/sales/docs/models/SyncJob.md +53 -0
- package/src/modules/sales/docs/queries/CalculateInvoiceDueSchedule.md +37 -0
- package/src/modules/sales/docs/queries/GetApplicableSalesPrice.md +38 -0
- package/src/modules/sales/docs/queries/GetChannel.md +34 -0
- package/src/modules/sales/docs/queries/GetChannelOrder.md +34 -0
- package/src/modules/sales/docs/queries/GetListing.md +34 -0
- package/src/modules/sales/docs/queries/GetListingByExternalIdentifier.md +35 -0
- package/src/modules/sales/docs/queries/GetSalesCreditNote.md +34 -0
- package/src/modules/sales/docs/queries/GetSalesInvoice.md +34 -0
- package/src/modules/sales/docs/queries/GetSalesOrder.md +36 -0
- package/src/modules/sales/docs/queries/GetSalesPaymentTerm.md +34 -0
- package/src/modules/sales/docs/queries/GetSalesPriceList.md +34 -0
- package/src/modules/sales/docs/queries/GetShipment.md +34 -0
- package/src/modules/sales/docs/queries/GetSyncJob.md +34 -0
- package/src/modules/sales/docs/queries/ListChannelOrdersByStatus.md +34 -0
- package/src/modules/sales/docs/queries/ListChannels.md +33 -0
- package/src/modules/sales/docs/queries/ListListingsByChannel.md +33 -0
- package/src/modules/sales/docs/queries/ListSalesCreditNotesByInvoice.md +33 -0
- package/src/modules/sales/docs/queries/ListSalesInvoicesBySalesOrder.md +33 -0
- package/src/modules/sales/docs/queries/ListSalesOrders.md +36 -0
- package/src/modules/sales/docs/queries/ListSalesPaymentTerms.md +33 -0
- package/src/modules/sales/docs/queries/ListSalesPriceLists.md +33 -0
- package/src/modules/sales/docs/queries/ListSalesPriceRulesByPriceList.md +33 -0
- package/src/modules/sales/docs/queries/ListShipmentsBySalesOrder.md +33 -0
- package/src/modules/sales/docs/queries/ListSyncJobs.md +34 -0
- package/src/modules/sales/executor/.gitkeep +0 -0
- package/src/modules/sales/generated/.gitkeep +0 -0
- package/src/modules/sales/generated/enums.ts +119 -0
- package/src/modules/sales/generated/kysely-tailordb.ts +332 -0
- package/src/modules/sales/index.ts +2 -0
- package/src/modules/sales/lib/_db_deps.ts +67 -0
- package/src/modules/sales/lib/domain.ts +354 -0
- package/src/modules/sales/lib/errors.generated.ts +417 -0
- package/src/modules/sales/lib/permissions.generated.ts +53 -0
- package/src/modules/sales/lib/repository.ts +137 -0
- package/src/modules/sales/lib/types.ts +105 -0
- package/src/modules/sales/module.ts +418 -0
- package/src/modules/sales/permissions.ts +3 -0
- package/src/modules/sales/query/.gitkeep +0 -0
- package/src/modules/sales/query/calculateInvoiceDueSchedule.generated.ts +5 -0
- package/src/modules/sales/query/calculateInvoiceDueSchedule.test.ts +107 -0
- package/src/modules/sales/query/calculateInvoiceDueSchedule.ts +35 -0
- package/src/modules/sales/query/getApplicableSalesPrice.generated.ts +5 -0
- package/src/modules/sales/query/getApplicableSalesPrice.test.ts +110 -0
- package/src/modules/sales/query/getApplicableSalesPrice.ts +81 -0
- package/src/modules/sales/query/getChannel.generated.ts +5 -0
- package/src/modules/sales/query/getChannel.test.ts +39 -0
- package/src/modules/sales/query/getChannel.ts +15 -0
- package/src/modules/sales/query/getChannelOrder.generated.ts +5 -0
- package/src/modules/sales/query/getChannelOrder.test.ts +50 -0
- package/src/modules/sales/query/getChannelOrder.ts +29 -0
- package/src/modules/sales/query/getListing.generated.ts +5 -0
- package/src/modules/sales/query/getListing.test.ts +39 -0
- package/src/modules/sales/query/getListing.ts +15 -0
- package/src/modules/sales/query/getListingByExternalIdentifier.generated.ts +5 -0
- package/src/modules/sales/query/getListingByExternalIdentifier.test.ts +61 -0
- package/src/modules/sales/query/getListingByExternalIdentifier.ts +23 -0
- package/src/modules/sales/query/getSalesCreditNote.generated.ts +5 -0
- package/src/modules/sales/query/getSalesCreditNote.test.ts +44 -0
- package/src/modules/sales/query/getSalesCreditNote.ts +14 -0
- package/src/modules/sales/query/getSalesInvoice.generated.ts +5 -0
- package/src/modules/sales/query/getSalesInvoice.test.ts +44 -0
- package/src/modules/sales/query/getSalesInvoice.ts +14 -0
- package/src/modules/sales/query/getSalesOrder.generated.ts +5 -0
- package/src/modules/sales/query/getSalesOrder.test.ts +57 -0
- package/src/modules/sales/query/getSalesOrder.ts +20 -0
- package/src/modules/sales/query/getSalesPaymentTerm.generated.ts +5 -0
- package/src/modules/sales/query/getSalesPaymentTerm.test.ts +44 -0
- package/src/modules/sales/query/getSalesPaymentTerm.ts +24 -0
- package/src/modules/sales/query/getSalesPriceList.generated.ts +5 -0
- package/src/modules/sales/query/getSalesPriceList.test.ts +39 -0
- package/src/modules/sales/query/getSalesPriceList.ts +15 -0
- package/src/modules/sales/query/getShipment.generated.ts +5 -0
- package/src/modules/sales/query/getShipment.test.ts +44 -0
- package/src/modules/sales/query/getShipment.ts +12 -0
- package/src/modules/sales/query/getSyncJob.generated.ts +5 -0
- package/src/modules/sales/query/getSyncJob.test.ts +43 -0
- package/src/modules/sales/query/getSyncJob.ts +24 -0
- package/src/modules/sales/query/listChannelOrdersByStatus.generated.ts +5 -0
- package/src/modules/sales/query/listChannelOrdersByStatus.test.ts +58 -0
- package/src/modules/sales/query/listChannelOrdersByStatus.ts +53 -0
- package/src/modules/sales/query/listChannels.generated.ts +5 -0
- package/src/modules/sales/query/listChannels.test.ts +36 -0
- package/src/modules/sales/query/listChannels.ts +39 -0
- package/src/modules/sales/query/listListingsByChannel.generated.ts +5 -0
- package/src/modules/sales/query/listListingsByChannel.test.ts +36 -0
- package/src/modules/sales/query/listListingsByChannel.ts +39 -0
- package/src/modules/sales/query/listSalesCreditNotesByInvoice.generated.ts +5 -0
- package/src/modules/sales/query/listSalesCreditNotesByInvoice.test.ts +36 -0
- package/src/modules/sales/query/listSalesCreditNotesByInvoice.ts +42 -0
- package/src/modules/sales/query/listSalesInvoicesBySalesOrder.generated.ts +5 -0
- package/src/modules/sales/query/listSalesInvoicesBySalesOrder.test.ts +36 -0
- package/src/modules/sales/query/listSalesInvoicesBySalesOrder.ts +42 -0
- package/src/modules/sales/query/listSalesOrders.generated.ts +5 -0
- package/src/modules/sales/query/listSalesOrders.test.ts +79 -0
- package/src/modules/sales/query/listSalesOrders.ts +67 -0
- package/src/modules/sales/query/listSalesPaymentTerms.generated.ts +5 -0
- package/src/modules/sales/query/listSalesPaymentTerms.test.ts +36 -0
- package/src/modules/sales/query/listSalesPaymentTerms.ts +42 -0
- package/src/modules/sales/query/listSalesPriceLists.generated.ts +5 -0
- package/src/modules/sales/query/listSalesPriceLists.test.ts +36 -0
- package/src/modules/sales/query/listSalesPriceLists.ts +39 -0
- package/src/modules/sales/query/listSalesPriceRulesByPriceList.generated.ts +5 -0
- package/src/modules/sales/query/listSalesPriceRulesByPriceList.test.ts +39 -0
- package/src/modules/sales/query/listSalesPriceRulesByPriceList.ts +47 -0
- package/src/modules/sales/query/listShipmentsBySalesOrder.generated.ts +5 -0
- package/src/modules/sales/query/listShipmentsBySalesOrder.test.ts +36 -0
- package/src/modules/sales/query/listShipmentsBySalesOrder.ts +36 -0
- package/src/modules/sales/query/listSyncJobs.generated.ts +5 -0
- package/src/modules/sales/query/listSyncJobs.test.ts +50 -0
- package/src/modules/sales/query/listSyncJobs.ts +47 -0
- package/src/modules/sales/tailor.config.ts +13 -0
- package/src/modules/sales/tailor.d.ts +13 -0
- package/src/modules/sales/testing/commandTestUtils.ts +35 -0
- package/src/modules/sales/testing/fixtures.ts +520 -0
- package/src/modules/user-management/command/.gitkeep +0 -0
- package/src/modules/user-management/db/.gitkeep +0 -0
- package/src/modules/user-management/executor/.gitkeep +0 -0
- package/src/modules/user-management/generated/.gitkeep +0 -0
- package/src/modules/user-management/lib/errors.generated.ts +0 -5
- package/src/modules/user-management/lib/recomputeUserPermissions.ts +4 -2
- package/src/modules/user-management/permissions.ts +3 -0
- package/src/modules/user-management/query/.gitkeep +0 -0
- package/src/modules/user-management/query/listRolePermissionsByRole.generated.ts +5 -0
- package/src/modules/user-management/query/listRolePermissionsByRole.test.ts +20 -0
- package/src/modules/user-management/query/listRolePermissionsByRole.ts +28 -0
- package/src/modules/user-management/query/listUserRolesByUser.generated.ts +5 -0
- package/src/modules/user-management/query/listUserRolesByUser.test.ts +20 -0
- package/src/modules/user-management/query/listUserRolesByUser.ts +28 -0
- package/src/schemas.ts +6 -6
- package/src/shared/defineCommand.ts +1 -1
- package/src/shared/entityTypes.ts +1 -1
- package/src/shared/uuidv5.test.ts +18 -0
- package/src/shared/uuidv5.ts +23 -0
- package/src/testing/index.ts +1 -1
- package/templates/scaffold/app/backend/package.json +1 -3
- package/templates/scaffold/app/backend/seed/exec.mjs +7 -5
- package/templates/scaffold/app/backend/src/generated/kysely-tailordb.ts +0 -11
- package/templates/scaffold/module/seed/index.ts +19 -0
- /package/schemas/{app-compose → app}/actors.yml +0 -0
- /package/schemas/{app-compose → app}/business-flow.yml +0 -0
- /package/schemas/{app-compose → app}/requirements.yml +0 -0
- /package/schemas/{app-compose → app}/resolver.yml +0 -0
- /package/schemas/{app-compose → app}/screen.yml +0 -0
- /package/schemas/{app-compose → app}/story.yml +0 -0
- /package/src/modules/{purchase → inventory/command}/.gitkeep +0 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Query Doc → Test Coverage Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Query docs: {{QUERY_DOCS}}
|
|
7
|
+
Test code: {{QUERY_TEST_CODE}}
|
|
8
|
+
|
|
9
|
+
## Instructions
|
|
10
|
+
|
|
11
|
+
1. Read ALL query docs at the paths above
|
|
12
|
+
2. Read ALL test code files at the paths above
|
|
13
|
+
3. For each query doc, extract process flow branches, error scenarios, and edge cases
|
|
14
|
+
4. For each test file, extract test case descriptions and assertions
|
|
15
|
+
5. Run every parity check below against each query
|
|
16
|
+
6. Return results as JSON per the Output Format section
|
|
17
|
+
|
|
18
|
+
## Extraction: Query Docs
|
|
19
|
+
|
|
20
|
+
From each query doc, extract:
|
|
21
|
+
|
|
22
|
+
### Process Flow Branches
|
|
23
|
+
|
|
24
|
+
From the mermaid flowchart, identify each decision node and its outcomes:
|
|
25
|
+
|
|
26
|
+
- Decision: "Permission check?" → Authorized path, Unauthorized path
|
|
27
|
+
- Decision: "Entity exists?" → Found path, Not found path
|
|
28
|
+
- Decision: "Scope valid?" → Valid scope path, Invalid scope path
|
|
29
|
+
- Each terminal node = one expected test case
|
|
30
|
+
|
|
31
|
+
### Error Scenarios
|
|
32
|
+
|
|
33
|
+
From the Error Scenarios section:
|
|
34
|
+
|
|
35
|
+
- Error code + condition = one expected error test case
|
|
36
|
+
|
|
37
|
+
### Null/Empty Return Paths
|
|
38
|
+
|
|
39
|
+
From the process flow, identify "not found → return null" or "no results → return empty array" patterns:
|
|
40
|
+
|
|
41
|
+
- These need explicit test cases
|
|
42
|
+
|
|
43
|
+
### Pagination Scenarios
|
|
44
|
+
|
|
45
|
+
For paginated queries:
|
|
46
|
+
|
|
47
|
+
- Has more results → `hasNextPage: true`
|
|
48
|
+
- Last page → `hasNextPage: false`
|
|
49
|
+
- Empty results → empty items array
|
|
50
|
+
|
|
51
|
+
## Extraction: Test Code
|
|
52
|
+
|
|
53
|
+
From each test file (`query/*.test.ts`), extract:
|
|
54
|
+
|
|
55
|
+
- **Test descriptions**: `it("...")` or `test("...")` strings
|
|
56
|
+
- **Error assertions**: checks for specific error types/codes
|
|
57
|
+
- **Happy path tests**: tests that verify successful outcomes
|
|
58
|
+
- **Null/empty result tests**: tests that verify not-found or empty list handling
|
|
59
|
+
- **Authorization tests**: tests that verify permission and scope checks
|
|
60
|
+
- **Fixture usage**: which fixtures are used
|
|
61
|
+
|
|
62
|
+
See [testing.md](testing.md) for canonical testing patterns.
|
|
63
|
+
|
|
64
|
+
## Parity Checks
|
|
65
|
+
|
|
66
|
+
For each query:
|
|
67
|
+
|
|
68
|
+
| Check ID | Question |
|
|
69
|
+
| ----------------------- | ------------------------------------------------------------ |
|
|
70
|
+
| process_flow_coverage | Does each branch in process flow have a test case? |
|
|
71
|
+
| error_scenario_tests | Does each documented error scenario have a test assertion? |
|
|
72
|
+
| happy_path_tests | Are success paths tested? |
|
|
73
|
+
| null_empty_result_tests | If doc shows "not found → null" or "empty → []", is tested? |
|
|
74
|
+
| authorization_tests | Are permission and scope check paths tested? |
|
|
75
|
+
| pagination_tests | If doc describes pagination, are boundary cases tested? |
|
|
76
|
+
|
|
77
|
+
### How to Check
|
|
78
|
+
|
|
79
|
+
1. Count process flow branches from query doc flowchart
|
|
80
|
+
2. Count test cases in corresponding test file
|
|
81
|
+
3. Map each branch to a test case by description/assertion
|
|
82
|
+
4. Identify any branches without corresponding tests
|
|
83
|
+
|
|
84
|
+
## Common Gap Patterns
|
|
85
|
+
|
|
86
|
+
- **Uncovered process branches**: Flowchart branch has no test
|
|
87
|
+
- **Missing error tests**: Error scenario has no assertion
|
|
88
|
+
- **Missing null/empty tests**: "Not found → null" path untested
|
|
89
|
+
- **Missing authorization tests**: Permission or scope check untested
|
|
90
|
+
- **Missing pagination edge cases**: hasNextPage boundary untested
|
|
91
|
+
- **Missing filter combination tests**: Search queries with multiple filters untested
|
|
92
|
+
- **Test without doc branch**: Test exists but doesn't map to documented flow (potential doc gap)
|
|
93
|
+
|
|
94
|
+
## Output Format
|
|
95
|
+
|
|
96
|
+
Return a JSON object:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"check_type": "query-doc-test-parity",
|
|
101
|
+
"module": "{{MODULE_NAME}}",
|
|
102
|
+
"gaps": [...],
|
|
103
|
+
"inconsistencies": [...],
|
|
104
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Query Error Implementation Parity Check
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
Module: {{MODULE_NAME}}
|
|
6
|
+
Query docs: {{QUERY_DOCS}}
|
|
7
|
+
Error definitions: {{ERROR_DEFS}}
|
|
8
|
+
Query code: {{QUERY_CODE}}
|
|
9
|
+
Test code: {{QUERY_TEST_CODE}}
|
|
10
|
+
|
|
11
|
+
## Instructions
|
|
12
|
+
|
|
13
|
+
1. Read ALL query docs at the paths above
|
|
14
|
+
2. Read the error definitions file at the path above
|
|
15
|
+
3. Read ALL query code files at the paths above
|
|
16
|
+
4. Read ALL test code files at the paths above
|
|
17
|
+
5. For each documented error scenario, trace through generated class → query return → test assertion
|
|
18
|
+
6. Run every parity check below
|
|
19
|
+
7. Return results as JSON per the Output Format section
|
|
20
|
+
|
|
21
|
+
## Extraction: Query Docs
|
|
22
|
+
|
|
23
|
+
From each query doc's Error Scenarios section, extract:
|
|
24
|
+
|
|
25
|
+
- **Error code**: e.g. `INSUFFICIENT_PERMISSION`, `INVALID_SCOPE`
|
|
26
|
+
- **Condition**: when this error is returned
|
|
27
|
+
- **Expected class name**: derived from error code (PascalCase + `Error` suffix)
|
|
28
|
+
|
|
29
|
+
## Extraction: Error Definitions
|
|
30
|
+
|
|
31
|
+
From `lib/errors.generated.ts`, extract:
|
|
32
|
+
|
|
33
|
+
- **Error class names**: exported error classes
|
|
34
|
+
- **Error codes**: the code constant in each class
|
|
35
|
+
- **Error message patterns**: message templates
|
|
36
|
+
|
|
37
|
+
See [errors.md](errors.md) for error generation patterns.
|
|
38
|
+
|
|
39
|
+
## Extraction: Query Code
|
|
40
|
+
|
|
41
|
+
From each query file (`query/*.ts`, excluding `*.test.ts` and `*.generated.ts`), extract:
|
|
42
|
+
|
|
43
|
+
- **Error imports**: which error classes are imported from `../lib/errors.generated`
|
|
44
|
+
- **Error returns**: `return err(new XError(...))` statements
|
|
45
|
+
- **Error codes used**: which error codes appear in the code
|
|
46
|
+
- **Permission checks**: `requirePermission(ctx, ...)` calls that return errors
|
|
47
|
+
- **Scope checks**: scope authorization checks that return errors
|
|
48
|
+
|
|
49
|
+
## Extraction: Test Code
|
|
50
|
+
|
|
51
|
+
From each test file (`query/*.test.ts`), extract:
|
|
52
|
+
|
|
53
|
+
- **Error assertions**: tests that check for specific error types or codes
|
|
54
|
+
- **Error test descriptions**: test names that reference error scenarios
|
|
55
|
+
- **Authorization test cases**: tests verifying permission/scope rejections
|
|
56
|
+
|
|
57
|
+
## Parity Checks
|
|
58
|
+
|
|
59
|
+
For each error scenario documented in query docs:
|
|
60
|
+
|
|
61
|
+
| Check ID | Question |
|
|
62
|
+
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
63
|
+
| error_class_generated | Does the error class exist in `errors.generated.ts`? |
|
|
64
|
+
| error_code_accuracy | Does the generated error code equal `{MODULE_PREFIX}_{DOC_CODE}`? The generator prefixes doc codes with the module name in UPPER_SNAKE_CASE. |
|
|
65
|
+
| error_returned | Does the query code return this error via `err(new XError(...))`? |
|
|
66
|
+
| error_import | Does the query code import the error class from `errors.generated`? |
|
|
67
|
+
| error_test_exists | Does a test case assert this error scenario? |
|
|
68
|
+
|
|
69
|
+
### How to Check
|
|
70
|
+
|
|
71
|
+
1. List all error codes from query docs
|
|
72
|
+
2. Verify each has a generated class in `errors.generated.ts`
|
|
73
|
+
3. Check query code imports and returns the error
|
|
74
|
+
4. Check test file has an assertion for this error
|
|
75
|
+
|
|
76
|
+
## Common Gap Patterns
|
|
77
|
+
|
|
78
|
+
- **Missing error class**: Error code in doc but no generated class (re-run `erp-kit module generate code -p <path>`)
|
|
79
|
+
- **Error not returned**: Generated class exists but query code doesn't return it
|
|
80
|
+
- **Error not imported**: Query uses inline error instead of generated class
|
|
81
|
+
- **Missing error test**: Error is returned in code but no test asserts it
|
|
82
|
+
- **Error code mismatch**: Doc code differs from generated/code code
|
|
83
|
+
- **Missing permission error**: Doc requires permission but no `requirePermission` call in code
|
|
84
|
+
- **Missing scope error**: Doc describes scope restriction but no scope check in code
|
|
85
|
+
|
|
86
|
+
## Output Format
|
|
87
|
+
|
|
88
|
+
Return a JSON object:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"check_type": "query-error-implementation-parity",
|
|
93
|
+
"module": "{{MODULE_NAME}}",
|
|
94
|
+
"gaps": [...],
|
|
95
|
+
"inconsistencies": [...],
|
|
96
|
+
"summary": { "total_checks": N, "passed": N, "failed": N, "skipped": N }
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
See [impl-parity-report-format.md](impl-parity-report-format.md) for field definitions.
|
|
@@ -5,6 +5,7 @@ import { runCheck } from "../check";
|
|
|
5
5
|
import { runSyncCheck, formatSyncCheckReport } from "../sync-check";
|
|
6
6
|
import { runGenerateDoc, APP_DOC_TYPES, type DocType } from "../generate-doc";
|
|
7
7
|
import { runGenerateAppCode } from "../../generator/generate-app-code";
|
|
8
|
+
import { runGenerateSeed } from "../../generator/generate-seed";
|
|
8
9
|
import { runInitAppWithReadme } from "../init-module";
|
|
9
10
|
import { executeCommand, success, silentFailure } from "../lib/command-result";
|
|
10
11
|
|
|
@@ -13,7 +14,7 @@ const cwd = process.cwd();
|
|
|
13
14
|
const pathArgs = z.object({
|
|
14
15
|
path: arg(z.string(), {
|
|
15
16
|
alias: "p",
|
|
16
|
-
description: "Path to app
|
|
17
|
+
description: "Path to app directory",
|
|
17
18
|
}),
|
|
18
19
|
});
|
|
19
20
|
|
|
@@ -97,18 +98,32 @@ const codeCommand = defineCommand({
|
|
|
97
98
|
},
|
|
98
99
|
});
|
|
99
100
|
|
|
101
|
+
const seedCommand = defineCommand({
|
|
102
|
+
name: "seed",
|
|
103
|
+
description: "Generate seed data from module defaults",
|
|
104
|
+
args: pathArgs,
|
|
105
|
+
run: (args) => {
|
|
106
|
+
return executeCommand(() => {
|
|
107
|
+
const appPath = path.resolve(cwd, args.path);
|
|
108
|
+
const exitCode = runGenerateSeed(appPath);
|
|
109
|
+
return exitCode === 0 ? success() : silentFailure(exitCode);
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
|
|
100
114
|
const generateCommand = defineCommand({
|
|
101
115
|
name: "generate",
|
|
102
|
-
description: "Generate docs and
|
|
116
|
+
description: "Generate docs, code, and seed data for an app",
|
|
103
117
|
subCommands: {
|
|
104
118
|
doc: docCommand,
|
|
105
119
|
code: codeCommand,
|
|
120
|
+
seed: seedCommand,
|
|
106
121
|
},
|
|
107
122
|
});
|
|
108
123
|
|
|
109
124
|
export const appCommand = defineCommand({
|
|
110
125
|
name: "app",
|
|
111
|
-
description: "App
|
|
126
|
+
description: "App management",
|
|
112
127
|
subCommands: {
|
|
113
128
|
check: checkCommand,
|
|
114
129
|
"sync-check": syncCheckCommand,
|
|
@@ -13,7 +13,7 @@ describe("buildCheckTargets", () => {
|
|
|
13
13
|
]);
|
|
14
14
|
});
|
|
15
15
|
|
|
16
|
-
it("generates app
|
|
16
|
+
it("generates app targets when appRoot is set", () => {
|
|
17
17
|
const targets = buildCheckTargets({ modulesRoot: undefined, appRoot: "apps" });
|
|
18
18
|
expect(targets[0].glob).toBe("apps/[a-zA-Z]*/README.md");
|
|
19
19
|
expect(targets).toHaveLength(6);
|
|
@@ -4,7 +4,6 @@ import { PACKAGE_ROOT } from "../../util";
|
|
|
4
4
|
import { MODULE_PATHS } from "../lib/paths";
|
|
5
5
|
|
|
6
6
|
const MODULES_DIR = join(PACKAGE_ROOT, "src", "modules");
|
|
7
|
-
const EXCLUDED_DIRS = new Set(["shared", "testing"]);
|
|
8
7
|
|
|
9
8
|
const DOC_TYPE_MAP: Record<string, string> = {
|
|
10
9
|
command: MODULE_PATHS.docs.commands,
|
|
@@ -32,7 +31,7 @@ export function runDocModule(
|
|
|
32
31
|
docName?: string,
|
|
33
32
|
format = "text",
|
|
34
33
|
): number {
|
|
35
|
-
if (!existsSync(MODULES_DIR)
|
|
34
|
+
if (!existsSync(MODULES_DIR)) {
|
|
36
35
|
console.error(`Module not found: ${moduleName}`);
|
|
37
36
|
return 1;
|
|
38
37
|
}
|
|
@@ -41,7 +40,7 @@ export function runDocModule(
|
|
|
41
40
|
if (!existsSync(modDir)) {
|
|
42
41
|
console.error(`Module not found: ${moduleName}`);
|
|
43
42
|
const available = readdirSync(MODULES_DIR, { withFileTypes: true })
|
|
44
|
-
.filter((d) => d.isDirectory()
|
|
43
|
+
.filter((d) => d.isDirectory())
|
|
45
44
|
.map((d) => d.name)
|
|
46
45
|
.sort();
|
|
47
46
|
console.error(`Available modules: ${available.join(", ")}`);
|
|
@@ -22,13 +22,6 @@ describe("getModuleOverviews", () => {
|
|
|
22
22
|
expect(primitives!.dependencies).toEqual([]);
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
it("excludes shared and testing directories", () => {
|
|
26
|
-
const modules = getModuleOverviews();
|
|
27
|
-
const names = modules.map((m) => m.name);
|
|
28
|
-
expect(names).not.toContain("shared");
|
|
29
|
-
expect(names).not.toContain("testing");
|
|
30
|
-
});
|
|
31
|
-
|
|
32
25
|
it("returns modules in alphabetical order", () => {
|
|
33
26
|
const modules = getModuleOverviews();
|
|
34
27
|
const names = modules.map((m) => m.name);
|
|
@@ -4,7 +4,6 @@ import { PACKAGE_ROOT } from "../../util";
|
|
|
4
4
|
import { MODULE_PATHS } from "../lib/paths";
|
|
5
5
|
|
|
6
6
|
const MODULES_DIR = join(PACKAGE_ROOT, "src", "modules");
|
|
7
|
-
const EXCLUDED_DIRS = new Set(["shared", "testing"]);
|
|
8
7
|
|
|
9
8
|
interface ModuleOverview {
|
|
10
9
|
name: string;
|
|
@@ -46,7 +45,7 @@ function extractDependencies(readmePath: string): string[] {
|
|
|
46
45
|
export function getModuleOverviews(): ModuleOverview[] {
|
|
47
46
|
if (!existsSync(MODULES_DIR)) return [];
|
|
48
47
|
return readdirSync(MODULES_DIR, { withFileTypes: true })
|
|
49
|
-
.filter((d) => d.isDirectory()
|
|
48
|
+
.filter((d) => d.isDirectory())
|
|
50
49
|
.map((d) => {
|
|
51
50
|
const modDir = join(MODULES_DIR, d.name);
|
|
52
51
|
const readmePath = join(modDir, "README.md");
|
|
@@ -4,7 +4,6 @@ import { PACKAGE_ROOT } from "../../util";
|
|
|
4
4
|
import { MODULE_PATHS } from "../lib/paths";
|
|
5
5
|
|
|
6
6
|
const MODULES_DIR = join(PACKAGE_ROOT, "src", "modules");
|
|
7
|
-
const EXCLUDED_DIRS = new Set(["shared", "testing"]);
|
|
8
7
|
|
|
9
8
|
const DOC_TYPE_MAP: Record<string, string> = {
|
|
10
9
|
command: MODULE_PATHS.docs.commands,
|
|
@@ -53,7 +52,7 @@ export function searchModuleDocs(query: string, typeFilter?: string): SearchResu
|
|
|
53
52
|
|
|
54
53
|
const results: SearchResult[] = [];
|
|
55
54
|
const modules = readdirSync(MODULES_DIR, { withFileTypes: true })
|
|
56
|
-
.filter((d) => d.isDirectory()
|
|
55
|
+
.filter((d) => d.isDirectory())
|
|
57
56
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
58
57
|
|
|
59
58
|
for (const mod of modules) {
|
package/src/commands/init.ts
CHANGED
|
@@ -23,6 +23,10 @@ export function runInit(cwd: string): number {
|
|
|
23
23
|
const symlink = setupSymlink(cwd);
|
|
24
24
|
if (symlink === "linked") {
|
|
25
25
|
console.log(chalk.green(" .claude/skills -> .agents/skills/ (linked)"));
|
|
26
|
+
} else if (symlink === "copied") {
|
|
27
|
+
console.log(
|
|
28
|
+
chalk.yellow(" .claude/skills (copied — re-run `erp-kit update skills` after changes)"),
|
|
29
|
+
);
|
|
26
30
|
} else if (symlink === "skipped_directory") {
|
|
27
31
|
console.log(chalk.yellow(" Skipped .claude/skills (directory exists, not a symlink)"));
|
|
28
32
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
4
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
5
5
|
import { copySkills, copyWorkflows, copyConfigs, setupSymlink } from "./distribute";
|
|
6
6
|
|
|
7
7
|
describe("copySkills", () => {
|
|
@@ -123,4 +123,35 @@ describe("setupSymlink", () => {
|
|
|
123
123
|
const result = setupSymlink(tmpDir);
|
|
124
124
|
expect(result).toBe("skipped_directory");
|
|
125
125
|
});
|
|
126
|
+
|
|
127
|
+
it("falls back to copy when symlink creation fails", () => {
|
|
128
|
+
// Populate .agents/skills with a test file so copy has something to work with
|
|
129
|
+
const agentsSkills = path.join(tmpDir, ".agents", "skills", "test-skill");
|
|
130
|
+
fs.mkdirSync(agentsSkills, { recursive: true });
|
|
131
|
+
fs.writeFileSync(path.join(agentsSkills, "SKILL.md"), "# Test");
|
|
132
|
+
|
|
133
|
+
// Simulate Windows EPERM — symlink creation fails
|
|
134
|
+
vi.spyOn(fs, "symlinkSync").mockImplementation(() => {
|
|
135
|
+
const err = new Error("EPERM: operation not permitted") as NodeJS.ErrnoException;
|
|
136
|
+
err.code = "EPERM";
|
|
137
|
+
throw err;
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
try {
|
|
141
|
+
const result = setupSymlink(tmpDir);
|
|
142
|
+
expect(result).toBe("copied");
|
|
143
|
+
|
|
144
|
+
const claudeSkills = path.join(tmpDir, ".claude", "skills");
|
|
145
|
+
expect(fs.existsSync(claudeSkills)).toBe(true);
|
|
146
|
+
expect(fs.statSync(claudeSkills).isDirectory()).toBe(true);
|
|
147
|
+
// Not a symlink — it's a real directory copy
|
|
148
|
+
expect(fs.lstatSync(claudeSkills).isSymbolicLink()).toBe(false);
|
|
149
|
+
// Content was copied
|
|
150
|
+
expect(fs.readFileSync(path.join(claudeSkills, "test-skill", "SKILL.md"), "utf-8")).toBe(
|
|
151
|
+
"# Test",
|
|
152
|
+
);
|
|
153
|
+
} finally {
|
|
154
|
+
vi.restoreAllMocks();
|
|
155
|
+
}
|
|
156
|
+
});
|
|
126
157
|
});
|
|
@@ -90,7 +90,20 @@ export function copyConfigs(cwd: string): CopyResult {
|
|
|
90
90
|
return { copied, removed: 0 };
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
export type SymlinkResult = "linked" | "already_linked" | "skipped_directory";
|
|
93
|
+
export type SymlinkResult = "linked" | "already_linked" | "skipped_directory" | "copied";
|
|
94
|
+
|
|
95
|
+
function createSymlink(target: string, linkPath: string): void {
|
|
96
|
+
const type = process.platform === "win32" ? "junction" : undefined;
|
|
97
|
+
// Junctions on Windows require absolute targets
|
|
98
|
+
const resolvedTarget =
|
|
99
|
+
type === "junction" ? path.resolve(path.dirname(linkPath), target) : target;
|
|
100
|
+
fs.symlinkSync(resolvedTarget, linkPath, type);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function copySkillsDirectory(src: string, dest: string): void {
|
|
104
|
+
if (!fs.existsSync(src)) return;
|
|
105
|
+
fs.cpSync(src, dest, { recursive: true });
|
|
106
|
+
}
|
|
94
107
|
|
|
95
108
|
export function setupSymlink(cwd: string): SymlinkResult {
|
|
96
109
|
const skillsDest = path.join(cwd, ".agents", "skills");
|
|
@@ -111,15 +124,44 @@ export function setupSymlink(cwd: string): SymlinkResult {
|
|
|
111
124
|
const current = fs.readlinkSync(claudeSkills);
|
|
112
125
|
if (current === relTarget) return "already_linked";
|
|
113
126
|
fs.unlinkSync(claudeSkills);
|
|
114
|
-
|
|
115
|
-
|
|
127
|
+
try {
|
|
128
|
+
createSymlink(relTarget, claudeSkills);
|
|
129
|
+
return "linked";
|
|
130
|
+
} catch {
|
|
131
|
+
copySkillsDirectory(skillsDest, claudeSkills);
|
|
132
|
+
return "copied";
|
|
133
|
+
}
|
|
116
134
|
}
|
|
117
135
|
return "skipped_directory";
|
|
118
136
|
}
|
|
119
137
|
|
|
120
138
|
fs.mkdirSync(path.dirname(claudeSkills), { recursive: true });
|
|
121
|
-
|
|
122
|
-
|
|
139
|
+
try {
|
|
140
|
+
createSymlink(relTarget, claudeSkills);
|
|
141
|
+
return "linked";
|
|
142
|
+
} catch {
|
|
143
|
+
copySkillsDirectory(skillsDest, claudeSkills);
|
|
144
|
+
return "copied";
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* When .claude/skills is a real directory (copy fallback on Windows),
|
|
150
|
+
* re-sync it with .agents/skills after an update.
|
|
151
|
+
*/
|
|
152
|
+
export function refreshCopiedSkills(cwd: string): boolean {
|
|
153
|
+
const claudeSkills = path.join(cwd, ".claude", "skills");
|
|
154
|
+
try {
|
|
155
|
+
const stat = fs.lstatSync(claudeSkills);
|
|
156
|
+
if (stat.isSymbolicLink() || !stat.isDirectory()) return false;
|
|
157
|
+
} catch {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
// It's a real directory — delete and re-copy from .agents/skills
|
|
161
|
+
const skillsDest = path.join(cwd, ".agents", "skills");
|
|
162
|
+
fs.rmSync(claudeSkills, { recursive: true, force: true });
|
|
163
|
+
copySkillsDirectory(skillsDest, claudeSkills);
|
|
164
|
+
return true;
|
|
123
165
|
}
|
|
124
166
|
|
|
125
167
|
export function isAlreadyInitialized(cwd: string): boolean {
|
|
@@ -190,7 +190,7 @@ describe("runSourceSyncCheck", () => {
|
|
|
190
190
|
fs.writeFileSync(path.join(resolverSrcDir, "myResolver.ts"), "export {}");
|
|
191
191
|
|
|
192
192
|
const result = await runSourceSyncCheck({ modulesRoot: "modules", appRoot: undefined }, tmpDir);
|
|
193
|
-
// Without appRoot, app
|
|
193
|
+
// Without appRoot, app patterns are not checked
|
|
194
194
|
expect(result.exitCode).toBe(0);
|
|
195
195
|
expect(result.errors).toHaveLength(0);
|
|
196
196
|
});
|
|
@@ -77,6 +77,22 @@ describe("runUpdate", () => {
|
|
|
77
77
|
expect(content).toContain("@tailor-platform/erp-kit");
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
+
it("refreshes .claude/skills when it is a copied directory (not a symlink)", () => {
|
|
81
|
+
// Simulate a prior "copied" fallback: .claude/skills is a real directory with stale content
|
|
82
|
+
const claudeSkills = path.join(tmpDir, ".claude", "skills");
|
|
83
|
+
fs.mkdirSync(path.join(claudeSkills, "erp-kit-old"), { recursive: true });
|
|
84
|
+
fs.writeFileSync(path.join(claudeSkills, "erp-kit-old", "SKILL.md"), "# Old");
|
|
85
|
+
|
|
86
|
+
runUpdate(tmpDir, ["skills"]);
|
|
87
|
+
|
|
88
|
+
// Stale skill should be gone from .claude/skills
|
|
89
|
+
expect(fs.existsSync(path.join(claudeSkills, "erp-kit-old"))).toBe(false);
|
|
90
|
+
// Current skills should be present
|
|
91
|
+
expect(
|
|
92
|
+
fs.existsSync(path.join(claudeSkills, "erp-kit-module-1-requirements", "SKILL.md")),
|
|
93
|
+
).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
|
|
80
96
|
it("never touches config files", () => {
|
|
81
97
|
const configPath = path.join(tmpDir, "license.config.json");
|
|
82
98
|
fs.writeFileSync(configPath, '{"groups": ["notice"]}');
|
package/src/commands/update.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import { copySkills, copyWorkflows } from "./lib/distribute";
|
|
2
|
+
import { copySkills, copyWorkflows, refreshCopiedSkills } from "./lib/distribute";
|
|
3
3
|
|
|
4
4
|
export const VALID_RESOURCES = ["skills", "workflows"] as const;
|
|
5
5
|
export type Resource = (typeof VALID_RESOURCES)[number];
|
|
@@ -27,6 +27,9 @@ export function runUpdate(cwd: string, resources: string[]): number {
|
|
|
27
27
|
console.log(chalk.green(` Removed ${result.removed} stale erp-kit-* skills`));
|
|
28
28
|
}
|
|
29
29
|
console.log(chalk.green(` Copied ${result.copied} skill files to .agents/skills/`));
|
|
30
|
+
if (refreshCopiedSkills(cwd)) {
|
|
31
|
+
console.log(chalk.green(` Refreshed .claude/skills/ (copy)`));
|
|
32
|
+
}
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
if (selected.has("workflows")) {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
// Static imports of internal module seed data (bundled into CLI)
|
|
5
|
+
import * as primitivesSeed from "../modules/primitives/seed";
|
|
6
|
+
|
|
7
|
+
type SeedMap = Record<string, Record<string, unknown>>;
|
|
8
|
+
|
|
9
|
+
// Module name → seed exports. Add new modules here as they gain seed data.
|
|
10
|
+
const INTERNAL_SEED: Record<string, Record<string, unknown>> = {
|
|
11
|
+
primitives: primitivesSeed,
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
function mapToJsonl(data: SeedMap): string {
|
|
15
|
+
return (
|
|
16
|
+
Object.entries(data)
|
|
17
|
+
.map(([id, row]) => JSON.stringify({ id, ...row }))
|
|
18
|
+
.join("\n") + "\n"
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function capitalize(s: string): string {
|
|
23
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Checks if a value is a seed data map: Record<string, Record<string, unknown>>.
|
|
28
|
+
* Distinguishes from ID maps (Record<string, string>) by checking nested values.
|
|
29
|
+
*/
|
|
30
|
+
function isSeedMap(value: unknown): value is SeedMap {
|
|
31
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
32
|
+
const entries = Object.entries(value as Record<string, unknown>);
|
|
33
|
+
if (entries.length === 0) return false;
|
|
34
|
+
return entries.every(([, v]) => typeof v === "object" && v !== null && !Array.isArray(v));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function runGenerateSeed(appPath: string): number {
|
|
38
|
+
const seedDir = path.join(appPath, "backend", "seed", "data");
|
|
39
|
+
fs.mkdirSync(seedDir, { recursive: true });
|
|
40
|
+
|
|
41
|
+
let written = 0;
|
|
42
|
+
let skipped = 0;
|
|
43
|
+
const modulesWithSeed: string[] = [];
|
|
44
|
+
|
|
45
|
+
for (const [moduleName, mod] of Object.entries(INTERNAL_SEED)) {
|
|
46
|
+
const entries = Object.entries(mod).filter(([, v]) => isSeedMap(v)) as [string, SeedMap][];
|
|
47
|
+
if (entries.length === 0) continue;
|
|
48
|
+
|
|
49
|
+
modulesWithSeed.push(moduleName);
|
|
50
|
+
|
|
51
|
+
for (const [exportName, data] of entries) {
|
|
52
|
+
const fileName = capitalize(exportName);
|
|
53
|
+
const filePath = path.join(seedDir, `${fileName}.jsonl`);
|
|
54
|
+
if (fs.existsSync(filePath)) {
|
|
55
|
+
console.log(` skipped ${fileName}.jsonl (already exists)`);
|
|
56
|
+
skipped++;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const rowCount = Object.keys(data).length;
|
|
60
|
+
fs.writeFileSync(filePath, mapToJsonl(data));
|
|
61
|
+
console.log(` wrote ${fileName}.jsonl (${rowCount} rows)`);
|
|
62
|
+
written++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
console.log(`\nModules with seed data: ${modulesWithSeed.join(", ") || "none"}`);
|
|
67
|
+
console.log(`Generated ${written} file(s), skipped ${skipped} existing`);
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
package/src/module.ts
CHANGED
|
@@ -43,3 +43,59 @@ export {
|
|
|
43
43
|
own as itemManagementOwn,
|
|
44
44
|
all as itemManagementAll,
|
|
45
45
|
} from "./modules/item-management/lib/permissions.generated";
|
|
46
|
+
// audit
|
|
47
|
+
export { defineModule as defineAuditModule } from "./modules/audit/module";
|
|
48
|
+
export {
|
|
49
|
+
permissions as auditPermissions,
|
|
50
|
+
own as auditOwn,
|
|
51
|
+
all as auditAll,
|
|
52
|
+
} from "./modules/audit/lib/permissions.generated";
|
|
53
|
+
// business-partner
|
|
54
|
+
export { defineModule as defineBusinessPartnerModule } from "./modules/business-partner/module";
|
|
55
|
+
export {
|
|
56
|
+
permissions as businessPartnerPermissions,
|
|
57
|
+
own as businessPartnerOwn,
|
|
58
|
+
all as businessPartnerAll,
|
|
59
|
+
} from "./modules/business-partner/lib/permissions.generated";
|
|
60
|
+
// coa-management
|
|
61
|
+
export { defineModule as defineCoaManagementModule } from "./modules/coa-management/module";
|
|
62
|
+
export {
|
|
63
|
+
permissions as coaManagementPermissions,
|
|
64
|
+
own as coaManagementOwn,
|
|
65
|
+
all as coaManagementAll,
|
|
66
|
+
} from "./modules/coa-management/lib/permissions.generated";
|
|
67
|
+
// inventory
|
|
68
|
+
export { defineModule as defineInventoryModule } from "./modules/inventory/module";
|
|
69
|
+
export {
|
|
70
|
+
permissions as inventoryPermissions,
|
|
71
|
+
own as inventoryOwn,
|
|
72
|
+
all as inventoryAll,
|
|
73
|
+
} from "./modules/inventory/lib/permissions.generated";
|
|
74
|
+
// organization
|
|
75
|
+
export { defineModule as defineOrganizationModule } from "./modules/organization/module";
|
|
76
|
+
export {
|
|
77
|
+
permissions as organizationPermissions,
|
|
78
|
+
own as organizationOwn,
|
|
79
|
+
all as organizationAll,
|
|
80
|
+
} from "./modules/organization/lib/permissions.generated";
|
|
81
|
+
// product-management
|
|
82
|
+
export { defineModule as defineProductManagementModule } from "./modules/product-management/module";
|
|
83
|
+
export {
|
|
84
|
+
permissions as productManagementPermissions,
|
|
85
|
+
own as productManagementOwn,
|
|
86
|
+
all as productManagementAll,
|
|
87
|
+
} from "./modules/product-management/lib/permissions.generated";
|
|
88
|
+
// purchase
|
|
89
|
+
export { defineModule as definePurchaseModule } from "./modules/purchase/module";
|
|
90
|
+
export {
|
|
91
|
+
permissions as purchasePermissions,
|
|
92
|
+
own as purchaseOwn,
|
|
93
|
+
all as purchaseAll,
|
|
94
|
+
} from "./modules/purchase/lib/permissions.generated";
|
|
95
|
+
// sales
|
|
96
|
+
export { defineModule as defineSalesModule } from "./modules/sales/module";
|
|
97
|
+
export {
|
|
98
|
+
permissions as salesPermissions,
|
|
99
|
+
own as salesOwn,
|
|
100
|
+
all as salesAll,
|
|
101
|
+
} from "./modules/sales/lib/permissions.generated";
|