暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

统计出院未结账的具体信息

敏而好好学 2018-06-14
830

某天,接到收费室的通知,需要统计历年来出院未结账的欠费病人情况。接到通知,第一个想到的就是欠费登记程序,启动程序一看,发现信息不全,欠费信息不是系统自动提取而是人工登记的。最后,只能自己使用SQL语句提取了。


首先,确定需要的信息,如:患者ID号,住院次数,患者姓名,住院科室,出入院时间,费别,总费用,预交金结余金额等等。根据这几个字段,我们确定需要用到以下这几张表:住院病人费用明细记录(INP_BILL_DETAIL),病人主索引(PAT_MASTER_INDEX),科室字典(DEPT_DICT),病人住院主记录(PAT_VISIT),预交金记录(PREPAYMENT_RCPT)。


原来想使用住院病人费用记录表MEDICAL_COSTS,但由于该表在月报统计时,对某些欠费的病人进行费用补录,让月报程序得以进行。但是由于工作人员的疏忽,补录的费用项目及金额与实际产生的项目及金额不一致,所以只能弃用。


步骤一,查找出所有出院未结账的病人及其欠费金额

SELECT  C.PATIENT_ID,

        C.VISIT_ID,  

        B.NAME,   

        D.DEPT_NAME,

        C.ADMISSION_DATE_TIME,   

        C.DISCHARGE_DATE_TIME,   

        C.CHARGE_TYPE,   

        SUM(A.COSTS),

        SUM(A.CHARGES)

FROM    INPBILL.INP_BILL_DETAIL A,  

        MEDREC.PAT_MASTER_INDEX B,

        COMM.DEPT_DICT D,

        MEDREC.PAT_VISIT C         

WHERE  ( C.DEPT_DISCHARGE_FROM = D.DEPT_CODE ) AND

( C.PATIENT_ID = B.PATIENT_ID ) AND 

( C.PATIENT_ID = A.PATIENT_ID ) AND  

( C.VISIT_ID = A.VISIT_ID )    AND

( C.DISCHARGE_DATE_TIME BETWEEN TO_DATE('2017-06-01','YYYY-MM-DD')  AND TO_DATE('2017-07-01','YYYY-MM-DD')) AND

 ( A.RCPT_NO IS NULL )

GROUP BY C.PATIENT_ID,

        C.VISIT_ID,  

        B.NAME,   

        D.DEPT_NAME,

        C.ADMISSION_DATE_TIME,   

        C.DISCHARGE_DATE_TIME,   

        C.CHARGE_TYPE

ORDER BY C.PATIENT_ID

;


步骤二、查询出院未结账欠费病人的预交金结余金额

--方法一

SELECT  A.PATIENT_ID,SUM(A.AMOUNT)

FROM  PREPAYMENT_RCPT A

WHERE  A.PATIENT_ID IN (SELECT DISTINCT C.PATIENT_ID FROM INP_BILL_DETAIL B,PAT_VISIT C

WHERE ((C.DISCHARGE_DATE_TIME BETWEEN TO_DATE('2017-06-01','YYYY-MM-DD') AND TO_DATE('2017-07-01','YYYY-MM-DD'))) AND

(C.PATIENT_ID = B.PATIENT_ID) AND  

(C.VISIT_ID = B.VISIT_ID)  AND  

(B.RCPT_NO IS NULL)) AND

A.TRANSACT_TYPE <> '作废'

GROUP BY A.PATIENT_ID

;


--方法二、根据步骤一查询出来的ID号查找预交金结余金额。

SELECT A.PATIENT_ID,SUM(A.AMOUNT ) 

FROM  PREPAYMENT_RCPT A

WHERE  ( A.PATIENT_ID IN ('') ) AND

( A.TRANSACT_TYPE <> '作废' )

GROUP BY A.PATIENT_ID

;


步骤三、创建两张表,分别是预交金结余表pat_not_paymoney,出院未结账表pat_surplus_paymoney。注意:请在测试库里操作。

创建脚本语句如下:

--创建出院未结账表

-- Create table

CREATE OR REPLACE TABLE COMM.PAT_NOT_PAYMONEY

(

  PATIENT_ID VARCHAR2(10),

  VISIT_ID NUMBER(22) ,

  NAME VARCHAR2(8) ,

  DEPT_ANME VARCHAR2(26) ,

  ADMISSION_DATE_TIME DATE,

  DISCHARGE_DATE_TIME DATE,

  CHARGE_TYPE VARCHAR2(8),

  COSTS NUMBER(8,2),

  CHARGES NUMBER(8,2)

)

TABLESPACE TSP_ORDADM

PCTFREE 5

INITRANS 1

MAXTRANS 255

STORAGE

 (

 INITIAL 1576

 NEXT 512

 MINEXTENTS 1

MAXEXTENTS UNLIMITED

  );


CREATE PUBLIC SYNONYM PAT_NOT_PAYMONEY FOR COMM.PAT_NOT_PAYMONEY;

GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON COMM.PAT_NO_PAYMONEY TO SYSTEM;


--创建预交金结余表

-- Create table

CREATE TABLE COMM.PAT_SURPLUS_PAYMONEY

(

  PATIENT_ID VARCHAR2(10),

  MONEY NUMBER(8,2)

)

TABLESPACE TSP_ORDADM

PCTFREE 5

INITRANS 1

MAXTRANS 255

STORAGE

(

INITIAL 1576

NEXT 512

MINEXTENTS 1

MAXEXTENTS UNLIMITED

);

CREATE PUBLIC SYNONYM PAT_SURPLUS_PAYMONEY FOR COMM.PAT_SURPLUS_PAYMONEY;

GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON COMM.PAT_LEFT_PAYMONEY TO SYSTEM;


步骤四、导出导入数据

(先新建两个excel文档,将PATIENT_ID设置为文本格式、日期设置为自定义YYYY/MM/DD H:MM格式、COSTS/CHARGES设置为常规格式)将步骤一、二查询出来的结果另存为.XLS文档,然后使用PLSQL程序将数据分别导入pat_not_paymoney、pat_surplus_paymoney表。


步骤五、使用以下语句组合上面两张表的数据

SELECT * FROM PAT_NOT_PAYMONEY A LEFT JOIN PAT_SURPLUS_PAYMONEY B ON A.PATIENT_ID=B.PATIENT_ID;


步骤六、数据整理

将步骤五查询结果另存为.XLS文档,选中PATIENT_ID整列,利用EXCEL2007或以上版本的规则功能-条件格式-突出显示单元格规则-重复值 找出PATIENT_ID相同的病人,保留最大VISIT_ID的一次预交金结余数值,最后计算出应补多金额即可。


最后,我们来对上面的SQL查询语句进行一次汇总合并,将查询出来的欠费数据及预交金数据存放在临时表A1,A2,再关联起来,最后再使用上面的步骤六做数据整理。

SELECT A1.PATIENT_ID,A1.VISIT_ID,A1.NAME,A1.DEPT_NAME,A1.ADMISSION_DATE_TIME,A1.DISCHARGE_DATE_TIME,A1.CHARGE_TYPE,A1.COSTS,A1.CHARGES,A2.AMOUNT

FROM 

(SELECT  C.PATIENT_ID,

        C.VISIT_ID,  

        B.NAME,   

        D.DEPT_NAME,

        C.ADMISSION_DATE_TIME,   

        C.DISCHARGE_DATE_TIME,   

        C.CHARGE_TYPE,   

        SUM(A.COSTS) AS COSTS,

        SUM(A.CHARGES) AS CHARGES

FROM    INPBILL.INP_BILL_DETAIL A,  

        MEDREC.PAT_MASTER_INDEX B, 

        MEDREC.PAT_VISIT C, 

        COMM.DEPT_DICT D

WHERE  ( C.DEPT_DISCHARGE_FROM = D.DEPT_CODE ) AND

( C.PATIENT_ID = B.PATIENT_ID ) AND 

( C.PATIENT_ID = A.PATIENT_ID ) AND  

( C.VISIT_ID = A.VISIT_ID )    AND

 ( C.DISCHARGE_DATE_TIME BETWEEN TO_DATE('2017-06-01','YYYY-MM-DD') AND TO_DATE('2017-07-01','YYYY-MM-DD')) AND

 ( A.RCPT_NO IS NULL )

GROUP BY C.PATIENT_ID,

        C.VISIT_ID,  

        B.NAME,   

        D.DEPT_NAME,

        C.ADMISSION_DATE_TIME,   

        C.DISCHARGE_DATE_TIME,   

        C.CHARGE_TYPE) A1

LEFT JOIN 

(SELECT  E.PATIENT_ID,

  SUM(E.AMOUNT) AS AMOUNT

FROM  PREPAYMENT_RCPT E

WHERE  E.PATIENT_ID IN (SELECT DISTINCT G.PATIENT_ID FROM INP_BILL_DETAIL F,PAT_VISIT G

  WHERE (G.PATIENT_ID = F.PATIENT_ID) AND  

  (G.VISIT_ID = F.VISIT_ID)  AND 

  ((G.DISCHARGE_DATE_TIME BETWEEN TO_DATE('2017-06-01','YYYY-MM-DD') AND 

  TO_DATE('2017-07-01','YYYY-MM-DD')))AND

  (F.RCPT_NO IS NULL)) AND

  E.TRANSACT_TYPE <> '作废'

GROUP BY E.PATIENT_ID) A2

ON A1.PATIENT_ID=A2.PATIENT_ID;


此SQL语句查询出来的结果只适用于一般情况下,对于那些情况特殊的,还需要人工进行细分确认。至于哪些情况特殊,维护过该HIS系统数据库的小伙伴应该都清楚,在这里就不明说了

【完毕】


怎么样,如果您觉得在下写得还行,请长按识别二维码,加关注


文章转载自敏而好好学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论