Hướng dẫn

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

Tuân HoangTuân Hoang
11 phút đọc
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ộtTên CộtKiểu Dữ LiệuMô Tả
AMã HẹnAuto IDHEN-2027-001
BMã BNLookupLiên kết BENH_NHAN
CNgày HẹnDateValidate: không quá khứ
DGiờ HẹnTimeDropdown: 07:00-17:00
EBác SĩDropdownTừ sheet BAC_SI
FDịch VụDropdownKhám tổng quát, Nha khoa...
GTrạng TháiDropdownChờ / Đang khám / Đã khám / Hủy
HGhi ChúTextLý do hẹn, yêu cầu đặc biệt
IĐiện ThoạiTextAuto-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ộtNội DungCông Thức / Ghi Chú
AMã Thuốc / Vật TưTHUOC-001
BTên ThuốcTên thương mại
CHoạt ChấtINN name
DTồn Kho Hiện Tại=Nhập - Xuất (qua Apps Script)
EĐơn VịViên / Lọ / Hộp / ml
FTồn Kho Tối ThiểuNgưỡng cảnh báo
GHạn Sử DụngDate format
HGiá NhậpGiá mua vào
IGiá Bán / Kê ĐơnGiá tính cho bệnh nhân
JTrạ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="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),
          'LICH_HEN'!C:C,"<="&TODAY(),
          'LICH_HEN'!G:G,"Hủy") /
COUNTIFS('LICH_HEN'!C:C,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),
         'LICH_HEN'!C:C,"<="&TODAY())

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:

  1. 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
  2. Protected Ranges: Khóa sheet HO_SO_KHAM và BENH_NHAN với nhân viên lễ tân
  3. Audit Log: Ghi lại ai truy cập/sửa dữ liệu bệnh nhân và khi nào
  4. 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

  1. Tạo Google Sheets mới, đặt tên: "Phòng Khám [Tên Phòng Khám] - 2027"
  2. Tạo 7 sheets: DASHBOARD, LICH_HEN, BENH_NHAN, HO_SO_KHAM, DON_THUOC, KHO_THUOC, DOANH_THU
  3. Thêm sheet: BAC_SI, DICH_VU, AUDIT_LOG
  4. 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)

Q: Template này có thể dùng cho phòng khám bao nhiêu bệnh nhân/ngày?

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.

Q: Có thể dùng trên điện thoại khô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ị.

Q: Template có tuân thủ quy định BHYT không?

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.

Q: Backup dữ liệu như thế nào?

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.

Q: Chi phí sử dụng Google Sheets cho phòng khám?

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 SheetsPhần Mềm HISPhần Mềm Phòng Khám Nhỏ
Chi PhíMiễn phí - 6$/tháng50-200 triệu/năm2-10 triệu/năm
Cài ĐặtNgay lập tức2-6 tháng1-4 tuần
BHYT Điện TửKhôngCó (một số)
Kết Nối BHXHKhông
Tùy BiếnRất caoThấpTrung bình
Đào Tạo1-2 ngày1-3 tháng1-2 tuần
Phù Hợp VớiPK nhỏ, phòng mạchBệnh viện, PK lớnPK 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ợ.

Chia sẻ bài viết:

Tuân Hoang

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.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận