using Newtonsoft.Json.Linq; using PTMedicalInsurance.Common; using PTMedicalInsurance.Helper; using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PTMedicalInsurance.Business { class OPPreSettlementProcess : AbstractProcess { public string OperationType { set; get; } /// /// 返回预结算结果 /// /// 基本信息含挂号、就诊、诊断、结算等入参 /// public override CallResult Process(JObject joReg) { ////事前分析 if (Global.curEvt.ext.isOpenAnalysis) { //1.门诊挂号 2.门诊收费登记 3.住院登记 4.住院收费登记 5.住院执行医嘱 6.门诊结算 7.门诊预结算 8.住院结算 9.住院预结算 10.购药划卡 if (hBus.PreAnalysis("7", "", out outParam) != 0) { return Error(-1, "门诊就诊信息上传成功后调用3101事前服务失败"); } } JObject joRtn = new JObject(); //调用IRIS获取医保各项金额 if (mIS.getSumFee(out outParam) != 0) { return Error(-1, "获取医保费用各项汇总金额"); } JObject joSumFee = JObject.Parse(outParam); JObject joSettlement = JObject.Parse(JsonHelper.getDestValue(joReg, "settlement")); //修改joSettlement的就诊ID ,总金额等 joSettlement["mdtrt_id"] = Global.pat.mdtrtID; joSettlement["medfee_sumamt"] = JsonHelper.getDestValue(joSumFee, "data.Sumamt"); joSettlement["register_flag"] = "0"; //挂号标志 if ("RegisterOP".Equals(OperationType)) { // 门诊挂号(医疗类别/统筹类别) joSettlement["med_type"] = "6"; joSettlement["register_flag"] = "1"; } // 个性化(济南),费用不单独上传 joSettlement["patient"] = joReg; joSettlement.Add("psn_name", Global.pat.name); joSettlement.Add("gend", ("1".Equals(Global.pat.gend)?"男":"女")); joSettlement.Add("cardno", Global.pat.card.NO); joSettlement["admNo"] = Global.pat.adm_Dr; // 病历号 // 异地就医标志 string otherAreaFlag = "10"; if (!Utils.isOtherCity() || Global.inf.interfaceDr == 28) { otherAreaFlag = "01"; //本地 } joSettlement.Add("other_area_flag", otherAreaFlag); var ret = hBus.getFeeDetail(); if (ret.code < 0) { return Error(ret.code,ret.data.ToString()); } JArray jaFeeDetail = (JArray)ret.data; joSettlement["feeDetail"] = jaFeeDetail; //预结算 JObject jo2206Data = new JObject(); jo2206Data.Add("data", joSettlement); JObject jo2206Rtn = invoker.invokeCenterService(TradeEnum.OutpatientPreSettlement, jo2206Data); if (JsonHelper.parseCenterRtnValue(jo2206Rtn, out outParam) != 0) { return Exception(-1, "门诊预结算", outParam); } //返回给HIS进行预结算判断 JObject joSetlinfo = JObject.Parse(JsonHelper.getDestValue(jo2206Rtn, "output.setlinfo")); if (hIS.preSettlement(joSettlement, joSetlinfo, out outParam) != 0) { return Exception(-1, "返回结算信息给HIS", outParam); } //编码转换 if (mIS.convertSettlementWithInsuCode(jo2206Rtn, out outParam) != 0) { return Exception(-1, "结算信息转换", outParam); } string errMsg = ""; JObject joRtnSettle =JObject.Parse(JsonHelper.getDestValue(jo2206Rtn, "output.setlinfo")); //判断勾稽关系是否平 if (hIS.sumInsuRtnSettlInfo(joRtnSettle, out joSumFee, out errMsg) != 0) { return Exception(-1, "勾稽关系不符合标准,请联系管理员!",errMsg); } //展示结算信息 JObject joConverted = JObject.Parse(outParam); if (hBus.showSettlementForm(joConverted, out outParam) != 0) { return Exception(-1, "结算信息展示", outParam); } // 返回结算参数+返回 joRtn = (JObject)joSettlement.DeepClone(); //济南扩展 string useAccountFlag = JsonHelper.getDestValue(joSettlement, "acct_used_flag"); string acctPay = Global.Set.acctPay; if (!"1".Equals(useAccountFlag)) { //不使用个人账户 acctPay = "0"; } JObject joDataExp = new JObject(); joDataExp.Add("acct_payamt", acctPay); joRtnSettle["exp_content"] = joDataExp; joRtn.Add("setlinfo", joRtnSettle); outParam = joRtn.ToString(); return Success(); } } }