@k2works/claude-code-booster 6.1.0 → 6.3.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.
Files changed (622) hide show
  1. package/lib/assets/.claude/skills/practicing-getting-start-tdd/SKILL.md +3 -7
  2. package/lib/assets/docs/article/index.md +16 -41
  3. package/lib/assets/docs/assets/js/extra.js +5 -1
  4. package/lib/assets/docs/assets/js/mathjax.js +27 -0
  5. package/lib/assets/docs/index.md +1 -1
  6. package/lib/assets/mkdocs.yml +6 -7
  7. package/lib/assets/ops/docker/mkdoc/Dockerfile +19 -19
  8. package/lib/assets/package.json +1 -1
  9. package/package.json +1 -1
  10. package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +0 -484
  11. package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +0 -528
  12. package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +0 -546
  13. package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +0 -309
  14. package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +0 -329
  15. package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +0 -507
  16. package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +0 -307
  17. package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +0 -300
  18. package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +0 -345
  19. package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +0 -312
  20. package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +0 -295
  21. package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +0 -331
  22. package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +0 -328
  23. package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +0 -374
  24. package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +0 -165
  25. package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +0 -187
  26. package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +0 -321
  27. package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +0 -296
  28. package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +0 -295
  29. package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +0 -283
  30. package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +0 -303
  31. package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +0 -346
  32. package/lib/assets/docs/article/functional-desgin-ppp/all/index.md +0 -388
  33. package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +0 -282
  34. package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +0 -389
  35. package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +0 -393
  36. package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +0 -359
  37. package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +0 -361
  38. package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +0 -392
  39. package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +0 -538
  40. package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +0 -404
  41. package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +0 -408
  42. package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +0 -494
  43. package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +0 -575
  44. package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +0 -576
  45. package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +0 -484
  46. package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +0 -471
  47. package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +0 -334
  48. package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +0 -410
  49. package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +0 -459
  50. package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +0 -484
  51. package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +0 -748
  52. package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +0 -576
  53. package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +0 -527
  54. package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +0 -541
  55. package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +0 -241
  56. package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +0 -392
  57. package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +0 -383
  58. package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +0 -384
  59. package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +0 -204
  60. package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +0 -277
  61. package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +0 -303
  62. package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +0 -173
  63. package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +0 -177
  64. package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +0 -263
  65. package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +0 -278
  66. package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +0 -157
  67. package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +0 -185
  68. package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +0 -613
  69. package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +0 -738
  70. package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +0 -300
  71. package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +0 -429
  72. package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +0 -328
  73. package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +0 -475
  74. package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +0 -532
  75. package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +0 -296
  76. package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +0 -349
  77. package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +0 -404
  78. package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +0 -248
  79. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +0 -393
  80. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +0 -461
  81. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +0 -504
  82. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +0 -425
  83. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +0 -391
  84. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +0 -696
  85. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +0 -451
  86. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +0 -488
  87. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +0 -488
  88. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +0 -436
  89. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +0 -437
  90. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +0 -348
  91. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +0 -318
  92. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +0 -605
  93. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +0 -364
  94. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +0 -359
  95. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +0 -423
  96. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +0 -376
  97. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +0 -412
  98. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +0 -300
  99. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +0 -333
  100. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +0 -341
  101. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/index.md +0 -274
  102. package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +0 -307
  103. package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +0 -313
  104. package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +0 -371
  105. package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +0 -266
  106. package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +0 -263
  107. package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +0 -292
  108. package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +0 -404
  109. package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +0 -328
  110. package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +0 -391
  111. package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +0 -296
  112. package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +0 -312
  113. package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +0 -335
  114. package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +0 -341
  115. package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +0 -388
  116. package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +0 -186
  117. package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +0 -228
  118. package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +0 -253
  119. package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +0 -372
  120. package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +0 -447
  121. package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +0 -334
  122. package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +0 -412
  123. package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +0 -478
  124. package/lib/assets/docs/article/functional-desgin-ppp/haskell/index.md +0 -174
  125. package/lib/assets/docs/article/functional-desgin-ppp/index.md +0 -90
  126. package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +0 -459
  127. package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +0 -472
  128. package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +0 -434
  129. package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +0 -282
  130. package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +0 -256
  131. package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +0 -850
  132. package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +0 -393
  133. package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +0 -392
  134. package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +0 -348
  135. package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +0 -340
  136. package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +0 -365
  137. package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +0 -388
  138. package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +0 -370
  139. package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +0 -401
  140. package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +0 -309
  141. package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +0 -306
  142. package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +0 -313
  143. package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +0 -324
  144. package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +0 -320
  145. package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +0 -313
  146. package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +0 -345
  147. package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +0 -358
  148. package/lib/assets/docs/article/functional-desgin-ppp/rust/index.md +0 -243
  149. package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +0 -337
  150. package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +0 -357
  151. package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +0 -366
  152. package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +0 -373
  153. package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +0 -524
  154. package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +0 -566
  155. package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +0 -372
  156. package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +0 -336
  157. package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +0 -526
  158. package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +0 -450
  159. package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +0 -416
  160. package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +0 -388
  161. package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +0 -407
  162. package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +0 -485
  163. package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +0 -400
  164. package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +0 -351
  165. package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +0 -333
  166. package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +0 -739
  167. package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +0 -633
  168. package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +0 -521
  169. package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +0 -442
  170. package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +0 -697
  171. package/lib/assets/docs/article/functional-desgin-ppp/scala/index.md +0 -243
  172. package/lib/assets/docs/article/getting-start-docker-kubernetes/01-container-and-docker-basics.md +0 -341
  173. package/lib/assets/docs/article/getting-start-docker-kubernetes/02-container-deployment.md +0 -785
  174. package/lib/assets/docs/article/getting-start-docker-kubernetes/03-practical-container-build-deploy.md +0 -466
  175. package/lib/assets/docs/article/getting-start-docker-kubernetes/04-multi-container-application.md +0 -878
  176. package/lib/assets/docs/article/getting-start-docker-kubernetes/05-kubernetes-introduction.md +0 -585
  177. package/lib/assets/docs/article/getting-start-docker-kubernetes/06-kubernetes-deploy-cluster.md +0 -620
  178. package/lib/assets/docs/article/getting-start-docker-kubernetes/07-kubernetes-advanced.md +0 -621
  179. package/lib/assets/docs/article/getting-start-docker-kubernetes/08-kubernetes-packaging.md +0 -518
  180. package/lib/assets/docs/article/getting-start-docker-kubernetes/09-container-operations.md +0 -546
  181. package/lib/assets/docs/article/getting-start-docker-kubernetes/10-optimal-container-image.md +0 -640
  182. package/lib/assets/docs/article/getting-start-docker-kubernetes/11-continuous-delivery.md +0 -607
  183. package/lib/assets/docs/article/getting-start-docker-kubernetes/12-container-use-cases.md +0 -463
  184. package/lib/assets/docs/article/getting-start-docker-kubernetes/13-case-monolith-compose-vs-kustomize.md +0 -346
  185. package/lib/assets/docs/article/getting-start-docker-kubernetes/14-case-event-driven-kustomize-vs-helm.md +0 -324
  186. package/lib/assets/docs/article/getting-start-docker-kubernetes/15-case-escqrs-axon-kustomize-vs-helm.md +0 -297
  187. package/lib/assets/docs/article/getting-start-docker-kubernetes/16-case-escqrs-kafka-kustomize-vs-helm.md +0 -256
  188. package/lib/assets/docs/article/getting-start-docker-kubernetes/17-case-comparison-summary.md +0 -141
  189. package/lib/assets/docs/article/getting-start-docker-kubernetes/18-case-load-testing.md +0 -303
  190. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-a-dev-tools-setup.md +0 -274
  191. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-b-orchestration-environments.md +0 -530
  192. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-c-tips.md +0 -519
  193. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-01-comic.png +0 -0
  194. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-02-comic.png +0 -0
  195. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-03-comic.png +0 -0
  196. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-04-comic.png +0 -0
  197. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-05-comic.png +0 -0
  198. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-06-comic.png +0 -0
  199. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-07-comic.png +0 -0
  200. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-08-comic.png +0 -0
  201. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-09-comic.png +0 -0
  202. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-10-comic.png +0 -0
  203. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-11-comic.png +0 -0
  204. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-12-comic.png +0 -0
  205. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/overview-comic.png +0 -0
  206. package/lib/assets/docs/article/getting-start-docker-kubernetes/index.md +0 -82
  207. package/lib/assets/docs/article/getting-start-docker-kubernetes/outline.md +0 -220
  208. package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +0 -175
  209. package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +0 -171
  210. package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +0 -144
  211. package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +0 -97
  212. package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +0 -308
  213. package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +0 -250
  214. package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +0 -140
  215. package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +0 -139
  216. package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +0 -136
  217. package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +0 -123
  218. package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +0 -147
  219. package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +0 -170
  220. package/lib/assets/docs/article/getting-start-tdd/clojure/index.md +0 -65
  221. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +0 -241
  222. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +0 -253
  223. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +0 -211
  224. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +0 -101
  225. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +0 -265
  226. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +0 -204
  227. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +0 -223
  228. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +0 -258
  229. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +0 -183
  230. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +0 -175
  231. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +0 -201
  232. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +0 -220
  233. package/lib/assets/docs/article/getting-start-tdd/csharp/index.md +0 -83
  234. package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +0 -96
  235. package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +0 -104
  236. package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +0 -118
  237. package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +0 -105
  238. package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +0 -97
  239. package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +0 -80
  240. package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +0 -119
  241. package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +0 -117
  242. package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +0 -113
  243. package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +0 -187
  244. package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +0 -151
  245. package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +0 -154
  246. package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +0 -35
  247. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +0 -211
  248. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +0 -255
  249. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +0 -227
  250. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +0 -188
  251. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +0 -276
  252. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +0 -199
  253. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +0 -170
  254. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +0 -184
  255. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +0 -231
  256. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +0 -198
  257. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +0 -221
  258. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +0 -224
  259. package/lib/assets/docs/article/getting-start-tdd/fsharp/index.md +0 -71
  260. package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +0 -222
  261. package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +0 -311
  262. package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +0 -348
  263. package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +0 -121
  264. package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +0 -281
  265. package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +0 -242
  266. package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +0 -402
  267. package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +0 -430
  268. package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +0 -408
  269. package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +0 -234
  270. package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +0 -304
  271. package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +0 -419
  272. package/lib/assets/docs/article/getting-start-tdd/go/index.md +0 -83
  273. package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +0 -288
  274. package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +0 -346
  275. package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +0 -266
  276. package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +0 -191
  277. package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +0 -322
  278. package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +0 -318
  279. package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +0 -421
  280. package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +0 -399
  281. package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +0 -470
  282. package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +0 -443
  283. package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +0 -401
  284. package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +0 -640
  285. package/lib/assets/docs/article/getting-start-tdd/haskell/index.md +0 -49
  286. package/lib/assets/docs/article/getting-start-tdd/index.md +0 -93
  287. package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +0 -384
  288. package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +0 -358
  289. package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +0 -454
  290. package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +0 -418
  291. package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +0 -339
  292. package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +0 -299
  293. package/lib/assets/docs/article/getting-start-tdd/integration/index.md +0 -69
  294. package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +0 -243
  295. package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +0 -270
  296. package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +0 -194
  297. package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +0 -124
  298. package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +0 -391
  299. package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +0 -281
  300. package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +0 -635
  301. package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +0 -402
  302. package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +0 -319
  303. package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +0 -197
  304. package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +0 -176
  305. package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +0 -214
  306. package/lib/assets/docs/article/getting-start-tdd/java/index.md +0 -61
  307. package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +0 -253
  308. package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +0 -271
  309. package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +0 -178
  310. package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +0 -121
  311. package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +0 -323
  312. package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +0 -244
  313. package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +0 -336
  314. package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +0 -331
  315. package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +0 -294
  316. package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +0 -208
  317. package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +0 -216
  318. package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +0 -304
  319. package/lib/assets/docs/article/getting-start-tdd/node/index.md +0 -56
  320. package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +0 -268
  321. package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +0 -209
  322. package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +0 -257
  323. package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +0 -150
  324. package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +0 -419
  325. package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +0 -330
  326. package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +0 -380
  327. package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +0 -461
  328. package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +0 -468
  329. package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +0 -190
  330. package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +0 -274
  331. package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +0 -316
  332. package/lib/assets/docs/article/getting-start-tdd/php/index.md +0 -84
  333. package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +0 -210
  334. package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +0 -256
  335. package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +0 -208
  336. package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +0 -96
  337. package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +0 -283
  338. package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +0 -199
  339. package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +0 -217
  340. package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +0 -181
  341. package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +0 -139
  342. package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +0 -131
  343. package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +0 -125
  344. package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +0 -135
  345. package/lib/assets/docs/article/getting-start-tdd/python/index.md +0 -55
  346. package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +0 -240
  347. package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +0 -247
  348. package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +0 -237
  349. package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +0 -121
  350. package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +0 -296
  351. package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +0 -257
  352. package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +0 -288
  353. package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +0 -338
  354. package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +0 -205
  355. package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +0 -184
  356. package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +0 -246
  357. package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +0 -407
  358. package/lib/assets/docs/article/getting-start-tdd/ruby/index.md +0 -83
  359. package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +0 -220
  360. package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +0 -273
  361. package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +0 -242
  362. package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +0 -101
  363. package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +0 -221
  364. package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +0 -173
  365. package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +0 -151
  366. package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +0 -154
  367. package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +0 -119
  368. package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +0 -103
  369. package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +0 -114
  370. package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +0 -121
  371. package/lib/assets/docs/article/getting-start-tdd/rust/index.md +0 -83
  372. package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +0 -120
  373. package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +0 -116
  374. package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +0 -108
  375. package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +0 -132
  376. package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +0 -205
  377. package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +0 -195
  378. package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +0 -148
  379. package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +0 -115
  380. package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +0 -84
  381. package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +0 -113
  382. package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +0 -103
  383. package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +0 -101
  384. package/lib/assets/docs/article/getting-start-tdd/scala/index.md +0 -65
  385. package/lib/assets/docs/article/grokking-concurrency/all/index.md +0 -403
  386. package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +0 -563
  387. package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +0 -478
  388. package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +0 -529
  389. package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +0 -429
  390. package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +0 -519
  391. package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +0 -444
  392. package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +0 -474
  393. package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +0 -386
  394. package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +0 -106
  395. package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +0 -107
  396. package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +0 -100
  397. package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +0 -121
  398. package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +0 -122
  399. package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +0 -117
  400. package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +0 -88
  401. package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +0 -99
  402. package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +0 -119
  403. package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +0 -91
  404. package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +0 -96
  405. package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +0 -122
  406. package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +0 -100
  407. package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +0 -111
  408. package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +0 -98
  409. package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +0 -60
  410. package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +0 -83
  411. package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +0 -91
  412. package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +0 -55
  413. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +0 -79
  414. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +0 -102
  415. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +0 -93
  416. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +0 -109
  417. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +0 -103
  418. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +0 -92
  419. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +0 -120
  420. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +0 -106
  421. package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +0 -238
  422. package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +0 -95
  423. package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +0 -95
  424. package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +0 -90
  425. package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +0 -105
  426. package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +0 -98
  427. package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +0 -94
  428. package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +0 -110
  429. package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +0 -117
  430. package/lib/assets/docs/article/grokking-concurrency/index.md +0 -66
  431. package/lib/assets/docs/article/grokking-concurrency/java/index.md +0 -92
  432. package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +0 -307
  433. package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +0 -333
  434. package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +0 -220
  435. package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +0 -212
  436. package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +0 -111
  437. package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +0 -68
  438. package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +0 -100
  439. package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +0 -100
  440. package/lib/assets/docs/article/grokking-concurrency/python/index.md +0 -303
  441. package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +0 -238
  442. package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +0 -417
  443. package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +0 -226
  444. package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +0 -298
  445. package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +0 -314
  446. package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +0 -296
  447. package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +0 -313
  448. package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +0 -359
  449. package/lib/assets/docs/article/grokking-concurrency/rust/index.md +0 -260
  450. package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +0 -107
  451. package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +0 -119
  452. package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +0 -125
  453. package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +0 -174
  454. package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +0 -157
  455. package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +0 -93
  456. package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +0 -132
  457. package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +0 -154
  458. package/lib/assets/docs/article/grokking-concurrency/scala/index.md +0 -59
  459. package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +0 -77
  460. package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +0 -111
  461. package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +0 -92
  462. package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +0 -109
  463. package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +0 -118
  464. package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +0 -82
  465. package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +0 -130
  466. package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +0 -128
  467. package/lib/assets/docs/article/grokkingfp/all/index.md +0 -368
  468. package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +0 -539
  469. package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +0 -932
  470. package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +0 -1137
  471. package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +0 -1113
  472. package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +0 -1035
  473. package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +0 -794
  474. package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +0 -880
  475. package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +0 -981
  476. package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +0 -935
  477. package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +0 -879
  478. package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +0 -724
  479. package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +0 -635
  480. package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +0 -721
  481. package/lib/assets/docs/article/grokkingfp/clojure/index.md +0 -276
  482. package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +0 -676
  483. package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +0 -652
  484. package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +0 -629
  485. package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +0 -706
  486. package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +0 -760
  487. package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +0 -730
  488. package/lib/assets/docs/article/grokkingfp/csharp/index.md +0 -246
  489. package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +0 -820
  490. package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +0 -980
  491. package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +0 -990
  492. package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +0 -958
  493. package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +0 -956
  494. package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +0 -748
  495. package/lib/assets/docs/article/grokkingfp/elixir/index.md +0 -203
  496. package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +0 -721
  497. package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +0 -847
  498. package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +0 -994
  499. package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +0 -983
  500. package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +0 -1295
  501. package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +0 -1058
  502. package/lib/assets/docs/article/grokkingfp/fsharp/index.md +0 -210
  503. package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +0 -723
  504. package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +0 -970
  505. package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +0 -981
  506. package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +0 -841
  507. package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +0 -920
  508. package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +0 -931
  509. package/lib/assets/docs/article/grokkingfp/haskell/index.md +0 -234
  510. package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +0 -600
  511. package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +0 -875
  512. package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +0 -924
  513. package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +0 -887
  514. package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +0 -854
  515. package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +0 -853
  516. package/lib/assets/docs/article/grokkingfp/index.md +0 -143
  517. package/lib/assets/docs/article/grokkingfp/java/index.md +0 -211
  518. package/lib/assets/docs/article/grokkingfp/java/part-1.md +0 -657
  519. package/lib/assets/docs/article/grokkingfp/java/part-2.md +0 -684
  520. package/lib/assets/docs/article/grokkingfp/java/part-3.md +0 -681
  521. package/lib/assets/docs/article/grokkingfp/java/part-4.md +0 -780
  522. package/lib/assets/docs/article/grokkingfp/java/part-5.md +0 -968
  523. package/lib/assets/docs/article/grokkingfp/java/part-6.md +0 -1337
  524. package/lib/assets/docs/article/grokkingfp/python/index.md +0 -258
  525. package/lib/assets/docs/article/grokkingfp/python/part-1.md +0 -452
  526. package/lib/assets/docs/article/grokkingfp/python/part-2.md +0 -967
  527. package/lib/assets/docs/article/grokkingfp/python/part-3.md +0 -1013
  528. package/lib/assets/docs/article/grokkingfp/python/part-4.md +0 -774
  529. package/lib/assets/docs/article/grokkingfp/python/part-5.md +0 -756
  530. package/lib/assets/docs/article/grokkingfp/python/part-6.md +0 -870
  531. package/lib/assets/docs/article/grokkingfp/ruby/index.md +0 -330
  532. package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +0 -764
  533. package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +0 -947
  534. package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +0 -955
  535. package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +0 -930
  536. package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +0 -917
  537. package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +0 -1421
  538. package/lib/assets/docs/article/grokkingfp/rust/index.md +0 -242
  539. package/lib/assets/docs/article/grokkingfp/rust/part-1.md +0 -643
  540. package/lib/assets/docs/article/grokkingfp/rust/part-2.md +0 -1069
  541. package/lib/assets/docs/article/grokkingfp/rust/part-3.md +0 -1003
  542. package/lib/assets/docs/article/grokkingfp/rust/part-4.md +0 -582
  543. package/lib/assets/docs/article/grokkingfp/rust/part-5.md +0 -714
  544. package/lib/assets/docs/article/grokkingfp/rust/part-6.md +0 -517
  545. package/lib/assets/docs/article/grokkingfp/scala/index.md +0 -171
  546. package/lib/assets/docs/article/grokkingfp/scala/part-1.md +0 -552
  547. package/lib/assets/docs/article/grokkingfp/scala/part-2.md +0 -955
  548. package/lib/assets/docs/article/grokkingfp/scala/part-3.md +0 -928
  549. package/lib/assets/docs/article/grokkingfp/scala/part-4.md +0 -751
  550. package/lib/assets/docs/article/grokkingfp/scala/part-5.md +0 -731
  551. package/lib/assets/docs/article/grokkingfp/scala/part-6.md +0 -876
  552. package/lib/assets/docs/article/grokkingfp/typescript/index.md +0 -273
  553. package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +0 -570
  554. package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +0 -1138
  555. package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +0 -851
  556. package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +0 -1096
  557. package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +0 -726
  558. package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +0 -991
  559. package/lib/assets/docs/article/practical-database-design/index.md +0 -121
  560. package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +0 -297
  561. package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +0 -527
  562. package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +0 -566
  563. package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +0 -933
  564. package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +0 -1636
  565. package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +0 -2725
  566. package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +0 -2091
  567. package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +0 -2114
  568. package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +0 -2040
  569. package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +0 -1396
  570. package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +0 -1686
  571. package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +0 -1426
  572. package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +0 -1443
  573. package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +0 -676
  574. package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +0 -1634
  575. package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +0 -1924
  576. package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +0 -1717
  577. package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +0 -2104
  578. package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +0 -1132
  579. package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +0 -1040
  580. package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +0 -1391
  581. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +0 -1000
  582. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +0 -1309
  583. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +0 -1175
  584. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +0 -1593
  585. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +0 -1192
  586. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +0 -1025
  587. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +0 -1762
  588. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +0 -1456
  589. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +0 -1887
  590. package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +0 -974
  591. package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +0 -2078
  592. package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +0 -2448
  593. package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +0 -3670
  594. package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +0 -2925
  595. package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +0 -3114
  596. package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +0 -2706
  597. package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +0 -2552
  598. package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +0 -2188
  599. package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +0 -1200
  600. package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +0 -2109
  601. package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +0 -1041
  602. package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +0 -1618
  603. package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +0 -1462
  604. package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +0 -1301
  605. package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +0 -1479
  606. package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +0 -1707
  607. package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +0 -2343
  608. package/lib/assets/docs/article/practical-database-design/study/study2-1.md +0 -1702
  609. package/lib/assets/docs/article/practical-database-design/study/study2-2.md +0 -1356
  610. package/lib/assets/docs/article/practical-database-design/study/study2-3.md +0 -2053
  611. package/lib/assets/docs/article/practical-database-design/study/study2-4.md +0 -2238
  612. package/lib/assets/docs/article/practical-database-design/study/study2-5.md +0 -2427
  613. package/lib/assets/docs/article/practical-database-design/study/study3-1.md +0 -2214
  614. package/lib/assets/docs/article/practical-database-design/study/study3-2.md +0 -2230
  615. package/lib/assets/docs/article/practical-database-design/study/study3-3.md +0 -2262
  616. package/lib/assets/docs/article/practical-database-design/study/study3-4.md +0 -2115
  617. package/lib/assets/docs/article/practical-database-design/study/study3-5.md +0 -2516
  618. package/lib/assets/docs/article/practical-database-design/study/study4-1.md +0 -2596
  619. package/lib/assets/docs/article/practical-database-design/study/study4-2.md +0 -2084
  620. package/lib/assets/docs/article/practical-database-design/study/study4-3.md +0 -1814
  621. package/lib/assets/docs/article/practical-database-design/study/study4-4.md +0 -1904
  622. package/lib/assets/docs/article/practical-database-design/study/study4-5.md +0 -2887
