« beanBytes の処理:REST(付録) | トップページ | Java 1.8 対応 »

2015年2月28日 (土)

受付情報の扱い

ORCA から CLAIM で送られてくる受付情報で,同じ patient id があった場合,単純に Dolphin 側の受付リストの該当項目を置き換える処理を行っていたが,受付情報を pvtDate で identify することにして,以下のように整理した。
  • ORCA の受付リストにある項目を選択して再受付した場合
    例えば,新患受付で,受付後に生年月日入力ミスに気付いて,患者登録で変更してから受付画面に戻って再受付した場合など。この場合は,Dolphin 側のリストの該当項目を,送られた受付情報に置き換える。再受付の場合は受付時間が同じになるのを利用して,置き換えるべき受付情報かどうかを pvtDate を秒単位まで比較して,一致したかどうかで判定する。
  • ORCA の受付リストにある項目を一旦削除して,後でもう一回受付した場合
    稀に,同ビルの別の科と間違って新患受付してしまい,「あ,ここ皮膚科ですか! 間違えました!」となることがある。この場合,その次に来院した新患が同じ患者番号で登録されることになる。また,午前中に受付した再診患者が一旦受付キャンセルして,午後から再受診した場合もこれに該当する。この場合は,同じ患者番号でも,違う受付と判断して,新たにリストに加える。
PvtServiceImpl
public int addPvt(PatientVisitModel pvt, String facilityId) {
  :
  // 同じ pvtDate の pvt がすでに登録されていないかどうかチェック
  // pvtDate が違えば,同じ patient id でも新たな pvt と判断する
  List result = em.createQuery(
    "select p from PatientVisitModel p where p.facilityId = :fid and p.pvtDate = :date", PatientVisitModel.class)
    .setParameter("fid", pvt.getFacilityId())
    .setParameter("date", pvt.getPvtDate())
    .getResultList();

    if (! result.isEmpty()) {
      // 重複がある場合は既存の id をコピーして新しい pvt にすげ替える
      PatientVisitModel exist = result.get(0);
      pvt.setId(exist.getId());
    }

    em.merge(pvt); // record がなければ persist 動作になる
WatingListImpl
if (localPvt != null) {
    // localPvt がみつかった場合,更新である
    hostPvt.setNumber(localPvt.getNumber());
    pvtTableModel.getObjectList().set(row, hostPvt);
    // changeRow を fire,ただしカルテが開いていたら fire しない
    if (! ChartImpl.isKarteOpened(localPvt)) {
        pvtTableModel.fireTableRowsUpdated(row, row);
    }
    // 待ち時間更新
    setPvtCount();

} else{
    // localPvt がなければ,それは追加である
    row = pvtTableModel.getObjectCount();
    // 番号付加
    hostPvt.setNumber(row+1);
    pvtTableModel.addRow(hostPvt);
    //logger.info("pvt added at row " + row);
    // 患者数セット
    setPvtCount(row+1);
}

« beanBytes の処理:REST(付録) | トップページ | Java 1.8 対応 »

OpenDolphin」カテゴリの記事