package open.dolphin.client;
import java.util.ArrayList;
import java.util.List;
import open.dolphin.infomodel.*;
import open.dolphin.message.DiagnosisModuleItem;
import open.dolphin.message.DiseaseHelper;
import open.dolphin.message.MessageBuilder;
import open.dolphin.project.Project;
import open.dolphin.util.GUIDGenerator;
/**
* Karte と Diagnosis の CLAIM を送る
* KarteEditor の sendClaim を独立させた
* DiagnosisDocument の CLAIM 送信部分もここにまとめた
* @author pns
*/
public class DiagnosisSender implements IDiagnosisSender {
private Chart context;
// CLAIM 送信リスナ
private ClaimMessageListener claimListener;
// diagnosis では pvt が必要
private PatientVisitModel pvt;
private boolean send;
public DiagnosisSender() {
}
@Override
public Chart getContext() {
return context;
}
@Override
public void setContext(Chart context) {
this.context = context;
}
@Override
public void prepare(List<RegisteredDiagnosisModel> diagnoses) {
// if (diagnoses==null || diagnoses.isEmpty()) {
// claimListener = null;
// pvt = null;
// return;
// }
// 2012-07 claimConnectionIsClientを追加
send = (Project.claimSenderIsClient() &&
diagnoses!=null &&
(!diagnoses.isEmpty()));
if (send) {
claimListener = context.getCLAIMListener();
pvt = context.getPatientVisit();
}
send = send && (pvt!=null);
send = send && (claimListener!=null);
}
/**
* 診断名の CLAIM 送信
* @param diagnoses
*/
@Override
public void send(List<RegisteredDiagnosisModel> diagnoses) {
// 2012-07 claimConnectionIsClientを追加
if (!send) {
return;
}
//s.oh^ 2013/12/10 傷病名のCLAIM送信する/しない
if(!Project.getBoolean("diagnosis.claim.send", true)) {
return;
}
//s.oh$
// DocInfo & RD をカプセル化したアイテムを生成する
ArrayList<DiagnosisModuleItem> moduleItems = new ArrayList<>();
java.util.ResourceBundle mBundle = ClientContext.getBundle();
String defTitle = mBundle.getString("DEFAULT_DIAGNOSIS_TITLE");
for (RegisteredDiagnosisModel rd : diagnoses) {
DocInfoModel docInfo = new DocInfoModel();
docInfo.setDocId(GUIDGenerator.generate(docInfo));
docInfo.setTitle(defTitle);
docInfo.setPurpose(IInfoModel.PURPOSE_RECORD);
docInfo.setFirstConfirmDate(ModelUtils.getDateTimeAsObject(rd.getConfirmDate()));
docInfo.setConfirmDate(ModelUtils.getDateTimeAsObject(rd.getFirstConfirmDate()));
DiagnosisModuleItem mItem = new DiagnosisModuleItem();
mItem.setDocInfo(docInfo);
mItem.setRegisteredDiagnosisModule(rd);
moduleItems.add(mItem);
}
// ヘルパー用の値を生成する
String confirmDate = diagnoses.get(0).getConfirmDate();
PatientLiteModel patient = diagnoses.get(0).getPatientLiteModel();
// ヘルパークラスを生成する
DiseaseHelper dhl = new DiseaseHelper();
dhl.setPatientId(patient.getPatientId());
dhl.setConfirmDate(confirmDate);
dhl.setDiagnosisModuleItems(moduleItems);
dhl.setGroupId(GUIDGenerator.generate(dhl));
// DG ------------------------------------
//dhl.setDepartment(pvt.getDepartmentCode());
//dhl.setDepartmentDesc(pvt.getDepartment());
//dhl.setCreatorName(pvt.getAssignedDoctorName());
//dhl.setCreatorId(pvt.getAssignedDoctorId());
//dhl.setCreatorLicense(Project.getUserModel().getLicenseModel().getLicense());
//dhl.setFacilityName(Project.getUserModel().getFacilityModel().getFacilityName());
//dhl.setJmariCode(pvt.getJmariCode());
dhl.setDepartment(pvt.getDeptCode()); // 診療科コード
dhl.setDepartmentDesc(pvt.getDeptName()); // 診療科名
dhl.setCreatorName(pvt.getDoctorName()); // 担当医名
dhl.setCreatorId(pvt.getDoctorId()); // 担当医コード
dhl.setJmariCode(pvt.getJmariNumber()); // JMARI code
dhl.setCreatorLicense(Project.getUserModel().getLicenseModel().getLicense());
dhl.setFacilityName(Project.getUserModel().getFacilityModel().getFacilityName());
//------------------------------------ DG
MessageBuilder mb = new MessageBuilder();
String claimMessage = mb.build(dhl);
ClaimMessageEvent event = new ClaimMessageEvent(this);
event.setPatientId(patient.getPatientId());
event.setPatientName(patient.getFullName());
event.setPatientSex(patient.getGender());
event.setTitle(defTitle);
event.setClaimInstance(claimMessage);
event.setConfirmDate(confirmDate);
//// debug 出力を行う
//if (ClientContext.getClaimLogger() != null) {
// ClientContext.getClaimLogger().debug(event.getClaimInsutance());
//}
if (claimListener != null) {
claimListener.claimMessageEvent(event);
}
}
}