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 override CallResult Process(JObject joReg) { //事前分析 //1.门诊挂号 2.门诊收费登记 3.住院登记 4.住院收费登记 5.住院执行医嘱 6.门诊结算 7.门诊预结算 8.住院结算 9.住院预结算 10.购药划卡 if (Global.curEvt.ext.isOpenAnalysis) { if (hBus.PreAnalysis("7", "", out outParam) != 0) { //调用失败后仍继续往下执行-朱鹏飞要求 //return Error("门诊就诊信息上传成功后调用3101事前服务失败"); } } JObject joRtn = new JObject(); // 兼容不同的模式 if (joReg.ContainsKey("patInfo")) { JObject joPatInfo = JObject.Parse(JsonHelper.getDestValue(joReg, "patInfo")); JObject joInsuInfo = JObject.Parse(JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo")); if (!string.IsNullOrEmpty(JsonHelper.getDestValue(joInsuInfo, "insuplc_admdvs"))) Global.pat.insuplc_admdvs = JsonHelper.getDestValue(joInsuInfo, "insuplc_admdvs"); } //调用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["mdtrt_cert_no"] = Utils.ConvertMdtrtcertNo(false); //预结算不需要转换 joSettlement["medfee_sumamt"] = double.Parse(JsonHelper.getDestValue(joSumFee, "data.Sumamt")); //预结算 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(); joRtn.Add("setlinfo", joRtnSettle); //结算需要转换 joRtn["mdtrt_cert_no"] = Global.pat.mdtrtcertNO; //Utils.ConvertMdtrtcertNo() outParam = joRtn.ToString(); return Success(); } } }