Orcaを処方箋ワープロとして使ってみる

Orcaは日本医師会が作成・公開している無料で使用できるレセコンソフトです。
今回はこれを処方箋ワープロとして使ってみるためにインストールしてみました。
端末は既存のWindowsマシンを使用することにしました。。
これはその時のメモです。Ubuntu 12.04とORCA Ver4.7を使用しました。内容に関しては保証しません。

目的・方針

入院患者用の内服・注射処方箋を印刷する目的で使用します。Orcaの処方箋サイズはA4ですが当院のカルテはB5サイズなので処方箋サイズの変更が必要でした。
処方内容をカルテに記録するためのラベルのようなものも印刷できるようにします。
レセコンとしては使用しないので処方箋印刷に不要な部分は無視します。Orca vre4.7を使用しました。
こちらのページを参考にインストールしました。

【セットアップ順】

Ubuntu 12.04 をセットアップ→参照: 日医標準レセプトソフト(4.7.0) Ubuntu 12.04 LTS(Precise Pangolin)のインストールドキュメントを参考にインストールしました。
UbuntuをGUIでリモート操作→UbuntuをGUIでリモート操作
TELNETのインストール→TELNETのインストール
windowsからubuntuの共有フォルダにアクセス→windows7からubuntu12.04に作成した共有フォルダにアクセス
ORCAセットアップ→参照: 日医標準レセプトソフト(4.7.0) Ubuntu 12.04 LTS(Precise Pangolin)のインストールドキュメントを参考にインストールしました。
postgresqlリモートアクセス許可&パスワード設定→orcaの入っているubuntuのpostgresqlにアクセスする
ORCA文字コードの変更、ORCA文字コードをEUC-JPからUTF8に変更します→参照: データベース文字エンコーディング変換
IDをフリーに変更→患者IDをフリーで登録可能にする
病院名/病棟情報/医師情報等のセット→病院名/病棟情報等のセット

2台運用の設定→2台運用の設定
オリジナル帳票 プラグイン→オリジナル帳票 プラグイン
処方箋のカスタマイズ→処方箋のカスタマイズ
患者登録→orcaapi12使用
薬剤入力コード登録→orcadrug使用
特定機材コード orcadrug使用

ORCAクライアント設定→ORCAクライアント

「他端末で使用中です。」と表示される場合。→「他端末で使用中です。」と表示される場合。
Orcaデータベースのバックアップとリストア→Orcaデータベースのバックアップとリストア
メモ→メモ
ORCAの薬剤データベースを使って採用薬を検索するソフト→ORCAの薬剤データベースを使って…
ORCAの自作簡易マニュアル→簡易マニュアル
感想→感想
---------------------------------------------------------------------------------------

UbuntuをGUIでリモート操作

自分は通常サーバーにはディスプレイを接続しないで使用するのでリモートからGUIで操作できるようにXmingが使えるように設定しました。
(ただしサーバーがCUIで起動しているとGUI画面は表示されない)

【Ubuntu側の設定】
参考
ubuntu12.04をXmingでリモートコントロール ver2
lightdm.confを編集
$ sudo nano /etc/lightdm/lightdm.conf
そこで,最後に1行空けてから
[XDMCPServer]
enabled=true
を追加する.

そして再起動しておく

【Windows側の設定】
参考
Xming によるORCAサーバーへのXDMCP接続
(1)XmingとXming-fontsのダウンロード
http://www.straightrunning.com/XmingNotes/から取得できます。
ここでは、Xming 6.9.0.24、Xming-fonts 6.9.0.33を利用することにします。

(2)Xmingのインストール
ウィザードに従い、デフォルトのまま進めれば問題ないと思われますが、ここではSelect Additional Tasksで、 Create a desktop icon for XLaunch(上から2番目)を選択しておくことにします。

(3)Xming-fontsのインストール
ウィザードに従い、これもデフォルトのまま進めればOK。

4)XLaunchによる接続設定の作成
デスクトップ上にできたXLaunchのショートカットをダブルクリックして起動します。

Display settingsでは、One Windowを選択。
*同時に2つ以上のウインドウを表示したい場合はディスプレイ番号を変えて作成する

Select how to start Xmingでは、Open session via XDMCP(一番下)を選択。

Configure a remote XDMCP connectionでは、Xクライアント側のマシンのIPアドレスをセット。

Specify parameter settingsでは必要に応じ解像度を設定。
ここでは1280×800を指定しています。 -screen 0 1280 800
省略すると画面一杯のウィンドウサイズになります。
(1280×800ないとORCAの画面が表示しきれない)

Configuration completeでは、Save configurationボタンをクリックして設定内容を保存。
ここでは、orca.xlaunchという名前でデスクトップに作成しています

完了をクリックして終了。

デスクトップのアイコンをクリックするとログイン画面が表示される

おまけ
画面解像度より大きいウィンドウを開く
Additional parameters for Xmingで
「-screen 0 1280 1024」と、画面サイズを指定しても、 画面解像度が「1366×768」の場合、「1280×1024」でウィンドウが開きません。
そういう時は「-scrollbars」を指定します。 「-screen 0 1280 1024 -scrollbars」こうすることで、1280×1024の スクロールバー付きのウィンドウを開くことができます。

-------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------

TELNETのインストール

【Ubuntu側の設定】
sudo apt-get install inetutils-inetd telnetd

で、/etc/hosts.allowに
in.telnetd 192.168.0
を指定して、ローカルIPのみ接続を許可

【windows側の設定】
コントロールパネル→プログラム→Windowsの機能の有効化または無効化
Telnetクライアントにチェック

