バーコード関連API
バーコード関連APIは、RADIREC WSのために強化されていますが、バーコード規格自体は工業標準に即した汎用的なAPIです。(*1)
*1 一部の流通企業では、箱に貼られている一般的なバーコードを読み違えてしまわないよう、市販のリーダーでは読めない、非公開のバーコードを使用しています。
生成できるバーコードについて
2023年の改訂で医療現場に広く普及しているGS1バーコード規格に対応しました。
バーコードに関連する機能は、 ・バーコードの作成 ・バーコードの解読 の2つの処理が必要です。
今回はバーコードの作成方法について整理します。
バーコードの作成
対応するバーコード規格
1次元、2次元に対応しており、以下の種類が作成できます。
規格名 | 次元 | 特徴 |
---|---|---|
JAN/EAN/UPC | 1 | スーパーやコンビニなど商品流通管理で広く使われている |
Code128 | 1 | |
GS1 | 1 | Code128を拡張して、複数のコードをまとめて表示できる |
NW7 | 1 | |
QRコード | 2 | 2次元バーコードの一種。近年スマートフォンの普及に伴って一般的になった |
作成はサーバーサイトで行っています。クライアントサイドで作成する機能は現在のところサポートされていません。
運用上の注意
複数のバーコード規格に対応する重要性
検体や患者の管理など、医療現場では様々な機器がバーコードで管理されるようになっています。半面、バーコードリーダーは導入したばかりでは何でも読んでしまうため、以下のような問題が発生します。
- 他の医療機関や依頼検査機関が振った患者IDを読んでしまい、別の患者が表示されても気づかない
- 薬の在庫管理で、単品のコードとケース(例えば100セット)のコードを区別できないと正しい在庫数がわからない
バーコードリーダーは、安いものでも読み取れるバーコードの種類を設定できるのが普通で、これにより3つのバーコードが並んでいても読み取りの事故が起きないように
このため、現場ごとに実際に運用されるバーコードの種類を変える必要があります。
QRコードにデータを埋め込む際の表記方法
シリアライゼーション
バーコードなどで議論されるのが複数のデータをひとまとまりにする際の表記方法です。一般にシリアライゼーション(serialization)あるいはパッキング(packing)といいます。
プログラミングの用語でもあり、JSON規格、XML規格が広く知られています。
一般に人間が読んで理解できる文字の羅列で構成されているものを指します。
JSON
Javascript言語で使用しているルールにすぎませんが、非常に便利なため、Javascipt以外の言語でも活用されている記述です。
{
\"date\": '2001-01-04',
\"age\": 20,
titles:[ \"Ph.D.\", \"Director\" ]
}
XML
もともとはSGMLから始まり、
アプリケーション規格
XML規格などの基本規格を基に、応用分野を絞ってさらに細かい規格にしたものをアプリケーション規格といいます。
例えば、
- 電子処方箋ファイル
- 調剤情報提供ファイル
などは、XML規格により細かい規定を付けたアプリケーション規格となります。がより、システムの運用に活かされます。
シリアライズ基本規格の例
規格名 | 単位情報の表記 | 見出しと値の区切り | ペア同士の区切り |
---|---|---|---|
JSON | 数はそのまま。文字列はダブルクォート | { 見出し: 単位情報 } | カンマ |
XML(タイプ1) | 数も文字列もそのまま。タグ名に属性名が入っているタイプのXML | <見出し>単位情報</見出し> | <セット名>ペア...</セット名> |
XML(タイプ2) | 数も文字列もそのまま。タグ名にはデータ構造を記すのみ。 | <key>見出し</key><value>単位情報</value> | <dict></dict> |
シリアライズされた、アプリケーション規格の例
XMLベースのアプリケーション規格
Code128バーコード規格のアプリケーション規格の一つ。
MECARD形式 | iモード | MECARD:N:<姓>,<名>;SOUND:<姓カナ>,<名カナ>;NICKNAME:<ニックネーム>;TEL:<電話番号1>;TEL:<電話番号2>;TEL-AV:<テレビ電話(FOMA)の電話番号>;EMAIL:<メールアドレス1>;EMAIL:<メールアドレス2>;URL:<URL>;ADR:<私書箱>,<部屋番号>,<番地>,<市町村>,<都道府県>,<郵便番号>,<国名>;BDAY:<誕生日 西暦で8桁>;NOTE:<メモ>;; |
---|---|---|
MEMORY形式 | au/ソフトバンク | MEMORY:<メモ><CR/LF>NAME1:<名前><CR/LF>NAME2:<名前カナ><CR/LF>MAIL1:<メールアドレス1><CR/LF>MAIL2:<メールアドレス2><CR/LF>MAIL3:<メールアドレス3><CR/LF>TEL1:<電話番号1><CR/LF>TEL2:<電話番号2><CR/LF>TEL3:<電話番号3><CR/LF>ADD:<住所><CR/LF> |
GS1
JSON, XMLなどを用いないパッキング方法もあります。
RADIREC WSで使用するパッキング
RADIREC WSでは、オリジナルのパッキングルールを使用しています。
Advance: 今後の機能拡張のヒント
基本的な考え方
ComKitのグラフィックモジュールはローレベルでドットパターンの作成に対応します。具体的には、000001110101010101 のような、0と1で構成されている文字列の集合をドットパターンとみなして、画像に変換する機能があります。
API解説
SVG形式でバーコードを得る
解読
解読は、フリーソフトウェアをサーバーサイド、クライアントサイドで走らせるなどの対応です。
医療用GS1の構成
医療用GS1のバーコードは上記にありませんが、これはGS1のバーコード自体はCODE128で表現されるためです。
CODE128には3つのモードがあり、以下の、!記号で始まるキーワードでバーコードの構成方法をコントロールします。
!STARTA !STARTB !STARTC !FNC1 !FNC2 !FNC3 !FNC4 !CODEA !CODEB !CODEC !SHIFT !SPACE
GS1コードはコードCでFNC1を提示することで作成できます。つまり、
\"00112233344\" CODE128 ←普通のCODE128 \"!STARTC !FNC1 00112233344\" ←GS1コードとして解釈できるCODE128
バーコードの表示
バーコードの表示は、コード文字列を与えて、SVG形式ないしはJPEG形式のようなグラフィックスデータを得ることになります。なお、検体ラベル作成も同様の方法で行います。