« 2008年4月 | トップページ | 2008年6月 »

2008年5月

2008年5月30日 (金)

用法フィールド

用法フィールドを,自作マスターに応じて変更する
  • order/AdminMaster.java の,以下の部分を好きなように変更する
    private static final String[] ADMIN_CATEGORY =   {"選択してください","内服1回等(100)", "内服2回等(200)", "内服3回等(300)", "内服その他(400)", "頓用等(500)", "外用等(600)", "点眼等(700)","部位等(800)", "全て"};
    private static final String[] ADMIN_CODE_RANGE = {"","0010001",  "0010002", "0010003", "0010004", "0010005", "0010006", "0010007", "0010008", "001"};
    private static final int COMMENT_INDEX = 10;
    

ユーザ登録コメント検索

Prescript1 処方スタンプボックスで ORCAマスターを検索する際,薬剤の名前だけでなく,ユーザー登録のコメントも検索できるようにする変更。外用剤に外用部位のコメントが入れられるようにするため。SQL コマンド生成する際,^6 を ^6(薬剤) でも ^0(ユーザ登録) でも ^8(コメント)でも検索するように改変。これで,薬剤名と同じように,ORCA に登録した部位等を検索してリストに加えることができる。
Prescript2 用法フィールドでも,ユーザ登録項目を選択することができる。

 

dao/SqlMasterDao.java

  • 薬剤検索の sql 生成に ^0 と ^8 を加える
    private String getMedicineSql(String text, String sortBy, String order, boolean forward) {
    ・
    ・
    buf.append("(srycd ~ '^6' or srycd ~ '^0' or srycd ~ '^8') and ");
     
  • ついでに診療行為検索でも ^0 と ^8 を検索できるようにする
    Private String getTreatemenrSql(String text,  String orderClassCode, String sortBy, String order, boolean forward) {
     ・
     ・
     //// 8xxxxxxxx のコメントを検索できるようにする
     //buf.append("(srycd ~ '^1' or srycd ~ '^00') and ");
     buf.append("(srycd ~ '^1' or srycd ~ '^00' or srycd ~ '^8') and ");
      if ( (! min.equals("")) && max.equals("") ) {
       ////sbd.append(" and srysyukbn = ");
       sbd.append(" and ((srysyukbn = ");
       sbd.append(addSingleQuote(min));
             
      } else if ((! min.equals("")) && (! max.equals("")) ) {
       ////sbd.append(" and srysyukbn >= ");
       sbd.append(" and ((srysyukbn >= ");
       sbd.append(addSingleQuote(min));
       sbd.append(" and srysyukbn <= ");
       sbd.append(addSingleQuote(max));
      }
    ////↓コメントに srysykbn はついていない
      sbd.append(") or srysyukbn = '') ");
    ////↑
     }
     ・
     ・
    
    生成される sql の例
    select srycd,name,kananame,tensikibetu,ten,nyugaitekkbn,routekkbn,srysyukbn,hospsrykbn,yukostymd,yukoedymd from tbl_tensu where hospnum=1 and (srycd ~ '^1' or srycd ~ '^00' or srycd ~ '^8') and name ~ '^初回' and ((srysyukbn >= '600' and srysyukbn <= '699') or srysyukbn = '')  order by name
    

2008年5月26日 (月)

転帰日を消せるようにする

患者インスペクタ画面の傷病名で,転帰を1回設定してしまうと,取り消しできなくなってしまうので,転帰に空白を選んだら,転帰日も消すようにする。消したとき,.ParseException: Unparseable date: "T00:00:00" が出るが,実害はなさそう。(出したくない場合は,infomodel.ModelUtils.getDateAsObject の catch を変更する)

 

  • clinet/DiagnosisDocument.java の変更点
    } else {
        entry.setDiagnosisOutcomeModel(null);
        ////↓ 疾患終了日を消す
        entry.setEndDate(null);
        ////↑
        fireTableRowsUpdated(row, row);
        addUpdatedList(entry);
    }
    ・
    ・
    case START_DATE_COL:
        String strVal = (String) value;
    ////    if (!strVal.trim().equals("")) {
            entry.setStartDate(strVal);
            fireTableRowsUpdated(row, row);
            addUpdatedList(entry);
    ////    }
        break;
    
    case END_DATE_COL:
        strVal = (String) value;
    ////    if (!strVal.trim().equals("")) {
            entry.setEndDate((String) value);
            fireTableRowsUpdated(row, row);
            addUpdatedList(entry);
    ////    }
        break;
    
    
  • infomodel/RegisteredDiagnosisModel.java の変更点
    public void setEndDate(String endDate) {
        if (endDate != null) {
            int index = endDate.indexOf('T');
            if (index < 0) {
                endDate += "T00:00:00";
            }
            setEnded(ModelUtils.getDateTimeAsObject(endDate));
        } else { //// ↓ 終了日を消せるようにする
            setEnded(null);
        }   
    }
    

スタンプメーカーの矢印

Arrow スタンプ箱で,項目を選択した状態でスタンプメーカーを起動しても,左矢印が有効にならない。client/StanpBoxPlugin.javaeditors.show の後に,スタンプ選択の変更をでっち上げて,EditorsSetPanelvalueChange に処理がわたるようにして対応。
editorsShow(tree.getEntity()) の後に以下を追加(2カ所ある)
javax.swing.tree.TreePath tp = tree.getSelectionPath();
tree.clearSelection();
tree.setSelectionPath(tp);

スタンプ箱のルートノード

Stamptree スタンプ箱のルートノードを出すと,三角マークのクリックで階層表示ができる。 client/StampTree.javathis.setRootVisible(false)this.setRootVisible(true) に変更する。

2008年5月 1日 (木)

状態アイコン背景色

