if (sr.getPolis().getNumber().equals(Polis.FICTIVE_POLIS_NUMBER)) {
representative = client.getRepresentative();
}
ClientDocument doc;
Polis polis;
if (representative != null) {
rd.p_status = client.getRepresentativeStatus().getId();
rd.p_fam = representative.getSurname() == null ? 0 : representative.getSurname().getId();
rd.p_nam = representative.getName() == null ? 0 : representative.getName().getId();
rd.p_fnam = representative.getPathronymic() == null ? 0 : representative.getPathronymic().getId();
rd.pred = 1;
doc = representative.getClientDocument();
polis = ClientBean.findPolisOMI(representative, manager);
} else {
rd.p_status = 0;
rd.p_fam = 0;
rd.p_nam = 0;
rd.p_fnam = 0;
rd.pred = 0;
doc = client.getClientDocument();
polis = sr.getPolis();
}
rd.pol_ser = polis.getSeries();
rd.pol_num = polis.getNumber();
if (rd.pol_num.equals(Polis.FICTIVE_POLIS_NUMBER)) {
rd.pol_num = "";
rd.pol_ser = "";
}
if (address != null) {
AddressObject country = address.getAddressObject();
while (country.getParent() != null) {
country = country.getParent();
}
rd.c_oksm = country.getKladrCode();
} else {
//Если указан российский пасспорт считаем что гражданство российское
if (doc != null && doc.getDoctype().getId() == ClientDocumentType.TYPE_PASSPORT_RF) {
rd.c_oksm = "643";
} else {
rd.c_oksm = "";
}
}
rd.type_doc = doc != null ? doc.getDoctype().getId() : 0;
rd.doc_ser = doc != null ? doc.getSeries() : "";
rd.doc_num = doc != null ? doc.getNumber() : "";
//Обрезание до 20 символов
if (rd.doc_num.length() > 20) {
rd.doc_num = rd.doc_num.substring(0, 20);
}
rd.ins_id_ar = polis.getRegionCode().getId();
rd.id_ins_org = polis.getInsurer().getId();
if (address != null) {
rd.kladr = address.getAddressObject().getKladrCode();
// rd.zip = address.getAddressObject().getPostIndex();
} else {
rd.kladr = "";
// rd.zip = 0;
}
if (address != null) {
//Субъект РФ
AddressObject srf = address.getAddressObject();
while (srf.getType().getLevel() != 1) {
srf = srf.getParent();
}
rd.area = srf.getId();
} else {
rd.area = 0;
}
/** REGION на уровне 5 находятся улицы - берем 4 уровень смотрим
* если это не деревня, значит это город - берем его.
* если это деревня, то она лежит в каком-то районе берем значит на 1 уровень выше*/
if (address != null) {
AddressObject reg = address.getAddressObject();
while (reg.getType().getLevel() >= 5) {
reg = reg.getParent();
}
if (reg.getType().isVillage()) {
rd.region = reg.getParent().getTitle();
rd.type_item = reg.getParent().getType().getId();
} else {
rd.region = reg.getTitle();
rd.type_item = reg.getType().getId();
}
} else {
rd.region = "";
}
//Районы городов отсутствуют в кладре - надо прикрутить
rd.reg_city = "";
if (address != null) {
AddressObject item = address.getAddressObject();
if (item.getType().getLevel() == 5 || item.getType().getLevel() == 6) {
if (item.getOkato() > 0) {
//У объекта есть окато
String okato = fixOkato(item.getOkato());
if (okatoMap.containsKey(okato)) {
rd.reg_city = okatoMap.get(okato);
}
} else {
/*У объекта нет окато - смотрим у всех детей если первые восемь
цифр окато начинаются одинаково то берем окато детей */
List<AddressObject> children = findEntityList(AddressObject.class, "parent.id", item.getId());
boolean equals = true;
String okato = "";
for (AddressObject chield : children) {
if (chield.getOkato() > 0) {
if (okato.isEmpty()) {
okato = fixOkato(chield.getOkato());
} else {
if (!okato.equals(fixOkato(chield.getOkato()))) {
equals = false;
}
}
}
}
if (equals && !okato.isEmpty() && okatoMap.containsKey(okato)) {
rd.reg_city = okatoMap.get(okato);
}
}
}
}
/** ITEM на уровне 5 находятся улицы - берем 4 уровень смотрим
* если это деревня то этот итем и нужен
*/
if (address != null) {
AddressObject item = address.getAddressObject();
while (item.getType().getLevel() >= 5) {
item = item.getParent();
}
if (item.getType().isVillage()) {
rd.item = item.getTitle();
rd.type_item = item.getType().getId();
} else {
rd.item = "";
}
} else {
rd.item = "";
rd.type_item = 0;
}
/** STREET на последнем уровне может находиться не улица а квартал,
* поэтому идем вверх до 5 уровня */
AddressObject street = null;
if (address != null) {
street = address.getAddressObject();
while (street.getType().getLevel() > 5) {
street = street.getParent();
}
}
if (street != null && street.getType().getLevel() == 5) {
rd.street = street.getTitle();
Integer typeUl = street.getType().getTypeUl();
rd.type_ul = typeUl == null ? 14 : typeUl;
} else {
rd.street = "";
rd.type_ul = 0;
}
if (address!= null && address.getBuilding() != null && !address.getBuilding().trim().isEmpty()) {
String building = address.getBuilding().trim();
rd.house = Converter.getBuildingNumber(building);
String corp = Converter.getBuildingCorpus(building);
String letter = Converter.getBuildingLetter(building);
if (!corp.isEmpty() && !letter.isEmpty() ) {
rd.liter = corp + "/" + letter;
} else {
rd.liter = letter + corp;
}
rd.flat = address.getFlat();
} else {
rd.house = "";
rd.liter = "";
rd.flat = "";
}
Enterprise ent = jobMap.get(sr.getId());
rd.work = ent == null ? "" : ent.getTitle();
rd.date_begin = sr.getRenderedDate();
rd.mes = sr.getFunctions().getReceptionType().getExtKey() + sr.getService().getCode();
rd.out = sr.getDisease().getDiseaseResult().getId();
DiagInfo diagInfo = diagMap.get(sr.getDisease().getId());
if (diagInfo == null) {
throw new EDataIntegrity("Не было обработано заболеваниe id = " + sr.getDisease().getId());
}
rd.mkb = diagInfo.diag;
rd.mkb_s = "";
for (String ref : diagInfo.referList) {
rd.mkb_s = rd.mkb_s + ref + ", ";
}
if (!rd.mkb_s.isEmpty()) {
rd.mkb_s = rd.mkb_s.substring(0, rd.mkb_s.length()-2);
}
rd.inn = client.getInn() == null ? "" : client.getInn();
if (sr.getFunctions().getReceptionType().getExtKey().contains("29")) {
//стоматологическое посещение
rd.c_mu = 4;
rd.k_mu = sr.getUet();
} else {
rd.c_mu = 1; //В соответствии с примечаниями к приказу
rd.k_mu = 100; //В соответствии с примечаниями к приказу
}
/*
float price = priceMap.get(rd.mes)/((float) 100);
rd.tariff = String.format("%.2f", price).replace(',', '.');
rd.sum = String.format("%.2f", price * rd.k_mu/100.0).replace(',', '.');
rd.sumall = String.format("%.2f", price * rd.k_mu/100.0).replace(',', '.');
*/
rd.ss = client.getSnils() == null ? "" : client.getSnils();
rd.ssd = sr.getFunctions().getCollaborator().getClient().getSnils();
if (rd.ssd == null) {
rd.ssd = "";
} else if (rd.ssd.equals(Client.EMPTY_SNILS)) {
rd.ssd = "";
}
rd.vr_spec = sr.getFunctions().getReceptionType().getId();
Dvr dvr = sr.getFunctions().getDvr();
rd.vr_dol = dvr == null ? 0 : dvr.getId();
rd.qz = diagInfo.diagEncID;
rd.vmu = sr.getFunctions().getFirstMedicalAid().getId();
//Даты больничного
SickInfo sl = sickListMap.get(sr.getId());
if (sl != null) {
rd.d_listin = sl.dateOpen;
if (sl.dateToWork != null) {
Calendar out = GregorianCalendar.getInstance();
out.setTime(sl.dateToWork);
out.add(Calendar.DAY_OF_YEAR, -1);
rd.d_listout = out.getTime();
}
}
/*Инотерриториальный признак
* В ТАЛе инотерриториальный признак ставится если ID_INS_AR != текущий регион
* сделал также
*/
if (!polis.getRegionCode().getExtKey().equals(REGION_CODE)) {
rd.is_ext = 1;
} else {
rd.is_ext = 0;
}
//DF_CODES (коды источников дополнительного финансирования) в ТАЛ не заполняются
rd.df_codes = "";
/*
SocialStatus socialStatus = client.getSocialStatus();
int stId = socialStatus == null ? 0 : socialStatus.getId();
if (stId == SocialStatus.STATUS_MILITARY || stId == SocialStatus.STATUS_WORKER) {
rd.kateg = 1;
} else {
rd.kateg = 0;
}
*/
//COD_IF (код источника финансирования) в ТАЛ стоит 1
rd.cod_if = 1;
//RES_G (код результата диспансеризации в ТАЛ не проставлено)
rd.resd = 0;
//CODE_GOAL
//по положению от 23.11.2009 не заполняется
//rd.code_goal = sr.getDisease().getVisitingPurpose().getId();
rd.code_goal = 0;
rd.okved = ent == null ? "" : ent.getOkved();
if (rd.okved == null) {
rd.okved = "";
}
//DAT_N
rd.dat_e = polis.getFromDate();
//DAT_E
rd.dat_n = polis.getTillDate();
target.add(rd);
}
return target;
}