DentalZaikoMaker

説明

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)。

スクリーンショット

インストール

  1. プラグインをアップロードして有効化します。
  2. WordPress 管理画面で「DentalZaikoMaker > 設定」を開きます。
  3. 外部サービス連携の同意ダイアログに同意します。
  4. アカウントに発行された接続キー (「dzmk_」で始まります) を接続キー欄に貼り付けて保存します。法人 ID と API トークンは接続キーから自動で読み取られます。
  5. 法人情報、拠点、スタッフの順に登録します。

FAQ

患者情報を扱いますか ?

扱いません。本プラグインは歯科材料の在庫のみを管理し、患者情報や診療記録に触れることはありません。

外部サービスとの連携を解除できますか ?

解除できます。設定画面に「連携を解除する」ボタンがあります。保存されている同意情報とアクセストークンを削除し、以後はスケジュール実行のタスクを含めて Web サービスへのリクエストを一切行いません。医院内に保存されている在庫データは削除されません。後から改めて同意し、接続キーで再接続することもできます。

プラグインが自動でデータを送信することはありますか ?

オプトインした場合に限りあります。既定では、プラグインは利用者の操作に応じてのみ通信します。任意機能として月次統計レポートが1つあり、明示的に有効化した場合のみ、月次のスケジュールで集計済みの価格サマリーを送信します (発注の生データや患者情報を送ることはありません)。既定は匿名で、「公的機関レポート」の設定画面からいつでも停止できます。

メールアドレスや医院名が変わりました。何を変更すればよいですか ?

2 か所あり、それぞれ別に管理されています。本プラグインの「法人情報」画面が持っているのは、仕入先が受け取る発注メールの署名と差出人欄に出る内容です。ログイン用のメールアドレスと、販売店に表示される名称は Web サービス側が持っており、Web サービスのマイページから変更します。片方を変えても、もう片方は変わりません。

いずれの場合も、新しいメールアドレスで申し込み直さないでください。法人 ID の異なる 2 つめのアカウントが作られ、販売店との紐付け、発注と返品の履歴、投稿、取り込んだ名称の照合結果は、すべて古いアカウントに残ってしまいます。

連絡先を変更したのに、販売店が古いほうへ返信してくるのはなぜですか ?

発注には、送信した時点の名称と連絡先がそのまま記録され、あとから書き換わることはありません。そのため、以前に送信した発注についての販売店からの連絡は、当時の連絡先に届きます。進行中の発注がある場合は、その発注が終わるまで待つか、販売店へ直接お知らせください。

スマートフォンで使えますか ?

使えます。管理者がスタッフアプリの URL を共有すると、スタッフはモバイルのブラウザーから在庫操作やバーコード読み取りを行えます。カメラ読み取りは追加の導入作業なしで動作します。デコーダーはプラグインに同梱されており、別途インストールするものはありません (「カメラ読み取り」を参照)。カメラへのアクセスを許可できるブラウザーが必要ですが、コードは常に手入力でも登録できます。

オフラインでも使えますか ?

Service Worker によるオフラインキャッシュを備えているため、通信できない状態でもスタッフアプリを開いて在庫を閲覧できます。ただし入出庫や発注などの変更操作には通信が必要です。あとで送信するためのキューには入りません。

freee や マネーフォワード と連携できますか ?

直接は連携しませんが、freee 形式と マネーフォワード 形式の CSV を出力できます。

評価

このプラグインにはレビューがありません。

貢献者と開発者

DentalZaikoMaker はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“DentalZaikoMaker” は1ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“DentalZaikoMaker” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログRSS で購読してみてください。

変更履歴

ここに載せているのは現行リリースの内容だけです。全履歴はプラグインに同梱している changelog.txt にあります。

1.29.2

  • 修正: スタッフ登録の画面で、各権限にできることの説明が誤っており、スマートフォンでは、すぐ上の選択肢と食い違っていた。主任は仕入先へ発注を送れるのに、選択肢には「送信は管理者」と出ていた。これは主任の権限を広げる前の記述が残っていたものである。同じ画面の 1 行下には、主任が自分で発注を送ると書いてあった。
  • 説明が選択に追随するようにした。選んだ権限だけを、できること・できないことを並べて表示する。これまでは何を選んでも同じ 4 行が出ていたため、管理者や閲覧のみを選んでも主任とスタッフの説明が出ていた。
  • 各権限にできることを 1 か所にまとめ、パソコンの画面とスマートフォンの両方がそこを読むようにした。これまでは両方がそれぞれ自前の文章を持っており、そのために食い違いが生じていた。
  • 画面上の「ロール」を「権限」に統一した。