ไอเดีย #49: ระบบเบิกจ่ายยาและเวชภัณฑ์ในโรงพยาบาล
เภสัชกรที่ดูแลคลังยาโรงพยาบาลชุมชนเคยบ่นให้ผมฟังว่า สิ้นปีงบประมาณทีไรต้องนั่งนับสต็อกจนดึก แล้วก็เจอยาหมดอายุซุกอยู่หลังชั้นเป็นลัง ทั้งที่อีกหน่วยงานเพิ่งขอเบิกยาตัวเดียวกันไปแล้วได้คำตอบว่าหมด ใบเบิกยังเป็นกระดาษ ลงบัญชีคุมในสเปรดชีต ข้อมูลระหว่างคลังใหญ่กับห้องยาย่อยไม่เคยตรงกัน ระบบเบิกจ่ายที่รู้ lot และวันหมดอายุจึงช่วยลดทั้งของเสียและความเสี่ยงต่อผู้ป่วย
ใครจะใช้
- เจ้าหน้าที่คลังเวชภัณฑ์ — รับของเข้า จ่ายของออก ตรวจนับ และจัดการ lot
- หน่วยเบิก — หอผู้ป่วย ห้องฉุกเฉิน ห้องยาย่อย ที่ส่งใบเบิกออนไลน์
- หัวหน้าฝ่าย/เภสัชกร — อนุมัติใบเบิก ดูยาใกล้หมดอายุ และสต็อกต่ำกว่าจุดสั่งซื้อ
- ฝ่ายพัสดุ/บัญชี — ดูมูลค่าคงคลังและรายงานการใช้
ฟีเจอร์ขั้นต่ำ (MVP)
- ทะเบียนยาและเวชภัณฑ์ มีรหัส หน่วยนับ หน่วยบรรจุ และจุดสั่งซื้อขั้นต่ำ
- รับเข้าตาม lot ระบุเลข lot วันหมดอายุ ราคาทุน และผู้ขาย
- หน่วยงานสร้างใบเบิกออนไลน์ ผ่านการอนุมัติ แล้วคลังจ่ายจริงตามจำนวนที่มี
- จ่ายแบบ FEFO คือ lot ที่หมดอายุก่อนออกก่อน โดยระบบเลือก lot ให้อัตโนมัติ
- สต็อกแยกตามคลัง และโอนระหว่างคลังได้
- แจ้งเตือนยาที่จะหมดอายุภายในช่วงที่กำหนด และยาที่ต่ำกว่าจุดสั่งซื้อ
- บัญชีคุมรายตัว (stock card) ย้อนดูได้ทุกความเคลื่อนไหว พร้อมตรวจนับและปรับยอด
ต่อยอดได้อีก
- สแกนบาร์โค้ดตอนรับและจ่าย ลดการคีย์ผิด
- คำนวณปริมาณที่ควรสั่งจากอัตราการใช้ย้อนหลัง
- ติดตามยาควบคุมพิเศษที่ต้องบันทึกละเอียดกว่าปกติ
- แอปมือถือ Flutter สำหรับตรวจนับหน้าชั้นวาง
โครงข้อมูลตั้งต้น
items— id, code, name, unit, pack_size, reorder_point, is_controlledwarehouses— id, name, type, parent_idlots— id, item_id, lot_no, expiry_date, unit_cost, supplier_idstock_balances— warehouse_id, lot_id, qty (primary key คู่ warehouse และ lot)requisitions/requisition_lines— id, from_dept_id, status, approved_by / item_id, qty_requested, qty_issuedstock_movements— id, lot_id, warehouse_id, type, qty, ref_type, ref_id, created_by, created_at
ระดับความยาก และสิ่งที่จะได้เรียนรู้
ระดับ ท้าทาย ตัว CRUD ไม่ยาก แต่ความถูกต้องของยอดคงเหลือคือหัวใจ ทำด้วย Yii2 หรือ Laravel + PostgreSQL/MySQL ได้ สิ่งที่จะได้เรียนรู้:
- ออกแบบระบบคลังแบบ movement ledger ที่ยอดคงเหลือคำนวณย้อนได้เสมอ
- เขียน logic FEFO และการตัดหลาย lot ในใบเบิกเดียว
- ใช้ transaction กับ SELECT ... FOR UPDATE กันยอดติดลบ
- workflow อนุมัติหลายขั้น และรายงานมูลค่าคงคลัง
ข้อควรระวัง
- ถ้าสองใบเบิกตัดยา lot เดียวกันพร้อมกัน อาจเกิด race condition ทำให้สต็อกติดลบ ต้องล็อกแถวยอดคงเหลือทุกครั้ง
- ห้ามแก้หรือลบ movement ย้อนหลัง ให้ทำรายการปรับปรุงแทนพร้อมเหตุผล เพื่อให้ตรวจสอบได้
- วิธีคิดต้นทุนและรายงานที่ต้องส่งหน่วยงานต้นสังกัดอาจมีระเบียบเฉพาะ ควรตรวจสอบกับฝ่ายพัสดุ บัญชี และระเบียบล่าสุดก่อนออกแบบ
ใครเคยทำระบบคลังยาหรือคลังพัสดุของโรงพยาบาลบ้างครับ เก็บยอดคงเหลือเป็นตารางสรุปหรือคำนวณจาก movement ทุกครั้ง แล้วเจอปัญหาอะไรตอนตรวจนับสิ้นปี มาแลกเปลี่ยนหรือแชร์โครงสร้างที่ใช้จริงในบอร์ดนี้ได้เลย