create or replace procedure sd_hospital.SP_SF_FYMX00_INSERT ( Pmxid00 in out number , --门诊病人费用明细流水号SQ_SF_FYMX00_MXID00 Pdjh000 in number , --单据号 Pmzh000 in varchar2 , --门诊号,本处指挂号号 Pbrid00 in number , --病人ID Pcxpjr0 in number , --冲销批准人 Pcxyy00 in varchar2 , --冲销原因 Psfykbz in char , --是否预扣标志 0要预扣,不允许为负1不预扣,不允许为负2要预扣,允许为负3不预扣,允许为负 Pxmbh00 in number , --医疗收费编码或药品编码 Psflb00 in char , --收费类别'0'主项'1'加收'2'材料'3'药品 Pxmdj00 in number , --单价 Pxmsl00 in number , --数量 Phjje00 in number , --合计金额 Pqzfje0 in number , --全自付金额 Pzfje00 in number , --自费金额 Pgfje00 in number , --公费金额,减免时用 Pjzje00 in number , --记帐金额 Pzhje00 in number , --折后金额 Pjmje00 in number , --减免金额 Pjmshr0 in number , --减免审核人 Pjmyy00 in varchar2 , --减免审核原因 Pjmbz00 in char , --减免标志 Pzzzhzf in number , --转账账户支付金额 Pczrq00 in char , --开单日期 Pczsj00 in char , --开单时间 Pzxrq00 in char , --执行日期 Pzxsj00 in char , --执行日期 Pcxbz00 in char , --冲销标志 Pkdks00 in number , --开单科室 Pysks00 in number , --医生所属科室 Pkdys00 in number , --开单医生工号 Pkdbq00 in number , --开单病区编号 Pzxks00 in number , --执行科室编号 Pzxys00 in number , --执行医生工号 Pbeizhu in varchar2 , --备注 Pzfbl00 in number , --自付比例 Pgjbm00 in varchar2 , --国家编码 Psfydj0 in char , --收费员登记 1是 0否 Psflscf in char , --是否零散处方 '0':非处方,'1':是零散处方,'2':病区处方,作废 Pyjdjh0 in varchar2 , --医技单ID/处方单ID Pyjjzid in number , --医技/处方计价明细ID Pshjg00 in varchar2 , --审核结果 Pph0000 in varchar2 , --库存物资批号 Pomxid0 in number , --冲销时的原费用明细记录ID Pczy000 in number , --操作员 Pczyks0 in number , --操作员科室 Pcommit in varchar2 default 'N' , --是否提交 Pzxcgbz out number , --执行成功标志 1成功 0失败 Ptsxx00 out varchar2 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 out varchar2 , --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 Pjflbid in number default 1 , --缴费类别id 1预交金 0现金 Pxdcfid in number default 0 , --协定处方ID BM_XDCFWH.MXID00 Ptcid00 in number default null , --套餐ID SF_BRTCXM.TCID00 Ptcnwbz in number default 0 , --套餐标识 0非套餐项目 1套餐内项目 2套餐外项目折扣项目 3套餐预收项目 4被套餐外折扣项目 5套餐内冲抵项目 Ptsbzbh in varchar2 default null --特殊病种编号 ) -- MODIFICATION HISTORY -- Person Date Comments ---lintj 2012.07.27 create -- qks 2012.09.07 Pyjdjh0 number --> varchar2 -- zhanghr 2012.11.10 操作时间直接去服务器时间,不能用传入值 -- qks 2013.06.24 增加入参PXDCFID,协定处方ID -- zhangwz 2013.07.18 增加对SF_FYMX00.GHKS00 and SF_FYMX00.GHY000 数据的处理 -- qks 2015.01.05 增加民生通账户支付处理 -- xuzw 2015.12.31 增加判断,如果Psfykbz in (2,3)则可以允许欠费 -- qks 2016.04.27 异常增加回滚功能 by MZSF9-20160504-001 -- jlg 2016.08.04 增加在病人账户余额在零与非零之间变动时,记录一卡通平台中间表信息 PT_HIS_YJJBG0 MZSF9-20160727-001 -- jlg 2016.09.08 增加处理余额变更含停用金额的问题 MZSF9-20160907-001 -- jlg 2016.09.28 执行套餐预收费项目时增加写入SF_FYMX00.TCID00的值 MZSF9-20160914-002 -- jlg 2016.09.30 执行套餐项目收费增加传入Ptcnwbz参数 MZSF9-20160930-001 -- qks 2017.06.27 当参数SF_MZJKYXQFJE值不等于0时,自费病人SF_BRZHXX.YXQFJE值可用; for MZSF9-20170601-002 -- qks 2017.09.23 新增参数SF_ZZJESFZY控制:转账金额是否仅限于药品使用; for MZSF9-20170921-001 -- qks 2017.12.01 修改病人账户金额写法,防止病人门诊扣费缴费出现并发情况时,病人门诊账户表产生异常; for MZSF9-20171201-001 -- jlg 2018.04.16 从BM_YYSFXM.HBXMMC写入SF_FYMX00.HBXMMC MZSF9-20180415-005 -- qks 2018.05.19 根据参数SF_JKZDQF设置的欠费金额只允许使用在挂号费、诊察费。MZSF9-20180512-004 -- liwm 2018.06.07 门诊收费存储过程统一添加调用参数日志 for MZSF9-20180604-003 -- qks 2018.08.24 写入SF_FYMX00.ZFFSBZ字段值。for YF9-20180724-001 -- qks 2018.09.17 1、修正写入SF_FYMX00.YBLB00由原来的ybzxlb改为YBLB00;2、当Pcxbz00=*以及Pomxid0>0时,SF_FYMX00.YBLB00,FBBH00取被冲单的YBLB00,FBBH00; for MZSF9-20180917-001 -- qks 2018.10.24 解决Pmzh000='0'并且Pzfje00=0,过程执行速度慢问题; for MZSF9-20181024-001 -- jlg 2019.06.24 增加入参Ptsbzbh写入SF_FYMX00.TSBZBH的值 MZSF9-20190610-002 -- qks 2019.06.27 退费没有写入原单对应的SF_FYMX00.TSBZBH的值; for MZSF9-20190627-004 -- linzetao 2019.12.16 增加医技项目自费判定 for MZSF9-20191105-003 -- linzetao 2019.12.30 处理换卡登记找不到数据问题 for MZSF9-20191230-003 -- qks 2020.01.08 取原单的自费发送标志:冲销记录对应的SF_FYMX00.ZFFSBZ改为取原单字段值。 for YJ9-20200103-001 -- qks 2020.04.02 条件修改:取原单的自费发送标志:冲销记录对应的SF_FYMX00.ZFFSBZ改为取原单字段值。for MZSF9-20200402-001 -- jlg 2020.08.20 SF_BRDB00增加SSLB00=3的处理 MZSF9-20200820-001 -- qks 2020.08.28 判断药品或项目是否多退费,并限制不允许多退费; for MZSF9-20200828-002 -- linzetao 2021.04.25 当Pomxid0>0时,SF_FYMX00.ZXYS00取被冲单的ZXYS00 MZSF9-20210419-002 -- chenHeyi 2021.09.23 医保贯标改造:扣费或退费确认,需要把收费项目以及药品对应的国家医保编码和国家医保名称 保存到费用明细表中。 MZSF9-20210923-001 -- qks 2022.04.21 优化存储过程调用参数日志:改为只保存部分关键参数; for MZSF9-20220421-001 -- chenHeyi 2022.11.30 项目规格截取50个字节保存 YJ9-20221111-001 -- chenHeyi 2022.12.09 费用明细记录的门诊号MZH000为T打头的,不进行退费超额校验 MZSF9-20221207-001 -- jiangjh 2024.04.30 YJ_YWJJ00.ZFFSBZ处理 MZSF13-20240430-004 -- linzetao 2024.05.15 处理YJ_YW0000和YF_MZCF00的自费处方标志(ZFCFBZ)带入SF_FYMX00.ZFCFBZ as Vmzfpid BM_YYSFXM.MZFPID%type; Vhsxmid BM_YYSFXM.HSXMID%type; Vkjxmid BM_YYSFXM.KJXMID%type; Vxmmc00 BM_YYSFXM.XMMC00%type; Vxmgg00 BM_YYSFXM.GG0000%type; --项目规格 Vxmdw00 BM_YYSFXM.DW0000%type; --单位 Vgjbm00 BM_YYSFXM.GJBM00%type; --国家编码 Vsflb00 BM_YYSFXM.JSXM00%type; --收费类别 Vmzzhid BM_BRXXB0.MZZHID%type; Vfbbh00 BM_BRXXB0.FBBH00%type; Vybbrlb BM_BRXXB0.YBBRLB%type; Vbrxm00 BM_BRXXB0.BRXM00%type; Vsfyx00 BM_BRXXB0.SFYX00%type; Vybzxlb IC_YBBRLB.YBZXLB%type; Vzzye00 SF_BRZHXX.ZZYE00%type; --病人账户转账余额 Vxjye00 SF_BRZHXX.XJYE00%type; --病人账户现金余额 Vyxqfje SF_BRZHXX.YXQFJE%type; --病人账户上设置的允许欠费金额 Vtyje00 SF_BRZHXX.TYJE00%type; --病人账户上停用金额 Vybqfje SF_BRZHXX.YXQFJE%type; --医保病人新费用允许欠费的金额 Vsfdj00 SF_BRZHXX.SFDJ00%type; --病人账户状态 Vybzhye SF_BRZHXX.YBZHYE%type; --医保账户余额 Vdbje00 SF_BRDB00.DBJE00%type; --病人担保金额 Vxkdbje SF_BRDB00.DBJE00%type; --病人担保金额 Vzfje00 SF_FYMX00.ZFJE00%type; Vjzje00 SF_FYMX00.JZJE00%type; Vzzzhzf SF_FYMX00.ZZZHZF%type; --转账账户支付金额 Vbrye00 SF_FYMX00.BRYE00%type; Vzzzje0 SF_BRJFB0.JFJE00%type; --病人总共转帐金额 added by jlg Vmstzye SF_YKTKFB.YKTYE0%type; --民生通总余额(扣费后) Vmstjy0 SF_YKTKFB.JYJE00%type; --民生通交易金额 Vmstxf0 SF_YKTKFB.MSTXF0%type; --民生通消费金额 Vmstzf0 SF_YKTKFB.MSTXF0%type; --民生通支付金额(本次) Vcxdjh0 SF_DJZFFS.DJH000%type; Vcxbz00 SF_DJZFFS.CXBZ00%type; Vdjlx00 SF_DJZFFS.DJLX00%type; Vyktlsh SF_YKTKFB.YKTLSH%type; --发送给民生通的院内流水号 Vjfdjh0 SF_YKTKFB.DJH000%type; --院内缴费表单据号 Vqyykt0 XT_XTCS00.VALUE0%type; --是否启用一卡通平台 Vickh00 IC_YHXX00.ICKH00%type; --病人的IC卡号 Vyebz00 PT_HIS_YJJBG0.YEBZ00%type; --余额标识 Vzye000 SF_BRZHXX.ZYE000%type; --病人账户总余额 Voldzye SF_BRZHXX.ZYE000%type; --病人旧的账户总余额 Vzzsfzy XT_XTCS00.VALUE0%type; --转账金额是否仅限于药品使用 Vtssxmc BM_BRXXB0.TSSXMC%type; Vzzye01 SF_BRZHXX.ZZYE00%type; VHBXMMC BM_YYSFXM.HBXMMC%type; VJKZDQF XT_XTCS00.VALUE0%type; --建卡时自动允许欠费方式和金额 Vdbje01 number; Vczyxm0 varchar2(20); Vsysdate date; --日期变量 Vcounter number(14,4); --计数器变量 Ecustom exception; Vzhyncs varchar2(5); --病人账户余额是否由院内费用产生 Y:是 N:否,由第三方的接口产生 默认为Y Vzfyxqf number(1); --自费病人是否使用允许欠费金额SF_BRZHXX.YXQFJE: 1允许,0不允许 Vxxxlog varchar2(2000); Vzffsbz SF_FYMX00.ZFFSBZ%type; --自费发送标志:N否,Y是 Vyblb00 IC_YBBRLB.YBLB00%type; Vtsbzbh SF_FYMX00.TSBZBH%type; Voldzje SF_FYMX00.HJJE00%type; --被冲销单据金额 Vcxzje0 SF_FYMX00.HJJE00%type; --已冲销单据合计金额 Vzxys00 SF_FYMX00.ZXYS00%type; --执行医生 VGJBZBM SF_FYMX00.GJBZBM%type; --国家医保编码 VGJBZMC SF_FYMX00.GJBZMC%type; --国家医保名称 VMZH000 SF_FYMX00.MZH000%type; --门诊号 Vzfcfbz SF_FYMX00.ZFCFBZ%type; --自费处方标志 begin Pzxcgbz := 0; Vsysdate := sysdate; Vzffsbz := 'N'; Vzfcfbz := '0'; --自费处方标志, 默认为正常处方 --Vxxxlog := substr('PMXID00:'||nvl(to_char(PMXID00), 'null')||','||'PDJH000:'||nvl(to_char(PDJH000), 'null')||','||'PMZH000:'||nvl(to_char(PMZH000), 'null')||','||'PBRID00:'||nvl(to_char(PBRID00), 'null')||','||'PCXPJR0:'||nvl(to_char(PCXPJR0), 'null')||','||'PCXYY00:'||nvl(to_char(PCXYY00), 'null')||','||'PSFYKBZ:'||nvl(to_char(PSFYKBZ), 'null')||','||'PXMBH00:'||nvl(to_char(PXMBH00), 'null')||','||'PSFLB00:'||nvl(to_char(PSFLB00), 'null')||','||'PXMDJ00:'||nvl(to_char(PXMDJ00), 'null')||','||'PXMSL00:'||nvl(to_char(PXMSL00), 'null')||','||'PHJJE00:'||nvl(to_char(PHJJE00), 'null')||','||'PQZFJE0:'||nvl(to_char(PQZFJE0), 'null')||','||'PZFJE00:'||nvl(to_char(PZFJE00), 'null')||','||'PGFJE00:'||nvl(to_char(PGFJE00), 'null')||','||'PJZJE00:'||nvl(to_char(PJZJE00), 'null')||','||'PZHJE00:'||nvl(to_char(PZHJE00), 'null')||','||'PJMJE00:'||nvl(to_char(PJMJE00), 'null')||','||'PJMSHR0:'||nvl(to_char(PJMSHR0), 'null')||','||'PJMYY00:'||nvl(to_char(PJMYY00), 'null')||','||'PJMBZ00:'||nvl(to_char(PJMBZ00), 'null')||','||'PZZZHZF:'||nvl(to_char(PZZZHZF), 'null')||','||'PCZRQ00:'||nvl(to_char(PCZRQ00), 'null')||','||'PCZSJ00:'||nvl(to_char(PCZSJ00), 'null')||','||'PZXRQ00:'||nvl(to_char(PZXRQ00), 'null')||','||'PZXSJ00:'||nvl(to_char(PZXSJ00), 'null')||','||'PCXBZ00:'||nvl(to_char(PCXBZ00), 'null')||','||'PKDKS00:'||nvl(to_char(PKDKS00), 'null')||','||'PYSKS00:'||nvl(to_char(PYSKS00), 'null')||','||'PKDYS00:'||nvl(to_char(PKDYS00), 'null')||','||'PKDBQ00:'||nvl(to_char(PKDBQ00), 'null')||','||'PZXKS00:'||nvl(to_char(PZXKS00), 'null')||','||'PZXYS00:'||nvl(to_char(PZXYS00), 'null')||','||'PBEIZHU:'||nvl(to_char(PBEIZHU), 'null')||','||'PZFBL00:'||nvl(to_char(PZFBL00), 'null')||','||'PGJBM00:'||nvl(to_char(PGJBM00), 'null')||','||'PSFYDJ0:'||nvl(to_char(PSFYDJ0), 'null')||','||'PSFLSCF:'||nvl(to_char(PSFLSCF), 'null')||','||'PYJDJH0:'||nvl(to_char(PYJDJH0), 'null')||','||'PYJJZID:'||nvl(to_char(PYJJZID), 'null')||','||'PSHJG00:'||nvl(to_char(PSHJG00), 'null')||','||'PPH0000:'||nvl(to_char(PPH0000), 'null')||','||'POMXID0:'||nvl(to_char(POMXID0), 'null')||','||'PCZY000:'||nvl(to_char(PCZY000), 'null')||','||'PCZYKS0:'||nvl(to_char(PCZYKS0), 'null')||','||'PCOMMIT:'||nvl(to_char(PCOMMIT), 'null')||','||'PJFLBID:'||nvl(to_char(PJFLBID), 'null')||','||'PXDCFID:'||nvl(to_char(PXDCFID), 'null')||','||'PTCID00:'||nvl(to_char(PTCID00), 'null')||','||'PTCNWBZ:'||nvl(to_char(PTCNWBZ), 'null'), 1, 2000); Vxxxlog := substrb('PDJH000:'||nvl(to_char(PDJH000), 'null')||','||'PMZH000:'||nvl(to_char(PMZH000), 'null')||','||'PBRID00:'||nvl(to_char(PBRID00), 'null')||','||'PSFYKBZ:'||nvl(to_char(PSFYKBZ), 'null')||','||'PXMBH00:'||nvl(to_char(PXMBH00), 'null')||','||'PSFLB00:'||nvl(to_char(PSFLB00), 'null')||','||'PXMDJ00:'||nvl(to_char(PXMDJ00), 'null')||','||'PXMSL00:'||nvl(to_char(PXMSL00), 'null')||','||'PHJJE00:'||nvl(to_char(PHJJE00), 'null')||','||'PZFJE00:'||nvl(to_char(PZFJE00), 'null')||','||'PJZJE00:'||nvl(to_char(PJZJE00), 'null')||','||'PZZZHZF:'||nvl(to_char(PZZZHZF), 'null')||','||'PZXYS00:'||nvl(to_char(PZXYS00), 'null')||','||'PZFBL00:'||nvl(to_char(PZFBL00), 'null')||','||'PGJBM00:'||nvl(to_char(PGJBM00), 'null')||','||'PSFYDJ0:'||nvl(to_char(PSFYDJ0), 'null')||','||'POMXID0:'||nvl(to_char(POMXID0), 'null')||','||'PCOMMIT:'||nvl(to_char(PCOMMIT), 'null')||','||'PXDCFID:'||nvl(to_char(PXDCFID), 'null'), 1, 2000); SP_TransLog(Vsysdate,'SP_SF_FYMX00_INSERT',Pczy000,Pczy000,Vxxxlog); select nvl(max(trim(VALUE0)),'Y') into Vzhyncs from XT_XTCS00 where NAME00='SF_BRZHSFYYNFYCS'; --是否启用一卡通平台接口 select nvl(max(trim(value0)),'N') into Vqyykt0 from XT_XTCS00 where name00='SF_SFQYYKTPTJK'; --自费病人是否使用允许欠费金额 select count(1) into Vzfyxqf from XT_XTCS00 where name00='SF_MZJKYXQFJE' and value0<>'0'; --转账金额是否仅限于药品使用 select max(trim(VALUE0)) into Vzzsfzy from xt_xtcs00 where name00='SF_ZZJESFZY'; if Vzzsfzy is not null then Vzzsfzy := substrb(Vzzsfzy,1,instrb(Vzzsfzy,'|')-1); end if; --建卡时自动允许欠费方式和金额,格式如 3,10,用逗号格式 第一位表示方式 0不允许 1所有病人 2医保病人 3离休病人 4优待病人 5医保(新农合除外) 6新农合(医保除外) 逗号后表示金额 select nvl(max(trim(VALUE0)),'0,0') into VJKZDQF from XT_XTCS00 where NAME00='SF_JKZDQF'; if Psflb00='3' then --协定处方 if nvl(PXDCFID,0)>0 then select nvl(Pgjbm00,''), nvl(Psflb00,''), b.YPMC00, a.YPDW00, b.YPGG00, b.MZFPID, b.HSXMID, b.KJXMID,b.GJBZBM,substrb(b.GJBZMC,1,220) into Vgjbm00, Vsflb00, Vxmmc00, Vxmdw00, Vxmgg00, Vmzfpid, Vhsxmid, Vkjxmid,VGJBZBM,VGJBZMC from BM_XDCFWH a,BM_YD0000 b where a.MXID00=PXDCFID and a.MXYPNM=b.YPNM00; select nvl(max(ZFFSBZ),'N') into Vzffsbz from YF_MZCFMX a where a.CFID00=Pyjjzid; else select nvl(Pgjbm00,''), nvl(Psflb00,''), a.YPMC00, a.CFDW00, a.YPGG00, b.MZFPID, b.HSXMID, b.KJXMID,nvl(a.ZFFSBZ,'N'),b.GJBZBM,substrb(b.GJBZMC,1,220) into Vgjbm00, Vsflb00, Vxmmc00, Vxmdw00, Vxmgg00, Vmzfpid, Vhsxmid, Vkjxmid,Vzffsbz,VGJBZBM,VGJBZMC from YF_MZCFMX a,BM_YD0000 b where a.CFID00=Pyjjzid and a.YPNM00=b.YPNM00; end if; select nvl(max(ZFCFBZ),'0') into Vzfcfbz from YF_MZCF00 a where a.CFLSH0=Pyjdjh0; else --医技项目 select nvl(Pgjbm00,GJBM00), nvl(Psflb00,JSXM00), XMMC00, DW0000, GG0000, MZFPID, HSXMID, KJXMID,HBXMMC,BKEH83,substrb(GJBZMC,1,220) into Vgjbm00, Vsflb00, Vxmmc00, Vxmdw00, Vxmgg00, Vmzfpid, Vhsxmid, Vkjxmid, VHBXMMC,VGJBZBM,VGJBZMC from BM_YYSFXM where SFXMID=Pxmbh00; select nvl(decode(max(SFZF00),'1','Y','N'),'N'),nvl(max(ZFCFBZ),'0') into Vzffsbz,Vzfcfbz from YJ_YW0000 where YJDJH0=Pyjdjh0; if Vzffsbz='N' then select nvl(max(ZFFSBZ),'N') into Vzffsbz from YJ_YWJJ00 where YJDJH0=Pyjdjh0 and ID0000=Pyjjzid ; end if; end if; if (Vmzfpid is null) and (Phjje00>0) then Ptsxx00 := '项目"'||Vxmmc00||'"没有对应的门诊发票项目,不能收费'; raise Ecustom; end if; if substrb(Vgjbm00,1,1)='9' then --材料 begin select GJBM00 into Vgjbm00 from VW_BM_JSGJBM b where b.SFXMID=Pxmbh00 and rownum=1 ; exception when others then Vgjbm00 :=Vgjbm00; end; end if; select ZWXM00 into Vczyxm0 from BM_YGBM00 where YGBH00=Pczy000; select A.YBLB00,B.YBZXLB,A.YBBRLB,A.FBBH00,MZZHID,BRXM00,A.SFYX00,A.TSSXMC into Vyblb00,Vybzxlb,Vybbrlb,Vfbbh00,Vmzzhid,Vbrxm00,Vsfyx00,Vtssxmc from BM_BRXXB0 A,IC_YBBRLB B where A.BRID00=Pbrid00 AND B.YBLB00=A.YBLB00 and B.FBBH00=a.FBBH00; if Vsfyx00 = 'N' then Ptsxx00 := '该病人信息已无效BM_BRXXB0.SFYX00 = N'; raise Ecustom; end if; --执行医生先取入参, Pomxid0>0则取原单执行医生 Vzxys00 := nvl(Pzxys00,0); if nvl(Pcxbz00,'Z')='*' and nvl(Pomxid0,0)>0 then select YBLB00,BRFB00 into Vyblb00,Vfbbh00 from sf_fymx00 where MXID00=Pomxid0; end if; if nvl(Pomxid0,0) > 0 then select ZXYS00,nvl(MZH000,'') into Vzxys00,VMZH000 from sf_fymx00 where MXID00=Pomxid0; end if; --取原单的特殊病种编号,取原单的自费发送标志 Vtsbzbh := Ptsbzbh; if Phjje00<=0 and nvl(Pomxid0,0)>0 and (substrb(VMZH000,1,1)<>'T' or VMZH000='' or VMZH000 is null ) then select nvl(max(TSBZBH),Ptsbzbh),nvl(max(zffsbz),'N'),nvl(sum(HJJE00),0),nvl(max(ZFCFBZ),'0') into Vtsbzbh,Vzffsbz,Voldzje,Vzfcfbz from sf_fymx00 where MXID00=Pomxid0; --判断是否多退费问题 2020.08.28 if Voldzje>0 and nvl(Pcxbz00,'Z')<>'*' then select nvl(sum(hjje00),0) into Vcxzje0 from sf_fymx00 where MZH000=Pmzh000 and BRID00=Pbrid00 and OMXID0=Pomxid0 and cxbz00='-'; if -(Phjje00+Vcxzje0)>Voldzje then Ptsxx00 := '本次项目"'||Vxmmc00||'"退费 '||to_char(Phjje00)||'元,超额'||to_char(-(Phjje00+Vcxzje0)-Voldzje)||'元,不允许退费。[其中原单金额 '||to_char(Voldzje)||'元(MXID00='||to_char(Pomxid0)||'),已退费 '||to_char(Voldzje)||'元]'; raise Ecustom; end if; end if; end if; select nvl(XJYE00,0), nvl(ZZYE00,0), --decode(Vfbbh00,3,nvl(YXQFJE,0),0), case when Vfbbh00=3 or Vfbbh00=1 and Vzfyxqf=1 then nvl(YXQFJE,0) else 0 end, SFDJ00, nvl(TYJE00,0), abs(nvl(YBZHYE,0)), decode(Psfykbz,'1',nvl(YBYZF0,0),0), nvl(DBJE00,0) into Vxjye00, Vzzye00, Vyxqfje, Vsfdj00, Vtyje00, Vybzhye, Vybqfje, Vdbje00 from SF_BRZHXX where BRID00=Pbrid00 and JFLBID=1; select max(YKTYE0),nvl(max(JYJE00),0),nvl(max(MSTXF0),0),max(YKTLSH),max(DJH000) into Vmstzye,Vmstjy0,Vmstxf0,Vyktlsh,Vjfdjh0 from SF_YKTKFB where BRID00=Pbrid00 and MKDM00='0'; --计算担保金额 update SF_BRDB00 set SFYX00 = 'N' where BRID00=Pbrid00 and JFLBID=1 and SFYX00='Y' and nvl(DBJSRQ,to_char(sysdate,'YYYYMMDD'))||nvl(DBJSSJ,to_char(sysdate,'HH24:MI:SS'))=to_char(sysdate,'YYYYMMDDHH24:MI:SS') and SSLB00 in ('1','2','3'); if Vdbje00<>Vdbje01 then update SF_BRZHXX set DBJE00=Vdbje01 where BRID00=Pbrid00 and JFLBID=1; Vdbje00:=Vdbje01; end if; --计算医保允许欠费 if Vybzhye<>0 and Vfbbh00=3 then --医保病人的个人账户额作为允许欠费金额 select count(*) into Vcounter from XT_XTCS00 where name00='SF_YBGRZHZWYXQFJE' and VALUE0='Y'; if Vcounter=0 then Vybzhye:=0; end if; else Vybzhye:=0; end if; if Vsfdj00 <> '0' then Ptsxx00 := '患者账户被停用,请到收费处咨询'; raise Ecustom; end if; if substrb(VJKZDQF,3,3)<>'0' and Vyxqfje>0 and Vmzfpid not in (4,6) then Vyxqfje:= greatest(0,Vyxqfje-to_number(substrb(VJKZDQF,3,3))); end if; Vzfje00 := Pzfje00; Vjzje00 := Pjzje00; if Vfbbh00 in (1, 3, 90) then Vzfje00 :=Phjje00-Pgfje00; Vjzje00 :=0; end if; --注意,SF_BRZHXX.ZZYE00要加回去 if Vzzsfzy=Vtssxmc and Psflb00<>'3' and Vzfje00>=0 then Vzzye01 := Vzzye00; Vzzye00 := 0; else Vzzye01 := null; end if; if Psfykbz not in ('2','3') then if Vzfje00>0 and Vxjye00 + Vzzye00 + Vyxqfje + Vybqfje + Vybzhye - Vtyje00 + Vdbje00 < Vzfje00 then Ptsxx00 := '病人账户金额不够,请先补交预交金 '||trim(to_char(Vzfje00-(Vxjye00 + Vzzye00 + Vyxqfje + Vybqfje + Vybzhye - Vtyje00 + Vdbje00), '9999990.99'))||'元,再进行本操作!'; raise Ecustom; end if; end if; Vbrye00 := Vxjye00+nvl(Vzzye01,Vzzye00)-Vzfje00; Vzzzhzf := nvl(Pzzzhzf, 0); Vmstzf0 := 0; Vcxdjh0 := null; if Vzfje00 >= 0 then Vzzzhzf :=least(Vzfje00,Vzzye00);--转帐帐户支付金额 if Vmstjy0-Vmstxf0>0 then Vmstzf0 := greatest(0,(Vzfje00-(Vxjye00+Vzzye00-greatest(Vtyje00,0)-(Vmstjy0-Vmstxf0)))); else Vmstzye := null; end if; if Vzzye00 < Vzfje00 then --转账余额不够,先扣完转账余额后,再扣现金余额 Vxjye00 := Vxjye00-(Vzfje00 - Vzzye00); Vzzye00 := 0; else Vzzye00 := Vzzye00 - Vzfje00; end if; else --退的时候根据原先的记录先退转账部分,不能超过原来的转账金额 select nvl(sum(nvl(ZZZHZF,0)),0) into Vzzzhzf from SF_FYMX00 where MZH000=Pmzh000 and Pmzh000<>'0' AND (MXID00=Pomxid0 or OMXID0=Pomxid0); --退的时候根据原先的记录先退民生通部分,不能超过原来的民生通金额 select nvl(sum(nvl(MSTZF0-nvl(MSTYT0,0),0)),0),max(DJH000),max(YKTID0) into VMSTZF0,Vcxdjh0,Vyktlsh from SF_DJZFFS where DJH000 in (select DJH000 from SF_FYMX00 where MZH000=Pmzh000 and Pmzh000<>'0' AND MXID00=Pomxid0) and DJLX00 in ('1'); Vmstzf0:=-1*least(-1*Vzfje00,Vmstzf0); Vzzzhzf:=-1*least(-1*Vzfje00,Vzzzhzf); Vxjye00 := Vxjye00-(Vzfje00-Vzzzhzf); Vzzye00 := Vzzye00-Vzzzhzf; end if; if Pmxid00 is null then select SQ_SF_FYMX00_MXID00.nextval into Pmxid00 from dual; end if; insert into SF_FYMX00( MXID00, --门诊病人费用明细流水号SQ_SF_FYMX00_MXID00 DJH000, --单据号 MZZHID, --预交金时,扣款账户ID MZH000, --门诊号,本处指挂号号 JFLBID, --病人帐户类别, 0现金结算1预交金 BRID00, --病人ID号 XM0000, --病人姓名 BRFB00, --病人费别 YBLB00, --医保类别 BRYE00, --账户余额,指预交金的余额 CZY000, --操作员 CZYXM0, --操作员姓名 CZYKS0, --操作员科室,或也可以称为收费科室 CXPJR0, --冲销批准人 CXYY00, --冲销原因 SFYKBZ, --是否预扣标志 0要预扣,不允许为负1不预扣,不允许为负2要预扣,允许为负3不预扣,允许为负 ZZZHZF, --转账账户支付金额 XMBH00, --医疗收费编码或药品编码 SFLB00, --收费类别'0'主项'1'加收'2'材料'3'药品 XMMC00, --项目名称 XMGG00, --项目规格 XMDW00, --单位 XMDJ00, --单价 XMSL00, --数量 HJJE00, --合计金额 QZFJE0, --全自付金额 ZFJE00, --自费金额 GFJE00, --公费金额,减免时用 JZJE00, --记帐金额 ZHJE00, --折后金额 JMJE00, --减免金额 JMSHR0, --减免审核人 JMYY00, --减免审核原因 JMBZ00, --减免标志 CZRQ00, --开单日期 CZSJ00, --开单时间 ZXRQ00, --执行日期 ZXSJ00, --执行日期 CXBZ00, --冲销标志 KDKS00, --开单科室 YSKS00, --医生所属科室 KDYS00, --开单医生工号 KDBQ00, --开单病区编号 ZXKS00, --执行科室编号 ZXYS00, --执行医生工号 BEIZHU, --备注 ZFBL00, --自付比例 GJBM00, --国家编码 SFYDJ0, --收费员登记 1是 0否 SFLSCF, --是否零散处方 '0':非处方,'1':是零散处方,'2':病区处方,作废 YJDJH0, --医技单ID/处方单ID YJJZID, --医技/处方计价明细ID SHJG00, --审核结果 PH0000, --库存物资批号 OMXID0, --冲销时的原费用明细记录ID MZFPID, --门诊发票ID HSXMID, --核算项目ID KJXMID, --会计项目ID TCID00, --套餐ID TCNWBZ, --套餐标识 HBXMMC, --合并项目名称 ZFFSBZ, --自费发送标志:N否,Y是 TSBZBH, --特殊病种编号 GJBZBM, --国家医保编码 GJBZMC, --国家医保名称 ZFCFBZ --自费处方标志 ) values( Pmxid00, --门诊病人费用明细流水号SQ_SF_FYMX00_MXID00 Pdjh000, --单据号 Vmzzhid, --预交金时,扣款账户ID Pmzh000, --门诊号,本处指挂号号 Pjflbid, --病人帐户类别, 0现金结算1预交金 Pbrid00, --病人ID号 Vbrxm00, --病人姓名 Vfbbh00, --病人费别 Vyblb00, --医保类别 Vbrye00, --账户余额,指预交金的余额 Pczy000, --操作员 Vczyxm0, --操作员姓名 Pczyks0, --操作员科室,或也可以称为收费科室 Pcxpjr0, --冲销批准人 Pcxyy00, --冲销原因 nvl(Psfykbz, '0'), --是否预扣标志 0要预扣,不允许为负1不预扣,不允许为负2要预扣,允许为负3不预扣,允许为负 Vzzzhzf, --转账账户支付金额 Pxmbh00, --医疗收费编码或药品编码 nvl(Vsflb00, Psflb00), --收费类别'0'主项'1'加收'2'材料'3'药品 Vxmmc00, --项目名称 substrb(Vxmgg00,1,50), --项目规格 Vxmdw00, --单位 Pxmdj00, --单价 Pxmsl00, --数量 Phjje00, --合计金额 nvl(Pqzfje0, 0), --全自付金额 Vzfje00, --自费金额 Pgfje00, --公费金额,减免时用 Vjzje00, --记帐金额 nvl(Pzhje00, 0), --折后金额 nvl(Pjmje00, 0), --减免金额 Pjmshr0, --减免审核人 Pjmyy00, --减免审核原因 nvl(Pjmbz00, '0'), --减免标志 nvl(Pczrq00,to_char(sysdate,'yyyymmdd')), --开单日期 nvl(Pczsj00,to_char(sysdate,'hh24:mi:ss')), --开单时间 Pzxrq00, --执行日期 Pzxsj00, --执行日期 nvl(Pcxbz00, 'Z'), --冲销标志 Pkdks00, --开单科室 Pysks00, --医生所属科室 nvl(Pkdys00, 0), --开单医生工号 nvl(Pkdbq00, 0), --开单病区编号 nvl(Pzxks00, 0), --执行科室编号 Vzxys00, --执行医生工号 --nvl(Pzxys00, 0), Pbeizhu, --备注 nvl(Pzfbl00, 1), --自付比例 nvl(Vgjbm00,Pgjbm00), --国家编码 nvl(Psfydj0, '0'), --收费员登记 1是 0否 nvl(Psflscf, '0'), --是否零散处方 '0':非处方,'1':是零散处方,'2':病区处方,作废 nvl(Pyjdjh0, 0), --医技单ID/处方单ID nvl(Pyjjzid, 0), --医技/处方计价明细ID Pshjg00, --审核结果 Pph0000, --库存物资批号 Pomxid0, --冲销时的原费用明细记录ID Vmzfpid, --门诊发票ID Vhsxmid, --核算项目ID Vkjxmid, --会计项目ID Ptcid00, --套餐ID Ptcnwbz, --套餐标识 VHBXMMC, --合并项目名称 Vzffsbz, --自费发送标志:N否,Y是 Vtsbzbh, --Ptsbzbh 特殊病种编号 VGJBZBM, --国家医保编码 VGJBZMC, --国家医保名称 Vzfcfbz --自费处方标志 ); if Vzfje00 >= 0 then Vcxbz00 := 'Z'; Vdjlx00 := '1'; if Vmstzf0>0 then update SF_YKTKFB set MSTXF0=nvl(MSTXF0,0)+Vmstzf0 where BRID00=Pbrid00 and MKDM00='0'; end if; elsif Vzfje00 < 0 then Vcxbz00 := '-'; Vdjlx00 := '2'; if Vmstzf0<0 then if Vxjye00+Vzzye00-greatest(Vtyje00,0)<=0 then Vmstzf0 := 0; elsif Vxjye00+Vzzye00-greatest(Vtyje00,0)<-Vmstzf0 then Vmstzf0 := -(Vxjye00+Vzzye00-greatest(Vtyje00,0)); end if; if Vmstzf0<0 then Update SF_DJZFFS set CXBZ00='+',MSTYT0=nvl(MSTYT0,0)-Vmstzf0 where DJH000=VCXDJH0 and DJLX00='1'; end if; end if; Vmstzye := null; end if; SP_SF_DJZFFS_INSERT( PBRID00 , --病人ID PDJH000 , --费用单号/结账单号/缴退费单号 PHJJE00 , --合计金额 VZFJE00 , --自费金额 VZFJE00-Vzzzhzf-Vmstzf0, --现金支付 Vzzzhzf , --转账支付 Vmstzf0 , --民生通支付 0 , --医保个人账户 0 , --统筹金额支付 Vmstzye , --民生通余额 Vxjye00 , --院内现金余额 Vzzye00 , --院内转账余额 Vcxbz00 , --冲销标志:'Z'正常,'+'被冲,'-'冲销 Vcxdjh0 , --冲销单据号 '0' , --门诊住院标志:'0'门诊,'1'住院 Vdjlx00 , --1收费,2冲销,3医保结算,4取消医保结算,5交预交金,6退预交金,7医保结算返回,8取消结算补扣 Vyktlsh , --一卡通ID,F.K=SF_YKTKFB.ID0000 Vjfdjh0 , --缴费表单据号,F.K=SF_BRJFB0.DJH000 0 , --结算单号(医保结算返回,使用冲销) Pczy000 , --输入:操作员编码 Pczyks0 , --操作员科室 'N' , --是否提交 Pzxcgbz , --执行成功标志 1成功 0失败 Ptsxx00 , --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); update SF_FYMX00 set YSZID0=(select nvl(max(a.YSZID0),0) from ZS_YSZMX0 a,ZS_YSZ000 b,BM_BMBM00 c where a.YSZID0=b.YSZID0 and b.SSKSBH=c.BMBH00 and c.BMXZ00='0' and a.YSBH00=Pkdys00) where MXID00=Pmxid00; update SF_FYMX00 a set (GHKS00,GHY000)=(select GHKS00,GHY000 from SF_BRXXB0 where GHH000=a.MZH000 and rownum=1) where MXID00=Pmxid00; if Vzhyncs = 'Y' then if Vqyykt0='Y' and Vfbbh00<>3 then select nvl(max(ZYE000),0) into Voldzye from SF_BRZHXX where BRID00 = Pbrid00 and JFLBID = 1; Vzye000:= Voldzye - Vzfje00; end if; update SF_BRZHXX set XJYE00 = XJYE00 - (Vzfje00-Vzzzhzf), --病人现金余额 ZZYE00 = nvl(Vzzye01,ZZYE00-Vzzzhzf), --病人转账余额 WJSJE0 = WJSJE0 + Vzfje00, --未结算金额 ZYE000 = ZYE000 - Vzfje00, --账户实际总余额 YKZYE0 = YKZYE0 - Vzfje00 --账户预扣总余额 where JFLBID = 1 and BRID00 = Pbrid00; end if; --启用一卡通平台,非医保病人 if Vqyykt0='Y' and Vfbbh00<>3 then --账户余额在零与非零之间变动时,记录一卡通平台中间表信息 if (Voldzye-greatest(Vtyje00,0)=0 and Vzye000-greatest(Vtyje00,0)<>0) or (Voldzye-greatest(Vtyje00,0)<>0 and Vzye000-greatest(Vtyje00,0)=0) then select nvl(max(ICKH00),'0') into Vickh00 from IC_YHXX00 where BRID00 = Pbrid00 and ZT0000='1'; if Vickh00 <>'0' then if Voldzye-greatest(Vtyje00,0)<>0 and Vzye000-greatest(Vtyje00,0)=0 then --余额从非零到零,记录余额标识为0 Vyebz00:= '0'; else Vyebz00:= '1'; end if; update PT_HIS_YJJBG0 set YEBZ00 = Vyebz00, PTREAD = '0' where HISBRID = Pbrid00; if sql%notfound then insert into PT_HIS_YJJBG0(LSH000,HISBRID,KH0000,YEBZ00) values(SQ_PT_HIS_YJJBG0_LSH000.nextval,Pbrid00,Vickh00,Vyebz00); end if; end if; end if; end if; Pzxcgbz:=1; if pcommit='Y' then commit; end if; exception when no_data_found then rollback; raise_application_error(-20001,substrb('没有找到数据!*'||sqlerrm,1,240)); when Ecustom then rollback; raise_application_error(-20010,substrb(Ptsxx00||'!*',1,240)); when others then rollback; raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end;