« メモ欄の自動セーブ | トップページ | 新規カルテにテキストスタンプ挿入 »

2009年6月13日 (土)

カルテ検索機能

「引っ越すことになったので,次回受診時までに紹介状を書いて欲しい」という患者さんがいらっしゃったのだが,不覚にも誰だったか忘れてしまった。少し焦ったが,確かカルテに「引っ越しするので〜」と記録していたはずなので,「引っ越し」でカルテ検索して見つけることができた。カルテ検索機能を作っておいて良かったと思った。
 カルテ検索機能は,記載の古い方から検索するように作っていたが,今回,新しいものから開始した方が効率がよいことが分かった。そこで,新しい記載から検索するように書き直した。

 

delegater/DocumentPeekerDelegater.java

public Collection getPatientOfKarte() {
    if (endModuleId < 0L) return null; // 数えきった場合だけ null が返る

    List pm = new ArrayList();
    Set karteId = new HashSet();
    // 新しい module から検索していく
    Long startModuleId = endModuleId - increaseStep;
    if (startModuleId < fromModuleId) startModuleId = fromModuleId;
    List mc = getService().getModuleModel(startModuleId, endModuleId);
    // soaSpec, pSpec は getFreeText 必要。それ以外は model内容が toString() で取れる。
    for (ModuleModel model : mc) {
        InfoModel im = (InfoModel) BeanUtils.xmlDecode(model.getBeanBytes());
        String role = model.getModuleInfo().getStampRole();
        String text = "";

        if (role.equals(IInfoModel.ROLE_SOA_SPEC) || role.equals(IInfoModel.ROLE_P_SPEC)) {
            String xml = ((ProgressCourse) im).getFreeText();
            text = extractText(xml);
        } else {
            text = im.toString();
        }
        int pos = text.indexOf(searchText);
        if (pos != -1) {
            karteId.add(model.getKarte().getId());
        }
    }
    pm = getService().getPatientOfKarte(karteId); // 空の pm が返ることはあるが,null は返らない
    endModuleId -= increaseStep; // 次の検索に備えて endModuleId を下げる
    return pm;
}

« メモ欄の自動セーブ | トップページ | 新規カルテにテキストスタンプ挿入 »

OpenDolphin」カテゴリの記事