prompt 10、 住院病人的中途结算(出院结算) SP_ZY_BRFY00_JS0000 create or replace procedure SP_ZY_BRFY00_JS0000 ( ad_ZYID00 in number, --病人住院信息表ID ad_JFLBID in number, --病人交费类别ID as_JFDJHS in char, --本次结算所使用的预交金的对应的交费单据号 as_JMYY00 in varchar2, --减免原因 as_CZBZ00 in char, --结算标志:0:中途结算 1:出院结算 2:挂账结算 3:年度结算 4:挂账留院结算 as_JSZZRQ in char, --中途结算截止日期 as_TSBZBH in char, --结算的特殊病种编号 ad_YEXM00 in char default '全部', --婴儿姓名 ad_DBZBM0 in char default '', --单病种编码 ad_JZDH00 out number, --病人结账单号 ad_XJYE00 out number, --病人账户上的现金余额(有可能为负数,为负则表示应补交现金金额jlg) ad_ZZYE00 out number, --病人账户上的转账余额(不能为负数jlg) ad_XJDJH0 out number, --病人现金的退款单据号 ad_ZZDJH0 out number, --病人转账的退款单据号 ad_XJTKPJ out number, --病人现金退款票据号 ad_ZZTKPJ out number, --病人转账退款票据号 as_XJTKXH out varchar2, --病人现金退款票据序号 as_ZZTKXH out varchar2, --病人转账退款票据序号 Pczy000 in number default -1 , --输入:操作员编码 Pczyks0 in number default -1 , --输入:操作员科室 Pcommit in varchar2 default 'N', --是否提交 Pcslx00 in varchar2 default '1', --农合传送类型 0传明细 1实时结算 默认1 Pzxcgbz out number, --执行成功标志 1成功 0失败 2存在项目总额为负 3余病人额不足4医保支付金额大于病人费用 Ptsxx00 out varchar2, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 as_DDLSH0 in varchar2 default '', --订单流水号 ad_XJCXJE out number, --中途结算病人现金冲销的金额 ad_XJCXDJ out number, --中途结算病人现金冲销的单据号 ad_XJCXPJ out number, --中途结算病人现金冲销的票据号 as_XJCXXH out varchar2, --中途结算病人现金冲销的票据序号 ad_CYQKJE out number, --出院欠款金额 ad_ID0000 in number default 0, --医保交互中间表ID ad_CYZT00 in char default '0', --出院状态, 0实际出院1结转出院 ad_JSXZID in number default 0, --结算选择记录ID ad_BYCS00 in varchar2 default '' --备用参数 ) -- MODIFICATION HISTORY -- Person Date Comments -- lintj 2013.02.07 modify 去掉不必要的参数 -- jlg 2013.02.21 增加插入ZY_PJSYQK.HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00 -- jlg 2013.02.21 增加插入ZY_JZB000.FBBH00 -- jlg 2013.03.29 增加同步修改ZY_JZB000.YBZXLB,YBLB00,YBBRLB -- jlg 2013.03.29 条件ls_BRID00 --> ad_ZYID00 -- jlg 2013.04.15 增加插入ZY_PJSYQK.ZYID00 -- jlg 2013.04.15 修改数据写入规则,结算退款的票据号不用结算对应的票据号 -- jlg 2013.04.22 增加处理关于退款返回参数ad_XJTKPJ,ad_ZZTKPJ -- jlg 2013.04.24 医保病人结算退款票据号问题的处理 -- jlg 2013.04.24 结算后退现金转账及收现金转账的处理 -- jlg 2013.04.25 增加处理关于退款返回参数票据序号as_XJTKXH,as_ZZTKXH -- jlg 2013.06.18 增加传入参数 农合结算传送类型Pcslx00 -- jlg 2013.07.02 修改关于中途已结算费用的处理 -- jlg 2013.07.06 重新定义Pzxcgbz返回值的意义 -- qks 2013.09.22 sp_zy_jzmxxm_sjzl00 增加入参ad_JZDH00 -- qks 2013.10.16 省人民:出院结算退"转账"预交金使用"现金"方式退出 -- qks 2013.10.17 公费病人审批,调用过程SP_ZY_BRFY00_EDIT00 -- qks 2013.11.20 省人民:市保健病人发票打印拆分为自费和记账2张 -- jlg 2016.03.16 政和妇幼医院 处理单病种医保返回总金额与分摊金额不一致的问题 (医院支付金额) ZYSF9-20160312-001 -- jlg 2016.08.18 增加ZY_JZB000.YBYL14-->YBYL32字段的写入 ZYSF9-20160816-001 -- jlg 2016.10.09 增加医保病人按自费结算的处理(不发送医保) ZYSF9-20160922-001 -- jlg 2016.10.18 修改单病种病人应补交金额计算有误的问题 ZYSF9-20161014-001 -- qks 2016.10.25 政和县医院:新增参数ZY_DBZJSZFJESF,控制单病种结算自付金额算法; by ZYSF9-20161024-003 -- qks 2016.11.07 政和县医院:收员缴款单上“发票自付”金额,跟按明细费别结算上的“个人自付金额”合计金额不等问题; by ZYSF9-20161107-001 -- qks 2016.11.17 政和县医院:单病种病人结算,欠费情况下也会结算成功并打印发票问题; by ZYSF9-20161121-002 -- qks 2016.12.04 参数ZY_YJJPJ0值为N时,写入ZY_BRJFB0.PLBH00值是错误; for ZYSF9-20161205-002 -- jlg 2017.03.14 增加ZY_JZB000.FFBZBM字段的写入处理,同时YBYL04写入病种标准收费金额 ZYSF9-20170313-002 -- jlg 2017.03.14 增加超标床位费及除外耗材费用 写入YBYL33,YBYL34 ZYSF9-20170314-001 -- jlg 2017.03.16 付费单病种处理:根据医保返回的结果进行结算相关金额的处理 ZYSF9-20170316-001 -- jlg 2017.03.23 付费单病种处理:增加自费病人单病种结算的处理 ZYSF9-20170320-002 -- jlg 2017.03.27 付费单病种处理:结算后BZWFY0字段值清零 ZYSF9-20170313-001 -- jlg 2017.05.25 付费单病种处理: 如果GRZFE0>HJJE00,则多余部分移除到YBYL05字段 ZYSF9-20170524-001 -- jlg 2017.06.12 处理婴儿费用单独结算的问题 ZYSF9-20170301-002 -- jlg 2017.07.28 结算后修改病人结算核对状态JSHDZT为未核对的处理 ZYSF9-20170621-002 -- jlg 2017.08.17 修改自费病人单病种结算医院支付金额有误的问题 ZYSF9-20170815-002 -- jlg 2017.09.13 增加对之前逃跑欠费出院的提示限制处理 ZYSF9-20170912-001 -- jlg 2018.01.04 增加C-DRG结算流程的数据处理 ZYSF9-20180104-001 -- jlg 2018.01.08 增加C-DRG结算时医保返回报销金额与院内费用总额不一致的处理 ZYSF9-20180105-002 -- jlg 2018.01.16 付费单病种处理:对于医保返回病人实际费用的金额时医院支付部分的计算处理 ZYSF9-20180116-002 -- jlg 2018.02.07 增加省属付费单病种医保病人按自费结算的限制(省属单病种医保病人不能按不发送医保来处理) ZYSF9-20180207-002 -- jlg 2018.02.26 增加传入参数as_DDLSH0,处理新农合跨省结算病人 ZYSF9-20180213-002 -- jlg 2018.03.06 修改SP_ZY_XNHKSJS_JSQR00过程的调用入参,为了处理跨省结算病人现金余额刚好等于医保报销金额时,交费表没有退还相应的现金余额的问题 ZYSF9-20180305-001 -- jlg 2018.03.14 处理微信、支付宝等交款的在结算时计算余额时没有被计算在内导致提示余额不足的 ZYSF9-20180313-001 -- jlg 2018.03.22 处理ZY_JZB000.YBSM01~YBSM08的值的写入,处理医保返回mxxzqh记录保存 ZYSF9-20180320-004 -- jlg 2018.04.04 中途结算微信、支付宝等交款的金额在计算余额时的补充处理 ZYSF9-20180404-001 -- jlg 2018.04.10 政和单病种:在ZY_YBDBZJSJK='Y'情况下,结算时将ZY_BRXXB0.DBZBM0写到ZY_JZB000.DBZBM0 ZYSF9-20180410-001 -- jlg 2018.04.13 政和单病种模式:增加对于超标床位费及除外耗材费的记录 ZYSF9-20180410-002 -- jlg 2018.04.17 政和单病种模式:重新处理 个人自付金额,医保支付金额等金额的计算方式 ZYSF9-20180413-002 -- jlg 2018.04.25 增加婴儿费用的挂账留院结算处理模式(as_CZBZ00='4'),该操作模式类似于中途结算 ZYSF9-20180424-001 -- jlg 2018.04.25 增加不包含于统筹基金的民政补助金额(MZBZJE)的处理 ZYSF9-20180422-003 -- jlg 2018.04.29 增加DLSBJE 商保支付金额(独立于统筹基金金额) 的处理 ZYSF9-20180425-005 -- liwm 2018.05.07 增加是否精准扶贫信息 for ZYSF9-20180503-001 -- jlg 2018.05.16 修改政和单病种YBHDJE赋值错误问题,同时补充ZY_JZB000的YBYL50~YBYL69,YBSM13~YBSM29的写入 ZYSF9-20180514-001 -- jlg 2018.06.19 增加GWBZJE 公务员补助金额(独立于统筹基金金额)的处理 ZYSF9-20180614-005 -- jlg 2018.06.23 增加WJXJJE,WJZZJE,JSYSXJ,JSYSZZ等处理 ZYSF9-20180622-001 -- jlg 2018.06.23 增加YSJJE0的处理 ZYSF9-20170802-002 -- jlg 2018.06.27 增加XJYJZE,ZZYJJE的处理 ZYSF9-20180625-001 -- jlg 2018.06.28 增加中途结算余额不足时自动补交金额再冲销自动补交的金额 ZYSF9-20180628-001 -- jlg 2018.07.13 修改婴儿挂账留院结算的JZZT00值 '0'-->'2' ZYSF9-20180713-001 -- jlg 2018.07.17 增加记账病人出院结算及挂账结算时自动转费别为自费(有参数控制) ZYSF9-20180421-001 -- jlg 2018.07.20 处理第二次取消结算时XJYJZE,ZZYJJE值不对的问题 ZYSF9-20180712-002 -- jlg 2018.07.30 修改BM_BZSFBZ取BZSFJE字段值去掉 YBBRLB = Vybbrlb 的条件 ZYSF9-20180726-001 -- jlg 2018.08.23 增加出参ad_CYQKJE(出院欠款金额) ZYSF9-20180817-001 -- jlg 2018.09.14 增加折扣金额ZKJE00的写入处理 ZYSF9-20180910-002 -- jlg 2018.11.29 增加票据按分院区进行走号的处理,SF_ZY_GETPJXH函数增加CZYKS0的传入 ZYSF9-20181128-006 -- jlg 2018.12.02 处理当ZY_YBSYBRYEFYSFDDJS=Y时,省属单病种病人婴儿费用按自费进行中途结算 ZYSF9-20181130-001 -- pwt 2019.02.01 年度结算或中途结算时,如果病人是单病种病人,不允许结算 for ZYSF9-20190131-002 -- pwt 2019.02.02 已结算过的单病种病人,不允许做出院结算 for ZYSF9-20190201-004 -- pwt 2019.02.13 原来在ZY_JZBRCYJSZDZWZFFB=‘1’的情况下,直接修改BM_BRXXB0的费别改为调用门诊转费别过程SP_SF_BRFB00_EDIT00转到SP_ZY_YBCYDJ for ZYSF9-20190201-002 -- pwt 2019.04.10 添加通用字典(允许中途结算和出院结算的单病种),允许中途结算和出院结算项目 for ZYSF9-20190409-001 -- jlg 2019.06.28 补充有些结算没有写入ZY_JZB000.FYQSRQ与FYJZRQ的值 ZYSF9-20190627-002 -- jlg 2019.11.12 增加跨年结算的处理 ZYSF9-20191108-001 -- jlg 2019.12.17 增加新医保接口返回ZY_YBFPMX及ZY_YBBZMX的处理 ZYSF9-20191216-005 -- jlg 2020.01.03 增加入参ad_ID0000,处理医保病人中途结算时后面有冲销的项目一并结算的问题 ZYSF9-20200103-001 -- qks 2020.01.08 判断是否存在单个项目费用总额为负记录:去掉XMMC00,增加SFLB00; for ZYSF9-20191228-001 -- liwm 2020.01.14 病人险种信息写入ZY_JZB000 ZYSF9-20200114-001 -- jlg 2020.02.04 增加特需医疗服务费用TXYLFW的处理 ZYSF9-20200204-001 -- jlg 2020.02.10 增加处理自费病人中途结算时后面有冲销的项目一并结算的问题 ZYSF9-20200209-001 -- jlg 2020.02.17 增加处理出院结算现金退款票据序号暂不取值,后面再取值的问题(参数ZY_JSXJTKPJXHQZLB启用情况下) ZYSF9-20191011-001 -- jlg 2020.02.21 增加处理结算发票暂不取号,后面打印前再取号的问题(参数ZY_SFTSDYZSFP启用情况下)ZYSF9-20200204-003 -- jlg 2020.07.23 增加 DLDBJJ 商保统筹基金支付金额(独立于统筹基金金额) 的处理 ZYSF9-20200723-001 -- linzetao 2020.08.25 处理C-DRG病人结算医保返回jsbllx, drgzfe及C-DRG分组写表问题 ZYSF9-20200824-001 -- linzetao 2020.09.23 处理参数ZY_CKBRSFYXZTJS(出科病人是否允许中途结算,0不允许1允许) ZYSF9-20200918-001 -- linzetao 2020.09.27 处理政和县医院母亲是病种不能正常单独结算婴儿费用问题 ZYSF9-20200917-004 -- linzetao 2020.10.30 处理新医保接口返回节点bkc620(本地)成员共济账户支付、bkc619(异地)成员共济账户支付 ZYSF9-20201013-001 -- linzetao 2020.11.05 优化统计金额SQL ZYSF9-20201105-001 -- linzetao 2020.11.11 扩展ls_TSBZBH长度 ZYSF9-20201111-004 -- linzetao 2020.11.16 增加ad_CYZT00入参,结算后更新到ZY_BRXXB0.CYZT00 ZYSF9-20201016-004 -- jlg 2020.12.07 增加入参ad_JSXZID(结算选择ID),处理中途结算选择结算的功能 ZYSF9-20201126-001 -- linzetao 2020.12.09 增加CJBTCE产检补退差额的处理, 大于0按0计, 小于0按实际计 ZYSF9-20201112-005 -- linzetao 2020.12.09 判断非单病种结算存在医院支付金额时提示异常并中止结算 ZYSF9-20201209-001 -- jlg 2020.12.25 扩展参数ZY_SFYXTPGZBRCXRYDJ=2的应用场景 ZYSF9-20201204-001 -- linzetao 2021.01.12 处理新医保接口返回节点bke921(家庭健康)共济账户扣款人、bke922(家庭健康)共济账户扣款人金额 ZYSF9-20210108-001 -- linzetao 2021.01.27 调整挂账留院结算ZY_BRJFB0.JFJE00为结算自付金额(ls_JSZFJE) ZYSF9-20210125-002 -- linzetao 2021.01.28 增加入参ad_BYCS00(备用参数), 记录结算日期区间(JSQSRQ和JSJZRQ) ZYSF9-20210126-001 -- linzetao 2021.01.29 处理婴儿挂账留院结算医保住院号(ZY_JZB000.YBZYH0)记录BQ_JSXX00.YBZYH0 ZYSF9-20210128-001 -- linzetao 2021.03.19 CDRG结算增加超标药品费处理 ZYSF9-20180106-002 -- linzetao 2021.03.29 增加BKE284(身份认证类型)、PTBCTS(普通病床天数)和RBZFY0(日标准费用)的处理 ZYSF9-20210317-003 -- linzetao 2021.04.06 处理医保非单种耗材费用 ZYSF9-20210325-001 -- linzetao 2021.04.15 前端未传入只有新医保接口bke284默认为01 ZYSF9-20210406-003 -- jlg 2021.04.26 发票序号走号统一并到函数SF_ZY_GETPJXH里处理 ZYSF9-20210415-002 -- linzetao 2021.05.17 调整FYQSRQ和FYJZRQ只取费用表正单日期 ZYSF9-20210427-001 -- linzetao 2022.01.07 处理国家医保返回的全自费金额、清算经办机构等数据 ZYSF9EX-20220104-001 -- linzetao 2022.01.13 处理医保返回的hifdm_pay,hosp_part_amt等节点 ZYSF9EX-20220113-002 -- jlg 2022.02.17 增加ZY_JZB000.BJTDJH,BJTJE0的处理 ZYSF9EX-20220117-002 -- jlg 2022.02.25 增考ZY_JZB000.DBZBM0字段的处理 ZYSF9EX-20220221-002 -- linzetao 2022.03.15 处理国家医保返回的medfee_sumamt,hosp_part_amt节点 ZYSF9EX-20220315-002 -- linzeta 2022.03.17 更新ZY_JZB000.AAE140字段 ZYSF9EX-20220317-001 -- jlg 2022.03.28 扩展参数ZY_JSXJTKPJXHQZLB=2的处理 ZYSF9EX-20220321-002 -- linzetao 2022.04.01 取消自费病人单病种结算功能 ZYSF9EX-20220401-001 -- nichaolin 2022.06.22 增加医保保内保外项目分开结算,类似婴儿结算 ZYSF13X-20220622-001 -- linzetao 2023.01.04 处理中途结算滚存支付明细ZY_JSZFMX的回收 ZYSF9EX-20230104-001 as ls_XM0000 ZY_BRXXB0.XM0000%type; --病人姓名 ls_XB0000 ZY_BRXXB0.XB0000%type; --病人性别 ls_BRID00 ZY_BRXXB0.BRID00%type; --病人性别 ls_PJH000 ZY_PJSYQK.PJH000%type; --票据流水号 ls_PJH001 ZY_PJSYQK.PJH000%type; --票据流水号 ls_FZPJH0 ZY_PJSYQK.PJH000%type; ls_SFXMID BM_YYSFXM.SFXMID%type; --收费项目ID ls_XJJFJE ZY_BRJFB0.JFJE00%type; --病人现金交费金额 ls_ZZJFJE ZY_BRJFB0.JFJE00%type; --病人转账交费金额 ls_HJJE00 ZY_BRFY00.HJJE00%type; --合计金额 ls_ZFJE00 ZY_BRFY00.ZFJE00%type; --合计自付金额 ls_JZJE00 ZY_BRFY00.JZJE00%type; --记帐金额 ls_GFJE00 ZY_BRFY00.GFJE00%type; --公费金额 ls_YBZYH0 ZY_BRXXB0.YBZYH0%type; --医保住院号 ls_GRZHZF ZY_JZB000.GRZHZF%type; --个人医疗账户支付(医保返回) ls_TCJJZF ZY_JZB000.TCJJZF%type; --统筹基金支付(医保返回) ls_YBQTZF ZY_YBFS00.QTZFHJ%type; --其他支付合计 ls_HSHJJE ZY_BRFY00.HJJE00%type; --合计结算金额 ls_CFZFJE ZY_FYMX00.ZFJE00%type; --拆分自费金额 ls_CYYTK0 ZY_BRZHXX.ZYE000%type; --出院应退款 ls_JZMX00 ZY_JZMX00%rowtype; --结账明细表变量 ls_ZPH000 ZY_BRJFB0.ZPH000%type; ls_ZPKHYH ZY_BRJFB0.ZPKHYH%type; ls_ZPDWMC ZY_BRJFB0.ZPDWMC%type; ls_PLBH00 BM_PJLXB0.PLBH00%type; ls_COUNT0 number; ls_CZRQ00 char(8); ls_CZSJ00 char(8); ls_SSWUTSCL char(4); ls_SFCFFP char(4); --是否拆分发票 ls_SF_ZY_FFJJ char(4); ls_DQBQ00 ZY_BRXXB0.DQBQ00%type; ls_FBBH00 ZY_BRXXB0.FBBH00%type; ls_FYQSRQ ZY_JZB000.FYQSRQ%type; ls_FYJZRQ ZY_JZB000.FYJZRQ%type; ls_ZYPJMC BM_FPXM00.XMMC00%type; --发票名称 ls_YEXM00 varchar2(40); --婴儿姓名 ls_YBZXLB ZY_JZB000.YBZXLB%type; --医保中心类别 ls_YBLB00 ZY_JZB000.YBLB00%type; --医保类别 ls_YBBRLB ZY_JZB000.YBBRLB%type; --医保病人类别 ls_XZQH00 BM_BRXXB0.XZQH00%Type; ls_TYDWMC BM_BRXXB0.TYDWMC%Type; Vczyxm0 BM_YGBM00.ZWXM00%type; ls_YBFSDH ZY_YBFS00.YBFSDH%type; ls_DJH000 ZY_BRJFB0.DJH000%type; ls_GSDJH0 ZY_BRXXB0.GSDJH0%type; ls_CSLX00 ZY_BRXXB0.CSLX00%type; ls_BRZT00 ZY_BRXXB0.BRZT00%type; ls_YYID00 XT_YYXX00.YYID00%type; ls_ZZXJTC XT_XTCS00.VALUE0%type; ls_CKSFYXZTJS XT_XTCS00.VALUE0%type; ls_YBJZSJ varchar2(16); ls_JMJE00 number; ls_YHJE00 number; ZY_JSTKAYJJFS char(1); ls_ZY_FFJJ char(1); ls_SSWR00 number; ls_TMPPJH number; ls_YBZHYE number; ls_CFFPFB XT_XTCS00.VALUE0%type; ls_DBZJK0 varchar2(2); --医保单病种结算接口参数值 ls_YYZFJE number; --医院支付金额 ls_JSZFJE number; --结算自付金额 ls_FPZFJE number; --发票自付金额 ls_YBZFJE number; --医保支付合计金额 ls_GRZFE0 number; --医保返回个人自付额 ls_JFBZ00 ZY_BRJFB0.JFBZ00%type; --交费标志 '0'交预交金,'1'退预交金 '2'作废 ls_DBZSF0 XT_XTCS00.VALUE0%type; --单病种结算自付金额算法: =0默认; =1 医院支付>0,自付=医院支付+医保返回的自付金额,医院支付<=0,自付=医保返回的自付金额 ls_YBYYZF ZY_JZB000.YBYL05%type; --根据参数ZY_DBZJSZFJESF=1计算出来的医院支付金额 ls_FFBZBM ZY_BRXXB0.FFBZBM%type; --付费单病种编码 ls_JSBLLX ZY_YBFS00.YBSM10%type; --C-DRG结算病历类型 ls_FFBZJE number; --付费单病种对应收费金额 ls_CBCWFY number; --付费单病种超标床位费用 ls_CWHCFY number; --付费单病种除外耗材费用 ls_TXYLFW number; --特需医疗服务费用(付费单病种) ls_BCBXF0 number; --医保返回的报销费总金额 ls_BZZFJE number; --付费单病种病人自付金额 ls_YBYL43 number; --可报高值耗材费(C-DRG) ls_YBYL44 number; --超标床位费(C-DRG) ls_YBYL45 number; --超标高值耗材费(C-DRG) ls_ID0000 ZY_YBFSMX.ID0000%type; --医保发送明细的ID ls_SFYXGZ XT_XTCS00.VALUE0%type; --是否允许逃跑挂账的病人重新办理入院 ls_DDLSH0 ZY_YBJK00.DDLSH0%type; --订单流水号 ls_TCXJJE number; --现金金额 ls_TCZZJE number; --转账金额 ls_ZXZT00 number; --执行状态 ls_ERRMSG varchar2(400); --错误信息 ls_DBZBM0 ZY_JZB000.DBZBM0%type; --单病种编码 zy_DBZBM0 ZY_BRXXB0.DBZBM0%type; --单病种编码 --ls_TSBZBH ZY_JZB000.TSBZBH%type; --特殊病种编号 ls_TSBZBH varchar2(50); --特殊病种编号 ls_CDRGFZ ZY_JZB000.YBSM09%type; --C-DRG分组 ls_DBZJE0 number; --单病种自付金额 ls_YBHDJE number; --单病种医保核定金额 ls_MZBZJE number; --民政补助金额(独立) ls_DLSBJE number; --商保支付金额(独立) ls_DLDBJJ number; --商保统筹基金支付金额(独立) ls_GWBZJE number; --公务员补助金额(独立) Ecustom exception; ls_XJYJZE number; --现金预交总额 ls_ZZYJZE number; --转账预交总额 ls_LSJZDH ZY_JZB000.JZDH00%type; --上一次的结算单号 ls_ZJZDBS XT_XTCS00.VALUE0%type; --参数:中途结算自动补收预交金 ls_JZCYZZF XT_XTCS00.VALUE0%type; --参数:出院结算记账费别自动转自费费别 ls_YEDDJS XT_XTCS00.VALUE0%type; --参数:医保生育病人婴儿费用是否单独结算 ls_ZKJE00 ZY_JZB000.ZKJE00%type; --折扣金额 ls_BRZTQK BM_BRXXB0.BRZTQK%type; --病人职退情况 ls_ICZTMC BM_BRXXB0.ICZTMC%type; --医保状态名称 ls_SFJZFP BM_BRXXB0.SFJZFP%type; --是否精准扶贫 ls_JZZT00 ZY_JZB000.JZZT00%type; --结账状态 ls_QYKNJS XT_XTCS00.VALUE0%type; --参数:住院医保病人出院结算是否启用跨年结算模式 ls_YBJKID ZY_YBFS00.YBJKID%type; --中间表YBJKID ls_MXLSH0 ZY_YBFS00.MXLSH0%type; --医保明细流水号 ls_BKC001_MC ZY_BRXXB0.BKC001_MC%type; --人员待遇类别名称 ls_AAE140 ZY_BRXXB0.AAE140%type; --险种类型 ls_AAE140_MC ZY_BRXXB0.AAE140_MC%type; --险种类型名称 ls_TKPJLB XT_XTCS00.VALUE0%type; --参数:住院结算现金退款票据序号取值类别 ls_FPPJXH ZY_PJSYQK.PJXH00%type; --住院发票的票据序号 ls_JSFPJE number; --结算发票金额 ls_HSFPJE number; --伙食发票金额、非医疗项目金额 --ls_DYZSFP XT_XTCS00.VALUE0%type; --参数:出院结算中是否提示打印正式的发票(即是否开启选择打印发票模式) ls_BKC619 ZY_JZB000.BKC619%type; --(异地)成员共济账户支付 ls_BKC620 ZY_JZB000.BKC620%type; --(本地)成员共济账户支付 ls_BKE921 ZY_JZB000.BKE921%type; --(家庭健康)共济账户扣款人 ls_BKE922 ZY_JZB000.BKE922%type; --(家庭健康)共济账户扣款人金额 ls_CQJCF0 ZY_JZB000.YBYL68%type; --产前检查费(YBYL68) ls_CJBTCE ZY_JZB000.CJBTCE%type; --产检检查费(bkc064)超出个人自付金额后需补退的差额 ls_JSQSRQ ZY_JZB000.JSQSRQ%type; --结算起始日期(前端传入) ls_JSJZRQ ZY_JZB000.JSJZRQ%type; --结算截止日期(前端传入) ls_PTBCTS ZY_JZB000.PTBCTS%type; --普通病床天数 ls_RBZFY0 ZY_JZB000.RBZFY0%type; --日标准费用(精神科普通病床天数) ls_BKE284 ZY_JZB000.BKE284%type; --身份认证类型 ls_BJTDJH ZY_JZB000.BJTDJH%type; --补交退单据号 ls_BJTJE0 ZY_JZB000.BJTJE0%type; --补交退预交金金额 ls_SFBWXM char(1); --是否保外项目 ls_medfee_sumamt ZY_YBFS00.medfee_sumamt%type; --[国家医保]医疗费总额 ls_fulamt_ownpay_amt ZY_JZB000.fulamt_ownpay_amt%type; --[国家医保]全自费金额 ls_overlmt_selfpay ZY_JZB000.overlmt_selfpay%type; --[国家医保]超限价自费费用 ls_preselfpay_amt ZY_JZB000.preselfpay_amt%type; --[国家医保]先行自付金额 ls_inscp_scp_amt ZY_JZB000.inscp_scp_amt%type; --[国家医保]符合政策范围金额 ls_hifmi_pay ZY_JZB000.hifmi_pay%type; --[国家医保]居民大病保险资金支出 ls_hifob_pay ZY_JZB000.hifob_pay%type; --[国家医保]职工大额医疗费用补助基金支出 ls_acct_mulaid_pay ZY_JZB000.acct_mulaid_pay%type; --[国家医保]个人账户共济支付金额 ls_clr_optins ZY_JZB000.clr_optins%type; --[国家医保]清算经办机构 ls_clr_way ZY_JZB000.clr_way%type; --[国家医保]清算方式 ls_clr_type ZY_JZB000.clr_type%type; --[国家医保]清算类别 ls_hifdm_pay ZY_JZB000.hifdm_pay%type; --[国家医保]伤残人员医疗保障基金支出 ls_hosp_part_amt ZY_JZB000.hosp_part_amt%type; --[国家医保]医院负担金额 ls_med_type ZY_JZB000.med_type%type; --[国家医保]医疗类别 ls_psn_type ZY_JZB000.psn_type%type; --[国家医保]人员类别 ls_medins_setl_id ZY_JZB000.medins_setl_id%type; --[国家医保]医药机构结算ID ls_pool_prop_selfpay ZY_JZB000.pool_prop_selfpay%type; --[国家医保]基本医疗保险统筹基金支付比例 ls_psn_part_amt ZY_JZB000.psn_part_amt%type; --[国家医保]个人负担金额 in_YBJKID_JS varchar2(20); --前端传入的住院结算医保接口id in_YBTYPE varchar2(20); --前端传入的医保类型 cursor CUR_ZY_JZMX00_ZFBL00 is select * from ZY_JZMX00 where JZDH00 = ad_JZDH00 and nvl(ZFBL00,1)<>0 and SFYLXM='Y' order by ZFBL00; begin Pzxcgbz:=0; ls_CZRQ00 := to_char(sysdate,'YYYYMMDD'); ls_CZSJ00 := to_char(sysdate,'HH24:MI:SS'); ls_GRZHZF := 0; ls_TCJJZF := 0; ls_YBQTZF := 0; ad_CYQKJE := 0; --设置病人的出院欠款金额 ls_CYYTK0 := 0; ad_XJTKPJ := 0; ad_ZZTKPJ := 0; ad_XJCXDJ := 0; ad_XJCXPJ := 0; ls_CFZFJE := 0; ls_FFBZJE := 0; ls_CBCWFY := 0; ls_CWHCFY := 0; ls_TXYLFW := 0; ls_DBZJE0 := 0; ls_YBHDJE := 0; ls_BZZFJE := 0; ls_MZBZJE := 0; ls_DLSBJE := 0; ls_DLDBJJ := 0; ls_GWBZJE := 0; ls_YBYL43 := 0; --可报高值耗材费(C-DRG) ls_YBYL44 := 0; --超标床位费(C-DRG) ls_YBYL45 := 0; --超标高值耗材费(C-DRG) ls_DDLSH0 := as_DDLSH0; ls_XJYJZE := 0; --现金预交总额 ls_ZZYJZE := 0; --转账预交总额 ls_ZKJE00 := 0; --折扣金额 ls_CQJCF0 := 0; ls_CJBTCE := 0; ls_BKE284 := ''; ls_BJTDJH := 0; ls_BJTJE0 := 0; ls_SFBWXM := 'N';--是否保外项目 select trim(nvl(max(VALUE0),'N')) into LS_SF_ZY_FFJJ from XT_XTCS00 where NAME00='SF_ZY_FFJJ'; --收费员逢分进角 select trim(nvl(max(VALUE0),'N')) into ZY_JSTKAYJJFS from XT_XTCS00 where NAME00='ZY_JSTKAYJJFS'; --住院病人中期结算退预交金是否以预交金方式转入Y是N否是 select trim(nvl(max(VALUE0),'N')) into ls_ZZXJTC from XT_XTCS00 where NAME00='ZY_CYJSZZXJTC'; --出院结算退"转账"预交金是否使用"现金"方式退出,Y是N否,默认N select trim(nvl(max(VALUE0),'N')) into LS_SFCFFP from XT_XTCS00 where NAME00='SF_SFCFFP'; --是否拆分发票 select trim(nvl(max(VALUE0),'N')) into ls_SSWUTSCL from XT_XTCS00 where NAME00='SF_SSWUTSCL'; --四舍五入部分的金额特殊处理,Y:是 select trim(nvl(max(VALUE0),'N')) into ls_CFFPFB from XT_XTCS00 where NAME00='ZY_KZMZFBBRCFFP'; --控制某种费别(离休)病人拆分发票(按是否医保来分)VALUE0=(BM_BRFBB0.FBBH00)默认为-1 select trim(nvl(max(VALUE0),'0')) into ls_DBZSF0 from XT_XTCS00 where NAME00='ZY_DBZJSZFJESF'; --单病种结算自付金额算法 select trim(nvl(max(VALUE0),'N')) into ls_DBZJK0 from XT_XTCS00 where NAME00='ZY_YBDBZJSJK'; --新农合单病种处理 jlg select trim(nvl(max(VALUE0),'0')) into ls_SFYXGZ from XT_XTCS00 where NAME00='ZY_SFYXTPGZBRCXRYDJ'; --是否允许逃跑挂账病人重新入院登记,1是0否,默认0 (重新入院后,在正常出院结算时要提示结清? select trim(nvl(max(VALUE0),'N')) into ls_ZJZDBS from XT_XTCS00 where NAME00='ZY_ZTJSYEBZZDBSZCX'; --中途结算余额不足时自动补收对应预交金随后再冲销,1是0否,默认0 jlg select trim(nvl(max(VALUE0),'0')) into ls_JZCYZZF from XT_XTCS00 where NAME00='ZY_JZBRCYJSZDZWZFFB'; --记账费别的病人出院结算后是否自动将其费别转为自费,1是0否,默认0 jlg select trim(nvl(max(VALUE0),'N')) into ls_YEDDJS from XT_XTCS00 where NAME00='ZY_YBSYBRYEFYSFDDJS'; --住院生育病人婴儿费用是否允许单独结算,Y是N否,默认N jlg select trim(nvl(max(VALUE0),'0')) into ls_QYKNJS from XT_XTCS00 where NAME00='ZY_YBBRCYJSSFQYKNJSMS'; --住院医保病人出院结算是否启用跨年结算模式,0不启用,1选择启用,加分号后面带启用的医保中心,多个中心用逗号隔开,如(1;@,H,2),2医保都启用,默认0 jlg select trim(nvl(max(VALUE0),'0')) into ls_TKPJLB from XT_XTCS00 where NAME00='ZY_JSXJTKPJXHQZLB'; --住院病人出院结算现金退款预交金票据序号取值类别,0直接取收费员当前值,1先取“0”,最后打印时再取当前值(为了支付平台原路退不占用票号),2先取“0”,最后打印时也不取当前值,即出院结算现金退款都不取号,默认0 jlg --select trim(nvl(max(VALUE0),'N')) into ls_DYZSFP from XT_XTCS00 where NAME00='ZY_SFTSDYZSFP'; --出院结算中是否提示打印正式的发票(即是否开启选择打印发票模式),Y提示,N不提示,默认N jlg select trim(nvl(max(VALUE0),'0')) into ls_CKSFYXZTJS from XT_XTCS00 where NAME00='ZY_CKBRSFYXZTJS'; --出科病人是否允许中途结算, 0不允许1允许, 默认值0 ls_SFBWXM := trim(substrb(SF_XT_GETXMLSTR('SFBWXM',ad_BYCS00),1,50)); --是否保外项目 if ls_SFBWXM is null then ls_SFBWXM := 'N'; end if; select ZWXM00 into Vczyxm0 from BM_YGBM00 where YGBH00=Pczy000; select YYID00 into ls_YYID00 from BM_BMBM00 where BMBH00=Pczyks0; select a.BRID00,a.YBZYH0,a.XM0000,a.XB0000,a.DQBQ00,a.FBBH00, a.YBZXLB,a.YBLB00,a.YBBRLB,a.GSDJH0,a.CSLX00,a.BRZT00, trim(a.FFBZBM),trim(a.DBZBM0),a.BKC001_MC,nvl(a.AAE140,b.AAE140),nvl(a.AAE140_MC,b.AAE140_MC) into ls_BRID00,ls_YBZYH0,ls_XM0000,ls_XB0000,ls_DQBQ00,ls_FBBH00, ls_YBZXLB,ls_YBLB00,ls_YBBRLB,ls_GSDJH0,ls_CSLX00,ls_BRZT00, ls_FFBZBM,zy_DBZBM0,ls_BKC001_MC,ls_AAE140,ls_AAE140_MC from ZY_BRXXB0 a,BM_BRXXB0 b where a.BRID00=b.BRID00 and ZYID00 = ad_ZYID00; select XZQH00,TYDWMC,BRZTQK,ICZTMC,SFJZFP into ls_XZQH00,ls_TYDWMC,ls_BRZTQK,ls_ICZTMC,ls_SFJZFP from BM_BRXXB0 where BRID00=ls_BRID00; if ls_FBBH00 = 3 then if (ls_FFBZBM is not null) and (as_CZBZ00='0') then select count(*) into ls_COUNT0 from BM_TYZD00 where ZDMC00 ='允许中途结算和出院结算的单病种' and MC0000 = ls_FFBZBM and YXBZ00='1'; if ls_COUNT0=0 then Ptsxx00:='该病人是单病种病人,不允许进行中途结算!'; raise Ecustom; end if; end if; if (ls_FFBZBM is not null) and (as_CZBZ00='3') then Ptsxx00:='该病人是单病种病人,不允许进行年度结算!'; raise Ecustom; end if; end if; select count(*) into ls_COUNT0 from ZY_FYMX00 where ZYID00=ad_ZYID00 and JZDH00+0>0; if (ls_COUNT0>0) and (ls_FFBZBM is not null) and (as_CZBZ00='1') then select count(*) into ls_COUNT0 from BM_TYZD00 where ZDMC00 ='允许中途结算和出院结算的单病种' and MC0000 = ls_FFBZBM and YXBZ00='1'; if ls_COUNT0=0 then Ptsxx00:='单病种病人只能结算一次,已经结算过的单病种病人不允许做出院结算,请先取消结算!'; raise Ecustom; end if; end if; if ls_BRZT00='20' and as_CZBZ00 in ('1','2') then Ptsxx00:='在院病人不能进行出院结算或挂账结算'; raise Ecustom; elsif ls_BRZT00='3' and as_CZBZ00 in ('0') and ad_YEXM00='全部' and ls_SFBWXM='N' then if not (ls_FBBH00 = 3 and substrb(ls_QYKNJS,1,1) in ('1','2')) and ls_CKSFYXZTJS <> '1' then --如果有开启医保病人跨年出院结算,则不判断 Ptsxx00:='出科病人不能进行中途结算'; raise Ecustom; end if; elsif as_CZBZ00 in ('4') and ad_YEXM00='全部' then Ptsxx00:='非婴儿费用结算目前不能在挂账留院结算操作'; raise Ecustom; end if; --0.判断病人是否可以进行出院结算 if as_CZBZ00 in ('1','2','3') then select count(*) into ls_COUNT0 from ZY_BRZHXX where ZYID00 = ad_ZYID00 and SFDJ00 <> '2' and JFLBID <> 0 ; if ls_COUNT0 > 1 then Ptsxx00:='病人有多个账户,不能办理出院结算!请将其它账户结清后,再进行本操作!'; Pxxxx00:=sqlerrm; raise Ecustom; end if; end if; if (as_CZBZ00 ='1') and (ls_SFYXGZ = '1') then --需查看该病人之前是否有逃跑挂账出院的,如果有,则提示,且不能办理正常出院,除非已结清挂账 select count(*) into ls_COUNT0 from ZY_BRXXB0 where BRID00 = ls_BRID00 and BRZT00='5'; if ls_COUNT0 > 0 then Ptsxx00:='该病人之前的住院有发生逃跑挂账结算出院,现不能办理正常出院结算!请将之前住院的账结清后,再进行本操作!'; Pxxxx00:=sqlerrm; raise Ecustom; end if; end if; --取前端传入的参数 begin --取前端传入的结算起始日期和结算截止日期 ls_JSQSRQ := trim(substrb(SF_XT_GETXMLSTR('JSQSRQ',ad_BYCS00),1,50)); --结算起始日期 ls_JSJZRQ := trim(substrb(SF_XT_GETXMLSTR('JSJZRQ',ad_BYCS00),1,50)); --结算截止日期 --普通病床天数 begin ls_PTBCTS := to_number(substrb(SF_XT_GETXMLSTR('PTBCTS',ad_BYCS00),1,50)); --普通病床天数 exception when others then ls_PTBCTS := 0; end; --精神科普通病床日标准费用 begin ls_RBZFY0 := to_number(substrb(SF_XT_GETXMLSTR('RBZFY0',ad_BYCS00),1,50)); --日标准费用(精神科普通病床天数) exception when others then ls_RBZFY0 := 0; end; --身份认证类型 ls_BKE284 := substrb(SF_XT_GETXMLSTR('BKE284',ad_BYCS00),1,50); --身份认证类型 if nvl(ls_YBJKID,'0') <> '0' and ls_BKE284 is null then ls_BKE284 := '01'; end if; in_YBJKID_JS := substrb(SF_XT_GETXMLSTR('YBJKID_JS',ad_BYCS00),1,20); --医保结算交互接口id in_YBTYPE := nvl(substrb(SF_XT_GETXMLSTR('YBTYPE',ad_BYCS00),1,20),'1'); --医保类型 begin ls_BJTDJH := to_number(trim(substrb(SF_XT_GETXMLSTR('BJTDJH',ad_BYCS00),1,50))); exception when others then ls_BJTDJH := 0; end; if ls_BJTDJH >0 then select nvl(sum(JFJE00),0) into ls_BJTJE0 from ZY_BRJFB0 where DJH000 = ls_BJTDJH; end if; --取前端传入的参数 end if trim(ad_YEXM00) in ('全部','母亲') then ls_YEXM00:=''; else ls_YEXM00:=ad_YEXM00; end if; --婴儿挂账留院结算, 则重新从BQ_JSXX00.YBZYH0取医保住院号 if as_CZBZ00 in ('4') and ls_YEXM00 is not null then select max(YBZYH0) into ls_YBZYH0 from BQ_JSXX00 where ZYID00=ad_ZYID00 and YEXM00=ls_YEXM00; end if; --特殊病种编号取入参值 ls_TSBZBH := as_TSBZBH; --单病种编码取入参值 ls_DBZBM0 := ad_DBZBM0; --如果传入的单病种编码为空,将取ZY_BRXXB0.DBZBM0 写入ZY_JZB000.DBZBM0 if (nvl(ls_DBZBM0,'0')='0') then --and (ls_DBZJK0='Y') ls_DBZBM0 := zy_DBZBM0; end if; --婴儿单独结算, 结算婴儿费用时, 单病种编码清空处理 if (ls_FFBZBM is not null) and (ls_YEDDJS ='Y') and (nvl(trim(ls_YEXM00),'全部') not in ('全部','母亲')) then ls_FFBZBM:=''; end if; --医保外项目单独结算时, 单病种编码清空处理 if (ls_FFBZBM is not null) and (ls_SFBWXM ='Y') then ls_FFBZBM:=''; end if; --婴儿单独结算, 结算婴儿费用时, 单病种编码(政和模式)清空处理 if (ls_DBZBM0 is not null) and (ls_YEDDJS = 'Y') and (nvl(trim(ls_YEXM00),'全部') not in ('全部','母亲')) then ls_DBZBM0 := ''; end if; --计算病种支付金额(省属单病种模式) if ls_FBBH00 = 3 then if (ls_FFBZBM is not null) then --病种收费金额 select nvl(max(BZSFJE),0) into ls_FFBZJE from BM_BZSFBZ where FBBH00 = ls_FBBH00 and YBZXLB = ls_YBZXLB and FFBZBM = ls_FFBZBM; --超标床位费,除外耗材费 select nvl(max(DBZCWF),0),nvl(max(DBZHCF),0),nvl(max(TXYLFW),0) into ls_CBCWFY,ls_CWHCFY,ls_TXYLFW from ZY_BRZHXX where ZYID00 = ad_ZYID00 and JFLBID = ad_JFLBID; ls_BZZFJE := ls_FFBZJE + ls_CBCWFY + ls_CWHCFY + ls_TXYLFW; elsif (ls_DBZJK0='Y') and (nvl(ls_DBZBM0,'0')<>'0') then --政和单病种模式 --病种自付金额 select nvl(max(YBHDJE),0),nvl(max(GRZFJE),0) into ls_YBHDJE,ls_DBZJE0 from BM_DBZDEB where YBZXLB = ls_YBZXLB and DBZBM0 = ls_DBZBM0 and rownum=1; --超标床位费,除外耗材费 select nvl(max(DBZCWF),0),nvl(max(DBZHCF),0),nvl(max(TXYLFW),0) into ls_CBCWFY,ls_CWHCFY,ls_TXYLFW from ZY_BRZHXX where ZYID00 = ad_ZYID00 and JFLBID = ad_JFLBID; ls_BZZFJE := ls_DBZJE0 + ls_CBCWFY + ls_CWHCFY + ls_TXYLFW; end if ; end if; SP_ZY_BRFY00_EDIT00(ad_ZYID00,ad_JFLBID,as_CZBZ00,as_JSZZRQ,ad_YEXM00,Pczy000,Pczyks0,'N',Pzxcgbz,Ptsxx00,Pxxxx00,ls_SFBWXM); if Pzxcgbz = 0 then Ptsxx00:='住院病人费用修改出错:'||Ptsxx00; raise Ecustom; end if; --中途结算加入之后冲销的项目一起结算 (自费病人在这里处理) if as_CZBZ00 in ('0') then if ls_FBBH00 = 1 then --目前限定自费病人 insert into ZY_JSBCMX(ZYID00,ID0000,JZDH00,MXID00,SFLB00,XMBH00) --结算补充费用明细表 select ad_ZYID00,ad_ID0000,0,MXID00,decode(SFLB00,3,3,0),XMBH00 from ZY_FYMX00 a where ZYID00 = ad_ZYID00 and JZDH00+0 = 0 and CZRQ00>as_JSZZRQ and (XMBH00,decode(SFLB00,3,3,0)) in ( select XMBH00,decode(SFLB00,3,3,0) from ZY_FYMX00 where ZYID00=ad_ZYID00 and JZDH00+0=0 and CZRQ00>as_JSZZRQ group by ZYID00,XMBH00,decode(SFLB00,3,3,0) having(sum(HJJE00)<0) ); end if; end if; select SF_ZY_GETJZDH into ad_JZDH00 from dual; --如果是选择结算的 if ad_JSXZID >0 then update ZY_FYMX00 a set JZDH00 = ad_JZDH00 where JFLBID = ad_JFLBID and ZYID00 = ad_ZYID00 and JZDH00 +0 = 0 and exists(select 1 from ZY_JSXZMX where ZYID00 = a.ZYID00 and JSXZID = ad_JSXZID and MXID00 = a.MXID00); else update ZY_FYMX00 a set JZDH00 = ad_JZDH00 where JFLBID = ad_JFLBID and ZYID00 = ad_ZYID00 and JZDH00+0=0 and (decode(nvl(a.YEXM00,'0'),'0','母亲',a.YEXM00)=ad_YEXM00 or ad_YEXM00='全部') and (ls_SFBWXM='N' or exists (select 1 from BM_YBWXMB where SFXMID = a.XMBH00 and ((SFYP00 = '1' and a.SFLB00 = '3') or (SFYP00 = '0' and a.SFLB00 <> '3')))) and (CZRQ00 <= as_JSZZRQ or (a.MXID00 in (select MXID00 from ZY_JSBCMX where ZYID00 = a.ZYID00 and ID0000 = ad_ID0000 and nvl(JZDH00,0) = 0)) or as_CZBZ00 in ('1','2','3')); end if; --如果本次结算费用合计为0,直接UPDATE后返回 select sum(HJJE00) into ls_HJJE00 from ZY_FYMX00 a where ZYID00 = ad_ZYID00 and JZDH00=ad_JZDH00; if nvl(ls_HJJE00,0)=0 then update ZY_FYMX00 a set JZDH00=1 where ZYID00 = ad_ZYID00 and JZDH00=ad_JZDH00; return; end if; --判断是否存在单个项目费用总额为负记录 jlg select count(*) into ls_COUNT0 from ( select a.XMBH00,sum(a.HJJE00) from ZY_FYMX00 a where a.ZYID00 = ad_ZYID00 and a.JZDH00+0=ad_JZDH00 group by a.XMBH00,decode(a.SFLB00,'3','3','0') having sum(a.HJJE00)<0) b ; if ls_COUNT0>0 then Ptsxx00:='病人的本次结算存在单个项目总费用为负数情况,结算终止'; Pxxxx00:=''; Pzxcgbz:='2'; --raise Ecustom; rollback; Return; end if; update ZY_JSBCMX set JZDH00 = ad_JZDH00 where ZYID00 = ad_ZYID00 and ID0000 = ad_ID0000 and nvl(JZDH00,0) = 0; update ZY_JSXZMX set JZDH00 = ad_JZDH00 where ZYID00 = ad_ZYID00 and JSXZID = ad_JSXZID and nvl(JZDH00,0) = 0; select SF_ZY_GETYJJPLBH into ls_PLBH00 from dual; select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; --1、回收预交金处理 if as_CZBZ00 <>'4' then --挂账留院结算 不进行当前预交金结账及对应票据的回收操作 --回收预交金单 update ZY_PJSYQK set HSCZY0 = Pczy000, HSCZXM = Vczyxm0,HSRQ00 = ls_CZRQ00,HSSJ00 = ls_CZSJ00 where PJH000 in (select PJH000 from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00+0=0); update ZY_BRJFB0 set JZDH00 = ad_JZDH00 where ZYID00 = ad_ZYID00 and JZDH00+0=0; --中途结算滚存支付明细也要进行回收 update ZY_JSZFMX set JZDH00 = ad_JZDH00 where ZYID00 = ad_ZYID00 and JZDH00+0=0; end if; --医保发送记录置标志 if in_YBJKID_JS not in ('0') then update ZY_YBFS00 set JZDH00=ad_JZDH00 where ZYID00=ad_ZYID00 and JZDH00=0 and CXBZ00='0' and YBJKID=in_YBJKID_JS; else update ZY_YBFS00 set JZDH00=ad_JZDH00 where ZYID00=ad_ZYID00 and JZDH00=0 and CXBZ00='0'; end if; --新增加的表要修改 select nvl(max(ID0000),0) into ls_ID0000 from ZY_YBFSMX where ZYID00=ad_ZYID00 and nvl(JZDH00,0)=0 and CXBZ00='0'; update ZY_YBFSMX set JZDH00=ad_JZDH00 where ID0000 = ls_ID0000; --冗余 update ZY_BRFY00 a set JZDH00 = ad_JZDH00 --结算单号 where ZYID00 = ad_ZYID00 and DJH000 in (select DJH000 from ZY_FYMX00 where JZDH00=ad_JZDH00 and ZYID00 = ad_ZYID00); --医保返回结果处理 增加ls_YYZFJE = YBYL05 (医院支付金额); 增加医保返回总费用的处理 ls_BCBXF0; 增加产前检查费用ls_CQJCF0 = YBYL68 select nvl(sum(HJJE00),0), nvl(sum(GRZFE0),0),nvl(sum(GRZHHJ),0),nvl(sum(TCJJHJ),0),nvl(sum(QTZFHJ),0),nvl(sum(YBYL05),0), nvl(sum(MZBZJE),0), nvl(sum(DLSBJE),0),nvl(sum(GWBZJE),0),nvl(max(YBFSDH),'0'),max(YBJZRQ||YBJZSJ),nvl(max(YBSM10),'无'), nvl(max(YBJKID),'0'),max(MXLSH0),nvl(sum(DLDBJJ),0),nvl(sum(YBYL68),0), nvl(sum(fulamt_ownpay_amt),0),nvl(sum(overlmt_selfpay),0),nvl(sum(preselfpay_amt),0), nvl(sum(inscp_scp_amt),0),nvl(sum(hifmi_pay),0),nvl(sum(hifob_pay),0),nvl(sum(acct_mulaid_pay),0), max(clr_optins),max(clr_way),max(clr_type),nvl(sum(hifdm_pay),0),nvl(sum(hosp_part_amt),0), max(med_type),max(psn_type),max(medins_setl_id),max(pool_prop_selfpay), nvl(sum(psn_part_amt),0),nvl(sum(medfee_sumamt),0) into ls_BCBXF0,ls_GRZFE0,ls_GRZHZF,ls_TCJJZF,ls_YBQTZF,ls_YYZFJE, ls_MZBZJE,ls_DLSBJE,ls_GWBZJE,ls_YBFSDH,ls_YBJZSJ,ls_JSBLLX, ls_YBJKID,ls_MXLSH0,ls_DLDBJJ,ls_CQJCF0, ls_fulamt_ownpay_amt,ls_overlmt_selfpay,ls_preselfpay_amt, ls_inscp_scp_amt,ls_hifmi_pay,ls_hifob_pay,ls_acct_mulaid_pay, ls_clr_optins,ls_clr_way,ls_clr_type,ls_hifdm_pay,ls_hosp_part_amt, ls_med_type,ls_psn_type,ls_medins_setl_id,ls_pool_prop_selfpay, ls_psn_part_amt,ls_medfee_sumamt from ZY_YBFS00 where ZYID00=ad_ZYID00 and JZDH00=ad_JZDH00 and CXBZ00='0'; if ls_FFBZBM is null and ls_DBZBM0 is null and ls_YYZFJE <> 0 then Ptsxx00 := '非单病种病人存在医院支付费用, 请确认医保结算返回费用是否正确!'; Pxxxx00 := sqlerrm; raise Ecustom; elsif ls_FBBH00 = 1 and ls_YYZFJE <> 0 then Ptsxx00 := '自费病人存在医院支付费用, 请确认住院费用信息或结算是否正确!'; Pxxxx00 := sqlerrm; raise Ecustom; end if; --C-DRG结算类型处理 if ls_JSBLLX = '无' then ls_JSBLLX := null; ls_CDRGFZ := null; else --C-DRG结算类型, 特殊病种编号、单病种编码为空, C-DRG分组取入参特殊病种编号 ls_TSBZBH := null; ls_DBZBM0 := null; ls_CDRGFZ := as_TSBZBH; end if; --处理产前检查费 if ls_GRZFE0 > ls_CQJCF0 then ls_GRZFE0 := ls_GRZFE0 - ls_CQJCF0; ls_CJBTCE := 0; else ls_CJBTCE := ls_GRZFE0 - ls_CQJCF0; ls_GRZFE0 := 0; end if; ls_YBYYZF := 0; if ls_DBZSF0='1' then if ls_YYZFJE > 0 then ls_YBYYZF := ls_YYZFJE; ls_YYZFJE := 0; end if; end if; select nvl(max(GRZHYE),0) into ls_YBZHYE from ZY_YBFS00 where ZYID00=ad_ZYID00 and JZDH00=ad_JZDH00 and CXBZ00='0' and rowid=(select max(ROWID) from ZY_YBFS00 where ZYID00=ad_ZYID00 and JZDH00=ad_JZDH00 and CXBZ00='0'); if ls_GRZHZF<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_GRZHZF,3,'医保个人账户',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; if ls_TCJJZF<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_TCJJZF,4,'医保统筹基金',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; if ls_YBQTZF<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_YBQTZF,12,'医保其他支付',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --独立的民政补助金额 if ls_MZBZJE<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_MZBZJE,22,'民政医疗救助',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --独立的商保支付金额 对应sybxzf if ls_DLSBJE<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_DLSBJE,23,'商保支付金额',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --独立的商保统筹基金支付金额 对应 dbjjzf if ls_DLDBJJ<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_DLDBJJ,11,'商保统筹基金',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --独立的公务员补助金额 if ls_GWBZJE<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_GWBZJE,16,'公务员补助',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; if (ls_FFBZBM is not null) or (ls_JSBLLX is not null) or ((ls_DBZJK0='Y') and (nvl(ls_DBZBM0,'0')<>'0')) then --付费单病种、C-DRG结算流程,政和地区模式:添加医院支付金额 jlg --if ls_FBBH00 = 1 then --自费单病种病人 -- ls_YYZFJE := ls_HJJE00 - ls_BZZFJE; --医院支付金额 = 院内结算的总金额 - 病种自付金额 ls_FFBZJE -->ls_BZZFJE --else --医保病人 if ls_FBBH00 = 3 then if ls_HJJE00 - ls_BCBXF0 <> 0 then ls_YYZFJE := ls_HJJE00 - ls_BCBXF0; --医院支付金额 = 院内结算的总金额 - 医保返回的总金额 end if; --如果ls_HJJE00 - ls_BCBXF0 =0 则ls_YYZFJE还是取原来的值(原来的是ZY_YBFS00.YBYL05) end if; if ls_YYZFJE <> 0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,DLR000,DQBQ00,CZYKS0,YYID00,JSLX00) values(ls_DJH000,ls_BRID00,ad_ZYID00,2,ls_YYZFJE,20,'医院支付',ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'0',0,ad_JZDH00, '3',-1,ls_DQBQ00,Pczyks0,ls_YYID00,'1'); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; end if; --计算病人本次结算共交了预交金的总额 ls_XJJFJE:=0; ls_ZZJFJE:=0; --累计的现金交费金额 select nvl(sum(JFJE00),0) into ls_XJJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = ad_JFLBID and ZFFS00 in (1,8,18,24,25,28) and JFBZ00<>'2'; --现金,银行卡,微信,支付宝,平台支付 --累计的转帐交费金额 select nvl(sum(JFJE00),0) into ls_ZZJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = ad_JFLBID and ZFFS00 = 2 and JFBZ00<>'2'; --转帐 --计算病人本次结算的费用总额 select nvl(sum(HJJE00),0),nvl(sum(ZFJE00),0),nvl(sum(JZJE00),0),min(Trim(CZRQ00)),max(trim(CZRQ00)), nvl(sum(decode(JMBZ00,1,GFJE00,0)),0),nvl(sum(decode(JMBZ00,1,0,GFJE00)),0),nvl(-sum(decode(TCNWBZ,'2',HJJE00,0)),0) into ls_HJJE00,ls_ZFJE00,ls_JZJE00,ls_FYQSRQ,ls_FYJZRQ,ls_JMJE00,ls_YHJE00,ls_ZKJE00 from ZY_FYMX00 where JZDH00= ad_JZDH00 and ZYID00 = ad_ZYID00; --按正单重新取费用起始日期(FYQSRQ)和费用截止日期(FYJZRQ) select min(trim(CZRQ00)),max(trim(CZRQ00)) into ls_FYQSRQ,ls_FYJZRQ from ZY_FYMX00 where JZDH00= ad_JZDH00 and ZYID00 = ad_ZYID00 and HJJE00>0; if ((ls_DBZJK0 = 'Y') or (ls_FFBZBM is not null) or (ls_JSBLLX is not null)) and (ls_YYZFJE <> 0) then ad_CYQKJE := ls_ZFJE00 - ls_XJJFJE - ls_ZZJFJE - ls_GRZHZF - ls_TCJJZF - ls_YBQTZF - ls_MZBZJE - ls_DLSBJE - ls_DLDBJJ - ls_GWBZJE - ls_YYZFJE; --计算病人的欠费的金额,出院欠款金额 else ad_CYQKJE := ls_ZFJE00 - ls_XJJFJE - ls_ZZJFJE - ls_GRZHZF - ls_TCJJZF - ls_YBQTZF - ls_MZBZJE - ls_DLSBJE - ls_DLDBJJ - ls_GWBZJE; --计算病人的欠费的金额,出院欠款金额 end if; if as_CZBZ00='2' then if (ad_CYQKJE<0) then ls_CYYTK0:=-1*ad_CYQKJE; ad_CYQKJE:=0; end if; elsif as_CZBZ00='4' then --挂账留院结算的处理:出院欠款金额设为0 ad_CYQKJE:=0; ls_CYYTK0:=0; elsif ad_CYQKJE>0 and as_CZBZ00<>'2' and as_CZBZ00<>'4' then if as_CZBZ00 ='0' and ls_ZJZDBS ='1' then --中途结算余额不足时自动补收对应预交金随后再冲销 ad_CYQKJE:=0; --把这个值置为0 else Ptsxx00:='账户余额不够,请先补交'||to_char(ad_CYQKJE)||'元,再进行本操作!'; Pxxxx00:=sqlerrm; Pzxcgbz:='3'; rollback; return; end if; else ad_CYQKJE:=0; end if; --医保支付金额, 需扣除产前检查费, 医保统筹包含此费用, 合计金额有可能超过病人总费用 if ((ls_DBZJK0 = 'Y') or (ls_FFBZBM is not null) or (ls_JSBLLX is not null)) and (ls_FBBH00 = 3) and (ls_YYZFJE <> 0) then --计算医保支付金额 ls_YBZFJE := ls_GRZHZF + ls_TCJJZF + ls_YBQTZF + ls_MZBZJE + ls_DLSBJE + ls_DLDBJJ + ls_GWBZJE + ls_YYZFJE + ls_CJBTCE; else ls_YBZFJE := ls_GRZHZF + ls_TCJJZF + ls_YBQTZF + ls_MZBZJE + ls_DLSBJE + ls_DLDBJJ + ls_GWBZJE + ls_CJBTCE; end if; --判断院内金额与医保支付金额大小关系时需扣除医保返回的产前检查费 if ls_ZFJE00- (ls_YBZFJE - ls_CQJCF0)<0 then Ptsxx00:='结算异常,医保支付的费用('||to_char(ls_YBZFJE-ls_CQJCF0)||')大于患者费用('||to_char(ls_ZFJE00)||'),请核实!'; Pxxxx00:=sqlerrm; Pzxcgbz:='4'; rollback; return; end if; --计算现金余额,转账余额 if as_CZBZ00 ='4' then --挂账留院结算,现金及转账余额设为0 ad_XJYE00 := 0; ad_ZZYE00 := 0; --elsif (ls_FFBZBM is not null) and (ls_FBBH00 = 1) then --自费的付费单病种病人 -- if ls_ZZJFJE > ls_BZZFJE then --如果转账金额足够(大于病种自付金额),先扣转账金额的 -- ad_XJYE00 := ls_XJJFJE; -- ad_ZZYE00 := ls_ZZJFJE - ls_BZZFJE; -- else -- ad_XJYE00 := ls_XJJFJE + ls_ZZJFJE - ls_BZZFJE; -- ad_ZZYE00 := 0; -- end if; elsif ((ls_FFBZBM is not null) or (ls_JSBLLX is not null) or ((ls_DBZJK0='Y') and (nvl(ls_DBZBM0,'0')<>'0'))) and (ls_FBBH00 = 3) then --医保的付费单病种病人 if ls_ZZJFJE > ls_GRZFE0 then --如果转账金额足够(大于医保返回的个人自付金额),先扣转账金额的 ad_XJYE00 := ls_XJJFJE; ad_ZZYE00 := ls_ZZJFJE - ls_GRZFE0; else ad_XJYE00 := ls_XJJFJE + ls_ZZJFJE - ls_GRZFE0; ad_ZZYE00 := 0; end if; else --非单病种模式 if (ls_ZZJFJE > ls_ZFJE00 - ls_YBZFJE) and (ls_ZZJFJE>0) then --(如果有足够转账余额的,先扣除转账的) ad_XJYE00 := ls_XJJFJE; ad_ZZYE00 := ls_ZZJFJE + ls_YBZFJE - ls_ZFJE00; else ad_XJYE00 := ls_XJJFJE + ls_ZZJFJE + ls_YBZFJE - ls_ZFJE00; --现金余额 = 现金交费金额+转帐交费金额+医保支付合计-合计自付金额 ad_ZZYE00 := 0; end if; end if; --省人民:出院结算退"转账"预交金使用"现金"方式退出 if ad_ZZYE00>0 and ls_ZZXJTC='Y' and as_CZBZ00='1' then ad_XJYE00 := ad_XJYE00+ad_ZZYE00; ad_ZZYE00 := 0; end if; --现金余额加上产前检查金额与自付金额间差额 ad_XJYE00 := ad_XJYE00 + abs(ls_CJBTCE); --取上一次结算的预交金总额 ZYSF9-20180625-001 select nvl(max(JZDH00),0) into ls_LSJZDH from ZY_JZB000 where ZYID00 = ad_ZYID00; if ls_LSJZDH >0 then --上一次是冲销的结算 select count(*) into ls_COUNT0 from ZY_JZB000 where ZYID00 = ad_ZYID00 and JZDH00 = ls_LSJZDH and CXJZDH >0; if ls_COUNT0>0 then --取上次结算的:现金预交总额,转账预交总额 select nvl(JSYSXJ,0),nvl(JSYSZZ,0) into ls_XJYJZE,ls_ZZYJZE from ZY_BRZHXX where ZYID00 = ad_ZYID00 and JFLBID = '2'; end if; end if; if ls_XJYJZE = 0 then ls_XJYJZE := ls_XJJFJE; end if; if ls_ZZYJZE = 0 then ls_ZZYJZE := ls_ZZJFJE; end if; select decode(as_CZBZ00,'2','2','4','2','0') into ls_JZZT00 from dual; --医保病人 if ls_FBBH00=3 then --计算结算自付金额 ls_JSZFJE := ls_ZFJE00 - (ls_GRZHZF + ls_TCJJZF + ls_YBQTZF + ls_MZBZJE + ls_DLSBJE + ls_DLDBJJ + ls_GWBZJE + ls_CJBTCE); if ((ls_DBZJK0 = 'Y') or (ls_FFBZBM is not null) or (ls_JSBLLX is not null)) then --单病种模式 if (ls_YYZFJE>=0) then --如果有医院支付金额(报销金额大于医保支付金额合计),则个人自付金额可减掉该部分金额 jlg! ls_JSZFJE := ls_JSZFJE - ls_YYZFJE; else --医院支付金额为负(报销金额小于医保支付金额合计),则结算自付金额直接用医保返回的个人自付金额 jlg! ls_JSZFJE := ls_GRZFE0; end if; end if; select count(*) into ls_COUNT0 from ZY_YBFS00 where ZYID00=ad_ZYID00 and JZDH00=ad_JZDH00 and CXBZ00='0'; --无医保发送记录,则为医保病人按自费结算(不发送医保) if ls_COUNT0 = 0 then --如果是省属单病种病人,则不允许 if (ls_FFBZBM is not null) or ((ls_DBZJK0='Y') and (nvl(ls_DBZBM0,'0')<>'0')) then Ptsxx00:='该单病种医保病人未找到医保返回的收费记录,结算终止。(系统不允许单病种医保病人按不发送医保的来处理)'; Pxxxx00:=Ptsxx00; Pzxcgbz:='0'; rollback; return; end if; insert into ZY_JZB000(JZDH00,YBDJH0,BRID00,ZYID00,YEXM00,JSLX00,FBBH00,YBZXLB, YBLB00,YBBRLB,HJJE00,BRZJE0,ZFJE00,JZJE00,GFJE00,JMJE00,ZKJE00, GRZHZF,TCJJZF,YBQTZF,SBGRZH,SBTCJJ,CYYSK0,CYYTK0,YSZJE0, ZZZJE0,XJYE00,ZZYE00,XJFKJE,ZZFKJE,PJH000,JZZT00,FPHSBZ, JZRQ00,JZSJ00,JZY000,CZYKS0,JZBQH0,JMYY00,YBZYH0,BCKBCS,FYQSRQ,FYJZRQ, JZFS00,JKJKBZ,CFXMS0,YBXJZF,YPWQZF,XMWQZF,YPBFZF,XMBFZF,YBQFJE, YBZHYE,YLZFJE,CFDXJE,GWYBZ0,JJZFE0,FYBJE0,SYBXZF, SBZFE0,BJZFE0,XZQH00,TYDWMC,CSLX00,FFBZBM,DBZBM0,DDLSH0,XJYJZE,ZZYJZE,CJBTCE, JSQSRQ,JSJZRQ,PTBCTS,RBZFY0,BKE284,BJTDJH,BJTJE0, fulamt_ownpay_amt,overlmt_selfpay,preselfpay_amt, inscp_scp_amt,hifmi_pay,hifob_pay,acct_mulaid_pay, clr_optins,clr_way,clr_type,YBTYPE,hifdm_pay,hosp_part_amt, psn_part_amt,med_type,psn_type,medins_setl_id,pool_prop_selfpay, medfee_sumamt ) select ad_JZDH00,'0',ls_BRID00,ad_ZYID00,ad_YEXM00,as_CZBZ00,FBBH00,YBZXLB, YBLB00,'0',ls_HJJE00,ls_HJJE00,ls_ZFJE00,ls_JZJE00,ls_JMJE00,ls_YHJE00,ls_ZKJE00, 0,0,0,0,0,ad_CYQKJE,ls_CYYTK0,ls_XJJFJE, ls_ZZJFJE,ad_XJYE00,ad_ZZYE00,0,0,ls_PJH000,ls_JZZT00,'0', ls_CZRQ00,ls_CZSJ00,Pczy000,Pczyks0,ls_DQBQ00,as_JMYY00,'0',0,ls_FYQSRQ,ls_FYJZRQ, ls_CSLX00,'0',0,0,0,0,0,0,0, 0,0,0,0,0,0,0, 0,0,ls_XZQH00,ls_TYDWMC,Pcslx00,ls_FFBZBM,ls_DBZBM0,ls_DDLSH0,ls_XJYJZE,ls_ZZYJZE,0, ls_JSQSRQ,ls_JSJZRQ,ls_PTBCTS,ls_RBZFY0,ls_BKE284,ls_BJTDJH,ls_BJTJE0, ls_fulamt_ownpay_amt,ls_overlmt_selfpay,ls_preselfpay_amt, ls_inscp_scp_amt,ls_hifmi_pay,ls_hifob_pay,ls_acct_mulaid_pay, ls_clr_optins,ls_clr_way,ls_clr_type,in_YBTYPE,ls_hifdm_pay,ls_hosp_part_amt, ls_psn_part_amt,ls_med_type,ls_psn_type,ls_medins_setl_id,ls_pool_prop_selfpay, ls_medfee_sumamt from IC_YBBRLB where FBBH00=1 and rownum=1; else insert into ZY_JZB000( JZDH00,YBDJH0,BRID00,ZYID00,YEXM00,JSLX00,FBBH00,YBZXLB, YBLB00,YBBRLB,HJJE00,BRZJE0,ZFJE00,JZJE00,GFJE00,JMJE00,ZKJE00, GRZHZF,TCJJZF,YBQTZF,SBGRZH,SBTCJJ,CYYSK0,CYYTK0,YSZJE0, ZZZJE0,XJYE00,ZZYE00,XJFKJE,ZZFKJE,PJH000,JZZT00,FPHSBZ, JZRQ00,JZSJ00,JZY000,CZYKS0,JZBQH0,JMYY00,YBZYH0,BCKBCS, TSBZBH,DBZBM0,JZFS00,JKJKBZ,CFXMS0,YBJZRQ,YBJZSJ,YBRYRQ, YBCYRQ,YBCYSJ,YBXJZF,YPWQZF,XMWQZF,YPBFZF,XMBFZF,YBQFJE, YBZHYE,FYQSRQ,FYJZRQ,GSDJH0,YLZFJE,CFDXJE,GWYBZ0,JJZFE0, FYBJE0,SYBXZF,SBZFE0,BJZFE0,MZBZJE,DLSBJE,GWBZJE,DLDBJJ,XJYJZE,ZZYJZE, DDLSH0,XZQH00,TYDWMC,CSLX00,FFBZBM,YBJKID,MXLSH0, YBYL01,YBYL02,YBYL03,YBYL04,YBYL05,YBYL06,YBYL07,YBYL08,YBYL09,YBYL10, YBYL11,YBYL12,YBYL13,YBYL14,YBYL15,YBYL16,YBYL17,YBYL18,YBYL19,YBYL20, YBYL21,YBYL22,YBYL23,YBYL24,YBYL25,YBYL26,YBYL27,YBYL28,YBYL29,YBYL30, YBYL31,YBYL32,YBYL33,YBYL34,YBYL35,YBYL36,YBYL37,YBYL38,YBYL39,YBYL40, YBYL41,YBYL42,YBYL43,YBYL44,YBYL45,YBYL46,YBYL47,YBYL48,YBYL49,YBYL50, YBYL51,YBYL52,YBYL53,YBYL54,YBYL55,YBYL56,YBYL57,YBYL58,YBYL59,YBYL60, YBYL61,YBYL62,YBYL63,YBYL64,YBYL65,YBYL66,YBYL67,YBYL68,YBYL69, YBSM01,YBSM02,YBSM03,YBSM04,YBSM05,YBSM06,YBSM07,YBSM08,YBSM09,YBSM10, YBSM11,YBSM12,YBSM13,YBSM14,YBSM15,YBSM16,YBSM17,YBSM18,YBSM19,YBSM20, YBSM21,YBSM22,YBSM23,YBSM24,YBSM25,YBSM26,YBSM27,YBSM28,YBSM29, CJBTCE,JSQSRQ,JSJZRQ,PTBCTS,RBZFY0,BKE284,BJTDJH,BJTJE0, fulamt_ownpay_amt,overlmt_selfpay,preselfpay_amt, inscp_scp_amt,hifmi_pay,hifob_pay,acct_mulaid_pay, clr_optins,clr_way,clr_type,YBTYPE,hifdm_pay,hosp_part_amt, psn_part_amt,med_type,psn_type,medins_setl_id,pool_prop_selfpay, medfee_sumamt,AAE140 ) select ad_JZDH00,ls_YBFSDH,ls_BRID00,ad_ZYID00,ad_YEXM00,as_CZBZ00,ls_FBBH00,ls_YBZXLB, ls_YBLB00,ls_YBBRLB,ls_HJJE00,ls_HJJE00,ls_JSZFJE,ls_JZJE00,ls_JMJE00,ls_YHJE00,ls_ZKJE00, sum(GRZHZF),sum(TCJJZF),sum(QTZFHJ),sum(SBGRZH),sum(SBTCJJ),ad_CYQKJE,ls_CYYTK0,ls_XJJFJE, ls_ZZJFJE,ad_XJYE00,ad_ZZYE00,0,0,ls_PJH000,ls_JZZT00,'0', ls_CZRQ00,ls_CZSJ00,Pczy000,Pczyks0,ls_DQBQ00,as_JMYY00,ls_YBZYH0,0, ls_TSBZBH,ls_DBZBM0,ls_CSLX00,'0',0,substrb(ls_YBJZSJ,1,8),substrb(ls_YBJZSJ,9,8),null, '20991231',null,sum(GRZFE0+DBGRZF),sum(YPWQZF),sum(XMWQZF),sum(YPBFZF),sum(XMBFZF),null, ls_YBZHYE,ls_FYQSRQ,ls_FYJZRQ,ls_GSDJH0,sum(YLZFJE),sum(CFDXJE),sum(GWYBZ0),sum(BJJJZF), sum(FYBFY0),sum(SYBXZF),sum(SBZFE0),sum(BJZFE0),sum(MZBZJE),sum(DLSBJE),sum(GWBZJE),sum(DLDBJJ),ls_XJYJZE,ls_ZZYJZE, ls_DDLSH0,ls_XZQH00,ls_TYDWMC,Pcslx00,ls_FFBZBM,ls_YBJKID,ls_MXLSH0, sum(YBYL01),sum(YBYL02),sum(YBYL03),sum(YBYL04),decode(sign(ls_YBYYZF),1,0,sum(YBYL05)),sum(YBYL06),sum(YBYL07),sum(YBYL08),sum(YBYL09),sum(YBYL10), sum(YBYL11),sum(YBYL12),sum(YBYL13),sum(YBYL14),sum(YBYL15),sum(YBYL16),sum(YBYL17),sum(YBYL18),sum(YBYL19),sum(YBYL20), sum(YBYL21),sum(YBYL22),sum(YBYL23),sum(YBYL24),sum(YBYL25),sum(YBYL26),sum(YBYL27),sum(YBYL28),sum(YBYL29),sum(YBYL30), sum(YBYL31),sum(YBYL32),sum(YBYL33),sum(YBYL34),sum(YBYL35),sum(YBYL36),sum(YBYL37),sum(YBYL38),sum(YBYL39),sum(YBYL40), sum(YBYL41),sum(YBYL42),sum(YBYL43),sum(YBYL44),sum(YBYL45),sum(YBYL46),sum(YBYL47),sum(YBYL48),sum(YBYL49),sum(YBYL50), --decode(sign(ls_YBYYZF),1,sum(YBYL05),0), sum(YBYL51),sum(YBYL52),sum(YBYL53),sum(YBYL54),sum(YBYL55),sum(YBYL56),sum(YBYL57),sum(YBYL58),sum(YBYL59),sum(YBYL60), sum(YBYL61),sum(YBYL62),sum(YBYL63),sum(YBYL64),sum(YBYL65),sum(YBYL66),sum(YBYL67),sum(YBYL68),sum(YBYL69), max(YBSM01),max(YBSM02),max(YBSM03),max(YBSM04),max(YBSM05),max(YBSM06),max(YBSM07),max(YBSM08),nvl(max(YBSM09),ls_CDRGFZ),max(YBSM10), max(YBSM11),max(YBSM12),max(YBSM13),max(YBSM14),max(YBSM15),max(YBSM16),max(YBSM17),max(YBSM18),max(YBSM19),max(YBSM20), max(YBSM21),max(YBSM22),max(YBSM23),max(YBSM24),max(YBSM25),max(YBSM26),max(YBSM27),max(YBSM28),max(YBSM29), ls_CJBTCE,ls_JSQSRQ,ls_JSJZRQ,ls_PTBCTS,ls_RBZFY0,ls_BKE284,ls_BJTDJH,ls_BJTJE0, ls_fulamt_ownpay_amt,ls_overlmt_selfpay,ls_preselfpay_amt, ls_inscp_scp_amt,ls_hifmi_pay,ls_hifob_pay,ls_acct_mulaid_pay, ls_clr_optins,ls_clr_way,ls_clr_type,in_YBTYPE,ls_hifdm_pay,ls_hosp_part_amt, ls_psn_part_amt,ls_med_type,ls_psn_type,ls_medins_setl_id,ls_pool_prop_selfpay, ls_medfee_sumamt,ls_AAE140 from ZY_YBFS00 where ZYID00=ad_ZYID00 and JZDH00=ad_JZDH00 and CXBZ00='0'; --更新自付金额与产前检查费用的差额 --update ZY_JZB000 set CJBTCE=ls_CJBTCE where ZYID00=ad_ZYID00 and JZDH00=ad_JZDH00; end if; else --非医保病人 --if (ls_FFBZBM is not null) and (ls_FBBH00 = 1) then -- ls_JSZFJE := ls_BZZFJE; --自费病人单病种自付金额 = 病种收费金额 + 超标床位费 + 除外项目费 --else ls_JSZFJE := ls_ZFJE00; --end if; insert into ZY_JZB000(JZDH00,YBDJH0,BRID00,ZYID00,YEXM00,JSLX00,FBBH00,YBZXLB, YBLB00,YBBRLB,HJJE00,BRZJE0,ZFJE00,JZJE00,GFJE00,JMJE00,ZKJE00, GRZHZF,TCJJZF,YBQTZF,SBGRZH,SBTCJJ,CYYSK0,CYYTK0,YSZJE0, ZZZJE0,XJYE00,ZZYE00,XJFKJE,ZZFKJE,PJH000,JZZT00,FPHSBZ, JZRQ00,JZSJ00,JZY000,CZYKS0,JZBQH0,JMYY00,YBZYH0,BCKBCS,FYQSRQ,FYJZRQ, JZFS00,JKJKBZ,CFXMS0,YBXJZF,YPWQZF,XMWQZF,YPBFZF,XMBFZF, YBQFJE,YBZHYE,YLZFJE,CFDXJE,GWYBZ0,JJZFE0,FYBJE0,SYBXZF, SBZFE0,BJZFE0,XZQH00,TYDWMC,CSLX00,FFBZBM,DBZBM0,DDLSH0,XJYJZE, ZZYJZE,CJBTCE,JSQSRQ,JSJZRQ,PTBCTS,RBZFY0,BJTDJH,BJTJE0, fulamt_ownpay_amt,overlmt_selfpay,preselfpay_amt, inscp_scp_amt,hifmi_pay,hifob_pay,acct_mulaid_pay, clr_optins,clr_way,clr_type,YBTYPE,hifdm_pay,hosp_part_amt, psn_part_amt,med_type,psn_type,medins_setl_id,pool_prop_selfpay, medfee_sumamt ) select ad_JZDH00,'0',ls_BRID00,ad_ZYID00,ad_YEXM00,as_CZBZ00,ls_FBBH00,ls_YBZXLB, ls_YBLB00,ls_YBBRLB,ls_HJJE00,ls_HJJE00,ls_JSZFJE,ls_JZJE00,ls_JMJE00,ls_YHJE00,ls_ZKJE00, 0,0,0,0,0,ad_CYQKJE,ls_CYYTK0,ls_XJJFJE, ls_ZZJFJE,ad_XJYE00,ad_ZZYE00,0,0,ls_PJH000,ls_JZZT00,'0', ls_CZRQ00,ls_CZSJ00,Pczy000,Pczyks0,ls_DQBQ00,as_JMYY00,'0',0,ls_FYQSRQ,ls_FYJZRQ, ls_CSLX00,'0',0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,ls_XZQH00,ls_TYDWMC,Pcslx00,ls_FFBZBM,ls_DBZBM0,ls_DDLSH0,ls_XJYJZE, ls_ZZYJZE,0,ls_JSQSRQ,ls_JSJZRQ,ls_PTBCTS,ls_RBZFY0,ls_BJTDJH,ls_BJTJE0, ls_fulamt_ownpay_amt,ls_overlmt_selfpay,ls_preselfpay_amt, ls_inscp_scp_amt,ls_hifmi_pay,ls_hifob_pay,ls_acct_mulaid_pay, ls_clr_optins,ls_clr_way,ls_clr_type,in_YBTYPE,ls_hifdm_pay,ls_hosp_part_amt, ls_psn_part_amt,ls_med_type,ls_psn_type,ls_medins_setl_id,ls_pool_prop_selfpay, ls_medfee_sumamt from dual; end if; --如果是付费单病种的,则YBYL04记录该病种的标准收费金额,YBYL33记录超标床位费用,YBYL34记录除外耗材费用,YBYL35记录医保返回的总金额,YBYL69记录特需医疗服务费用 jlg --重新计算医院支付金额(ZY_JZB000.YBYL05) jlg if (ls_FFBZBM is not null) then update ZY_JZB000 set YBYL04 = ls_FFBZJE, YBYL05 = ls_YYZFJE, YBYL33 = ls_CBCWFY, YBYL34 = ls_CWHCFY, YBYL35 = ls_BCBXF0, YBYL69 = ls_TXYLFW where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; elsif (ls_JSBLLX is not null) then --C-DRG结算流程,重新计算一些值 update ZY_JZB000 set YBYL05 = ls_YYZFJE, YBYL35 = ls_BCBXF0, YBYL43 = SF_ZY_DBZCBFY(ad_ZYID00,ls_BRID00,null,ls_ID0000,3), YBYL44 = SF_ZY_DBZCBFY(ad_ZYID00,ls_BRID00,null,ls_ID0000,0), YBYL45 = SF_ZY_DBZCBFY(ad_ZYID00,ls_BRID00,null,ls_ID0000,2), CBYPF0 = SF_ZY_DBZCBFY(ad_ZYID00,ls_BRID00,null,ls_ID0000,5) where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; elsif (ls_DBZJK0='Y') and (nvl(ls_DBZBM0,'0')<>'0') then --政和单病种模式 update ZY_JZB000 set YBYL04 = ls_YBHDJE, YBYL05 = ls_YYZFJE, YBYL33 = ls_CBCWFY, YBYL34 = ls_CWHCFY, YBYL35 = ls_BCBXF0, YBYL69 = ls_TXYLFW where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; elsif ls_FBBH00 = 3 then update ZY_JZB000 set YBYL34 = SF_ZY_DBZCBFY(ad_ZYID00,ls_BRID00,null,ls_ID0000,1) where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; end if; if ls_BKC001_MC is not null then update ZY_JZB000 set BKC001_MC = ls_BKC001_MC where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; end if; if ls_AAE140 is not null then update ZY_JZB000 set AAE140 = ls_AAE140 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; end if; if ls_AAE140_MC is not null then update ZY_JZB000 set AAE140_MC = ls_AAE140_MC where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; end if; --取bkc620(本地)成员共济账户支付、bkc619(异地)成员共济账户支付 ls_BKC619 := 0; ls_BKC620 := 0; ls_BKE921 := ''; ls_BKE922 := ''; if nvl(ls_YBJKID,'0') not in ('0') then ls_BKC619 := nvl(SF_ZY_GETYBJKMX(ls_YBJKID,'bkc619','1'),0); ls_BKC620 := nvl(SF_ZY_GETYBJKMX(ls_YBJKID,'bkc620','1'),0); ls_BKE921 := SF_ZY_GETYBJKMX(ls_YBJKID,'bke921','1'); ls_BKE922 := SF_ZY_GETYBJKMX(ls_YBJKID,'bke922','1'); end if; update ZY_JZB000 set BKC619=ls_BKC619,BKC620=ls_BKC620,BKE921=ls_BKE921,BKE922=ls_BKE922 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00; --2、填写病人结账明细表信息 --先判断一下要结算的项目是否有对应的发票项目 select count(*),min(SFXMID) into ls_COUNT0,ls_SFXMID from ZY_FYMX00 A,BM_YYSFXM C where A.XMBH00 = C.SFXMID and C.ZYFPID not in (select FPXMID from BM_FPXM00 ) and A.JZDH00=ad_JZDH00 and A.ZYID00= ad_ZYID00; -- and A.BRID00 = ls_BRID00; if ls_COUNT0 > 0 then --若有存在没有发票项目对应的项目,则提示信息! Ptsxx00:='病人结算操作失败,发票项目不完整,请记录本信息并与系统管理员联系!'; Pxxxx00:='BM_YYSFXM.SFXMID='||to_char(ls_SFXMID)||'的ZYFPID的值NOT IN BM_FPXM00.FPXMID!'; raise Ecustom; end if; ls_FZPJH0:=ls_PJH000; --开始的票据号取同组的组号 if (LS_SFCFFP='Y') and (ls_FBBH00 not in (1,3)) then--公费病人拆分 insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM, ZFJE00,QZFJE0,ZKJE00) select ad_JZDH00,b.FPXMID,b.XMMC00,nvl(sum(a.HJJE00),0),0,null,null,a.ZFBL00,b.SFYLXM, nvl(sum(a.ZFJE00),0),nvl(sum(a.QZFJE0),0),nvl(-sum(decode(TCNWBZ,'2',a.HJJE00,0)),0) from ZY_FYMX00 A,BM_FPXM00 B,BM_YYSFXM C where A.XMBH00 = C.SFXMID and C.ZYFPID = B.FPXMID and A.JZDH00 = ad_JZDH00 and A.ZYID00 = ad_ZYID00 group by B.FPXMID,B.XMMC00,A.ZFBL00,B.SFYLXM; --自费金额冲销后,按公费金额记账,那么虽然自付比例为1,但总金额为0 ,所以不应插入表ZY_JZMX00 delete from ZY_JZMX00 where JZDH00=ad_JZDH00 and XMJE00=0 and ZFJE00=0 and QZFJE0=0 ; delete from ZY_PJSYMX where PJH000 = ls_PJH000; --旧票据明细删除 update ZY_PJSYQK set XJJE00 = 0,ZZJE00 = 0,YHKJE0 = 0 where FZPJH0 = ls_PJH000; --原值去掉 open CUR_ZY_JZMX00_ZFBL00; loop --产生部分自费的发票 ? fetch CUR_ZY_JZMX00_ZFBL00 into ls_JZMX00; exit when CUR_ZY_JZMX00_ZFBL00%notfound; insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) values(ls_PJH000,ls_JZMX00.XMBH00,ls_JZMX00.XMMC00,ls_JZMX00.XMJE00,0,ls_JZMX00.ZFBL00,ls_JZMX00.QZFJE0,LS_JZMX00.SFYLXM); update ZY_PJSYQK set XJJE00 = nvl(XJJE00,0)+ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00, ZZJE00 = nvl(ZZJE00,0)+ls_JZMX00.XMJE00*(1-ls_JZMX00.ZFBL00), HJJE00 = nvl(XJJE00,0)+ls_JZMX00.XMJE00, ZFJE00 = nvl(XJJE00,0)+ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00, JZJE00 = nvl(ZZJE00,0)+ls_JZMX00.XMJE00*(1-ls_JZMX00.ZFBL00) where PJH000 = ls_PJH000; if sql%notfound then --if ls_DYZSFP ='Y' then --该情况已合并到下面函数处理 -- ls_FPPJXH:= '0'; --else ls_FPPJXH:= SF_ZY_GETPJXH(Pczy000,3,Pczyks0); --正常发票的票据号 --end if; insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0, DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,FZPJH0,YEXM00, HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00,ZKJE00,GRZHZF,TCJJZF, CJBTCE,YYID00) select ls_PJH000,PLBH00,PLMC00,ls_FPPJXH,ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ls_JZMX00.XMJE00*(1-ls_JZMX00.ZFBL00),Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_FZPJH0,ls_YEXM00, ls_JZMX00.XMJE00,ls_JZMX00.XMJE00*ls_JZMX00.ZFBL00,ls_JZMX00.XMJE00*(1-ls_JZMX00.ZFBL00),0,0,0,0,0, 0,ls_YYID00 from BM_PJLXB0 where PLBH00 = 3;--PLBH00=3是住院发票 SP_ZY_PJSYQK_INSERT(ls_PJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; end loop; close CUR_ZY_JZMX00_ZFBL00; else --普通或医保病人 insert into ZY_JZMX00(JZDH00,XMBH00,XMMC00,XMJE00,JMJE00,JMSHR0,JMYY00,ZFBL00,SFYLXM, ZFJE00,QZFJE0,ZKJE00) select ad_JZDH00,B.FPXMID,B.XMMC00,nvl(sum(A.HJJE00),0),0,null,null,1,B.SFYLXM, nvl(sum(a.ZFJE00),0),nvl(sum(a.QZFJE0),0),nvl(-sum(decode(TCNWBZ,'2',a.HJJE00,0)),0) from ZY_FYMX00 A,BM_FPXM00 B where A.ZYFPID = B.FPXMID and A.JZDH00 = ad_JZDH00 and A.ZYID00 = ad_ZYID00 group by B.FPXMID,B.XMMC00,B.SFYLXM; --合计结算金额 select nvl(sum(XMJE00),0) into ls_HSHJJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y'; --拆分自费金额 if instrb(','||trim(ls_CFFPFB)||',',','||to_char(ls_FBBH00)||',')>0 and (ls_FBBH00 not in (1,3)) then select nvl(sum(ZFJE00),0) into ls_CFZFJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y'; end if; --结算发票金额 ls_JSFPJE:= ls_HSHJJE-ls_CFZFJE; --正常医疗发票 if ls_JSFPJE<>0 then insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH000,XMBH00,XMMC00,XMJE00-decode(ls_CFZFJE,0,0,ZFJE00),0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y' and (ls_CFZFJE=0 or ls_CFZFJE<>0 and XMJE00-ZFJE00<>0); --if ls_DYZSFP ='Y' then --该情况已合并到下面函数处理 -- ls_FPPJXH:= '0'; --else ls_FPPJXH:= SF_ZY_GETPJXH(Pczy000,3,Pczyks0); --正常发票的票据号 --end if; ls_FPZFJE := ls_JSZFJE - ls_CFZFJE; insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0, DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,YEXM00, HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00,ZKJE00,GRZHZF, TCJJZF,YBQTZF,MZBZJE,DLSBJE,GWBZJE,DLDBJJ,CJBTCE, ZYID00,YYID00) select ls_PJH000,PLBH00,PLMC00,ls_FPPJXH,ls_JSFPJE,0,Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_YEXM00, ls_JSFPJE,ls_FPZFJE,ls_JZJE00,ls_JMJE00,ls_YHJE00,ls_ZKJE00,ls_GRZHZF, ls_TCJJZF,ls_YBQTZF,ls_MZBZJE,ls_DLSBJE,ls_GWBZJE,ls_DLDBJJ,ls_CJBTCE, ad_ZYID00,ls_YYID00 from BM_PJLXB0 where PLBH00 = 3;--PLBH00=3是住院发票 if sql%notfound then Ptsxx00:='系统字典不完整,所需的票据类型不存在,操作失败!'; Pxxxx00:=sqlerrm||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 3)'; raise Ecustom; end if; SP_ZY_PJSYQK_INSERT(ls_PJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --拆分的记账发票(省人民:市保健病人发票打印拆分为自费和记账2张) if ls_CFZFJE<>0 then if ls_JSFPJE=0 then ls_PJH001 := ls_PJH000; else select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH001 from dual; end if; insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH001,XMBH00,XMMC00,ZFJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='Y' and ZFJE00<>0; --3、填写病人票据信息表的内容 --if ls_DYZSFP ='Y' then --该情况已合并到下面函数处理 -- ls_FPPJXH:= '0'; --else ls_FPPJXH:= SF_ZY_GETPJXH(Pczy000,3,Pczyks0); --正常发票的票据号 --end if; insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0, DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,YEXM00, HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00,ZKJE00,GRZHZF,TCJJZF,YBQTZF, ZYID00,YYID00,FZPJH0) select ls_PJH001,PLBH00,PLMC00,ls_FPPJXH,ls_CFZFJE,0,Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_YEXM00, ls_CFZFJE,ls_CFZFJE,0,0,0,0,0,0,0, ad_ZYID00,ls_YYID00,ls_PJH000 from BM_PJLXB0 where PLBH00 = 3;--PLBH00=3是住院发票 if sql%notfound then Ptsxx00:='系统字典不完整,所需的票据类型不存在,操作失败!'; Pxxxx00:=sqlerrm||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 3)'; raise Ecustom; end if; SP_ZY_PJSYQK_INSERT(ls_PJH001, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); if ls_PJH001 <> ls_PJH000 then update ZY_PJSYQK set SFBCF0='1' where PJH000 = ls_PJH000; update ZY_PJSYQK set SFBCF0='2' where PJH000 = ls_PJH001; end if; end if; end if; --伙食费发票、非医疗项目费用 select nvl(sum(XMJE00),0) into ls_HSFPJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='N'; if ls_HSFPJE<>0 then select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH001 from dual; select nvl(sum(ZFJE00),0) into ls_HSFPJE from ZY_JZMX00 where JZDH00=ad_JZDH00 and SFYLXM='N'; insert into ZY_PJSYMX(PJH000,XMBH00,XMMC00,XMJE00,XMBZ00,ZFBL00,QZFJE0,SFYLXM) select ls_PJH001,XMBH00,XMMC00,XMJE00,0,ZFBL00,QZFJE0,SFYLXM from ZY_JZMX00 where JZDH00=ad_jzdh00 and SFYLXM='N'; insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00, XM0000,XB0000,FZPJH0,YEXM00,HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00,ZKJE00,ZYID00,YYID00) select ls_PJH001,PLBH00,PLMC00,SF_ZY_GETPJXH(Pczy000,10,Pczyks0),ls_HSFPJE,0,Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,ls_FZPJH0,ls_YEXM00,ls_HSFPJE,0,0,0,0,0,ad_ZYID00,ls_YYID00 from BM_PJLXB0 where PLBH00 = 10;--PLBH00=10是住院伙食发票 SP_ZY_PJSYQK_INSERT(ls_PJH001, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --6.若病人账户上有剩余金额,还应该将该剩余金额退还给病人(由于医保病人还有医保帐户退回的,可以在医保接口完成后再Update..where DJH000=ad_XJDJH0) if (ls_SSWUTSCL = 'Y') and (ls_ZY_FFJJ='Y') and (as_CZBZ00 ='1') then --非呆账出院结算,可能需要进行四舍五入 '0':中途结算,'1':出院结算2:呆账结算3:年度结算 ls_SSWR00:=ad_XJYE00-round(ad_XJYE00+0.04,1); ad_XJYE00:=round(ad_XJYE00+0.04,1); if abs(ls_SSWR00) > 0.1 then Ptsxx00:='系统结算四舍五入金额发生错误,该部分的金额不能为大于1的值!'; Pxxxx00:='退还金额:'||to_char(ad_XJYE00)||',四舍五入后金额:'||to_char(round(ad_XJYE00,1)); raise Ecustom; end if; end if; if ls_SSWR00<>0 then select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; --病人现金的退款单据号 insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH, PJH000,JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0, JZDH00,PLBH00,ZYID00,DLR000,DQBQ00,CZYKS0,YYID00) values(ls_DJH000,ls_BRID00,'2',-ls_SSWR00,5,'四舍五入金额','','', ls_PJH000,ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'1',0, ad_JZDH00,'3',ad_ZYID00,-1,ls_DQBQ00,Pczyks0,ls_YYID00); SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; if as_CZBZ00 ='2' then --呆账病人出院结算 select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,JSLX00,DLR000,DQBQ00,CZYKS0,YYID00) select ls_DJH000,ls_BRID00,ad_ZYID00,2,decode(ad_CYQKJE,0,-1*ls_CYYTK0,ad_CYQKJE),9,ZFFSMC,ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,decode(sign(decode(ad_CYQKJE,0,-1*ls_CYYTK0,ad_CYQKJE)),1,0,-1,1,0),0,ad_JZDH00, '3','1',-1,ls_DQBQ00,Pczyks0,ls_YYID00 from BM_BRZFFS where ZFFSBH=9; SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); elsif as_CZBZ00 ='4' then --挂账留院结算(婴儿) select SQ_ZY_BRJFB0_DJH000.nextval into ls_DJH000 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,JSLX00,DLR000,DQBQ00,CZYKS0,YYID00) --select ls_DJH000,ls_BRID00,ad_ZYID00,0,ls_HJJE00,9,ZFFSMC,ls_PJH000, --JFLBID=0,JFJE00=HJJE00:这里的挂账交费金额直接等于挂账结算金额,按现金支付 select ls_DJH000,ls_BRID00,ad_ZYID00,0,ls_JSZFJE,9,ZFFSMC,ls_PJH000, --JFLBID=0,JFJE00=ls_JSZFJE:2021.01.25这里的挂账交费金额调整为结算自付金额,按现金支付 by ZYSF9-20210125-002 ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,0,0,ad_JZDH00, --JFBZ00=0:交费标志为交预交金 '3','2',-1,ls_DQBQ00,Pczyks0,ls_YYID00 --JSLX00=2:结算类型为'滚存' from BM_BRZFFS where ZFFSBH=9; --ZFFS00=9:挂账支付方式 SP_ZY_BRJFB0_INSERT(ls_DJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --病人有剩余现金金额,则直接进行退款;如果现金余额为负数,则需要补交现金金额 if (ad_XJYE00 <> 0) and (as_CZBZ00 <>'2') and (as_CZBZ00 <>'4') then select SQ_ZY_BRJFB0_DJH000.nextval into ad_XJDJH0 from dual; select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; if (ls_SSWUTSCL = 'Y') and (LS_SF_ZY_FFJJ='Y') and (as_CZBZ00 ='1') then --对于四舍五入且逢分进角,则金额特殊处理 ad_XJYE00:=round(ad_XJYE00+0.04,1); end if; --交费标识 剩余金额为正数,则退款('1'),剩余金额为负数,则补交款('0') select nvl(decode(sign(ad_XJYE00),1,'1','0'),'0') into ls_JFBZ00 from dual; insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,JSLX00,DLR000,YYID00) select ad_XJDJH0,ls_BRID00,ad_ZYID00,ad_JFLBID,-ad_XJYE00,ZFFSBH,ZFFSMC,ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,ls_JFBZ00,0,ad_JZDH00, ls_PLBH00,'1',-1,ls_YYID00 from BM_BRZFFS where ZFFSBH=1; SP_ZY_BRJFB0_INSERT(ad_XJDJH0, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); ad_XJTKPJ:=ls_PJH000; --jlg 现金退款票据号 if (as_CZBZ00 = '1') and (ad_XJYE00 > 0) and ((ls_TKPJLB = '1') or (ls_TKPJLB = '2')) then --出院结算的才处理,中途结算的不处理; 现金退款的才处理 ,现金补收的不处理 as_XJTKXH:='0'; else as_XJTKXH:= SF_ZY_GETPJXH(Pczy000,ls_PLBH00,Pczyks0); end if; insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00, XM0000,XB0000,HSCZY0,HSCZXM,HSRQ00,HSSJ00,YEXM00,HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00,ZYID00,YYID00) select ls_PJH000,PLBH00,PLMC00,as_XJTKXH,-ad_XJYE00,0,0,Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,Pczy000,Vczyxm0,ls_CZRQ00,ls_CZSJ00,ls_YEXM00,-ad_XJYE00,0,0,0,0,ad_ZYID00,ls_YYID00 from BM_PJLXB0 where PLBH00 = ls_PLBH00 ; --退预交金时使用收款票据 SP_ZY_PJSYQK_INSERT(ls_PJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --若病人有剩余转账金额,则直接进行退款;如果转账余额为负数,则需要补交转账金额 if (ad_ZZYE00 <> 0) and (as_CZBZ00 <>'2') and (as_CZBZ00 <>'4') then select SQ_ZY_BRJFB0_DJH000.nextval into ad_ZZDJH0 from dual; --病人转账的退款单据号 select SQ_ZY_PJSYQK_PJH000.nextval into ls_PJH000 from dual; --交费标识 剩余金额为正数,则退款('1'),剩余金额为负数,则补交款('0') select nvl(decode(sign(ad_ZZYE00),1,'1','0'),'0') into ls_JFBZ00 from dual; select ZPH000,ZPKHYH,ZPDWMC into ls_ZPH000,ls_ZPKHYH,ls_ZPDWMC from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = ad_JFLBID and ZFFS00 = 2 and djh000=(select max(djh000) from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = ad_JZDH00 and JFLBID = ad_JFLBID and ZFFS00 = 2); insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,PLBH00,JSLX00,DLR000,YYID00) values(ad_ZZDJH0,ls_BRID00,ad_ZYID00,ad_JFLBID,-ad_ZZYE00,2,'转账',ls_ZPH000,ls_ZPKHYH,ls_ZPDWMC,ls_PJH000, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,ls_JFBZ00,0,ad_JZDH00,ls_PLBH00,'1',-1,ls_YYID00); SP_ZY_BRJFB0_INSERT(ad_ZZDJH0, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); ad_ZZTKPJ := ls_PJH000; as_ZZTKXH := SF_ZY_GETPJXH(Pczy000,ls_PLBH00,Pczyks0); insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00, XM0000,XB0000,HSCZY0,HSCZXM,HSRQ00,HSSJ00,YEXM00,HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00,ZYID00,YYID00) select ls_PJH000,PLBH00,PLMC00,as_ZZTKXH,0,-ad_ZZYE00,0,Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,Pczy000,Vczyxm0,ls_CZRQ00,ls_CZSJ00,ls_YEXM00,-ad_ZZYE00,0,0,0,0,ad_ZYID00,ls_YYID00 from BM_PJLXB0 where PLBH00 = ls_PLBH00 ; --退预交金时使用收款票据 if sql%notfound then Ptsxx00:='系统字典不完整,所需的票据类型不存在,操作失败!'; Pxxxx00:=sqlerrm||'票据类型不存在: Not exists(select * from bm_pjlxb0 where PLBH00 = 8)'; raise Ecustom; end if; SP_ZY_PJSYQK_INSERT(ls_PJH000, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --中途结算余额不足时自动补收对应预交金随后再冲销 ad_XJCXJE:= ad_XJYE00 + ad_ZZYE00; if ad_XJCXJE<0 and as_CZBZ00 ='0' and ls_ZJZDBS ='1' then if (ls_SSWUTSCL = 'Y') and (LS_SF_ZY_FFJJ='Y') then --对于四舍五入且逢分进角,则金额特殊处理 ad_XJCXJE:=round(ad_XJCXJE+0.04,1); end if; --冲销上面补收的那笔预交金(按未结算处理) select SQ_ZY_BRJFB0_DJH000.nextval into ad_XJCXDJ from dual; select SQ_ZY_PJSYQK_PJH000.nextval into ad_XJCXPJ from dual; as_XJCXXH:= SF_ZY_GETPJXH(Pczy000,ls_PLBH00,Pczyks0); insert into ZY_BRJFB0(DJH000,BRID00,ZYID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00, PLBH00,JSLX00,DLR000,YYID00,CXDJH0) select ad_XJCXDJ,ls_BRID00,ad_ZYID00,ad_JFLBID,ad_XJCXJE,ZFFSBH,ZFFSMC,ad_XJCXPJ, ls_CZRQ00,ls_CZSJ00,Pczy000,Vczyxm0,0,'1',0,0, ls_PLBH00,'1',-1,ls_YYID00,ad_XJDJH0 from BM_BRZFFS where ZFFSBH=1; SP_ZY_BRJFB0_INSERT(ad_XJCXDJ, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0, DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,HSCZY0,HSCZXM, HSRQ00,HSSJ00,YEXM00,HJJE00,ZFJE00,JZJE00,JMJE00,YHJE00,ZYID00,YYID00) select ad_XJCXPJ,PLBH00,PLMC00,as_XJCXXH,ad_XJCXJE,0,0,Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,'Y','0',ls_XM0000,ls_XB0000,Pczy000,Vczyxm0, ls_CZRQ00,ls_CZSJ00,ls_YEXM00,ad_XJCXJE,0,0,0,0,ad_ZYID00,ls_YYID00 from BM_PJLXB0 where PLBH00 = ls_PLBH00 ; --退预交金时使用收款票据 SP_ZY_PJSYQK_INSERT(ad_XJCXPJ, Pczy000, Pczyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00); end if; --处理账户余额表 update ZY_BRZHXX set XJYE00=0,ZZYE00=0,ZYE000=0,YKZYE0=0,YBYZF0=0,YBYJS0=0,YBTCJE=0,YBZFJE=0,BZWFY0=0 where ZYID00 = ad_ZYID00 and JFLBID = '2'; update ZY_BRZHXX set WJSJE0 = (select nvl(sum(ZFJE00),0) from ZY_FYMX00 where ZYID00=ad_ZYID00 and JZDH00+0=0), YJSJE0 = (select nvl(sum(ZFJE00),0) from ZY_FYMX00 where ZYID00=ad_ZYID00 and JZDH00+0>0), WJXJJE = (select nvl(sum(JFJE00),0) from ZY_BRJFB0 where ZYID00=ad_ZYID00 and JFLBID ='2' and JZDH00+0=0 and ZFFS00 in (1,8,18,24,25,28) and JFBZ00<>'2'), --未结算现金预交金总额 WJZZJE = (select nvl(sum(JFJE00),0) from ZY_BRJFB0 where ZYID00=ad_ZYID00 and JFLBID ='2' and JZDH00+0=0 and ZFFS00 = 2 and JFBZ00<>'2') --未结算转账预交金总额 --JSYSXJ = ls_XJJFJE, --最后一次结算前预收现金金总额(不含结算后补收或退出的) -- 这里不进行计算了 jlg --JSYSZZ = ls_ZZJFJE --最后一次结算前预收转账金总额(不含结算后补收或退出的) --YJXJJE = (select nvl(sum(JFJE00),0) from ZY_BRJFB0 where ZYID00=ad_ZYID00 and JFLBID ='2' and JZDH00+0>0 and ZFFS00 in (1,8,18,24,25,28) and JFBZ00<>'2' and JSLX00<>'3'), --已结算现金预交金总额 --YJZZJE = (select nvl(sum(JFJE00),0) from ZY_BRJFB0 where ZYID00=ad_ZYID00 and JFLBID ='2' and JZDH00+0>0 and ZFFS00 = 2 and JFBZ00<>'2' and JSLX00<>'3') --已结算转账预交金总额 where ZYID00 = ad_ZYID00 and JFLBID = '2'; if as_CZBZ00 in ('0','4') then --累计未回收的现金交费金额 select nvl(sum(JFJE00),0) into ls_XJJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = 0 and JFLBID = '2' and ZFFS00 in (1,8,18,24,25,28) --现金,银行卡,微信,支付宝,平台支付 and JFBZ00<>'2'; --累计未回收的转帐交费金额 select nvl(sum(JFJE00),0) into ls_ZZJFJE from ZY_BRJFB0 where ZYID00 = ad_ZYID00 and JZDH00 = 0 and JFLBID = '2' and ZFFS00 = 2 --转帐 and JFBZ00<>'2'; select nvl(sum(ZFJE00),0) into ls_ZFJE00 from ZY_FYMX00 where ZYID00=ad_ZYID00 and JZDH00+0=0; if ls_ZZJFJE>ls_ZFJE00 then update ZY_BRZHXX set ZZYE00=ls_ZZJFJE-ls_ZFJE00, XJYE00=ls_XJJFJE, ZYE000=ls_XJJFJE+ls_ZZJFJE-ls_ZFJE00, YKZYE0=ls_XJJFJE+ls_ZZJFJE-ls_ZFJE00 where ZYID00=ad_ZYID00 and JFLBID = '2'; else update ZY_BRZHXX set ZZYE00=0, XJYE00=ls_XJJFJE+ls_ZZJFJE-ls_ZFJE00, ZYE000=ls_XJJFJE+ls_ZZJFJE-ls_ZFJE00, YKZYE0=ls_XJJFJE+ls_ZZJFJE-ls_ZFJE00 where ZYID00=ad_ZYID00 and JFLBID = '2'; end if; end if; --结算后,结算核对状态改为'未核对' update ZY_BRXXB0 set JSHDZT = '0',HDRQ00 = null,HDSJ00 = null,HDR000 = null,CYZT00 = ad_CYZT00 where ZYID00 = ad_ZYID00; --ZY_JZMXXM表记录的生成 SP_ZY_JZMXXM_SJZL00(ad_JZDH00); --新医保接口的ZY_YBFPMX,ZY_YBBZMX表记录的写入 if nvl(ls_YBJKID,'0') <>'0' then update ZY_YBJKRZ set JZDH00 = ad_JZDH00 where ZYID00 = ad_ZYID00 and YBJKID = ls_YBJKID; SP_ZY_NEWYBJK_JKFHJX( ad_ZYID00, --输入:住院ID ad_JZDH00, --输入:结账单号 ls_YBJKID, --输入:医保接口ID '1,2', --输入:解析类型(同时解析传1,2) 1:fplist 2:mzlist 'N', --输入:是否提交事务 Y:提交 N:不提交 ls_ZXZT00, --输出:执行状态 0:失败 1:成功 ls_ERRMSG --输出:错误信息 ); if ls_ZXZT00=0 then Ptsxx00:=ls_ERRMSG; Pxxxx00:=ls_ERRMSG; end if; end if; --新农合跨省结算 if ls_DDLSH0 is not null then ls_TCXJJE := ad_XJYE00; ls_TCZZJE := ad_ZZYE00; SP_ZY_XNHKSJS_JSQR00( 4 , --输入:接口类型编号 0:转诊单下载 1:住院病人信息上传 11:取消住院登记 3:住院费用上传 13:费用明细冲销 2:费用预结算 4:费用结算确认 14:取消结算确认 ad_ZYID00, --输入:住院ID ls_DDLSH0, --输入:订单流水号 ad_JZDH00, --输入:结账单号 '1', --输入:操作类型 0:前台调用 1:过程嵌套调用 'N', --输入:是否提交事务 Y:提交 N:不提交 ad_XJDJH0, --输入:现金退款单据号 ls_TCXJJE, --输入:现金余额 ad_ZZDJH0, --输入:转账退款单据号 ls_TCZZJE, --输入:转账余额 ls_ZXZT00, --输出:执行状态 0:失败 1:成功 ad_XJYE00, --输出:现金余额 ad_ZZYE00, --输出:转账余额 Pxxxx00 , --输出:系统错误信息 Ptsxx00 , --输出:用户提示信息 ad_XJTKPJ, --病人现金退款票据号 ad_ZZTKPJ --病人现金退款票据号 ); end if; Pzxcgbz:=1; if Pcommit='Y' then commit; end if; exception when no_data_found then raise_application_error(-20001,substrb('数据没有找到!*'||sqlerrm,1,120)); when Ecustom then raise_application_error(-20010,substrb(Ptsxx00||'!*',1,120)); when others then raise_application_error(-20266,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,120)); end; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%