Status 状態アイコンの背景色を,病名がないとき黄色にする(病名つけ忘れを防ぐため)。また,今日つけた病名しか付いていない場合(全くの初診の場合)は,背景色を白にする。以下の4クラスの編集が必要。

client/ByomeiCount.java

  1. 新たにクラス作成
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    
    package open.dolphin.client;
    
    import java.util.GregorianCalendar;
    import open.dolphin.delegater.DocumentDelegater;
    import open.dolphin.dto.DiagnosisSearchSpec;
    import open.dolphin.infomodel.PatientVisitModel;
    
    /**
     *
     * @author Motomachi Usagi
     */
    public class ByomeiCount {
        private PatientVisitModel pvt;
        private int byomeiCount;
        private int byomeiCountToday;
        private DocumentDelegater ddl;
        private DiagnosisSearchSpec spec;
        
        public ByomeiCount(PatientVisitModel p) {
            pvt = p;
            byomeiCount = 0;
            byomeiCountToday = 0;
            ddl = null;
            spec = null;
        }
    
        public void setByomeiCount() {
            // PatientVisitModel に病名数をセットする 
            GregorianCalendar today = new GregorianCalendar();
            ddl = new DocumentDelegater();
            Long karteId = ddl.getKarte(pvt.getPatient().getId(), today.getTime()).getId();
            spec = new DiagnosisSearchSpec();
            spec.setCode(DiagnosisSearchSpec.PATIENT_SEARCH);
            spec.setKarteId(karteId);
            byomeiCount = ddl.getDiagnosisList(spec).size(); // 今までについている病名の総数
            
            if (byomeiCount != 0) {
                today.add(GregorianCalendar.DATE, -1);
                spec.setFromDate(today.getTime());
                byomeiCountToday = ddl.getDiagnosisList(spec).size(); // 今日ついた病名の総数
            }
            
            pvt.setByomeiCount(byomeiCount);
            pvt.setByomeiCountToday(byomeiCountToday);
        }
    }
    

infomodel/PatientVisitModel.java

  1. メソッドを4つ加える
    ////↓ pvt model の項目を増やす
    private int byomei;  // 今まで付いた病名の総数
    private int byomeiToday; // 今日付いた病名の数
    ////↑
    
    /**
     * PatientVisitModelオブジェクトを生成する。
     */
    public PatientVisitModel() {
    }
    
    ////↓
    // 病名の総数
    public void setByomeiCount(int bc) {
        byomei = bc;
    }
    // 今日付いた病名の数
    public void setByomeiCountToday(int bct) {
        byomeiToday = bct;
    }
    // 初診かどうか(今日付いた病名がすべての病名かどうか)
    public boolean isShoshin() {
        return (byomei == byomeiToday);
    }
    // 病名がついているかどうか
    public boolean hasByomei() {
        return (byomei != 0);
    }
    ////↑
    

client/DiagnosisDocument.java

  1. 病名を保存するところで,pvt にも保存する
    /**
     * DiagnosisPutTask
     */
    class DiagnosisPutTask extends DBTask> {
    ・
    ・
    // 保存する
    if (added != null && added.size() > 0) {
        logger.debug("ddl.putDiagnosis");
        result = ddl.putDiagnosis(added);
        if (ddl.isNoError()) {
            logger.debug("ddl.putDiagnosis() is NoErr");
            for (int i = 0; i < added.size(); i++) {
                long pk = result.get(i).longValue();
                logger.debug("persist id = " + pk);
                RegisteredDiagnosisModel rd = (RegisteredDiagnosisModel) added.get(i);
                rd.setId(pk);
            }
        }
    }
    
    ////↓   PatientVisitModel に病名数をセットする 
    ByomeiCount bc = new ByomeiCount(getContext().getPatientVisit());
    bc.setByomeiCount();
    ////↑
    

plugins/WatingList/WatingListImpl.java

  1. 受付番号表示の追加部分の下に,病名数の処理を追加する
    // 結果を追加する
    if (newVisitCount > 0) {
        for (int i = 0; i < newVisitCount; i++) {
    ////↓受付番号表示
            PatientVisitModel pvt = (PatientVisitModel) result.get(i);
            pvt.setNumber(firstResult+i+1);
    
            // 病名が1つでもあるかどうか,初診かどうかのセット,
            ByomeiCount bc = new ByomeiCount(pvt);
            bc.setByomeiCount();
    ////↑
    
    //
    // cnt 以降は新しいレコードなのでそのまま追加する
    //
    for (int i = index; i < result.size(); i++) {
    
    ////↓受付番号表示
        PatientVisitModel pvt = (PatientVisitModel) result.get(i);
        pvt.setNumber(firstResult+i+1);
        dataList.add(result.get(i));
    //  dataList.add(result.get(index++));
    
        // 病名が1つでもあるかどうか,初診かどうかを pvt にセット
        ByomeiCount bc = new ByomeiCount(pvt);
        bc.setByomeiCount();
    ////↑
    
  2. レンダラのところでバックグランドを設定する
    /**
     * KarteStateRenderer
     * カルテ(チャート)の状態をレンダリングするクラス。
     */
    protected class KarteStateRenderer extends DefaultTableCellRenderer {
    ・
    ・
        Color fore = pvt != null && pvt.getState() == ChartImpl.CANCEL_PVT ? CANCEL_PVT_COLOR : table.getForeground();
        this.setForeground(fore);
    }
    
    ////↓病名がついていなければ黄色,初診(本日ついた病名しかついていない)なら白
    if (pvt != null) {
        if (!pvt.hasByomei()) this.setBackground(Color.YELLOW);
        else if (pvt.isShoshin()) this.setBackground(Color.WHITE);
    }
    ////↑
    

« 2008年4月 | トップページ | 2008年6月 »