/// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }