@simplysm/sd-claude 14.0.65 → 14.0.66

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.
Files changed (227) hide show
  1. package/claude/references/sd-requirement-source-handling.md +64 -0
  2. package/claude/references/sd-simplysm14/README.md +44 -40
  3. package/claude/references/sd-simplysm14/apis/angular/README.md +95 -0
  4. package/claude/references/sd-simplysm14/apis/angular/app-structure.md +49 -0
  5. package/claude/references/sd-simplysm14/apis/angular/buttons.md +42 -0
  6. package/claude/references/sd-simplysm14/apis/angular/crud.md +35 -0
  7. package/claude/references/sd-simplysm14/apis/angular/forms.md +63 -0
  8. package/claude/references/sd-simplysm14/apis/angular/infrastructure.md +80 -0
  9. package/claude/references/sd-simplysm14/apis/angular/kanban.md +33 -0
  10. package/claude/references/sd-simplysm14/apis/angular/layout.md +41 -0
  11. package/claude/references/sd-simplysm14/apis/angular/modal.md +63 -0
  12. package/claude/references/sd-simplysm14/apis/angular/routing.md +45 -0
  13. package/claude/references/sd-simplysm14/apis/angular/select-dropdown.md +35 -0
  14. package/claude/references/sd-simplysm14/apis/angular/selection-managers.md +50 -0
  15. package/claude/references/sd-simplysm14/apis/angular/shared-data.md +42 -0
  16. package/claude/references/sd-simplysm14/apis/angular/sheet.md +52 -0
  17. package/claude/references/sd-simplysm14/apis/angular/toast.md +46 -0
  18. package/claude/references/sd-simplysm14/apis/angular/visual.md +41 -0
  19. package/claude/references/sd-simplysm14/apis/capacitor-plugin-auto-update/README.md +76 -0
  20. package/claude/references/sd-simplysm14/apis/capacitor-plugin-file-system/README.md +83 -0
  21. package/claude/references/sd-simplysm14/apis/capacitor-plugin-intent/README.md +80 -0
  22. package/claude/references/sd-simplysm14/apis/capacitor-plugin-usb-storage/README.md +39 -0
  23. package/claude/references/sd-simplysm14/apis/core-browser/README.md +112 -0
  24. package/claude/references/sd-simplysm14/apis/core-common/README.md +53 -0
  25. package/claude/references/sd-simplysm14/apis/core-common/extensions.md +123 -0
  26. package/claude/references/sd-simplysm14/apis/core-common/features.md +46 -0
  27. package/claude/references/sd-simplysm14/apis/core-common/types.md +114 -0
  28. package/claude/references/sd-simplysm14/apis/core-common/utils.md +158 -0
  29. package/claude/references/sd-simplysm14/apis/core-node/README.md +12 -0
  30. package/claude/references/sd-simplysm14/apis/core-node/consola.md +64 -0
  31. package/claude/references/sd-simplysm14/apis/core-node/cpx.md +52 -0
  32. package/claude/references/sd-simplysm14/apis/core-node/fs-watcher.md +53 -0
  33. package/claude/references/sd-simplysm14/apis/core-node/fsx.md +81 -0
  34. package/claude/references/sd-simplysm14/apis/core-node/pathx.md +55 -0
  35. package/claude/references/sd-simplysm14/apis/core-node/worker.md +111 -0
  36. package/claude/references/sd-simplysm14/apis/excel/README.md +81 -0
  37. package/claude/references/sd-simplysm14/apis/lint/README.md +80 -0
  38. package/claude/references/sd-simplysm14/apis/orm-common/README.md +33 -0
  39. package/claude/references/sd-simplysm14/apis/orm-common/db-context.md +77 -0
  40. package/claude/references/sd-simplysm14/apis/orm-common/executable.md +20 -0
  41. package/claude/references/sd-simplysm14/apis/orm-common/expr.md +92 -0
  42. package/claude/references/sd-simplysm14/apis/orm-common/queryable.md +98 -0
  43. package/claude/references/sd-simplysm14/apis/orm-common/schema-builders.md +128 -0
  44. package/claude/references/sd-simplysm14/apis/orm-node/README.md +59 -0
  45. package/claude/references/sd-simplysm14/apis/sd-claude/README.md +9 -0
  46. package/claude/references/sd-simplysm14/apis/sd-cli/README.md +50 -0
  47. package/claude/references/sd-simplysm14/apis/sd-cli/sd-config.md +155 -0
  48. package/claude/references/sd-simplysm14/apis/service-client/README.md +92 -0
  49. package/claude/references/sd-simplysm14/apis/service-common/README.md +29 -0
  50. package/claude/references/sd-simplysm14/apis/service-common/app-structure.md +63 -0
  51. package/claude/references/sd-simplysm14/apis/service-common/messages.md +56 -0
  52. package/claude/references/sd-simplysm14/apis/service-common/protocol.md +64 -0
  53. package/claude/references/sd-simplysm14/apis/service-common/service-types.md +43 -0
  54. package/claude/references/sd-simplysm14/apis/service-server/README.md +20 -0
  55. package/claude/references/sd-simplysm14/apis/service-server/auth.md +31 -0
  56. package/claude/references/sd-simplysm14/apis/service-server/builtin-services.md +47 -0
  57. package/claude/references/sd-simplysm14/apis/service-server/define-service.md +71 -0
  58. package/claude/references/sd-simplysm14/apis/service-server/internals.md +41 -0
  59. package/claude/references/sd-simplysm14/apis/service-server/server.md +66 -0
  60. package/claude/references/sd-simplysm14/apis/storage/README.md +69 -0
  61. package/claude/references/sd-simplysm14/{client-component.md → manuals/client-component.md} +133 -128
  62. package/claude/references/sd-simplysm14/manuals/client-crud.md +102 -0
  63. package/claude/references/sd-simplysm14/manuals/client-demo.md +128 -0
  64. package/claude/references/sd-simplysm14/manuals/client-rules.md +7 -0
  65. package/claude/references/sd-simplysm14/{client-setup.md → manuals/client-setup.md} +2 -2
  66. package/claude/references/sd-simplysm14/{client-tab.md → manuals/client-tab.md} +13 -11
  67. package/claude/references/sd-simplysm14/{orm-union.md → manuals/orm-union.md} +1 -1
  68. package/claude/references/sd-simplysm14/manuals/orm.md +75 -0
  69. package/claude/rules/sd-base-rules.md +172 -79
  70. package/claude/sd-check-bash.py +5 -0
  71. package/claude/sd-statusline.py +7 -12
  72. package/claude/skills/sd-commit/SKILL.md +7 -3
  73. package/claude/skills/sd-demo/SKILL.md +81 -62
  74. package/claude/skills/sd-demo/evals/fixtures/empty/.specs/260513120000_warehouse/spec.md +45 -0
  75. package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/.specs/260513120000_warehouse/spec.md +42 -0
  76. package/claude/skills/sd-demo/evals/fixtures/with-existing-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  77. package/claude/skills/sd-demo/evals/fixtures/with-master-screen/.specs/260513120000_warehouse/spec.md +45 -0
  78. package/claude/skills/sd-demo/evals/fixtures/with-master-screen/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  79. package/claude/skills/sd-demo/evals/fixtures/with-modal/.specs/260513120000_warehouse/spec.md +75 -0
  80. package/claude/skills/sd-demo/evals/fixtures/with-modal/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  81. package/claude/skills/sd-demo/evals/fixtures/with-screens/.specs/260513120000_warehouse/spec.md +45 -0
  82. package/claude/skills/sd-demo/evals/fixtures/with-screens/packages/app/src/screens/dashboard/dashboard.view.ts +33 -0
  83. package/claude/skills/sd-demo/evals/golden.jsonl +5 -3
  84. package/claude/skills/sd-dev/SKILL.md +33 -63
  85. package/claude/skills/sd-dev/evals/fixtures/case-add/package.json +13 -0
  86. package/claude/skills/sd-dev/evals/fixtures/case-add/src/index.ts +10 -0
  87. package/claude/skills/sd-dev/evals/fixtures/case-add/tests/index.test.ts +11 -0
  88. package/claude/skills/sd-dev/evals/fixtures/case-add/tsconfig.json +12 -0
  89. package/claude/skills/sd-dev/evals/fixtures/case-bug/package.json +13 -0
  90. package/claude/skills/sd-dev/evals/fixtures/case-bug/src/index.ts +10 -0
  91. package/claude/skills/sd-dev/evals/fixtures/case-bug/tests/index.test.ts +11 -0
  92. package/claude/skills/sd-dev/evals/fixtures/case-bug/tsconfig.json +12 -0
  93. package/claude/skills/sd-dev/evals/fixtures/case-modify/package.json +13 -0
  94. package/claude/skills/sd-dev/evals/fixtures/case-modify/src/index.ts +10 -0
  95. package/claude/skills/sd-dev/evals/fixtures/case-modify/tests/index.test.ts +11 -0
  96. package/claude/skills/sd-dev/evals/fixtures/case-modify/tsconfig.json +12 -0
  97. package/claude/skills/sd-dev/evals/golden.jsonl +3 -3
  98. package/claude/skills/sd-docs/SKILL.md +53 -0
  99. package/claude/skills/sd-docs/evals/fixtures/new-write/.claude/references/sd-simplysm14/README.md +7 -0
  100. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/package.json +5 -0
  101. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/src/index.ts +3 -0
  102. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/package.json +6 -0
  103. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/src/index.ts +1 -0
  104. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/package.json +5 -0
  105. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/src/index.ts +8 -0
  106. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/README.md +7 -0
  107. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/apis/foo/README.md +3 -0
  108. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/package.json +5 -0
  109. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/src/index.ts +3 -0
  110. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/package.json +6 -0
  111. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/src/index.ts +1 -0
  112. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/package.json +5 -0
  113. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/src/index.ts +8 -0
  114. package/claude/skills/sd-docs/evals/golden.jsonl +2 -0
  115. package/claude/skills/sd-docs/references/subagent-prompt.md +100 -0
  116. package/claude/skills/sd-impl/SKILL.md +125 -46
  117. package/claude/skills/sd-impl/evals/fixtures/case-new/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
  118. package/claude/skills/sd-impl/evals/fixtures/case-update/.specs/260514120000_/352/261/260/353/236/230/354/262/230/spec.md +101 -0
  119. package/claude/skills/sd-impl/evals/fixtures/case-update/src//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/250/353/215/270.txt +1 -0
  120. package/claude/skills/sd-impl/evals/fixtures/case-update/src//352/261/260/353/236/230/354/262/230//352/261/260/353/236/230/354/262/230-/353/252/251/353/241/235.txt +1 -0
  121. package/claude/skills/sd-impl/evals/golden.jsonl +2 -3
  122. package/claude/skills/sd-skill/SKILL.md +3 -3
  123. package/claude/skills/sd-skill/evals/golden.jsonl +0 -1
  124. package/claude/skills/sd-skill/references/eval-authoring.md +15 -0
  125. package/claude/skills/sd-skill/references/eval-run.md +1 -1
  126. package/claude/skills/sd-skill/references/skill-authoring.md +8 -5
  127. package/claude/skills/sd-skill/scripts/run_eval.py +39 -60
  128. package/claude/skills/sd-spec/SKILL.md +163 -105
  129. package/claude/skills/sd-spec/references/example-spec.md +585 -0
  130. package/claude/skills/sd-spec/references/spec-authoring.md +287 -0
  131. package/claude/skills/sd-spec/references/spec-md-template.md +15 -93
  132. package/claude/skills/sd-unpack/SKILL.md +7 -1
  133. package/claude/skills/sd-unpack/scripts/handlers/_common.py +10 -0
  134. package/claude/skills/sd-unpack/scripts/handlers/eml_handler.py +5 -13
  135. package/claude/skills/sd-unpack/scripts/handlers/msg_handler.py +3 -12
  136. package/claude/skills/sd-unpack/scripts/handlers/office_com.py +23 -37
  137. package/claude/skills/sd-unpack/scripts/handlers/office_worker.py +1 -4
  138. package/claude/skills/sd-unpack/scripts/handlers/pdf_handler.py +4 -13
  139. package/claude/skills/sd-unpack/scripts/unpack.py +4 -4
  140. package/claude/skills/sd-use/SKILL.md +1 -0
  141. package/claude/skills/sd-wip/SKILL.md +38 -0
  142. package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/_wip.md +3 -0
  143. package/claude/skills/sd-wip/evals/fixtures/with-artifact/projects/acct/spec.md +15 -0
  144. package/claude/skills/sd-wip/evals/fixtures/with-existing-wip/.wips/260101120000_acct.md +6 -0
  145. package/claude/skills/sd-wip/evals/fixtures/with-existing-wip-for-compact/.wips/260101120000_acct.md +14 -0
  146. package/claude/skills/sd-wip/evals/golden.jsonl +4 -0
  147. package/claude/skills/sd-wip/references/compact.md +79 -0
  148. package/package.json +1 -1
  149. package/claude/references/sd-simplysm14/orm.md +0 -11
  150. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/spec.md +0 -27
  151. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/.specs/260503143025/overview.md +0 -12
  152. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Button.tsx +0 -12
  153. package/claude/skills/sd-demo/evals/fixtures/basic-single-req/src/components/Input.tsx +0 -27
  154. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/355/231/224/353/251/264/spec.md +0 -25
  155. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/.specs/260503143025/overview.md +0 -12
  156. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/components/Input.tsx +0 -25
  157. package/claude/skills/sd-demo/evals/fixtures/mock-data-policy/src/pages/.gitkeep +0 -0
  158. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/REQ-001-RTP/354/236/205/353/240/245/355/231/224/353/251/264/spec.md +0 -19
  159. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/REQ-002-RTP/354/266/234/353/240/245/355/231/224/353/251/264/spec.md +0 -20
  160. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/.specs/260503143025/overview.md +0 -16
  161. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Button.tsx +0 -6
  162. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/components/Input.tsx +0 -15
  163. package/claude/skills/sd-demo/evals/fixtures/multi-req-domain/src/pages/.gitkeep +0 -0
  164. package/claude/skills/sd-demo/references/demo-md-template.md +0 -92
  165. package/claude/skills/sd-dev/evals/fixtures/multi-req-stop-after-spec/.docs/20260301_/352/263/240/352/260/235/354/202/254_/354/236/205/352/263/240/354/232/224/354/262/255.eml +0 -5
  166. package/claude/skills/sd-dev/evals/fixtures/multi-req-stop-after-spec/.docs/20260305_/352/263/240/352/260/235/354/202/254_/354/266/234/352/263/240/354/232/224/354/262/255.eml +0 -6
  167. package/claude/skills/sd-dev/evals/fixtures/multi-req-stop-after-spec/.docs/20260310_/352/263/240/352/260/235/354/202/254_/352/266/214/355/225/234.eml +0 -6
  168. package/claude/skills/sd-dev/evals/fixtures/single-req-auto-chain/src/lib/.gitkeep +0 -0
  169. package/claude/skills/sd-dev/evals/fixtures/start-from-plan/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/spec.md +0 -12
  170. package/claude/skills/sd-dev/evals/fixtures/start-from-plan/src/lib/.gitkeep +0 -0
  171. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/plan.md +0 -28
  172. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/spec.md +0 -14
  173. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/components/Input.tsx +0 -6
  174. package/claude/skills/sd-impl/evals/fixtures/basic-single-r/src/pages/.gitkeep +0 -0
  175. package/claude/skills/sd-impl/evals/fixtures/multi-r/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/plan.md +0 -40
  176. package/claude/skills/sd-impl/evals/fixtures/multi-r/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/spec.md +0 -13
  177. package/claude/skills/sd-impl/evals/fixtures/multi-r/src/components/Input.tsx +0 -25
  178. package/claude/skills/sd-impl/evals/fixtures/multi-r/src/pages/.gitkeep +0 -0
  179. package/claude/skills/sd-impl/evals/fixtures/with-test-file/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/plan.md +0 -26
  180. package/claude/skills/sd-impl/evals/fixtures/with-test-file/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/spec.md +0 -12
  181. package/claude/skills/sd-impl/evals/fixtures/with-test-file/src/lib/.gitkeep +0 -0
  182. package/claude/skills/sd-impl/references/impl-md-template.md +0 -87
  183. package/claude/skills/sd-impl/references/modes-and-failure.md +0 -65
  184. package/claude/skills/sd-plan/SKILL.md +0 -130
  185. package/claude/skills/sd-plan/evals/fixtures/already-implemented/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/spec.md +0 -14
  186. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/api/user.ts +0 -13
  187. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/components/Input.tsx +0 -15
  188. package/claude/skills/sd-plan/evals/fixtures/already-implemented/src/pages/UserList.tsx +0 -29
  189. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/.specs/260503143025/REQ-001-/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/270/264/352/270/211/355/221/234/354/213/234/spec.md +0 -17
  190. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/components/Input.tsx +0 -6
  191. package/claude/skills/sd-plan/evals/fixtures/basic-greenfield/src/pages/.gitkeep +0 -0
  192. package/claude/skills/sd-plan/evals/fixtures/demo-built/.specs/260503143025/DEMO-001-/352/261/260/353/236/230/354/262/230/demo.md +0 -26
  193. package/claude/skills/sd-plan/evals/fixtures/demo-built/.specs/260503143025/REQ-001-/352/261/260/353/236/230/354/262/230/353/252/251/353/241/235/355/231/224/353/251/264/spec.md +0 -15
  194. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/components/Input.tsx +0 -25
  195. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/data/mock-customer.ts +0 -16
  196. package/claude/skills/sd-plan/evals/fixtures/demo-built/src/pages/CustomerList.tsx +0 -25
  197. package/claude/skills/sd-plan/evals/golden.jsonl +0 -3
  198. package/claude/skills/sd-plan/references/plan-md-template.md +0 -138
  199. package/claude/skills/sd-spec/evals/fixtures/bulk-multi-source/.docs/20260122_/352/263/240/352/260/235/354/202/254_/354/236/205/352/263/240/354/247/200/354/213/234/354/204/234/352/260/234/354/204/240/354/232/224/354/262/255.eml +0 -20
  200. package/claude/skills/sd-spec/evals/fixtures/bulk-multi-source/.docs/20260205_/352/263/240/352/260/235/354/202/254_/354/266/234/352/263/240/355/231/224/353/251/264/352/264/200/353/240/250.eml +0 -17
  201. package/claude/skills/sd-spec/evals/fixtures/bulk-multi-source/.docs/20260301_/352/263/240/352/260/235/354/202/254_/352/266/214/355/225/234/354/262/264/352/263/204.eml +0 -18
  202. package/claude/skills/sd-spec/evals/fixtures/conflict-detection/.docs/20260317_/352/263/240/352/260/235/354/202/254_/352/270/264/352/270/211/354/262/230/353/246/254/353/260/251/354/271/250.eml +0 -17
  203. package/claude/skills/sd-spec/evals/fixtures/conflict-detection/.docs//355/232/214/354/235/230/353/214/200/353/263/270_20260320.txt +0 -13
  204. package/claude/skills/sd-spec/evals/fixtures/direct-simple/.gitkeep +0 -0
  205. package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/REQ-001-test/spec.md +0 -19
  206. package/claude/skills/sd-spec/evals/fixtures/spec-md-input/.specs/260101120000/overview.md +0 -18
  207. package/claude/skills/sd-spec/evals/golden.jsonl +0 -4
  208. package/claude/skills/sd-spec/references/overview-md-template.md +0 -89
  209. package/claude/skills/sd-spec/references/raw-input-handling.md +0 -96
  210. package/claude/skills/sd-verify/SKILL.md +0 -96
  211. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/impl.md +0 -20
  212. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/plan.md +0 -14
  213. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/.specs/260503143025/REQ-001-/355/225/240/354/235/270/352/263/204/354/202/260/spec.md +0 -12
  214. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.test.ts +0 -11
  215. package/claude/skills/sd-verify/evals/fixtures/all-satisfied/src/lib/discount.ts +0 -7
  216. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/impl.md +0 -21
  217. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/plan.md +0 -21
  218. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/.specs/260503143025/REQ-001-/354/202/254/354/232/251/354/236/220/353/252/251/353/241/235/spec.md +0 -12
  219. package/claude/skills/sd-verify/evals/fixtures/partial-mismatch/src/pages/UserList.tsx +0 -19
  220. package/claude/skills/sd-verify/evals/fixtures/tdd-only/.specs/260503143025/REQ-001-/352/270/210/354/225/241/352/262/200/354/246/235/impl.md +0 -19
  221. package/claude/skills/sd-verify/evals/fixtures/tdd-only/.specs/260503143025/REQ-001-/352/270/210/354/225/241/352/262/200/354/246/235/plan.md +0 -14
  222. package/claude/skills/sd-verify/evals/fixtures/tdd-only/.specs/260503143025/REQ-001-/352/270/210/354/225/241/352/262/200/354/246/235/spec.md +0 -12
  223. package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.test.ts +0 -10
  224. package/claude/skills/sd-verify/evals/fixtures/tdd-only/src/lib/validate-amount.ts +0 -7
  225. package/claude/skills/sd-verify/evals/golden.jsonl +0 -3
  226. package/claude/skills/sd-verify/references/verify-md-template.md +0 -99
  227. /package/claude/skills/{sd-demo/evals/fixtures/basic-single-req/src/pages → sd-wip/evals/fixtures/empty}/.gitkeep +0 -0
