3.Defect #3667
closed[Dashboard] รว. > ปรับความสูงกล่อง และเพิ่ม map แสดงเคสในพื้นที่ที่อยู่ผู้ป่วย และพื้นที่แพร่เชื้อ
0%
Description
- ปรับวันที่ค้นหาแยกช่องกัน
- ปรับความสูงกล่องให้เตี้ยลง

- ปรับการแสดงกราฟให้ balance กับพื้นที่ในกรอบ

- เพิ่ม map แสดงเคสในพื้นที่ที่อยู่ผู้ป่วย และพื้นที่แพร่เชื้อ โดยแสดงข้อมูลถึงแค่ระดับตำบล ใน map เดียวกัน
filter : พื้นที่ที่อยู่ผู้ป่วย , พื้นที่แหล่งแพร่เชื้อ , ทั้งพื้นที่ที่อยู่ผู้ป่วยและแหล่งแพร่เชื้อ
รายละเอียด map และตาราง
-map : แสดงตำแหน่งตำบลบน interactive map พร้อม marker และ polygon
-ตาราง : แสดงรายละเอียดผู้ป่วยและแหล่งแพร่เชื้อแยก 2 ตาราง
ทั้งสองส่วนเชื่อมกันแบบ two-way: คลิก marker บน map → highlight แถวในตาราง / คลิกแถวในตาราง → map zoom ไปตำบลนั้น
field ในตาราง ที่อยู่ผู้ป่วย : จังหวัด อำเภอ ตำบล ปรเทศ พบเชื้อ F V M K Mix รอสอบ
field ในตาราง แหล่งแพร่เชื้อ : จังหวัด อำเภอ ตำบล ปรเทศ จำนวนเคสที่ติดเชื้อจากจุดนี้ การตัดสินชนิดเชื้อ

