/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package open.dolphin.impl.server;
import java.io.*;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import open.dolphin.utilities.utility.OtherProcessLink;
import open.dolphin.infomodel.PatientModel;
import open.dolphin.infomodel.PatientVisitModel;
import open.dolphin.project.Project;
/**
* 受付連携
* @author oh
*/
public class PVTReceptionLink {
private static final String KEY_PATIENT_ID = "%PATIENTID%"; // 患者ID
private static final String KEY_PATIENT_ID_0SUP = "%PATIENTID0SUP%"; // 患者ID(0サプレス)
private static final String KEY_PATIENT_KANJI = "%PATIENTKANJI%"; // 患者氏名(漢字)
private static final String KEY_PATIENT_KANA = "%PATIENTKANA%"; // 患者氏名(半角カナ)
private static final String KEY_PATIENT_ZENKAKUKANA = "%PATIENTZENKAKUKANA%"; // 患者氏名(全角カナ)
private static final String KEY_PATIENT_ASCII = "%PATIENTASCII%"; // 患者氏名(ASCII)
private static final String KEY_PATIENT_SEX = "%PATIENTSEX%"; // 患者性別
private static final String KEY_PATIENT_BIRTH = "%PATIENTBIRTH%"; // 患者誕生日
private static final String KEY_TODAY = "%TODAY%"; // 今日の日付
private static final String KEY_PVTDATE = "%PVTDATE%"; // 受付日時
private static final String KEY_PATIENT_ZIPCODE = "%PATIENTZIPCODE%"; // 患者郵便番号
private static final String KEY_PATIENT_ADDRESS = "%PATIENTADDRESS%"; // 患者住所
private static final String KEY_PATIENT_PHONE = "%PATIENTPHONE%"; // 患者電話番号
private static final String KEY_PATIENT_TELEPHONE = "%PATIENTTELEPHONE%"; // 患者電話
private static final String KEY_PATIENT_MOBILEPHONE = "%PATIENTMOBILEPHONE%"; // 患者携帯電話
//private static final String KEY_INSURANCECLASS = "%INSURANCECLASS%"; // 保険種別
//private static final String KEY_INSURANCECLASSCODE = "%INSURANCECLASSCODE%"; // 保険種別コード
//private static final String KEY_INSURANCENUMBER = "%INSURANCENUMBER%"; // 保険者番号
//private static final String KEY_FAMILYCLASS = "%FAMILYCLASS%"; // 本人家族区分
//s.oh^ 2014/08/01 受付連携
private static final String KEY_DEPT_CODE = "%DEPTCODE%"; // 診療科コード
private static final String KEY_DEPT_NAME = "%DEPTNAME%"; // 診療科
private static final String KEY_ATTENDING_KANJI = "%ATTENDINGKANJI%"; // 担当医(漢字)
private static final String KEY_ATTENDING_ID = "%ATTENDINGID%"; // 担当医(ID)
private static final String KEY_INSURANCE_FIRST = "%INSURANCEFIRST%"; // 保険
//s.oh$
private static final String KEY_FILENAME_DATE = "%FILENAMEDATE%"; // ファイル名
private static final String KEY_RETURN = "%RETURN%"; // 改行コード
private static final String[][] KANA = { {"ア", "ア"}, {"イ", "イ"}, {"ウ", "ウ"}, {"エ", "エ"}, {"オ", "オ"},
{"カ", "カ"}, {"キ", "キ"}, {"ク", "ク"}, {"ケ", "ケ"}, {"コ", "コ"},
{"サ", "サ"}, {"シ", "シ"}, {"ス", "ス"}, {"セ", "セ"}, {"ソ", "ソ"},
{"タ", "タ"}, {"チ", "チ"}, {"ツ", "ツ"}, {"テ", "テ"}, {"ト", "ト"},
{"ナ", "ナ"}, {"ニ", "ニ"}, {"ヌ", "ヌ"}, {"ネ", "ネ"}, {"ノ", "ノ"},
{"ハ", "ハ"}, {"ヒ", "ヒ"}, {"フ", "フ"}, {"ヘ", "ヘ"}, {"ホ", "ホ"},
{"マ", "マ"}, {"ミ", "ミ"}, {"ム", "ム"}, {"メ", "メ"}, {"モ", "モ"},
{"ヤ", "ヤ"}, {"ユ", "ユ"}, {"ヨ", "ヨ"},
{"ラ", "ラ"}, {"リ", "リ"}, {"ル", "ル"}, {"レ", "レ"}, {"ロ", "ロ"},
{"ワ", "ワ"}, {"ヲ", "ヲ"}, {"ン", "ン"},
{"ァ", "ァ"}, {"ィ", "ィ"}, {"ゥ", "ゥ"}, {"ェ", "ェ"}, {"ォ", "ォ"},
{"ッ", "ッ"},
{"ャ", "ャ"}, {"ュ", "ュ"}, {"ョ", "ョ"},
{"ガ", "ガ"}, {"ギ", "ギ"}, {"グ", "グ"}, {"ゲ", "ゲ"}, {"ゴ", "ゴ"},
{"ザ", "ザ"}, {"ジ", "ジ"}, {"ズ", "ズ"}, {"ゼ", "ゼ"}, {"ゾ", "ゾ"},
{"ダ", "ダ"}, {"ヂ", "ヂ"}, {"ヅ", "ヅ"}, {"デ", "デ"}, {"ド", "ド"},
{"バ", "バ"}, {"ビ", "ビ"}, {"ブ", "ブ"}, {"ベ", "ベ"}, {"ボ", "ボ"},
{"パ", "パ"}, {"ピ", "ピ"}, {"プ", "プ"}, {"ペ", "ペ"}, {"ポ", "ポ"},
{" ", " "}, {"ー", "-"},
{"0", "0"}, {"1", "1"}, {"2", "2"}, {"3", "3"}, {"4", "4"}, {"5", "5"}, {"6", "6"}, {"7", "7"}, {"8", "8"}, {"9", "9"},
{"A", "A"}, {"B", "B"}, {"C", "C"}, {"D", "D"}, {"E", "E"}, {"F", "F"}, {"G", "G"}, {"H", "H"}, {"I", "I"}, {"J", "J"},
{"K", "K"}, {"L", "L"}, {"M", "M"}, {"N", "N"}, {"O", "O"}, {"P", "P"}, {"Q", "Q"}, {"R", "R"}, {"S", "S"}, {"T", "T"},
{"U", "U"}, {"V", "V"}, {"W", "W"}, {"X", "X"}, {"Y", "Y"}, {"Z", "Z"},
{"a", "a"}, {"b", "b"}, {"c", "c"}, {"d", "d"}, {"e", "e"}, {"f", "f"}, {"g", "g"}, {"h", "h"}, {"i", "i"}, {"j", "j"},
{"k", "k"}, {"l", "l"}, {"m", "m"}, {"n", "n"}, {"o", "o"}, {"p", "p"}, {"q", "q"}, {"r", "r"}, {"s", "s"}, {"t", "t"},
{"u", "u"}, {"v", "v"}, {"w", "w"}, {"x", "x"}, {"y", "y"}, {"z", "z"} };
private static final String DEFAULT_DATE_FORMAT = "yyyyMMdd";
private static final String DEFAULT_CSV_ENCODING = "Shift_JIS";
private static final String DEFAULT_XML_ENCODING = "Shift_JIS";
public PVTReceptionLink() {
}
/**
* CSV連携
* @param pvtModel
*/
public void receptionCSVLink(PatientVisitModel pvtModel) {
PatientModel patientModel = pvtModel.getPatientModel();
if(patientModel == null) return;
PVTKanaToAscii kana2Ascii = new PVTKanaToAscii();
String format = Project.getString("reception.csvlink.format");
if(format == null || format.length() <= 0) return;
String dir = Project.getString("reception.csvlink.dir");
if(dir == null || dir.length() <= 0) return;
String birth = (patientModel.getBirthday() != null) ? patientModel.getBirthday().replaceAll("-", "").replaceAll("/", "") : "";
SimpleDateFormat sdf1 = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
String birthFormat = Project.getString("reception.csvlink.birthformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf2 = new SimpleDateFormat(birthFormat);
Date date = sdf1.parse(birth, new ParsePosition(0));
String sexFormats = Project.getString("reception.csvlink.malefemale", "m,f");
String[] sexFormat = sexFormats.split(",");
String sex = (patientModel.getGender() != null) ? (patientModel.getGender().toLowerCase().startsWith("m") ? sexFormat[0] : sexFormat[1]) : "";
String encoding = Project.getString("reception.csvlink.encoding", DEFAULT_CSV_ENCODING);
format = format.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
format = format.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
format = format.replaceAll(KEY_PATIENT_KANJI, patientModel.getFullName());
format = format.replaceAll(KEY_PATIENT_KANA, fullKanaToHalfKana(patientModel.getKanaName()));
format = format.replaceAll(KEY_PATIENT_ZENKAKUKANA, patientModel.getKanaName());
format = format.replaceAll(KEY_PATIENT_ASCII, kana2Ascii.CHGKanatoASCII(patientModel.getKanaName(), ""));
format = format.replaceAll(KEY_PATIENT_SEX, sex);
format = format.replaceAll(KEY_PATIENT_BIRTH, sdf2.format(date));
format = format.replaceAll(KEY_PVTDATE, pvtModel.getPvtDate());
if(patientModel.getAddress() != null) {
if(patientModel.getAddress().getZipCode() != null) {
format = format.replaceAll(KEY_PATIENT_ZIPCODE, patientModel.getAddress().getZipCode());
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
}
if(patientModel.getAddress().getAddress() != null) {
format = format.replaceAll(KEY_PATIENT_ADDRESS, patientModel.getAddress().getAddress());
}else{
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getTelephone());
}else if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_PHONE, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_TELEPHONE, patientModel.getTelephone());
}else{
format = format.replaceAll(KEY_PATIENT_TELEPHONE, "");
}
if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, "");
}
String file = Project.getString("reception.csvlink.filename", "ID_%PATIENTID%");
String fDateFormat = Project.getString("reception.csvlink.filename.dateformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf3 = new SimpleDateFormat(fDateFormat);
Date today = new Date();
file = file.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
file = file.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
file = file.replaceAll(KEY_TODAY, sdf3.format(today));
String path = dir + File.separator + file;
if(path.startsWith("[TCP]")) {
path = path.substring(path.indexOf("]") + 1) + ".csv";
String[] data = path.split(",");
if(data.length < 3) return;
OtherProcessLink opl = new OtherProcessLink();
opl.linkTCPToFile(format, data[0], Integer.valueOf(data[1]), data[2]);
}else{
try {
if(Project.getBoolean("reception.csvlink.rename", true)) {
File tmp = new File(path);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
File csv = new File(path + ".csv");
tmp.renameTo(csv);
}else{
File tmp = new File(path + ".csv");
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
}
} catch (IOException ex) {
Logger.getLogger(PVTBuilder.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
/**
* CSV連携
* @param pvtModel
*/
public void receptionCSVLink2(PatientVisitModel pvtModel) {
PatientModel patientModel = pvtModel.getPatientModel();
if(patientModel == null) return;
PVTKanaToAscii kana2Ascii = new PVTKanaToAscii();
String format = Project.getString("reception.csvlink2.format");
if(format == null || format.length() <= 0) return;
String dir = Project.getString("reception.csvlink2.dir");
if(dir == null || dir.length() <= 0) return;
String birth = (patientModel.getBirthday() != null) ? patientModel.getBirthday().replaceAll("-", "").replaceAll("/", "") : "";
SimpleDateFormat sdf1 = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
String birthFormat = Project.getString("reception.csvlink2.birthformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf2 = new SimpleDateFormat(birthFormat);
Date date = sdf1.parse(birth, new ParsePosition(0));
String sexFormats = Project.getString("reception.csvlink2.malefemale", "m,f");
String[] sexFormat = sexFormats.split(",");
String sex = (patientModel.getGender() != null) ? (patientModel.getGender().toLowerCase().startsWith("m") ? sexFormat[0] : sexFormat[1]) : "";
String encoding = Project.getString("reception.csvlink2.encoding", DEFAULT_CSV_ENCODING);
format = format.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
format = format.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
format = format.replaceAll(KEY_PATIENT_KANJI, patientModel.getFullName());
format = format.replaceAll(KEY_PATIENT_KANA, fullKanaToHalfKana(patientModel.getKanaName()));
format = format.replaceAll(KEY_PATIENT_ZENKAKUKANA, patientModel.getKanaName());
format = format.replaceAll(KEY_PATIENT_ASCII, kana2Ascii.CHGKanatoASCII(patientModel.getKanaName(), ""));
format = format.replaceAll(KEY_PATIENT_SEX, sex);
format = format.replaceAll(KEY_PATIENT_BIRTH, sdf2.format(date));
format = format.replaceAll(KEY_PVTDATE, pvtModel.getPvtDate());
if(patientModel.getAddress() != null) {
if(patientModel.getAddress().getZipCode() != null) {
format = format.replaceAll(KEY_PATIENT_ZIPCODE, patientModel.getAddress().getZipCode());
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
}
if(patientModel.getAddress().getAddress() != null) {
format = format.replaceAll(KEY_PATIENT_ADDRESS, patientModel.getAddress().getAddress());
}else{
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getTelephone());
}else if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_PHONE, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_TELEPHONE, patientModel.getTelephone());
}else{
format = format.replaceAll(KEY_PATIENT_TELEPHONE, "");
}
if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, "");
}
String file = Project.getString("reception.csvlink2.filename", "ID_%PATIENTID%");
String fDateFormat = Project.getString("reception.csvlink2.filename.dateformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf3 = new SimpleDateFormat(fDateFormat);
Date today = new Date();
file = file.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
file = file.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
file = file.replaceAll(KEY_TODAY, sdf3.format(today));
String path = dir + File.separator + file;
if(path.startsWith("[TCP]")) {
path = path.substring(path.indexOf("]") + 1) + ".csv";
String[] data = path.split(",");
if(data.length < 3) return;
OtherProcessLink opl = new OtherProcessLink();
opl.linkTCPToFile(format, data[0], Integer.valueOf(data[1]), data[2]);
}else{
try {
if(Project.getBoolean("reception.csvlink2.rename", true)) {
File tmp = new File(path);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
File csv = new File(path + ".csv");
tmp.renameTo(csv);
}else{
File tmp = new File(path + ".csv");
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
}
} catch (IOException ex) {
Logger.getLogger(PVTBuilder.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
/**
* CSV連携
* @param pvtModel
*/
public void receptionCSVLink3(PatientVisitModel pvtModel) {
PatientModel patientModel = pvtModel.getPatientModel();
if(patientModel == null) return;
PVTKanaToAscii kana2Ascii = new PVTKanaToAscii();
String format = Project.getString("reception.csvlink3.format");
if(format == null || format.length() <= 0) return;
String dir = Project.getString("reception.csvlink3.dir");
if(dir == null || dir.length() <= 0) return;
String birth = (patientModel.getBirthday() != null) ? patientModel.getBirthday().replaceAll("-", "").replaceAll("/", "") : "";
SimpleDateFormat sdf1 = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
String birthFormat = Project.getString("reception.csvlink3.birthformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf2 = new SimpleDateFormat(birthFormat);
Date date = sdf1.parse(birth, new ParsePosition(0));
String sexFormats = Project.getString("reception.csvlink3.malefemale", "m,f");
String[] sexFormat = sexFormats.split(",");
String sex = (patientModel.getGender() != null) ? (patientModel.getGender().toLowerCase().startsWith("m") ? sexFormat[0] : sexFormat[1]) : "";
String encoding = Project.getString("reception.csvlink3.encoding", DEFAULT_CSV_ENCODING);
format = format.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
format = format.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
format = format.replaceAll(KEY_PATIENT_KANJI, patientModel.getFullName());
format = format.replaceAll(KEY_PATIENT_KANA, fullKanaToHalfKana(patientModel.getKanaName()));
format = format.replaceAll(KEY_PATIENT_ZENKAKUKANA, patientModel.getKanaName());
format = format.replaceAll(KEY_PATIENT_ASCII, kana2Ascii.CHGKanatoASCII(patientModel.getKanaName(), ""));
format = format.replaceAll(KEY_PATIENT_SEX, sex);
format = format.replaceAll(KEY_PATIENT_BIRTH, sdf2.format(date));
format = format.replaceAll(KEY_PVTDATE, pvtModel.getPvtDate());
if(patientModel.getAddress() != null) {
if(patientModel.getAddress().getZipCode() != null) {
format = format.replaceAll(KEY_PATIENT_ZIPCODE, patientModel.getAddress().getZipCode());
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
}
if(patientModel.getAddress().getAddress() != null) {
format = format.replaceAll(KEY_PATIENT_ADDRESS, patientModel.getAddress().getAddress());
}else{
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getTelephone());
}else if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_PHONE, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_TELEPHONE, patientModel.getTelephone());
}else{
format = format.replaceAll(KEY_PATIENT_TELEPHONE, "");
}
if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, "");
}
String file = Project.getString("reception.csvlink3.filename", "ID_%PATIENTID%");
String fDateFormat = Project.getString("reception.csvlink3.filename.dateformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf3 = new SimpleDateFormat(fDateFormat);
Date today = new Date();
file = file.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
file = file.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
file = file.replaceAll(KEY_TODAY, sdf3.format(today));
String path = dir + File.separator + file;
if(path.startsWith("[TCP]")) {
path = path.substring(path.indexOf("]") + 1) + ".csv";
String[] data = path.split(",");
if(data.length < 3) return;
OtherProcessLink opl = new OtherProcessLink();
opl.linkTCPToFile(format, data[0], Integer.valueOf(data[1]), data[2]);
}else{
try {
if(Project.getBoolean("reception.csvlink3.rename", true)) {
File tmp = new File(path);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
File csv = new File(path + ".csv");
tmp.renameTo(csv);
}else{
File tmp = new File(path + ".csv");
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
}
} catch (IOException ex) {
Logger.getLogger(PVTBuilder.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
/**
* XML連携
* @param pvtModel
*/
public void receptionXMLLink(PatientVisitModel pvtModel) {
PatientModel patientModel = pvtModel.getPatientModel();
if(patientModel == null) return;
PVTKanaToAscii kana2Ascii = new PVTKanaToAscii();
StringBuilder sb = new StringBuilder();
String format = Project.getString("reception.xmllink.format");
if(format == null || format.length() <= 0) return;
String dir = Project.getString("reception.xmllink.dir");
if(dir == null || dir.length() <= 0) return;
String birth = (patientModel.getBirthday() != null) ? patientModel.getBirthday().replaceAll("-", "").replaceAll("/", "") : "";
SimpleDateFormat sdf1 = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
String birthFormat = Project.getString("reception.xmllink.birthformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf2 = new SimpleDateFormat(birthFormat);
Date date = sdf1.parse(birth, new ParsePosition(0));
String sexFormats = Project.getString("reception.xmllink.malefemale", "m,f");
String[] sexFormat = sexFormats.split(",");
String sex = (patientModel.getGender() != null) ? (patientModel.getGender().toLowerCase().startsWith("m") ? sexFormat[0] : sexFormat[1]) : "";
String encoding = Project.getString("reception.xmllink.encoding", DEFAULT_XML_ENCODING);
sb.append("<?xml version=\"1.0\" encoding=\"" + encoding + "\"?>");
format = format.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
format = format.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
format = format.replaceAll(KEY_PATIENT_KANJI, patientModel.getFullName());
format = format.replaceAll(KEY_PATIENT_KANA, fullKanaToHalfKana(patientModel.getKanaName()));
format = format.replaceAll(KEY_PATIENT_ZENKAKUKANA, patientModel.getKanaName());
format = format.replaceAll(KEY_PATIENT_ASCII, kana2Ascii.CHGKanatoASCII(patientModel.getKanaName(), ""));
format = format.replaceAll(KEY_PATIENT_SEX, sex);
format = format.replaceAll(KEY_PATIENT_BIRTH, sdf2.format(date));
format = format.replaceAll(KEY_PVTDATE, pvtModel.getPvtDate());
if(patientModel.getAddress() != null) {
if(patientModel.getAddress().getZipCode() != null) {
format = format.replaceAll(KEY_PATIENT_ZIPCODE, patientModel.getAddress().getZipCode());
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
}
if(patientModel.getAddress().getAddress() != null) {
format = format.replaceAll(KEY_PATIENT_ADDRESS, patientModel.getAddress().getAddress());
}else{
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getTelephone());
}else if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_PHONE, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_TELEPHONE, patientModel.getTelephone());
}else{
format = format.replaceAll(KEY_PATIENT_TELEPHONE, "");
}
if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, "");
}
sb.append(format);
String file = Project.getString("reception.xmllink.filename", "ID_%PATIENTID%");
String fDateFormat = Project.getString("reception.xmllink.filename.dateformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf3 = new SimpleDateFormat(fDateFormat);
Date today = new Date();
file = file.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
file = file.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
file = file.replaceAll(KEY_TODAY, sdf3.format(today));
String path = dir + File.separator + file;
if(path.startsWith("[TCP]")) {
path = path.substring(path.indexOf("]") + 1) + ".xml";
String[] data = path.split(",");
if(data.length < 3) return;
OtherProcessLink opl = new OtherProcessLink();
opl.linkTCPToFile(sb.toString(), data[0], Integer.valueOf(data[1]), data[2]);
}else{
try {
if(Project.getBoolean("reception.xmllink.rename", true)) {
File tmp = new File(path);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(sb.toString());
bw.newLine();
}
File xml = new File(path + ".xml");
tmp.renameTo(xml);
}else{
File tmp = new File(path + ".xml");
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
}
} catch (IOException ex) {
Logger.getLogger(PVTBuilder.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
/**
* 連携
* @param pvtModel
*/
public void receptionLink(PatientVisitModel pvtModel) {
PatientModel patientModel = pvtModel.getPatientModel();
if(patientModel == null) return;
PVTKanaToAscii kana2Ascii = new PVTKanaToAscii();
String format = Project.getString("reception.link.format");
if(format == null || format.length() <= 0) return;
String dir = Project.getString("reception.link.dir");
if(dir == null || dir.length() <= 0) return;
String birth = (patientModel.getBirthday() != null) ? patientModel.getBirthday().replaceAll("-", "").replaceAll("/", "") : "";
SimpleDateFormat sdf1 = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
String birthFormat = Project.getString("reception.link.birthformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf2 = new SimpleDateFormat(birthFormat);
Date date = sdf1.parse(birth, new ParsePosition(0));
String sexFormats = Project.getString("reception.link.malefemale", "m,f");
String[] sexFormat = sexFormats.split(",");
String sex = (patientModel.getGender() != null) ? (patientModel.getGender().toLowerCase().startsWith("m") ? sexFormat[0] : sexFormat[1]) : "";
String encoding = Project.getString("reception.link.encoding", DEFAULT_CSV_ENCODING);
format = format.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
format = format.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
format = format.replaceAll(KEY_PATIENT_KANJI, patientModel.getFullName());
format = format.replaceAll(KEY_PATIENT_KANA, fullKanaToHalfKana(patientModel.getKanaName()));
format = format.replaceAll(KEY_PATIENT_ZENKAKUKANA, patientModel.getKanaName());
format = format.replaceAll(KEY_PATIENT_ASCII, kana2Ascii.CHGKanatoASCII(patientModel.getKanaName(), ""));
format = format.replaceAll(KEY_PATIENT_SEX, sex);
format = format.replaceAll(KEY_PATIENT_BIRTH, sdf2.format(date));
format = format.replaceAll(KEY_PVTDATE, pvtModel.getPvtDate());
if(patientModel.getAddress() != null) {
if(patientModel.getAddress().getZipCode() != null) {
format = format.replaceAll(KEY_PATIENT_ZIPCODE, patientModel.getAddress().getZipCode());
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
}
if(patientModel.getAddress().getAddress() != null) {
format = format.replaceAll(KEY_PATIENT_ADDRESS, patientModel.getAddress().getAddress());
}else{
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getTelephone());
}else if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_PHONE, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_TELEPHONE, patientModel.getTelephone());
}else{
format = format.replaceAll(KEY_PATIENT_TELEPHONE, "");
}
if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, "");
}
String file = Project.getString("reception.link.filename", "ID_%PATIENTID%");
String ext = Project.getString("reception.link.ext", ".txt");
String fDateFormat = Project.getString("reception.link.filename.dateformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf3 = new SimpleDateFormat(fDateFormat);
Date today = new Date();
file = file.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
file = file.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
file = file.replaceAll(KEY_TODAY, sdf3.format(today));
String path = dir + File.separator + file;
if(path.startsWith("[TCP]")) {
path = path.substring(path.indexOf("]") + 1) + ext;
String[] data = path.split(",");
if(data.length < 3) return;
OtherProcessLink opl = new OtherProcessLink();
opl.linkTCPToFile(format, data[0], Integer.valueOf(data[1]), data[2]);
}else{
try {
if(Project.getBoolean("reception.link.rename", true)) {
File tmp = new File(path);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
File csv = new File(path + ext);
tmp.renameTo(csv);
}else{
File tmp = new File(path + ext);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
}
} catch (IOException ex) {
Logger.getLogger(PVTBuilder.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
/**
* 連携
* @param pvtModel
*/
public void receiptLink(PatientVisitModel pvtModel) {
final String KEY_DEF = "receipt.link";
int num = Project.getInt("receipt.link.num", 1);
for(int i = 1; i < num+1; i++) {
PatientModel patientModel = pvtModel.getPatientModel();
if(patientModel == null) return;
PVTKanaToAscii kana2Ascii = new PVTKanaToAscii();
String format = Project.getString(KEY_DEF + String.valueOf(i) + ".format");
if(format == null || format.length() <= 0) return;
String dir = Project.getString(KEY_DEF + String.valueOf(i) + ".dir");
if(dir == null || dir.length() <= 0) return;
String birth = (patientModel.getBirthday() != null) ? patientModel.getBirthday().replaceAll("-", "").replaceAll("/", "") : "";
SimpleDateFormat sdf1 = new SimpleDateFormat(DEFAULT_DATE_FORMAT);
String birthFormat = Project.getString(KEY_DEF + String.valueOf(i) + ".birthformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf2 = new SimpleDateFormat(birthFormat);
Date date = sdf1.parse(birth, new ParsePosition(0));
String sexFormats = Project.getString(KEY_DEF + String.valueOf(i) + ".malefemale", "m,f");
String[] sexFormat = sexFormats.split(",");
String sex = (patientModel.getGender() != null) ? (patientModel.getGender().toLowerCase().startsWith("m") ? sexFormat[0] : sexFormat[1]) : "";
String encoding = Project.getString(KEY_DEF + String.valueOf(i) + ".encoding", DEFAULT_CSV_ENCODING);
//s.oh^ 2014/08/01 受付連携
format = format.replaceAll(KEY_DEPT_CODE, pvtModel.getDeptCode());
format = format.replaceAll(KEY_DEPT_NAME, pvtModel.getDeptName());
format = format.replaceAll(KEY_ATTENDING_KANJI, pvtModel.getDoctorName());
format = format.replaceAll(KEY_ATTENDING_ID, pvtModel.getDoctorId());
format = format.replaceAll(KEY_INSURANCE_FIRST, (pvtModel.getFirstInsurance() == null) ? "" : pvtModel.getFirstInsurance());
//s.oh$
format = format.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
format = format.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
format = format.replaceAll(KEY_PATIENT_KANJI, patientModel.getFullName());
format = format.replaceAll(KEY_PATIENT_KANA, fullKanaToHalfKana(patientModel.getKanaName()));
format = format.replaceAll(KEY_PATIENT_ZENKAKUKANA, patientModel.getKanaName());
format = format.replaceAll(KEY_PATIENT_ASCII, kana2Ascii.CHGKanatoASCII(patientModel.getKanaName(), ""));
format = format.replaceAll(KEY_PATIENT_SEX, sex);
format = format.replaceAll(KEY_PATIENT_BIRTH, sdf2.format(date));
format = format.replaceAll(KEY_PVTDATE, pvtModel.getPvtDate());
if(patientModel.getAddress() != null) {
if(patientModel.getAddress().getZipCode() != null) {
format = format.replaceAll(KEY_PATIENT_ZIPCODE, patientModel.getAddress().getZipCode());
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
}
if(patientModel.getAddress().getAddress() != null) {
format = format.replaceAll(KEY_PATIENT_ADDRESS, patientModel.getAddress().getAddress());
}else{
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
}else{
format = format.replaceAll(KEY_PATIENT_ZIPCODE, "");
format = format.replaceAll(KEY_PATIENT_ADDRESS, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getTelephone());
}else if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_PHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_PHONE, "");
}
if(patientModel.getTelephone() != null) {
format = format.replaceAll(KEY_PATIENT_TELEPHONE, patientModel.getTelephone());
}else{
format = format.replaceAll(KEY_PATIENT_TELEPHONE, "");
}
if(patientModel.getMobilePhone() != null) {
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, patientModel.getMobilePhone());
}else{
format = format.replaceAll(KEY_PATIENT_MOBILEPHONE, "");
}
format = format.replaceAll(KEY_RETURN, "\n");
String file = Project.getString(KEY_DEF + String.valueOf(i) + ".filename", "ID_%PATIENTID%");
String ext = Project.getString(KEY_DEF + String.valueOf(i) + ".ext", ".txt");
String fDateFormat = Project.getString(KEY_DEF + String.valueOf(i) + ".filename.dateformat", DEFAULT_DATE_FORMAT);
SimpleDateFormat sdf3 = new SimpleDateFormat(fDateFormat);
Date today = new Date();
file = file.replaceAll(KEY_PATIENT_ID, patientModel.getPatientId());
file = file.replaceAll(KEY_PATIENT_ID_0SUP, zeroSuppress(patientModel.getPatientId()));
file = file.replaceAll(KEY_TODAY, sdf3.format(today));
String path = dir + File.separator + file;
if(path.startsWith("[TCP]")) {
path = path.substring(path.indexOf("]") + 1) + ext;
String[] data = path.split(",");
if(data.length < 3) return;
OtherProcessLink opl = new OtherProcessLink();
opl.linkTCPToFile(format, data[0], Integer.valueOf(data[1]), data[2]);
}else{
try {
if(Project.getBoolean(KEY_DEF + String.valueOf(i) + ".rename", false)) {
String tmpExt = Project.getString(KEY_DEF + String.valueOf(i) + ".tmpext", "");
File tmp = new File(path + tmpExt);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
File csv = new File(path + ext);
tmp.renameTo(csv);
}else{
File tmp = new File(path + ext);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(format);
bw.newLine();
}
}
} catch (IOException ex) {
Logger.getLogger(PVTBuilder.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
}
/**
* Claimの横流し
* @param pvtXml
*/
public void claimWrite(String pvtXml) {
final String KEY_DEF = "receipt.claim.write";
int num = Project.getInt("receipt.claim.write.num", 1);
for(int i = 1; i < num+1; i++) {
String dir = Project.getString(KEY_DEF + String.valueOf(i) + ".dir");
if(dir == null || dir.length() <= 0) return;
String encoding = Project.getString(KEY_DEF + String.valueOf(i) + ".encoding", DEFAULT_CSV_ENCODING);
String file = Project.getString(KEY_DEF + String.valueOf(i) + ".filename", "Claim.txt");
String path = dir + File.separator + file;
try {
File tmp = new File(path);
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp), encoding))) {
bw.write(pvtXml);
bw.newLine();
}
} catch (IOException ex) {
Logger.getLogger(PVTBuilder.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
}
}
/**
* 全角カナから半角カナへの変換
* @param kana
* @return
*/
private String fullKanaToHalfKana(String kana) {
//StringBuilder sb = new StringBuilder();
for(String [] pair : KANA) {
//switch('') {
// case '':
// break;
//}
kana = kana.replaceAll(pair[0], pair[1]);
}
return kana;
}
/**
* ゼロサプレス
* @param data
* @return
*/
private String zeroSuppress(String data) {
String ret;
Pattern ptn = java.util.regex.Pattern.compile("^0+([0-9]+.*)");
Matcher m = ptn.matcher(data);
if(m.matches()) {
ret = m.group(1);
}else{
ret = data;
}
return ret;
}
/**
* ゼロパディング
* @param data
* @param digit
* @return
*/
private String zeroPadding(String data, int digit) {
String ret;
String format = "%0" + String.valueOf(digit) + "d";
ret = String.format(format, data);
return ret;
}
}