Mine

รูปภาพของฉัน
หาดใหญ่, ภาคใต้, Thailand
ชอบเอาใจ แต่ก็เอาแต่ใจ

วันจันทร์ที่ 6 กันยายน พ.ศ. 2553

โรคเรื้อรังครั้งแรกหรือไม่ ....

ไหนๆก็ไหนๆ แล้วนำมาฝากกันเพิ่มเติมอีกนิดค่ะ เพราะว่าลืมนึกถึงไปว่าโรคเดียวกันแต่มีหลาย ICD10 ดังนั้น รอบก่อนที่เขียนตาม ICD10 น่ะ ไม่ค่อยเป็นประโชย์มากนัก


รอบนี้เลยขอแก้ตัวใหม่ค่ะ ดูตามโรคกันไป แต่ในที่นี้ขอยกโรคเรื้อรัง ละกันนะคะ เพราะฐานข้อมูล Hospital OS จัดเก็บ โรคเรื้อรังไว้ค่ะ เราสามารถทราบได้ว่า ICD10 ไหนเป็นโรคเรื่อรังอะไรจากข้อมูลตรงนี้ค่ะ

เอาคำสั่งนี้ไปรัน นะคะ (รันครั้งเดียวก็พอ) 

 CREATE OR REPLACE FUNCTION check_new_disease(varchar, varchar, varchar, varchar,varchar) RETURNS bool AS
'
declare
    patient_id varchar;
    visit_id varchar;
    visit_icd10 varchar;   
    visit_datetime varchar;
    disease varchar;
    newvisit boolean;
    check_visit record;
begin
    patient_id = $1;
    visit_id = $2;
    visit_icd10 = $3;
    visit_datetime = $4;
    disease = $5; 
    newvisit = true;
  
    if (patient_id <> '''' and visit_id <> '''' and visit_icd10 <> '''' and disease <> '''' and visit_datetime <> '''')
    then  
            for check_visit in (select t_visit.t_visit_id as t_visit_id
                                        from t_visit inner join t_diag_icd10
                                                on t_visit.t_visit_id = t_diag_icd10.diag_icd10_vn and t_diag_icd10.diag_icd10_active = ''1''
                                                inner join b_group_icd10
                                                on upper(substring(b_group_icd10.group_icd10_number,1,3)) = upper(substring(t_diag_icd10.diag_icd10_number,1,3))
                                                 inner join b_group_chronic
                                                on b_group_icd10.b_group_chronic_id = b_group_chronic.b_group_chronic_id
                                        where t_visit.t_visit_id <> visit_id
                                                and t_visit.t_patient_id = patient_id
                                                and b_group_chronic.b_group_chronic_id = disease
                                                and t_visit.f_visit_status_id <> ''4''
                                                and substring(t_visit.visit_financial_discharge_time,1,10) < substring(visit_datetime,1,10))        
            loop
                if check_visit.t_visit_id is not null
                then newvisit = false;
                else
                --กรณี Join กันไม่สำเร็จ
                end if;
            end loop;
    else      newvisit = true;       
    end if;
    return newvisit;
end;
'
LANGUAGE 'plpgsql';

ตัวอย่างการนำไปใช้ ดังนี้ค่ะ
SELECT t_visit.t_visit_id
,t_visit.t_patient_id
,t_diag_icd10.diag_icd10_number
,b_group_chronic.b_group_chronic_id
,b_group_chronic.group_chronic_number
,b_group_chronic.group_chronic_description_th
--เรียกใช้ตรงนี้
,check_new_disease(t_visit.t_patient_id,t_visit.t_visit_id,t_diag_icd10.diag_icd10_number,t_visit.visit_financial_discharge_time,b_group_chronic.b_group_chronic_id)
FROM t_visit inner join t_diag_icd10
on t_visit.t_visit_id = t_diag_icd10.diag_icd10_vn and t_diag_icd10.diag_icd10_active = '1'
inner join b_group_icd10
on upper(substring(b_group_icd10.group_icd10_number,1,3)) = upper(substring(t_diag_icd10.diag_icd10_number,1,3))
inner join b_group_chronic
on b_group_icd10.b_group_chronic_id = b_group_chronic.b_group_chronic_id
where t_visit.f_visit_status_id <> '4'
and substring(t_visit.visit_financial_discharge_time,1,10) = '2553-04-01';


ยังไงก็ลองนำไปใช้ดูนะคะ ... ไม่แน่ใจว่าจะตรงตามที่ต้องการหรือเปล่า ก็สามารถนำไปปรับปรุงได้เลยค่ะ

3 ความคิดเห็น:

  1. วินิจฉัยครั้งแรกในชาตินี้ หรือนี่
    สุดยอดๆ เอาอีก อิอิ

    ตอบลบ
  2. แล้วถ้าต้องหา visit ครั้งล่าสุดที่มารับบริการล่ะครับอาจารย์
    เช่น มาตรวจแลปรายการ HbA1C เอาครั้งล่าสุด
    ขอบคุณครับ

    ตอบลบ
  3. หากต้องการตัวล่าสุดเราก็ต้องยึดตามวันที่ตรวจเป็นหลักนะคะ ซึ่งในตัวอย่างที่ยกมาต้องการดู "มาตรวจแลปรายการ HbA1C เอาครั้งล่าสุด" แสดงว่า SQL ที่จะอยู่ใน Function ของเราก็จะต้องเป็นข้อมูลจาก t_order, t_result_lab ซึ่งต้องส่ง t_patient_id และ b_item_id มาตรวจสอบ และดึงข้อมูลล่าสุดไปแสดง ส่วนคำสั่ง SQL นั้น เดี๋ยวจะลองเขียนดูนะคะ แล้วจะนำมาเผยแพร่อีกทีค่ะ ... จริงๆ หากเราเขียนโปรแกรมได้ก็จะง่ายกว่านี้นะคะ

    ตอบลบ