DentalZaikoMaker は、歯科医院・歯科技工所のために作られた材料在庫・経費管理プラグインです。ロットと使用期限を管理し、材料ごとに仕入先を1件以上登録させることで常に発注できる状態を保ち、価格・イベント・購入履歴から推奨仕入先を提示し、月々の節約額を可視化します。ユーザーインターフェイスは日本の歯科市場向けに日本語で提供されます。
主な機能
- JAN コードによる在庫登録・管理。連携先の材料データベース Web サービスと自動で同期する
- PWA によるスマートフォンでのバーコード読み取り。JAN/EAN バーコードに加え、医療材料のパッケージに使われる GS1/UDI コード (1次元の GS1-128 / GS1 DataBar、2次元の DataMatrix/QR) を読み取ります。GS1 コードからは入庫時にロット番号と使用期限が自動入力されます。デコードは同梱の純 JavaScript ライブラリーがブラウザー内で行う。コードは常に手入力でも登録できる。
- ロット番号と使用期限の管理、および期限切れアラート
- 在庫しきい値割れアラート (画面内とメール)
- 発注リクエストと管理者による発注承認のワークフロー
- ロールは3段階。管理者 (発注承認・予算編集)、スタッフ (入庫/使用/廃棄)、閲覧のみ
- オフラインに対応する Service Worker キャッシュ
- 経費ダッシュボード。月次推移・仕入先・カテゴリー・拠点の軸で表示します (Chart.js)
- 月次予算の管理。80% と 100% のしきい値でアラートを出す
- 節約額の可視化と材料別ランキング
- 週次のレコメンド。過剰在庫、死蔵在庫、共同購入を提示する
- freee 形式と マネーフォワード 形式での CSV 出力
- 推奨仕入先のハイライト表示
- 拠点間の単価比較
- 価格推移グラフ (自院のデータのみ。外部への送信はありません)
- 公的機関の価格動向把握に役立てるための月次統計レポート (任意・オプトイン。既定はオフ、既定は匿名)
カメラ読み取り
バーコードのデコードは、同梱の純 JavaScript ライブラリー @zxing/library (public/js/vendor/zxing-library.js。上流の非圧縮ビルド) を使ってブラウザー内で完結します。本パッケージに WebAssembly やバイナリーは含まれず、外部ホストから何かをダウンロードすることもありません。カメラの映像が端末の外に出ることはなく、サイトへ送信されるのは読み取り結果のコード文字列だけです。
カメラで読み取れる書式は EAN-13 / EAN-8 / UPC-A (JAN)、Code 128 (GS1-128)、GS1 DataBar (RSS-14)、GS1 DataBar Expanded、DataMatrix、QR です。GS1 DataBar Limited と UPC-E はこのライブラリーでは読み取れないため手入力になります。カメラ読み取りにはカメラへのアクセスを許可できるブラウザーが必要ですが、どの端末でもコードは手入力で登録できます。
外部サービス連携
本プラグインは、連携先の材料データベース Web サービス (https://healthbanks.org/dzm/) に接続します。 やり取りするデータには、法人 ID、JAN コード / 院内コード、発注内容、材料への投稿が含まれます。何を、いつ、 どの機能が送信するかの全一覧は下記の「通信のタイミング」を参照してください。 連携は、設定画面の「連携を解除する」ボタンからいつでも無効にできます。解除すると、保存されている同意情報とアクセストークンを削除し、以後は一切の API リクエストを送信せず、Web サービスに接続するスケジュール実行のタスクもすべて停止します。医院内に保存されている在庫データはそのまま残ります。
- サービス: https://healthbanks.org/dzm/
- 利用規約: https://healthbanks.org/dzm/terms
- プライバシーポリシー: https://healthbanks.org/dzm/privacy
このほかに、任意の月次統計レポートがあります (下記の「月次統計レポート (任意・オプトイン時のみ)」を参照)。 このレポートは既定でオフであり、連携への同意とは別に、明示的なオプトインが必要です。
月次統計レポート (任意・オプトイン時のみ)
歯科医師会や厚生労働省などの公的機関が材料の価格動向を把握する助けとなるよう (たとえば診療報酬改定の参考資料として)、本プラグインは集計済みの月次統計レポートを 同じ Web サービス (https://healthbanks.org/dzm/) へ送信できます。
- この機能は既定で無効です。医院の管理者が「公的機関レポート」の設定画面で明示的にオプトインし、 何が送信されるかを確認しない限り、何も送信されません。
- 有効にすると、前月分の集計済みサマリーを月に1回送信します。内容は、材料またはカテゴリーごとの JAN コード、月次単価 (平均・最小・最大)、数量、発注件数に加え、事業区分 (医院か技工所か) と 都道府県です。JAN コードは医院をまたいで統計を比較可能にするためのものです。 発注単位のレコードは含まれません。
- 発注の生データ、患者情報、診療情報を送信することは決してありません。送信するのは上記の月次集計値のみである。
- 送信者は既定では匿名です。管理者が任意で開示を選ぶこともできる。
- 同じ設定画面からいつでもレポートを停止できます。停止すると直ちに送信されなくなる。
通信のタイミング
医院の管理者が連携を有効にする (設定画面の同意ダイアログ) までは、Web サービスとの通信は一切行われません。 同意後の通信は、その大半が利用者の明示的な操作に応じて発生します。加えて、下記のとおりいくつかのタスクが スケジュールに従って実行されます。
利用者の操作にともなう通信:
- サイトの接続時: 管理者が接続キーを入力すると、Web サービスとの間でアクセストークンに引き換えます。トークンは有効期限が切れると更新される
- 接続キーの代わりに申込コードで接続する場合: 申込コードを Web サービスとの間で接続情報に引き換える
- 「接続テスト」ボタン: 材料マスターを1件取得し、サイトから Web サービスへ到達できることを確認する
- 材料の照会・登録時: JAN コードまたは院内コードを入力したとき
- 在庫一覧の表示時: キャッシュが 24 時間より古い場合に状態を再取得する
- 材料詳細の表示時: キャッシュが 24 時間より古い場合に状態を再取得する
- 「サーバーから更新」ボタン: 状態を直ちに再取得する
- 発注リクエストの作成時: 推奨仕入先、廃番フラグ、名称変更を取得する
- 発注承認時: 発注の実績を Web サービスに記録する
- 販売店の紐付け時: 販売店コードを入力すると、登録済みの販売店を紐付け / 解除する
- 紐付けた販売店への発注時: Web サービスを介して発注リクエストを販売店へ送信する
- 紐付けた販売店への返品リクエスト時: Web サービスを介して行った発注に対して返品を記録すると、その販売店へ返品リクエストを送信する
- 材料への投稿時: 材料に対する要望・提案・不具合報告を投稿すると、その材料のメーカーへ届くよう Web サービスへ送信される
- イベント情報の取得: スタッフがマイページを表示している間、実施中の仕入先イベント一覧に変更があるかどうかを条件付き GET (ETag) で Web サービスに問い合わせる
スケジュール実行のバックグラウンドタスク (同意後のみ):
- 販売店受注の同期 (1時間ごと): 紐付けた販売店へ送信した発注の状態 (受注確認 / 出荷 / 辞退) が更新されていないか、また返品リクエストに対する販売店の判断 (承諾 / お断り) が出ていないかを Web サービスに確認する
- 材料への投稿の同期 (1時間ごと): 自院が投稿した内容の既読 / 対応状況を Web サービスに確認し、送信に失敗していた投稿があれば再送する
- 月次統計レポート (任意・オプトイン時のみ。連携への同意とは別): 前月分の集計済み価格統計を月次のスケジュールで送信する
このほかに3つのスケジュール実行タスクがありますが、いずれも自サイト内で完結し、Web サービスに接続することはありません。日次の在庫 / 使用期限アラートの確認、週次のレコメンド処理、日次の未使用アップロード画像の整理です。
利用者の操作にともなって送信するデータ: 法人 ID、JAN コード、院内コード、(発注時) 数量と選択した仕入先、(販売店受注の場合) 発注リクエストの明細 (各行の JAN コード・商品名・数量・単価)、(返品リクエストの場合) 販売店の発注番号と、返品する品目の JAN コード・商品名・数量・理由・自由記述のメモ、(材料への投稿の場合) 投稿の区分、件名、自由記述の本文、材料の JAN コードとメーカー名、匿名 / 至急のフラグ、および医院名と連絡先メールアドレス。 オプトインした月次レポートが送信するデータ: 材料またはカテゴリーごとの月次の平均 / 最小 / 最大単価、数量、発注件数、および材料の JAN コード、事業区分、都道府県。 送信しないデータ: 患者情報、診療情報、個人の健康情報。オプトインした月次レポートが発注の生データを送信することは決してなく、送信するのは上記の集計値のみです。
同梱しているサードパーティーライブラリー
同梱しているサードパーティーのファイルは、いずれもバージョンを固定した上流 npm パッケージのビルド済み配布物から、1バイトも変えずにそのままコピーしたものです。本プラグインが圧縮・変換・結合・改変を行うことはありません。3つのうち Chart.js の1つは上流が公開している時点で圧縮されています。各ファイルの人が読める形のソースは下記に示します。正確なバージョンは package.json で固定しています。
検証するには、プラグインのルートディレクトリーで次を実行します。同梱している各ファイルの SHA-256 を照合し、1つでも一致しなければ非ゼロで終了します:
shasum -a 256 -c public/licenses/VENDOR-CHECKSUMS.txt
public/licenses/VENDOR-PROVENANCE.txt に、同梱している各ファイルの上流プロジェクト、ライセンス、コピー元の正確なパス、および npm から再生成するためのコマンドを記載しています。
- @zxing/library 0.23.0 (Apache-2.0 License) — https://github.com/zxing-js/library — public/js/vendor/zxing-library.js。スタッフアプリが使う純 JavaScript のバーコードデコーダーです。上流の非圧縮 UMD ビルド (umd/index.js) をそのまま同梱しており、ブラウザーで動作するコードを人が読める形にしています。TypeScript のソースは https://github.com/zxing-js/library/tree/v0.23.0/src です。WebAssembly も外部へのリクエストも使用しません。ライセンス全文: public/licenses/ZXING-JS-LICENSE.txt。
- Chart.js 4.5.1 (MIT License) — https://github.com/chartjs/Chart.js — 管理画面の経費・価格グラフに使用します (public/js/vendor/chart.umd.min.js)。上流はこのファイルを圧縮した形で配布しています。人が読める形のソースは同じ npm パッケージ内の dist/chart.js で、元のソースは上記のリポジトリーにある。
- qrcode-generator 2.0.4 (MIT License) — https://github.com/kazuhikoarase/qrcode-generator — スタッフアプリのログイン用 QR コードをブラウザー内で生成します (public/js/vendor/qrcode-generator.js)。外部へのリクエストは行いません。上流の非圧縮ソースである。
プライバシーポリシー
- Web サービスへ送信するデータ: 法人 ID と法人名、医院の連絡先メールアドレス、照会した JAN コード / 院内コード、紐付けた販売店へ発注した場合の発注内容 (JAN コード、商品名、数量、単価)、および利用者が投稿を選んだ場合の材料への投稿の全文。
- 任意の月次レポートを有効にした場合のみ送信するデータ: 材料 / カテゴリーごとの JAN コードと集計済みの月次価格統計 (平均 / 最小 / 最大単価)、数量、発注件数、および事業区分 (医院か技工所か) と都道府県。送信者は既定では匿名である。
- 送信しないデータ: 患者情報、診療情報、個人の健康情報。任意の月次レポートが発注の生データを送信することは決してありません。
- すべてのデータは https://healthbanks.org/dzm/privacy のプライバシーポリシーに従って管理されます (利用規約: https://healthbanks.org/dzm/terms)。