@@ -1,1462 +0,0 @@
1
- ---
2
- type: Article
3
- title: "第35章:システム間連携パターン"
4
- description: "本章では、第33章で解説した境界づけられたコンテキストと、第34章で解説したメッセージングパターンを活用して、販売管理・財務会計・生産管理の3つのシステム間の具体的な連携パターンを解説します。"
5
- tags: [article, practical-database-design, part5]
6
- status: stable
7
- generated: { by: human:kakimomokuri, at: 2026-03-30T08:34:28Z }
8
- ---
9
-
10
- # 第35章:システム間連携パターン
11
-
12
- 本章では、第33章で解説した境界づけられたコンテキストと、第34章で解説したメッセージングパターンを活用して、販売管理・財務会計・生産管理の3つのシステム間の具体的な連携パターンを解説します。
13
-
14
- ---
15
-
16
- ## 35.1 販売管理と財務会計の連携
17
-
18
- 販売管理システムと財務会計システムの連携は、基幹業務システム統合の中核となる部分です。売上、請求、入金などの取引データを正確に会計仕訳へ変換することが求められます。
19
-
20
- ### 連携の全体像
21
-
22
- ```plantuml
23
- @startuml
24
- title 販売管理と財務会計の連携全体像
25
-
26
- package "販売管理システム" as sales {
27
- rectangle "受注管理" as order
28
- rectangle "出荷管理" as shipment
29
- rectangle "売上管理" as sales_mgmt
30
- rectangle "請求管理" as billing
31
- rectangle "入金管理" as receipt
32
- }
33
-
34
- package "イベントバス" as events {
35
- collections "売上イベント" as sales_event
36
- collections "請求イベント" as billing_event
37
- collections "入金イベント" as receipt_event
38
- }
39
-
40
- package "財務会計システム" as accounting {
41
- rectangle "自動仕訳" as auto_journal
42
- rectangle "仕訳管理" as journal
43
- rectangle "残高管理" as balance
44
- rectangle "決算処理" as closing
45
- }
46
-
47
- order --> shipment
48
- shipment --> sales_mgmt
49
- sales_mgmt --> billing
50
- billing --> receipt
51
-
52
- sales_mgmt --> sales_event : 売上計上
53
- billing --> billing_event : 請求確定
54
- receipt --> receipt_event : 入金確認
55
-
56
- sales_event --> auto_journal
57
- billing_event --> auto_journal
58
- receipt_event --> auto_journal
59
-
60
- auto_journal --> journal
61
- journal --> balance
62
-
63
- @enduml
64
- ```
65
-
66
- ### 売上データから仕訳データへの変換
67
-
68
- 売上計上時に発生する仕訳は、売上の種類や取引条件によって異なります。
69
-
70
- ```plantuml
71
- @startuml
72
- title 売上から仕訳への変換フロー
73
-
74
- |販売管理|
75
- start
76
- :売上計上;
77
- :売上イベント発行;
78
-
79
- |イベントバス|
80
- :売上イベント受信;
81
-
82
- |財務会計|
83
- :仕訳パターン判定;
84
- note right
85
- ・商品グループ
86
- ・顧客グループ
87
- ・取引条件
88
- end note
89
-
90
- :仕訳明細生成;
91
- note right
92
- 借方:売掛金
93
- 貸方:売上高
94
- 貸方:仮受消費税
95
- end note
96
-
97
- :貸借一致検証;
98
- :仕訳登録;
99
- :残高更新;
100
-
101
- stop
102
-
103
- @enduml
104
- ```
105
-
106
- #### 売上仕訳の基本パターン
107
-
108
- ```plantuml
109
- @startuml
110
- title 売上仕訳の基本パターン
111
-
112
- object "売上データ" as sales {
113
- 売上番号 = "SLS-2024-001"
114
- 売上日 = "2024/01/15"
115
- 顧客コード = "CUS-001"
116
- 売上金額 = 110,000円
117
- 消費税額 = 10,000円
118
- 税抜金額 = 100,000円
119
- }
120
-
121
- object "仕訳伝票" as journal {
122
- 伝票番号 = "JRN-2024-001"
123
- 起票日 = "2024/01/15"
124
- 伝票区分 = "売上仕訳"
125
- }
126
-
127
- object "借方明細" as debit {
128
- 勘定科目 = "売掛金"
129
- 金額 = 110,000円
130
- 摘要 = "CUS-001 売上"
131
- }
132
-
133
- object "貸方明細1" as credit1 {
134
- 勘定科目 = "売上高"
135
- 金額 = 100,000円
136
- 摘要 = "商品売上"
137
- }
138
-
139
- object "貸方明細2" as credit2 {
140
- 勘定科目 = "仮受消費税"
141
- 金額 = 10,000円
142
- 摘要 = "消費税10%"
143
- }
144
-
145
- sales --> journal : 変換
146
- journal --> debit
147
- journal --> credit1
148
- journal --> credit2
149
-
150
- note bottom of journal
151
- 【貸借一致の検証】
152
- 借方合計:110,000円
153
- 貸方合計:110,000円
154
- 差額:0円 ✓
155
- end note
156
-
157
- @enduml
158
- ```
159
-
160
- #### 売上仕訳パターンマスタ
161
-
162
- ```plantuml
163
- @startuml
164
- title 自動仕訳パターンマスタの構造
165
-
166
- entity "自動仕訳パターン" as pattern {
167
- *パターンID : string
168
- --
169
- *取引種別 : string
170
- 商品グループ : string
171
- 顧客グループ : string
172
- 借方科目コード : string
173
- 貸方科目コード : string
174
- 消費税科目コード : string
175
- 適用開始日 : date
176
- 適用終了日 : date
177
- }
178
-
179
- entity "勘定科目" as account {
180
- *科目コード : string
181
- --
182
- 科目名 : string
183
- BSPL区分 : string
184
- 貸借区分 : string
185
- }
186
-
187
- pattern }o--|| account : 借方科目
188
- pattern }o--|| account : 貸方科目
189
- pattern }o--|| account : 消費税科目
190
-
191
- @enduml
192
- ```
193
-
194
- <details>
195
- <summary>仕訳パターンテーブル定義</summary>
196
-
197
- ```sql
198
- -- 自動仕訳パターンマスタ
199
- CREATE TABLE 自動仕訳パターン (
200
- パターンID VARCHAR(20) PRIMARY KEY,
201
- 取引種別 VARCHAR(20) NOT NULL,
202
- 商品グループ VARCHAR(10),
203
- 顧客グループ VARCHAR(10),
204
- 借方科目コード VARCHAR(10) NOT NULL,
205
- 貸方科目コード VARCHAR(10) NOT NULL,
206
- 消費税科目コード VARCHAR(10),
207
- 適用開始日 DATE NOT NULL,
208
- 適用終了日 DATE,
209
- 作成日時 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
210
- 更新日時 TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
211
- FOREIGN KEY (借方科目コード) REFERENCES 勘定科目(科目コード),
212
- FOREIGN KEY (貸方科目コード) REFERENCES 勘定科目(科目コード),
213
- FOREIGN KEY (消費税科目コード) REFERENCES 勘定科目(科目コード)
214
- );
215
-
216
- -- サンプルデータ
217
- INSERT INTO 自動仕訳パターン VALUES
218
- ('PTN-SALES-001', '売上', NULL, NULL, '1310', '4110', '2191', '2024-01-01', NULL),
219
- ('PTN-SALES-002', '売上', 'FOOD', NULL, '1310', '4120', '2191', '2024-01-01', NULL),
220
- ('PTN-RETURN-001', '売上返品', NULL, NULL, '4110', '1310', '2191', '2024-01-01', NULL);
221
- ```
222
-
223
- </details>
224
-
225
- ### 自動仕訳パターンの適用
226
-
227
- 商品グループや顧客グループに応じて、適切な仕訳パターンを自動選択します。
228
-
229
- ```plantuml
230
- @startuml
231
- title 自動仕訳パターン判定ロジック
232
-
233
- start
234
-
235
- :売上イベント受信;
236
-
237
- :商品グループ取得;
238
- :顧客グループ取得;
239
-
240
- if (特定商品グループ?) then (yes)
241
- :商品グループ専用\nパターン検索;
242
- else (no)
243
- if (特定顧客グループ?) then (yes)
244
- :顧客グループ専用\nパターン検索;
245
- else (no)
246
- :汎用パターン検索;
247
- endif
248
- endif
249
-
250
- if (パターン見つかった?) then (yes)
251
- :仕訳明細生成;
252
- :仕訳登録;
253
- else (no)
254
- :エラー通知;
255
- :手動仕訳待ち\nキューに投入;
256
- endif
257
-
258
- stop
259
-
260
- @enduml
261
- ```
262
-
263
- <details>
264
- <summary>Java 実装例</summary>
265
-
266
- ```java
267
- // 自動仕訳パターンリポジトリ
268
- public interface JournalPatternRepository {
269
- Optional<JournalPattern> findByTransactionTypeAndGroups(
270
- TransactionType type,
271
- String productGroup,
272
- String customerGroup,
273
- LocalDate effectiveDate
274
- );
275
- }
276
-
277
- // 自動仕訳サービス
278
- @Service
279
- @Transactional
280
- public class AutoJournalService {
281
- private final JournalPatternRepository patternRepository;
282
- private final JournalRepository journalRepository;
283
- private final AccountRepository accountRepository;
284
-
285
- @EventListener
286
- public void handleSalesCompleted(SalesCompletedEvent event) {
287
- // パターン検索(優先順位:商品グループ > 顧客グループ > 汎用)
288
- JournalPattern pattern = findPattern(event);
289
-
290
- // 仕訳伝票生成
291
- JournalEntry journal = createJournalEntry(event, pattern);
292
-
293
- // 貸借一致検証
294
- validateBalance(journal);
295
-
296
- // 仕訳登録
297
- journalRepository.save(journal);
298
-
299
- // 残高更新イベント発行
300
- publishBalanceUpdateEvent(journal);
301
- }
302
-
303
- private JournalPattern findPattern(SalesCompletedEvent event) {
304
- // 1. 商品グループ + 顧客グループで検索
305
- Optional<JournalPattern> pattern = patternRepository
306
- .findByTransactionTypeAndGroups(
307
- TransactionType.SALES,
308
- event.productGroup(),
309
- event.customerGroup(),
310
- event.salesDate()
311
- );
312
-
313
- if (pattern.isPresent()) return pattern.get();
314
-
315
- // 2. 商品グループのみで検索
316
- pattern = patternRepository.findByTransactionTypeAndGroups(
317
- TransactionType.SALES,
318
- event.productGroup(),
319
- null,
320
- event.salesDate()
321
- );
322
-
323
- if (pattern.isPresent()) return pattern.get();
324
-
325
- // 3. 顧客グループのみで検索
326
- pattern = patternRepository.findByTransactionTypeAndGroups(
327
- TransactionType.SALES,
328
- null,
329
- event.customerGroup(),
330
- event.salesDate()
331
- );
332
-
333
- if (pattern.isPresent()) return pattern.get();
334
-
335
- // 4. 汎用パターンで検索
336
- return patternRepository.findByTransactionTypeAndGroups(
337
- TransactionType.SALES,
338
- null,
339
- null,
340
- event.salesDate()
341
- ).orElseThrow(() -> new PatternNotFoundException(
342
- "仕訳パターンが見つかりません: " + event.salesId()
343
- ));
344
- }
345
-
346
- private JournalEntry createJournalEntry(
347
- SalesCompletedEvent event,
348
- JournalPattern pattern) {
349
-
350
- List<JournalLine> lines = new ArrayList<>();
351
-
352
- // 借方:売掛金
353
- lines.add(JournalLine.debit(
354
- pattern.debitAccountCode(),
355
- event.totalAmount(),
356
- "売掛金計上 " + event.customerName()
357
- ));
358
-
359
- // 貸方:売上高
360
- lines.add(JournalLine.credit(
361
- pattern.creditAccountCode(),
362
- event.netAmount(),
363
- "売上計上 " + event.salesId()
364
- ));
365
-
366
- // 貸方:仮受消費税
367
- if (event.taxAmount().compareTo(BigDecimal.ZERO) > 0) {
368
- lines.add(JournalLine.credit(
369
- pattern.taxAccountCode(),
370
- event.taxAmount(),
371
- "仮受消費税"
372
- ));
373
- }
374
-
375
- return new JournalEntry(
376
- generateJournalId(),
377
- event.salesDate(),
378
- JournalType.AUTO_SALES,
379
- event.salesId(),
380
- lines
381
- );
382
- }
383
-
384
- private void validateBalance(JournalEntry journal) {
385
- BigDecimal debitTotal = journal.lines().stream()
386
- .filter(l -> l.debitCredit() == DebitCredit.DEBIT)
387
- .map(JournalLine::amount)
388
- .reduce(BigDecimal.ZERO, BigDecimal::add);
389
-
390
- BigDecimal creditTotal = journal.lines().stream()
391
- .filter(l -> l.debitCredit() == DebitCredit.CREDIT)
392
- .map(JournalLine::amount)
393
- .reduce(BigDecimal.ZERO, BigDecimal::add);
394
-
395
- if (debitTotal.compareTo(creditTotal) != 0) {
396
- throw new BalanceMismatchException(
397
- "貸借不一致: 借方=" + debitTotal + ", 貸方=" + creditTotal
398
- );
399
- }
400
- }
401
- }
402
- ```
403
-
404
- </details>
405
-
406
- ### イベント駆動による仕訳生成
407
-
408
- 販売管理システムで発生する各種イベントに応じて、自動的に仕訳を生成します。
409
-
410
- ```plantuml
411
- @startuml
412
- title 販売イベントと仕訳の対応
413
-
414
- ' 配置を制御するための設定
415
- skinparam nodesep 50
416
- skinparam ranksep 50
417
-
418
- rectangle "販売管理イベント" as sales_events {
419
- rectangle "売上計上" as sales_completed
420
- rectangle "売上返品" as sales_return
421
- rectangle "請求確定" as billing_confirmed
422
- rectangle "入金確認" as payment_received
423
- rectangle "貸倒発生" as bad_debt
424
- }
425
-
426
- rectangle "自動仕訳" as auto_journal {
427
- rectangle "売上仕訳\n生成" as sales_journal
428
- rectangle "返品仕訳\n生成" as return_journal
429
- rectangle "(請求時仕訳\nなし)" as billing_journal
430
- rectangle "入金仕訳\n生成" as payment_journal
431
- rectangle "貸倒仕訳\n生成" as bad_debt_journal
432
- }
433
-
434
- rectangle "仕訳パターン" as patterns {
435
- rectangle "==売上仕訳\n\n借方: 売掛金\n貸方: 売上高\n貸方: 仮受消費税" as p1
436
- rectangle "==返品仕訳\n\n借方: 売上高\n借方: 仮受消費税\n貸方: 売掛金" as p2
437
- rectangle "==入金仕訳\n\n借方: 普通預金\n貸方: 売掛金" as p3
438
- rectangle "==貸倒仕訳\n\n借方: 貸倒損失\n貸方: 売掛金" as p4
439
- }
440
-
441
- sales_completed --> sales_journal
442
- sales_return --> return_journal
443
- billing_confirmed --> billing_journal
444
- payment_received --> payment_journal
445
- bad_debt --> bad_debt_journal
446
-
447
- sales_journal --> p1
448
- return_journal --> p2
449
- payment_journal --> p3
450
- bad_debt_journal --> p4
451
-
452
- @enduml
453
- ```
454
-
455
- #### 入金消込と仕訳生成
456
-
457
- ```plantuml
458
- @startuml
459
- title 入金消込と仕訳生成フロー
460
-
461
- |販売管理|
462
- start
463
- :入金データ受信;
464
- :請求データ照合;
465
-
466
- if (消込対象あり?) then (yes)
467
- :入金消込処理;
468
- :消込イベント発行;
469
- else (no)
470
- :前受金計上;
471
- :前受金イベント発行;
472
- endif
473
-
474
- |財務会計|
475
- if (消込イベント?) then (yes)
476
- :入金仕訳生成;
477
- note right
478
- 借方: 普通預金
479
- 貸方: 売掛金
480
- end note
481
- else (no)
482
- :前受金仕訳生成;
483
- note right
484
- 借方: 普通預金
485
- 貸方: 前受金
486
- end note
487
- endif
488
-
489
- :仕訳登録;
490
- :売掛金残高更新;
491
-
492
- stop
493
-
494
- @enduml
495
- ```
496
-
497
- ---
498
-
499
- ## 35.2 販売管理と生産管理の連携
500
-
501
- 販売管理システムと生産管理システムの連携は、需要と供給のバランスを取るために重要です。受注情報を生産計画に反映し、在庫情報を双方向で同期します。
502
-
503
- ### 連携の全体像
504
-
505
- ```plantuml
506
- @startuml
507
- title 販売管理と生産管理の連携全体像
508
-
509
- package "販売管理システム" as sales {
510
- rectangle "受注管理" as order
511
- rectangle "出荷管理" as shipment
512
- rectangle "在庫照会" as sales_inv
513
- }
514
-
515
- package "イベントバス" as events {
516
- collections "受注イベント" as order_event
517
- collections "在庫イベント" as inv_event
518
- collections "完成イベント" as complete_event
519
- }
520
-
521
- package "生産管理システム" as production {
522
- rectangle "生産計画" as plan
523
- rectangle "MRP" as mrp
524
- rectangle "製造管理" as manufacturing
525
- rectangle "在庫管理" as prod_inv
526
- }
527
-
528
- order --> order_event : 受注確定
529
- order_event --> plan : 需要情報
530
-
531
- plan --> mrp : 所要量展開
532
- mrp --> manufacturing : 製造指示
533
-
534
- manufacturing --> complete_event : 完成報告
535
- complete_event --> prod_inv : 在庫計上
536
- prod_inv --> inv_event : 在庫更新
537
-
538
- inv_event --> sales_inv : 在庫同期
539
- sales_inv --> shipment : 引当可能数
540
-
541
- @enduml
542
- ```
543
-
544
- ### 受注情報から生産計画への連携
545
-
546
- ```plantuml
547
- @startuml
548
- title 受注から生産計画への連携フロー
549
-
550
- |販売管理|
551
- start
552
- :受注登録;
553
- :受注確定;
554
- :受注イベント発行;
555
-
556
- |生産計画|
557
- :受注イベント受信;
558
- :需要情報登録;
559
-
560
- :在庫・発注残確認;
561
- if (在庫で充足?) then (yes)
562
- :引当処理;
563
- else (no)
564
- :正味所要量計算;
565
- if (製品?) then (yes)
566
- :製造オーダ作成;
567
- else (no)
568
- :発注提案作成;
569
- endif
570
- endif
571
-
572
- :計画確定;
573
- :計画確定イベント発行;
574
-
575
- |販売管理|
576
- :納期回答更新;
577
-
578
- stop
579
-
580
- @enduml
581
- ```
582
-
583
- #### 受注イベントの構造
584
-
585
- ```plantuml
586
- @startuml
587
- title 受注イベントの構造
588
-
589
- class "OrderConfirmedEvent" as event {
590
- +eventId: String
591
- +timestamp: Instant
592
- +orderId: String
593
- +customerId: String
594
- +requestedDeliveryDate: LocalDate
595
- +priority: Priority
596
- +lines: List<OrderLineEvent>
597
- }
598
-
599
- class "OrderLineEvent" as line {
600
- +lineNumber: int
601
- +productId: String
602
- +quantity: BigDecimal
603
- +unit: String
604
- +requestedDate: LocalDate
605
- }
606
-
607
- event "1" -- "*" line
608
-
609
- note right of event
610
- 【生産計画に必要な情報】
611
- ・製品コード
612
- ・必要数量
613
- ・希望納期
614
- ・優先度
615
- end note
616
-
617
- @enduml
618
- ```
619
-
620
- <details>
621
- <summary>Java 実装例</summary>
622
-
623
- ```java
624
- // 受注確定イベント
625
- public record OrderConfirmedEvent(
626
- String eventId,
627
- Instant timestamp,
628
- String orderId,
629
- String customerId,
630
- LocalDate requestedDeliveryDate,
631
- Priority priority,
632
- List<OrderLineEvent> lines
633
- ) {
634
- public enum Priority {
635
- URGENT, // 緊急
636
- HIGH, // 高
637
- NORMAL, // 通常
638
- LOW // 低
639
- }
640
- }
641
-
642
- // 生産計画サービス
643
- @Service
644
- public class ProductionPlanningService {
645
- private final DemandRepository demandRepository;
646
- private final InventoryRepository inventoryRepository;
647
- private final MrpService mrpService;
648
-
649
- @EventListener
650
- public void handleOrderConfirmed(OrderConfirmedEvent event) {
651
- // 需要情報として登録
652
- for (OrderLineEvent line : event.lines()) {
653
- Demand demand = Demand.fromOrder(
654
- event.orderId(),
655
- line.productId(),
656
- line.quantity(),
657
- line.requestedDate(),
658
- event.priority()
659
- );
660
- demandRepository.save(demand);
661
-
662
- // 在庫引当を試行
663
- AllocationResult result = tryAllocate(demand);
664
-
665
- if (!result.isFullyAllocated()) {
666
- // MRP実行して製造/発注オーダを生成
667
- mrpService.execute(demand);
668
- }
669
- }
670
-
671
- // 納期回答イベント発行
672
- publishDeliveryDateResponse(event.orderId());
673
- }
674
-
675
- private AllocationResult tryAllocate(Demand demand) {
676
- BigDecimal available = inventoryRepository
677
- .findAvailableQuantity(demand.productId());
678
-
679
- if (available.compareTo(demand.quantity()) >= 0) {
680
- // 引当実行
681
- inventoryRepository.allocate(
682
- demand.productId(),
683
- demand.quantity(),
684
- demand.demandId()
685
- );
686
- return AllocationResult.fullyAllocated(demand.quantity());
687
- } else {
688
- // 部分引当
689
- if (available.compareTo(BigDecimal.ZERO) > 0) {
690
- inventoryRepository.allocate(
691
- demand.productId(),
692
- available,
693
- demand.demandId()
694
- );
695
- }
696
- return AllocationResult.partiallyAllocated(
697
- available,
698
- demand.quantity().subtract(available)
699
- );
700
- }
701
- }
702
- }
703
- ```
704
-
705
- </details>
706
-
707
- ### 需要予測データの共有
708
-
709
- ```plantuml
710
- @startuml
711
- title 需要予測データの共有
712
-
713
- package "販売管理" as sales {
714
- rectangle "販売実績" as sales_history
715
- rectangle "受注残" as backlog
716
- rectangle "見積案件" as quotation
717
- }
718
-
719
- package "需要予測エンジン" as forecast {
720
- rectangle "時系列分析" as time_series
721
- rectangle "季節調整" as seasonal
722
- rectangle "トレンド分析" as trend
723
- }
724
-
725
- package "生産計画" as planning {
726
- rectangle "MPS\n(基準生産計画)" as mps
727
- rectangle "MRP\n(所要量計画)" as mrp
728
- }
729
-
730
- sales_history --> forecast
731
- backlog --> forecast
732
- quotation --> forecast
733
-
734
- forecast --> mps : 需要予測データ
735
- mps --> mrp : 計画生産量
736
-
737
- note right of forecast
738
- 【予測データの内容】
739
- ・製品別月次予測数量
740
- ・予測精度(信頼区間)
741
- ・季節変動係数
742
- ・トレンド方向
743
- end note
744
-
745
- @enduml
746
- ```
747
-
748
- #### 需要予測イベント
749
-
750
- ```plantuml
751
- @startuml
752
- title 需要予測の連携サイクル
753
-
754
- |販売管理|
755
- start
756
- :月次販売実績集計;
757
- :受注残・見積集計;
758
- :需要予測更新;
759
- :予測データ発行;
760
-
761
- |生産計画|
762
- :予測データ受信;
763
- :MPS更新;
764
- note right
765
- ・月次生産計画
766
- ・安全在庫調整
767
- ・生産能力確認
768
- end note
769
-
770
- :MRP実行;
771
- :発注提案生成;
772
- :製造計画生成;
773
-
774
- if (計画変更あり?) then (yes)
775
- :計画変更通知;
776
- endif
777
-
778
- |販売管理|
779
- :納期情報更新;
780
-
781
- stop
782
-
783
- @enduml
784
- ```
785
-
786
- ### 在庫情報の同期
787
-
788
- 販売管理と生産管理の両方で在庫を管理する場合、整合性を保つ必要があります。
789
-
790
- ```plantuml
791
- @startuml
792
- title 在庫情報の同期パターン
793
-
794
- package "販売管理" as sales {
795
- database "販売在庫ビュー\n----\n在庫数\n引当数\n有効在庫数" as sales_inv
796
- }
797
-
798
- package "生産管理" as production {
799
- database "生産在庫(マスタ)\n----\n在庫数\n引当数\n品質状態\nロット情報" as prod_inv
800
- }
801
-
802
- package "同期メカニズム" as sync {
803
- collections "在庫更新\nイベント" as inv_event
804
- rectangle "在庫同期\nサービス" as sync_svc
805
- }
806
-
807
- prod_inv --> inv_event : 在庫変動時
808
- inv_event --> sync_svc
809
- sync_svc --> sales_inv : ビュー更新
810
-
811
- note bottom of sync
812
- 【同期タイミング】
813
- ・完成時(入庫)
814
- ・出荷時(出庫)
815
- ・棚卸差異発生時
816
- ・品質状態変更時
817
-
818
- 【同期内容】
819
- ・製品別在庫数
820
- ・引当可能数
821
- ・入庫予定
822
- end note
823
-
824
- @enduml
825
- ```
826
-
827
- <details>
828
- <summary>Java 実装例</summary>
829
-
830
- ```java
831
- // 在庫更新イベント
832
- public record InventoryUpdatedEvent(
833
- String eventId,
834
- Instant timestamp,
835
- String productId,
836
- String warehouseId,
837
- BigDecimal previousQuantity,
838
- BigDecimal currentQuantity,
839
- BigDecimal allocatedQuantity,
840
- UpdateReason reason
841
- ) {
842
- public enum UpdateReason {
843
- COMPLETION, // 製造完成
844
- SHIPMENT, // 出荷
845
- RECEIPT, // 入荷
846
- ADJUSTMENT, // 棚卸調整
847
- QUALITY_CHANGE // 品質状態変更
848
- }
849
-
850
- public BigDecimal getAvailableQuantity() {
851
- return currentQuantity.subtract(allocatedQuantity);
852
- }
853
- }
854
-
855
- // 在庫同期サービス
856
- @Service
857
- public class InventorySyncService {
858
- private final SalesInventoryRepository salesInventoryRepository;
859
-
860
- @EventListener
861
- public void handleInventoryUpdated(InventoryUpdatedEvent event) {
862
- // 販売在庫ビューを更新
863
- SalesInventory salesInv = salesInventoryRepository
864
- .findByProductId(event.productId())
865
- .orElse(new SalesInventory(event.productId()));
866
-
867
- salesInv.updateQuantity(
868
- event.currentQuantity(),
869
- event.allocatedQuantity()
870
- );
871
-
872
- salesInventoryRepository.save(salesInv);
873
-
874
- // 低在庫アラート
875
- if (salesInv.getAvailableQuantity()
876
- .compareTo(salesInv.getSafetyStock()) < 0) {
877
- publishLowStockAlert(event.productId());
878
- }
879
- }
880
- }
881
- ```
882
-
883
- </details>
884
-
885
- ---
886
-
887
- ## 35.3 生産管理と財務会計の連携
888
-
889
- 生産管理システムと財務会計システムの連携は、製造原価の正確な把握と会計処理に不可欠です。
890
-
891
- ### 連携の全体像
892
-
893
- ```plantuml
894
- @startuml
895
- title 生産管理と財務会計の連携全体像
896
-
897
- package "生産管理システム" as production {
898
- rectangle "購買管理" as purchase
899
- rectangle "製造管理" as manufacturing
900
- rectangle "在庫管理" as inventory
901
- rectangle "原価管理" as cost
902
- }
903
-
904
- package "イベントバス" as events {
905
- collections "検収イベント" as receipt_event
906
- collections "完成イベント" as complete_event
907
- collections "棚卸イベント" as inventory_event
908
- collections "原価イベント" as cost_event
909
- }
910
-
911
- package "財務会計システム" as accounting {
912
- rectangle "自動仕訳" as auto_journal
913
- rectangle "仕訳管理" as journal
914
- rectangle "原価会計" as cost_acc
915
- }
916
-
917
- purchase --> receipt_event : 検収確定
918
- manufacturing --> complete_event : 製造完成
919
- inventory --> inventory_event : 棚卸差異
920
- cost --> cost_event : 原価計算完了
921
-
922
- receipt_event --> auto_journal
923
- complete_event --> auto_journal
924
- inventory_event --> auto_journal
925
- cost_event --> cost_acc
926
-
927
- auto_journal --> journal
928
-
929
- @enduml
930
- ```
931
-
932
- ### 製造原価から仕訳への変換
933
-
934
- 製造原価は、材料費・労務費・製造間接費の3要素で構成されます。
935
-
936
- ```plantuml
937
- @startuml
938
- title 製造原価の構成と仕訳
939
-
940
- object "製造原価" as cost {
941
- 製造オーダ = "WO-2024-001"
942
- 製品コード = "PRD-001"
943
- 完成数量 = 100
944
- }
945
-
946
- object "材料費" as material {
947
- 直接材料費 = 50,000円
948
- 間接材料費 = 5,000円
949
- }
950
-
951
- object "労務費" as labor {
952
- 直接労務費 = 30,000円
953
- 間接労務費 = 10,000円
954
- }
955
-
956
- object "製造間接費" as overhead {
957
- 配賦額 = 15,000円
958
- }
959
-
960
- object "原価仕訳" as journal {
961
- 借方: 製品 110,000円
962
- 貸方: 仕掛品 110,000円
963
- }
964
-
965
- cost --> material
966
- cost --> labor
967
- cost --> overhead
968
-
969
- material --> journal : 55,000円
970
- labor --> journal : 40,000円
971
- overhead --> journal : 15,000円
972
-
973
- note bottom of journal
974
- 【製造完成時の仕訳】
975
- 借方:製品(資産)
976
- 貸方:仕掛品(資産)
977
-
978
- 製品原価 = 材料費 + 労務費 + 製造間接費
979
- = 55,000 + 40,000 + 15,000
980
- = 110,000円
981
- end note
982
-
983
- @enduml
984
- ```
985
-
986
- #### 製造原価計算フロー
987
-
988
- ```plantuml
989
- @startuml
990
- title 製造原価計算と仕訳生成フロー
991
-
992
- |生産管理|
993
- start
994
- :製造完成報告;
995
-
996
- :材料消費実績集計;
997
- note right
998
- ・直接材料費
999
- ・間接材料費
1000
- end note
1001
-
1002
- :工数実績集計;
1003
- note right
1004
- ・直接労務費
1005
- ・間接労務費
1006
- end note
1007
-
1008
- :製造間接費配賦;
1009
- note right
1010
- ・配賦基準で按分
1011
- (直接作業時間等)
1012
- end note
1013
-
1014
- :製品原価計算;
1015
- :完成原価イベント発行;
1016
-
1017
- |財務会計|
1018
- :原価イベント受信;
1019
- :製造完成仕訳生成;
1020
- note right
1021
- 借方: 製品
1022
- 貸方: 仕掛品
1023
- end note
1024
-
1025
- :仕訳登録;
1026
- :在庫評価額更新;
1027
-
1028
- stop
1029
-
1030
- @enduml
1031
- ```
1032
-
1033
- <details>
1034
- <summary>Java 実装例</summary>
1035
-
1036
- ```java
1037
- // 製造完成原価イベント
1038
- public record ManufacturingCompletedEvent(
1039
- String eventId,
1040
- Instant timestamp,
1041
- String workOrderId,
1042
- String productId,
1043
- BigDecimal completedQuantity,
1044
- CostBreakdown costBreakdown
1045
- ) {
1046
- public record CostBreakdown(
1047
- BigDecimal directMaterialCost,
1048
- BigDecimal indirectMaterialCost,
1049
- BigDecimal directLaborCost,
1050
- BigDecimal indirectLaborCost,
1051
- BigDecimal manufacturingOverhead
1052
- ) {
1053
- public BigDecimal getTotalCost() {
1054
- return directMaterialCost
1055
- .add(indirectMaterialCost)
1056
- .add(directLaborCost)
1057
- .add(indirectLaborCost)
1058
- .add(manufacturingOverhead);
1059
- }
1060
-
1061
- public BigDecimal getMaterialCost() {
1062
- return directMaterialCost.add(indirectMaterialCost);
1063
- }
1064
-
1065
- public BigDecimal getLaborCost() {
1066
- return directLaborCost.add(indirectLaborCost);
1067
- }
1068
- }
1069
- }
1070
-
1071
- // 製造原価仕訳サービス
1072
- @Service
1073
- public class ManufacturingJournalService {
1074
- private final JournalRepository journalRepository;
1075
-
1076
- @EventListener
1077
- public void handleManufacturingCompleted(ManufacturingCompletedEvent event) {
1078
- CostBreakdown cost = event.costBreakdown();
1079
-
1080
- List<JournalLine> lines = new ArrayList<>();
1081
-
1082
- // 借方:製品
1083
- lines.add(JournalLine.debit(
1084
- AccountCode.FINISHED_GOODS,
1085
- cost.getTotalCost(),
1086
- "製造完成 " + event.workOrderId()
1087
- ));
1088
-
1089
- // 貸方:仕掛品
1090
- lines.add(JournalLine.credit(
1091
- AccountCode.WORK_IN_PROCESS,
1092
- cost.getTotalCost(),
1093
- "仕掛品振替"
1094
- ));
1095
-
1096
- JournalEntry journal = new JournalEntry(
1097
- generateJournalId(),
1098
- LocalDate.now(),
1099
- JournalType.MANUFACTURING_COMPLETION,
1100
- event.workOrderId(),
1101
- lines
1102
- );
1103
-
1104
- journalRepository.save(journal);
1105
- }
1106
- }
1107
- ```
1108
-
1109
- </details>
1110
-
1111
- ### 検収データの会計連携
1112
-
1113
- 仕入先からの購買品検収時に、買掛金を計上します。
1114
-
1115
- ```plantuml
1116
- @startuml
1117
- title 検収から仕訳への連携
1118
-
1119
- |生産管理|
1120
- start
1121
- :入荷受入;
1122
- :受入検査;
1123
-
1124
- if (検査合格?) then (yes)
1125
- :検収処理;
1126
- :在庫計上;
1127
- :検収イベント発行;
1128
- else (no)
1129
- :返品処理;
1130
- stop
1131
- endif
1132
-
1133
- |財務会計|
1134
- :検収イベント受信;
1135
- :仕入仕訳生成;
1136
- note right
1137
- 借方: 材料/仕掛品
1138
- 借方: 仮払消費税
1139
- 貸方: 買掛金
1140
- end note
1141
-
1142
- :仕訳登録;
1143
- :買掛金残高更新;
1144
-
1145
- stop
1146
-
1147
- @enduml
1148
- ```
1149
-
1150
- #### 検収仕訳のパターン
1151
-
1152
- ```plantuml
1153
- @startuml
1154
- title 検収仕訳のパターン
1155
-
1156
- object "検収データ" as receipt {
1157
- 検収番号 = "RCV-2024-001"
1158
- 検収日 = "2024/01/15"
1159
- 仕入先 = "SUP-001"
1160
- 検収金額 = 55,000円
1161
- 消費税額 = 5,000円
1162
- }
1163
-
1164
- object "材料検収仕訳" as material_journal {
1165
- 借方: 材料 50,000円
1166
- 借方: 仮払消費税 5,000円
1167
- 貸方: 買掛金 55,000円
1168
- }
1169
-
1170
- object "外注検収仕訳" as subcontract_journal {
1171
- 借方: 外注加工費 50,000円
1172
- 借方: 仮払消費税 5,000円
1173
- 貸方: 買掛金 55,000円
1174
- }
1175
-
1176
- receipt --> material_journal : 材料の場合
1177
- receipt --> subcontract_journal : 外注の場合
1178
-
1179
- @enduml
1180
- ```
1181
-
1182
- ### 棚卸差異の会計処理
1183
-
1184
- 棚卸で発見された差異は、適切に会計処理する必要があります。
1185
-
1186
- ```plantuml
1187
- @startuml
1188
- title 棚卸差異の会計処理フロー
1189
-
1190
- |生産管理|
1191
- start
1192
- :棚卸実施;
1193
- :帳簿在庫と\n実地在庫の比較;
1194
-
1195
- if (差異あり?) then (yes)
1196
- :差異原因分析;
1197
-
1198
- if (帳簿 > 実地?) then (棚卸減耗)
1199
- :減耗損計上;
1200
- :棚卸減耗\nイベント発行;
1201
- else (帳簿 < 実地)
1202
- :在庫増加調整;
1203
- :棚卸増加\nイベント発行;
1204
- endif
1205
- else (no)
1206
- :差異なし\n処理終了;
1207
- stop
1208
- endif
1209
-
1210
- |財務会計|
1211
- :棚卸イベント受信;
1212
-
1213
- if (減耗?) then (yes)
1214
- :減耗仕訳生成;
1215
- note right
1216
- 借方: 棚卸減耗損
1217
- 貸方: 材料/製品
1218
- end note
1219
- else (no)
1220
- :増加仕訳生成;
1221
- note right
1222
- 借方: 材料/製品
1223
- 貸方: 雑収入
1224
- end note
1225
- endif
1226
-
1227
- :仕訳登録;
1228
- :在庫評価額更新;
1229
-
1230
- stop
1231
-
1232
- @enduml
1233
- ```
1234
-
1235
- <details>
1236
- <summary>Java 実装例</summary>
1237
-
1238
- ```java
1239
- // 棚卸差異イベント
1240
- public record InventoryAdjustmentEvent(
1241
- String eventId,
1242
- Instant timestamp,
1243
- String productId,
1244
- String warehouseId,
1245
- BigDecimal bookQuantity,
1246
- BigDecimal actualQuantity,
1247
- BigDecimal differenceQuantity,
1248
- BigDecimal unitCost,
1249
- AdjustmentType type,
1250
- String reason
1251
- ) {
1252
- public enum AdjustmentType {
1253
- SHRINKAGE, // 減耗(帳簿 > 実地)
1254
- SURPLUS // 過剰(帳簿 < 実地)
1255
- }
1256
-
1257
- public BigDecimal getAdjustmentAmount() {
1258
- return differenceQuantity.abs().multiply(unitCost);
1259
- }
1260
- }
1261
-
1262
- // 棚卸仕訳サービス
1263
- @Service
1264
- public class InventoryAdjustmentJournalService {
1265
- private final JournalRepository journalRepository;
1266
-
1267
- @EventListener
1268
- public void handleInventoryAdjustment(InventoryAdjustmentEvent event) {
1269
- List<JournalLine> lines = new ArrayList<>();
1270
-
1271
- if (event.type() == AdjustmentType.SHRINKAGE) {
1272
- // 減耗の場合
1273
- lines.add(JournalLine.debit(
1274
- AccountCode.INVENTORY_SHRINKAGE_LOSS,
1275
- event.getAdjustmentAmount(),
1276
- "棚卸減耗 " + event.productId() + " " + event.reason()
1277
- ));
1278
- lines.add(JournalLine.credit(
1279
- determineInventoryAccount(event.productId()),
1280
- event.getAdjustmentAmount(),
1281
- "在庫減少"
1282
- ));
1283
- } else {
1284
- // 過剰の場合
1285
- lines.add(JournalLine.debit(
1286
- determineInventoryAccount(event.productId()),
1287
- event.getAdjustmentAmount(),
1288
- "在庫増加"
1289
- ));
1290
- lines.add(JournalLine.credit(
1291
- AccountCode.MISCELLANEOUS_INCOME,
1292
- event.getAdjustmentAmount(),
1293
- "棚卸差益 " + event.productId()
1294
- ));
1295
- }
1296
-
1297
- JournalEntry journal = new JournalEntry(
1298
- generateJournalId(),
1299
- LocalDate.now(),
1300
- JournalType.INVENTORY_ADJUSTMENT,
1301
- event.eventId(),
1302
- lines
1303
- );
1304
-
1305
- journalRepository.save(journal);
1306
- }
1307
-
1308
- private String determineInventoryAccount(String productId) {
1309
- // 製品か材料かで勘定科目を決定
1310
- Product product = productRepository.findById(productId).orElseThrow();
1311
- return switch (product.type()) {
1312
- case FINISHED_GOODS -> AccountCode.FINISHED_GOODS;
1313
- case WORK_IN_PROCESS -> AccountCode.WORK_IN_PROCESS;
1314
- case RAW_MATERIAL -> AccountCode.RAW_MATERIALS;
1315
- default -> AccountCode.SUPPLIES;
1316
- };
1317
- }
1318
- }
1319
- ```
1320
-
1321
- </details>
1322
-
1323
- ---
1324
-
1325
- ## 35.4 三システム統合の全体像
1326
-
1327
- 販売・生産・会計の3システムを統合した全体像を整理します。
1328
-
1329
- ```plantuml
1330
- @startuml
1331
- title 基幹業務システム統合の全体像
1332
-
1333
- package "販売管理" as sales {
1334
- rectangle "受注" as order
1335
- rectangle "出荷" as shipment
1336
- rectangle "売上" as sales_tx
1337
- rectangle "請求" as billing
1338
- rectangle "入金" as receipt
1339
- }
1340
-
1341
- package "生産管理" as production {
1342
- rectangle "生産計画" as plan
1343
- rectangle "購買" as purchase
1344
- rectangle "製造" as manufacturing
1345
- rectangle "在庫" as inventory
1346
- rectangle "原価" as cost
1347
- }
1348
-
1349
- package "財務会計" as accounting {
1350
- rectangle "仕訳" as journal
1351
- rectangle "売掛金" as ar
1352
- rectangle "買掛金" as ap
1353
- rectangle "在庫資産" as inv_asset
1354
- }
1355
-
1356
- ' 販売→生産
1357
- order --> plan : 受注情報
1358
- inventory --> shipment : 在庫引当
1359
-
1360
- ' 販売→会計
1361
- sales_tx --> journal : 売上仕訳
1362
- billing --> ar : 請求
1363
- receipt --> ar : 入金消込
1364
-
1365
- ' 生産→会計
1366
- purchase --> ap : 検収仕訳
1367
- manufacturing --> inv_asset : 完成仕訳
1368
- cost --> journal : 原価仕訳
1369
-
1370
- ' 在庫
1371
- inventory --> inv_asset : 在庫評価
1372
-
1373
- @enduml
1374
- ```
1375
-
1376
- ### イベントカタログ
1377
-
1378
- ```plantuml
1379
- @startuml
1380
- title システム間連携イベントカタログ
1381
-
1382
- class "販売イベント" as sales_events {
1383
- OrderConfirmed(受注確定)
1384
- ShipmentCompleted(出荷完了)
1385
- SalesCompleted(売上計上)
1386
- BillingConfirmed(請求確定)
1387
- PaymentReceived(入金確認)
1388
- }
1389
-
1390
- class "生産イベント" as prod_events {
1391
- DemandRegistered(需要登録)
1392
- WorkOrderReleased(製造指示)
1393
- ProductionCompleted(製造完成)
1394
- ReceiptConfirmed(検収確定)
1395
- InventoryAdjusted(在庫調整)
1396
- }
1397
-
1398
- class "会計イベント" as acc_events {
1399
- JournalPosted(仕訳計上)
1400
- BalanceUpdated(残高更新)
1401
- MonthEndClosed(月次締め)
1402
- }
1403
-
1404
- note right of sales_events
1405
- 【発行元】販売管理
1406
- 【購読者】生産計画、自動仕訳
1407
- end note
1408
-
1409
- note right of prod_events
1410
- 【発行元】生産管理
1411
- 【購読者】販売在庫、自動仕訳
1412
- end note
1413
-
1414
- note right of acc_events
1415
- 【発行元】財務会計
1416
- 【購読者】経営ダッシュボード
1417
- end note
1418
-
1419
- @enduml
1420
- ```
1421
-
1422
- ---
1423
-
1424
- ## 35.5 まとめ
1425
-
1426
- 本章では、基幹業務システムの具体的な連携パターンについて解説しました。
1427
-
1428
- ### 学んだ連携パターン
1429
-
1430
- | 連携パターン | 発生元 | 連携先 | 主な処理 |
1431
- |------------|-------|-------|---------|
1432
- | 売上→仕訳 | 販売管理 | 財務会計 | 売掛金・売上計上 |
1433
- | 入金→消込 | 販売管理 | 財務会計 | 売掛金消込 |
1434
- | 受注→計画 | 販売管理 | 生産管理 | 需要登録・MRP |
1435
- | 完成→在庫 | 生産管理 | 販売管理 | 在庫同期 |
1436
- | 検収→仕訳 | 生産管理 | 財務会計 | 買掛金計上 |
1437
- | 完成→仕訳 | 生産管理 | 財務会計 | 製品・仕掛品振替 |
1438
- | 棚卸→仕訳 | 生産管理 | 財務会計 | 棚卸損益計上 |
1439
-
1440
- ### 連携設計のポイント
1441
-
1442
- 1. **イベント駆動の採用**
1443
-
1444
- - システム間の疎結合を実現
1445
- - 非同期処理による可用性向上
1446
- - 監査証跡の確保
1447
-
1448
- 2. **自動仕訳パターンの標準化**
1449
-
1450
- - 取引種別ごとの仕訳パターン定義
1451
- - 柔軟な条件分岐(商品/顧客グループ)
1452
- - 例外処理の明確化
1453
-
1454
- 3. **データ整合性の確保**
1455
-
1456
- - イベント順序の保証
1457
- - 補償トランザクション
1458
- - 定期的な突合処理
1459
-
1460
- ### 次章の予告
1461
-
1462
- 第36章では、マスタデータ管理(MDM)について解説します。複数システムで共有されるマスタデータの一元管理方法と、MDMパターンの選択基準を学びます。