コマンドプロンプト起動
Telnet 192.168.XX.XX
でログイン画面
ログアウトはlogout

日本語文字化けあり
他のソフト 例)TeraTerm なら文字化けしない

---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------

windows7からubuntu12.04に作成した共有フォルダにアクセス

samba自体をインストールしていなければ
$ sudo apt-get install samba
$ sudo smbpasswd -a <ユーザー名>
パスワード入力が問われるので、パスワードを入れる。Windowsと同じにしておくと再確認されないので便利。 後は、NautilusのGUI操作で共有を有効にする
---------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

orcaの入っているubuntuのpostgresqlにアクセスする

(参考)
2台運用の設定手順

1 postgresq.confファイルの修正
PostgreSQLは、デフォルトでは自ホストからの接続しか許可していない。他ホストからの接続を許可するよう、 /etc/postgresql/9.1/main/postgresql.confを開き、次のように修正する。

listen_addresses = '*' ←コメントを解除し、''内を * に修正

*エディタの開き方
ターミナルを開いて sudo gedit
パスワードを入れれば geditが管理者権限で起動する

2.接続できるクライアントを設定する
他ホストからの接続を許可し、ポートを開けただけでは他クライアントから接続できない。
これは、PostgreSQLの設定ファイルである/etc/postgresql/9.1/main/pg_hba.confにより、接続できるホストを制限しているからである。
よって、接続できるクライアントを設定する。

host all all 192.168.XX.0/24 md5
を追加(XXはサブネット)

3ファイアーウォールの設定
デフォルトでは全て開いている?
ufwを使って設定する
ufwはファイアーウォールを簡単に設定するためのツール 最初からインストールされている
ターミナル起動して
@有効化
sudo ufw enable
(無効化は disable)
A現状確認
sudo ufw status
B基本全て拒否
sudo ufw default DENY
(全て許可は ALLOW)
Cpostgresql用に5432をあける
sudo ufw allow 5432
Dorca用もあける?
sudo ufw allow 8000

4パスワードの設定
orcaのユーザーID orcaに対してパスワードを設定する 次の例ではパスワードはorca123
$ sudo -u postgres psql template1 -c "ALTER USER orca WITH PASSWORD 'orca123';"
ちなみに ORCAのデータベース名はorca ユーザー名もorca

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

患者IDをフリーで登録可能にする

新患者登録は「*」を入れてENTERを押すと連番が生成されるが、患者番号を連番ではなく自由に設定できるようにするには
マスタ登録→システム管理マスタ→1009患者番号構成管理情報
患者番号構成区分を「1」にすると自由構成が選べるので
区分「2」桁数「5」
にして確定
これで新患者登録時に患者番号を直接入力できる
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

病院名/病棟情報等のセット

【医療機関情報】
101 システム管理マスター
管理コード 1001 で病院名設定
病床数を設定しないと入院関係のメニューが表示されない
管理コード 1002 で住所設定
ORCAを再起動

【病棟情報の登録】
101 システム管理マスター
管理コード 5001
病棟番号を入れてenter
病棟名 病棟種別=一般病棟 入院基本料=一番上を選択
追加ボタンを押す

【病室情報の登録】
病室登録の前に病棟を登録しておく必要あり
101 システム管理マスター
管理コード 5002
病棟を選択
新規の場合は選択番号は空白にして 病室番号・収容人数を入れる
追加を押す

【診療科目設定】
101 システム管理マスター
管理コード 1005 診療科目情報 を選ぶ
その下に 診療科目コード があるので
02 を入れてENTER 有効年月日はENTERだけで00000000〜99999999が入る
確定 を押す
次の画面で
診療科名 整形外科   短縮名1 整形外科    短縮名2 整形外科    短縮名3 整
レセ電算コードは 11
同じように
03 で 外科  コードは10

【ユーザー管理 医師登録】
ターミナルを起動
sodo -i
パスワード

gluseradd -file /etc/jma-receipt/passwd -p password userid
例)gluseradd -file /etc/jma-receipt/passwd -p 7777 fuku

これでユーザーは追加されるがまだ使えない

91マスタ登録→101システム管理マスタ→管理コード1010職員情報
左上から右 更に下に向かって順番に設定していく
1 医師  0002 医師氏名 ENTER ←必ず項目設定後ENTERを押す 職員番号は0001がormasterなのでその次から
オペレーターID fuku ←上で登録したID
フリガナ イシ シメイ 
氏名 医師氏名
ここで1回右下の「登録」を押して登録できるか確認
登録できれば 左上で 1 医師 を選べばその右で今入れた番号が選択可能になる。選択すると今入れたデータが表示される
うまくいったらその下のデータを入れていく
[基本情報タグ]
最低限 医事業務 診療行為 にはチェックが必要
登録と入退院登録と入院患者照会も
入院会計照会と入院定期請求も
[個別設定タグ]
院外処方箋発行フラグ 発行する
クライアント印刷 する
ダイアログ表示 する
ぐらいか

【システム管理情報設定で5000医療機関情報−入院基本 を設定】
 新しいレコードを作ればいい 内容はデフォルトでOK これをしないと入院登録できない

【システム管理情報設定で5007入院指示せん設定情報 を設定】
 新しいレコードを作る 入院処方せん 1発行する にかえる あとの内容はデフォルトでOK これをしないと入院処方箋発行できない

【処方箋が印刷できるように設定】
システム管理マスタ→1010職員情報
職員を選んでENTERを押すとその下の部分にデータが入る
個別設定タグを押して
<クライアント印刷>する
<ダイアログ表示>表示する
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

「他端末で使用中です。」と表示される場合。


