Cụ thể, việc tin học hóacác công việc văn phòng và quản lý trong các tổ chức, đặc biệt là những cơ quanvới phạm vi quản lý lớn, đang được thực hiện với quy mô hiện đại hơn, nhằm đápứng n
GIỚI THIỆU PHÁT BIỂU BÀI TOÁN
Hiện trạng
Tình trạng hiện nay là cuộc sống và tinh thần của người dân đang trở nên phong phú hơn, dẫn đến sự tăng cường về nhận thức về sức khỏe Trước đây, theo quy trình truyền thống, bệnh nhân phải mất nhiều thời gian và công sức để đến bệnh viện và thực hiện các thủ tục khám bệnh Tuy nhiên, với sự xuất hiện của ứng dụng đặt lịch khám trực tuyến, bệnh nhân có thể đăng ký từ nhà mình, tiết kiệm được thời gian và công sức đáng kể cả cho bệnh nhân và bệnh viện.
Nhu cầu ngày càng tăng của con người cũng thúc đẩy sự phát triển của các công nghệ, smartphone và trang web.
Nhờ có các ứng dụng này, bạn không cần phải mất thời gian đứng xếp hàng để lấy giấy khám bệnh Thay vào đó, bạn có thể sử dụng thời gian đó cho công việc hoặc thời gian gia đình.
Mục tiêu đề tài
Cải thiện quản lý bệnh nhân và hiện đại hóa quy trình khám và điều trị tại bệnh viện:
Phát triển hệ thống thông tin tự động để quản lý toàn bộ quá trình từ lúc bệnh nhân đến khám tại bệnh viện cho đến khi xuất viện Điều này bao gồm việc ghi nhận thông tin, lịch sử khám bệnh, kết quả xét nghiệm và điều trị, giúp tăng cường sự hiệu quả và tính toàn vẹn trong quản lý bệnh nhân.
Xây dựng cơ sở dữ liệu cho bệnh nhân và hồ sơ bệnh án, giúp cho việc tra cứu trở nên dễ dàng và thuận tiện hơn Nhờ vào hệ thống này, thông tin về bệnh nhân và lịch sử bệnh án có thể được truy cập một cách nhanh chóng, từ đó cải thiện quá trình chăm sóc và điều trị.
Tự động hóa quy trình quản lý bệnh nhân từ khi nhập viện đến khi xuất viện, giúp giảm thiểu sự trễ trường hợp, tối ưu hóa tài nguyên và tăng cường chất lượng dịch vụ Điều này bao gồm việc tự động hóa các thủ tục nhập viện, đăng ký, lập lịch hẹn, quản lý giường bệnh và các hoạt động liên quan khác, tạo điều kiện cho việc tiếp cận chăm sóc sức khỏe một cách hiệu quả và tiện lợi hơn.
Giới hạn đề tài
Hệ thống đặt lịch khám trực tuyến thường chỉ áp dụng cho các trường hợp bệnh thông thường, thường xuyên hoặc các trường hợp tái khám dưới sự giám sát của bác sĩ Các tình huống khẩn cấp hoặc nguy hiểm đến tính mạng cần được đưa đến bệnh viện ngay lập tức và không thuộc phạm vi của hệ thống đặt lịch khám trực tuyến này.
Phân tích những công trình có liên quan
BookingCare là một nền tảng y tế toàn diện, cung cấp một hệ thống công nghệ để bệnh nhân có thể dễ dàng lựa chọn các dịch vụ y tế từ một mạng lưới bác sĩ chuyên khoa đáng tin cậy và các phòng khám/bệnh viện được xác thực, cũng như đặt lịch hẹn một cách nhanh chóng [4]
Các chức năng chính của BookingCare bao gồm:
- Tìm kiếm các bệnh viện.
- Tìm kiếm các bác sĩ.
- Tìm kiếm các chuyên khoa khám bệnh.
- Đặt lịch hẹn khám bệnh.
CƠ SỞ LÝ THUYẾT NGHIÊN CỨU
Tổng quan về ReactJS
ReactJS là một thư viện mã nguồn mở được phát triển bởi Facebook và được ra mắt vào năm 2013 Nó là một công cụ JavaScript mạnh mẽ được sử dụng để xây dựng các giao diện tương tác trên các trang web Một trong những điểm đáng chú ý nhất của ReactJS là khả năng render dữ liệu không chỉ trên máy chủ mà còn trên máy khách (client) nữa [3] b) Virtual DOM
Virtual DOM là một công nghệ giúp tăng hiệu suất cho các ứng dụng web Thay vì cập nhật toàn bộ cây DOM khi một phần của nó thay đổi, ReactJS sử dụng Virtual DOM để chỉ cập nhật các phần thực sự có sự thay đổi Điều này giúp tối ưu hóa quá trình render lại cây DOM và cải thiện tốc độ xử lý.
Virtual DOM trong ReactJS là một đối tượng JavaScript, mỗi đối tượng này chứa đầy đủ thông tin cần thiết để tạo ra một cây DOM Khi dữ liệu thay đổi, ReactJS sẽ tính toán sự khác biệt giữa các đối tượng Virtual DOM và cây DOM thực tế, từ đó chỉ cập nhật những phần thay đổi thực sự Điều này giúp tối ưu hóa quá trình render lại cây DOM thực tế.
ReactJS còn sử dụng mô hình one-way data binding, nơi dữ liệu chỉ truyền từ cha đến con thông qua props Mô hình này giúp việc kiểm soát dữ liệu và xử lý lỗi trở nên dễ dàng hơn.
Với các đặc tính trên, ReactJS thích hợp cho việc xây dựng các ứng dụng lớn với dữ liệu thay đổi liên tục, khi mà sự thay đổi về dữ liệu thường đi kèm với sự thay đổi về giao diện [8] c) JSX
JSX là một biến thể ngôn ngữ cho phép viết mã HTML trong JavaScript Nó có những đặc điểm sau:
1 **Nhanh hơn**: JSX thực hiện tối ưu hóa trong quá trình biên dịch sang mã JavaScript Nhờ đó, các đoạn mã JSX thường chạy nhanh hơn nhiều so với việc viết mã tương tự trực tiếp bằng JavaScript.
2 **An toàn hơn**: JSX là kiểu dữ liệu được định kiểu tĩnh (statically-typed), nghĩa là nó được biên dịch trước khi chạy, tương tự như Java hoặc C++ Điều này giúp phát hiện lỗi sớm hơn trong quá trình biên dịch và cung cấp khả năng gỡ lỗi tốt hơn.
3 **Dễ sử dụng hơn**: JSX kế thừa cú pháp của JavaScript, vì vậy rất dễ cho các lập trình viên JavaScript sử dụng Điều này giúp giảm thời gian học và thích nghi với cú pháp mới. d) Components
React được xây dựng quanh các thành phần (component) thay vì sử dụng các mẫu (templates) như các framework khác Trong React, chúng ta xây dựng trang web bằng cách sử dụng các thành phần nhỏ Các thành phần này có thể tái sử dụng ở nhiều nơi, với các trạng thái và thuộc tính khác nhau Một thành phần có thể chứa các thành phần con Mỗi thành phần trong React có một trạng thái riêng, có thể thay đổi React sẽ tự động cập nhật các thành phần dựa trên các thay đổi trong trạng thái Mọi thứ trong React đều là thành phần, giúp việc bảo trì mã nguồn dễ dàng hơn khi làm việc với các dự án lớn Một thành phần React đơn giản chỉ cần một phương thức render Tuy nhiên, có nhiều phương thức khác có sẵn, nhưng phương thức render là phương thức chính. e) Props và State
Props là cơ chế cho phép các thành phần tương tác với nhau trong React Các thành phần nhận dữ liệu đầu vào từ props và sử dụng dữ liệu này để render các thuộc tính hoặc nội dung Prop là không thể thay đổi (immutable).
State, trong React, thể hiện trạng thái của ứng dụng Khi trạng thái thay đổi, các thành phần sẽ được cập nhật lại để phản ánh các thay đổi đó và cập nhật giao diện người dùng.
Tổng quan về NodeJS với Express FrameWork
ExpressJS là một framework nhỏ nhưng linh hoạt, được xây dựng trên nền tảng của Node.js Nó cung cấp các tính năng mạnh mẽ để phát triển ứng dụng web hoặc di động.
Về các gói hỗ trợ: ExpressJS có một loạt các gói hỗ trợ đa dạng, giúp cho việc làm việc với framework này trở nên thuận lợi và không gặp nhiều khó khăn.
Về hiệu suất: Express cung cấp các tính năng bổ sung để cải thiện trải nghiệm lập trình mà không ảnh hưởng đến tốc độ của Node.js [2] b) Cấu trúc của ExpressJS
- File `app.js`: Chứa các thông tin cấu hình, khai báo, định nghĩa cần thiết để ứng dụng chạy.
- File `package.json`: Chứa danh sách các gói phần mềm cần thiết để chạy ứng dụng Tương tự như `composer.json` trong PHP hoặc `Gemfile` trong Ruby on Rails.
- Thư mục routes: Chứa các tập tin định tuyến (routes) của ứng dụng.
- Thư mục views: Chứa các view hoặc template cho ứng dụng.
- Thư mục public: Chứa các tệp CSS, JavaScript, hình ảnh và tài nguyên tĩnh khác cho ứng dụng. c) Router trong Express
Router trong ExpressJS là một đối tượng, đó là một phiên bản riêng của middleware và các tuyến đường (routes) Do là một phiên bản của cả middleware và tuyến đường, nên nó có khả năng thực thi các chức năng của cả hai Router có thể được coi như một ứng dụng nhỏ (mini-application).
Tất cả các ứng dụng sử dụng ExpressJS làm cốt lõi đều tích hợp sẵn Router trong đó.
Router hoạt động giống như một middleware, vì vậy chúng ta có thể sử dụng nó như một đối số (argument) Hoặc chúng ta có thể sử dụng nó làm đối số cho các tuyến đường khác [2]
Công Nghệ Ứng Dụng
Website được phát triển trên môi trường phần mềm Visual Studio Code, sử dụng các công nghệ sau:
- **Frontend**: Thiết kế trang web sử dụng ReactJS với cả React Hooks và React Class, kết hợp với Material-UI để tạo giao diện người dùng Sử dụng HTML, SCSS và Javascript để tạo nội dung và kiểu dáng cho trang web.
- **Backend**: Viết mã chức năng của trang web bằng NodeJS và ExpressJS, sử dụng RESTful API để giao tiếp với frontend [7]
- **Cơ sở dữ liệu**: Sử dụng Sequelize-cli, một công cụ ORM (Object-Relational Mapping) để tương tác với cơ sở dữ liệu MySQL Sử dụng Migration để quản lý và duy trì cấu trúc cơ sở dữ liệu [6]
- **Postman **:là một trong những công cụ phổ biến nhất được sử dụng trong thử nghiệm các API Với Postman, ta có thể gọi Rest API mà không cần viết dòng code nào [5]
Frontend và Backend giao tiếp với nhau thông qua các API để trao đổi dữ liệu và thực hiện các chức năng của trang web.
PHÂN TÍCH HỆ THỐNG
Sơ đồ use case
Hình 3.1.a: Actor Admin b) Actor bác sĩ
Hình 3.1.b: Actor bác sĩ c) Actor người dùng
Quy trình tuần tự
a) Biểu đồ tuần tự đặt lịch hẹn
Hình 3.2.a: Biều đồ tuần tự đặt lịch hẹn b) Biểu đồ tuần tự tạo lịch hẹn
Hình 3.2.b: Biểu đồ tuần tự tạo lịch hẹn
THIẾT KẾ CƠ SỞ DỮ LIỆU
Sơ đồ quan hệ trong CSDL
Hình 4.1: Sơ đồ quan hệ trong CSDL
Mô tả bảng dữ liệu
STT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int Mã người dùng
2 email varchar(255) Email người dùng
3 password varchar(255) Mật khẩu người dùng
4 firstName varchar(255) Tên người dùng
5 lastName varchar(255) Họ người dùng
6 address text Địa chỉ người dùng
7 gender tinyint(1) Giới tính người dùng
8 roleId varchar(255) Quyền truy cập người dùng
9 phonenumber varchar(255) Số điện thoại người dùng
10 positionId varchar(255) Ví trí id người dùng
12 createAt datetime Ngày khởi tạo
13 updateAt datetime Ngày cập nhật
Bảng 4.2.a: Bảng user b) Bảng lịch trình
STT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int Mã lịch trình
6 doctorId int Mã bác sĩ
7 createAt datetime Ngày khởi tạo
8 updateAt datetime Ngày cập nhật
Bảng 4.2.b: Bảng schedules c) Bảng lịch sử đặt lịch
STT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int(11) Mã đặt lịch
2 patientId varchar(255) Mã bệnh nhân
3 doctorId varchar(255) Mã bác sĩ
4 description text Mô tả lịch sử đặt lịch
6 createAt datetime Ngày khởi tạo
7 updateAt datetime Ngày cập nhật
Bảng 4.2.c: Bảng histories d) Bảng phòng khám chuyên khoa bác sĩ
STT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int(11) Mã phòng khám chuyên khoa
2 doctorId int(11) Mã bác sĩ
3 clinicId int(11) Mã phòng khám
4 specialtyId int(11) Mã chuyên khoa
5 createAt datetime Ngày khởi tạo
6 updateAt datetime Ngày cập nhật
Bảng 4.2.d: Bảng doctor_clinic_specialty e) Bảng phòng khám
STT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int(11) Mã phòng khám
2 name varchar(255) Tên phòng khám
3 address varchar(255) Địa chỉ phòng khám
4 descriptionHTML Text Mô tả phòng khám
Text Mô tả thông tin
7 createAt datetime Ngày khởi tạo
8 updateAt datetime Ngày cập nhật
Bảng 4.2.e: Bảng clinic f) Bảng đặt lich
STT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int(11) Mã đặt lịch
2 statusId varchar(255) Mã trạng thái
3 doctorId int(11) Mã bác sĩ
4 patientid int(11) Mã bệnh nhân
5 date datetime Ngày đặt lịch
6 timeType varchar(255) Thời gian đặt lịch
8 createAt datetime Ngày khởi tạo
9 updateAt datetime Ngày cập nhật
Bảng 4.2.f: Bảng booking g) Bảng chuyên khoa
STT Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int(11) Mã chuyên khoa
2 descriptionHTML text Mô tả chuyên khoa
3 descriptionMarkdown text Mô tả thông tin
5 name varchar(255) Tên chuyên khoa
6 createAt datetime Ngày khởi tạo
7 updateAt datetime Ngày cập nhật
Bảng 4.2.g: Bảng specialties h) Bảng thông tin bác sĩ
Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int(11) Mã thông tin bác sĩ
2 doctorId int(11) Mã bác sĩ
3 specialtyId int(11) Mã chuyên khoa
4 clinicId int(11) Mã phòng khám
5 priceId int Mã giá khám
7 paymentId int Mã thanh toán
8 addressClinic text Địa chỉ phòng khám
9 nameClinic text Tên phòng khám
12 createAt datetime Ngày khởi tạo
13 updateAt datetime Ngày cập nhật
Bảng 4.2.h: Bảng doctor_infor i) Bảng điền thông tin chi tiết bác sĩ
Thuộc tính Kiểu dữ liệu Ý nghĩa
1 id int(11) Mã thông tin
2 contentHTML longtext Mã HTML khi chuyển đổi
3 contentMardown longtext Văn bản thô sử dụng
4 description longtext Mô tả thông tin bác sĩ
5 doctorId int(11) Mã bác sĩ
6 specialtyId int(11) Mã chuyên khoa
7 clinicId int(11) Mã phòng khám
8 createAt datetime Ngày khởi tạo
9 updateAt datetime Ngày cập nhật
Bảng 4.2.i: Bảng markdowns j) Bảng Allcodes
Thuộc tính Kiểu dữ liệu Ý nghĩa
2 key varchar(255) Từ khóa để map
3 type varchar(255) Kiểu thuộc tính của keyMap
4 valueEn varchar(255) Giá trị mang ngôn ngữ tiếng Anh
5 valueVi varchar(255) Giá trị mang ngôn ngữ tiếng Việt
6 createAt datetime Ngày khởi tạo
7 updateAt datetime Ngày cập nhật
GIAO DIỆN CHỨC NĂNG SẢN PHẨM
Đối với Admin
a Thêm, sửa, xóa người dùng
Hình 5.1.a: Giao diện thêm, sửa, xóa người dùng b Thêm thông tin bác sĩ
Hình 5.1.b: Giao diện thêm thông tin bác sĩ c Chọn lịch khám bệnh cho bác sĩ
Hình 5.1.c: Giao diện chọn lịch khám bệnh cho bác sĩ d Thêm phòng khám
Hình 5.1.d: Giao diện thêm phòng khám e Thêm chuyên khoa
Hình 5.1.e: Giao diện thêm chuyên khoa
Đối với Bác sĩ
Hình 5.2.a: Giao diện chọn lịch khám bệnh b Xem lịch hẹn khám bệnh của bệnh nhân
Hình 5.2.b: Giao diện xem lịch hẹn khám bệnh của bệnh nhân c Xác nhận lịch khám bệnh
Hình 5.2.c: Giao diện xác nhận lich khám bệnh
Đối với người dùng
a Ở giao diện Trang chủ, tương tác bằng tiếng Anh hoặc tiếng Việt
Hình 5.3.a: Giao diện người dùng b Hiển thị chuyên khoa, cơ sở y tế, bác sĩ
Hình 5.3.b: Giao diện hiện thị chuyên khoa, cơ sở y tế, bác sĩ c Xem thông tin bác sĩ và đặt lịch khám bệnh
Hình 5.3.c: Giao diện xem thông tin bác sĩ và đặt lịch khám bệnh d Sau khi xác nhận sẽ có mail xác nhận lịch hẹn gửi về
Hình 5.3.d: Giao diện sau khi xác nhận lịch hẹn e Bác sĩ xác nhận lịch hẹn sẽ có mail gửi hóa đơn / đơn thuốc về cho email đã đăng kí lịch khám
Hình 5.3.e: Giao diện xác nhận lịch hẹn qua mail