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;