Bối cảnh và vấn đề nghiên cứu
Đồ án tốt nghiệp đại học với đề tài "Quản lý kho thuốc" do sinh viên Vũ Thu Hiền (lớp Công nghệ thông tin 3, khóa 60) thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thanh Toàn tại Khoa Công nghệ thông tin, Trường Đại học Giao thông vận tải (Hà Nội, 2023).
Bối cảnh thực tiễn được tác giả đặt ra xuất phát từ sự bùng nổ của cuộc cách mạng khoa học kỹ thuật và công nghệ thông tin. Sự gia tăng khối lượng tài liệu và sản phẩm nghiên cứu kéo theo yêu cầu rút ngắn thời gian xử lý dữ liệu quản lý. Trong lĩnh vực y tế và dược phẩm, công tác quản lý kho thuốc tại các nhà thuốc hoặc bệnh viện là nghiệp vụ phức tạp. Các đơn vị này không chỉ hoạt động theo mô hình tập trung mà còn phân tán trên nhiều địa điểm khác nhau. Phương pháp quản lý thủ công truyền thống bộc lộ sự thiếu hiệu quả khi theo dõi số lượng lớn danh mục thuốc, biến động tồn kho và theo dõi hạn dùng. Tác giả khảo sát thực tế mô hình của một số chuỗi nhà thuốc lớn tại Việt Nam như Pharmacity, Phúc An Khang Pharmacy, ECO Pharmaceuticals và Mỹ Châu Pharmacy để làm rõ nhu cầu quản trị nguồn cung ứng kịp thời, kiểm soát chất lượng và giảm chi phí vận hành.
Mục tiêu nghiên cứu của đề tài được tác giả xác định cụ thể gồm:
- Xây dựng ứng dụng quản lý kho thuốc cho nhà thuốc nhằm hỗ trợ việc quản lý xuất - nhập kho và theo dõi hạn sử dụng của thuốc.
- Tìm hiểu nguyên lý hoạt động của framework Angular, các thành phần kiến trúc của một ứng dụng Angular phía giao diện người dùng.
- Tìm hiểu và áp dụng framework Spring Boot để xây dựng dịch vụ mạng (webservice) phục vụ xử lý nghiệp vụ ở phía máy chủ.
- Nắm vững phương pháp thiết kế và quản trị cơ sở dữ liệu quan hệ, sử dụng hệ quản trị MySQL để lưu trữ dữ liệu hệ thống.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng công cụ và công nghệ: Môi trường phát triển tích hợp (Visual Studio Code, IntelliJ); ngôn ngữ lập trình (Java, TypeScript); framework và thư viện nền tảng (Spring Boot, Angular 14, Spring Security, MySQL).
- Phạm vi hệ thống: Đề tài giới hạn phạm vi ở việc xây dựng ứng dụng trên nền tảng Web phục vụ quản lý thuốc bán trong cửa hàng. Phạm vi chức năng bao gồm hỗ trợ lập kế hoạch nhập thuốc, xuất kho thuốc, theo dõi hạn sử dụng của từng loại thuốc và phục vụ thanh lý các lô thuốc sắp hết hạn sử dụng.
Cơ sở lý thuyết và phương pháp
Đề tài áp dụng các nền tảng kỹ thuật phần mềm hiện đại để xây dựng kiến trúc web phân tầng (Client - Server):
- Angular và TypeScript: Angular được tiếp cận dưới góc độ là nền tảng mã nguồn mở do Google duy trì, chuyên dụng cho phát triển ứng dụng đơn trang (Single Page Application - SPA). Tác giả phân tích lịch sử phát triển từ AngularJS (năm 2009 bởi Miško Hevery và Adam Abrons) đến bước tái cấu trúc hoàn toàn ở phiên bản Angular 2 trở đi. Các cơ chế như ràng buộc dữ liệu (data binding) lên mẫu HTML, khả năng tái sử dụng component và hỗ trợ kiểm thử đơn vị (Unit Test) được vận dụng cho giao diện người dùng. Đồng thời, văn bản chỉ rõ hạn chế về tính bảo mật của mã nguồn phía client và sự phụ thuộc vào trình duyệt hỗ trợ JavaScript.
- Ngôn ngữ Java: Nền tảng hướng đối tượng (OOP) khởi xướng bởi James Gosling tại Sun Microsystems (1995). Đề tài dựa trên 4 nguyên lý hướng đối tượng: tính trừu tượng (Abstraction), tính đa hình (Polymorphism), tính kế thừa (Inheritance) và tính đóng gói (Encapsulation). Cơ chế biên dịch mã nguồn thành bytecode chạy trên máy ảo Java (JVM) mang lại khả năng độc lập nền tảng ("Write Once, Run Anywhere"), kết hợp trình thu gom rác tự động (Garbage Collection) và hỗ trợ đa luồng.
- Spring Boot: Module mở rộng của Spring Framework cung cấp tính năng phát triển ứng dụng nhanh (Rapid Application Development - RAD), loại bỏ sự phụ thuộc vào cấu hình XML phức tạp và thiết lập cấu hình chuẩn cho các dịch vụ web độc lập. Văn bản cũng phân tích nhược điểm của framework này liên quan đến kích thước gói triển khai lớn do chứa phụ thuộc mặc định và độ phức tạp khi chuyển đổi từ hệ thống cũ.
- Spring Security & MySQL: Spring Security chịu trách nhiệm xác thực danh tính và phân quyền truy cập thông qua tài khoản đăng nhập. Hệ quản trị cơ sở dữ liệu quan hệ MySQL lưu trữ toàn bộ dữ liệu cấu trúc của hệ thống.
Phương pháp nghiên cứu thực tế gồm:
- Phương pháp khảo sát, phân tích yêu cầu nghiệp vụ kho dược phẩm.
- Phương pháp phân tích và thiết kế hướng đối tượng (OOAD) sử dụng mô hình hóa Use-case, sơ đồ phân rã chức năng và biểu đồ trạng thái.
- Phương pháp mô hình hóa dữ liệu thông qua sơ đồ quan hệ thực thể (ERD) và chuẩn hóa bảng quan hệ.
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình tương tác web với giao diện quản trị phân quyền cho 2 nhóm tác nhân: Quản lý (Admin) và Nhân viên.
Phân quyền tác nhân hệ thống
| Tác nhân |
Ca sử dụng nghiệp vụ được cấp quyền |
| Quản lý |
Đăng nhập hệ thống; Thêm mới, sửa thông tin nhân viên; Thêm mới nhà cung cấp; Thêm mới, sửa, xóa thông tin sản phẩm; Lập phiếu nhập kho; Duyệt phiếu nhập kho; Lập phiếu xuất kho; Duyệt phiếu xuất kho; Xem báo cáo doanh thu |
| Nhân viên |
Đăng nhập hệ thống; Thêm mới nhà cung cấp; Thêm mới, sửa, xóa thông tin sản phẩm; Lập phiếu nhập kho (chờ duyệt); Lập phiếu xuất kho (chờ duyệt); Tra cứu tồn kho |
Thiết kế cơ sở dữ liệu quan hệ
Cơ sở dữ liệu của ứng dụng gồm 6 bảng thực thể chính được thiết kế với các cấu trúc trường cụ thể:
| Tên bảng |
Tên trường |
Kiểu dữ liệu |
Mô tả ý nghĩa nghiệp vụ |
| User (Người dùng) |
id_user
email
name
birth
username
password
gender
is_active
address
in_time
phone
workingday |
varchar(255) varchar(50) varchar(50) datetime(6) varchar(50) varchar(100) varchar(255) int(11) varchar(200) datetime(6) varchar(255) datetime(6) |
Mã nhân viên Địa chỉ thư điện tử Họ và tên nhân viên Ngày tháng năm sinh Tên tài khoản hệ thống Mật khẩu xác thực Giới tính Trạng thái kích hoạt tài khoản Quê quán Thời điểm tạo nhân viên Số điện thoại liên lạc Ngày bắt đầu công tác |
| Producer (Nhà cung cấp) |
id
id_producer
address
information
is_active
producer_name |
bigint(20) varchar(200) varchar(255) varchar(255) int(11) varchar(255) |
Mã định danh tự tăng Mã nhà cung cấp Địa chỉ trụ sở Thông tin liên hệ Trạng thái hoạt động Tên đơn vị cung cấp |
| Product (Sản phẩm thuốc) |
id
product_id
product_name
ingredients
concentration
regulations
dosage
use_medicine
medicines_use_for
side-effects
price
is_active
in_time |
bigint(20) varchar(50) varchar(50) varchar(500) varchar(50) varchar(500) varchar(255) varchar(255) varchar(255) varchar(255) varchar(255) int(11) datetime(6) |
Mã định danh khóa chính Mã thuốc phân loại Tên biệt dược / tên sản phẩm Hoạt chất của thuốc Hàm lượng thành phần Quy cách đóng gói bao bì Liều lượng chỉ định Hướng dẫn cách sử dụng Chỉ định đối tượng điều trị Tác dụng phụ không mong muốn Đơn giá sản phẩm Trạng thái kinh doanh Thời điểm tạo bản ghi |
| Entry (Phiếu nhập kho) |
id
id_export
creator
money_total
note
is_active
in_time |
bigint(20) varchar(255) varchar(255) bigint(20) varchar(255) int(11) datetime(6) |
Khóa chính phiếu nhập Mã hiển thị của chứng từ Người tạo phiếu nhập Tổng giá trị thanh toán Ghi chú nghiệp vụ Trạng thái phiếu Thời gian lập phiếu |
| Export (Phiếu xuất kho) |
id
id_export
creator
money_total
note
is_active
in_time |
bigint(20) varchar(255) varchar(255) bigint(20) varchar(255) int(11) datetime(6) |
Khóa chính phiếu xuất Mã hiển thị chứng từ xuất Người lập lệnh xuất kho Tổng giá trị xuất Ghi chú chứng từ Trạng thái duyệt/xuất Thời gian lập lệnh |
| Ware_house (Tồn kho) |
id
entry_id
manufacture_date
expiry
quantityfix
quantity
is_active
intime |
bigint(20) bigint(20) datetime(6) datetime(6) int(11) int(11) int(11) datetime(6) |
Mã bản ghi tồn kho Mã liên kết phiếu nhập gốc Ngày sản xuất của lô thuốc Hạn dùng của lô thuốc Số lượng thuốc ban đầu khi nhập Số lượng thực tế còn tồn Trạng thái lô hàng Thời gian cập nhật kho |
Nội dung chính theo từng chương
Chương 1. Tổng quan đề tài
Chương 1 trình bày tổng quan lý thuyết công nghệ và bối cảnh nghiệp vụ. Tác giả phân tích lịch sử hình thành của framework Angular từ dự án nội bộ Google Feedback (nơi việc viết lại 17.000 dòng mã ban đầu bằng AngularJS đã chứng minh khả năng tinh gọn mã nguồn), cấu trúc SPA, các tính năng liên kết dữ liệu, khả năng chạy trên nhiều nền tảng và các hạn chế liên quan đến bảo mật phía client. Ngôn ngữ Java được trình bày với cấu trúc biên dịch bytecode trên JVM, cơ chế đa luồng và 4 tính chất hướng đối tượng cốt lõi. Khung ứng dụng Spring Boot được giới thiệu cùng phương pháp phát triển nhanh, kiến trúc webservice và các điểm cần lưu ý về dung lượng tệp triển khai. Về mặt nghiệp vụ, chương 1 giới thiệu khái niệm kho thuốc, vai trò duy trì chuỗi cung ứng vật tư y tế và lược khảo mô hình hoạt động của 4 chuỗi nhà thuốc lớn tại Việt Nam (Pharmacity, Phúc An Khang, ECO Pharmaceuticals, Mỹ Châu). Cuối chương, tác giả xác định rõ mục tiêu, đối tượng và phạm vi nghiên cứu của đề tài.
Chương 2. Phân tích thiết kế hệ thống
Chương 2 tập trung phân tích các yêu cầu kỹ thuật và mô hình hóa hệ thống. Tác giả xây dựng danh mục yêu cầu chức năng (gồm quản lý đăng nhập, quản lý nhân viên, nhà cung cấp, sản phẩm, nhập kho, xuất kho, tồn kho) và các yêu cầu phi chức năng (tối ưu hóa tự động, đồng bộ dữ liệu thời gian thực, bảo mật bằng Spring Security, tương thích đa trình duyệt).
Nội dung chương mô hình hóa chi tiết:
- Sơ đồ phân rã chức năng (Hình 2.1) thể hiện 6 khối chức năng cốt lõi.
- Biểu đồ Use-case tổng quát (Hình 2.2) và các use-case chi tiết kèm bảng đặc tả dòng sự kiện chính, điều kiện tiên quyết và dòng sự kiện rẽ nhánh (A1) cho các tác vụ đăng nhập, quản lý nhân viên, nhà cung cấp, sản phẩm, nhập kho, xuất kho và tồn kho.
- Biểu đồ trạng thái cho từng chức năng chính (từ Hình 2.10 đến Hình 2.16).
- Quy trình kiểm soát nghiệp vụ: Phiếu nhập khi tạo lập được lưu ở bảng tạm, chỉ khi Quản lý duyệt mới chính thức chuyển vào danh sách tồn kho; phiếu xuất chỉ hợp lệ khi lượng hàng tồn đủ đáp ứng, sau khi xuất sẽ trừ lùi số lượng tồn, nếu số lượng về 0 hệ thống tự động chuyển trạng thái để ẩn sản phẩm khỏi danh sách khả dụng.
- Thiết kế dữ liệu với sơ đồ quan hệ thực thể ERD tổng quát và chi tiết cho từng thực thể, cùng cấu trúc 6 bảng vật lý trong MySQL.
Chương 3. Xây dựng chương trình
Chương 3 mô tả quá trình hiện thực hóa các giao diện và thuật toán thực thi quy trình người dùng. Tác giả mô tả từng bước thực hiện trên giao diện theo mã hình cụ thể:
- Phân hệ nhân viên: Xây dựng màn hình đăng nhập (Hình 3.1) với luồng kiểm tra tên đăng nhập, mật khẩu; màn hình danh sách nhân viên (Hình 3.2); màn hình tìm kiếm nhân viên theo từ khóa (Hình 3.3); màn hình thêm mới nhân viên (Hình 3.4) yêu cầu quyền Admin; màn hình xem chi tiết (Hình 3.5) và sửa đổi thông tin (Hình 3.6).
- Phân hệ nhà cung cấp: Triển khai màn hình danh sách nhà cung cấp (Hình 3.7), giao diện thêm mới nhà cung cấp (Hình 3.8) và tìm kiếm nhà cung cấp theo chuỗi ký tự (Hình 3.9).
- Phân hệ sản phẩm và kho hàng (phản ánh qua danh mục hình ảnh và bảng biểu): Giao diện danh sách, thêm, sửa, xóa, tìm kiếm thông tin sản phẩm; lập và phê duyệt phiếu nhập kho (Hình 3.16 - Hình 3.20); lập và phê duyệt phiếu xuất kho (Hình 3.21 - Hình 3.25); theo dõi danh sách tồn kho, tìm kiếm tồn kho (Hình 3.26 - Hình 3.27); màn hình theo dõi doanh thu cá nhân (Hình 3.28) và doanh thu kho tổng (Hình 3.29).
Kết quả và đóng góp
Đồ án ghi nhận các kết quả thực nghiệm và giải pháp kỹ thuật cụ thể sau:
- Xây dựng thành công hệ thống phần mềm quản lý kho thuốc dạng Web Application với sự phân định rõ ràng giữa hai thành phần: giao diện người dùng bằng Angular 14 và dịch vụ nền tảng backend sử dụng Spring Boot kết hợp Spring Security và CSDL MySQL.
- Hiện thực hóa đầy đủ quy trình quản lý kho hai bước (lập phiếu và phê duyệt): Phiếu nhập kho được lưu vào bảng tạm trước khi quản lý phê duyệt chính thức nhập vào kho tồn; khi xuất kho, hệ thống tự động kiểm tra số lượng tồn khả dụng, thực hiện phép trừ kho theo số lượng thực xuất và tự động chuyển đổi trạng thái (ẩn sản phẩm) khi tồn kho đạt mức 0.
- Thiết lập cơ sở dữ liệu chuyên biệt cho dược phẩm với đầy đủ các thuộc tính y tế đặc thù (hoạt chất
ingredients, hàm lượng concentration, quy cách regulations, liều lượng dosage, hướng dẫn sử dụng use_medicine, chỉ định medicines_use_for, tác dụng phụ side-effects) và quản lý chi tiết lô hàng qua ngày sản xuất (manufacture_date) cùng hạn sử dụng (expiry).
- Đóng góp tự thân của tác giả là tổng hợp và cụ thể hóa quy trình nghiệp vụ kho thuốc bán lẻ/bệnh viện vào một mô hình phân tích thiết kế hệ thống thông tin hoàn chỉnh, từ sơ đồ phân rã chức năng, mô hình use-case, mô hình thực thể ERD đến giao diện thực tế.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên nội dung và phạm vi nghiên cứu được nêu trong văn bản, đồ án có các hạn chế và hướng mở sau:
- Hạn chế về nền tảng triển khai: Ứng dụng mới chỉ dừng lại ở phạm vi nền tảng Web trên máy tính, chưa được đóng gói hoặc phát triển thành ứng dụng di động (Mobile App) chuyên dụng cho nhân viên kiểm kê kho thuốc tại quầy hoặc trong kho bãi.
- Hạn chế về mặt công nghệ: Hệ thống phụ thuộc hoàn toàn vào môi trường trình duyệt bật JavaScript (nếu người dùng vô hiệu hóa JavaScript, ứng dụng Angular sẽ không thể hoạt động); kiến trúc ứng dụng đóng gói của Spring Boot còn tạo ra các phụ thuộc không dùng đến, làm tăng kích thước tệp triển khai.
- Hạn chế về phạm vi tích hợp: Hệ thống chưa kết nối với các cổng dữ liệu dược quốc gia, chưa tích hợp máy quét mã vạch chuyên dụng cho mã thuốc và chưa mở rộng mô hình phân tán microservices cho các chuỗi nhà thuốc quy mô lớn.
- Hướng mở tiếp theo: Phát triển ứng dụng trên thiết bị di động (kết hợp các nền tảng đa nền tảng như PhoneGap như văn bản đã nêu); hoàn thiện hệ thống báo cáo phân tích sâu hơn về doanh thu kho và tự động hóa quy trình cảnh báo thanh lý thuốc sắp hết hạn.
Giá trị tham khảo
Đồ án là tài liệu tham khảo hữu ích cho các đối tượng và mục đích sau:
- Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm: Tài liệu cung cấp cấu trúc hoàn chỉnh của một đồ án tốt nghiệp kỹ thuật, từ chương tổng quan công nghệ (Java, Spring Boot, Angular), quy trình khảo sát nghiệp vụ đến việc hiện thực hóa các biểu đồ phân tích (Use-case, ERD, State Diagram).
- Người phát triển các ứng dụng quản lý kho hoặc thương mại điện tử nhỏ: Cấu trúc cơ sở dữ liệu quan hệ gồm 6 bảng thực thể (
User, Producer, Product, Entry, Export, Ware_house) được đặc tả chi tiết kiểu dữ liệu, là mẫu tham khảo trực tiếp cho các bài toán quản lý kho hàng có kiểm soát hạn dùng và số lô.
- Lập trình viên bắt đầu với kiến trúc Angular + Spring Boot: Nắm bắt được phương pháp tiếp cận tách biệt giao diện SPA và webservice backend, quy trình xử lý giao diện từ danh sách, tìm kiếm, xem chi tiết đến thêm mới và cập nhật bản ghi dữ liệu.
Câu hỏi thường gặp
Hệ thống phân chia quyền hạn giữa Quản lý và Nhân viên như thế nào đối với các phiếu nhập và xuất kho?
Theo bảng phân quyền (Bảng 2.1) và các đặc tả use-case (Bảng 2.13, Bảng 2.14), cả Quản lý và Nhân viên đều có quyền lập phiếu nhập kho và lập phiếu xuất kho. Tuy nhiên, quyền duyệt phiếu nhập kho (để ghi nhận thuốc vào tồn kho chính thức) và quyền duyệt phiếu xuất kho (để kiểm tra đủ lượng tồn và trừ kho) chỉ thuộc về tài khoản có quyền Quản lý.
Thực thể Sản phẩm trong cơ sở dữ liệu quản lý các thông tin y tế đặc thù nào của thuốc?
Bảng dữ liệu product (Bảng 2.18) lưu trữ các trường thông tin y tế bao gồm: tên hoạt chất (ingredients), hàm lượng (concentration), quy cách đóng gói (regulations), liều lượng (dosage), cách sử dụng (use_medicine), chỉ định đối tượng sử dụng (medicines_use_for) và tác dụng phụ của thuốc (side-effects).
Khi duyệt phiếu xuất kho, hệ thống xử lý logic trừ kho và trạng thái sản phẩm ra sao?
Theo Bảng đặc tả 2.7, tại bước duyệt phiếu xuất kho, hệ thống kiểm tra số lượng tồn có đủ đáp ứng hay không mới cho phép xuất thuốc. Nếu đủ điều kiện, hệ thống trừ đi số lượng xuất và cập nhật số lượng tồn còn lại. Trong trường hợp số lượng tồn giảm về bằng 0, hệ thống tự động chuyển trạng thái của sản phẩm trong kho (ẩn sản phẩm đi do đã hết mặt hàng).
Bảng dữ liệu Tồn kho (ware_house) lưu trữ các mốc thời gian nào để theo dõi hạn sử dụng của thuốc?
Bảng ware_house (Bảng 2.21) lưu trữ 3 trường thời gian dưới kiểu dateTime(6) gồm: manufacture_date (ngày sản xuất của lô thuốc), expiry (hạn sử dụng của thuốc) và intime (thời điểm bản ghi tồn kho được tạo).
Cơ chế bảo mật đăng nhập của hệ thống được xây dựng dựa trên công nghệ nào?
Theo mô tả các yêu cầu phi chức năng (mục 2.1.2.2), hệ thống đăng nhập sử dụng Spring Security để xác thực tài khoản; chỉ những người dùng có tài khoản hợp lệ được lưu trữ trong bảng User mới có thể đăng nhập thành công vào trang chủ hệ thống.
Kết luận
Đồ án tốt nghiệp "Quản lý kho thuốc" của sinh viên Vũ Thu Hiền đã giải quyết thành công bài toán số hóa nghiệp vụ kho dược phẩm thông qua việc ứng dụng kết hợp hai công nghệ phổ biến là Angular 14 và Spring Boot. Công trình hoàn thành đầy đủ các giai đoạn từ khảo sát nghiệp vụ thực tế, xây dựng sơ đồ phân rã, đặc tả chi tiết use-case, mô hình hóa CSDL quan hệ 6 thực thể đến việc lập trình giao diện người dùng hoàn chỉnh. Hệ thống đáp ứng tốt các yêu cầu kiểm soát xuất - nhập thuốc hai bước, theo dõi hạn dùng và khấu trừ tồn kho tự động, tạo tiền đề vững chắc cho việc mở rộng sang các nền tảng di động trong tương lai.