特定の患者を診療行為などで表示させると「他端末で使用中です。更新はできません。」と表示されます。他の端末、同じ端末で確認しても、その患者は表示されていません。

91 マスタ登録 − 101 システム管理マスタ − 管理コード − 9800 排他制御情報
有効年月日「00000000」〜「99999999」が表示されていない場合はEnter
− 確定 − 情報削除 − F11 一括削除。
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

2台運用の設定

(参考)
2台運用の設定
2台運用の設定

従サーバー
orcaの入っているubuntuのpostgresqlにアクセスする
に従って主サーバーから接続できるように設定する

主サーバー
/etc/jma-receipt/dbgroup.incの設定。ここに従サーバーの設定を入れる

db_group "log" {
priority 100;
type "PostgreSQL";
port "192.168.XX.XX";
name "orca";
user "orca";
password "xxxx";
file "/var/lib/jma-receipt/dbredirector/orca.log";
redirect_port "localhost";
};


dbgroup.incは記述ミスがあると起動に失敗する場合があります。 書き換えたら以下のコマンドで確認すると良いでしょう。
$ sudo -u orca /usr/lib/panda/bin/checkdir -dir /usr/lib/jma-receipt/lddef/directory
記述ミスがなければメインのデータベースの情報が表示されます。
name = [orca]
mlevel = 4
cLD = 44
cBD = 1
cDBD = 0


同期ツールの起動
sudo -u orca /usr/lib/jma-receipt/bin/jma-dbsync.sh
どうやらテーブルのレコード数を調べて、異なったらpg_dumpを起動し、psqlでリストアするらしい

dpkg-reconfigure を実行して dbredirectorを起動する設定に変更します

sudo dpkg-reconfigure jma-receipt
jma-receipt 用に dbredirector をスタートしますか? 「<はい>」を選択します。 その他は基本的にデフォルトで進み終了させます。
はい→いいえ→いいえ

dbredirectorのorca.logファイル
/var/lib/jma-receipt/dbredirector/orca.log

2台運用にすると従サーバーにはアクセスできなくなる
主サーバーにトラブルが発生し、従サーバーを主サーバーとして使いたい場合などのやりかた。
従サーバーにアクセスしたかったら主サーバーを停止(sudo service jma-receipt stop)
従サーバーを再起動
それでもだめなときは、何らかの原因でロックテーブルが残ってしまったことが考えられます。以下のようにして手動でテーブルを削除してください
$ sudo -u orca psql orca -c "drop table montsuqi_redirector_lock_table;"

「主従のデータベースに不整合が発生しています」と出た場合の整合の取り方
従のサーバーが起動しているか、ネットワークに繋がっているかを確認。
$ sudo -u orca /usr/lib/jma-receipt/bin/jma-dbsync.sh

従のORCAのプログラム更新
リモートでは従のORCAに接続できないので、従のサーバー内から端末を起動してローカルで接続して更新する。


-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

自院採用薬 登録

「メンテナンス業務」−「マスタ登録」の中の「点数マスタ」
診療行為コードに薬剤コードを入力 
例)613120003 と入れてEnterでアリナミンFが表示される
右ボックスで04選択
「確定」を押して次画面へ データは何も触らず「入力CD」を押して入力面へ
点数マスタ設定ー入力コード設定 ダイアログが開くので 右側の 入力コード の欄に コードを入力
例)アリナ5 といれてEnter arina5 といれてEnter
「確定」を押して閉じる
「登録」を押すと 確認メッセージが出るので「OK」を選択
これで1薬剤登録完了 後は繰り返す

登録した場合「ア」とか「アリ」で検索するとアリナミンF5mgしか検索されなくなる
「F9拡大検索」を押すと全体が検索される
それで出なければ「F10部分」を押して見る
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

オリジナル帳票 プラグイン

例 スカイエスエイッチカスタマイズ帳票の場合
91マスタ登録 → 201プラグイン
52オリジナル帳票 を選択して 組込 を押す
インストール済み欄に○がつけばOK

01 医事業務→91 マスタ登録→101 システム管理マスタ
1031 出力先プリンタ割り当て情報 に対して以下のプログラム登録の処理を行います。
・プログラム登録設定情報
「外来」
帳票名       :処方せん(院外)
プリンタ名       :任意に設定
標準プログラム名    :ORCHC19
独自開発プログラム名 :A00000H02
※上記の入力を行った後に独自開発プログラム入力フィールド右横のプログラムチェックボタンを必ずクリックして下さい。
(4) 再起動
システムの再起動を行って下さい。

帳票のカスタマイズ(診療録・診療費請求書兼領収書・処方箋・薬剤情報)
スカイエスエイッチカスタマイズ帳票
江頭整形 外科医院→ORCA→帳票のカスタマイズ

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

帳票のカスタマイズ

ORCAの処方箋はA4サイズだがB5のものが必要だったので、カスタマイズが必要だった。
必要なのは入院処方箋、入院注射箋、カルテ添付用のリスト。
その1:なんちゃってカスタマイズ帳票 ・・・ORCA 帳票を無理やりA4→B5に変更
A4出力の帳票をB5にしたい場合カスタム帳票を作成して組み込む必要がある。
ただカスタム帳票作成はかなり敷居が高い。そこで、応急で変更する方法。
することは システムの****.redファイルを書き換える という荒業(redファイルは帳票のデザインを設定すファイル)

システムが使うredファイルは user/lib/jma-receipt/form にある。
91マスタ登録→101システム管理情報設定→1031出力先プリンタ割当情報
ここで印刷プログラム名を確認
ORCを除いたプログラム名.red が目的のファイルになる。
例)入院処方箋ならORCHC501 なので HC501.red

