package open.dolphin.mbean;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import open.dolphin.infomodel.*;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
/**
* PVTBuilder
*
* @author Kazushi Minagawa, Digital Globe, Inc.
*/
public final class PVTBuilder {
private static final Namespace mmlCm = Namespace.getNamespace("mmlCm","http://www.medxml.net/MML/SharedComponent/Common/1.0");
private static final Namespace mmlNm = Namespace.getNamespace("mmlNm","http://www.medxml.net/MML/SharedComponent/Name/1.0");
private static final Namespace mmlFc = Namespace.getNamespace("mmlFc","http://www.medxml.net/MML/SharedComponent/Facility/1.0");
private static final Namespace mmlDp = Namespace.getNamespace("mmlDp","http://www.medxml.net/MML/SharedComponent/Department/1.0");
private static final Namespace mmlAd = Namespace.getNamespace("mmlAd","http://www.medxml.net/MML/SharedComponent/Address/1.0");
private static final Namespace mmlPh = Namespace.getNamespace("mmlPh","http://www.medxml.net/MML/SharedComponent/Phone/1.0");
private static final Namespace mmlPsi = Namespace.getNamespace("mmlPsi","http://www.medxml.net/MML/SharedComponent/PersonalizedInfo/1.0");
private static final Namespace mmlCi = Namespace.getNamespace("mmlCi","http://www.medxml.net/MML/SharedComponent/CreatorInfo/1.0");
private static final Namespace mmlPi = Namespace.getNamespace("mmlPi","http://www.medxml.net/MML/ContentModule/PatientInfo/1.0");
private static final Namespace mmlHi = Namespace.getNamespace("mmlHi","http://www.medxml.net/MML/ContentModule/HealthInsurance/1.1");
private static final Namespace mmlSc = Namespace.getNamespace("mmlSc","http://www.medxml.net/MML/SharedComponent/Security/1.0");
private static final Namespace claim = Namespace.getNamespace("claim","http://www.medxml.net/claim/claimModule/2.1");
private static final String MmlBody = "MmlBody";
private static final String MmlModuleItem = "MmlModuleItem";
private static final String docInfo = "docInfo";
private static final String content = "content";
private static final String contentModuleType = "contentModuleType";
private static final String patientInfo = "patientInfo";
private static final String healthInsurance = "healthInsurance";
private static final String docId = "docId";
private static final String uid = "uid";
private static final String e_claim = "claim";
private static final String mmlCm_Id = "mmlCm:Id";
private static final String mmlNm_Name = "mmlNm:Name";
private static final String repCode = "repCode";
private static final String tableId = "tableId";
private static final String mmlNm_family = "mmlNm:family";
private static final String P = "P";
private static final String I = "I";
private static final String A = "A";
private static final String mmlNm_given = "mmlNm:given";
private static final String mmlNm_fullname = "mmlNm:fullname";
private static final String mmlPi_birthday = "mmlPi:birthday";
private static final String mmlPi_sex = "mmlPi:sex";
private static final String mmlAd_Address = "mmlAd:Address";
private static final String addressClass = "addressClass";
private static final String mmlAd_full = "mmlAd:full";
private static final String mmlAd_zip = "mmlAd:zip";
private static final String mmlPh_Phone = "mmlPh:Phone";
private static final String mmlPh_area = "mmlPh:area";
private static final String mmlPh_city = "mmlPh:city";
private static final String mmlPh_number = "mmlPh:number";
private static final String mmlPh_memo = "mmlPh:memo";
private static final String HealthInsuranceModule = "HealthInsuranceModule";
private static final String insuranceClass = "insuranceClass";
private static final String ClassCode = "ClassCode";
private static final String insuranceNumber = "insuranceNumber";
private static final String clientId = "clientId";
private static final String group = "group";
private static final String number = "number";
private static final String familyClass = "familyClass";
private static final String startDate = "startDate";
private static final String expiredDate = "expiredDate";
private static final String paymentInRatio = "paymentInRatio";
private static final String paymentOutRatio = "paymentOutRatio";
private static final String publicInsurance = "publicInsurance";
private static final String priority = "priority";
private static final String providerName = "providerName";
private static final String provider = "provider";
private static final String recipient = "recipient";
private static final String paymentRatio = "paymentRatio";
private static final String ratioType = "ratioType";
private static final String CreatorInfo = "CreatorInfo";
private static final String PersonalizedInfo = "PersonalizedInfo";
private static final String Id = "Id";
private static final String personName = "personName";
private static final String Name = "Name";
private static final String fullname = "fullname";
private static final String Facility = "Facility";
private static final String Department = "Department";
private static final String name = "name";
private static final String ClaimModule = "ClaimModule";
private static final String information = "information";
private static final String status = "status";
private static final String registTime = "registTime";
private static final String admitFlag = "admitFlag";
private static final String insuranceUid = "insuranceUid";
// 在宅関連(在宅患者登録)
private static final String appoint = "appoint";
private static final String memo = "memo";
private static final char FULL_SPACE = ' ';
private static final char HALF_SPACE = ' ';
private PatientModel patientModel;
private AddressModel curAddress;
private TelephoneModel curTelephone;
private ArrayList<PVTHealthInsuranceModel> pvtInsurnaces;
private PVTHealthInsuranceModel curInsurance;
private PVTPublicInsuranceItemModel curPublicItem;
private PVTClaim pvtClaim;
private String curRepCode;
private boolean DEBUG;
public PVTBuilder() {
}
/**
* CLAIM モジュールをパースする。
*
* @param reader CLAIM モジュールへの Reader
*/
public void parse(BufferedReader reader) {
try {
SAXBuilder docBuilder = new SAXBuilder();
Document doc = docBuilder.build(reader);
Element root = doc.getRootElement();
parseBody(root.getChild(MmlBody));
reader.close();
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
/**
* CLAIM モジュールをパースして得た PatientVisitModel オブジェクトを返す。
*
* @return パース結果の PatientVisitModel
*/
public PatientVisitModel getProduct() {
// Return Object = PatientVisitModel を生成する
PatientVisitModel model = new PatientVisitModel();
// 患者モデルを設定する
if (patientModel != null) {
model.setPatientModel(patientModel);
// ORCA CLAIM 特有の処理を行う
// 全角のスペースを半角スペースに変換する
String fullName = patientModel.getFullName();
fullName = fullName.replace(FULL_SPACE, HALF_SPACE);
patientModel.setFullName(fullName);
// FamilyName と GivenName を設定する
int index = fullName.indexOf(HALF_SPACE);
if (patientModel.getFamilyName() == null && index > 0) {
patientModel.setFamilyName(fullName.substring(0, index));
}
if (patientModel.getGivenName() == null && index > 0) {
patientModel.setGivenName(fullName.substring(index+1));
}
// カナ
String kana = patientModel.getKanaName();
if (kana != null) {
// 全角スペース->半角スペース
kana = kana.replace(FULL_SPACE, HALF_SPACE);
patientModel.setKanaName(kana);
// カナの FamilyName と GivenName を設定する
int index2 = kana.indexOf(HALF_SPACE);
if (patientModel.getKanaFamilyName() == null && index2 > 0) {
patientModel.setKanaFamilyName(kana.substring(0, index2));
}
if (patientModel.getKanaGivenName() == null && index2 > 0) {
patientModel.setKanaGivenName(kana.substring(index2+1));
}
}
// 住所をEmbedded に変換する
Collection<AddressModel> addresses = patientModel.getAddresses();
if (addresses != null && addresses.size() > 0) {
for (AddressModel bean : addresses) {
String addr = bean.getAddress().replace(FULL_SPACE, HALF_SPACE);
addr = addr.replace('ー', '-');
SimpleAddressModel simple = new SimpleAddressModel();
simple.setZipCode(bean.getZipCode());
simple.setAddress(addr);
patientModel.setSimpleAddressModel(simple);
break; // TODO
}
}
// 電話をフィールドにする
Collection<TelephoneModel> telephones = patientModel.getTelephones();
if (telephones != null) {
for (TelephoneModel bean : telephones) {
// MEMO へ設定
patientModel.setTelephone(bean.getMemo());
}
}
// 健康保険モジュールを設定する
// Patient oneToMany HealthInsuranceModel(PVTHealthInsuranceModelのXMLバイトデータを保持)
if (pvtInsurnaces != null && pvtInsurnaces.size() > 0) {
for (PVTHealthInsuranceModel bean : pvtInsurnaces) {
// 健康保険モジュールの BeanXml byte を生成し、
// 永続化のためのホルダ HealthInsuranceModelに変換し
// それを患者属性に追加する
HealthInsuranceModel insModel = new HealthInsuranceModel();
insModel.setBeanBytes(getXMLBytes(bean));
// EJB 3.0 の関連を設定する
patientModel.addHealthInsurance(insModel);
insModel.setPatient(patientModel);
}
}
}
//------------------------------------------------------
// 受付情報を設定する
// status=info ありだって、ヤレヤレ...
//------------------------------------------------------
if (pvtClaim != null) {
//s.oh^ 2014/03/13 ORCA患者登録対応
if(pvtClaim.getClaimStatus() != null && pvtClaim.getClaimStatus().trim().equals("regist")) {
Logger.getLogger("open.dolphin").info("受付登録情報受信");
}else{
Logger.getLogger("open.dolphin").info("受付登録ではないため受信した情報を破棄");
return null;
}
//s.oh$
// 2.0 から
model.setDeptCode(pvtClaim.getClaimDeptCode()); // 診療科コード
model.setDeptName(pvtClaim.getClaimDeptName()); // 診療科名
model.setDoctorId(pvtClaim.getAssignedDoctorId()); // 担当医コード
model.setDoctorName(pvtClaim.getAssignedDoctorName()); // 担当医名
model.setJmariNumber(pvtClaim.getJmariCode()); // JMARI
// (予定カルテ対応)
//model.setPvtDate(pvtClaim.getClaimRegistTime()); // 受付登録日時
if (isAfterToday(pvtClaim.getClaimRegistTime())) {
model.setPvtDate(dateAsSchedule(pvtClaim.getClaimRegistTime())); // 受付登録日時
} else {
model.setPvtDate(pvtClaim.getClaimRegistTime()); // 受付登録日時
}
model.setInsuranceUid(pvtClaim.getInsuranceUid()); // UUID
if (pvtInsurnaces != null && pvtInsurnaces.size() > 0) {
PVTHealthInsuranceModel bean = pvtInsurnaces.get(0); // 受付た保険情報の toString()
model.setFirstInsurance(bean.toString());
}
}
return model;
}
// 在宅関連(在宅患者登録)
public PVTClaim getPvtClaim() {
return pvtClaim;
}
/**
* MmlBody 要素をパースする。
*
* @param current 要素
*/
public void parseBody(Element body) {
// MmlModuleItem のリストを得る
List children = body.getChildren(MmlModuleItem);
//----------------------------
// それをイテレートする
//----------------------------
for (Iterator iterator = children.iterator(); iterator.hasNext();) {
Element moduleItem = (Element)iterator.next();
//---------------------------------------------------
// ModuleItem = docInfo + content なので夫々の要素を得る
//---------------------------------------------------
Element docInfoEle = moduleItem.getChild(docInfo);
Element contentEle = moduleItem.getChild(content);
// docInfo の contentModuleType を調べる
String attr = docInfoEle.getAttributeValue(contentModuleType);
//------------------------------
// contentModuleTypeで分岐する
//------------------------------
if (attr.equals(patientInfo)) {
//-----------------------
// 患者モジュールをパースする
//-----------------------
if (DEBUG) {
System.err.println("patientInfo をパース中");
}
patientModel = new PatientModel();
parsePatientInfo(docInfoEle, contentEle);
} else if (attr.equals(healthInsurance)) {
//------------------------------
// 健康保険モジュールをパースする
// GUIDをここで取得する
//------------------------------
String uuid = docInfoEle.getChild(docId).getChildTextTrim(uid);
if (DEBUG) {
System.err.println("healthInsurance をパース中");
System.err.println("HealthInsurance UUID = " + uuid);
}
if (pvtInsurnaces == null) {
pvtInsurnaces = new ArrayList<PVTHealthInsuranceModel>();
}
curInsurance = new PVTHealthInsuranceModel();
curInsurance.setGUID(uuid);
pvtInsurnaces.add(curInsurance);
parseHealthInsurance(docInfoEle, contentEle);
} else if (attr.equals(e_claim)) {
//------------------------------
// 受付情報をパースする
//------------------------------
if (DEBUG) {
System.err.println("claim をパース中");
}
pvtClaim = new PVTClaim();
parseClaim(docInfoEle, contentEle);
//s.oh^ 2014/08/19 施設患者一括表示機能
if(patientModel != null) {
patientModel.setAppMemo(pvtClaim.getClaimAppMemo());
}
//s.oh$
} else {
System.err.println("Unknown attribute value : " + attr);
}
}
}
/**
* 患者モジュールをパースする。
*
* @param content 患者要素
*/
private void parsePatientInfo(Element docInfo, Element content) {
//-------------------------------------
// 患者モジュールの要素をイテレートする
//-------------------------------------
List children = content.getChildren();
for (Iterator iterator = children.iterator(); iterator.hasNext();) {
Element child = (Element) iterator.next();
String qname = child.getQualifiedName();
if (qname.equals(mmlCm_Id)) {
String pid = child.getTextTrim();
patientModel.setPatientId(pid);
if (DEBUG) {
System.err.println("patientId = " + pid);
}
} else if (qname.equals(mmlNm_Name)) {
List attrs = child.getAttributes();
for (Iterator iter = attrs.iterator(); iter.hasNext(); ) {
Attribute attr = (Attribute) iter.next();
if (attr.getName().equals(repCode)) {
curRepCode = attr.getValue();
if (DEBUG) {
System.err.println("curRepCode = " + attr.getValue());
}
} else if (attr.getName().equals(tableId)) {
if (DEBUG) {
System.err.println("tableId = " + attr.getValue());
}
}
}
} else if (qname.equals(mmlNm_family)) {
if (curRepCode.equals(P)) {
patientModel.setKanaFamilyName(child.getTextTrim());
} else if (curRepCode.equals(I)) {
patientModel.setFamilyName(child.getTextTrim());
} else if (curRepCode.equals(A)) {
patientModel.setRomanFamilyName(child.getTextTrim());
}
if (DEBUG) {
System.err.println("family = " + child.getTextTrim());
}
} else if (qname.equals(mmlNm_given)) {
if (curRepCode.equals(P)) {
patientModel.setKanaGivenName(child.getTextTrim());
} else if (curRepCode.equals(I)) {
patientModel.setGivenName(child.getTextTrim());
} else if (curRepCode.equals(A)) {
patientModel.setRomanGivenName(child.getTextTrim());
}
if (DEBUG) {
System.err.println("given = " + child.getTextTrim());
}
} else if (qname.equals(mmlNm_fullname)) {
if (curRepCode.equals(P)) {
patientModel.setKanaName(child.getTextTrim());
} else if (curRepCode.equals(I)) {
patientModel.setFullName(child.getTextTrim());
} else if (curRepCode.equals(A)) {
patientModel.setRomanName(child.getTextTrim());
}
if (DEBUG) {
System.err.println("fullName = " + child.getTextTrim());
}
} else if (qname.equals(mmlPi_birthday)) {
patientModel.setBirthday(child.getTextTrim());
if (DEBUG) {
System.err.println("birthday = " + child.getTextTrim());
}
} else if (qname.equals(mmlPi_sex)) {
patientModel.setGender(child.getTextTrim());
if (DEBUG) {
System.err.println("gender = " + child.getTextTrim());
}
} else if (qname.equals(mmlAd_Address)) {
curAddress = new AddressModel();
patientModel.addAddress(curAddress);
List attrs = child.getAttributes();
for (Iterator iter = attrs.iterator(); iter.hasNext(); ) {
Attribute attr = (Attribute) iter.next();
if (attr.getName().equals(addressClass)) {
curRepCode = attr.getValue();
curAddress.setAddressType(attr.getValue());
if (DEBUG) {
System.err.println("addressClass = " + attr.getValue());
}
} else if (attr.getName().equals(tableId)) {
curAddress.setAddressTypeCodeSys(attr.getValue());
if (DEBUG) {
System.err.println("tableId = " + attr.getValue());
}
}
}
} else if (qname.equals(mmlAd_full)) {
curAddress.setAddress(child.getTextTrim());
if (DEBUG) {
System.err.println("address = " + child.getTextTrim());
}
} else if (qname.equals(mmlAd_zip)) {
curAddress.setZipCode(child.getTextTrim());
if (DEBUG) {
System.err.println("zip = " + child.getTextTrim());
}
} else if (qname.equals(mmlPh_Phone)) {
curTelephone = new TelephoneModel();
patientModel.addTelephone(curTelephone);
} else if (qname.equals(mmlPh_area)) {
String val = child.getTextTrim();
//val = ZenkakuUtils.utf8Replace(val);
curTelephone.setArea(val);
if (DEBUG) {
System.err.println("area = " + val);
}
} else if (qname.equals(mmlPh_city)) {
String val = child.getTextTrim();
//val = ZenkakuUtils.utf8Replace(val);
curTelephone.setCity(val);
if (DEBUG) {
System.err.println("city = " + val);
}
} else if (qname.equals(mmlPh_number)) {
String val = child.getTextTrim();
//val = ZenkakuUtils.utf8Replace(val);
curTelephone.setNumber(val);
if (DEBUG) {
System.err.println("number = " + val);
}
} else if (qname.equals(mmlPh_memo)) {
// ORCA
curTelephone.setMemo(child.getTextTrim());
if (DEBUG) {
System.err.println("memo = " + child.getTextTrim());
}
}
parsePatientInfo(docInfo, child);
}
}
/**
* 健康保険モジュールをパースする。
*
* @param content 健康保険要素
*/
private void parseHealthInsurance(Element docInfo, Element content) {
// HealthInsuranceModule を得る
Element hModule = content.getChild(HealthInsuranceModule, mmlHi);
if (hModule == null) {
System.err.println("No HealthInsuranceModule");
return;
}
// InsuranceClass を解析する
Element insuranceClassEle = hModule.getChild(insuranceClass, mmlHi);
if (insuranceClass != null) {
curInsurance.setInsuranceClass(insuranceClassEle.getTextTrim());
if (insuranceClassEle.getAttribute(ClassCode, mmlHi) != null) {
curInsurance.setInsuranceClassCode(insuranceClassEle.getAttributeValue(ClassCode, mmlHi));
}
if (insuranceClassEle.getAttribute(tableId, mmlHi) != null) {
curInsurance.setInsuranceClassCodeSys(insuranceClassEle.getAttributeValue(tableId, mmlHi));
}
}
// insurance Number を得る
if (hModule.getChildTextTrim(insuranceNumber, mmlHi) != null) {
curInsurance.setInsuranceNumber(hModule.getChildTextTrim(insuranceNumber, mmlHi));
}
// clientId を得る
Element clientIdEle = hModule.getChild(clientId, mmlHi);
if (clientIdEle != null) {
if (clientIdEle.getChild(group,mmlHi) != null) {
curInsurance.setClientGroup(clientIdEle.getChildTextTrim(group,mmlHi));
}
if (clientIdEle.getChild(number,mmlHi) != null) {
curInsurance.setClientNumber(clientIdEle.getChildTextTrim(number,mmlHi));
}
}
// familyClass を得る
if (hModule.getChild(familyClass, mmlHi) != null) {
curInsurance.setFamilyClass(hModule.getChildTextTrim(familyClass, mmlHi));
}
// startDateを得る
if (hModule.getChild(startDate, mmlHi) != null) {
curInsurance.setStartDate(hModule.getChildTextTrim(startDate, mmlHi));
}
// expiredDateを得る
if (hModule.getChild(expiredDate, mmlHi) != null) {
curInsurance.setExpiredDate(hModule.getChildTextTrim(expiredDate, mmlHi));
}
// payInRatio を得る
if (hModule.getChild(paymentInRatio, mmlHi) != null) {
curInsurance.setPayInRatio(hModule.getChildTextTrim(paymentInRatio, mmlHi));
}
// payOutRatio を得る
if (hModule.getChild(paymentOutRatio, mmlHi) != null) {
curInsurance.setPayOutRatio(hModule.getChildTextTrim(paymentOutRatio, mmlHi));
}
if (DEBUG) {
System.err.println("insuranceClass = " + curInsurance.getInsuranceClass());
System.err.println("insurance ClassCode = " + curInsurance.getInsuranceClassCode());
System.err.println("insurance tableId = " + curInsurance.getInsuranceClassCodeSys());
System.err.println("insuranceNumber = " + curInsurance.getInsuranceNumber());
System.err.println("group = " + curInsurance.getClientGroup());
System.err.println("number = " + curInsurance.getClientNumber());
System.err.println("familyClass = " + curInsurance.getFamilyClass());
System.err.println("startDate = " + curInsurance.getStartDate());
System.err.println("expiredDate = " + curInsurance.getExpiredDate());
System.err.println("paymentInRatio = " + curInsurance.getPayInRatio());
System.err.println("paymentOutRatio = " + curInsurance.getPayOutRatio());
}
//--------------------------------
// publicInsurance をパースする
//--------------------------------
Element publicInsuranceEle = hModule.getChild(publicInsurance, mmlHi);
if (publicInsuranceEle != null) {
List children = publicInsuranceEle.getChildren();
for (Iterator iterator = children.iterator(); iterator.hasNext();) {
// publicInsuranceItem を得る
Element publicInsuranceItem = (Element) iterator.next();
curPublicItem = new PVTPublicInsuranceItemModel();
curInsurance.addPvtPublicInsuranceItem(curPublicItem);
// priority
if (publicInsuranceItem.getAttribute(priority, mmlHi) != null) {
curPublicItem.setPriority(publicInsuranceItem.getAttributeValue(priority, mmlHi));
}
// providerName
if (publicInsuranceItem.getChild(providerName, mmlHi) != null) {
curPublicItem.setProviderName(publicInsuranceItem.getChildTextTrim(providerName, mmlHi));
}
// provider
if (publicInsuranceItem.getChild(provider, mmlHi) != null) {
curPublicItem.setProvider(publicInsuranceItem.getChildTextTrim(provider, mmlHi));
}
// recipient
if (publicInsuranceItem.getChild(recipient, mmlHi) != null) {
curPublicItem.setRecipient(publicInsuranceItem.getChildTextTrim(recipient, mmlHi));
}
// startDate
if (publicInsuranceItem.getChild(startDate, mmlHi) != null) {
curPublicItem.setStartDate(publicInsuranceItem.getChildTextTrim(startDate, mmlHi));
}
// expiredDate
if (publicInsuranceItem.getChild(expiredDate, mmlHi) != null) {
curPublicItem.setExpiredDate(publicInsuranceItem.getChildTextTrim(expiredDate, mmlHi));
}
// paymentRatio
Element paymentRatioEle = publicInsuranceItem.getChild(paymentRatio, mmlHi);
if (paymentRatioEle != null) {
curPublicItem.setPaymentRatio(paymentRatioEle.getTextTrim());
if (paymentRatioEle.getAttribute(ratioType, mmlHi) != null) {
curPublicItem.setPaymentRatioType(paymentRatioEle.getAttributeValue(ratioType, mmlHi));
}
}
if (DEBUG) {
System.err.println("priority = " + curPublicItem.getPriority());
System.err.println("providerName = " + curPublicItem.getProviderName());
System.err.println("provider = " + curPublicItem.getProvider());
System.err.println("recipient = " + curPublicItem.getRecipient());
System.err.println("startDate = " + curPublicItem.getStartDate());
System.err.println("expiredDate = " + curPublicItem.getExpiredDate());
System.err.println("paymentRatio = " + curPublicItem.getPaymentRatio());
System.err.println("paymentRatioType = " + curPublicItem.getPaymentRatioType());
}
}
}
}
/**
* 受付情報をパースする。
*
* @param content 受付情報要素
*/
private void parseClaim(Element docInfo, Element content) {
//-------------------------------------------------------
// ClaimModule の DocInfo に含まれる診療科と担当医を抽出する
//-------------------------------------------------------
Element creatorInfo = docInfo.getChild(CreatorInfo, mmlCi);
Element psiInfo = creatorInfo.getChild(PersonalizedInfo, mmlPsi);
// 担当医ID
pvtClaim.setAssignedDoctorId(psiInfo.getChildTextTrim(Id, mmlCm));
// 担当医名
Element personNameEle = psiInfo.getChild(personName, mmlPsi);
Element nameEle = personNameEle.getChild(Name, mmlNm);
if (nameEle != null) {
Element fullName = nameEle.getChild(fullname, mmlNm);
if (fullName != null) {
pvtClaim.setAssignedDoctorName(fullName.getTextTrim());
}
}
// 施設情報 JMARI 4.0 から
Element facility = psiInfo.getChild(Facility, mmlFc);
pvtClaim.setJmariCode(facility.getChildTextTrim(Id, mmlCm));
// 診療科情報
Element dept = psiInfo.getChild(Department, mmlDp);
pvtClaim.setClaimDeptName(dept.getChildTextTrim(name, mmlDp));
pvtClaim.setClaimDeptCode(dept.getChildTextTrim(Id, mmlCm));
// ClaimInfoを解析する
Element claimModule = content.getChild(ClaimModule, claim);
Element claimInfo = claimModule.getChild(information, claim);
// status
pvtClaim.setClaimStatus(claimInfo.getAttributeValue(status, claim));
// registTime
pvtClaim.setClaimRegistTime(claimInfo.getAttributeValue(registTime, claim));
// admitFlag
pvtClaim.setClaimAdmitFlag(claimInfo.getAttributeValue(admitFlag, claim));
// insuranceUid
pvtClaim.setInsuranceUid(claimInfo.getAttributeValue(insuranceUid, claim));
// 在宅関連(在宅患者登録)
Element claimAppoint = claimInfo.getChild(appoint, claim);
if(claimAppoint != null) {
pvtClaim.setClaimAppMemo(claimAppoint.getChildTextTrim(memo, claim));
}
// DEBUG 出力
if (DEBUG) {
System.err.println("担当医ID = " + pvtClaim.getAssignedDoctorId());
System.err.println("担当医名 = " + pvtClaim.getAssignedDoctorName());
System.err.println("JMARI コード = " + pvtClaim.getJmariCode());
System.err.println("診療科名 = " + pvtClaim.getClaimDeptName());
System.err.println("診療科コード = " + pvtClaim.getClaimDeptCode());
System.err.println("status = " + pvtClaim.getClaimStatus());
System.err.println("registTime = " + pvtClaim.getClaimRegistTime());
System.err.println("admitFlag = " + pvtClaim.getClaimAdmitFlag());
System.err.println("insuranceUid = " + pvtClaim.getInsuranceUid());
}
}
protected byte[] getXMLBytes(Object bean) {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
XMLEncoder e = new XMLEncoder(new BufferedOutputStream(bo));
e.writeObject(bean);
e.close();
return bo.toByteArray();
}
// (予定カルテ対応)
private boolean isAfterToday(String mmlDate) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date test = sdf.parse(mmlDate);
GregorianCalendar gc1 = new GregorianCalendar();
gc1.setTime(test);
gc1.clear(Calendar.HOUR_OF_DAY);
gc1.clear(Calendar.MINUTE);
gc1.clear(Calendar.SECOND);
gc1.clear(Calendar.MILLISECOND);
GregorianCalendar gc2 = new GregorianCalendar();
gc2.setTime(new Date());
gc2.clear(Calendar.HOUR_OF_DAY);
gc2.clear(Calendar.MINUTE);
gc2.clear(Calendar.SECOND);
gc2.clear(Calendar.MILLISECOND);
//s.oh^ 2013/05/16 受付不具合修正
//return gc1.after(gc2);
boolean after = false;
if(gc1.get(Calendar.YEAR) > gc2.get(Calendar.YEAR)) {
after = true;
}else if(gc1.get(Calendar.MONTH) > gc2.get(Calendar.MONTH)) {
after = true;
}else if(gc1.get(Calendar.DAY_OF_MONTH) > gc2.get(Calendar.DAY_OF_MONTH)) {
after = true;
}
return after;
//s.oh$
} catch (ParseException ex) {
}
return false;
}
// (予定カルテ対応)
private String dateAsSchedule(String mmlDate) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date test = sdf.parse(mmlDate);
GregorianCalendar gc1 = new GregorianCalendar();
gc1.setTime(test);
gc1.set(Calendar.HOUR_OF_DAY, 0);
gc1.set(Calendar.MINUTE, 0);
gc1.set(Calendar.SECOND, 0);
gc1.set(Calendar.MILLISECOND, 0);
return sdf.format(gc1.getTime());
} catch (ParseException ex) {
}
return null;
}
}