CREATE OR REPLACE FUNCTION SF_SF_BSDJPJ_JSONSTR
(
PCJLYBM varchar2 default 'YH', --厂家来源编码 BS:博思,YH:易惠。。。(待扩展)
PJKCJBM varchar2 default '', --接口场景编码
PBRID00 number, --病人ID=BM_BRXXB0.BRID00
PJZDH00 number, --结账单号=SF_JZB000.JZDH00
PCZY000 number default 0, --操作员=BM_YGBM00.YGBH00
PCZYKS0 number default 0, --操作员科室=BM_YGBM00.BMBH00
PFHLXBH number, --返回类型编码 0:完整请求报文 1:chargeDetail 收费项目明细列表 2:listDetail 清单项目明细列表 3:otherInfo 其它扩展信息列表 4:otherMedicalList 其它医保信息列表 5:payChannelDetail 交费渠道列表
PINTSTR varchar2 default '' --备用参数 xml编码格式传入(其它请求入参或HIS前端请求入参数)
)
-- Person Date Comments
-- zhangyc 2020.12.07 create by [门诊][易惠博思电子发票]报文组成 by MZSF9-20201207-002
-- zhangyc 2020.12.09 增加to_char(xxx,'999999990.99')否报文会显示为.xxx by MZSF9-20201210-001
-- zhangyc 2020.12.11 增加字段 by MZSF9-20201211-001
-- zhangyc 2021.01.25 处理多个结账单号合并打印问题 by MZSF9-20210126-001
-- zhangyc 2021.02.05 chargeCode:收费项目代码增加前缀 by MZSF9-20210204-002
-- zhangyc 2021.03.16 payee、author、checker、placeCode如果前台有传值按前台处理 和主项remark增加普门累计、特门累计 by MZSF9-20210315-001
-- zhangyc 2021.04.12 根据参数控制number_std_amt 数量、单价、金额保留位数 by MZSF9-20210412-003
-- jlg 2021.08.30 重新整理下脚本的缩进排版,code改为从YBXMBH优先获取 MZSF9-20210827-004
-- jlg 2021.09.09 修改 ownPay 自费金额 和 selfPayAmt 个人自付 两个字段取值为空值(博思电子票据要求) MZSF9-20210909-002
-- chenHeyi 2021.11.20 防卡退卡时无卡号,将卡号放在XML入参中 MZSF9-20211123-003
return clob is
LS_FHXX00 clob; --
LS_JSONSTR clob; --
LS_JSQDMX clob; --
LS_QDMXJSON clob; --
LS_DJ_format varchar2(20); --单价格式化
LS_SL_format varchar2(20); --数量格式化
LS_JE_format varchar2(20); --金额格式化
in_PJH000 number(10); --票据号
in_BRID00 number(10); --病人ID
in_JZDH00 number(10); --结账单号
LS_SFHBDY number(10); --是否合并打印 0:否 1:是
LS_COUNT0 number(12,2); --
LS_SFDMQZ varchar2(10); --chargeCodeQzdm:收费项目代码增加前缀
LS_CZYXM0 varchar2(50); --操作员姓名
LS_payee varchar2(50); --收费员
LS_author varchar2(50); --票据编制人
LS_checker varchar2(50); --票据复核人
LS_placeCode varchar2(50); --开票点编码(胸卡号)
LS_remark varchar2(200); --备注信息
LS_number_std_amt varchar2(100); --博思电子发票清单明细数量、单价、金额小数点保留位数格式化参数设置,用|隔开,(.9999标识保留4位)
LS_CardNo varchar2(100); --XML中取出的卡号 MZSF9-20211123-003
--2:listDetail 清单项目明细列表
cursor CUR_listDetail is
select aa.*,rownum as sortNo from VW_SF_listDetail aa where aa.JZDH00=PJZDH00;
cursor CUR_electronic_bill is
select aa.* from VW_SF_op_electronic_bill aa where aa.JZDH00=PJZDH00;
--多笔结算合并打印
cursor CUR_HBJSQDMX is
select aa.*,rownum as sortNo from
(
select
a.XMBH00 as XMBH00, --项目编码
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(a.QDH000) as listDetailNo, --listDetailNo 明细流水号 String 60 否 明细流水号
max(decode(SF_SF_TYZD00('第三方电子发票平台接口','chargeCode'),'1',a.FPXMBH,a.FPXMID)) as chargeCode, --chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费
max(a.FPXMMC) as chargeName, --chargeName 收费项目名称 String 100 否
max(a.DJH000) as prescribeCode, --prescribeCode 处方编码 String 60 否
'' as listTypeCode, --listTypeCode 药品类别编码 String 50 否 如药品分类编码01,有则填写
'' as listTypeName, --listTypeName 药品类别名称 String 50 否 如药品分类名称,抗生素类抗感染药物
-- substrb(max(nvl(a.YBXMBH,nvl(trim(a.GJBM00),a.XMBH00))),1,50) as code, --code 编码 String 50 否 如药品编码,有则填写
a.XMBH00 code,
'' as form, --form 剂型 String 50 否
substrb(max(a.XMGG00),1,50) as specification, --specification 规格 String 50 否
substrb(max(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 VW_SF_RQDMX8 a
where 1=1
and a.MZID00=in_BRID00
and a.JZDH00 in (select dd.JZDH00 from SF_JZB000 dd where dd.BRID00=in_BRID00 and dd.PJH000=in_PJH000 )
group by a.XMBH00,a.XMMC00,a.XMDJ00
) aa where aa.amt<>0
;
cursor CUR_SF_JZB000_HBDY is
select aa.* from VW_SF_op_electronic_bill_HBDY aa where aa.BRID00=in_BRID00 and aa.PJH000=in_PJH000;
begin
/*
PINTSTR:xml编码格式传入
MZSF_DZFP_0001YH5907245440622337645
单条:select SF_SF_BSDJPJ_JSONSTR('YH','MZSF_DZFP_0001',590724,544062,1057,0,0,'') aa from dual;
合并:select SF_SF_BSDJPJ_JSONSTR('YH','MZSF_DZFP_0001',590724,544062,1057,0,0,'MZSF_DZFP_0001YH5907245440622337645 ') aa from dual;
*/
LS_FHXX00:='';
LS_JSONSTR:='';
LS_QDMXJSON:='';
LS_SFHBDY:=0; --是否合并打印 0:否 1:是
LS_COUNT0:=0;
LS_CardNo:=''; --取XML中的cardNo MZSF9-20211123-003
--博思电子发票清单明细数量、单价、金额小数点保留位数格式化参数设置,用|隔开,(.9999标识保留4位)
LS_number_std_amt:=substrb(trim(SF_SF_TYZD00('第三方电子发票平台接口','LS_number_std_amt')),1,100);
--chargeCodeQzdm:收费项目代码增加前缀
LS_SFDMQZ:=trim(substrb(SF_SF_RETURNINDEXEH(substrb(trim(SF_SF_TYZD00('第三方电子发票平台接口','chargeCodeQzdm')),1,100),'|', 1),1,10));
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_SL_format:='999999990.9999'; --数量格式化(保留4位)
LS_DJ_format:='999999990.9999'; --单价格式化(保留4位)
LS_JE_format:='999999990.99'; --金额格式化(保留2位)
end if;
--解析入参报文
if trim(PINTSTR) is not null then
--BRID00
begin
select to_number(SF_SF_GETXMLNOTE('brid00',trim(PINTSTR))) into in_BRID00 from dual;
exception
when others then
in_BRID00:=0;
end;
--票据号
begin
select to_number(SF_SF_GETXMLNOTE('pjh000',trim(PINTSTR))) into in_PJH000 from dual;
exception
when others then
in_PJH000:=0;
end;
--in_JZDH00 number(10);--结账单号
begin
select to_number(SF_SF_GETXMLNOTE('jzdh00',trim(PINTSTR))) into in_JZDH00 from dual;
exception
when others then
in_JZDH00:=0;
end;
--取XML中的cardNo MZSF9-20211123-003
begin
select to_number(SF_SF_GETXMLNOTE('cardNo',trim(PINTSTR))) into LS_CardNo from dual;
exception
when others then
LS_CardNo:='';
end;
if nvl(in_BRID00,0)>0 and nvl(in_PJH000,0)>0 then
--根据票据号查找结账表数据
begin
select count(*) into LS_COUNT0 from SF_JZB000 where BRID00=in_BRID00 and PJH000=in_PJH000;
exception
when others then
LS_COUNT0:=0;
end;
if nvl(LS_COUNT0,0)>1 then --存在>1记录代表合并打印
LS_SFHBDY:=1;--是否合并打印 0:否 1:是
end if;
end if;
end if;
--如果没取到XML的CardNo,就取最大的IC_YHXX00.ICKH00 MZSF9-20211123-003
if trim(LS_CardNo) is null then
select MAX(ICKH00) into LS_CardNo from IC_YHXX00 where BRID00 =PBRID00;
end if;
if nvl(PCZY000,0)>0 then
begin
select substrb(ZWXM00,1,50)CZYXM0,trim(XKH000)XKH000 into LS_CZYXM0,LS_placeCode from BM_YGBM00 aa where YGBH00 =PCZY000;
exception
when others then
LS_CZYXM0:=null;
LS_placeCode:=null;
end;
end if;
if LS_CZYXM0 is not null then
LS_payee:=LS_CZYXM0; --收费员
LS_author:=LS_CZYXM0; --票据编制人
LS_checker:=LS_CZYXM0; --票据复核人
end if;
--2:listDetail 清单项目明细列表--begin--
if PFHLXBH in (0,2) then
if LS_SFHBDY=1 then --合并打印--begin--
for REC in CUR_HBJSQDMX loop
LS_JSQDMX:='';
LS_JSQDMX:='{'
||'"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_SFDMQZ||REC.chargeCode||'",' --chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费
||'"chargeName":'||'"'||REC.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":'||'"'||REC.remark||'",' --remark 备注 String 200 否
||'"sortNo":'||'"'||REC.sortNo||'",' --sortNo 序号 Integer 不限 否 序号
||'"chrgtype":'||'"'||REC.chrgtype||'"' --chrgtype 费用类型 String 50 否
||'}';
if LS_QDMXJSON is not null then
LS_QDMXJSON:=LS_QDMXJSON||','||LS_JSQDMX;
else
LS_QDMXJSON:=LS_JSQDMX;
end if;
end loop;
LS_QDMXJSON:='['||LS_QDMXJSON||']';
if PFHLXBH in (2) then
LS_FHXX00:=LS_QDMXJSON;
end if;
else --合并打印--end--非合并打印--begin--
for REC in CUR_listDetail loop
LS_JSQDMX:='';
LS_JSQDMX:='{'
||'"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_SFDMQZ||REC.chargeCode||'",' --chargeCode 收费项目代码 String 50 否 填写业务系统内部编码值,由医疗平台配置对照,如:床位费、检查费
||'"chargeName":'||'"'||REC.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":'||'"'||REC.remark||'",' --remark 备注 String 200 否
||'"sortNo":'||'"'||REC.sortNo||'",' --sortNo 序号 Integer 不限 否 序号
||'"chrgtype":'||'"'||REC.chrgtype||'"' --chrgtype 费用类型 String 50 否
||'}';
if LS_QDMXJSON is not null then
LS_QDMXJSON:=LS_QDMXJSON||','||LS_JSQDMX;
else
LS_QDMXJSON:=LS_JSQDMX;
end if;
end loop;
LS_QDMXJSON:='['||LS_QDMXJSON||']';
if PFHLXBH in (2) then
LS_FHXX00:=LS_QDMXJSON;
end if;
end if;--非合并打印--end
end if;
--2:listDetail 清单项目明细列表--end--
--0:全部报文--begin--
if PFHLXBH in (0) then
if LS_SFHBDY=1 then --合并打印--begin--
for REC in CUR_SF_JZB000_HBDY loop
LS_remark:=substrb(REC.remark,1,200); --备注信息
--普通门诊累计
if nvl(REC.ptmzlj,0)>0 then
LS_remark:=substrb(LS_remark||' 普门累计:'||REC.ptmzlj,1,200);
end if;
--特殊门诊累计
if nvl(REC.tsmzlj,0)>0 then
LS_remark:=substrb(LS_remark||' 特门累计:'||REC.tsmzlj,1,200);
end if;
if trim(REC.cardNo) is not null then --REC.cardNo非空则 LS_CardNo:=REC.cardNo MZSF9-20211123-003
LS_CardNo:=REC.cardNo;
end if;
LS_JSONSTR:='{'
||'"ywlsh":'||'"'||REC.ywlsh||'",' --ywlsh 业务流水号 string 是
||'"busType":'||'"'||REC.busType||'",' --busType 业务标识 String 20 (01:住院 02 门诊 03 急诊 04 门特 05 体检中心 06 挂号 07 住院预交金 08 体检预交金)
||'"busNo":'||'"'||REC.busNo||'",' --busNo 业务流水号 String 50 是 单位内部唯一
||'"payer":'||'"'||REC.payer||'",' --payer 患者姓名 String 100 是
||'"busDateTime":'||'"'||REC.busDateTime||'",' --busDateTime 业务发生时间 String 17 是 格式:yyyyMMddHHmmssSSS
||'"placeCode":'||'"'||nvl(LS_placeCode,REC.placeCode)||'",' --placeCode 开票点编码 String 50 是 直接填写业务系统内部编码值,由医疗平台配置对照
||'"payee":'||'"'||nvl(LS_payee,REC.payee)||'",' --payee 收费员 String 50 是
||'"author":'||'"'||nvl(LS_author,REC.author)||'",' --author 票据编制人 String 100 是 如收费员与开票人员为同一人,则值与payee相同
||'"checker":'||'"'||nvl(LS_checker,REC.author)||'",' --checker 票据复核人
||'"totalAmt":'||'"'||trim(to_char(REC.totalAmt,LS_JE_format))||'",' --totalAmt 开票总金额 Number 14,2 是
||'"payerType":'||'"'||REC.payerType||'",' --payerType 交款人类型 String 1 是 交款人类型:1 个人 2 单位
||'"cardType":'||'"'||REC.cardType||'",' --cardType 卡类型 String 10 是(1101 身份证号码 1102 社会保障卡号 3101 诊疗卡/就诊卡 4101 居民户口簿 5101 京通卡)
||'"cardNo":'||'"'||LS_CardNo||'",' --cardNo 卡号 String 50 是 根据卡类型填写
||'"patientNo":'||'"'||REC.patientNo||'",' --patientNo 患者就诊编号 String 20 是 患者每次就诊一次就生成的一个新的编号。(患者登记号)
||'"sex":'||'"'||REC.sex||'",' --sex 性别 String 2 是
||'"age":'||'"'||REC.age||'",' --age 年龄 String 10 是
||'"idCardNo":'||'"'||REC.idCardNo||'",' --idCardNo 患者身份证号码 String 20 否
||'"tel":'||'"'||REC.tel||'",' --tel 患者手机号码 String 13 否 患者手机号(如需要用于电子票归集、电子票据短信通知,必填)
||'"email":'||'"'||REC.email||'",' --email 患者邮箱地址 String 100 否 患者邮箱地址(如需用于电子票归集、电子票据邮箱通知,必填)
||'"medicalInstitution":'||'"'||REC.medicalInstitution||'",' --medicalInstitution 医疗机构类型 String 60 否
||'"medCareInstitution":'||'"'||REC.medCareInstitution||'",' --medCareInstitution 医保机构编码 String 60 否 医保机构的唯一编码
||'"medCareTypeCode":'||'"'||REC.medCareTypeCode||'",' --medCareTypeCode 医保类型编码 String 60 否
||'"medicalCareType":'||'"'||REC.medicalCareType||'",' --medicalCareType 医保类型名称 String 60 否 由城镇职工基本医疗保险、城镇居民基本医疗保险、新型农村合作医疗、其它医疗保险等构成
||'"medicalInsuranceID":'||'"'||REC.medicalInsuranceID||'",' --medicalInsuranceID 患者医保编号 String 60 否 参保人在医保系统中的唯一标识(医保号)
||'"consultationDate":'||'"'||REC.consultationDate||'",' --consultationDate 就诊日期 String 10 否 患者就医时间格式:yyyyMMdd
||'"category":'||'"'||REC.category||'",' --category 就诊科室 String 200 否
||'"patientCategoryCode":'||'"'||REC.patientCategoryCode||'",' --patientCategoryCode 就诊科室编码 String 60 否
||'"patientId":'||'"'||REC.patientId||'",' --patientId 患者唯一ID String 50 否 患者在业务系统中的唯一标识ID,类似身份证号码。
||'"caseNumber":'||'"'||REC.caseNumber||'",' --caseNumber 病历号 String 50 否
||'"specialDiseasesName":'||'"'||REC.specialDiseasesName||'",' --specialDiseasesName 特殊病种名称 String 200 否
||'"accountPay":'||'"'||trim(to_char(REC.accountPay,LS_JE_format))||'",' --accountPay 个人账户支付 Number 14,2 是 按政策规定用个人账户支付参保人的医疗费用(含基本医疗保险目录范围内和目录范围外的费用);
||'"fundPay":'||'"'||trim(to_char(REC.fundPay,LS_JE_format))||'",' --fundPay 医保统筹基金支付 Number 14,2 是 患者本次就医所发生的医疗费用中按规定由基本医疗保险统筹基金支付的金额;
||'"otherfundPay":'||'"'||trim(to_char(REC.otherfundPay,LS_JE_format))||'",' --otherfundPay 其它医保支付 Number 14,2 是 患者本次就医所发生的医疗费用中按规定由大病保险、医疗救助、公务员医疗补助、大额补充、企业补充等基金或资金支付的金额;
--||'"ownPay":'||'"'||trim(to_char(REC.ownPay,LS_JE_format))||'",' --ownPay 自费金额 Number 14,2 是 患者本次就医所发生的医疗费用中按照有关规定不属于基本医疗保险目录范围而全部由个人支付的费用;
||'"ownPay":'||'"'||''||'",' --ownPay 自费金额 Number 14,2 是 患者本次就医所发生的医疗费用中按照有关规定不属于基本医疗保险目录范围而全部由个人支付的费用;
||'"selfConceitedAmt":'||'"'||trim(to_char(REC.selfConceitedAmt,LS_JE_format))||'",' --selfConceitedAmt 个人自负 Number 14,2 是 医保患者起付标准内个人支付费用;
--||'"selfPayAmt":'||'"'||trim(to_char(REC.selfPayAmt,LS_JE_format))||'",' --selfPayAmt 个人自付 Number 14,2 是 患者本次就医所发生的医疗费用中由个人负担的属于基本医疗保险目录范围内自付部分的金额;开展按病种、病组、床日等打包付费方式且由患者定额付费的费用。该项为个人所得税大病医疗专项附加扣除信;息项如无金额,填写0
||'"selfPayAmt":'||'"'||''||'",' --selfPayAmt 个人自付 Number 14,2 是 患者本次就医所发生的医疗费用中由个人负担的属于基本医疗保险目录范围内自付部分的金额;开展按病种、病组、床日等打包付费方式且由患者定额付费的费用。该项为个人所得税大病医疗专项附加扣除信;息项如无金额,填写0
||'"selfCashPay":'||'"'||trim(to_char(REC.selfCashPay,LS_JE_format))||'",' --selfCashPay 个人现金支付 Number 14,2 是 个人通过现金、银行卡、微信、支付宝等渠道支付的金额;
||'"cashPay":'||'"'||trim(to_char(REC.cashPay,LS_JE_format))||'",' --cashPay 现金预交款金额 Number 14,2 否
||'"chequePay":'||'"'||trim(to_char(REC.chequePay,LS_JE_format))||'",' --chequePay 支票预交款金额 Number 14,2 否
||'"transferAccountPay":'||'"'||trim(to_char(REC.transferAccountPay,LS_JE_format))||'",' --transferAccountPay 转账预交款金额 Number 14,2 否
||'"cashRecharge":'||'"'||trim(to_char(REC.cashRecharge,LS_JE_format))||'",' --cashRecharge 补交金额(现金) Number 14,2 否
||'"chequeRecharge":'||'"'||trim(to_char(REC.chequeRecharge,LS_JE_format))||'",' --chequeRecharge 补交金额(支票) Number 14,2 否
||'"transferRecharge":'||'"'||trim(to_char(REC.transferRecharge,LS_JE_format))||'",' --transferRecharge 补交金额(转账) Number 14,2 否
||'"cashRefund":'||'"'||trim(to_char(REC.cashRefund,LS_JE_format))||'",' --cashRefund 退还金额(现金) Number 14,2 否
||'"chequeRefund":'||'"'||trim(to_char(REC.chequeRefund,LS_JE_format))||'",' --chequeRefund 退交金额(支票) Number 14,2 否
||'"transferRefund":'||'"'||trim(to_char(REC.transferRefund,LS_JE_format))||'",' --transferRefund 退交金额(转账) Number 14,2 否
||'"ownAcBalance":'||'"'||trim(to_char(REC.ownAcBalance,LS_JE_format))||'",' --ownAcBalance 个人账户余额 Number 14,2 否
||'"reimbursementAmt":'||'"'||trim(to_char(REC.reimbursementAmt,LS_JE_format))||'",' --reimbursementAmt 报销总金额 Number 14,2 否 医保结算后返回的总金额
||'"balancedNumber":'||'"'||REC.balancedNumber||'",' --balancedNumber 结算号 String 100 否 医保结算后生成的号码/入账唯一值
||'"alipayCode":'||'"'||REC.alipayCode||'",' --alipayCode 患者支付宝账户 String 100 否 患者如果使用支付宝结算,可传入患者的支付宝UserID,用于电子票据归集到支付宝发票管家
||'"weChatOrderNo":'||'"'||REC.weChatOrderNo||'",' --weChatOrderNo 微信支付订单号 String 100 否 微信结算时,可传入患者支付成功的订单号,用来发微信服务通知
||'"weChatMedTransNo":'||'"'||REC.weChatMedTransNo||'",' --weChatMedTransNo 微信医保支付订单号 String 100 否 医保患者使用微信医保支付结算时,填写对应的微信医保支付的订单号
||'"openID":'||'"'||REC.openID||'",' --openID 微信公众号或小程序用户ID String 60 否
||'"eBillRelateNo":'||'"'||REC.eBillRelateNo||'",' --eBillRelateNo 业务票据关联号 String 32 否
||'"remark":'||'"'||LS_remark||'",' --remark 备注 String 200 否
||'"hospitalNo":'||'"'||REC.hospitalNo||'",' --hospitalNo 患者住院号【住院】门诊用病历号
||'"visitNo":'||'"'||REC.visitNo||'",' --visitNo 住院就诊编号【住院】
||'"patiendId":'||'"'||REC.patiendId||'",' --patiendId 患者唯一ID=bm_brxxb0.brid00
||'"inHospitalDate":'||'"'||REC.inHospitalDate||'",' --inHospitalDate 住院日期【住院】
||'"outHospitalDate":'||'"'||REC.outHospitalDate||'",' --outHospitalDate 出院日期【住院】
||'"isArrears":'||'"'||REC.isArrears||'",' --isArrears 是否可流通【住院】0-否、1-是(如欠费情况根 据医院业务要求该票据是 否可流通)
||'"arrearsReason":'||'"'||REC.arrearsReason||'",' --arrearsReason 不可流通原因
||'"ybzhye":'||'"'||trim(to_char(REC.ybzhye,LS_JE_format))||'",' --ybzhye: 医保账户余额
||'"ptmzlj":'||'"'||trim(to_char(REC.ptmzlj,LS_JE_format))||'",' --ptmzlj: 普通门诊累计
||'"tsmzlj":'||'"'||trim(to_char(REC.tsmzlj,LS_JE_format))||'",' --tsmzlj: 特殊门诊累计
;
--拼接Llist(chargeDetail 收费项目明细列表)
LS_JSONSTR:=LS_JSONSTR||'"chargeDetail":'||''||SF_SF_BSDJPJ_JSON(REC.BRID00,REC.JZDH00,REC.HJJE00,1,in_PJH000,LS_SFHBDY)||','; --chargeDetail 收费项目明细列表 String 不限 是 JSON
--拼接Llist(listDetail 清单项目明细列表)
LS_JSONSTR:=LS_JSONSTR||'"listDetail":'||''||LS_QDMXJSON||','; --listDetail 清单项目明细列表 String JSON (明细太多数据直接取视图:VW_ZY_listDetail)
--拼接Llist(otherMedicalList 其它医保信息列表)
LS_JSONSTR:=LS_JSONSTR||'"otherMedicalList":'||''||SF_SF_BSDJPJ_JSON(REC.BRID00,REC.JZDH00,REC.HJJE00,4,in_PJH000,LS_SFHBDY)||','; --otherMedicalList 其它医保信息列表 String 不限 否 JSON
--拼接Llist(payChannelDetail 交费渠道列表)
LS_JSONSTR:=LS_JSONSTR||'"payChannelDetail":'||''||SF_SF_BSDJPJ_JSON(REC.BRID00,REC.JZDH00,REC.HJJE00,5,in_PJH000,LS_SFHBDY)||','; --payChannelDetail 交费渠道列表 String 不限 是(01 POS刷卡 02 现金03 转账04 支付宝05 微信06 支票07 卡支付08 银联卡09 自助机缴费10 软POS11 医保支付12 预交金13 公众平台)
--拼接Llist(otherInfo 其它扩展信息列表)
LS_JSONSTR:=LS_JSONSTR||'"otherInfo":'||''||SF_SF_BSDJPJ_JSON(REC.BRID00,REC.JZDH00,REC.HJJE00,3,in_PJH000,LS_SFHBDY)||''; --otherInfo 其它扩展信息列表 String 不限 否 JSON
LS_JSONSTR:=LS_JSONSTR||'}';
end loop;
else --合并打印--end--非合并打印--begin--
for REC in CUR_electronic_bill loop
LS_remark:=substrb(REC.remark,1,200); --备注信息
--普通门诊累计
if nvl(REC.ptmzlj,0)>0 then
LS_remark:=substrb(LS_remark||' 普门累计:'||REC.ptmzlj,1,200);
end if;
--特殊门诊累计
if nvl(REC.tsmzlj,0)>0 then
LS_remark:=substrb(LS_remark||' 特门累计:'||REC.tsmzlj,1,200);
end if;
if trim(REC.cardNo) is not null then --REC.cardNo非空则 LS_CardNo:=REC.cardNo MZSF9-20211123-003
LS_CardNo:=REC.cardNo;
end if;
LS_JSONSTR:='{'
||'"ywlsh":'||'"'||REC.ywlsh||'",' --ywlsh 业务流水号 string 是
||'"busType":'||'"'||REC.busType||'",' --busType 业务标识 String 20 (01:住院 02 门诊 03 急诊 04 门特 05 体检中心 06 挂号 07 住院预交金 08 体检预交金)
||'"busNo":'||'"'||REC.busNo||'",' --busNo 业务流水号 String 50 是 单位内部唯一
||'"payer":'||'"'||REC.payer||'",' --payer 患者姓名 String 100 是
||'"busDateTime":'||'"'||REC.busDateTime||'",' --busDateTime 业务发生时间 String 17 是 格式:yyyyMMddHHmmssSSS
||'"placeCode":'||'"'||nvl(LS_placeCode,REC.placeCode)||'",' --placeCode 开票点编码 String 50 是 直接填写业务系统内部编码值,由医疗平台配置对照
||'"payee":'||'"'||nvl(LS_payee,REC.payee)||'",' --payee 收费员 String 50 是
||'"author":'||'"'||nvl(LS_author,REC.author)||'",' --author 票据编制人 String 100 是 如收费员与开票人员为同一人,则值与payee相同
||'"checker":'||'"'||nvl(LS_checker,REC.checker)||'",' --checker 票据复核人
||'"totalAmt":'||'"'||trim(to_char(REC.totalAmt,LS_JE_format))||'",' --totalAmt 开票总金额 Number 14,2 是
||'"payerType":'||'"'||REC.payerType||'",' --payerType 交款人类型 String 1 是 交款人类型:1 个人 2 单位
||'"cardType":'||'"'||REC.cardType||'",' --cardType 卡类型 String 10 是(1101 身份证号码 1102 社会保障卡号 3101 诊疗卡/就诊卡 4101 居民户口簿 5101 京通卡)
||'"cardNo":'||'"'||LS_CardNo||'",' --cardNo 卡号 String 50 是 根据卡类型填写
||'"patientNo":'||'"'||REC.patientNo||'",' --patientNo 患者就诊编号 String 20 是 患者每次就诊一次就生成的一个新的编号。(患者登记号)
||'"sex":'||'"'||REC.sex||'",' --sex 性别 String 2 是
||'"age":'||'"'||REC.age||'",' --age 年龄 String 10 是
||'"idCardNo":'||'"'||REC.idCardNo||'",' --idCardNo 患者身份证号码 String 20 否
||'"tel":'||'"'||REC.tel||'",' --tel 患者手机号码 String 13 否 患者手机号(如需要用于电子票归集、电子票据短信通知,必填)
||'"email":'||'"'||REC.email||'",' --email 患者邮箱地址 String 100 否 患者邮箱地址(如需用于电子票归集、电子票据邮箱通知,必填)
||'"medicalInstitution":'||'"'||REC.medicalInstitution||'",' --medicalInstitution 医疗机构类型 String 60 否
||'"medCareInstitution":'||'"'||REC.medCareInstitution||'",' --medCareInstitution 医保机构编码 String 60 否 医保机构的唯一编码
||'"medCareTypeCode":'||'"'||REC.medCareTypeCode||'",' --medCareTypeCode 医保类型编码 String 60 否
||'"medicalCareType":'||'"'||REC.medicalCareType||'",' --medicalCareType 医保类型名称 String 60 否 由城镇职工基本医疗保险、城镇居民基本医疗保险、新型农村合作医疗、其它医疗保险等构成
||'"medicalInsuranceID":'||'"'||REC.medicalInsuranceID||'",' --medicalInsuranceID 患者医保编号 String 60 否 参保人在医保系统中的唯一标识(医保号)
||'"consultationDate":'||'"'||REC.consultationDate||'",' --consultationDate 就诊日期 String 10 否 患者就医时间格式:yyyyMMdd
||'"category":'||'"'||REC.category||'",' --category 就诊科室 String 200 否
||'"patientCategoryCode":'||'"'||REC.patientCategoryCode||'",' --patientCategoryCode 就诊科室编码 String 60 否
||'"patientId":'||'"'||REC.patientId||'",' --patientId 患者唯一ID String 50 否 患者在业务系统中的唯一标识ID,类似身份证号码。
||'"caseNumber":'||'"'||REC.caseNumber||'",' --caseNumber 病历号 String 50 否
||'"specialDiseasesName":'||'"'||REC.specialDiseasesName||'",' --specialDiseasesName 特殊病种名称 String 200 否
||'"accountPay":'||'"'||trim(to_char(REC.accountPay,LS_JE_format))||'",' --accountPay 个人账户支付 Number 14,2 是 按政策规定用个人账户支付参保人的医疗费用(含基本医疗保险目录范围内和目录范围外的费用);
||'"fundPay":'||'"'||trim(to_char(REC.fundPay,LS_JE_format))||'",' --fundPay 医保统筹基金支付 Number 14,2 是 患者本次就医所发生的医疗费用中按规定由基本医疗保险统筹基金支付的金额;
||'"otherfundPay":'||'"'||trim(to_char(REC.otherfundPay,LS_JE_format))||'",' --otherfundPay 其它医保支付 Number 14,2 是 患者本次就医所发生的医疗费用中按规定由大病保险、医疗救助、公务员医疗补助、大额补充、企业补充等基金或资金支付的金额;
--||'"ownPay":'||'"'||trim(to_char(REC.ownPay,LS_JE_format))||'",' --ownPay 自费金额 Number 14,2 是 患者本次就医所发生的医疗费用中按照有关规定不属于基本医疗保险目录范围而全部由个人支付的费用;
||'"ownPay":'||'"'||''||'",' --ownPay 自费金额 Number 14,2 是 患者本次就医所发生的医疗费用中按照有关规定不属于基本医疗保险目录范围而全部由个人支付的费用;
||'"selfConceitedAmt":'||'"'||trim(to_char(REC.selfConceitedAmt,LS_JE_format))||'",' --selfConceitedAmt 个人自负 Number 14,2 是 医保患者起付标准内个人支付费用;
--||'"selfPayAmt":'||'"'||trim(to_char(REC.selfPayAmt,LS_JE_format))||'",' --selfPayAmt 个人自付 Number 14,2 是 患者本次就医所发生的医疗费用中由个人负担的属于基本医疗保险目录范围内自付部分的金额;开展按病种、病组、床日等打包付费方式且由患者定额付费的费用。该项为个人所得税大病医疗专项附加扣除信;息项如无金额,填写0
||'"selfPayAmt":'||'"'||''||'",' --selfPayAmt 个人自付 Number 14,2 是 患者本次就医所发生的医疗费用中由个人负担的属于基本医疗保险目录范围内自付部分的金额;开展按病种、病组、床日等打包付费方式且由患者定额付费的费用。该项为个人所得税大病医疗专项附加扣除信;息项如无金额,填写0
||'"selfCashPay":'||'"'||trim(to_char(REC.selfCashPay,LS_JE_format))||'",' --selfCashPay 个人现金支付 Number 14,2 是 个人通过现金、银行卡、微信、支付宝等渠道支付的金额;
||'"cashPay":'||'"'||trim(to_char(REC.cashPay,LS_JE_format))||'",' --cashPay 现金预交款金额 Number 14,2 否
||'"chequePay":'||'"'||trim(to_char(REC.chequePay,LS_JE_format))||'",' --chequePay 支票预交款金额 Number 14,2 否
||'"transferAccountPay":'||'"'||trim(to_char(REC.transferAccountPay,LS_JE_format))||'",' --transferAccountPay 转账预交款金额 Number 14,2 否
||'"cashRecharge":'||'"'||trim(to_char(REC.cashRecharge,LS_JE_format))||'",' --cashRecharge 补交金额(现金) Number 14,2 否
||'"chequeRecharge":'||'"'||trim(to_char(REC.chequeRecharge,LS_JE_format))||'",' --chequeRecharge 补交金额(支票) Number 14,2 否
||'"transferRecharge":'||'"'||trim(to_char(REC.transferRecharge,LS_JE_format))||'",' --transferRecharge 补交金额(转账) Number 14,2 否
||'"cashRefund":'||'"'||trim(to_char(REC.cashRefund,LS_JE_format))||'",' --cashRefund 退还金额(现金) Number 14,2 否
||'"chequeRefund":'||'"'||trim(to_char(REC.chequeRefund,LS_JE_format))||'",' --chequeRefund 退交金额(支票) Number 14,2 否
||'"transferRefund":'||'"'||trim(to_char(REC.transferRefund,LS_JE_format))||'",' --transferRefund 退交金额(转账) Number 14,2 否
||'"ownAcBalance":'||'"'||trim(to_char(REC.ownAcBalance,LS_JE_format))||'",' --ownAcBalance 个人账户余额 Number 14,2 否
||'"reimbursementAmt":'||'"'||trim(to_char(REC.reimbursementAmt,LS_JE_format))||'",' --reimbursementAmt 报销总金额 Number 14,2 否 医保结算后返回的总金额
||'"balancedNumber":'||'"'||REC.balancedNumber||'",' --balancedNumber 结算号 String 100 否 医保结算后生成的号码/入账唯一值
||'"alipayCode":'||'"'||REC.alipayCode||'",' --alipayCode 患者支付宝账户 String 100 否 患者如果使用支付宝结算,可传入患者的支付宝UserID,用于电子票据归集到支付宝发票管家
||'"weChatOrderNo":'||'"'||REC.weChatOrderNo||'",' --weChatOrderNo 微信支付订单号 String 100 否 微信结算时,可传入患者支付成功的订单号,用来发微信服务通知
||'"weChatMedTransNo":'||'"'||REC.weChatMedTransNo||'",' --weChatMedTransNo 微信医保支付订单号 String 100 否 医保患者使用微信医保支付结算时,填写对应的微信医保支付的订单号
||'"openID":'||'"'||REC.openID||'",' --openID 微信公众号或小程序用户ID String 60 否
||'"eBillRelateNo":'||'"'||REC.eBillRelateNo||'",' --eBillRelateNo 业务票据关联号 String 32 否
||'"remark":'||'"'||LS_remark||'",' --remark 备注 String 200 否
||'"hospitalNo":'||'"'||REC.hospitalNo||'",' --hospitalNo 患者住院号【住院】门诊用病历号
||'"visitNo":'||'"'||REC.visitNo||'",' --visitNo 住院就诊编号【住院】
||'"patiendId":'||'"'||REC.patiendId||'",' --patiendId 患者唯一ID=bm_brxxb0.brid00
||'"inHospitalDate":'||'"'||REC.inHospitalDate||'",' --inHospitalDate 住院日期【住院】
||'"outHospitalDate":'||'"'||REC.outHospitalDate||'",' --outHospitalDate 出院日期【住院】
||'"isArrears":'||'"'||REC.isArrears||'",' --isArrears 是否可流通【住院】0-否、1-是(如欠费情况根 据医院业务要求该票据是 否可流通)
||'"arrearsReason":'||'"'||REC.arrearsReason||'",' --arrearsReason 不可流通原因
||'"ybzhye":'||'"'||trim(to_char(REC.ybzhye,LS_JE_format))||'",' --ybzhye: 医保账户余额
||'"ptmzlj":'||'"'||trim(to_char(REC.ptmzlj,LS_JE_format))||'",' --ptmzlj: 普通门诊累计
||'"tsmzlj":'||'"'||trim(to_char(REC.tsmzlj,LS_JE_format))||'",' --tsmzlj: 特殊门诊累计
;
--拼接Llist(chargeDetail 收费项目明细列表)
LS_JSONSTR:=LS_JSONSTR||'"chargeDetail":'||''||REC.chargeDetail||','; --chargeDetail 收费项目明细列表 String 不限 是 JSON
--拼接Llist(listDetail 清单项目明细列表)
LS_JSONSTR:=LS_JSONSTR||'"listDetail":'||''||LS_QDMXJSON||','; --listDetail 清单项目明细列表 String JSON (明细太多数据直接取视图:VW_ZY_listDetail)
--拼接Llist(otherMedicalList 其它医保信息列表)
LS_JSONSTR:=LS_JSONSTR||'"otherMedicalList":'||''||REC.otherMedicalList||','; --otherMedicalList 其它医保信息列表 String 不限 否 JSON
--拼接Llist(payChannelDetail 交费渠道列表)
LS_JSONSTR:=LS_JSONSTR||'"payChannelDetail":'||''||REC.payChannelDetail||','; --payChannelDetail 交费渠道列表 String 不限 是(01 POS刷卡 02 现金03 转账04 支付宝05 微信06 支票07 卡支付08 银联卡09 自助机缴费10 软POS11 医保支付12 预交金13 公众平台)
--拼接Llist(otherInfo 其它扩展信息列表)
LS_JSONSTR:=LS_JSONSTR||'"otherInfo":'||''||REC.otherInfo||''; --otherInfo 其它扩展信息列表 String 不限 否 JSON
LS_JSONSTR:=LS_JSONSTR||'}';
end loop;
end if;--非合并打印--end--
LS_FHXX00:=LS_JSONSTR;
end if;
--0:全部报文--end--
return LS_FHXX00;
end;