/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package clips.administrator.dloregister;
import beans.report.dloregister.PersonalData;
import beans.report.dloregister.RecipeData;
import cli_fmw.main.ClipsException;
import clips.administrator.register.ErrorList;
import clips.main.ClipsConfig;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.xBaseJ.micro.DBF;
import org.xBaseJ.micro.fields.Field;
import org.xBaseJ.micro.xBaseJException;
/**
*
* @author lacoste
*/
public class DloWriter {
private final static String dloRegDir = "L_REC";
private DBF regPin;
private DBF adPr;
private PersonFields personF;
private RecipeFields recipeF;
public void openPersonInfo() throws xBaseJException, IOException {
if (regPin == null) {
ClipsConfig cfg = ClipsConfig.getInstance();
File dir = new File(cfg.getRegisterExportPath(), "SEND");
dir.mkdir();
dir = new File(dir, dloRegDir);
dir.mkdir();
File dbfFile = new File(dir, "REG_PIN.DBF");
regPin = new DBF(dbfFile.getAbsolutePath(), true, "cp866");
}
regPin.startTop();
}
public void createPersonInfo() throws xBaseJException, IOException, ClipsException {
openPersonInfo();
personF = new PersonFields();
try {
for (int i = 0; i < personF.getFields().length; i++) {
Field f = personF.getFields()[i];
regPin.addField(f);
}
} catch (xBaseJException ex) {
throw new ClipsException("Ошибка при чтении данных из файла " + regPin.getName(), ex);
}
}
public void closePersonInfo() throws IOException {
regPin.close();
regPin = null;
}
public ErrorList fillPersonInfo(List<PersonalData> list) throws xBaseJException, IOException, ClipsException {
try {
createPersonInfo();
ErrorList errorList = new ErrorList();
for (PersonalData person : list) {
//ID
int id = person.id;
//SNILS
String snils = person.snils;
if (snils == null || snils.isEmpty()) {
errorList.add(id, "Не указан СНИЛС", ErrorList.CLIENT_ERROR);
}
else {
personF.snils.put(id, errorList, snils);
}
//POLIS_SN
String polisSN = person.polisSN;
if (polisSN == null || polisSN.isEmpty()) {
errorList.add(id, "Не указаны серия, номер полиса ОМС", ErrorList.CLIENT_ERROR);
}
else {
personF.polisSN.put(id, errorList, polisSN);
}
//SURNAME
String surname = person.surname;
if (surname == null || surname.isEmpty()) {
errorList.add(id, "Не указана фамилия пациента", ErrorList.CLIENT_ERROR);
}
else {
personF.surname.put(id, errorList, surname);
}
//NAME
String name = person.name;
if (name == null || name.isEmpty()) {
errorList.add(id, "Не указано имя пациента", ErrorList.CLIENT_ERROR);
}
else {
personF.name.put(id, errorList, name);
}
//PATHRONYMIC
String pathronymic = person.pathronymic;
if (pathronymic == null || pathronymic.isEmpty()) {
errorList.add(id, "Не указано отчество пациента", ErrorList.CLIENT_ERROR);
}
else {
personF.pathronymic.put(id, errorList, pathronymic);
}
//SEX
char sex = person.sex;
if (sex == Character.MIN_VALUE) {
errorList.add(id, "Не указан пол пациента", ErrorList.CLIENT_ERROR);
}
else {
personF.sex.put(id, errorList, Character.toString(sex));
}
//BORN_DATE
Date bornDate = person.bornDate;
if (bornDate == null) {
errorList.add(id, "Не указана дата рождения пациента", ErrorList.CLIENT_ERROR);
personF.bornDate.put("");
}
else {
Calendar cal = Calendar.getInstance();
cal.setTime(bornDate);
personF.bornDate.put(cal);
}
//EXEMPTION_CODE
String exemptionID = person.exemptionID;
if (exemptionID == null || exemptionID.isEmpty()) {
errorList.add(id, "Не указан код категории льготности", ErrorList.CLIENT_ERROR);
}
else {
personF.exemCode.put(id, errorList, exemptionID);
}
//DOCUMENT_SN
String docSN = person.docSN;
if (docSN == null || docSN.isEmpty()) {
errorList.add(id, "Не указаны серия, номер документа, удостоверяющего личность", ErrorList.CLIENT_ERROR);
}
else {
personF.docSN.put(id, errorList, docSN);
}
//DOCUMENT_TYPE
String docTypeID = person.docTypeID;
if (docTypeID == null || docTypeID.isEmpty()) {
errorList.add(id, "Не указан тип документа, удостоверяющего личность", ErrorList.CLIENT_ERROR);
}
else {
try {
Integer docType = Integer.parseInt(docTypeID);
personF.docType.put(docType);
} catch (NumberFormatException ex) {
errorList.add(id, "Код типа документа должен быть числом", ErrorList.CLIENT_ERROR);
personF.docType.put(0);
}
}
//OKATO__OMC
int okatoOmc = person.okatoOMC;
if (okatoOmc == Integer.MIN_VALUE) {
errorList.add(id, "Не указан код территории страхования по ОМС по ОКАТО", ErrorList.CLIENT_ERROR);
}
else {
personF.okatoOMC.put(okatoOmc);
}
//TODO ОГРН СМО
//OKATO_REG
int okatoReg = person.okatoReg;
if (okatoReg == Integer.MIN_VALUE) {
errorList.add(id, "Не указан код территории постоянной регистрации пациента (ОКАТО)", ErrorList.CLIENT_ERROR);
}
else {
personF.okatoReg.put(okatoReg);
}
//SPECIAL_CASE
String spCase = person.spCase;
if (spCase == null) {
personF.spCase.put(id, errorList, "");
}
else {
personF.spCase.put(id, errorList, spCase);
}
regPin.write();
}
closePersonInfo();
return errorList;
} catch (IOException ex) {
closePersonInfo();
throw ex;
} catch (xBaseJException ex) {
closePersonInfo();
throw ex;
}
}
public void openRecipeInfo() throws xBaseJException, IOException {
if (adPr == null) {
ClipsConfig cfg = ClipsConfig.getInstance();
File dir = new File(cfg.getRegisterExportPath(), "SEND");
dir.mkdir();
dir = new File(dir, dloRegDir);
dir.mkdir();
File dbfFile = new File(dir, "AD_PR.DBF");
adPr = new DBF(dbfFile.getAbsolutePath(), true, "cp866");
}
adPr.startTop();
}
public void createRecipeInfo() throws xBaseJException, IOException, ClipsException {
openRecipeInfo();
recipeF = new RecipeFields();
try {
for (int i = 0; i < recipeF.getFields().length; i++) {
Field f = recipeF.getFields()[i];
adPr.addField(f);
}
} catch (xBaseJException ex) {
throw new ClipsException("Ошибка при чтении данных из файла " + adPr.getName(), ex);
}
}
public void closeRecipeInfo() throws IOException {
adPr.close();
adPr = null;
}
public ErrorList fillRecipeInfo(List<RecipeData> list) throws xBaseJException, IOException, ClipsException {
try {
createRecipeInfo();
ErrorList errorList = new ErrorList();
for (RecipeData recipe : list) {
//ID
int id = recipe.id;
//SNILS
String snils = recipe.snils;
if (snils == null || snils.isEmpty()) {
errorList.add(id, "Не указан СНИЛС", ErrorList.CLIENT_ERROR);
}
else {
recipeF.snils.put(id, errorList, snils);
}
//LPU_TFOMS_CODE
String lpuTFOMSCode = recipe.lpuTFOMScode;
if (lpuTFOMSCode == null || lpuTFOMSCode.isEmpty()) {
errorList.add(id, "Не указан код ЛПУ в кодировке ТФОМС", ErrorList.CLIENT_ERROR);
}
else {
recipeF.lpuTFOMScode.put(id, errorList, lpuTFOMSCode);
}
//EXEMPTION_CODE
String exemptionID = recipe.exemptionID;
if (exemptionID == null || exemptionID.isEmpty()) {
errorList.add(id, "Не указан код категории льготности", ErrorList.CLIENT_ERROR);
}
else {
recipeF.exemCode.put(id, errorList, exemptionID);
}
//POLIS_SN
String polisSN = recipe.polisSN;
if (polisSN == null || polisSN.isEmpty()) {
errorList.add(id, "Не указаны серия, номер полиса ОМС", ErrorList.CLIENT_ERROR);
}
else {
recipeF.polisSN.put(id, errorList, polisSN);
}
//LPU_OGRN
String lpuOGRN = recipe.lpuOGRN;
if (lpuOGRN == null || lpuOGRN.isEmpty()) {
errorList.add(id, "Не указан ОГРН ЛПУ", ErrorList.CLIENT_ERROR);
}
else {
recipeF.lpuOGRN.put(id, errorList, lpuOGRN);
}
//COLLABORATOR_CODE
String collabCode = recipe.collabCode;
if (collabCode == null || collabCode.isEmpty()) {
errorList.add(id, "Не указан идентификационный код врача");
}
else {
recipeF.collCode.put(id, errorList, collabCode);
}
//MKB_CODE
String mkbCode = recipe.mkbCode;
if (mkbCode == null || mkbCode.isEmpty()) {
errorList.add(id, "Не указан МКБ-код заболевания (диагноз)");
}
else {
recipeF.mkbCode.put(id, errorList, mkbCode);
}
//RECIPE_SN
String recipeSN = recipe.recipeSN;
if (recipeSN == null || recipeSN.isEmpty()) {
errorList.add(id, "Не указаны серия, номер рецепта");
}
else {
recipeF.recipeSN.put(id, errorList, recipeSN);
}
//RECIPE_DATE
Date recipeDate = recipe.recipeDate;
if (recipeDate == null) {
errorList.add(id, "Не указана дата выписки рецепта");
recipeF.recipeDate.put("");
}
else {
Calendar cal = Calendar.getInstance();
cal.setTime(recipeDate);
recipeF.recipeDate.put(cal);
}
//FINANCE_SOURCE
int financeSource = recipe.financeSource;
if (financeSource == 0) {
errorList.add(id, "Не указан источник финансирования");
}
else {
recipeF.financeSource.put(financeSource);
}
//PERCENT
int percent = recipe.percent;
recipeF.percent.put(percent);
//MNN & TRADE_NAME
String mnn = recipe.mnn;
if (mnn == null || mnn.isEmpty()) {
String trn = recipe.trn;
if (trn == null || trn.isEmpty()) {
errorList.add(id, "Не указаны коды ЛС ни по МНН, ни по торговому наименованию");
}
else {
try {
recipeF.trn.put(Integer.parseInt(trn));
} catch (NumberFormatException ex) {
errorList.add(id, "Код ЛС по торговому наименованию должен быть числом");
recipeF.trn.put(0);
}
}
}
else {
try {
recipeF.mnn.put(Integer.parseInt(mnn));
} catch (NumberFormatException ex) {
errorList.add(id, "Код ЛС по МНН должен быть числом");
recipeF.mnn.put(0);
}
}
//DOSAGE_FORM
String dosageForm = recipe.dosageForm;
if (dosageForm != null && !dosageForm.isEmpty()) {
try {
recipeF.dosForm.put(Integer.parseInt(dosageForm));
} catch (NumberFormatException ex) {
errorList.add(id, "Код лекарственной формы должен быть числом");
recipeF.dosForm.put(0);
}
}
else {
recipeF.dosForm.put(0);
}
//DOSAGE
String dosage = recipe.dosage;
if (dosage == null || dosage.isEmpty()) {
errorList.add(id, "Не указана дозировка");
}
else {
recipeF.dosage.put(id, errorList, dosage);
}
//DOSAGE_UNIT
String dosageUnit = recipe.dosageUnit;
if (dosageUnit == null || dosageUnit.isEmpty()) {
errorList.add(id, "Не указан код единицы измерения дозировки");
}
else {
try {
recipeF.dosUnit.put(Integer.parseInt(dosageUnit));
} catch (NumberFormatException ex) {
errorList.add(id, "Код единицы измерения дозировки должен быть числом");
recipeF.dosUnit.put(0);
}
}
//QUANTITY
double quantity = recipe.quantity;
recipeF.quantity.put(quantity);
//PERIOD
int period = recipe.period;
if (period == 0) {
errorList.add(id, "Не указан срок действия рецепта");
}
else {
recipeF.period.put(period);
}
//KEK
boolean kek = recipe.kek;
recipeF.kek.put(kek ? 1 : 0);
//SPECIAL_CASE
String spCase = recipe.spCase;
if (spCase == null) {
recipeF.spCase.put(id, errorList, "");
}
else {
recipeF.spCase.put(id, errorList, spCase);
}
adPr.write();
}
closeRecipeInfo();
return errorList;
} catch (IOException ex) {
closeRecipeInfo();
throw ex;
} catch (xBaseJException ex) {
closeRecipeInfo();
throw ex;
}
}
}