QOF 08 การตรวจพัฒนาการเด็ก DSPM
ID | 797 |
---|---|
Parent ID | 50 |
Table Name | qof62_kpi08_dspm |
Title | QOF 08 การตรวจพัฒนาการเด็ก DSPM |
Description | |
Script | #SQL_OPTIONS# PROVIDERS=1 PROVIDER1=43STD PROVIDER1_VALIDATE_TABLES=accident,admission,anc,appointment SCRIPT_FLOW=SQL #SQL_OPTIONS# #PROVIDER1_SQL# SET @provcode = :provcode; SET @rep_year = :rep_year; SET @hoscode = :hoscode; SET @hosname = :hosname; SET @hostype = :hostype; SET @address = :address; SET @subdistcode = :subdistcode; SET @distcode = :distcode; SET @level_service = :level_service; SET @prov_c= :provcode; SET @b_year='2020'; SET @start_d=concat(@b_year-1,'0401'); #แก้ไขวันที่ตามเงื่อนไข QOF SET @end_d=concat(@b_year,'0430'); SET @begin_d=DATE_ADD(@start_d,INTERVAL -43 month); SET @begin_d1=DATE_ADD(@start_d,INTERVAL -1 month); SET @end_d1=concat(@b_year,'0430'); #/*เตรียมข้อมูล*/ SET @table1='specialpp'; SET @filed1= 't.HOSPCODE, t.PID, t.SEQ, t.DATE_SERV, t.SERVPLACE, t.PPSPECIAL, t.PPSPLACE, t.PROVIDER, t.D_UPDATE, t.HDC_DATE'; DROP TABLE IF EXISTS _qof61_8_tmp_specialpp; SET @s:=CONCAT('CREATE TABLE IF NOT EXISTS _qof61_8_tmp_specialpp ( PRIMARY KEY (HOSPCODE,PID,DATE_SERV,PPSPECIAL) ,KEY (cid),KEY (hospcode,pid),KEY (date_serv),KEY (ppspecial) ) ENGINE=MyISAM AS SELECT SQL_BIG_RESULT ', @filed1, ' ,p.CID FROM ', @table1,' t LEFT JOIN t_person_db p ON t.HOSPCODE=p.HOSPCODE AND t.pid=p.pid WHERE DATE_SERV BETWEEN @begin_d1 AND @end_d1'); PREPARE stmt FROM @s; EXECUTE stmt; #/*หาเด็กกลุ่มเป้าหมาย*/ DROP TABLE IF EXISTS _qof61_8_t_childdev; CREATE TABLE IF NOT EXISTS _qof61_8_t_childdev( `HOSPCODE` varchar(5) NOT NULL DEFAULT '', `PID` varchar(15) NOT NULL DEFAULT '', `CID` varchar(13) NOT NULL, `BIRTH` date DEFAULT NULL, `SEX` varchar(1) NOT NULL DEFAULT '', `AREACODE` varchar(8) DEFAULT NULL, `TYPEAREA` varchar(1) NOT NULL DEFAULT '', `mhospcode` varchar(5) DEFAULT NULL, `mpid` varchar(15) DEFAULT NULL, `mcid` varchar(13) DEFAULT NULL, `AGE_9` int(1) NOT NULL DEFAULT '0', `AGE_18` int(1) NOT NULL DEFAULT '0', `AGE_30` int(1) NOT NULL DEFAULT '0', `AGE_42` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`HOSPCODE`,`PID`), KEY (`HOSPCODE`,`PID`,`CID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT IGNORE INTO _qof61_8_t_childdev (SELECT p.HOSPCODE,p.PID,p.CID,p.BIRTH,p.SEX,p.check_vhid AREACODE,p.check_typearea TYPEAREA,null,null ,IF(mother = '0000000000000' AND ISNULL(mother) ,null,mother ) ,0,0,0,0 FROM t_person_cid p WHERE BIRTH BETWEEN @begin_d AND @end_d AND check_typearea in('1','3') AND p.DISCHARGE='9' AND LENGTH(trim(p.CID))=13 AND NATION in(99) ); UPDATE _qof61_8_t_childdev c INNER JOIN tmp_newborn n ON c.cid=n.cid ######tmp_newborn SET c.mhospcode=n.hospcode,c.mpid=n.mpid; UPDATE _qof61_8_t_childdev c INNER JOIN t_person_db p ON c.mhospcode=p.hospcode AND c.mpid=p.pid SET c.mcid=p.cid; UPDATE _qof61_8_t_childdev SET AGE_9=1 WHERE (DATE_ADD(BIRTH,INTERVAL 9 month) BETWEEN @start_d AND @end_d) OR (DATE_ADD(BIRTH,INTERVAL 10 month) BETWEEN @start_d AND @end_d); UPDATE _qof61_8_t_childdev SET AGE_18=1 WHERE (DATE_ADD(BIRTH,INTERVAL 18 month) BETWEEN @start_d AND @end_d) OR (DATE_ADD(BIRTH,INTERVAL 19 month) BETWEEN @start_d AND @end_d); UPDATE _qof61_8_t_childdev SET AGE_30=1 WHERE (DATE_ADD(BIRTH,INTERVAL 30 month) BETWEEN @start_d AND @end_d) OR (DATE_ADD(BIRTH,INTERVAL 31 month) BETWEEN @start_d AND @end_d); UPDATE _qof61_8_t_childdev SET AGE_42=1 WHERE (DATE_ADD(BIRTH,INTERVAL 42 month) BETWEEN @start_d AND @end_d) OR (DATE_ADD(BIRTH,INTERVAL 43 month) BETWEEN @start_d AND @end_d); #/*นำเด็กกลุ่มเป้าหมายเข้าตารางคำนวน*/ DROP TABLE IF EXISTS _qof61_8_t_childdev_specialpp; CREATE TABLE IF NOT EXISTS _qof61_8_t_childdev_specialpp( hospcode VARCHAR(5) NOT NULL, pid VARCHAR(15) NOT NULL, cid VARCHAR(15) NOT NULL DEFAULT '', birth date, sex VARCHAR(1) NOT NULL, areacode VARCHAR(8) NOT NULL, typearea VARCHAR(1) DEFAULT NULL, agemonth VARCHAR(3) NOT NULL DEFAULT '', mhospcode varchar(5) DEFAULT NULL, mpid varchar(15) DEFAULT NULL, mcid varchar(13) DEFAULT NULL, date_start date, date_end date, date_serv_first date, status1 VARCHAR(1) DEFAULT NULL, date_serv2 date, sp_first text, sp_last text, date_serv_last date, status2 VARCHAR(1) DEFAULT NULL, status21 VARCHAR(1) DEFAULT NULL, status22 VARCHAR(1) DEFAULT NULL, status23 VARCHAR(1) DEFAULT NULL, status24 VARCHAR(1) DEFAULT NULL, status25 VARCHAR(1) DEFAULT NULL, PRIMARY KEY(hospcode,pid,cid,agemonth) ,KEY (hospcode,pid,cid) ) ENGINE=MyISAM ; INSERT IGNORE INTO _qof61_8_t_childdev_specialpp (hospcode,pid,cid,birth,sex,areacode,typearea,mhospcode,mpid,mcid,agemonth) ( SELECT p.hospcode,p.pid,p.cid,p.birth,p.sex,p.areacode,p.typearea,mhospcode,mpid,mcid,'42' FROM _qof61_8_t_childdev p WHERE AGE_42=1 ); INSERT IGNORE INTO _qof61_8_t_childdev_specialpp (hospcode,pid,cid,birth,sex,areacode,typearea,mhospcode,mpid,mcid,agemonth) ( SELECT p.hospcode,p.pid,p.cid,p.birth,p.sex,p.areacode,p.typearea,mhospcode,mpid,mcid,'30' FROM _qof61_8_t_childdev p WHERE AGE_30=1 ); INSERT IGNORE INTO _qof61_8_t_childdev_specialpp (hospcode,pid,cid,birth,sex,areacode,typearea,mhospcode,mpid,mcid,agemonth) ( SELECT p.hospcode,p.pid,p.cid,p.birth,p.sex,p.areacode,p.typearea,mhospcode,mpid,mcid,'18' FROM _qof61_8_t_childdev p WHERE AGE_18=1 ); INSERT IGNORE INTO _qof61_8_t_childdev_specialpp (hospcode,pid,cid,birth,sex,areacode,typearea,mhospcode,mpid,mcid,agemonth) ( SELECT p.hospcode,p.pid,p.cid,p.birth,p.sex,p.areacode,p.typearea,mhospcode,mpid,mcid,'9' FROM _qof61_8_t_childdev p WHERE AGE_9=1 ); INSERT IGNORE INTO _qof61_8_t_childdev_specialpp (hospcode,pid,cid,birth,sex,areacode,typearea,mhospcode,mpid,mcid,agemonth) (SELECT p.hospcode,p.pid,p.cid,p.birth,p.sex,p.areacode,p.typearea,mhospcode,mpid,mcid ,IF(age_18=1 AND age_9=1 , 18 ,0) FROM _qof61_8_t_childdev p ); INSERT IGNORE INTO _qof61_8_t_childdev_specialpp (hospcode,pid,cid,birth,sex,areacode,typearea,mhospcode,mpid,mcid,agemonth) (SELECT p.hospcode,p.pid,p.cid,p.birth,p.sex,p.areacode,p.typearea,mhospcode,mpid,mcid ,IF(age_18=1 AND age_9=1 , 9 ,0) FROM _qof61_8_t_childdev p ); DELETE FROM _qof61_8_t_childdev_specialpp WHERE agemonth=0; #/*อัพเดทช่วงวันที่ที่ทำแล้วถือว่าได้รับการคัดกรอง*/ UPDATE _qof61_8_t_childdev_specialpp SET date_start=DATE_ADD(BIRTH,INTERVAL 9 month) ,date_end=DATE_ADD(DATE_ADD(BIRTH,INTERVAL 10 month),INTERVAL -1 DAY) WHERE agemonth=9; UPDATE _qof61_8_t_childdev_specialpp SET date_start=DATE_ADD(BIRTH,INTERVAL 18 month) ,date_end=DATE_ADD(DATE_ADD(BIRTH,INTERVAL 19 month),INTERVAL -1 DAY) WHERE agemonth=18; UPDATE _qof61_8_t_childdev_specialpp SET date_start=DATE_ADD(BIRTH,INTERVAL 30 month) ,date_end=DATE_ADD(DATE_ADD(BIRTH,INTERVAL 31 month),INTERVAL -1 DAY) WHERE agemonth=30; UPDATE _qof61_8_t_childdev_specialpp SET date_start=DATE_ADD(BIRTH,INTERVAL 42 month) ,date_end=DATE_ADD(DATE_ADD(BIRTH,INTERVAL 43 month),INTERVAL -1 DAY) WHERE agemonth=42; #/*หาวันที่วันแรกที่ได้รับการตรวจเอาวันน้อยที่สุดจากวันเกิดที่มีรหัสที่กำหนด*/ UPDATE _qof61_8_t_childdev_specialpp s INNER JOIN ( SELECT s1.cid,s1.date_start, s1.date_end ,MIN(t1.date_serv) min_date_serv FROM _qof61_8_tmp_specialpp t1 INNER JOIN _qof61_8_t_childdev_specialpp s1 ON t1.cid=s1.cid WHERE t1.date_serv BETWEEN s1.date_start AND s1.date_end AND PPSPECIAL in('1B260','1B261','1B262' ,'1B200' ,'1B201','1B202','1B209','1B210','1B211','1B212' ,'1B219','1B220','1B221','1B222','1B229','1B230' ,'1B231','1B232','1B239','1B240','1B241','1B242','1B249') GROUP BY t1.cid,s1.date_start ) t ON s.cid=t.cid AND s.date_start=t.date_start SET s.date_serv_first= t.min_date_serv WHERE t.min_date_serv BETWEEN s.date_start AND s.date_end ; #/*อัพเดททgroup รหัสที่ทำวันแรกทั้งหมด*/ UPDATE _qof61_8_t_childdev_specialpp s INNER JOIN ( SELECT s1.cid,s1.date_serv_first ,GROUP_CONCAT(t1.PPSPECIAL ORDER BY t1.PPSPECIAL) gr_sp FROM _qof61_8_tmp_specialpp t1 INNER JOIN _qof61_8_t_childdev_specialpp s1 ON t1.cid=s1.cid WHERE t1.date_serv in(s1.date_serv_first) GROUP BY t1.cid,s1.date_serv_first ) t ON s.cid=t.cid AND s.date_serv_first=t.date_serv_first SET s.sp_first= t.gr_sp ; #/*สรุปผลครั้งแรกตามเงื่อนไข*/ UPDATE _qof61_8_t_childdev_specialpp SET status1=IF(INSTR(sp_first,'1B260'),1 ,IF(INSTR(sp_first,'1B261'),2 ,IF(INSTR(sp_first,'1B262'),3 ,NULL ))) WHERE date_serv_first IS NOT NULL; #/*สรุปผลครั้งแรกถ้าลงรหัสแบบที่ละด้านแบบเดิม*/ UPDATE _qof61_8_t_childdev_specialpp SET status1=IF( INSTR(sp_first,'1B200') AND INSTR(sp_first,'1B210') AND INSTR(sp_first,'1B220') AND INSTR(sp_first,'1B230') AND INSTR(sp_first,'1B240') ,1,NULL) WHERE date_serv_first IS NOT NULL AND status1 IS NULL; UPDATE _qof61_8_t_childdev_specialpp SET status1=IF( instr(sp_first,'1B201') OR instr(sp_first,'1B211') OR instr(sp_first,'1B221') OR instr(sp_first,'1B231') OR instr(sp_first,'1B241') ,2,NULL) WHERE date_serv_first IS NOT NULL AND status1 IS NULL; UPDATE _qof61_8_t_childdev_specialpp SET status1=IF( instr(sp_first,'1B202') OR instr(sp_first,'1B212') OR instr(sp_first,'1B222') OR instr(sp_first,'1B232') OR instr(sp_first,'1B242') ,3,NULL) WHERE date_serv_first IS NOT NULL AND status1 IS NULL; #/*อัพเดทวันที่ติดตามนับจากวันครั้งแรกถึงวันสุดท้ายที่ไม่เกิน 30 วันที่เป็นไปได้ กรณีผิดปกติ*/ UPDATE _qof61_8_t_childdev_specialpp SET date_serv2=DATE_ADD(date_serv_first,INTERVAL 30 day) WHERE date_serv_first IS NOT NULL AND status1 in(2) ; #/*หาวันที่วันสุดท้ายที่มาตรวจ ตามช่วง 30 วันที่กำหนด เปลี่ยนได้ตลอดจนกว่าจะเลย 30 วัน*/ UPDATE _qof61_8_t_childdev_specialpp s INNER JOIN ( SELECT s1.cid,s1.date_serv_first, s1.date_serv2 ,MAX(t1.date_serv) max_date_serv FROM _qof61_8_tmp_specialpp t1 INNER JOIN _qof61_8_t_childdev_specialpp s1 ON t1.cid=s1.cid WHERE t1.date_serv BETWEEN s1.date_serv_first AND s1.date_serv2 AND PPSPECIAL in('1B260' ,'1B200','1B202','1B210','1B212' ,'1B220','1B222','1B230','1B232' ,'1B240','1B242') GROUP BY t1.cid,s1.date_serv2 ) t ON s.cid=t.cid AND s.date_serv2=t.date_serv2 SET s.date_serv_last= t.max_date_serv WHERE t.max_date_serv BETWEEN s.date_serv_first AND s.date_serv2 AND t.max_date_serv > s.date_serv_first AND s.date_serv2 is not null; #/*อัพเดททgroup รหัสวันสุดท้ายกรณีที่ติดตาม จะเปลี่ยนแปลงได้ตลอดจนกว่าจะเลย 30 วันจึงจะสรุปได้จริง*/ UPDATE _qof61_8_t_childdev_specialpp s INNER JOIN ( SELECT s1.cid,s1.date_serv_last ,GROUP_CONCAT(t1.PPSPECIAL) gr_sp FROM _qof61_8_tmp_specialpp t1 INNER JOIN _qof61_8_t_childdev_specialpp s1 ON t1.cid=s1.cid WHERE t1.date_serv in(s1.date_serv_last) GROUP BY t1.cid,s1.date_serv_last ) t ON s.cid=t.cid AND s.date_serv_last=t.date_serv_last SET s.sp_last= t.gr_sp WHERE s.date_serv2 is not null ; #/*สรุปผลครั้งสุดท้าย*/ UPDATE _qof61_8_t_childdev_specialpp SET status21=IF(INSTR(sp_last,'1B202'),1,null), status22=IF(INSTR(sp_last,'1B212'),1,null), status23=IF(INSTR(sp_last,'1B222'),1,null), status24=IF(INSTR(sp_last,'1B232'),1,null), status25= IF(INSTR(sp_last,'1B242'),1,null) WHERE date_serv_last IS NOT NULL AND INSTR(sp_last,'1B260')=0 AND date_serv_last > date_serv_first AND NOW() > date_serv2 AND date_serv2 is not null; UPDATE _qof61_8_t_childdev_specialpp SET status2=IF(INSTR(sp_last,'1B260'),1,NULL) WHERE date_serv_last IS NOT NULL AND date_serv_last > date_serv_first AND status2 IS NULL AND date_serv2 is not null; #/*สรุปผลครั้งสุดท้ายถ้าลงรหัสแบบที่ละด้านแบบเดิม*/ UPDATE _qof61_8_t_childdev_specialpp SET status2=IF( INSTR(sp_last,'1B200') AND INSTR(sp_last,'1B210') AND INSTR(sp_last,'1B220') AND INSTR(sp_last,'1B230') AND INSTR(sp_last,'1B240') ,1,NULL) WHERE date_serv_last IS NOT NULL AND date_serv_last > date_serv_first AND status2 IS NULL AND date_serv2 is not null; SELECT p.check_hosp hospcode ,IFNULL(p.check_vhid,concat(h.provcode,h.distcode,h.subdistcode,SUBSTR(CONCAT('00',h.mu),-2))) AS 'areacode' ,DATE_FORMAT(now(),'%Y%m%d%H%i') as d_com ,IF(DATE_FORMAT(s.date_start,'%m') > 3,YEAR(s.date_start)+544,YEAR(s.date_start)+543) as 'b_year' #,s.date_start #,@b_year+543 as b_year ,DATE_FORMAT(s.date_start,'%m') AS 'date_start' ,s.agemonth,s.cid,s.status1 #result9_2 ,s.status2 ,s.status21,s.status22,s.status23,s.status24,s.status25 FROM _qof61_8_t_childdev_specialpp s INNER JOIN t_person_cid p ON s.cid=p.cid INNER JOIN chospital h ON p.HOSPCODE=h.hoscode WHERE p.check_typearea in(1,3) AND p.NATION in(99) AND p.DISCHARGE in(9) AND s.date_start BETWEEN @start_d AND @end_d AND substr(p.check_vhid ,1,2) = @prov_c AND h.provcode = @prov_c; #PROVIDER1_SQL# |
Script Cron | |
Force Script Cron | 0 |
Active | 1 |
Client Office Type | |
Create Date | 2018-06-12 01:28:45 |
Last Update | 2020-01-13 10:55:25 |
- Home
- About
- Privacy Policy
- Terms of Use
- Contact Us
© 2015. All Rights Reserved.