見出し画像

テプラで診察券用の患者番号バーコード自動印刷プログラムを作れます

本稿はとあるクリニックの先生から、患者番号読み込み用のバーコードを発行できないかとの相談を受け、KINGJIM社のテプラを使って患者番号のバーコード発行プログラムを作った際の備忘録です。

診察券に貼り付けたい、医療機器に読み込ませたいなど患者番号をバーコードで印字したい、しかもラベルのような形で印刷したいというニーズは意外とあるなと感じておりますが、そのようなシステムを提供しているベンダーは限られてきます。医療系予約システムベンダーであれば、オプションでラベル発行まで可能なところもあるようですが、数万~十数万程度の初期費用と月額数千円のランニングコストが発生するみたいです。

そんな中で、ラベル印刷のテプラで有名なKING JIM社は、Windows向けのラベル印刷ソフト「SPC10」を提供していて、その中で「SPC10-API」というAPIが利用可能です。
その機能を使えば、テプラとラベルにかかる費用は抜きにして、実質タダで診療上利用可能なバーコードを作成できちゃいます。


SPC10について

SPC10は、テプラから発行されるラベルのレイアウトを編集できるソフトです。ラベルに入力したい文字の位置やレイアウトを任意に編集することが出来、無料でダウンロード可能です。


SPC10 イメージ画像

また、CSVファイル等のデータ取り込みによる一括ラベル作成も可能です。
これらの機能をAPIで利用し、診察券用の患者番号バーコード印刷を自動化しました。


SPC10-APIを用いた患者番号バーコード印刷プログラムについて

SPC10を用いてテンプレートファイルを作成する

まず、自動印刷にあたって、テプラに印刷したいデータが必要です。あらかじめ、レセコン・電子カルテベンダーに患者基本属性情報をCSVで出力可能か問い合わせしてください。CSVの情報として必要なデータとしては、患者氏名・ふりがな・患者番号・生年月日・性別などがあろうかと思います。

次に、SPC10を用いて、CSVファイルの取り込み設定およびレイアウト編集を行います。SPC10上でCSVファイルを取り込むと、CSVの列単位でラベルの編集をすることが可能です。

※詳細な説明は、SPC10トリセツのP56「流し込み機能」を参照ください。

SPC10トリセツ

これらを列ごとにレイアウトを決定します。
※数字の列はバーコードに変換することも可能です。

このレイアウトデータを保存すると、「.tpe」という拡張子のついたTEPRA SPC10のテンプレートファイルが作成されます。

①テンプレートファイル②テンプレートファイルで登録したフォーマットのCSVデータを用いて、APIにより自動印刷することが可能です。


作成したテンプレートファイルをもとに、SPC-10APIで印刷する

さて、ここまでSPC-10にてラベルのテンプレートを作成しましたが自動化するにあたってはAPIを利用します。

わかりやすい連携イメージの全体像がKING JIM社のサイトで説明されていたので抜粋します。

SPC10-APIのアプリケーション連携イメージ

流れとしては、
①レセコン・電子カルテなどから患者属性情報のCSVファイルを出力する(画像の左側の黄色四角に該当)
②出力されたCSVファイルと、そのCSVファイルをもとにレイアウトしたテンプレートファイル(.tpe)をパラメーターとして、SPC10の印刷プログラムをAPIにて呼び出す。
③テプラで印刷される。

です。今回は
①の出力はレセコン・電子カルテ側で実行されるものとし、
②の部分について所定の位置に出力されたCSVファイルと、事前に作成したテンプレートファイルをAPIにより実行するバッチファイルを作成したい
と思います。

印刷コマンドはシンプルで下記の通りです。

【印刷コマンド】
"SPC10 のフルパス名"/pt_"TPE ファイルのフルパス名,CSV ファイルのフルパス名,印刷部数"_"プリンタ名"
【記述例】
"C:¥Program Files¥KING JIM¥TEPRA SPC10¥SPC10.exe" /pt
"D:¥sample.tpe,D:¥data.csv,2" "KING JIM SR5900P" 

第1引数(tpe ファイルのフルパス名)でテンプレートファイルの指定
第2引数(CSV ファイルのフルパス名)で CSV ファイルの指定
第3引数(プリンタ名)でプリンタ名を指定します。
プリンタ名はコントロールパネルのプリンター一覧に表示されるラベルプリンタの名称になります。

これをもとに、所定のファイルの中にCSVファイルをひとつづつ印刷し、印刷が終わったら削除するバッチファイルを作成した完成形が下記の通りです。

@echo off
chcp 65001

Set temple = C:\Users\●●\label\barcode.tpe
Set output =  C:\Users\●●\label\kanja
Set prt = "KING JIM SR-R980"

For %%c in (*.csv) do (
	"C:¥Program Files¥KING JIM¥TEPRA SPC10¥SPC10.exe" /pt "%temple%,%output%\%%c,1" %prt% del %%c
)

endlocal 


実際に印刷された画像です。
(名刺の裏に貼り付けました。汚くてすみません、、、。)
十分に使えるレベルかなと思います。診察券貼り付けのほか、スピッツに貼り付けて院内検査機器にバーコードを取り込ませたりする運用もできてました。


余談:ChatGPTにAPIのバッチファイル作成を任せてみた

ChatGPTを日常的に(プログラム作成用途ではなく)よく使うのですが、今回のように一般的に知られていないAPIについてAPIマニュアルを渡したらChatGPTは適切なバッチファイルを作ってくれるのか、気になったので試してみました。

SPC10-APIのマニュアルPDFを読み込ませて、下記の指示をだしてみました。

SPC10-APIを用いて、所定のフォルダ内にあるすべてのCSVファイルのラベルを印刷するAPIを呼び出すバッチファイルを作成したいです。 

要件1:使用するプリンタは変更する可能性があるため、prt変数として代入できるようにしたいです。
要件2:CSVファイルの保存先について変更する可能性があるため、output変数として代入できるようにしたいです。
要件3:TPEファイルのフルパスは「C:\Users\●●\label\barcode.tpe」としてください。
要件4:変数ouputで指定されたフォルダにあるすべてのCSVファイルに対して、SPC10-APIを実行してください。印刷コマンドが実行されたCSVファイルは削除してください。

この結果返ってきた回答を抜粋します。

@echo off
setlocal

REM ---- 変数設定 ----
set "prt=KING JIM SR5900P"   REM 使用するプリンタ名(必要に応じて変更可能)
set "output=C:\path\to\csv\files"   REM CSVファイルの保存フォルダパス(変更可能)
set "tpe=C:\Users\●●\label\barcode.tpe"   REM TPEファイルのフルパス(固定)

REM ---- SPC10実行ファイルのパス ----
set "spc10_path=C:\Program Files\KING JIM\TEPRA SPC10\SPC10.exe"

REM ---- CSVファイルに対してSPC10-APIを実行 ----
for %%f in ("%output%\*.csv") do (
    REM ---- 印刷処理 ----
    echo %%fを印刷中...
    "%spc10_path%" /pt "%tpe%,%%f,1" "%prt%"
    
    REM ---- 印刷が成功した場合、CSVファイルを削除 ----
    if not errorlevel 1 (
        echo 印刷成功: %%f を削除します。
        del "%%f"
    ) else (
        echo 印刷失敗: %%f は削除されません。
    )
)

echo 全ての処理が完了しました。
endlocal

少し修正すれば動きそうですね、、、。

この記事が気に入ったらサポートをしてみませんか?