package open.dolphin.infomodel; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.util.Arrays; import java.util.Date; import java.util.List; import javax.persistence.*; /** * PatientVisitModel * * @author Kazushi Minagawa, Digital Globe, Inc. */ @Entity @Table(name = "d_patient_visit") public class PatientVisitModel extends InfoModel implements java.io.Serializable { //masuda^ ChartImplから引っ越し // PVT state public static final int BIT_OPEN = 0; public static final int BIT_SAVE_CLAIM = 1; public static final int BIT_MODIFY_CLAIM = 2; public static final int BIT_TREATMENT = 3; public static final int BIT_HURRY = 4; public static final int BIT_GO_OUT = 5; public static final int BIT_CANCEL = 6; public static final int BIT_UNFINISHED = 8; public static final int BIT_NOTUPDATE = 9; //masuda$ public static final DataFlavor PVT_FLAVOR = new DataFlavor(open.dolphin.infomodel.PatientVisitModel.class, "Patient Visit"); public static DataFlavor flavors[] = {PVT_FLAVOR}; // PK @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; // 患者オブジェクト @ManyToOne @JoinColumn(name="patient_id", nullable=false) private PatientModel patient; // 施設ID Dolphin Table で使用 @Column(nullable=false) private String facilityId; // 受付リスト上の番号 @Transient private int number; // 来院時間 @Column(nullable=false) private String pvtDate; // 予約 @Transient private String appointment; // 診療科 private String department; // 終了フラグ private int status; // 健康保険GUID 2006-05-01 private String insuranceUid; //---------------------------------------------- // 2.0 で追加 private String deptCode; // 診療科コード private String deptName; // 診療科名 private String doctorId; // ORCAでの担当医コード private String doctorName; // 担当医名 private String jmariNumber; // JMARI code private String firstInsurance; // 受け付けた健康保険 private String memo; @Transient private String watingTime; // 待ち時間 //---------------------------------------------- //minagawa^ 予定カルテ (予定カルテ対応) @Transient private boolean fromSchedule; @Transient private Date lastDocDate; //minagawa$ /** * PatientVisitModelオブジェクトを生成する。 */ public PatientVisitModel() { } //pns^ pvt model の項目を増やす @Transient private Integer byomei = 0; // 今まで付いた病名の総数 @Transient private Integer byomeiToday = 0; // 今日付いた病名の数 // 病名の総数 public void setByomeiCount(int bc) { byomei = bc; } public int getByomeiCount() { return byomei; } // 今日付いた病名の数 public void setByomeiCountToday(int bct) { byomeiToday = bct; } public int getByomeiCountToday() { return byomeiToday; } // 初診かどうか(今日付いた病名がすべての病名かどうか) public boolean isShoshin() { return (byomei == byomeiToday); } // 病名がついているかどうか public boolean hasByomei() { return (getByomeiCount() != 0); } //pns$ //masuda^ public boolean getStateBit(int stateBit) { return (status & (1 << stateBit)) != 0; } public void setStateBit(int stateBit, boolean flag) { if (flag) { status |= (1 << stateBit); } else { status &= ~(1 << stateBit); } } //masuda$ public long getId() { return id; } public void setId(long id) { this.id = id; } public PatientModel getPatientModel() { return patient; } public void setPatientModel(PatientModel patientModel) { this.patient = patientModel; } public String getFacilityId() { return facilityId; } public void setFacilityId(String facilityId) { this.facilityId = facilityId; } public void setNumber(int number) { this.number = number; } public int getNumber() { return number; } public void setPvtDate(String time) { this.pvtDate = time; } public String getPvtDate() { return pvtDate; } public String getPvtDateTrimTime() { return ModelUtils.trimTime(pvtDate); } public String getPvtDateTrimDate() { return ModelUtils.trimDate(pvtDate); } public String getAppointment() { return appointment; } public void setAppointment(String appointment) { this.appointment = appointment; } public void setDepartment(String department) { this.department = department; } public String getDepartment() { // // 1.3 までの暫定 // String[] tokens = tokenizeDept(department); // return tokens[0]; // 2.0 から return department; } /** * department を , で分解する */ private String[] tokenizeDept(String dept) { // 診療科名、コード、担当医名、担当医コード、JMARI コード // を格納する配列を生成する String[] ret = new String[5]; Arrays.fill(ret, null); if (dept != null) { try { String[] params = dept.split(","); System.arraycopy(params, 0, ret, 0, params.length); } catch (Exception e) { e.printStackTrace(System.err); } } return ret; } public void setState(int state) { this.status = state; } public int getState() { return status; } public Integer getStateInteger() { return new Integer(status); } public String getPatientId() { return getPatientModel().getPatientId(); } public String getPatientName() { return getPatientModel().getFullName(); } public String getPatientGenderDesc() { return ModelUtils.getGenderDesc(getPatientModel().getGender()); } public String getPatientAgeBirthday() { return ModelUtils.getAgeBirthday(getPatientModel().getBirthday()); } public String getPatientBirthday() { return getPatientModel().getBirthday(); } public void setInsuranceUid(String insuranceUid) { this.insuranceUid = insuranceUid; } public String getInsuranceUid() { return insuranceUid; } //----------------------------------------------------- public String getDeptName() { if (deptName!=null) { return deptName; } // 2.0 以前のレコード String[] tokens = tokenizeDept(department); return tokens[0]; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getDeptCode() { if (deptCode!=null) { return deptCode; } // 2.0 以前のレコード String[] tokens = tokenizeDept(department); return tokens[1]; } public void setDeptCode(String deptCode) { this.deptCode = deptCode; } public String getDoctorName() { if (doctorName!=null) { return doctorName; } // 2.0 以前のレコード String[] tokens = tokenizeDept(department); return tokens[2]; } public void setDoctorName(String doctorName) { this.doctorName = doctorName; } public String getDoctorId() { if (doctorId!=null) { return doctorId; } // 2.0 以前のレコード String[] tokens = tokenizeDept(department); return tokens[3]; } public void setDoctorId(String doctorId) { this.doctorId = doctorId; } public String getJmariNumber() { if (jmariNumber!=null) { return jmariNumber; } // 2.0 以前のレコード String[] tokens = tokenizeDept(department); return tokens[4]; } public void setJmariNumber(String jmariNumber) { this.jmariNumber = jmariNumber; } public String getFirstInsurance() { return firstInsurance; } public void setFirstInsurance(String firstInsurance) { this.firstInsurance = firstInsurance; } public String getMemo() { return memo; } public void setMemo(String memo) { this.memo = memo; } //minagawa^ 予定カルテ (予定カルテ対応) public boolean isFromSchedule() { return fromSchedule; } public void setFromSchedule(boolean b) { fromSchedule = b; } public Date getLastDocDate() { return lastDocDate; } public void setLastDocDate(Date d) { lastDocDate = d; } //minagawa$ //--------------------------------------------------- // 受け付けた保険を返す //--------------------------------------------------- public String getHealthInsuranceInfo() { String uuid = getInsuranceUid(); if (uuid == null) { return null; } List<PVTHealthInsuranceModel> list = getPatientModel().getPvtHealthInsurances(); if (list == null || list.isEmpty()) { return null; } StringBuilder info = new StringBuilder(); for (PVTHealthInsuranceModel pm : list) { if (pm.getGUID()!=null && uuid.equals(pm.getGUID())) { info.append(pm.getInsuranceClass()); PVTPublicInsuranceItemModel[] pbs = pm.getPVTPublicInsuranceItem(); if (pbs!=null) { for (PVTPublicInsuranceItemModel pb : pbs) { info.append(":"); info.append(pb.getProviderName()); } } break; } } return info.length()>0 ? info.toString() : null; } //--------------------------------------------------- // 待ち時間表示 //--------------------------------------------------- public String getWatingTime() { return watingTime; } public void setWatingTime(String watingTime) { this.watingTime = watingTime; } //--------------------------------------------------- // 診療科、担当医、JMARI コードの情報を返す。 2.0 //--------------------------------------------------- public String getDeptDoctorJmariInfo() { StringBuilder sb = new StringBuilder(); sb.append(getDeptName()).append(","); sb.append(getDeptCode()).append(","); sb.append(getDoctorName()).append(","); sb.append(getDoctorId()).append(","); sb.append(getJmariNumber()); return sb.toString(); } //--------------------------------------------------- // Transferable 処理 //--------------------------------------------------- public boolean isDataFlavorSupported(DataFlavor df) { return df.equals(PVT_FLAVOR); } public Object getTransferData(DataFlavor df) throws UnsupportedFlavorException, IOException { if (df.equals(PVT_FLAVOR)) { return this; } else { throw new UnsupportedFlavorException(df); } } public DataFlavor[] getTransferDataFlavors() { return flavors; } @Override public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + (int) (id ^ (id >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final PatientVisitModel other = (PatientVisitModel) obj; if (id != other.id) { return false; } return true; } }