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