/// <summary> /// 职工住院结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public WorkerHospitalizationPreSettlementDto WorkerHospitalizationSettlement(WorkerHospitalizationSettlementUiParam param) { //获取操作人员信息 var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; var infoData = new GetInpatientInfoParam() { User = userBase, BusinessId = param.BusinessId, }; //获取his结算 var hisSettlement = _serviceBasicService.GetHisHospitalizationSettlement(infoData); var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData.MedicalInsuranceState == MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人已办理医保结算,不能办理预结算!!!"); } if (residentData.MedicalInsuranceState != MedicalInsuranceState.MedicalInsurancePreSettlement) { throw new Exception("当前病人未办理预结算,不能办理结算!!!"); } var inpatientInfoParam = new QueryInpatientInfoParam() { BusinessId = param.BusinessId }; //获取住院病人 var inpatientInfoData = _hisSqlRepository.QueryInpatientInfo(inpatientInfoParam); if (inpatientInfoData == null) { throw new Exception("该病人未在中心库中,请检查是否办理医保入院!!!"); } //获取医保账号 var userData = _systemManageRepository.QueryHospitalOperator( new QueryHospitalOperatorParam() { UserId = param.UserId }); //获取医院等级 var gradeData = _systemManageRepository.QueryHospitalOrganizationGrade(userBase.OrganizationCode); var infoParam = new WorkerHospitalizationSettlementParam() { User = userBase, Id = residentData.Id, BusinessId = inpatientInfoData.BusinessId, MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, LeaveHospitalDate = Convert.ToDateTime(hisSettlement.LeaveHospitalDate).ToString("yyyyMMdd"), LeaveHospitalState = param.LeaveHospitalInpatientState, Operators = userBase.UserName, OrganizationCode = gradeData.MedicalInsuranceAccount, AdministrativeArea = gradeData.AdministrativeArea }; //获取诊断 var diagnosisData = CommonHelp.GetDiagnosis(param.DiagnosisList); infoParam.AdmissionMainDiagnosisIcd10 = diagnosisData.AdmissionMainDiagnosisIcd10; infoParam.DiagnosisIcd10Two = diagnosisData.DiagnosisIcd10Two; infoParam.DiagnosisIcd10Three = diagnosisData.DiagnosisIcd10Three; infoParam.LeaveHospitalMainDiagnosis = diagnosisData.DiagnosisDescribe; infoParam.IsHospitalizationFrequency = "1"; // 医保 var resultData = _workerMedicalInsuranceRepository.WorkerHospitalizationSettlement(infoParam); //报销金额 =统筹支付+补充医疗保险支付金额+专项基金支付金额+ //公务员补贴+公务员补助+其它支付金额 decimal reimbursementExpenses = resultData.BasicOverallPay + resultData.SupplementPayAmount + resultData.SpecialFundPayAmount + resultData.CivilServantsSubsidies + resultData.CivilServantsSubsidy + resultData.OtherPaymentAmount; resultData.ReimbursementExpenses = reimbursementExpenses; var updateData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = userBase.UserId, ReimbursementExpensesAmount = CommonHelp.ValueToDouble(reimbursementExpenses), SelfPayFeeAmount = resultData.CashPayment, OtherInfo = JsonConvert.SerializeObject(resultData), Id = residentData.Id, SettlementNo = resultData.DocumentNo, MedicalInsuranceAllAmount = resultData.TotalAmount, SettlementTransactionId = userBase.UserId, MedicalInsuranceState = MedicalInsuranceState.MedicalInsuranceSettlement }; //存入中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateData); //添加日志 var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(resultData), User = userBase, Remark = "职工住院结算", RelationId = residentData.Id, }; //存入基层 var userInfoData = _residentMedicalInsuranceRepository.GetUserInfo(new ResidentUserInfoParam() { IdentityMark = residentData.IdentityMark, AfferentSign = residentData.AfferentSign, }); // 回参构建 var xmlData = new HospitalSettlementXml() { MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, CashPayment = resultData.CashPayment, SettlementNo = resultData.DocumentNo, PaidAmount = resultData.PaidAmount, AllAmount = resultData.TotalAmount, PatientName = userInfoData.PatientName, AccountBalance = userInfoData.WorkersInsuranceBalance, AccountAmountPay = resultData.AccountPayment, }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = resultData.DocumentNo, MedicalInsuranceCode = "41", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; //结算存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParamData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.UserId, Id = residentData.Id, MedicalInsuranceState = MedicalInsuranceState.HisSettlement, IsHisUpdateState = true }; // 更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParamData); //结算后保存信息 var saveParam = AutoMapper.Mapper.Map <SaveInpatientSettlementParam>(hisSettlement); saveParam.Id = (Guid)inpatientInfoData.Id; saveParam.User = userBase; saveParam.LeaveHospitalDiagnosisJson = JsonConvert.SerializeObject(param.DiagnosisList); _hisSqlRepository.SaveInpatientSettlement(saveParam); return(resultData); }
/// <summary> /// 职工住院结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public WorkerHospitalizationPreSettlementDto WorkerHospitalizationSettlement(WorkerHospitalizationSettlementParam param) { //社保住院号 var documentNo = new byte[1024]; //发生费用金额 var totalAmount = new byte[1024]; //基本统筹支付 var basicOverallPay = new byte[1024]; //补充医疗保险支付金额 var supplementPayAmount = new byte[1024]; //专项基金支付金额 var specialFundPayAmount = new byte[1024]; //公务员补贴 var civilServantsSubsidies = new byte[1024]; //公务员补助 var civilServantsSubsidy = new byte[1024]; //其它支付金额 var otherPaymentAmount = new byte[1024]; //账户支付 var accountPayment = new byte[1024]; //现金支付 var cashPayment = new byte[1024]; //起付金额 var paidAmount = new byte[1024]; // 备注 var remark = new byte[1024]; //返回状态 var resultState = new byte[1024]; //消息 var msg = new byte[1024]; WorkerMedicalInsurance.WorkerHospitalizationSettlement (param.OrganizationCode, param.MedicalInsuranceHospitalizationNo, param.AdministrativeArea, param.IsHospitalizationFrequency, param.Operators, param.LeaveHospitalDate, param.LeaveHospitalState, param.AdmissionMainDiagnosisIcd10, param.DiagnosisIcd10Two, param.DiagnosisIcd10Three, param.LeaveHospitalMainDiagnosis, totalAmount, basicOverallPay, supplementPayAmount, specialFundPayAmount, civilServantsSubsidies, civilServantsSubsidy, otherPaymentAmount, accountPayment, cashPayment, paidAmount, documentNo, remark, resultState, msg ); if (CommonHelp.StrToTransCoding(resultState) != "1") { throw new Exception(CommonHelp.StrToTransCoding(msg)); } var resultData = new WorkerHospitalizationPreSettlementDto() { DocumentNo = CommonHelp.StrToTransCoding(documentNo), TotalAmount = Convert.ToDecimal(CommonHelp.StrToTransCoding(totalAmount)), BasicOverallPay = Convert.ToDecimal(CommonHelp.StrToTransCoding(basicOverallPay)), SupplementPayAmount = Convert.ToDecimal(CommonHelp.StrToTransCoding(supplementPayAmount)), SpecialFundPayAmount = Convert.ToDecimal(CommonHelp.StrToTransCoding(specialFundPayAmount)), CivilServantsSubsidies = Convert.ToDecimal(CommonHelp.StrToTransCoding(civilServantsSubsidies)), CivilServantsSubsidy = Convert.ToDecimal(CommonHelp.StrToTransCoding(civilServantsSubsidy)), OtherPaymentAmount = Convert.ToDecimal(CommonHelp.StrToTransCoding(otherPaymentAmount)), AccountPayment = Convert.ToDecimal(CommonHelp.StrToTransCoding(accountPayment)), CashPayment = Convert.ToDecimal(CommonHelp.StrToTransCoding(cashPayment)), PaidAmount = Convert.ToDecimal(CommonHelp.StrToTransCoding(paidAmount)), Remark = CommonHelp.StrToTransCoding(cashPayment), }; return(resultData); }