@@ -0,0 +1,585 @@
1
+ # WMS 요구 분석서 (예시)
2
+
3
+ > sd-spec 스킬이 산출하는 `spec.md` 의 풀 example.
4
+ > 가상의 WMS 시나리오 — 박스 단위 Location 관리 + ERP 단방향 통보.
5
+ > 시나리오 일자 = 2026-04-01 (사용자 확정 시작일 가정).
6
+
7
+ ## 1. 개요
8
+
9
+ ### 1.1 핵심 목적 [확정: 2026-04-01]
10
+
11
+ 박스 단위로 Location 추적, 입출고 발생을 ERP 와 연동하는 WMS
12
+
13
+ ### 1.2 주요 목표 [확정: 2026-04-01]
14
+
15
+ - 박스 입고 처리
16
+ - 박스 출고 처리
17
+ - 입출고에 의한 재고 확인
18
+ - 입출고 정보 ERP 동기화
19
+
20
+ ### 1.3 최종 사용자/이해관계자 [확정: 2026-04-01]
21
+
22
+ - 창고 작업자: 현장에서 PDA를 들고 실제로 물건을 옮기는 작업을 하는 사람
23
+ - 창고 관리자: 사무실에서 PC로 전반적인 관리나 일상 업무를 하는 사람
24
+
25
+ ### 1.4 환경/장치 [확정: 2026-04-01]
26
+
27
+ ```
28
+ ┌─────────┐ ┌─────────┐
29
+ │ PC │ │ PDA │
30
+ └────┬────┘ └────┬────┘
31
+ │ │
32
+ └───────────┬────────────┘
33
+
34
+ ┌───────────┐ 통보(단방향) ┌───────┐
35
+ │ WMS 서버 │ ───────────────► │ ERP │
36
+ └─────┬─────┘ └───────┘
37
+
38
+ ┌───────┴────────┐
39
+ ▼ ▼
40
+ ┌───────────┐ ┌───────────────┐
41
+ │ A4 Printer│ │ Label Printer │
42
+ └───────────┘ └───────────────┘
43
+ ```
44
+
45
+ - PC — 창고 관리자가 마스터·출고지시서·재고 화면에 사용
46
+ - OS: Windows 11
47
+ - Browser: Chrome 최신
48
+ - 해상도: 1920 x 1080
49
+ - PDA — 창고 작업자가 박스·Location 스캔에 사용
50
+ - Model: DS60S
51
+ - OS: Android 9
52
+ - 해상도: 360 x 568
53
+ - A4 Printer — 출고지시서 출력, Location 바코드 전체 출력(A4 다중)
54
+ - 스펙: 일반 시중의 모든 프린터
55
+ - Label Printer — Location 라벨 1매씩 출력
56
+ - Model: [OPEN]
57
+
58
+ ## 2. 업무 프로세스
59
+
60
+ ### 2.1 입고 [확정: 2026-04-01]
61
+
62
+ ```mermaid
63
+ flowchart LR
64
+ S([물건 도착]) --> T1[창고 작업자: PDA 박스 바코드 스캔]
65
+ T1 --> T2[창고 작업자: PDA Location 바코드 스캔]
66
+ T2 --> E1([입고 등록 완료])
67
+ ```
68
+
69
+ - 박스 1개는 단일 품목·단일 Location (1개 박스가 2개 Location 동시 존재 X)
70
+ - 입고 등록 = 박스의 첫 Location 적치 시점 (재입고/이동은 본 프로세스 X)
71
+ - 박스 바코드는 외부에서 이미 부착된 상태로 도착 (창고에서 발급 X)
72
+ - ERP 통보는 박스번호 기준 멱등 (재시도 가능)
73
+
74
+ 관련 섹션: [화면.입고 스캔], [화면.품목 관리], [화면.Location 관리], [화면.재고 확인]
75
+
76
+ ### 2.2 출고 [OPEN: 2026-04-01]
77
+
78
+ - 자료 위치: 회의록.md L40-50
79
+ - 대화 발췌: 사용자 — "출고 부분은 입고 끝나고 다음 단계에서 보자"
80
+
81
+ ## 3. 기타 요구사항
82
+
83
+ ### 3.1 과거 재고 조회 [확정: 2026-04-01]
84
+
85
+ 특정 일자의 재고 상태를 조회할 수 있어야 함.
86
+
87
+ 관련 섹션: [화면.재고 확인], [자동 처리.재고 스냅샷]
88
+
89
+ ## 4. 화면
90
+
91
+ | § | 분류 | 화면 | 유형 | 장치 |
92
+ | --- | -------- | ------------------ | -------- | ---- |
93
+ | 4.1 | 기준정보 | 품목 관리 | 마스터 | PC |
94
+ | 4.2 | 기준정보 | 품목 등록·편집 | 마스터 | PC |
95
+ | 4.3 | 기준정보 | Location 관리 | 마스터 | PC |
96
+ | 4.4 | 기준정보 | Location 등록·편집 | 마스터 | PC |
97
+ | 4.5 | 입고 | 입고 스캔 | 트랜잭션 | PDA |
98
+ | 4.6 | 재고 | 재고 확인 | 조회 | PC |
99
+
100
+ ### 4.1 품목 관리 (PC) [확정: 2026-04-01, 구현: 2026-04-05]
101
+
102
+ Actor: 창고 관리자
103
+ 관련 섹션: [프로세스.입고]
104
+
105
+ 기능 개요:
106
+
107
+ - 품목 마스터 CRUD (등록 / 편집 / 삭제·복구 / 엑셀 업·다운로드)
108
+
109
+ 와이어프레임:
110
+
111
+ ```
112
+ ┌──────────────────────────────────────────────────────────────────────────┐
113
+ │ 품목 관리 │
114
+ │ [조회] <필터> │
115
+ ├──────────────────────────────────────────────────────────────────────────┤
116
+ │ [등록] [선택 삭제] [선택 복구] [엑셀 업로드] [엑셀 다운로드] │
117
+ │ [화주 자료 업로드] │
118
+ │ ──────────────────────────────────────────────────────────────────────── │
119
+ │ <품목 목록 시트> │
120
+ └──────────────────────────────────────────────────────────────────────────┘
121
+ ```
122
+
123
+ 항목:
124
+
125
+ **필터**
126
+
127
+ | 항목 | 종류 | 필수 | 비고 |
128
+ | ---- | ------ | ---- | ------------------------ |
129
+ | 검색 | 텍스트 | X | 코드 또는 명칭 부분 일치 |
130
+
131
+ **품목 목록 시트** (코드까지 fixed)
132
+
133
+ | 컬럼 | 종류 | 필수 | 도메인 매핑 | 비고 |
134
+ | ----- | ---------------- | ---- | ---------------- | ----------------------------- |
135
+ | `[ ]` | 선택 체크박스 | - | - | |
136
+ | ID | 숫자 + 편집 버튼 | - | [모델.품목.ID] | 클릭 시 편집 모달 |
137
+ | 코드 | 문자 | - | [모델.품목.코드] | |
138
+ | 명칭 | 문자 | - | [모델.품목.명칭] | |
139
+
140
+ 동작:
141
+
142
+ - `[조회]` 클릭: 검색 필터 조건으로 목록 갱신
143
+ - `[등록]` 클릭: [화면.품목 등록·편집] 을 빈 폼으로 모달 띄움
144
+ - ID 버튼 클릭: [화면.품목 등록·편집] 을 해당 행 데이터로 모달 띄움
145
+ - `[선택 삭제]` 클릭: 선택된 행들의 활성 여부 false 전환 (입출고 불가)
146
+ - `[선택 복구]` 클릭: 선택된 행들의 활성 여부 true 전환
147
+ - `[엑셀 업로드]` 클릭: 엑셀 파일 선택 → 코드 기준 일괄 등록/수정
148
+ - `[엑셀 다운로드]` 클릭: 현재 검색 필터 적용된 목록을 엑셀로 내보내기
149
+ - `[화주 자료 업로드]` 클릭: [공통 정의.화주 품목 자료] 파일 선택 → 아래 양식 매핑 적용 후 코드 기준 일괄 등록/수정
150
+
151
+ 시각 규칙:
152
+
153
+ - 비활성 행: 전체 취소선 + 회색
154
+
155
+ 양식 매핑:
156
+
157
+ **업로드 양식** ([공통 정의.화주 품목 자료] → [모델.품목])
158
+
159
+ | 파일 컬럼 | 도메인 모델 | 변환·규칙 |
160
+ | ------------------ | ---------------- | -------------------------------- |
161
+ | `화주코드` + `SEQ` | [모델.품목.코드] | `<화주코드>-<SEQ>` 형식으로 합성 |
162
+ | `품목명` | [모델.품목.명칭] | 1:1 |
163
+
164
+ ### 4.2 품목 등록·편집 (PC) [확정: 2026-04-01, 구현: 2026-04-05]
165
+
166
+ Actor: 창고 관리자
167
+ 관련 섹션: [프로세스.입고]
168
+
169
+ 기능 개요:
170
+
171
+ - 품목 신규 등록 또는 기존 품목 편집 (호출하는 쪽에서 빈 폼/기존 데이터로 모달 띄움)
172
+
173
+ 와이어프레임:
174
+
175
+ ```
176
+ ┌──────────────────────────────────────┐
177
+ │ 품목 등록·편집 │
178
+ ├──────────────────────────────────────┤
179
+ │ <입력 폼> │
180
+ ├──────────────────────────────────────┤
181
+ │ [저장] [취소] │
182
+ └──────────────────────────────────────┘
183
+ ```
184
+
185
+ 항목:
186
+
187
+ **입력 폼**
188
+
189
+ | 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
190
+ | ---- | ----------- | ---- | ----------------- | ---- |
191
+ | 코드 | 텍스트 입력 | O | [모델.품목.코드] | |
192
+ | 명칭 | 텍스트 입력 | O | [모델.품목.명칭] | |
193
+
194
+ 동작:
195
+
196
+ - `[저장]` 클릭: 활성 품목 내 코드·명칭 유일성 검증 → 저장 → 모달 닫음
197
+ - `[취소]` 클릭: 변경 사항 폐기 → 모달 닫음
198
+
199
+ ### 4.3 Location 관리 (PC) [확정: 2026-04-01]
200
+
201
+ Actor: 창고 관리자
202
+ 관련 섹션: [프로세스.입고]
203
+
204
+ 기능 개요:
205
+
206
+ - Location 마스터 CRUD (등록 / 편집 / 삭제·복구 / 엑셀 업·다운로드)
207
+ - 두 가지 바코드 출력: A4 다중 + 라벨프린터 1매씩
208
+
209
+ 와이어프레임:
210
+
211
+ ```
212
+ ┌────────────────────────────────────────────────────────────────────────────────────┐
213
+ │ Location 관리 │
214
+ │ [조회] <필터> │
215
+ ├────────────────────────────────────────────────────────────────────────────────────┤
216
+ │ [등록] [선택 삭제] [선택 복구] [엑셀 업로드] [엑셀 다운로드] [A4 출력] [선택 라벨 출력]│
217
+ │ ────────────────────────────────────────────────────────────────────────────────── │
218
+ │ <Location 목록 시트> │
219
+ └────────────────────────────────────────────────────────────────────────────────────┘
220
+ ```
221
+
222
+ 항목:
223
+
224
+ **필터**
225
+
226
+ | 항목 | 종류 | 필수 | 비고 |
227
+ | ---- | ------ | ---- | -------------- |
228
+ | 검색 | 텍스트 | X | 코드 부분 일치 |
229
+
230
+ **Location 목록 시트** (코드까지 fixed)
231
+
232
+ | 컬럼 | 종류 | 필수 | 도메인 매핑 | 비고 |
233
+ | ----- | ---------------- | ---- | -------------------- | ----------------------------- |
234
+ | `[ ]` | 선택 체크박스 | - | - | |
235
+ | ID | 숫자 + 편집 버튼 | - | [모델.Location.ID] | 클릭 시 편집 모달 |
236
+ | 코드 | 문자 | - | [모델.Location.코드] | |
237
+
238
+ 동작:
239
+
240
+ - `[조회]` 클릭: 검색 필터 조건으로 목록 갱신
241
+ - `[등록]` 클릭: [화면.Location 등록·편집] 을 빈 폼으로 모달 띄움
242
+ - ID 버튼 클릭: [화면.Location 등록·편집] 을 해당 행 데이터로 모달 띄움
243
+ - `[선택 삭제]` 클릭: 선택된 행들의 활성 여부 false 전환
244
+ - `[선택 복구]` 클릭: 선택된 행들의 활성 여부 true 전환
245
+ - `[엑셀 업로드]` 클릭: 엑셀 파일 선택 → 코드 기준 일괄 등록/수정
246
+ - `[엑셀 다운로드]` 클릭: 현재 필터 적용된 목록을 엑셀로 다운로드
247
+ - `[A4 출력]` 클릭 (A4 다중):
248
+ - 절차:
249
+ 1. 선택된 Location 목록을 A4 1매에 그리드로 배치
250
+ 2. 각 칸에 [공통 정의.Location 라벨] 의 표시 항목을 인쇄
251
+ 3. PDF 다운로드 또는 직접 인쇄
252
+ - [OPEN] A4 1매당 그리드 행/열
253
+ - `[선택 라벨 출력]` 클릭 (라벨프린터):
254
+ - 절차:
255
+ 1. 선택된 Location 을 [공통 정의.Location 라벨] 규격으로 라벨프린터 1매씩 출력
256
+ 2. 다중 선택 시 선택 수만큼 연속 출력
257
+
258
+ 시각 규칙:
259
+
260
+ - 비활성 행: 전체 취소선 + 회색
261
+
262
+ ### 4.4 Location 등록·편집 (PC) [확정: 2026-04-01]
263
+
264
+ Actor: 창고 관리자
265
+ 관련 섹션: [프로세스.입고]
266
+
267
+ 기능 개요:
268
+
269
+ - Location 신규 등록 또는 기존 Location 편집 (호출하는 쪽에서 빈 폼/기존 데이터로 모달 띄움)
270
+
271
+ 와이어프레임:
272
+
273
+ ```
274
+ ┌──────────────────────────────────────┐
275
+ │ Location 등록·편집 │
276
+ ├──────────────────────────────────────┤
277
+ │ <입력 폼> │
278
+ ├──────────────────────────────────────┤
279
+ │ [저장] [취소] │
280
+ └──────────────────────────────────────┘
281
+ ```
282
+
283
+ 항목:
284
+
285
+ **입력 폼**
286
+
287
+ | 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
288
+ | ---- | ----------- | ---- | -------------------- | ----------------------- |
289
+ | 코드 | 텍스트 입력 | O | [모델.Location.코드] | 영문 대문자/숫자/하이픈 |
290
+
291
+ 동작:
292
+
293
+ - `[저장]` 클릭: 활성 Location 내 코드 유일성 검증 → 저장 → 모달 닫음
294
+ - `[취소]` 클릭: 변경 사항 폐기 → 모달 닫음
295
+
296
+ ### 4.5 입고 스캔 (PDA) [확정: 2026-04-01]
297
+
298
+ Actor: 창고 작업자
299
+ 관련 섹션: [프로세스.입고], [외부인터페이스.ERP 입고 통보]
300
+
301
+ 기능 개요:
302
+
303
+ - 박스 → Location 순서로 스캔하여 재고 등록
304
+
305
+ 와이어프레임:
306
+
307
+ ```
308
+ ┌────────────────────────┐
309
+ │ 입고 스캔 │
310
+ ├────────────────────────┤
311
+ │ <스캔 입력 폼> │
312
+ │ │
313
+ │ [ 등록 ] │
314
+ └────────────────────────┘
315
+ (360 × 568)
316
+ ```
317
+
318
+ 항목:
319
+
320
+ **스캔 입력 폼**
321
+
322
+ | 항목 | 종류 | 필수 | 도메인 매핑 | 비고 |
323
+ | ----------- | ----------- | ---- | -------------------- | -------------------------------------------------- |
324
+ | 박스 바코드 | 텍스트 입력 | O | - | PDA 스캐너 입력. 파싱 = 품목코드 + 수량 + 박스번호 |
325
+ | Location | 텍스트 입력 | O | [모델.Location.코드] | PDA 스캐너 입력 |
326
+
327
+ 동작:
328
+
329
+ - `[등록]` 클릭:
330
+ - 절차:
331
+ 1. 박스 바코드 파싱 (품목코드 / 수량 / 박스번호)
332
+ 2. 모델 존재 검증 (품목 활성 / Location 활성 / 박스번호 미중복)
333
+ 3. [모델.재고] 생성
334
+ 4. [외부인터페이스.ERP 입고 통보] 호출
335
+
336
+ ### 4.6 재고 확인 (PC) [확정: 2026-04-01]
337
+
338
+ Actor: 창고 관리자
339
+ 관련 섹션: [프로세스.입고], [기타.과거 재고 조회], [자동 처리.재고 스냅샷]
340
+
341
+ 기능 개요:
342
+
343
+ - 현재 재고: Location 별 적치된 박스 + 품목·수량 조회
344
+ - 과거 시점 재고: 특정 날짜의 스냅샷 조회
345
+
346
+ 와이어프레임:
347
+
348
+ ```
349
+ ┌──────────────────────────────────────────────────────────────────────────┐
350
+ │ 재고 확인 │
351
+ │ [조회] <필터> │
352
+ ├──────────────────────────────────────────────────────────────────────────┤
353
+ │ [엑셀 다운로드] │
354
+ │ ──────────────────────────────────────────────────────────────────────── │
355
+ │ <재고 시트> │
356
+ └──────────────────────────────────────────────────────────────────────────┘
357
+ ```
358
+
359
+ 항목:
360
+
361
+ **필터**
362
+
363
+ | 항목 | 종류 | 필수 | 비고 |
364
+ | ------------- | ------ | ---- | -------------------------------------------- |
365
+ | 기준일 | 날짜 | X | 비우면 현재. 과거 일자 입력 시 스냅샷 조회 |
366
+ | 품목 필터 | 텍스트 | X | 코드 부분 일치 |
367
+ | Location 필터 | 텍스트 | X | 코드 부분 일치 |
368
+
369
+ **재고 시트**
370
+
371
+ | 컬럼 | 종류 | 필수 | 도메인 매핑 | 비고 |
372
+ | -------- | ---- | ---- | -------------------------- | -------------- |
373
+ | Location | 문자 | - | [모델.재고.Location.코드] | |
374
+ | 박스번호 | 문자 | - | [모델.재고.박스.박스번호] | |
375
+ | 품목 | 문자 | - | [모델.재고.박스.품목.코드] | 품목 코드 표시 |
376
+ | 수량 | 숫자 | - | [모델.재고.박스.수량] | |
377
+
378
+ 동작:
379
+
380
+ - `[조회]` 클릭:
381
+ - 기준일 비어있음: 현재 [모델.재고] 조회
382
+ - 기준일 입력됨: [모델.재고 스냅샷] 에서 해당 날짜 분 조회
383
+ - 필터 조건 적용 → 결과 표시
384
+ - `[엑셀 다운로드]` 클릭: 현재 조회 결과를 엑셀로 다운로드
385
+
386
+ ## 5. 자동 처리
387
+
388
+ ### 5.1 재고 스냅샷 [확정: 2026-04-01]
389
+
390
+ ```mermaid
391
+ flowchart LR
392
+ S([매일 0시]) --> T1[현재 재고 전체 조회]
393
+ T1 --> T2[스냅샷 테이블에 날짜별 저장]
394
+ T2 --> E1([완료])
395
+ ```
396
+
397
+ 목적:
398
+
399
+ - 과거 시점 재고 조회 지원
400
+
401
+ 트리거:
402
+
403
+ - 매일 0시 정각
404
+
405
+ 처리:
406
+
407
+ - [모델.재고] 전체를 [모델.재고 스냅샷] 에 날짜별로 저장
408
+
409
+ 예외 처리:
410
+
411
+ - 스냅샷 생성 실패 시:
412
+ - 위험: 당일 분 누락 시 해당 날짜의 과거 시점 조회 불가
413
+ - 대처: 관리자 알림. 동일 일자 재실행 시 (날짜, 박스) 유일성 검증으로 중복 생성 방지
414
+ - 재시도 한계: 별도 재시도 없음 (다음 날 0시 정상 동작)
415
+
416
+ 관련 섹션: [기타.과거 재고 조회], [화면.재고 확인]
417
+
418
+ ## 6. 공통 정의
419
+
420
+ ### 6.1 용어 사전 [확정: 2026-04-01]
421
+
422
+ - 박스: 외부에서 이미 바코드(품목+수량+박스번호)가 부착된 입고 단위
423
+ - Location: 창고 내 적치 위치 ([공통 정의.Location 라벨])
424
+ - ERP 통보: 입출고 발생 시 WMS → ERP 단방향 알림
425
+ - 활성 여부: 마스터 데이터의 소프트 삭제 플래그 (true = 정상, false = 삭제 처리됨). UI 의 "삭제/복구" 액션과 매핑. 마스터에 완전 삭제(DB 레코드 제거) 없음.
426
+
427
+ ### 6.2 박스 바코드 형식 [OPEN: 2026-04-01]
428
+
429
+ - 자료 위치: 첨부B.pdf p.5 "박스 코드 체계" — 외부 송장 시스템 규격 명세
430
+ - 자료 연결 메모: 박스 코드는 외부 규격이지만 [모델.박스] 식별 키 구조와 직결 — §7 박스 확정과 함께 검토
431
+
432
+ ### 6.3 Location 라벨 [확정: 2026-04-01]
433
+
434
+ ```
435
+ ┌────────────────────────────────┐
436
+ │ │
437
+ │ [Code128 바코드: A-01-03] │
438
+ │ │
439
+ │ A-01-03 │
440
+ │ │
441
+ └────────────────────────────────┘
442
+ ```
443
+
444
+ - 표시 항목: 바코드 + Location 코드 텍스트
445
+ - 심볼로지: Code128
446
+ - 라벨 크기: 100 × 50 mm
447
+ - 라벨 재질: 유포지, 흰색 무지
448
+
449
+ ### 6.4 화주 품목 자료 [확정: 2026-04-01]
450
+
451
+ 화주(품목을 본 WMS 에 보관 위탁한 거래처)가 자기 ERP 에서 수시로 다운로드해 화주별 별도 파일로 전달한다. 신규 화주 등록 또는 화주 측 품목 마스터 변경 시점에 본 WMS 에 1회 일괄 업로드한다. 식별 키는 `화주코드 + SEQ` 2컬럼 합성.
452
+
453
+ | 컬럼 | 필수 | 설명 |
454
+ | -------- | ---- | --------------------------------------------------- |
455
+ | 화주코드 | O | 화주 ERP 의 품목 코드. 영문 대문자 + 숫자, 최대 8자 |
456
+ | SEQ | O | 같은 화주코드 내 revision 일련번호. 숫자 3자리 |
457
+ | 품목명 | O | 화주 측 명칭 |
458
+ | 단위 | X | `EA` / `BOX` 등 |
459
+
460
+ ## 7. 도메인 모델
461
+
462
+ ### 7.1 품목 [확정: 2026-04-01]
463
+
464
+ 필드:
465
+
466
+ | 필드 | 타입 | 필수 | 비고 |
467
+ | --------- | ------- | ---- | ---------------- |
468
+ | ID | 숫자 | O | 자동 부여 |
469
+ | 코드 | 문자 | O | 자유 형식, 수정 가능 |
470
+ | 명칭 | 문자 | O | |
471
+ | 활성 여부 | boolean | O | |
472
+
473
+ 키/제약:
474
+
475
+ - 식별 키: ID (자동 부여)
476
+ - 비즈니스 키: 코드 (사용자 부여, 수정 가능)
477
+ - 유일성: 활성 품목 내 코드, 명칭 각각 유일
478
+
479
+ ### 7.2 박스 [확정: 2026-04-01]
480
+
481
+ 필드:
482
+
483
+ | 필드 | 타입 | 필수 | 비고 |
484
+ | -------- | ----------- | ---- | ------------------------------------- |
485
+ | ID | 숫자 | O | 자동 부여 |
486
+ | 박스번호 | 문자 | O | [공통 정의.박스 바코드 형식] 형식 따름 |
487
+ | 품목 | 참조 - 품목 | O | |
488
+ | 수량 | 숫자 | O | |
489
+
490
+ 키/제약:
491
+
492
+ - 식별 키: ID (자동 부여)
493
+ - 비즈니스 키: 박스번호
494
+ - 박스 1개 = 단일 품목
495
+ - 유일성: 박스번호 유일
496
+
497
+ ### 7.3 Location [확정: 2026-04-01]
498
+
499
+ 필드:
500
+
501
+ | 필드 | 타입 | 필수 | 비고 |
502
+ | --------- | ------- | ---- | ------------------------------------------------------------------- |
503
+ | ID | 숫자 | O | 자동 부여 |
504
+ | 코드 | 문자 | O | 영문 대문자/숫자/하이픈. 수정 가능. 예 `A-01-03`, `ZONE1-RACK7-LV2` |
505
+ | 활성 여부 | boolean | O | |
506
+
507
+ 키/제약:
508
+
509
+ - 식별 키: ID (자동 부여)
510
+ - 비즈니스 키: 코드 (사용자 부여, 수정 가능)
511
+ - 유일성: 활성 Location 내 코드 유일
512
+
513
+ ### 7.4 재고 [확정: 2026-04-01]
514
+
515
+ 필드:
516
+
517
+ | 필드 | 타입 | 필수 | 비고 |
518
+ | -------- | --------------- | ---- | --------- |
519
+ | ID | 숫자 | O | 자동 부여 |
520
+ | 박스 | 참조 - 박스 | O | |
521
+ | Location | 참조 - Location | O | |
522
+
523
+ 키/제약:
524
+
525
+ - 식별 키: ID (자동 부여)
526
+ - 박스 1개는 동시에 1개 Location 에만 존재 (= 박스-재고 1:1)
527
+ - Location 1개에 박스 다중 가능
528
+
529
+ ### 7.5 재고 스냅샷 [확정: 2026-04-01]
530
+
531
+ 필드:
532
+
533
+ | 필드 | 타입 | 필수 | 비고 |
534
+ | -------- | --------------- | ---- | --------- |
535
+ | ID | 숫자 | O | 자동 부여 |
536
+ | 날짜 | 날짜 | O | 스냅샷 일자 |
537
+ | 박스 | 참조 - 박스 | O | |
538
+ | Location | 참조 - Location | O | |
539
+
540
+ 키/제약:
541
+
542
+ - 식별 키: ID (자동 부여)
543
+ - 비즈니스 키: (날짜, 박스) 조합 유일
544
+
545
+ ## 8. 외부 인터페이스
546
+
547
+ ### 8.1 ERP 입고 통보 [확정: 2026-04-01]
548
+
549
+ - 상대 시스템: ERP
550
+ - 방향: WMS → ERP
551
+ - 전송 방식: REST API (POST)
552
+
553
+ 자료 매핑:
554
+
555
+ | ERP 필드 | WMS 출처 |
556
+ | -------- | --------------------- |
557
+ | 품목코드 | [모델.박스.품목.코드] |
558
+ | 수량 | [모델.박스.수량] |
559
+ | 박스번호 | [모델.박스.박스번호] |
560
+ | 발생시각 | 입고 등록 시각 |
561
+
562
+ 예외 처리:
563
+
564
+ - 호출 실패 (네트워크 오류, ERP 서버 일시 다운 등):
565
+ - 위험: 단순 재시도 시 ERP 에 같은 박스가 2번 입고 등록될 수 있음 (첫 호출이 실제로는 ERP 에 도달했는데 응답만 못 받은 경우 등)
566
+ - 방지 전제: ERP 가 박스번호를 키로 사용해 이미 받은 통보는 무시하도록 구성되어야 함
567
+ - 대처: 위 전제 하에 지수 백오프로 재시도, 최대 5회
568
+ - 재시도 한계 초과: 관리자 알림 (이후 수동 확인 필요)
569
+
570
+ 관련 섹션: [화면.입고 스캔]
571
+
572
+ ## 9. 본문 외 결정사항
573
+
574
+ ### 9.1 분석 제외 항목 [확정: 2026-04-01]
575
+
576
+ - 직원 관리 사원번호 컬럼 추가 — 운영 잔손
577
+ - 재고 확인 화면 정렬 버그 — 운영 잔손
578
+
579
+ ## 10. 변경 이력
580
+
581
+ - 2026-04-01: 운영 잔손 분리 — 직원 관리 사원번호 컬럼 추가, 재고 확인 화면 정렬 버그. 분석 제외 항목으로 기록.
582
+ - 2026-04-01: 입고 분석 완료. 출고·박스 바코드 형식 보류.
583
+ - 2026-04-01: 과거 재고 조회 요구 식별 → 재고 스냅샷 모델·자동 처리 추가, 재고 확인 화면에 기준일 필터 반영.
584
+ - 2026-04-01: ERP 입고 통보 식별 → 입고 스캔 등록 후속 동작에서 호출.
585
+ - 2026-04-05: 품목 관리·품목 등록·편집 sd-impl 완료 (구현 마커 부착).