帳票設計
帳票開発ツール
日医標準レセプトソフト(以下、日レセ)の帳票設計・印刷は、MONPEとdia-orcaというオープンソースの帳票開発ツールを用いて実現している。
dia-orcaは、Ubuntu 12.04 LTS(Lucid Lynx)からサポートされません。monpeへの変換・移行をお願いします。
MONPE概要
- 帳票デザインツールであるmonpe(以下、monpe)を使用して帳票を設計する。設計した帳票のことを「帳票テンプレート」と呼ぶ。
- 帳票テンプレートから日レセ(COBOL)で利用できるデータ構造(COPY句)を自動生成する。
- 日レセが提供しているORCSMKPRTというサブプロと、(2)で自動生成したCOPY句を利用して帳票印刷処理を開発する。
2.で自動生成したCOPY句を以下に示す。
プログラムリスト1.(2)で自動生成したデータ構造の例
01 HCM06V02. 02 HCM06V02-TEISYUTUSAKI PIC X(6). 02 HCM06V02-PTNUM PIC X(20). 02 HCM06V02-SRYY PIC X(2). 02 HCM06V02-SRYM PIC X(2). 02 HCM06V02-PREFNUM PIC X(2). (省略)
3.のプログラム例を以下に示す。
プログラムリスト2.帳票印刷処理の例
(省略) WORKING-STORAGE SECTION. * 2.で自動生成したCOPY句 COPY "COPY.INC". * 印刷パラメタ COPY "CPORCSMKPRT.INC". * (省略) * INITIALIZE ORCSMKPRTAREA MOVE "HC01.sh" TO MKPRT-ID * 帳票テンプレート名 MOVE "HCM06V02.red" TO MKPRT-DIA MOVE SPACE TO MKPRT-DEF * 2.で自動生成したCOPY句のデータ構造名 MOVE HCM06V02 TO MKPRT-DAT MOVE SYS-1031-PRTNM(2) TO MKPRT-PRTNM CALL "ORCSMKPRT" USING ORCSMKPRTAREA
- 帳票印刷の要求があると、日レセが提供しているサブプロにより以下を行う。
- 帳票テンプレートに入力するデータをファイルに書き出す。
- 帳票テンプレートのパスと、データファイルのパスを与えて、帳票印刷ツールであるred2psを実行。
- 帳票テンプレートとデータファイルを合成して、PostScript形式の印刷イメージを生成。
- プリンタスプールソフトウェア(lpr、lprngなど)が、印刷イメージをプリンタに送る。
操作方法などの情報
monpeの操作方法などの詳しい情報は、MONPEのプロジェクトページを参照して下さい。
dia-orcaで設計した帳票の移行
MONPEで設計した帳票とdia-orcaのものとは互換性がない。しかしながら、dia-orcaで設計した帳票をMONPEの形式に変換するツールがある。このため、近い将来、日レセの帳票は全てMONPEで設計したものになるだろう。
それでは、dia-orcaで設計した帳票をMONPEの形式に変換する方法について説明する。
まず,dia-orcaで設計した帳票に関係する以下の3つのファイルを用意する。
- DiaのXMLデータ(*.dia)
- COBOLデータフォーマット規定ファイル(*.def)
- COPY句(*.INC)
以下のコマンドにより、dia-orcaで設計した帳票をMONPE形式に変換する。
$ dia2red -f (1) -d (2) -i (3) -o <MONPE形式ファイル名>
1〜3は、上記のファイルに対応する。<MONPE形式ファイル名>は、MONPE形式に変換後のファイル名である。MONPE形式の帳票は拡張子は、.redである。しかし、この変換ツールだけでは不完全で、変換後のファイルをmonpeで開き、保存し直す必要がある。
多くの場合、dia-orcaで設計した帳票に関係するファイルは一箇所に固まっているので、スクリプトを用いて一括変換できる。以下に,一括変換を行うrubyスクリプトを挙げる.
プログラムリスト3.一括変換スクリプト: dia2reds.rb
#!/usr/bin/ruby -Ke ############################################################ # パス設定 - 環境に合わせる。 ORCA_DIR = "/usr/local/orca/" FORM_DIR = ORCA_DIR + "form/" DEF_DIR = ORCA_DIR + "record/" INC_DIR = ORCA_DIR + "cobol/copy/" OUT_DIR = "/tmp/dia2red/" # 予め作成しておく ############################################################ # 処理 TMP_FILE = "/tmp/dia2reds.tmp" DIA_EXT = ".dia" DEF_EXT = ".def" INC_EXT = ".INC" RED_EXT = ".red" CONVERT = "dia2red" form_list = Dir::glob(FORM_DIR + "*" + DIA_EXT) form_list.each do |form_path| form_id = File.basename(form_path, DIA_EXT) def_path = DEF_DIR + form_id + DEF_EXT inc_path = INC_DIR + form_id + INC_EXT print form_id msg = "" if FileTest.exist?(def_path) and FileTest.exist?(inc_path) out_path = OUT_DIR + form_id + RED_EXT system("#{CONVERT} -f #{form_path} -i #{inc_path} -d #{def_path} -o #{out_path} > #{TMP_FILE}") if FileTest.zero?(TMP_FILE) msg << " - Ok" else msg << " - Error : convert failed." end File.unlink(TMP_FILE) else msg << " - Error : can't find " if !FileTest.exist?(def_path) msg << def_path + " " end if !FileTest.exist?(inc_path) msg << inc_path + " " end msg.chop! # Delete last space. end print msg + ".¥n" end
MONPEでは、dia-orcaからの以下の変更点により、dia-orcaで設計した通りに帳票が印刷できない。
- 右寄せの文字位置が設計時と印刷時で誤差があるバグを修正
- 埋め込み時の半角ASCIIを全角に変換する機能の廃止
このため、MONPE形式に変換後の帳票をdia-orcaで設計した通りに印刷するには、monpeを使用して以下の修正が必要になる。
(1) 右寄せを指定している文字オブジェクトの位置を修正
MONPEでは,帳票の設計時と印刷時の印刷結果が等しくできている。しかし、dia-orcaで設計した帳票は、右寄せの文字位置が設計時と印刷時で異なる。このため、dia-orcaで設計した帳票は、それを考慮して、設計時は右寄せ文字を少しずらして配置し、印刷時に予定通りになるように設計してある。
このような帳票をMONPE形式に変換後、MONPEで印刷した場合、設計した通り、文字位置がずれたまま印刷されるので、右寄せの文字位置を適宜修正する必要がある。
この際、red2testというテスト印刷ツールを使用すれば、仮データを帳票に入力して印刷でき、完成イメージを手軽に確認できるので便利である。
(2) 半角ASCIIを全角に変換する処理の実装
dia-orcaでは、帳票テンプレートとCOBOLデータの合成の際に、ORCAテキストオブジェクトの「ORCA半角」のプロパティを「いいえ」にすれば、COBOLデータ中の半角ASCII文字を全角文字に変換する機能を持っていた。
しかし、MONPEはこの機能を廃止した。このため、COBOLデータ中の半角ASCII文字を全角文字に変換したければ、日レセ(COBOL)で、その処理を行わなければならない。日レセでは、半角文字を全角文字に変換するサブプロを用意してあるので、それを用いれば容易に実現できる。関連ファイル名を以下にあげる。
- ORCSKANACHK.CBL
- CPORCSKANACHK.INC