MONPEをroot権限で起動する。
$ sudo MONPE
user/lib/jma-receipt/form に移動して、目的のファイルを開く

ツールボックスを選択状態にすると上にメニューが表示される。
ファイル→読み込み でファイルを読み込む。
メニューバーの ファイル→ページ設定
用紙のサイズをB5に変更、余白は全てゼロにする。
倍率を70%ぐらいに設定
保存する。
ただしこの方法だとORCAがアップデートされた場合に元に戻る可能性有り。

(注1)MONPEは帳票設計(MONPE: MONTSUQI Printing Environment)開発支援ツール
ORCAにバンドルされているので、ORCAが動いているなら既にインストールされている。

その2;まじめにカスタマイズ帳票作成
(1)ソースコードの入手
http://cvs.orca.med.or.jp/cgi-bin/cvsweb/jma-receipt/cobol/common/

エディタ gedit はそのままでは日本語が文字化けする
自動判定させたい文字コードを自分で登録すれば、文字化けを回避できます。端末で下のコマンドを実行。
$ gsettings set org.gnome.gedit.preferences.encodings auto-detected "['UTF-8','CURRENT','SHIFT_JIS','EUC-JP','ISO-2022-JP','UTF-16']"
ついでに文字コードを指定して保存できるように
$ gsettings set org.gnome.gedit.preferences.encodings shown-in-menu "['UTF-8','SHIFT_JIS','EUC-JP','ISO-2022-JP','UTF-16']"

ファイルの文字コードは EUC-JP にしないとエラーが出る。

下記のようなファイルを作成して一つのフォルダーに入れておく。
-----------------------------------------------------------------------------------
入院用内服処方箋印刷カスタマイズ
redファイルを変更してB5に入るようにすれば良いので、CBLファイルの変更は基本的に不要。
ただしプログラム名が変わるのと、カスタマイズ帳票なのでその指定部分の変更は必要。
Revision 1.21 を使用
ORCHC501.CBL を AKHC501.CBL にリネーム
HC501.red を AKHC501.red にリネームしレイアウト変更

AKHC501.CBL
      ********************************************************************
       IDENTIFICATION          DIVISION.
       PROGRAM-ID.             ORCHC501.
      *****************************************************************
PROGRAM-IDを書き換え
       PROGRAM-ID.             AKHC501.
.redファイル指定書き換え
            MOVE   "HC501.red"         TO  MKPRT-DIA
から
            MOVE   "AKHC501.red"         TO  MKPRT-DIA
に

            CALL   "ORCSMKPRT1"        USING
から
            CALL   "ORCSMKPRTSITE1"     USING
に
-----------------------------------------------------------------------------------
入院用注射処方箋印刷カスタマイズ
redファイルを変更してもB5に入らないので桁数の変更が必要だった。
Revision 1.18 を使用
ORCHC502.CBL を AKHC502.CBL にリネーム
HC502.red を AKHC502.red にリネーム
HC502.INC を AKHC502.INC にリネーム
AKHC502.CBL
      ********************************************************************
       IDENTIFICATION          DIVISION.
       PROGRAM-ID.             ORCHC502.
      *****************************************************************
PROGRAM-IDを書き換え
       PROGRAM-ID.             AKHC502.
.redファイル指定書き換え
            MOVE   "HC502.red"         TO  MKPRT-DIA
から
            MOVE   "AKHC502.red"         TO  MKPRT-DIA
に
            CALL   "ORCSMKPRT1"        USING
から
            CALL   "ORCSMKPRTSITE1"     USING
に

52行  "HC502.INC" → "AKHC502.INC"


