导图社区 住院结算流程
这是一篇关于住院结算流程的思维导图,描述了一个详细的住院结算流程,重点在于处理与患者信息和医保相关的操作。流程分为两大步骤,首先确保患者信息的准确性和完整性,然后根据这些信息执行住院结算操作。
编辑于2024-06-12 16:43:38住院结算流程
1、输入患者Id,回车
1、getPatientInfo()(获取患者个人信息、预交金信息)
1、清空数据和医保信息,校验PatientId是否存在,格式是否正确
2、api/pats-billing/inp-visit 查询患者的历次住院记录(如果只有一次,直接赋值,如果有多次,按visitId排序后弹框选择一条住院记录)
3、queryPatientSettleInfoNew()
2、queryPatientSettleInfoNew()
判断identity是否是医保待办
是:修改chargeType为自费,identity为自费病员. queryPatientSettleInfo()
api/patient-management/register/inp/pat-check-in/inp-visit/charge-type 修改住院登记费别 修改InpVIsit表中的两个字段,chargeType和identity
否:queryPatientSettleInfo()
1、获取患者住院提示信息
inp-settle-prompt-info(重构前)(接口保留) inp-settle-prompt-info-new(重构后) 重构后关闭了对母婴结算、独立结算和临床试验的校验 修改文件:InpSettleResource.java InpSettleService.java InpSettleServiceImpl.java
3、queryPatientSettleInfo()(查询患者结算信息)
2、patientLock.lock() (锁定患者)
已锁定的患者其他收费员无法操作 解锁页面:住院结算-费用结算-患者锁定查询 *代码逻辑没看,不知道有没有权限问题,wtj账号可解锁患者
api/base/patient-lock-log/lock
3、queryBedRecByParams()
api/bed-rec/bed-recs-list 获取床位记录信息
4、resetMiddleSettleInfo() (重置中途结算信息)
5、getBillInfo() (查询患者信息)
4、getBillInfo() (查询患者信息)
1、_wardNoteStatus2Settle()(判断是否发了出院通知)
2、_getPrepaymentsByPatientId()(根据患者id获取患者的预交金详细信息)
删除中途结算选择预交金记录的弹框,和住院结算一样,一次性用完所有的预交金
api/prepayments
3、_getPrepaymentAmountByPatientId (根据患者Id,获取患者账户金信息)
删除对中途结算的逻辑判断,走住院结算的逻辑
5、_getPrepaymentAmountByPatientId (根据患者Id,获取患者账户金信息)计算预交金金额
_getPreHospExamAccountByVisitNo() (根据就诊号visitNo,获取患者院前检查费用信息)
1、api/bill/local/pre-hosp-exam (获取院前检查费用)
院前检查价表项目ID参数:PRE_HOS_EXAM_ITEM_ID (获取系统参数里配置的院前检查价表项目ID) 在inp_bill_detail表中根据visitNo和itemIds查询患者院前检查的费用
2、_getInpBillDetailByVisitNo() (根据患者的visit no获取bill detail)
6、_getInpBillDetailByVisitNo()(根据患者的visit no获取bill detail)
删除关于新生儿结算、独立结算的逻辑(变量赋值及校验)
1、_getNoSettleInpBillDetails() (查询未结算的费用明细)
删除关于新生儿结算、独立结算的逻辑(删除根据flag判断后进行变量赋值的相关代码)
api/inp-settle/{visitNo}/no-settle-temp
api/inp-settle/{visitNo}/no-settle (重构前)(接口保留) api/inp-settle/{visitNo}/no-settle-temp(重构后) 重构目的:减少最后结算时传给结算接口的billDetail的字段数,只传一些必须的字段 重构内容:1、创建一个新的VO,InpBillDetailForInpSettleVO 2、先根据参数查询inpBillDetails,取需要的字段设置到VO里 3、将原来的返回值类型List<InpBillDetail>换成List<InpBillDetailForInpSettleVO> 修改文件:InpBillDetailForInpSettleVO.java InpSettleResource.java InpSettleService.java InpSettleServiceImpl.java InpBillDetailCustom.java InpBillDetailDaoImpl.java *绍兴是两层架构,安康重构成三层
2、calculateSettleInfo()(计算结算信息)
删除独立结算、临床试验结算、新生儿结算相关的判断逻辑,直接进行赋值
1、_getCasherWorkingLogByVisitNo()(根据住院流水号获取住院患者的类别转换信息)
2、inpApportion()(费用分摊)
7、inpApportion()(费用分摊)
1、api/settles/admission-discharge-time (根据就诊流水号获取入院时间和出院时间)
传参时billDetails不用再判断,直接进行赋值
2、apportionForAsynchronousSettle()(预结算)
api/bill/apportion 重构目的:医保自己会查一次billDetails,所以his住院结算时不再传billDetails 重构内容:将selfPayApportion()中对settleMaster设置billDetails时进行判断,如果是住院则不设置,门诊则设置billDetails 修改文件:ApportionFacade.java inp_settle_controller_zj1.js *修改的是公共接口,旧的js也会调,导致旧的js中settleMaster没有billDetails,需要再次赋值
1、constructInpRcptPrnRecsForDrgYzmLcsy()(组装其他票据信息(母婴结算中的婴儿、独立结算和临床试验结算))
1、api/rcpt/construct-special-rcpt-prn-recs
api/rcpt/construct-special-rcpt-prn-recs(新增接口) 重构目的:将除了主结算记录之外的其他票据信息全部在后台组装 重构过程:1、前台给后台传的票据号是当前票据号,也就是主记录使用的票据号,在接口中每次使用时加一即可,最后 结算时会对所有票据号校验,看当前收款员是否有这些票据号。 2、临床试验不需要打发票,所以对于临床试验结算,需要判断完进行赋值 修改文件:RcptResource.java RcptService.java RcptServiceImpl.java InpSettleRefactorInputVO.java PaymentsMasterService.java PaymentsMasterServiceImpl.java
2、删除新生儿结算、独立结算、临床试验结算相关的校验和逻辑
3、_calculateBillDetailInfo()(计算费用分类数据)
api/inp-settle/inp-bill-detail 传参时不再传babyNo和clinicalTrialNo api/inp-settle/inp-bill-detail-temp (新增接口) 修改文件:InpSettleResource.java InpSettleService.java InpSettleServiceImpl.java InpBillDetailCustom.java InpBillDetailDaoImpl.java *此处增加一个校验,页面会有一个明细的勾选框,默认勾中,如果选不勾,则调用新接口
4、getclinicalTrialBill() (获取临床试验费用明细,为了tab页展示)
api/inp-settle/inp-bill-detail 传参时新增一个clinicalTrialNo(值为1),因为后台根据这个字段是否为空判断查询临床试验费用还是非临床试验费用
2、点击确认结算按钮
1、confirmPayment()(确认结算)
1、getCashierStopStatus()(判断收款员是否停用)
2、resetPaymentModalInfo() (重置支付框信息)
3、getBloodDirectFree()(获取用血减免金额)
4、getSpecialRelief()(获取特殊减免金额(安康是脱病优))
5、弹出支付窗口
2、点击支付窗口的确认按钮
1、billPaymentDialogClose()
删除独立结算、新生儿结算相关的逻辑(不用在前台组装这些票据,改为后台组装),保留主结算记录的票据组装
1、createPaymentMoneys()(组装支付方式)
删除独立结算、新生儿结算相关的逻辑
2、将其他票据信息加入主结算票据信息中
if($scope.otherRcptPrnRec.rcptPrnRecs.length){ rcptPrnRecs = rcptPrnRecs.concat($scope.otherRcptPrnRec.rcptPrnRecs); }
3、api/rcpt/inp (保存数据)
saveBaseRcptPrnRecs() (保存票据信息) 1、paymentsMasterService.savePaymentsMaster()保存支付信息 预交金信息也在这里处理,更新prepayment_master表和prepayment_money表 将支付信息写入payments_Master表和payments_Money表中 2、settleMaterService.saveSettleMaster()保存结算信息 *这里之前会产生大数据量结算超时的问题,已经把查询改成批量查询了 saveBasalSettleMaster() 将结算信息保存到settle_Master表中,同时也会保存Inp_Apportion_Items、Inp_Bill_Detail、Inp_Fee_Detail、Inp_Reckoning_Class_Detail、Inp_Subject_Class_Detail这些表 Inp_Bill_Detail表会更新参与结算的费用明细的settle_no otherMoudleDao.updateClinicalTrialMasterTotalCostsById() 更新clinical_trial_master表中的临床试验总花费 3、this.saveRcptPrnRecs()保存票据信息 将票据信息保存到Inp_Rcpt_Prn_Rec表中
1、paymentsMasterService.savePaymentsMaster()处理支付信息
1、savePaymentsMasterForReceipts()保存收支付记录
1、saveBasalPaymentsMaster() createPaymentsMaster() 生成支付主记录 这里判断是否使用预交金支付(handlePrepaymentForPay())、院内账户支付、减免支付、用血减免 保存主记录,同时更新payments_master、payment_money、prepayment_master、prepayment_money表 *通过prepayment_master表中的pay_no是否有值判断该条预交金记录是否参与结算 2、createThirdPartyPaymentForInpRefund()出院结算退预交金,只处理银行卡,支付宝,微信,返回需要退款的列表
2、savePaymentsMasterForRefund()保存退支付记录
*退费逻辑是隔日退费(判断payment_master表中的acct_no有值,则为全部退费,否则是取消结算)才会调用 隔日退费不退预交金 1、saveBasalPaymentsMaster()保存退支付记录 2、修改原支付记录,将退支付记录的pay_no更新到原支付记录的refund_pay_no字段中 3、createThirdPartyPaymentForInpRefund()出院结算退预交金,只处理银行卡,支付宝,微信,返回需要退款的列表
2、settleMaterService.saveSettleMaster()处理结算信息
1、saveSettleMasterForReceipts()保存收结算记录
1、根据settle_no查询inp_bill_details,计算总费用 *之前是循环遍历查询每一条,然后计算费用,出现了由于数据量大导致数据库连接超时的问题。已改成批量查询 2、saveBasalSettleMaster() 处理SettleMaster中的InpApportionItems、InpFeeDetail、InpReckoningClassDetail、InpSubjectClassDetail 最后在保存SettleMaster时将这些通过级联操作保存到各自的表里 3、updateClinicalTrialMasterTotalCostsById() 更新临床试验表中的费用(如果结算记录里有临床试验的话) 4、handleUpstreamForSettle()处理上游数据(住院结算不调) 5、handleDownstreamForSettle() 处理下游数据 1)a、中途结算 :更新pat_billing_rec表中的字段 b、出院结算:如果是挂账出院患者,则直接更新挂账记录结算状态 正常患者结算必须先发出院通知,然后调用护士站出院接口transferInterfaceFacade.outHospitalForSettle() 更新挂账记录结算状态,更新pat_billing_rec表中的字段(只更新结算状态,不更新费用) 2)填写住院登记记录上的总金额和个人自付金额,更新inp_visit表
2、saveSettleMasterForRefund()保存退结算记录
*退费逻辑是隔日退费(判断payment_master表中的acct_no有值,则为全部退费,否则是取消结算)才会调用 隔日退费是生成一条冲正的结算记录 1、生成待结算的inp_bill_details *要注意生成时会将结算前的负记录也生成,此时需要将这些负记录的return_detail_no写上对应的正值的detail_no 2、保存新的退结算记录 此时会同时将冲正的inp_bill_details一起保存 3、修改原结算记录 将退结算记录的settle_no写入原结算记录的return_detail_no字段中 4、handleUpstreamForSettle()处理上游数据(住院结算不调) 5、handleDownstreamForSettle() 处理下游数据 1)a、中途结算 :更新pat_billing_rec表中的字段(不退预交金,所以不更新prepayment字段) b、出院结算:更新pat_billing_rec表中的字段(只更新结算状态,不更新费用) 2)填写住院登记记录上的总金额和个人自付金额,更新inp_visit表
3、calculateCreditPaymentAccountLimit() 计算信用支付使用额度,关闭信用支付账户
3、this.saveRcptPrnRecs()处理票据信息
4、printInpRcptRec()(打印住院票据)
浮动主题
取消结算
api/rcpt/cancel/inp 取消住院结算
refundInpRcptForNoAcct()作废未结账住院交易
1、作废票据(将状态改为作废)
2、退回预交金(将参与结算的预交金记录的pay_no置空)
3、还原settleMaster(将结算时保存到各个表里的数据置空,inp_bill_detail则是把settle_no置空)
4、a)、中途结算:回写pats_Billing_Rec表中的字段(预交金余额及各种总费用) b)、住院结算:回写pats_Billing_Rec表中的字段(只回写结算状态)