Upgrade to Pro — share decks privately, control downloads, hide ads and more …

難しいから面白い!医薬品×在庫管理ドメインの複雑性と向き合い、プロダクトの成長を支えるた...

kakehashi
September 05, 2024

難しいから面白い!医薬品×在庫管理ドメインの複雑性と向き合い、プロダクトの成長を支えるための取り組み / Initiatives to Support Product Growth

プロダクトエンジニアが語る!医療、決済、物流、不動産ドメイン
https://openlogi.connpass.com/event/326081/
での登壇資料です

kakehashi

September 05, 2024
Tweet

More Decks by kakehashi

Other Decks in Technology

Transcript

  1. 日本の医療体験を、しなやかに。 © KAKEHASHI Inc. 2024/09/05 プロダクトエンジニアが語る!医療、決済、物流、不動産ドメイン 株式会社 カケハシ 松本 明紘

    難しいから面白い! 医薬品×在庫管理ドメインの複雑性と向き合い、 プロダクトの成長を支えるための取り組み
  2. 薬局の在庫管理の業務 在庫管理 薬局 在庫が 増える 発注 発注(電子・FAX) 納品 医薬品卸 •

    卸への発注(購入)によって在庫が増える 在庫が 減る 処方箋 処方 医薬品 患者さん • 患者さんへの処方(販売)によって在庫が減る
  3. 処方と発注の医薬品の特徴(調剤方法の違い) • 処方の医薬品と発注の医薬品が一致しない セルベックスカプセル 50mg 処方の粒度 処方する種類が多くてたくさ んの薬を飲まなきゃいけない ので1回飲む単位に小分けして お渡ししよう!

    PTP 10カプセルシート 10枚入り PTP 10カプセルシート 100枚入り PTP 21カプセルシート 10枚入り PTP 21カプセルシート 50枚入り バラ 500カプセル入り 1瓶 バラ 3000カプセル入り 1瓶 PTP 10カプセルシート 300枚入り PTP 21カプセルシート 150枚入り 発注の粒度 処方された薬は1種類だし PTPシートをそのままお渡し しよう! • 処方箋の内容によって薬剤師さんの判断が入り、選択する調剤方法が異なる
  4. 処方と発注の医薬品の特徴(患者さんの好み) • 処方の医薬品と発注の医薬品が一致しない • 処方では効能のみ気にするが、患者さんにとっては味なども重要な要素 エンシュア・H 処方の粒度 バニラ味 24缶入り 発注の粒度

    今回はどの味になさいます か? コーヒー味 24缶入り バナナ味 24缶入り 黒糖味 24缶入り メロン味 24缶入り ストロベリー味 24缶入り 抹茶味 24缶入り 画像の出典: https://www.abbott.co.jp/our-product s/ensure-h.html
  5. 在庫管理と発注の医薬品の単位 • 発注の医薬品の単位は細かすぎて、在庫管理には向かない セルベックスカプセル 50mg PTP 10カプセルシート 10枚入り PTP 10カプセルシート

    100枚入り PTP 21カプセルシート 10枚入り PTP 21カプセルシート 50枚入り バラ 500カプセル入り 1瓶 バラ 3000カプセル入り 1瓶 PTP 10カプセルシート 300枚入り PTP 21カプセルシート 150枚入り 処方の粒度 発注の粒度 結局、 PTP 10カプセルシートは何枚 残ってるの? どれを何個持っていても 違いはない PTP 10カプセルシート PTP 21カプセルシート バラ 在庫管理に適切な粒度で モデル化 • AI在庫管理では在庫管理に適切な粒度で管理できるようにモデル化をしている
  6. これまでと異なる医薬品の単位の重要性 • エンタープライズへの導入で在庫管理の正確性がより重要になってきた セルベックスカプセル 50mg PTP 10カプセルシート 10枚入り PTP 10カプセルシート

    100枚入り PTP 21カプセルシート 10枚入り PTP 21カプセルシート 50枚入り バラ 500カプセル入り 1瓶 バラ 3000カプセル入り 1瓶 PTP 10カプセルシート 300枚入り PTP 21カプセルシート 150枚入り 処方の粒度 発注の粒度 PTP 10カプセルシート PTP 21カプセルシート バラ 在庫管理したい単位 実際のモノの粒度 ロット番号:XXX001 有効期限:2024/12/16 購入時原価:1280円 置き場所:棚001 ロット番号:XXX002 有効期限:2025/02/04 購入時原価:1340円 置き場所:棚002 ロット番号:XXX003 有効期限:2025/03/09 購入時原価:1140円 置き場所:棚001 在庫量の最適化だけではな く、資産管理としての在庫管 理が重要になってきた • これまではあまり重要視していなかった医薬品の単位も重要になった 処方や発注で 意識したい単位 在庫管理(資産管理) したい単位
  7. 3つの取り組み 1. 外部仕様の複雑性を可視化しシンプルにする 2. すでに複雑になってしまったコンポーネントに対する リファクタリング 3. 自動テストの分かりやすさの向上 考慮すべきことを減らし てアウトプットの質をス

    ピードを維持 ねらい① 考慮漏れが原因によるイ ンシデント発生を減らす ねらい② (自分たちを含む)将来の 開発者が自信をもって コードを変更できる ねらい③
  8. • デシジョンテーブルを網羅的に作成するのは既存仕様をすべて理解し て記載する必要があり重いプロセスになりがち • ルールにはせず、ガイドラインとしてプロセスに組み込む 無理なくデシジョンテーブルを作成していく コミュニケーションガイド 説明 変更のしやすさ、変更の頻度 ルール

    原則として守るべきもの 低 ガイドライン 理由があれば守らなくていい 守った方が多くの場合で良い効 果がある 中 Best Current Practice(BCP) ガイドラインほどではないけど 今一番良いプラクティス 高 外部仕様の複雑性を可視化しシンプルにする
  9. 既存のモジュール構成 すでに複雑になってしまったコンポーネントに対するリファクタリング ユース ケース 共通処理 ユース ケース ユース ケース ユース

    ケース ユース ケース データ 医薬品 データ データ データ データ 在庫管理 発注 処方 その他機能 ユース ケース ユース ケース データ データ • トランザクションスクリプトの構成 • 一つ一つのユースケースの開発は分かりやすく最速 シンプルな時期は良かったが、それぞれの責務の範囲を超えて複雑化
  10. 将来のモジュール構成 • 業務領域ごとにモジュール化、責務で適切にレイヤー化 • 業務ロジックを抽象データモデルとして表現 ユース ケース ユース ケース ユース

    ケース ユース ケース ユース ケース データ 在庫品目とし ての医薬品 データ 購入対象とし ての医薬品 データ 処方対象とし ての医薬品 データ データ 抽象 データ 抽象 データ 抽象 データ 抽象 データ サービ ス サービ ス 在庫管理 発注 処方 その他機能 データ データ 抽象 データ その他医薬品 データ ユース ケース データ ユース ケース 抽象 データ 抽象 データ すでに複雑になってしまったコンポーネントに対するリファクタリング
  11. 効果の大きいリファクタリングから小さく始める • 静的解析ツール+αで メトリクスを取得し可視化 • 取得したメトリクスの例 ◦ インポートの数 ◦ クラス数、メソッド数、関数の数

    ◦ 変更回数(効果の大きさ) ◦ 循環的複雑度(テスト容易性) ◦ 認知的複雑度(理解容易性) ◦ 保守容易性指数 ◦ データの参照数(データの結合度) すでに複雑になってしまったコンポーネントに対するリファクタリング
  12. Gherkin記法によるテストの理解容易性の向上 Scenario: 同一処方箋番号の複数の処方箋データファイルが複数回取り込まれないこと Given: カケハシ薬局が存在する And: 処方箋の対象薬品のマスタが存在する And: 処方箋データファイルをアップロードする And:

    同一処方箋番号の別の処方箋データファイルをアップロード When: 処方箋データ取り込み処理を実行する Then: 処方箋データが1件登録される And: 処方箋明細データが登録される And: 医薬品在庫出庫データが登録される And: 医薬品在庫出庫データが処方された医薬品に紐づいている And: 医薬品在庫は更新されない 前提条件をGivenに記述 期待動作をThenに記述 テスト実行対象の実行を Whenに記述 処方箋データ取り込みのテストに対するGherkin記法の記述例 自動テストの分かりやすさを向上させていく