CREATE OR REPLACE FUNCTION SF_SF_BSDZFP_MXLST ( PCJLYBM varchar2 ,--厂家来源编码 BS:博思,YH:易惠。。。(待扩展) PJKCJBM varchar2 ,--接口场景编码 PBRID00 number ,--病人ID=BM_BRXXB0.BRID00 PJZDH00 number ,--结账单号=SF_JZB000.JZDH00 PCZY000 number ,--操作员=BM_YGBM00.YGBH00 PCZYKS0 number ,--操作员科室=BM_YGBM00.BMBH00 PFHLXBH number ,--返回类型编码 1:chargeDetail 收费项目明细列表 2:listDetail 清单项目明细列表 3:otherInfo 其它扩展信息列表 4:otherMedicalList 其它医保信息列表 5:payChannelDetail 交费渠道列表 PINTSTR varchar2 ,--备用参数 xml编码格式传入 PHJJE00 number default 0 --合计金额 ) return clob is -- modification history -- Person Date Comments --zhangyc 2022.11.09 create by MZSF-20221114-003 --zhangyc 2022.11.17 药品增加条件去掉:YF_MZCFMX.SFZBY0='N';--是否自备药(Y:是 N:否) by MZSF-20221117-001 --zhangyc 2022.12.06 根据参数Invoices_CodeName_ChangeOpen=1 取BM_FPXM00:MZFPBM、MZFPMC、ZYFPBM、ZYFPMC by MZSF-20221207-003 --zhangyc 2024.09.04 prescribeCode:处方编码取'XMBH'+项目编码或'YPNM'药品内码,博思费用明细会按prescribeCode汇总 by MZSF-20240904-001 --zhangyc 2025.04.03 修正:SF_JZB000.HJJE00=1181.90,GRZHZF+TCJJZF+ZFJE00=1181.92,SF_JZMX00:合计金额1181.91接口报错totalAmt开票总金额和收费项目明细:chargeDetail中sum(amt)不一致 by MZSF-20250407-002 LS_JSONSTR clob; LS_TEMPJSON clob; LS_JFQDLBHJ number(12,2); --交费渠道列表 合计 LS_SFXMLBHJ number(12,2); --收费项目明细列表 合计 LS_TEPNUM number(12,2); --临时变量 LS_DJ_format varchar2(20);--单价格式化 LS_SL_format varchar2(20);--数量格式化 LS_JE_format varchar2(20);--金额格式化 LS_YBDJH0 varchar2(30);--医保单据号 LS_YBLB00 IC_YBBRLB.YBLB00%type; --医保分中心类别 LS_YBZXLB IC_YBBRLB.YBZXLB%type; --医保中心类别 LS_FBBH00 IC_YBBRLB.FBBH00%type; --费别编号 Invoices_CodeName_ChangeOpen varchar2(10); --电子开票发票编码名称是否转化为第三方编码和名称(BM_FPXM00:MZFPBM、MZFPMC、ZYFPBM、ZYFPMC) 0:不开启 1:门诊开启 2:住院开启 3:门诊住院开启 默认:0 LS_TYZDCS_BSFPLX varchar2(10); --博思发票类型1:发票项目编号=BM_FPXM00.BH0000 0:发票项目ID=BM_FPXM00.FPXMID ,默认:1 LS_number_std_amt varchar2(100);--博思电子发票清单明细数量、单价、金额小数点保留位数格式化参数设置,用|隔开,(.9999标识保留4位) LS_SFDMQZ varchar2(10);--chargeCodeQzdm:收费项目代码增加前缀 LS_chargeCode varchar2(50);--chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费 LS_chargeName varchar2(100);--chargeName 收费项目名称 String 100 否 LS_sortNo number(12); --sortNo 序号 Integer 不限 否 序号 LS_remark varchar2(200);--remark 备注 String 200 否 LS_SFFSBSFPBMMC varchar2(1); --是否发送博思发票编码和名称 1:是 0:否 LS_MZFPBM BM_FPXM00.MZFPBM%type;--门诊电子发票编码 LS_MZFPMC BM_FPXM00.MZFPMC%type;--门诊电子发票名称 LS_ZYFPBM BM_FPXM00.ZYFPBM%type;--住院电子发票编码 LS_ZYFPMC BM_FPXM00.ZYFPMC%type;--住院电子发票名称 LS_chargeDetail_sortNo varchar2(200);--序号 LS_chargeDetail_chargeCode varchar2(200);--收费项目代码 LS_chargeDetail_chargeName varchar2(200);--收费项目名称 LS_chargeDetail_unit varchar2(200);--计量单位 LS_chargeDetail_std number(14,4);--收费标准 LS_chargeDetail_number number(14,4);--数量 LS_chargeDetail_amt number(14,4);--金额 LS_chargeDetail_selfAmt number(14,4);--自费金额 LS_chargeDetail_remark varchar2(200);--备注 LS_JZMX00_SumXMJE number(12,2);--结账明细合计金额 LS_JZMX00_HJJECE number(12,2);--结账明细合计金额和合计金额差额 --1:chargeDetail 收费项目明细列表 cursor CUR_chargeDetail is SELECT * FROM ( select aa.XMBH00 as FPXMID, 1 as PXXH00,--sortNo 序号 Integer 不限 是 默认从1开始,每个收费项目序号值递增1,本次不允许重复 decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPBM),LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)), LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)) as chargeCode,--chargeCode 收费项目代码 String 50 是 填写业务系统内部编码值,由医疗平台配置对照 decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPMC),trim(aa.XMMC00)),trim(aa.XMMC00)) as chargeName,--chargeName 收费项目名称 String 100 是 填写业务系统内部项目名称 '无' as unit,--unit 计量单位 String 20 否 sum(aa.XMJE00) as std,--std 收费标准 Number 14,2 是 1 as num,--number 数量 Number 14,2 是 sum(aa.XMJE00) as amt,--amt 金额 Number 14,2 是 sum(aa.XMJE00) as selfAmt, --selfAmt 自费金额 Number 14,2 是 如无金额,填写0 '' as remark --备注 String 200 否 from SF_JZMX00 aa,bm_fpxm00 bb where aa.xmbh00=bb.FPXMID and aa.JZDH00=PJZDH00 and aa.XMJE00<>0 group by aa.XMBH00,decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPBM),LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)), LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)), decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPMC),trim(aa.XMMC00)),trim(aa.XMMC00))) WHERE AMT<>0 ; cursor CUR_chargeDetail_other is SELECT * FROM ( select LS_sortNo as sortNo,--sortNo 序号 Integer 不限 是 默认从1开始,每个收费项目序号值递增1,本次不允许重复 decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPBM),LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)), LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)) as chargeCode,--chargeCode 收费项目代码 String 50 是 填写业务系统内部编码值,由医疗平台配置对照 decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPMC),trim(aa.XMMC00)),trim(aa.XMMC00)) as chargeName,--chargeName 收费项目名称 String 100 是 填写业务系统内部项目名称 '无' as unit,--unit 计量单位 String 20 否 sum(aa.XMJE00) as std,--std 收费标准 Number 14,2 是 1 as num,--number 数量 Number 14,2 是 sum(aa.XMJE00) as amt,--amt 金额 Number 14,2 是 sum(aa.XMJE00) as selfAmt, --selfAmt 自费金额 Number 14,2 是 如无金额,填写0 '' as remark --备注 String 200 否 from ( select pJZDH00 as JZDH00, 13 as xmbh00, '其他费' as XMMC00, LS_TEPNUM as XMJE00 from dual) aa,bm_fpxm00 bb where aa.xmbh00=bb.FPXMID and aa.JZDH00=PJZDH00 and aa.XMJE00<>0 group by decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPBM),LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)), LS_SFDMQZ||decode(LS_TYZDCS_BSFPLX,'1',trim(bb.BH0000),BB.FPXMID)), decode(LS_SFFSBSFPBMMC,'1',nvl(trim(bb.MZFPMC),trim(aa.XMMC00)),trim(aa.XMMC00))) WHERE AMT<>0 ; --2:listDetail 清单项目明细列表 cursor CUR_listDetail is SELECT * FROM ( select 'N' as SFYP00,--是否药品 Y:是 N:否 B.BRID00 as BRID00,--病人ID B.JZDH00 as JZDH00,--HIS结账单号 D.BH0000 as FPXMBH,--发票项目 D.FPXMID as FPXMID,--发票项目ID D.XMMC00 as FPXMMC,--发票项目名称 A.XMBH00 as XMBH00,--项目编码 B.JZDH00 as YWLSH, --ywlsh 是 string 业务流水号 substrb(A.XMMC00,1,50) as name,--name 药品名称 String 50 是 如药品名称,器材名称等 A.XMDJ00 as std,--std 单价 Number 14,6 是 sum(A.XMSL00) as num,--number 数量 Number 14,6 是 sum(A.HJJE00) as amt,--amt 金额 Number 14,6 是 sum(A.HJJE00) as selfAmt,--selfAmt 自费金额 Number 14,6 是 如无金额,填写0 max(TO_char(A.MXID00)) as listDetailNo,--listDetailNo 明细流水号 String 60 否 明细流水号 '' as chargeCode,--chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费 '' as chargeName,--chargeName 收费项目名称 String 100 否 max('XMBH'||to_char(A.XMBH00)) as prescribeCode,--prescribeCode 处方编码 String 60 否 '' as listTypeCode,--listTypeCode 药品类别编码 String 50 否 如药品分类编码01,有则填写 '' as listTypeName,--listTypeName 药品类别名称 String 50 否 如药品分类名称,抗生素类抗感染药物 substrb(max(nvl(trim(C.BKEH83),TO_char(a.XMBH00))),1,50) as code,--code 编码 String 50 否 如药品编码,有则填写 '' as form,--form 剂型 String 50 否 substrb(max(trim(a.XMGG00)),1,50) as specification,--specification 规格 String 50 否 substrb(max(trim(a.XMDW00)),1,20) as unit,--unit 计量单位 String 20 否 '' as receivableAmt,--receivableAmt 应收费用 Number 14,6 否 '' as medicalCareType,--medicalCareType 医保药品分类 String 1 否 1:无自负/甲2:有自负/乙3:全自负/丙 '' as medCareItemType,--medCareItemType 医保项目类型 String 100 否 '' as medReimburseRate,--medReimburseRate 医保报销比例 Number 3,2 否 '' as remark,--remark 备注 String 200 否 1 as PXXH00,--sortNo 序号 Integer 不限 否 序号 '' as chrgtype--chrgtype 费用类型 String 50 否 from SF_FYMX00 A,SF_BRFY00 B,BM_YYSFXM C,BM_FPXM00 D where A.DJH000 = B.DJH000 and A.XMBH00 = C.SFXMID and C.MZFPID = D.FPXMID and A.XMBH00 < 9999999990 and B.JZDH00=PJZDH00 and B.BRID00=PBRID00 group by B.BRID00,B.JZDH00,D.BH0000,D.FPXMID,D.XMMC00,A.XMBH00,A.XMMC00,A.XMDJ00 union all select 'Y' as SFYP00,--是否药品 Y:是 N:否 A.BRID00 as BRID00,--病人ID A.JZDH00 as JZDH00,--HIS结账单号 F.BH0000 as FPXMBH,--发票项目 F.FPXMID as FPXMID,--发票项目ID F.XMMC00 as FPXMMC,--发票项目名称 C.YPNM00 as XMBH00,--项目编码 A.JZDH00 as YWLSH, --ywlsh 是 string 业务流水号 substrb(C.YPMC00,1,50) as name,--name 药品名称 String 50 是 如药品名称,器材名称等 C.LSDJ00 as std,--std 单价 Number 14,6 是 sum(C.YPZSL0) as num,--number 数量 Number 14,6 是 sum(round(C.LSDJ00*C.YPZSL0*100)/100) as amt,--amt 金额 Number 14,6 是 sum(round(C.LSDJ00*C.YPZSL0*100)/100) as selfAmt,--selfAmt 自费金额 Number 14,6 是 如无金额,填写0 max(TO_char(C.CFID00)) as listDetailNo,--listDetailNo 明细流水号 String 60 否 明细流水号 '' as chargeCode,--chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费 '' as chargeName,--chargeName 收费项目名称 String 100 否 max('YPNM'||TO_char(C.YPNM00)) as prescribeCode,--prescribeCode 处方编码 String 60 否 '' as listTypeCode,--listTypeCode 药品类别编码 String 50 否 如药品分类编码01,有则填写 '' as listTypeName,--listTypeName 药品类别名称 String 50 否 如药品分类名称,抗生素类抗感染药物 substrb(max(nvl(trim(E.BKEH83),TO_char(C.YPNM00))),1,50) as code,--code 编码 String 50 否 如药品编码,有则填写 '' as form,--form 剂型 String 50 否 substrb(max(trim(C.YPGG00)),1,50) as specification,--specification 规格 String 50 否 substrb(max(trim(C.CFDW00)),1,20) as unit,--unit 计量单位 String 20 否 '' as receivableAmt,--receivableAmt 应收费用 Number 14,6 否 '' as medicalCareType,--medicalCareType 医保药品分类 String 1 否 1:无自负/甲2:有自负/乙3:全自负/丙 '' as medCareItemType,--medCareItemType 医保项目类型 String 100 否 '' as medReimburseRate,--medReimburseRate 医保报销比例 Number 3,2 否 '' as remark,--remark 备注 String 200 否 1 as PXXH00,--sortNo 序号 Integer 不限 否 序号 '' as chrgtype--chrgtype 费用类型 String 50 否 from SF_BRFY00 A,YF_MZCF00 B,YF_MZCFMX C,BM_YPLB00 D,BM_YYSFXM E,BM_FPXM00 F where A.DJH000 = B.DJH000 and B.CFLSH0 = C.CFLSH0 and B.YPDLBH = D.LBBH00 and D.SFDM00 = E.SFXMID and E.MZFPID = F.FPXMID and C.SFZBY0='N' ----是否自备药 and A.JZDH00=PJZDH00 and A.BRID00=PBRID00 group by A.BRID00,A.JZDH00,F.BH0000,F.FPXMID,F.XMMC00,C.YPNM00,C.YPMC00,C.LSDJ00 )WHERE AMT<>0 ; --3:otherInfo 其它扩展信息列表 --4:otherMedicalList 其它医保信息列表 cursor CUR_otherMedicalList is select a.JZDH00 as JZDH00,--HIS结账单号 a.BRID00 as BRID00,--病人ID a.JZDH00 as ywlsh, --ywlsh 是 string 业务流水号 1 as infoNo,--infoNo 序号 Integer 不限 是 认从1开始,每项数据序号值递增1,本次不允许重复 decode(a.ZFFS00,16,'01',20,'03','02') as infoName,--infoName 医保信息名称 String 100 是 如费用报销类型编码,可参考附录7医保报销类型列表 01 公务员报销 02 基本医疗报销 03 补充报销 04 其它(可以按需添加) a.JFJE00 as infoValue,--infoValue 医保信息值 String 100 是 如费用报销金额 '' as infoOther--infoOther 医保其它信息 String 100 否 如医保报销比例。 from SF_BRJFB0 a where A.JZDH00=PJZDH00 and A.BRID00=PBRID00 and a.ZFFS00 not in (1,2,8,18,24,25,26,28) and a.JFJE00<>0 ; --5:payChannelDetail 交费渠道列表 cursor CUR_payChannelDetail is select a.JZDH00 as JZDH00,--HIS结账单号 a.BRID00 as BRID00,--病人ID a.JZDH00 as ywlsh, --ywlsh 是 string 业务流水号 1 as infoNo,--infoNo 序号 Integer 不限 是 认从1开始,每项数据序号值递增1,本次不允许重复 decode(a.ZFFS00,1,'02',2,'03',8,'08',18,'12',19,'12',20,'12',24,'05',25,'04',26,'12',28,'12','11') as payChannelCode,--payChannelCode 交费渠道编码 String 10 是 (01:POS刷卡02:现金03:转账04:支付宝05:微信06:支票07:卡支付08:银联卡09:自助机缴费10:软POS11:医保支付12:预交金13:公众平台) a.JFJE00 as payChannelValue, --payChannelValue 交费渠道金额 Number 14,2 是 a.ZFFS00 as ZFFS00, --支付方式 a.ZFFSMC as ZFFSMC, --支付方式名称 a.JFJE00 as JFJE00 --缴费金额 from SF_BRJFB0 a where A.JZDH00=PJZDH00 and A.BRID00=PBRID00 and a.ZFFS00 not in (1,2,8,18,20,24,25,28)--扣除掉非医保补偿 and a.JFJE00<>0 ; begin LS_JSONSTR := null; LS_TEMPJSON:= null; LS_JFQDLBHJ:=0;--交费渠道列表 合计 LS_SFXMLBHJ:=0;--收费项目明细列表 合计 LS_JZMX00_SumXMJE:=0;--结账明细合计金额 LS_JZMX00_HJJECE:=0;--结账明细合计金额和合计金额差额 LS_TEPNUM:=0; LS_number_std_amt:=substrb(trim(SF_SF_TYZD00('第三方电子发票平台接口','number_std_amt')),1,100); if LS_number_std_amt is not null then LS_SL_format:=substrb(SF_SF_RETURNINDEXEH(trim(LS_number_std_amt),'|', 1),1,20);--数量格式化(保留4位) LS_DJ_format:=substrb(SF_SF_RETURNINDEXEH(trim(LS_number_std_amt),'|', 2),1,20);--单价格式化(保留4位) LS_JE_format:=substrb(SF_SF_RETURNINDEXEH(trim(LS_number_std_amt),'|', 3),1,20);--金额格式化(保留2位) else LS_DJ_format:='999999990.9999';--单价格式化(保留4位) LS_SL_format:='999999990.99';--数量格式化(保留4位) LS_JE_format:='999999990.99';--金额格式化(保留2位) end if; LS_TYZDCS_BSFPLX:=substrb(SF_SF_TYZD00('第三方电子发票平台接口','chargeCode'),1,10); --博思发票类型1:发票项目编号=BM_FPXM00.BH0000 0:发票项目ID=BM_FPXM00.FPXMID ,默认:1 LS_SFDMQZ:=trim(substrb(SF_SF_RETURNINDEXEH(substrb(trim(SF_SF_TYZD00('第三方电子发票平台接口','chargeCodeQzdm')),1,100),'|', 1),1,10));--chargeCodeQzdm:收费项目代码增加前缀 begin select substrb(trim(a.YBDJH0),1,30) YBDJH0, b.YBLB00,b.YBZXLB,b.FBBH00 into LS_YBDJH0,LS_YBLB00,LS_YBZXLB,LS_FBBH00 from SF_JZB000 A,IC_YBBRLB B where a.FBBH00=b.FBBH00 and a.YBLB00=b.YBLB00 and A.JZDH00=PJZDH00 and A.BRID00=PBRID00; exception when others then return LS_JSONSTR; end; LS_SFFSBSFPBMMC:='0'; --是否发送博思发票编码和名称 1:是 0:否 --Invoices_CodeName_ChangeOpen:电子开票发票编码名称是否转化为第三方编码和名称(BM_FPXM00:MZFPBM、MZFPMC、ZYFPBM、ZYFPMC) 0:不开启 1:门诊开启 2:住院开启 3:门诊住院开启 默认:0 Invoices_CodeName_ChangeOpen:=nvl(substrb(SF_SF_TYZD00('第三方电子发票平台接口','Invoices_CodeName_ChangeOpen'),1,10),'0'); if Invoices_CodeName_ChangeOpen in ('1','3') then LS_SFFSBSFPBMMC:='1'; --是否发送博思发票编码和名称 1:是 0:否 end if; if PFHLXBH=1 then --1:chargeDetail 收费项目明细列表--begin-- begin select sum(aa.XMJE00) into LS_JZMX00_SumXMJE from SF_JZMX00 aa where aa.JZDH00=PJZDH00; exception when others then LS_JZMX00_SumXMJE:=0;--结账明细合计金额 end; if nvl(PHJJE00,0)<>0 and nvl(LS_JZMX00_SumXMJE,0)<>0 then LS_JZMX00_HJJECE:=nvl(PHJJE00,0)-nvl(LS_JZMX00_SumXMJE,0);--结账明细合计金额和合计金额差额 end if; LS_SFXMLBHJ:=0;--收费项目明细列表 合计 LS_sortNo:=1; for REC in CUR_chargeDetail loop LS_chargeDetail_sortNo :=substrb(LS_sortNo,1,200);--序号 LS_chargeDetail_chargeCode :=substrb(REC.chargeCode,1,200);--收费项目代码 LS_chargeDetail_chargeName :=substrb(REC.chargeName,1,200);--收费项目名称 LS_chargeDetail_unit :=substrb(REC.unit,1,200);--计量单位 if REC.FPXMID in (3) and nvl(LS_JZMX00_HJJECE,0)<>0 and nvl(REC.amt,0)>0 then --草药费 LS_chargeDetail_std :=nvl(REC.std,0)+nvl(LS_JZMX00_HJJECE,0);--收费标准 LS_chargeDetail_number :=nvl(REC.num,0);--数量 LS_chargeDetail_amt :=nvl(REC.amt,0)+nvl(LS_JZMX00_HJJECE,0);--金额 LS_chargeDetail_selfAmt :=nvl(REC.selfAmt,0)+nvl(LS_JZMX00_HJJECE,0);--自费金额 else LS_chargeDetail_std :=nvl(REC.std,0);--收费标准 LS_chargeDetail_number :=nvl(REC.num,0);--数量 LS_chargeDetail_amt :=nvl(REC.amt,0);--金额 LS_chargeDetail_selfAmt :=nvl(REC.selfAmt,0);--自费金额 end if; LS_chargeDetail_remark :=substrb(REC.remark,1,200);--备注 LS_TEMPJSON:=''; LS_TEMPJSON:='{' ||'"sortNo":'||'"'||LS_chargeDetail_sortNo||'",'--sortNo 序号 Integer 不限 是 默认从1开始,每个收费项目序号值递增1,本次不允许重复 ||'"chargeCode":'||'"'||LS_chargeDetail_chargeCode||'",'--chargeCode 收费项目代码 String 50 是 填写业务系统内部编码值,由医疗平台配置对照 ||'"chargeName":'||'"'||LS_chargeDetail_chargeName||'",'--chargeName 收费项目名称 String 100 是 填写业务系统内部项目名称 ||'"std":'||'"'||trim(to_char(LS_chargeDetail_std,LS_JE_format))||'",'--std 收费标准 Number 14,2 是 ||'"number":'||'"'||trim(to_char(LS_chargeDetail_number,LS_JE_format))||'",'--number 数量 Number 14,2 是 ||'"amt":'||'"'||trim(to_char(LS_chargeDetail_amt,LS_JE_format))||'",'--amt 金额 Number 14,2 是 ||'"selfAmt":'||'"'||trim(to_char(LS_chargeDetail_selfAmt,LS_JE_format))||'",'--selfAmt 自费金额 Number 14,2 是 如无金额,填写0 ||'"remark":'||'"'||LS_chargeDetail_remark||'",'--remark 备注 String 200 否 ||'"unit":'||'"'||LS_chargeDetail_unit||'"'--unit 计量单位 String 20 否 ||'}'; if LS_JSONSTR is not null then LS_JSONSTR:=LS_JSONSTR||','||LS_TEMPJSON; else LS_JSONSTR:=LS_TEMPJSON; end if; LS_sortNo:=nvl(LS_sortNo,0)+1; LS_SFXMLBHJ:=nvl(LS_SFXMLBHJ,0)+nvl(LS_chargeDetail_amt,0); end loop; --由于博思校验收费项目明细 chargeDetail 合计金额要等于 amt 如果不等于会报 业务执行异常:交费渠道合计金额不等于开票总金额 --模拟生成一条报文 12 预交金 LS_TEPNUM:=nvl(PHJJE00,0)-nvl(LS_SFXMLBHJ,0); if LS_TEPNUM<>0 then --合计金额 --LS_sortNo:=LS_sortNo+1; for REC in CUR_chargeDetail_other loop LS_TEMPJSON:=''; LS_TEMPJSON:='{' ||'"sortNo":'||'"'||REC.sortNo||'",'--sortNo 序号 Integer 不限 是 默认从1开始,每个收费项目序号值递增1,本次不允许重复 ||'"chargeCode":'||'"'||REC.chargeCode||'",'--chargeCode 收费项目代码 String 50 是 填写业务系统内部编码值,由医疗平台配置对照 ||'"chargeName":'||'"'||REC.chargeName||'",'--chargeName 收费项目名称 String 100 是 填写业务系统内部项目名称 ||'"std":'||'"'||trim(to_char(REC.std,LS_JE_format))||'",'--std 收费标准 Number 14,2 是 ||'"number":'||'"'||trim(to_char(REC.num,LS_JE_format))||'",'--number 数量 Number 14,2 是 ||'"amt":'||'"'||trim(to_char(REC.amt,LS_JE_format))||'",'--amt 金额 Number 14,2 是 ||'"selfAmt":'||'"'||trim(to_char(REC.selfAmt,LS_JE_format))||'",'--selfAmt 自费金额 Number 14,2 是 如无金额,填写0 ||'"remark":'||'"'||REC.remark||'",'--remark 备注 String 200 否 ||'"unit":'||'"'||REC.unit||'"'--unit 计量单位 String 20 否 ||'}'; if LS_JSONSTR is not null then LS_JSONSTR:=LS_JSONSTR||','||LS_TEMPJSON; else LS_JSONSTR:=LS_TEMPJSON; end if; end loop; end if; LS_JSONSTR:='['||LS_JSONSTR||']'; --1:chargeDetail 收费项目明细列表--end-- --2:listDetail 清单项目明细列表--begin-- elsif PFHLXBH=2 then LS_sortNo:=1; for REC in CUR_listDetail loop --chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费 if LS_TYZDCS_BSFPLX='1' then LS_chargeCode:=REC.FPXMBH; else LS_chargeCode:=REC.FPXMID; end if; LS_chargeCode:=substrb(LS_SFDMQZ||LS_chargeCode,1,50);--chargeCode 收费项目代码 LS_chargeName:=substrb(REC.FPXMMC,1,100);--chargeName 收费项目名称 String 100 否 if LS_SFFSBSFPBMMC in ('1') then --是否发送博思发票编码和名称 1:是 0:否 begin select trim(aa.MZFPBM) as MZFPBM,trim(aa.MZFPMC) as MZFPMC,trim(aa.ZYFPBM) as ZYFPBM,trim(aa.ZYFPMC) as ZYFPMC into LS_MZFPBM,LS_MZFPMC,LS_ZYFPBM,LS_ZYFPMC from BM_FPXM00 aa where aa.FPXMID =REC.FPXMID; exception when others then LS_MZFPBM :=null;--门诊电子发票编码 LS_MZFPMC :=null;--门诊电子发票名称 LS_ZYFPBM :=null;--住院电子发票编码 LS_ZYFPMC :=null;--住院电子发票名称 end; if LS_MZFPBM is not null then LS_chargeCode:=substrb(LS_MZFPBM,1,50);--chargeCode 收费项目代码 end if; if LS_MZFPMC is not null then LS_chargeName:=substrb(LS_MZFPMC,1,100);--chargeName 收费项目名称 end if; end if; --remark 备注 String 200 否 if LS_FBBH00=3 then if LS_YBDJH0='0' or LS_YBDJH0 is null then LS_remark :='自费'; else LS_remark:=substrb(SF_BM_XMYBLBMC(LS_YBLB00,LS_YBZXLB,LS_FBBH00,REC.XMBH00,REC.SFYP00),1,200); end if; else LS_remark :='自费'; end if; LS_TEMPJSON:=''; LS_TEMPJSON:='{' ||'"name":'||'"'||REC.name||'",'--name 药品名称 String 50 是 如药品名称,器材名称等 ||'"std":'||'"'||trim(to_char(REC.std,LS_DJ_format))||'",'--std 单价 Number 14,6 是 ||'"number":'||'"'||trim(to_char(REC.num,LS_SL_format))||'",'--number 数量 Number 14,6 是 ||'"amt":'||'"'||trim(to_char(REC.amt, LS_JE_format))||'",'--amt 金额 Number 14,6 是 ||'"selfAmt":'||'"'||trim(to_char(REC.selfAmt,LS_JE_format))||'",'--selfAmt 自费金额 Number 14,6 是 如无金额,填写0 ||'"listDetailNo":'||'"'||REC.listDetailNo||'",'--listDetailNo 明细流水号 String 60 否 明细流水号 ||'"chargeCode":'||'"'||LS_chargeCode||'",'--chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费 ||'"chargeName":'||'"'||LS_chargeName||'",'--chargeName 收费项目名称 String 100 否 ||'"prescribeCode":'||'"'||REC.prescribeCode||'",'--prescribeCode 处方编码 String 60 否 ||'"listTypeCode":'||'"'||REC.listTypeCode||'",'--listTypeCode 药品类别编码 String 50 否 如药品分类编码01,有则填写 ||'"listTypeName":'||'"'||REC.listTypeName||'",'--listTypeName 药品类别名称 String 50 否 如药品分类名称,抗生素类抗感染药物 ||'"code":'||'"'||REC.code||'",'--code 编码 String 50 否 如药品编码,有则填写 ||'"form":'||'"'||REC.form||'",'--form 剂型 String 50 否 ||'"specification":'||'"'||REC.specification||'",'--specification 规格 String 50 否 ||'"unit":'||'"'||REC.unit||'",'--unit 计量单位 String 20 否 ||'"receivableAmt":'||'"'||trim(to_char(REC.receivableAmt,LS_JE_format))||'",'--receivableAmt 应收费用 Number 14,6 否 ||'"medicalCareType":'||'"'||REC.medicalCareType||'",'--medicalCareType 医保药品分类 String 1 否 1:无自负/甲2:有自负/乙3:全自负/丙 ||'"medCareItemType":'||'"'||REC.medCareItemType||'",'--medCareItemType 医保项目类型 String 100 否 ||'"medReimburseRate":'||'"'||REC.medReimburseRate||'",'--medReimburseRate 医保报销比例 Number 3,2 否 ||'"remark":'||'"'||LS_remark||'",'--remark 备注 String 200 否 ||'"sortNo":'||'"'||LS_sortNo||'",'--sortNo 序号 Integer 不限 否 序号 ||'"chrgtype":'||'"'||REC.chrgtype||'"'--chrgtype 费用类型 String 50 否 ||'}'; if LS_JSONSTR is not null then LS_JSONSTR:=LS_JSONSTR||','||LS_TEMPJSON; else LS_JSONSTR:=LS_TEMPJSON; end if; LS_sortNo:=nvl(LS_sortNo,0)+1; end loop; LS_JSONSTR:='['||LS_JSONSTR||']'; --2:listDetail 清单项目明细列表--end-- elsif PFHLXBH=3 then --3:otherInfo 其它扩展信息列表--begin-- LS_JSONSTR := SF_SF_BSDZFP_OTHERINFO(PBRID00,PJZDH00); LS_JSONSTR:='['||LS_JSONSTR||']'; --3:otherInfo 其它扩展信息列表--end-- elsif PFHLXBH=4 then --4:otherMedicalList 其它医保信息列表--begin-- LS_sortNo:=1; for REC in CUR_otherMedicalList loop LS_TEMPJSON:=''; LS_TEMPJSON:='{' ||'"infoNo":'||'"'||LS_sortNo||'",'--infoNo 序号 Integer 不限 是 认从1开始,每项数据序号值递增1,本次不允许重复 ||'"infoName":'||'"'||REC.infoName||'",'--infoName 医保信息名称 String 100 是 如费用报销类型编码,可参考附录7医保报销类型列表 ||'"infoValue":'||'"'||trim(to_char(REC.infoValue,LS_JE_format))||'",'--infoValue 医保信息值 String 100 是 如费用报销金额 ||'"infoOther":'||'"'||REC.infoOther||'"'--infoOther 医保其它信息 String 100 否 如医保报销比例。 ||'}'; if LS_JSONSTR is not null then LS_JSONSTR:=LS_JSONSTR||','||LS_TEMPJSON; else LS_JSONSTR:=LS_TEMPJSON; end if; LS_sortNo:=nvl(LS_sortNo,0)+1; end loop; LS_JSONSTR:='['||LS_JSONSTR||']'; --4:otherMedicalList 其它医保信息列表--end-- elsif PFHLXBH=5 then --5:payChannelDetail 交费渠道列表--begin-- LS_JFQDLBHJ:=0;--临时 LS_sortNo:=1; for REC in CUR_payChannelDetail loop LS_TEMPJSON:=''; LS_TEMPJSON:='{' ||'"infoNo":'||'"'||LS_sortNo||'",'--infoNo 序号 Integer 不限 是 认从1开始,每项数据序号值递增1,本次不允许重复 ||'"payChannelCode":'||'"'||REC.payChannelCode||'",'--payChannelCode 交费渠道编码 String 10 是 ||'"payChannelValue":'||'"'||trim(to_char(REC.payChannelValue,LS_JE_format))||'"'--payChannelValue 交费渠道金额 Number 14,2 是 ||'}'; if LS_JSONSTR is not null then LS_JSONSTR:=LS_JSONSTR||','||LS_TEMPJSON; else LS_JSONSTR:=LS_TEMPJSON; end if; LS_sortNo:=nvl(LS_sortNo,0)+1; LS_JFQDLBHJ:=nvl(LS_JFQDLBHJ,0)+nvl(REC.JFJE00,0); end loop; --由于博思校验payChannelDetail 合计金额要等于 totalAmt 如果不等于会报 业务执行异常:交费渠道合计金额不等于开票总金额 --模拟生成一条报文 12 预交金 LS_TEPNUM:=nvl(PHJJE00,0)-nvl(LS_JFQDLBHJ,0); if LS_TEPNUM<>0 then --合计金额 if nvl(LS_JFQDLBHJ,0)=0 then LS_sortNo:=1; else LS_sortNo:=LS_sortNo+1; end if; LS_TEMPJSON:='{' ||'"infoNo":'||'"'||LS_sortNo||'",'--infoNo 序号 Integer 不限 是 认从1开始,每项数据序号值递增1,本次不允许重复 ||'"payChannelCode":'||'"'||'12'||'",'--payChannelCode 交费渠道编码 String 10 是 ||'"payChannelValue":'||'"'||trim(to_char(LS_TEPNUM,LS_JE_format))||'"'--payChannelValue 交费渠道金额 Number 14,2 是 ||'}'; if LS_JSONSTR is not null then LS_JSONSTR:=LS_JSONSTR||','||LS_TEMPJSON; else LS_JSONSTR:=LS_TEMPJSON; end if; end if; --5:payChannelDetail 交费渠道列表--end-- LS_JSONSTR:='['||LS_JSONSTR||']'; end if; return LS_JSONSTR; end;