Template Google Sheets Quản Lý Phòng Khám và Bệnh Viện Nhỏ 2027

Template Google Sheets Quản Lý Phòng Khám và Bệnh Viện Nhỏ 2027
Phòng khám tư nhân và bệnh viện nhỏ tại Việt Nam đang đối mặt với áp lực số hóa ngày càng tăng. Trong khi các phần mềm y tế chuyên dụng như HIS (Hospital Information System) có giá từ 50-200 triệu đồng/năm, nhiều phòng khám vẫn đang quản lý bằng sổ sách thủ công hoặc Excel rời rạc. Google Sheets là giải pháp trung gian lý tưởng — miễn phí, truy cập mọi thiết bị, và đủ mạnh để xử lý 50-200 bệnh nhân/ngày.
Bài viết này cung cấp template Google Sheets hoàn chỉnh cho phòng khám nhỏ, kèm hướng dẫn chi tiết và các công thức tự động hóa.
Thách Thức Thực Tế của Phòng Khám Nhỏ
1. Quản Lý Lịch Hẹn Thủ Công
Hầu hết phòng khám nhỏ nhận lịch hẹn qua điện thoại, Zalo, Facebook — dẫn đến tình trạng:
- Đặt trùng giờ khám
- Quên thông báo cho bệnh nhân
- Không biết tổng số bệnh nhân trong ngày
- Khó phân công bác sĩ hợp lý
2. Hồ Sơ Bệnh Án Phân Tán
Hồ sơ giấy dễ thất lạc, khó tra cứu lịch sử bệnh nhân khi tái khám. Bệnh nhân phải kể lại từ đầu mỗi lần đến khám.
3. Quản Lý Thuốc và Vật Tư
Không kiểm soát được tồn kho thuốc, dẫn đến:
- Hết thuốc đột ngột
- Thuốc hết hạn không được phát hiện kịp thời
- Không biết chi phí vật tư thực tế
4. Báo Cáo Doanh Thu Thiếu Chính Xác
Cuối ngày/tháng mất nhiều thời gian tổng hợp doanh thu, không phân tích được hiệu suất theo bác sĩ hay dịch vụ.
Cấu Trúc Template Google Sheets Phòng Khám
Template được thiết kế với 7 sheets chính, mỗi sheet có chức năng riêng biệt:
Sheet 1: DASHBOARD — Tổng Quan Hoạt Động
Dashboard tự động cập nhật realtime với các chỉ số quan trọng:
- Tổng bệnh nhân hôm nay / tuần / tháng
- Doanh thu ngày / tháng / so sánh cùng kỳ
- Tỷ lệ bệnh nhân mới vs tái khám
- Top 5 dịch vụ được dùng nhiều nhất
- Bác sĩ có hiệu suất cao nhất tháng
- Cảnh báo thuốc sắp hết / hết hạn
// Ví dụ công thức Dashboard
// Tổng bệnh nhân hôm nay
=COUNTIFS('LICH_HEN'!C:C,TODAY(),'LICH_HEN'!G:G,"Đã khám")
// Doanh thu hôm nay
=SUMIFS('DOANH_THU'!E:E,'DOANH_THU'!A:A,TODAY())
// Tỷ lệ tái khám tháng này
=COUNTIFS('BENH_NHAN'!F:F,"Tái khám",'BENH_NHAN'!B:B,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1))/
COUNTA(FILTER('BENH_NHAN'!A:A,'BENH_NHAN'!B:B>=DATE(YEAR(TODAY()),MONTH(TODAY()),1)))
Sheet 2: LICH_HEN — Lịch Hẹn Bệnh Nhân
Quản lý toàn bộ lịch hẹn với các cột:
| Cột | Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|---|---|---|---|
| A | Mã Hẹn | Auto ID | HEN-2027-001 |
| B | Mã BN | Lookup | Liên kết BENH_NHAN |
| C | Ngày Hẹn | Date | Validate: không quá khứ |
| D | Giờ Hẹn | Time | Dropdown: 07:00-17:00 |
| E | Bác Sĩ | Dropdown | Từ sheet BAC_SI |
| F | Dịch Vụ | Dropdown | Khám tổng quát, Nha khoa... |
| G | Trạng Thái | Dropdown | Chờ / Đang khám / Đã khám / Hủy |
| H | Ghi Chú | Text | Lý do hẹn, yêu cầu đặc biệt |
| I | Điện Thoại | Text | Auto-fill từ BENH_NHAN |
// Kiểm tra trùng lịch hẹn (Conditional Formatting)
// Highlight đỏ nếu trùng giờ + bác sĩ
=COUNTIFS($C:$C,$C2,$D:$D,$D2,$E:$E,$E2,$G:$G,"<>Hủy")>1
// Auto-fill tên bệnh nhân từ mã BN
=IF(B2="","",VLOOKUP(B2,'BENH_NHAN'!A:C,2,FALSE))
// Đếm số lịch hẹn theo bác sĩ hôm nay
=COUNTIFS(C:C,TODAY(),E:E,E2,G:G,"<>Hủy")
Sheet 3: BENH_NHAN — Hồ Sơ Bệnh Nhân
Cơ sở dữ liệu bệnh nhân với đầy đủ thông tin cần thiết:
- Mã BN: BN-2027-0001 (auto-generate)
- Họ Tên: Tên đầy đủ
- Ngày Sinh / Tuổi: Auto-calculate tuổi từ ngày sinh
- Giới Tính: Nam / Nữ / Khác
- CCCD / BHYT: Số bảo hiểm y tế
- Điện Thoại / Địa Chỉ: Thông tin liên hệ
- Tiền Sử Bệnh: Dị ứng, bệnh mãn tính
- Lần Đầu Đến: Ngày khám lần đầu
- Lần Cuối Đến: Auto-lookup từ LICH_HEN
- Tổng Số Lần Khám: COUNTIF từ LICH_HEN
// Tự động tính tuổi bệnh nhân
=IF(D2="","",DATEDIF(D2,TODAY(),"Y")&" tuổi")
// Tổng số lần khám của bệnh nhân
=COUNTIFS('LICH_HEN'!B:B,A2,'LICH_HEN'!G:G,"Đã khám")
// Lần khám gần nhất
=IFERROR(MAXIFS('LICH_HEN'!C:C,'LICH_HEN'!B:B,A2,'LICH_HEN'!G:G,"Đã khám"),"Chưa khám")
// Phân loại: Mới / Tái khám
=IF(COUNTIFS('LICH_HEN'!B:B,A2,'LICH_HEN'!G:G,"Đã khám")<=1,"Mới","Tái khám")
Sheet 4: HO_SO_KHAM — Bệnh Án Điện Tử Cơ Bản
Ghi chép thông tin khám bệnh theo từng lượt:
Các trường thông tin:
- Mã Khám: KH-2027-001
- Mã BN / Tên BN (auto-fill)
- Ngày Giờ Khám
- Bác Sĩ Khám
- Triệu Chứng / Lý Do Đến Khám
- Chẩn Đoán Sơ Bộ
- Chẩn Đoán Chính (ICD-10 code nếu có)
- Huyết Áp / Nhịp Tim / Nhiệt Độ / Cân Nặng / Chiều Cao
- Phác Đồ Điều Trị
- Đơn Thuốc (liên kết ĐON_THUOC)
- Tái Khám Sau: X ngày
- Ghi Chú Bác Sĩ
Sheet 5: DON_THUOC — Kê Đơn và Theo Dõi Thuốc
Quản lý đơn thuốc và tồn kho:
// Cấu trúc sheet ĐON_THUOC
Mã Đơn | Mã Khám | Tên Thuốc | Hàm Lượng | Số Lượng | Đơn Vị | Liều Dùng | Số Ngày | Thành Tiền
// Kiểm tra tồn kho khi kê đơn (Data Validation warning)
=IF(VLOOKUP(C2,'KHO_THUOC'!A:D,4,FALSE)
Sheet 6: KHO_THUOC — Quản Lý Vật Tư Y Tế
Theo dõi tồn kho thuốc và vật tư:
| Cột | Nội Dung | Công Thức / Ghi Chú |
|---|---|---|
| A | Mã Thuốc / Vật Tư | THUOC-001 |
| B | Tên Thuốc | Tên thương mại |
| C | Hoạt Chất | INN name |
| D | Tồn Kho Hiện Tại | =Nhập - Xuất (qua Apps Script) |
| E | Đơn Vị | Viên / Lọ / Hộp / ml |
| F | Tồn Kho Tối Thiểu | Ngưỡng cảnh báo |
| G | Hạn Sử Dụng | Date format |
| H | Giá Nhập | Giá mua vào |
| I | Giá Bán / Kê Đơn | Giá tính cho bệnh nhân |
| J | Trạng Thái | =IF(D2<=F2,"⚠️ Sắp hết",IF(G2<=TODAY()+30,"⚠️ Gần hết hạn","✓ OK")) |
// Danh sách thuốc sắp hết (dùng FILTER)
=FILTER(B2:J100,(D2:D100<=F2:F100)+(G2:G100<=TODAY()+30),"Không có cảnh báo")
// Giá trị tồn kho hiện tại
=SUMPRODUCT(D2:D100*H2:H100)
// Thuốc hết hạn trong 30 ngày tới
=COUNTIFS(G:G,"<="&TODAY()+30,G:G,">="&TODAY(),D:D,">0")
Sheet 7: DOANH_THU — Theo Dõi Tài Chính
Ghi nhận và phân tích doanh thu:
Cấu trúc:
- Ngày Thu Tiền
- Mã Khám / Mã BN
- Dịch Vụ (Khám bệnh / Xét nghiệm / Kê đơn / Thủ thuật)
- Bác Sĩ Thực Hiện
- Tiền Dịch Vụ
- Tiền Thuốc
- Bảo Hiểm Y Tế (nếu có)
- Bệnh Nhân Tự Trả
- Hình Thức Thanh Toán (Tiền mặt / Chuyển khoản / BHYT)
- Ghi Chú
// Doanh thu theo bác sĩ tháng này
=SUMIFS(F:F,B:B,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),D:D,"BS.Nguyễn Văn A")
// Doanh thu theo dịch vụ
=SUMIF(C:C,"Khám bệnh",F:F)
// Báo cáo so sánh tháng này vs tháng trước
=SUMIFS(F:F,A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),A:A,"<="&TODAY())
- SUMIFS(F:F,A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY())-1,1),
A:A,"<="&DATE(YEAR(TODAY()),MONTH(TODAY()),0))
Formulas Nâng Cao cho Phòng Khám
Theo Dõi Lịch Hẹn Thông Minh
// Danh sách bệnh nhân chờ khám hôm nay (sắp xếp theo giờ)
=SORT(FILTER('LICH_HEN'!A:I,('LICH_HEN'!C:C=TODAY())*('LICH_HEN'!G:G="Chờ")),4,TRUE)
// Cảnh báo bệnh nhân chưa đến mặc dù đã qua giờ hẹn 30 phút
=FILTER('LICH_HEN'!A:I,
('LICH_HEN'!C:C=TODAY())*
('LICH_HEN'!D:D
Phân Tích Bệnh Nhân
// Bệnh nhân mới vs tái khám theo tháng
=COUNTIFS('BENH_NHAN'!H:H,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),
'BENH_NHAN'!J:J,"Mới")
// Bệnh nhân quay lại sau 3 tháng (retention)
=COUNTIFS('LICH_HEN'!G:G,"Đã khám",
'LICH_HEN'!C:C,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),
'LICH_HEN'!B:B,"<>&0")
// Phân tích độ tuổi bệnh nhân (histogram data)
=COUNTIFS('BENH_NHAN'!E:E,">=0",'BENH_NHAN'!E:E,"<18") // Trẻ em
=COUNTIFS('BENH_NHAN'!E:E,">=18",'BENH_NHAN'!E:E,"<60") // Người lớn
=COUNTIFS('BENH_NHAN'!E:E,">=60") // Người cao tuổi
Phân Tích Doanh Thu Đa Chiều
// Doanh thu theo ngày trong tuần (để tối ưu lịch làm việc)
=SUMPRODUCT((WEEKDAY('DOANH_THU'!A:A)=2)*'DOANH_THU'!F:F) // Thứ 2
=SUMPRODUCT((WEEKDAY('DOANH_THU'!A:A)=3)*'DOANH_THU'!F:F) // Thứ 3
// Dịch vụ có doanh thu cao nhất
=INDEX(C:C,MATCH(MAX(F:F),F:F,0))
// Revenue per patient (doanh thu trung bình/bệnh nhân)
=AVERAGEIFS('DOANH_THU'!F:F,'DOANH_THU'!A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1))
// Tỷ lệ đóng góp BHYT vs tự trả
=SUMIFS(H:H,A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1)) /
SUMIFS(F:F,A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1))
Hướng Dẫn Bảo Mật Dữ Liệu Bệnh Nhân
Nguyên Tắc Bảo Mật Thông Tin Y Tế
Theo Luật Khám Bệnh, Chữa Bệnh 2023 và các quy định về bảo mật thông tin sức khỏe:
- Giới hạn quyền truy cập: Chỉ bác sĩ và nhân viên y tế được phép đọc hồ sơ bệnh án
- Protected Ranges: Khóa sheet HO_SO_KHAM và BENH_NHAN với nhân viên lễ tân
- Audit Log: Ghi lại ai truy cập/sửa dữ liệu bệnh nhân và khi nào
- Không chia sẻ link public: Tất cả sheets phải ở chế độ "Restricted"
Cài Đặt Phân Quyền Google Sheets
// Apps Script: Ghi audit log khi truy cập hồ sơ bệnh nhân
function onOpen(e) {
const user = Session.getActiveUser().getEmail();
const timestamp = new Date().toISOString();
const ss = SpreadsheetApp.getActiveSpreadsheet();
const logSheet = ss.getSheetByName('AUDIT_LOG');
logSheet.appendRow([timestamp, user, 'Mở file', ss.getName()]);
}
function onEdit(e) {
const user = Session.getActiveUser().getEmail();
const timestamp = new Date().toISOString();
const range = e.range;
const sheetName = range.getSheet().getName();
// Chỉ log khi sửa sheets nhạy cảm
if (['BENH_NHAN','HO_SO_KHAM','DON_THUOC'].includes(sheetName)) {
const logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('AUDIT_LOG');
logSheet.appendRow([
timestamp, user, sheetName,
range.getA1Notation(),
e.oldValue || '', e.value || ''
]);
}
}
Cài Đặt Protected Ranges
Phân quyền theo vai trò:
┌─────────────────┬──────────┬──────────┬──────────┬──────────┐
│ Sheet │ Bác Sĩ │ Y Tá │ Lễ Tân │ Kế Toán │
├─────────────────┼──────────┼──────────┼──────────┼──────────┤
│ DASHBOARD │ Xem │ Xem │ Xem │ Xem │
│ LICH_HEN │ Sửa │ Sửa │ Sửa │ Xem │
│ BENH_NHAN │ Sửa │ Xem │ Xem* │ Không │
│ HO_SO_KHAM │ Sửa │ Xem │ Không │ Không │
│ DON_THUOC │ Sửa │ Sửa │ Không │ Xem │
│ KHO_THUOC │ Xem │ Sửa │ Không │ Xem │
│ DOANH_THU │ Xem │ Không │ Nhập │ Sửa │
│ AUDIT_LOG │ Xem │ Không │ Không │ Không │
└─────────────────┴──────────┴──────────┴──────────┴──────────┘
*Lễ tân chỉ xem tên + điện thoại, không xem tiền sử bệnh
Hướng Dẫn Cài Đặt Template
Bước 1: Thiết Lập Ban Đầu
- Tạo Google Sheets mới, đặt tên: "Phòng Khám [Tên Phòng Khám] - 2027"
- Tạo 7 sheets: DASHBOARD, LICH_HEN, BENH_NHAN, HO_SO_KHAM, DON_THUOC, KHO_THUOC, DOANH_THU
- Thêm sheet: BAC_SI, DICH_VU, AUDIT_LOG
- Setup Data Validation cho các dropdown
Bước 2: Nhập Dữ Liệu Gốc
Sheet BAC_SI:
- Mã BS | Họ Tên | Chuyên Khoa | Điện Thoại | Email | Lịch Làm Việc
Sheet DICH_VU:
- Mã DV | Tên Dịch Vụ | Giá | Đơn Vị | Mô Tả | Bảo Hiểm Y Tế (Có/Không)
Ví dụ dịch vụ:
DV001 | Khám Nội Tổng Quát | 150,000 | Lần | - | Có
DV002 | Khám Nhi | 120,000 | Lần | - | Có
DV003 | Xét Nghiệm Máu Cơ Bản | 200,000 | Bộ | - | Có
DV004 | Siêu Âm Bụng | 250,000 | Lần | - | Có
DV005 | Điện Tim (ECG) | 180,000 | Lần | - | Có
Bước 3: Thiết Lập Cảnh Báo Tự Động
// Apps Script: Gửi email cảnh báo thuốc sắp hết mỗi sáng
function checkInventoryAlert() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const khoSheet = ss.getSheetByName('KHO_THUOC');
const data = khoSheet.getDataRange().getValues();
let alertItems = [];
for (let i = 1; i < data.length; i++) {
const tenThuoc = data[i][1];
const tonKho = data[i][3];
const tonMin = data[i][5];
const hanSD = data[i][6];
if (tonKho <= tonMin) {
alertItems.push(tenThuoc + ' - Tồn: ' + tonKho + ' (Min: ' + tonMin + ')');
}
const daysUntilExpiry = (new Date(hanSD) - new Date()) / (1000*60*60*24);
if (daysUntilExpiry <= 30 && daysUntilExpiry > 0) {
alertItems.push(tenThuoc + ' - Hết hạn sau ' + Math.floor(daysUntilExpiry) + ' ngày');
}
}
if (alertItems.length > 0) {
GmailApp.sendEmail(
'phongkham@email.com',
'⚠️ Cảnh Báo Thuốc - ' + new Date().toLocaleDateString('vi-VN'),
'Danh sách cần chú ý:
' + alertItems.join('
')
);
}
}
// Thiết lập trigger chạy lúc 7:00 sáng mỗi ngày
// Extensions > Apps Script > Triggers > Add Trigger
// Function: checkInventoryAlert | Time-driven | Day timer | 7am-8am
Tích Hợp và Mở Rộng
Kết Nối Zalo Business
Dùng Zapier hoặc Make.com để tự động gửi nhắc nhở lịch hẹn qua Zalo:
- Trigger: Google Sheets row added (LICH_HEN)
- Action: Gửi Zalo message cho số điện thoại bệnh nhân
- Message: "Phòng Khám [Tên] nhắc lịch hẹn ngày [Ngày] lúc [Giờ] với BS [Tên]. Phòng khám: [Địa chỉ]"
Xuất Báo Cáo PDF Hàng Tháng
// Apps Script: Tự động tạo báo cáo tháng
function generateMonthlyReport() {
const month = new Date().getMonth();
const year = new Date().getFullYear();
// Tạo spreadsheet báo cáo mới
const report = SpreadsheetApp.create('Báo Cáo Tháng ' + (month) + '/' + year);
// Copy dữ liệu tổng hợp vào báo cáo
// ... (logic tổng hợp)
// Xuất PDF
const pdf = DriveApp.getFileById(report.getId()).getAs('application/pdf');
GmailApp.sendEmail('bsgiamdoc@email.com', 'Báo Cáo Tháng ' + month + '/' + year,
'Kính gửi Giám Đốc, Báo cáo tháng ' + month, {attachments: [pdf]});
}
Câu Hỏi Thường Gặp (FAQ)
A: Template phù hợp cho phòng khám 20-100 bệnh nhân/ngày. Với Google Sheets có thể chứa tối đa 5 triệu ô, đủ dùng trong nhiều năm. Nếu phòng khám lớn hơn hoặc cần BHYT điện tử, nên xem xét phần mềm HIS chuyên dụng.
A: Google Sheets app trên iOS/Android hoạt động tốt cho việc tra cứu và nhập liệu cơ bản. Tuy nhiên, các tính năng phức tạp (FILTER, SORT động) nên dùng trên máy tính để tránh lỗi hiển thị.
A: Template giúp quản lý nội bộ, KHÔNG thay thế phần mềm kết nối BHYT điện tử bắt buộc theo Thông tư 30/2018/TT-BYT. Phòng khám vẫn cần phần mềm BHYT riêng để kết nối với cổng BHXH.
A: Google Drive tự động backup và có 30 ngày revision history. Nên bổ sung: (1) Download Excel hàng tháng, (2) Apps Script tự động backup sang Google Drive folder riêng mỗi tuần.
A: Google Sheets miễn phí với Google Account thường. Nên dùng Google Workspace Business Starter (6 USD/user/tháng) để có: custom email, storage 30GB/user, admin controls, và hỗ trợ ưu tiên — rất xứng đáng cho môi trường y tế.
So Sánh với Phần Mềm Y Tế Chuyên Dụng
| Tiêu Chí | Google Sheets | Phần Mềm HIS | Phần Mềm Phòng Khám Nhỏ |
|---|---|---|---|
| Chi Phí | Miễn phí - 6$/tháng | 50-200 triệu/năm | 2-10 triệu/năm |
| Cài Đặt | Ngay lập tức | 2-6 tháng | 1-4 tuần |
| BHYT Điện Tử | Không | Có | Có (một số) |
| Kết Nối BHXH | Không | Có | Có |
| Tùy Biến | Rất cao | Thấp | Trung bình |
| Đào Tạo | 1-2 ngày | 1-3 tháng | 1-2 tuần |
| Phù Hợp Với | PK nhỏ, phòng mạch | Bệnh viện, PK lớn | PK vừa |
Kết Luận
Template Google Sheets phòng khám là điểm khởi đầu hoàn hảo cho các phòng mạch và phòng khám nhỏ đang muốn số hóa quy trình mà không cần đầu tư lớn. Với chi phí gần như bằng 0 và khả năng tùy biến cao, bạn có thể triển khai trong 1-2 ngày và cải tiến dần theo nhu cầu thực tế.
Khi phòng khám phát triển đến 100+ bệnh nhân/ngày hoặc cần kết nối BHYT điện tử, đó là lúc chuyển sang phần mềm chuyên dụng. Nhưng cho đến đó, Google Sheets hoàn toàn đáp ứng được nhu cầu quản lý cơ bản và phân tích hiệu suất.
Cần template đã xây dựng sẵn hoặc tư vấn cài đặt cho phòng khám của bạn? Liên hệ SheetStore để được hỗ trợ.
📚 Bài Viết Liên Quan
- Template Google Sheets Báo Cáo Bán Hàng Theo Vùng và Đại Lý 2027: Phân Tích Đa Chiều
- Google Sheets Nâng Cao Bài 9: Bảo Mật, Phân Quyền và Chia Sẻ Chuyên Nghiệp
- Google Sheets Nâng Cao Bài 4: Hàm QUERY - Lọc và Phân Tích Dữ Liệu Chuyên Nghiệp
- Template Google Sheets Báo Cáo Tài Chính Tháng và Quý 2027: Tự Động Từ Sổ Sách
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.