« 2010年7月 | トップページ | 2010年9月 »

2010年8月

2010年8月 1日 (日)

OpenDolphin-1.3.0.5 公開(JBoss AS 5.1.0.GA 専用)

現時点のソースを公開することにした。今回から JBoss AS 5.1.0.GA 専用になっている。

使っている IDE は Macintosh,Windows とも NetBeans 6.8。Windows バージョンは,普段使っていないのでカルテ編集の詳しい動作確認はしていない。


構築済みのクライアント (Java 1.6 専用)

JBoss Server デプロイ用 ear ファイルと xml ファイル (JBoss AS 5.1.0.GA + Java 1.6 専用)。


    ※ このソースには 10/08/03 以降の変更は反映されていません。

CLAIM だけ送る

カルテや病名の CLAIM だけ送信するメニュー項目を作った。
カルテを CLAIM 送信した後に訂正があった場合(CLAIM 送信後に「うーん,やっぱり薬も出しといて下さい」とか言われた場合)
  1. 送った CLAIM を ORCA で削除
  2. OpenDolphin でカルテを修正
  3. 保存時に「診療行為を送信する」にチェックを入れてから保存
という手順を踏むことになるが,たまに (3) でチェックを入れるのを忘れて保存してしまうことがあった。この場合,もう一回カルテを開いて,スペースを挿入するなどの無駄な修正をして dirty にしてから保存し直すという手順が必要だったが,そういう場合,インスペクタまたはエディタでカルテを表示して,command-L で再送できるようにした。
 病名の方は,ORCA の病名と OpenDolphin の病名がずれてしまって,OpenDolphin の病名を修正しないで ORCA に CLAIM 送信だけしたいというような場合に使える。でも滅多に使わない。

Claim

client/MacMenuFactory.java

 ・
 ・
//pns^
@Action
public void selectAll() {
  chart.sendToChain("selectAll");
}
@Action
public void sendClaim() {
  chart.sendToChain("sendClaim");
}
//pns$
 ・
 ・
  // Karte
  JMenu karte = new JMenu();
  karte.setName("karteMenu");
  karte.setText("カルテ");
//pns^
  // CLAIM 送信
  JMenuItem sendClaim = new JMenuItem();
  sendClaim.setName("sendClaim");
  setAction(sendClaim, "sendClaim", "CLAIM 送信", null, "CLAIM 送信します");
  setAccelerator(sendClaim, KeyEvent.VK_L);
  karte.add(sendClaim);
//pns$

client/GUIConst.java

public static final String ACTION_SEND_CLAIM = "sendClaim";

client/AbstractChartDocument.java

private static final String[] CHART_MENUS = {
  GUIConst.ACTION_OPEN_KARTE, GUIConst.ACTION_SAVE,
 ・
 ・
//pns^
  GUIConst.ACTION_FIND_FIRST, GUIConst.ACTION_FIND_NEXT, GUIConst.ACTION_FIND_PREVIOUS,
  GUIConst.ACTION_SEND_CLAIM
//pns$
};

client/ClaimSender.java

client/KarteEditor.java

// ClaimSender
private ClaimSender claimSender = new ClaimSender();
 ・
 ・
/**
 * CLAIMリスナを追加する。
 * @param listener CLAIMリスナ
 * @throws TooManyListenersException
 */
public void addCLAIMListner(ClaimMessageListener listener) throws TooManyListenersException {
//pns^
// if (claimListener != null) {
//   throw new TooManyListenersException();
// }
// claimListener = listener;
  claimSender.addCLAIMListener(listener);
//pns$
}

/**
 * CLAIMリスナを削除する。
 * @param listener 削除するCLAIMリスナ
 */
public void removeCLAIMListener(ClaimMessageListener listener) {
//pns^
// if (claimListener != null && claimListener == listener) {
//   claimListener = null;
// }
  claimSender.removeCLAIMListener(listener);
//pns$
}
 ・
 ・
@Override
public void enter() {
  super.enter();
  stateMgr.controlMenu();
//pns
  getContext().enabledAction(GUIConst.ACTION_SEND_CLAIM, true);
}
 ・
 ・