query : ที่อยู่ผู้ป่วย¶
SELECT
ct.COUNTRY_NAME_TH,
dst.SUBDISTRICT_NAME_TH,
ds.DISTRICT_NAME_TH,
pv.PROVINCE_NAME_TH,
COUNT(CASE WHEN NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') IS NOT NULL OR NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NOT NULL THEN 1 END) AS num_pos,
COUNT(CASE WHEN
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') = '02'
OR (NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NULL
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') = '02')
THEN 1 END) AS F,
COUNT(CASE WHEN
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') = '03'
OR (NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NULL
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') = '05')
THEN 1 END) AS V,
COUNT(CASE WHEN
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NULL
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') = '06'
THEN 1 END) AS M,
COUNT(CASE WHEN
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NULL
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') = '15'
THEN 1 END) AS O,
COUNT(CASE WHEN
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NULL
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') = '16'
THEN 1 END) AS K,
COUNT(CASE WHEN
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NULL
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01')
IN ('03','04','07','08','09','10','11','12','13','14','17','18')
THEN 1 END) AS Mix,
COUNT(CASE WHEN
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') NOT IN ('02','03')
AND NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NOT NULL
OR (
NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NULL
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') NOT IN
('02','03','04','05','06','07','08','09','10',
'11','12','13','14','15','16','17','18')
AND NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') IS NOT NULL
)
THEN 1 END) AS Unknow,
COUNT(CASE WHEN (
NULLIF(NULLIF(EP1_BLOOD_TEST_RESULT_CODE,''),'01') IS NOT NULL
OR NULLIF(NULLIF(EP1_RDT_RESULT_CODE,''),'01') IS NOT NULL
)
AND ep1.EP1_EP3_STATUS = '01'
AND ISNULL(ep1.EP1_IS_TRANSFER,'') = ''
THEN 1 END) AS wait_investigate
FROM
[TBL_EP_EP1] ep1
LEFT JOIN TBL_MS_PROVINCE pv ON pv.PROVINCE_ID = SUBSTRING(EP1.EP1_P_SITE_ID,1,2)
LEFT JOIN TBL_MS_DISTRICT ds ON ds.DISTRICT_ID = SUBSTRING(EP1.EP1_P_SITE_ID,1,4)
LEFT JOIN TBL_MS_SUBDISTRICT dst ON dst.SUBDISTRICT_ID = SUBSTRING(EP1.EP1_P_SITE_ID,1,6)
LEFT join TBL_MS_COUNTRY ct on ct.COUNTRY_ID = ep1.EP1_P_COUNTRY_ID
WHERE ((EP1_BLOOD_TEST_RESULT_CODE > '01') OR (EP1_RDT_RESULT_CODE > '01') )
AND EP1_ORG_ID = @param_org_id
AND [EP1_BLOOD_DRAW_DATE] BETWEEN @param_stdate AND @param_eddate
GROUP BY
pv.PROVINCE_NAME_TH,
ds.DISTRICT_NAME_TH,
dst.SUBDISTRICT_NAME_TH,
ct.COUNTRY_NAME_TH
ORDER BY
num_pos desc,SUBDISTRICT_NAME_TH
query : แหล่งแพร่เชื้อ¶
SELECT
ct.COUNTRY_NAME_TH,
dst.SUBDISTRICT_NAME_TH,
ds.DISTRICT_NAME_TH,
pv.PROVINCE_NAME_TH,
COUNT(ep3.EP1_ID) AS total_case,
cls.case_classification
FROM
[TBL_EP_EP3] ep3
INNER JOIN TBL_EP_EP1 ep1
ON ep3.EP1_ID = ep1.EP1_ID
AND ep1.EP1_EP3_STATUS = '02'
-- subquery นับและ concat แยกก่อน
INNER JOIN (
SELECT
agg.EP3_SITE_ID,
STRING_AGG(
DESCRIPTION_EN + ':' + CAST(cnt AS VARCHAR),
', '
) WITHIN GROUP (ORDER BY DESCRIPTION_EN) AS case_classification
FROM (
-- นับแยกตาม site + classification ก่อน
SELECT
substring(ep3_c.EP3_SITE_ID,1,6) as EP3_SITE_ID,
code_inner.DESCRIPTION_EN,
COUNT(*) AS cnt
FROM TBL_EP_EP3 ep3_c
INNER JOIN TBL_EP_EP1 ep1_c
ON ep3_c.EP1_ID = ep1_c.EP1_ID
AND ep1_c.EP1_EP3_STATUS = '02'
INNER JOIN TBL_MS_DEFINE_CODE code_inner
ON code_inner.MAJOR = '17'
AND code_inner.MINOR = ISNULL(ep3_c.EP3_CASE_CLASSIFICATION_NEW_PATIENT_CODE,
ep3_c.EP3_CASE_CLASSIFICATION_OLD_PATIENT_CODE)
WHERE ep3_c.EP3_TREAT_PLACE_ID_FU = @param_org_id
AND ep1_c.EP1_BLOOD_DRAW_DATE BETWEEN @param_stdate AND @param_eddate
GROUP BY
substring(ep3_c.EP3_SITE_ID,1,6),
code_inner.DESCRIPTION_EN
) agg
GROUP BY agg.EP3_SITE_ID
) cls ON substring(cls.EP3_SITE_ID,1,6) = substring(ep3.EP3_SITE_ID,1,6)
LEFT JOIN TBL_MS_PROVINCE pv
ON pv.PROVINCE_ID = SUBSTRING(cls.EP3_SITE_ID,1,2)
LEFT JOIN TBL_MS_DISTRICT ds
ON ds.DISTRICT_ID = SUBSTRING(cls.EP3_SITE_ID,1,4)
LEFT JOIN TBL_MS_SUBDISTRICT dst
ON dst.SUBDISTRICT_ID = SUBSTRING(cls.EP3_SITE_ID,1,6)
LEFT JOIN TBL_MS_COUNTRY ct
ON ct.COUNTRY_ID = ep3.EP3_COUNTRY_ID
WHERE ep3.EP3_TREAT_PLACE_ID_FU = @param_org_id
AND ep1.EP1_BLOOD_DRAW_DATE BETWEEN @param_stdate AND @param_eddate
GROUP BY
dst.SUBDISTRICT_NAME_TH,
ds.DISTRICT_NAME_TH,
pv.PROVINCE_NAME_TH,
ct.COUNTRY_NAME_TH,
cls.case_classification
ORDER BY total_case DESC;
Files
Subtasks
Related issues