208行  PIC X(106) → PIC X(96)
210行  PIC X(70) → PIC X(60)
215行  PIC X(100) → PIC X(90)
827行  IF WRK-TNS-NAME(71:) → IF WRK-TNS-NAME(61:)
831行  AND ( WRK-TNS-NAME(101:) → AND ( WRK-TNS-NAME(91:)
835行  IF  WRK-TNS-NAME(101:) → IF  WRK-TNS-NAME(91:)
837行  MOVE  WRK-TNS-NAME(101:) → MOVE  WRK-TNS-NAME(91:)

AKHC502.red
レイアウトを変更する
辞書の NAIYO のバイト数を90に変更

AKHC502.INC内
20行 PIC X(106) → PIC X(96)


入院用注射処方箋V2
内服処方では 処方内容*7 と書くと 7日分 と印刷されるが
注射処方では 処方内容*7 と書くと 日数指定の無いものが7枚印刷される
実運用に使えないので内服と同じように日数表示になるように変更
AKHC5020.CBL
723行目
                   MOVE    LNK-ORDERPRT-DAY (1 IDX2)   TO  WRK-KAISU
              ↓
                   MOVE    1   TO  WRK-KAISU
で1枚のみ印刷になる
919行
           ADD     1                   TO  IDX-LINE 	←---で最後に空行を入れている
           PERFORM 2202-DAY-HENSYU-SEC      ←-------次行に自作の日数表示の処理を入れる

日数を書きこむと1行増えるので内容が1枚に入るギリギリの場合日数が表示されない。 934行 を変更して1行早く改ページするようにする
           IF     (IDX-S   +   IDX-LINE)   >   WRK-IDX-MAX
                       ↓
           IF     (IDX-S   +   IDX-LINE)   >=   WRK-IDX-MAX
処方日 日数 処理ルーチン 末尾に追加
      *****************************************************************
      *    日・回数編集処理
      *****************************************************************
       2202-DAY-HENSYU-SEC             SECTION.
      *
          MOVE    ZERO                TO  WRK-KAISU
          MOVE    ORCHC502-SRYYMD     TO  WRK-SRYYMD
          PERFORM VARYING     IDX2    FROM    1   BY  1
                   UNTIL       IDX2    >   31
               IF      LNK-ORDERPRT-DAY (1 IDX2)   >   ZERO
                   MOVE    IDX2                    TO  WRK-DAY
                   MOVE    LNK-ORDERPRT-DAY (1 IDX2)   TO  WRK-KAISU
               END-IF
           END-PERFORM
      *
           MOVE    SPACE               TO  WRK-NAIYOU
                                               (IDX-PAGE IDX-LINE)

           MOVE    WRK-DAY           TO  WRK-KAISU-Z9
           MOVE    WRK-KAISU-X         TO  WRK-MOJI
           PERFORM 500-HENKAN-SEC
           MOVE    WRK-ZENKAKU-G(1:6)  TO  WRK-NAIYOU
                                               (IDX-PAGE IDX-LINE)(39:)
           MOVE    "日から"
                                           TO  WRK-NAIYOU
                                               (IDX-PAGE IDX-LINE)(45:)
           MOVE    WRK-KAISU           TO  WRK-KAISU-Z9
           MOVE    WRK-KAISU-X         TO  WRK-MOJI
           PERFORM 500-HENKAN-SEC
           MOVE    WRK-ZENKAKU-G(1:6)  TO  WRK-NAIYOU
                                               (IDX-PAGE IDX-LINE)(55:)
           MOVE    "日分"
                                           TO  WRK-NAIYOU
                                               (IDX-PAGE IDX-LINE)(61:)
           .
       2202-DAY-HENSYU-EXT.
           EXIT.
-----------------------------------------------------------------------------------
入院用お薬手帳印刷カスタマイズ
切り取ってカルテに貼り付けるためにB5用紙左端に1列で印刷されるようにする。カルテの幅に合わせて印刷桁数を減らす。
ORCHCN62.CBLのソースは
http://cvs.orca.med.or.jp/cgi-bin/cvsweb/jma-receipt/cobol/common/#dirlist
で入手 Revision 1.15 を使用
ORCHCN62.CBL を AKHCN62.CBL にリネーム
HCM62.red を AKHCM62.red にリネーム
HCM62.INC を AKHCN62.INC にリネーム

AKHCN62.CBL
      ********************************************************************
       IDENTIFICATION          DIVISION.
       PROGRAM-ID.             ORCHCN62.
      *****************************************************************
のPROGRAM-IDを変更
      ********************************************************************
       IDENTIFICATION          DIVISION.
       PROGRAM-ID.             AKHCN62.
      *****************************************************************
ファイル指定部分を書き換える
           MOVE    "HCM62.red"     TO  MKPRT-DIA
を
           MOVE    "AKHCM62.red"     TO  MKPRT-DIA
に
      *    帳票領域

           COPY    "HCM62.INC".
を
           COPY    "AKHCN62.INC".
に
      *****************************************************************
      *    帳票出力処理
      *****************************************************************
           CALL   "ORCSMKPRT1"         USING
を
           CALL   "ORCSMKPRTSITE1"     USING
(カスタマイズ用再印刷プログラム)に変更
【表示桁数変更】
区切り線の長さは229行目のアンダーライン文字列の削除で対応できそう 5文字分減らす
      *****************************************************************
      *    帳票文字編集処理
      *****************************************************************

           COMPUTE IDX-KET1            =   54  -   WRK-M-KETA
                                           ↓
           COMPUTE IDX-KET1            =   44  -   WRK-M-KETA
これは用量を次行に移す時の判断桁数、薬剤名がこの桁数を超えたら一つ下の行に移す
      *****************************************************************
      *    帳票文字編集処理
      *****************************************************************
 
           MOVE    50                  TO  MAX-GYO
         ↓
           MOVE    40                  TO  MAX-GYO
これは薬剤名の1行表示可能桁数。これを超えたら次行に残りを移動

一列に印刷する
      *****************************************************************
      *    頁チェック 処理
      *****************************************************************
       250-PAGE-CHK-SEC            SECTION.
      *
           EVALUATE    TRUE
      *        ページ件数を超えていたら印刷
               WHEN    CNT-LINE            =    MAX-LINE
                   PERFORM 400-PRT-WRITE-SEC
                   INITIALIZE                  HCM62
                   MOVE    ZERO            TO  CNT-LINE
                   PERFORM 410-HEAD-SET-SEC
      *        WHEN    CNT-LINE            =   MAX-LINE2←――――――――――コメントアウト
      *        半ページ件数を超えていたら改ページ
      *            PERFORM 410-HEAD-SET-SEC←――――――――――――――――コメントアウト
           END-EVALUATE
      *
           COMPUTE CNT-LINE    =   CNT-LINE    +   1
      *
           .
       250-PAGE-CHK-EXT.
           EXIT.
      *
234行目
       01  MAX-LINE                PIC 9(03)   VALUE    68.
                                                        ↓
       01  MAX-LINE                PIC 9(03)   VALUE    58.

AKHCN62.redを編集
B5にして左側に縦一列に並べる
辞書でOCCURSを68→58に しようとしてもできないので オブジェクトを削除する。
辞書のSENのバイト数を54→44に減らす
文字列編集モードでNAIYOU1とSENを5文字減らす

AKHCN62.INCを編集
SENのバイト数を55から44に変更
-----------------------------------------------------------------------------------
インストール
作成したファイルを適当なフォルダーにまとめて入れる。install.shも入れる。
sudo sh install.sh

CBLファイルを編集した場合は
ORCAを再起動
sudo service jma-receipt stop
sudo service jma-receipt start

redファイルのみの編集の場合は、再起動は不要

作成したものを置いておきます 無保証です。ORCA4.7用
AKHC.tar.gz、ORCA4.8用AKHC48.tar.gz

AKHC501.CBL  入院用内服処方箋印刷 B5サイズ

AKHC502.CBL  入院用注射処方箋印刷 B5サイズ
AKHC5020.CBL  入院用注射処方箋印刷修正版 処方日数追加

AKHCN62.CBL  入院用お薬手帳印刷 B5サイズ1列印刷
AKHCN620.CBL  入院用お薬手帳印刷修正版 時々印刷されないデーターがあることの修正

01 医事業務→91 マスタ登録→101 システム管理マスタ
1031 出力先プリンタ割り当て情報 に対して上記のプログラム登録の処理を行います。
「入院」タブを押す
入院処方箋の行 ORCHC501 の右に AKHC501 を入れて○をチェックする
注射処方箋の行 ORCHC502 の右に AKHC5020 を入れて○をチェックする
お薬手帳の行 ORCHCN62 の右に AKHCN620 を入れて○をチェックする
「確定」を押す
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

メモ

ORCAサーバーの再起動
$ sudo service jma-receipt restart

入力コードの登録されているテーブル
tbl_inputcd

cdsyu は NOT NULL :J=カタカナ A=アルファベット
inputcd は 検索に使用する文字列
英数なら半角 カナは全角 かなも全角 漢字も可能 全角に英数を含める場合は全角にする 全角と半角の混在は不可
全角は5文字まで 半角は20文字まで
同じ検索ワードは2つは登録できない

srycd は NOT NULL : 薬剤コード

creymd はフィールド名から考えて作成日
upymd uphms は更新日と時刻 と思われる
creymd と upymd は同じ日付がはいる
手作業で更新を行った場合コードを1個だけ変更してもその薬剤のコードは全て書き換えられる。多分全削除して書き込みなおしていると思われる。
upymd uphms は 点数テーブルに同じフィールドがあり、同時に更新されるらしい。ただし upymd はタイミングで1秒ずれることがある。
ちなみに、手作業でコード入力する場合 有効期限の違う部分を選んでも 登録コードは表示される。
tbl_inputcd と tbl_tensu での upymd uphms は異なっても問題ない模様 なので tbl_tensu の書き換えはしないことにする

点数テーブル
tbl_tensu

srycd コード 6で始まるのが医薬品 
ykzkbn 1:内服 4:注射 6:外用
kouhatukbn 0:後発ではない 1:後発 2:後発のある先発 7:先発薬のない後発薬

ID検索
tbl_ptnum 患者IDと内部用IDの対応
内部IDを調べる SELECT ptid FROM tbl_ptnum WHERE ptnum = '患者ID'

tbl_ptinf 患者情報(内部IDと対応する)
名前を書き換える  UPDATE tbl_ptinf SET name = '氏名' WHERE ptid = '内部ID'

他テーブル
tbl_sryact 処方内容? 月単位で管理されている 処方日/処方日数はわからない 1レコードに5回分の内容のフィールドがある
  処方日/処方日数を知るにはtbl_sryacct_mainでzainumの同じフィールドを検索
  フリーコメントの場合はtbl_ptcomでzainumとinputnumの数値で検索
tbl_sryacct_main 31日分のフィールドあり 外来入院 処方日/処方日数が分かる
tbl_jyurrk 処方日? 受信履歴 入院外来両方 nyugaikbn:1/2 入院/外来? zainumフィールドは15個ある
tbl_kyuseirrk 旧姓リスト
tbl_nyuinacct  31日分のフィールドあり 入院
tbl_lock 排他制御監視

最近処方をした患者IDを検索する場合
処方日で検索or一覧表示
tbl_jyurrk で ptid を sryymd=?????? で検索
tbl_ptnum で ID を検索

IDを指定して処方内容を検索する場合
tbl_ptnum で ID から内部ptidを検索
tbl_jyurrk を ptid と年月 で検索 処方日を調べる
tbl_sryact を ptid 年月 zainum で検索
tbl_tensu を srycdで検索

Q 保険薬以外で処方せんを作る方法は

患者保険登録「自費」を作る
保険 自費にて
.210      * 内服薬剤  ← 必ず必要
059000190 3  バイアグラ  ←059****** で点数マスタ登録
kome * 10   ○○のときに
.820      * 処方箋料  ←自動算定されないので手入力
120003010   処方せん料(その他)(後発医薬品を含まない)

* 059******で登録したものは薬剤としては出てこないので、F6診療行為 を押して出す

レセコードに存在しない薬剤(注射)の登録(インフルエンザワクチンなど)
内服なら特定機材として登録(059で始まるコード)すれば処方箋に記載できるが、 注射薬は特定機材として登録しても表示できるだけで印刷されない。
仕方ないので本来してはいけないことだが、空いているレセコード部分に登録する。
登録は 91マスター登録→102点数マスター
 診療行為コードに先頭が6で使用していないコードを入れる。(6で始まるのが薬剤コード、6で始まる最小のコードが610010002)
 コードを入れてEnterを押すと「警告!・・・・」が出るが「閉じる」を押せば処理は継続できる
 有効年月日を00000000 99999999 にする Enterだけ押せば自動で入る
 「確定」を押せば編集画面に変わる
 「カナ名称」「漢字名称」を入れる
 「薬価基準」に薬価基準コードだがさしあたって 000000000000 (12桁)
   インフルエンザの薬価基準コードは 631340F***** (*****は商品で異なる)なので631340F00000とか
 「単位コード」「薬剤」を選ぶ
 「登録」を押すと「警告!・・・・」が出るが「閉じる」を押してもう一度「登録」を押せば登録できる
 後は入力コードを付加すればOK
削除は 91マスター登録→102点数マスター
 コードを入れて編集画面を表示
 下段にある「削除」を押す「警告!・・・・」が出るが「閉じる」を押してもう一度「削除」を押せば削除できる
 入力コードが設定してある場合はそれも同時に削除される。

Ubuntu 12.04 LTS コマンドライン
【シャットダウン】
sudo shutdown -h now
-hを付けると電源も切ってくれる

【システムを再起動する】
sudo shutdown -r now

医薬品HOTコードマスター
MEDIS標準マスターのページから

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

Orcaデータベースのバックアップとリストア

(1)バックアップ
# service jma-receipt stop
# cd/home/orca
# sudo-u orca pg_dump -0 orca > /tmp/orca.dump
# service jma-receipt start
(2)リストア
# service jma-receipt stop
# cd/home/orca
# sudo -u orca dropdb orca
# jma-setup --noinstall
# sudo -u orca psql -e orca < /tmp/orca.dump
# jma-setup
# service jma-receipt start
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

ORCAクライアント

monsiaj(Java版日医標準レセプトソフトクライアント)
クライアントソフトをダウンロードして端末にセットアップします。
ZIPを適当な場所に解凍して jmareceipt.jar へのリンクをデスクトップに作成します。
JAVAのインストールも必要です。

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

ORCAへの患者登録

最初に患者情報の登録が必要ですが、レセコンから抜き出した3万件のデータを手入力するのはしたくなかったので登録ソフトを作成しました。
日医標準レセプトソフト API API12 患者登録 を使用しています。
患者ID、漢字氏名、カナ氏名、性別、生年月日 の含まれるCSVファイルを読み込んでORCAに登録します。
詳しい使用方法はプログラムを起動してメニュー→説明 で表示されます。
処理は データのチェック→ORCAに既に登録されているかチェック
→未登録なら登録/既登録で内容が異なれば変更/既登録で内容が一致すれば何もしない
となります。
作成したものを置いておきます 無保証です。orcaapi12.zip
Visual Basic 2012 で作成しました
簡単な操作説明です。orcaapi12.pdf

転送部分のコードです。医師会のページにあったC#のコードを参考にしています。
この時はVer1のAPIを使ったのですが医師会のページでは既にVer1の記載は抹消されてしまっています。
    'sex 1:男2:女 cls=01/02
    Private Function OrcaApi12(ByVal cls As String, ByVal ID As String, ByVal Name As String, ByVal KanaName As String, _
                               ByVal BirthDay As String, ByVal sex As String, ByRef restr As String) As Boolean
        Dim HOST As String = TextBox3.Text
        Dim PORT As String = TextBox4.Text
        Dim USER As String = TextBox5.Text
        Dim PASSWD As String = TextBox6.Text
        Dim CONTENT_TYPE As String = "application/xml"
        Dim URL As String = "http://" & HOST & ":" & PORT & "/orca12/patientmod?class=" + cls
        Dim rt As Boolean

        Dim CR As String = vbCr & vbLf

        Dim record_in As String = CR
        record_in = record_in & "      <record>" & CR
        record_in = record_in & "        <record name=""patientmodreq"">" & CR
        record_in = record_in & "          <string name=""Patient_ID"">" & ID & "</string>" & CR
        record_in = record_in & "          <string name=""WholeName"">" & Name & "</string>" & CR
        record_in = record_in & "          <string name=""WholeName_inKana"">" & KanaName & "</string>" & CR
        record_in = record_in & "          <string name=""BirthDate"">" & BirthDay & "</string>" & CR
        record_in = record_in & "          <string name=""Sex"">" & sex & "</string>" & CR
        record_in = record_in & "        </record>" & CR
        record_in = record_in & "      </record>" & CR
        record_in = record_in & "      "

        Dim BODY As String = "<data>" & record_in & "</data>"
        Dim record_in_byte As Byte() = System.Text.Encoding.UTF8.GetBytes(BODY)

        Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create(URL), HttpWebRequest)

        req.Method = "POST"
        req.ContentType = CONTENT_TYPE
        req.ContentLength = record_in_byte.Length
        req.Credentials = New NetworkCredential(USER, PASSWD)

        Console.WriteLine(BODY)

        Dim res As HttpWebResponse = Nothing
        restr = ""
        Try
            Dim reqstream As Stream = req.GetRequestStream()

            reqstream.Write(record_in_byte, 0, record_in_byte.Length)

            reqstream.Close()

            System.Threading.Thread.Sleep(Wait)
            '連続で登録すると
            '[基礎になる接続が閉じられました: 維持される必要があった接続が、サーバーによって切断されました]
            'というエラーが出て登録できない (1個目は登録できるが2つ目以降でエラーになる)
            '解決策不明だが ここにウエイトを入れると良さそう
            '一応100msに設定 短くすると飛び飛びで登録されたりする
            res = DirectCast(req.GetResponse(), HttpWebResponse)

            restr = restr + res.ResponseUri.ToString + vbCrLf + res.StatusDescription
            rt = True

        Catch exc As WebException
            If exc.Status = WebExceptionStatus.ProtocolError Then
                Dim err As HttpWebResponse = DirectCast(exc.Response, HttpWebResponse)

                Dim errcode As Integer = CInt(err.StatusCode)

                Console.WriteLine(err.ResponseUri)
                Console.WriteLine("{0}:{1}", errcode, err.StatusDescription)
                restr = restr + err.ResponseUri.ToString + vbCrLf + errcode.ToString + vbCrLf + err.StatusDescription

                err.Close()
                rt = False
            Else
                Console.WriteLine(exc.Message)
                restr = restr + exc.Message
                rt = False
            End If
        End Try

        If res IsNot Nothing Then
            Try
                Dim str As Stream = res.GetResponseStream()
                Dim strread As New StreamReader(str)

                restr = restr + strread.ReadToEnd()
                Dim FOO As String = strread.ReadToEnd()

                strread.Close()
                str.Close()

                res.Close()

            Catch ex As Exception

                rt = False
            End Try
        End If


        Return rt
    End Function
-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

薬剤入力コード登録

ORCAには薬剤マスターが入っているので薬剤名検索ができますが、検索すると大量のリストが表示されてしまいます。
採用薬にマークを付けて優先的に表示される機能があればいいのですが、そのような機能はありません。
入力コードを設定してあると、先ず入力コードを検索して一致するものがあるとそれを表示、一致するものが無ければ全体から検索
という仕様のようなので、採用薬にのみ入力コードを設定することで優先的に表示されるようにすることにします。
手作業での登録は
91マスター登録→102点数マスター → 薬剤コードを入れる(薬剤名検索可能)→確定→ 点数マスタ設定画面 入力CDを押す→入力コード設定画面にコードを入れる
となります。
数が少なければいいのですが、1000件近くあると大変なので、入力コードを管理編集するソフトを作りました。
機能は大きく2つで
1:新規導入時に採用薬リストを読み込んで入力コードを付けて登録する。
2:新規採用薬があった時に、新しくコードを付けて登録する、採用停止になったものを削除する。
です。
入力コードは重複が許されないので、コード入力時にチェックします。
レセコン用のコードは決まっていることが多いですが、実際の薬剤名とは異なることがありコードを全て覚えている事務員さん以外だと 入力しにくいので薬剤名先頭3文字を自動的にコードとして作成する機能があります。
ORCAのデータベースを直接読み書きするので若干危険なソフトです。またORCAのバージョンアップで使えなくなる可能性があります。
作成したものを置いておきます 無保証です。
orcadrug.zip
Visual Basic 2010 で作成しました
postgresqlに接続するために「Npgsql.dll」が必要です。32Bit版 .NET Framework 4.0 対応のものを使用してください。
簡単な操作説明です。orcadrug.pdf
おまけ
orcadrugsub
orcadrugに読み込ませるCSVファイルを作成するために使用しました。
新規導入時に薬剤名からコードを調べる必要があったのですが、その手間を少しでも省くために作成したソフトです
薬剤名や薬剤コードからそれらしい薬剤を検索表示します。特に薬剤名しか分からない場合に便利です。
orcadrugsub.exeのみ置いておきます、orcadrugがインストールされていれば動作するはずです。
orcadrugsub.zip
使用方法はプログラム内の「説明」を見てください。自分で使うために作ったものなので作りは雑です。

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

ORCAの薬剤データベースを使って採用薬を検索するソフト

上記のorcadrugを使ってORCAに採用薬を登録した状態で、採用薬検索&薬剤辞書として使えるソフトを作成しました。
院内薬剤集の電子版のようなものです。
機能は主に2つで
1.薬剤名で薬剤を検索する。採用されているか確認できる。同効薬が採用されていればそれを表示する。
2.薬効で採用薬をリスト表示する。
です。
ORCAに薬剤情報が登録されていればそのデータを表示します。
PCがインターネットに繋がっていれば、Pmda(医薬品医療機器総合機構)http://www.info.pmda.go.jp/を検索して能書を表示できます。
以前冊子の院内医薬品集を作成したのですが、採用薬が変わったりしてすぐ古くなってしまうので、 パソコンで使えるものにしてみました。
作成したものを置いておきます 無保証です。
OrcaSyohou.zip
Visual Basic 2010 で作成しました
ORCAのデータベースを直接読みに行きます。
postgresqlに接続するために「Npgsql.dll」が必要です。32Bit版 .NET Framework 4.0 対応のものを使用してください。
使用方法はプログラム内の「説明」を見てください。
簡単な操作説明です。OrcaSyohou.pdf
基本的にORCAが動いていなければ動作しませんが、設定によってデータを端末にキャッシュすることも出来るので、 時々データを更新すれば常時接続していなくても使用できるようにもできます。
おまけで、採用薬を一覧印刷する機能もつけました。印刷物が必要な場合に使用します。

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

簡易マニュアル

他の職員にも使えるように簡易マニュアルを作成しました。
当院用に作ったので汎用性は有りませんが参考程度に。
病室は各病棟1室だけ登録してあります。
病棟を指定する時に部屋番号で指定する必要があるのでそのようにしました。
今のところ問題ありませんが、そのうちエラーの元になるかもしれません
orcamanual.pdf

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

感想

処方箋が印刷できれば良いかと思って始めましたが、レセコンなど触ったことも無く動作させるのに苦労しました。
今でも医事についてはよく分かりません。
ここまで作って思えば、ORCAを使わずに自分でスクラッチで書き起こした方が楽に使いやすいソフトが作れたような気がします。(作りませんけど)
別記事のOpenDolphinセットアップ時の参考にはなったのでそれはそれで良かったかも知れません。
作成した頃はVer4.7だったのですが、もうすぐサポート終了です。あれだけ苦労したのに・・・

-------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------

TOPに戻る
2015/3/2