@Override
public void save() {
 ・
 ・
//pns sendClaim = (Project.getSendClaim() && claimListener != null) ? true : false;
  sendClaim = (Project.getSendClaim() && claimSender.getListener() != null) ? true : false;
 ・
 ・
private void save2(final SaveParams params) throws DolphinException {
 ・
 ・
    if (ddl.isNoError()) {
      if (sendClaim) {
//pns sendClaim(saveModel);
      claimSender.send(saveModel);
 ・
 ・
/**
 * Save 時ではなくメニューから CLAIM 送信する
 */
public void sendClaim() {
  model.setKarte(getContext().getKarte());
  model.getDocInfo().setConfirmDate(new Date());
  if (getMode() == DOUBLE_MODE) {
    claimSender.send(model);
  }
}

client/DiagnosisDocument

@Override
public void enter() {
  super.enter();
  // undo/redo 可能にする
  getContext().enabledAction(GUIConst.ACTION_UNDO, true);
  getContext().enabledAction(GUIConst.ACTION_REDO, true);
  getContext().enabledAction(GUIConst.ACTION_SELECT_ALL, true);
  getContext().enabledAction(GUIConst.ACTION_SAVE, true);
  getContext().enabledAction(GUIConst.ACTION_SEND_CLAIM, true);
 ・
 ・
class DiagnosisPutTask extends DBTask<List<Long>> {
 ・
 ・
  @Override
  protected List doInBackground() throws Exception {
 ・
 ・
    // CLAIM 送信の sender を作成
    ClaimSender sender = new ClaimSender();
    sender.setPatientVisitModel(getContext().getPatientVisit());
    sender.addCLAIMListener(((ChartImpl) getContext()).getCLAIMListener());

    // 追加病名を CLAIM 送信する
    if (sendClaim && addedDiagnosis.size() > 0) {
      logger.debug("sendClaim Diagnosis");
      sender.send(addedDiagnosis);
    }

    // 更新された病名を CLAIM 送信する
    if (sendClaim && updatedDiagnosis.size() > 0) {
      sender.send(updatedDiagnosis);
    }
 ・
 ・
    /**
     * 選択された診断を CLAIM 送信する
     */
public void sendClaim() {
  // CLAIM 送信の sender を作成
  ClaimSender sender = new ClaimSender();
  sender.setPatientVisitModel(getContext().getPatientVisit());
  try {
    sender.addCLAIMListener(((ChartImpl) getContext()).getCLAIMListener());
  } catch (TooManyListenersException ex) {}
        
  // 選択された診断を CLAIM 送信する
  RegisteredDiagnosisModel rd = null;
  List diagList = new ArrayList();
  Date confirmed = new Date();
  int rows[] = diagTable.getSelectedRows();
  for (int row : rows) {
    rd = (RegisteredDiagnosisModel) tableModel.getObject(row);
    rd.setKarte(getContext().getKarte());           // Karte
    rd.setCreator(Project.getUserModel());          // Creator
    rd.setConfirmed(confirmed);                     // 確定日
    rd.setRecorded(confirmed);                      // 記録日
    // 開始日=適合開始日 not-null
    if (rd.getStarted() == null) {
      rd.setStarted(confirmed);
    }
    rd.setPatientLiteModel(getContext().getPatient().patientAsLiteModel());
    rd.setUserLiteModel(Project.getUserModel().getLiteModel());

    // 転帰をチェックする
    if (!isValidOutcome(rd)) return;

    diagList.add(rd);
  }
        
  if (diagList.size() > 0) sender.send(diagList);
}

client/KarteDocumentViewer.java

 ・
 ・
protected final class EmptyState extends BrowserState {
  public void enter() {
    getContext().enabledAction(GUIConst.ACTION_SEND_CLAIM, false);
 ・
 ・
protected final class ClaenState extends BrowserState {
  public void enter() {
    getContext().enabledAction(GUIConst.ACTION_SEND_CLAIM, true);
 ・
 ・
/**
 * 表示されているカルテを CLAIM 送信する
 */
public void sendClaim() throws TooManyListenersException {

  // claim を送るのはカルテだけ
  String docType = getBaseKarte().getModel().getDocInfo().getDocType();
  if (!IInfoModel.DOCTYPE_KARTE.equals(docType)) return;

  ChartImpl chart = (ChartImpl) getContext();
  DocumentModel model = chart.getKarteModelToEdit(getBaseKarte().getModel());
  model.setKarte(getContext().getKarte());
  model.getDocInfo().setConfirmDate(new Date());
        
  ClaimSender claimSender = new ClaimSender();
  claimSender.addCLAIMListener(chart.getCLAIMListener());
  claimSender.send(model);
}

« 2010年7月 | トップページ | 2010年9月 »