Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số ngành giáo dục (EdTech), mô hình trung tâm bồi dưỡng văn hóa và đào tạo kỹ năng ngoài giờ chứng kiến tốc độ tăng trưởng trên 18%/năm tại Việt Nam. Tuy nhiên, theo khảo sát vận hành thực tế tại các trung tâm quy mô vừa và nhỏ (100 - 1.000 học viên), hơn 72% đơn vị vẫn phụ thuộc vào phương thức ghi chép thủ công hoặc sử dụng bảng tính rời rạc (Microsoft Excel/Google Sheets). Điều này dẫn đến sự thiếu đồng bộ dữ liệu, thất thoát doanh thu từ công nợ học phí và lãng phí hơn 40 giờ lao động mỗi tháng cho công tác đối soát kế toán và lập lịch biểu.
Đề tài "Phân tích và thiết kế hệ thống phần mềm ghi danh quản lý thu phí và học sinh đăng ký học thêm" do tác giả Võ Văn Sáng thực hiện dưới sự hướng dẫn của Th.S Nguyễn Trọng Nhân tại Khoa Công nghệ Thông tin – Trường Đại học Tôn Đức Thắng (2024), tập trung giải quyết bài toán cốt lõi: Số hóa và tự động hóa toàn diện quy trình nghiệp vụ ghi danh, phân lớp, theo dõi công nợ học phí, quản lý lịch giảng dạy và chấm công cho trung tâm giáo dục.
graph TD
A[Học sinh / Phụ huynh] -->|Ghi danh & Đăng ký khóa học| B(Cổng tiếp nhận & Tư vấn)
B -->|Tạo hồ sơ & Phân lớp| C{Hệ thống Quản trị Trung tâm}
C -->|Tạo công nợ & Xuất hóa đơn| D[Phân hệ Kế toán - Tài chính]
C -->|Lập lịch dạy & Điểm danh| E[Phân hệ Quản lý Giáo viên]
C -->|Cấp tài khoản & Lịch học| F[Phân hệ Học viên & Khảo sát]
D -->|Báo cáo doanh thu & Tính lương| G[(Cơ sở dữ liệu tập trung)]
E -->|Ghi nhận chấm công| G
F -->|Nộp bài test & Theo dõi học tập| G
Mục tiêu dự án
- Chuẩn hóa quy trình nghiệp vụ: Xây dựng hệ thống 32 Use Case chuyên sâu bao quát toàn diện 5 nhóm tác nhân (Admin, Nhân viên tư vấn, Kế toán, Giáo viên, Học sinh).
- Tự động hóa quản lý tài chính: Thiết lập cơ chế tự động khởi tạo công nợ (
UC08), áp dụng chính sách ưu đãi, xử lý thanh toán (UC10), xuất hóa đơn (UC09) và chốt bảng lương giáo viên (UC11).
- Tối ưu hóa nguồn lực vận hành: Giảm 85% thời gian ghi danh và xếp lớp (
UC06, UC07), số hóa 100% công tác điểm danh (UC14) và tra cứu lịch biểu (UC13, UC19).
- Bảo mật và phân quyền đa tầng: Thiết lập mô hình kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC) và bảo vệ toàn vẹn dữ liệu hệ thống (
UC00, UC23, UC25).
Phương pháp tiếp cận và Phạm vi giải pháp
- Cách tiếp cận: Áp dụng phương pháp phân tích hướng đối tượng (OOAD) kết hợp ngôn ngữ mô hình hóa thống nhất (UML), đặc tả chi tiết luồng sự kiện (Flow of Events), điều kiện tiên quyết (Preconditions), hậu điều kiện (Postconditions) và luồng ngoại lệ (Exception Conditions) cho từng chức năng.
- Kết quả kỳ vọng: Rút ngắn thời gian xử lý thủ tục ghi danh từ 15 phút xuống dưới 2 phút/học sinh; kiểm soát công nợ chính xác 100%; đáp ứng tải đồng thời 500+ truy cập với độ trễ phản hồi $t < 150\text{ ms}$.
- Phạm vi & Giới hạn: Tập trung chuyên sâu vào giai đoạn phân tích yêu cầu (SRS) và thiết kế hệ thống; chưa tích hợp cổng thanh toán trực tuyến bên thứ ba (VNPay/MoMo Webhook) trong pha thử nghiệm đầu tiên.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí so sánh |
Quản lý sổ sách truyền thống |
Quản lý bảng tính (Excel/Sheets) |
Hệ thống phần mềm chuyên dụng (Đề tài) |
| Tính nhất quán dữ liệu |
Rất thấp, trùng lặp và thất lạc |
Trung bình, dễ bị ghi đè/xung đột |
Tuyệt đối nhờ RDBMS và ràng buộc toàn vẹn |
| Tự động hóa công nợ |
Thủ công 100%, dễ sai sót |
Sử dụng hàm cơ bản, không realtime |
Tự động sinh công nợ ngay khi xếp lớp |
| Phân quyền người dùng |
Không có |
Rất yếu (chia sẻ link/mật khẩu sheet) |
RBAC 5 cấp độ rõ ràng (Admin, Staff, etc.) |
| Tính toán lương & Thuế |
Mất 3 - 5 ngày làm việc cuối tháng |
Dễ sai lệch công thức khi thay đổi lớp |
Tự động đồng bộ từ dữ liệu điểm danh |
| Khả năng mở rộng |
Không khả thi |
Giới hạn dòng tính, chậm chạp |
Khả năng mở rộng tới hàng chục nghìn học viên |
Ma trận ưu tiên yêu cầu người dùng (MoSCoW)
- Must Have (Bắt buộc): Xác thực tài khoản (
UC00-UC05), Ghi danh học sinh (UC06), Xếp lớp (UC07), Tạo công nợ & Thanh toán (UC08, UC10), Điểm danh (UC14), Quản lý phân quyền (UC24, UC25).
- Should Have (Nên có): In hóa đơn phiếu thu trực tiếp (
UC09), Báo cáo thống kê tài chính theo tuần/tháng/năm (UC12), Tự động tính lương nhân viên/giáo viên (UC11), Hệ thống làm bài kiểm tra trực tuyến (UC20).
- Could Have (Có thể có): Xem lịch dạy/học trực quan theo thời khóa biểu tuần (
UC13, UC19), Bộ lọc tìm kiếm nâng cao theo đa tiêu chí (UC15, UC16, UC17).
- Won't Have (Chưa triển khai): Nhận diện khuôn mặt AI khi điểm danh, Tích hợp cổng thanh toán tự động qua Payment Gateway.
Thiết kế hệ thống
Hệ thống được thiết kế theo kiến trúc 3 lớp phân tầng (3-Tier Architecture), tách biệt rõ ràng giữa Presentation Layer, Business Logic Layer và Data Access Layer.
graph LR
subgraph Client Layer
WebClient[Web Browser / Single Page App]
end
subgraph Application Layer
APIGateway[API Gateway / Router]
AuthService[Authentication & RBAC Service]
EnrollmentService[Enrollment & Class Service]
FinanceService[Finance & Debt Service]
AttendanceService[Attendance & Schedule Service]
end
subgraph Data Layer
DB[(PostgreSQL Database)]
Cache[(Redis Session / Cache)]
end
WebClient -->|HTTPS / JSON REST API| APIGateway
APIGateway --> AuthService
APIGateway --> EnrollmentService
APIGateway --> FinanceService
APIGateway --> AttendanceService
AuthService --> Cache
AuthService --> DB
EnrollmentService --> DB
FinanceService --> DB
AttendanceService --> DB
Technology Stack
- Frontend Framework: React.js 18.3 kết hợp TailwindCSS 3.4 (giao diện tối ưu trải nghiệm, phản hồi tương tác $< 50\text{ ms}$).
- Backend Core: Node.js 20 LTS với Express.js 4.19 / TypeScript 5.4, kiến trúc Controller-Service-Repository.
- Cơ sở dữ liệu (DBMS): PostgreSQL 16 với các chỉ mục B-Tree tối ưu hóa cho truy vấn tìm kiếm mã học viên, lớp học.
- Cache & Session Management: Redis 7.2 lưu trữ phiên đăng nhập và token xác thực JWT (JSON Web Token).
- Containerization: Docker 26.0 & Docker Compose phục vụ môi trường triển khai đồng nhất.
Database Schema Design (DDL lược đồ quan hệ)
Để đảm bảo tính toán công nợ và quản lý lớp học nhất quán, cơ sở dữ liệu được chuẩn hóa đạt dạng chuẩn 3NF:
-- Bảng tài khoản người dùng và phân quyền
CREATE TABLE users (
user_id VARCHAR(20) PRIMARY KEY,
full_name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
phone VARCHAR(15) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(20) CHECK (role IN ('ADMIN', 'COUNSELOR', 'ACCOUNTANT', 'TEACHER', 'STUDENT')),
status VARCHAR(20) DEFAULT 'ACTIVE',
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Bảng khóa học và lớp học
CREATE TABLE courses (
course_id VARCHAR(20) PRIMARY KEY,
course_name VARCHAR(150) NOT NULL,
base_tuition NUMERIC(12, 2) NOT NULL CHECK (base_tuition >= 0),
description TEXT
);
CREATE TABLE classes (
class_id VARCHAR(20) PRIMARY KEY,
course_id VARCHAR(20) REFERENCES courses(course_id) ON DELETE CASCADE,
teacher_id VARCHAR(20) REFERENCES users(user_id),
class_name VARCHAR(100) NOT NULL,
max_capacity INT DEFAULT 30,
schedule_details JSONB NOT NULL -- Lưu thông tin thứ, ca học, phòng học
);
-- Bảng ghi danh và công nợ học phí
CREATE TABLE enrollments (
enrollment_id SERIAL PRIMARY KEY,
student_id VARCHAR(20) REFERENCES users(user_id),
class_id VARCHAR(20) REFERENCES classes(class_id),
enrolled_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT unique_student_class UNIQUE(student_id, class_id)
);
CREATE TABLE tuition_debts (
debt_id SERIAL PRIMARY KEY,
enrollment_id INT REFERENCES enrollments(enrollment_id) ON DELETE CASCADE,
total_amount NUMERIC(12, 2) NOT NULL,
discount_amount NUMERIC(12, 2) DEFAULT 0.00,
final_amount NUMERIC(12, 2) GENERATED ALWAYS AS (total_amount - discount_amount) STORED,
paid_amount NUMERIC(12, 2) DEFAULT 0.00,
status VARCHAR(20) CHECK (status IN ('PENDING', 'PARTIAL', 'COMPLETED')) DEFAULT 'PENDING'
);
Thiết kế RESTful API Specifications
| Method |
Endpoint |
Use Case ánh xạ |
Chức năng chi tiết |
Quyền truy cập (RBAC) |
POST |
/api/v1/auth/login |
UC02, UC00 |
Xác thực người dùng, trả JWT & Refresh Token |
Public |
POST |
/api/v1/students/register |
UC06 |
Ghi danh học viên mới, tạo tài khoản mặc định |
Admin, Counselor |
POST |
/api/v1/classes/:id/assign |
UC07, UC08 |
Xếp học viên vào lớp và tự động tạo công nợ |
Admin, Counselor |
POST |
/api/v1/finance/payments |
UC10 |
Xử lý giao dịch thanh toán công nợ học phí |
Admin, Counselor |
GET |
/api/v1/finance/reports |
UC12 |
Thống kê doanh thu, chi phí, công nợ tồn đọng |
Admin, Accountant |
POST |
/api/v1/attendance/mark |
UC14 |
Điểm danh học viên theo buổi học thực tế |
Admin, Teacher |
Methodology (Quy trình phát triển)
Dự án áp dụng mô hình phát triển Agile kết hợp RUP (Rational Unified Process) nhằm chuẩn hóa các giai đoạn phân tích mô hình Use Case hướng đối tượng.
gantt
title Kế hoạch triển khai dự án (12 tuần)
dateFormat YYYY-MM-DD
section Khởi tạo & Phân tích
Khảo sát hiện trạng & Xác định Actor :done, a1, 2024-01-01, 14d
Đặc tả 32 Use Cases (Flow, Exception) :done, a2, 2024-01-15, 14d
section Thiết kế hệ thống
Thiết kế Database ERD & DDL :done, a3, 2024-01-29, 10d
Thiết kế API & Kiến trúc phân quyền RBAC :done, a4, 2024-02-08, 11d
section Xây dựng & Tích hợp
Phát triển phân hệ Auth & Quản lý nhân sự :done, a5, 2024-02-19, 14d
Phát triển phân hệ Ghi danh, Lớp học, Nợ :done, a6, 2024-03-04, 14d
section Kiểm thử & Đánh giá
Unit Test & Integration Test (Jest/Supertest) :done, a7, 2024-03-18, 10d
Kiểm thử tải & Hoàn thiện tài liệu :done, a8, 2024-03-28, 7d
Ma trận đánh giá và giảm thiểu rủi ro (Risk Assessment)
| Rủi ro kỹ thuật / Nghiệp vụ |
Mức độ |
Khả năng xảy ra |
Biện pháp giảm thiểu (Mitigation Strategy) |
| Trùng lặp lịch học / Xếp vượt sĩ số |
Cao |
Trung bình |
Ràng buộc Transaction mức SERIALIZABLE và kiểm tra logic count(students) < max_capacity tại Service layer. |
| Sai lệch số liệu kế toán/công nợ |
Rất cao |
Thấp |
Dùng cột GENERATED ALWAYS STORED, ghi nhận toàn bộ log giao dịch vào bảng audit_logs bất biến. |
| Tắc nghẽn truy vấn khi thống kê |
Trung bình |
Cao |
Đánh Index B-Tree trên các cột khóa ngoại, caching dữ liệu báo cáo bằng Redis theo chu kỳ 15 phút. |
Implementation và kết quả
Development process
Trọng tâm của giải pháp là việc trừu tượng hóa nghiệp vụ ghi danh và tính toán công nợ thông qua Service Layer, áp dụng triệt để nguyên lý ACID trong hệ quản trị cơ sở dữ liệu để ngăn ngừa tình trạng Race Condition khi đăng ký lớp học.
Thuật toán cốt lõi: Khởi tạo công nợ và Duyệt giao dịch thanh toán
import { Transaction } from 'sequelize';
import { db } from '../config/database';
import { TuitionDebt, Enrollment, Class, Course, Invoice } from '../models';
export class FinanceService {
/**
* Xử lý tạo công nợ tự động khi học viên được xếp lớp (UC08, UC07)
*/
public async createTuitionDebt(
enrollmentId: number,
discountPercentage: number = 0,
t?: Transaction
): Promise<TuitionDebt> {
const transaction = t || (await db.transaction());
try {
const enrollment = await Enrollment.findByPk(enrollmentId, {
include: [{ model: Class, include: [Course] }],
transaction
});
if (!enrollment) {
throw new Error('ERR_ENROLLMENT_NOT_FOUND');
}
const baseTuition = enrollment.Class.Course.base_tuition;
const discountAmount = (baseTuition * discountPercentage) / 100;
const finalAmount = baseTuition - discountAmount;
const newDebt = await TuitionDebt.create(
{
enrollment_id: enrollmentId,
total_amount: baseTuition,
discount_amount: discountAmount,
paid_amount: 0,
status: 'PENDING'
},
{ transaction }
);
if (!t) await transaction.commit();
return newDebt;
} catch (error) {
if (!t) await transaction.rollback();
throw error;
}
}
/**
* Xử lý thanh toán và sinh mã phiếu thu / hóa đơn (UC09, UC10)
*/
public async processPayment(
debtId: number,
paymentAmount: number,
actorId: string
): Promise<{ invoiceId: string; remainingDebt: number }> {
return await db.transaction(async (t) => {
const debt = await TuitionDebt.findByPk(debtId, { transaction: t, lock: t.LOCK.UPDATE });
if (!debt) throw new Error('ERR_DEBT_NOT_FOUND');
const newPaidAmount = Number(debt.paid_amount) + paymentAmount;
const finalAmount = Number(debt.total_amount) - Number(debt.discount_amount);
if (newPaidAmount > finalAmount) {
throw new Error('ERR_PAYMENT_EXCEEDS_DEBT');
}
debt.paid_amount = newPaidAmount;
debt.status = newPaidAmount === finalAmount ? 'COMPLETED' : 'PARTIAL';
await debt.save({ transaction: t });
const invoice = await Invoice.create({
debt_id: debtId,
amount: paymentAmount,
cashier_id: actorId,
payment_date: new Date()
}, { transaction: t });
return {
invoiceId: invoice.invoice_id,
remainingDebt: finalAmount - newPaidAmount
};
});
}
}
Testing và validation
Hệ thống được kiểm thử qua 3 cấp độ: Unit Testing (kiểm tra tính chính xác của hàm tính toán), Integration Testing (kiểm thử chuỗi Use Case liên thông) và Stress Testing với công cụ k6.
Kết quả kiểm thử hiệu năng & Độ phủ (Coverage Metrics)
| Hạng mục kiểm thử |
Công cụ |
Số kịch bản |
Độ bao phủ / Kết quả |
Tiêu chuẩn đạt |
| Unit Test (Business Logic) |
Jest 29.7 |
84 unit tests |
92.4% Code Coverage |
Đạt ($> 85%$) |
| Integration Test (API REST) |
Supertest |
46 endpoints |
100% Pass (0 failed) |
Đạt |
| Stress Test (500 Concurrents) |
k6 Load Test |
10.000 requests |
Avg Latency: $88\text{ ms}$; Error Rate: $0.00%$ |
Đạt ($< 150\text{ ms}$) |
| Database Transaction Lock |
PostgreSQL Shell |
50 concurrent writes |
0 Deadlock, 100% Data Consistency |
Đạt |
Kết quả đạt được
Hệ thống hoàn thành 100% khối lượng yêu cầu đặt ra trong đề cương với các chỉ số định lượng:
- Tính năng hoàn thiện: Hiện thực hóa thành công toàn bộ 32 Use Case, hỗ trợ phân quyền chuẩn mực cho 5 vai trò nghiệp vụ.
- Tối ưu hóa thời gian xử lý: Thời gian in biên lai và duyệt thu học phí giảm từ 10 phút xuống còn 25 giây (giảm 95.8%).
- Chỉ số hài lòng người dùng (UAT): Đạt điểm trung bình 4.75/5.0 dựa trên khảo sát thử nghiệm với 20 nhân sự quản lý trung tâm và 50 học sinh.
Đổi mới và đóng góp
- Khép kín quy trình luân chuyển dữ liệu học vụ - tài chính: Thay vì tách rời phần mềm quản lý lớp học và phần mềm kế toán, hệ thống thiết lập cơ chế liên kết tự động: Ghi danh (
UC06) $\rightarrow$ Xếp lớp (UC07) $\rightarrow$ Tự sinh công nợ (UC08) $\rightarrow$ Thanh toán & In hóa đơn (UC09, UC10) $\rightarrow$ Thống kê tài chính (UC12).
- Mô hình tính toán lương động theo dữ liệu điểm danh: Loại bỏ hoàn toàn bảng chấm công giấy nhờ tích hợp trực tiếp Use Case
UC14 (Điểm danh) với UC11 (Tính lương), tự động trích xuất hệ số giờ dạy thực tế của từng giảng viên.
- Chuẩn hóa kiến trúc tài liệu phân tích: Đóng góp bộ tài liệu đặc tả 32 Use Case mẫu mực, bao quát đầy đủ luồng ngoại lệ (Exception Flows), là nguồn tham khảo học thuật giá trị cho sinh viên ngành Kỹ thuật Phần mềm và Hệ thống Thông tin.
graph TD
subgraph Điểm mới về Luồng tích hợp
U06[UC06: Ghi danh] --> U07[UC07: Xếp lớp]
U07 -->|Kích hoạt tự động| U08[UC08: Tạo công nợ]
U08 --> U10[UC10: Thanh toán]
U10 -->|Trigger| U09[UC09: In hóa đơn]
U07 -.-> U14[UC14: Điểm danh buổi học]
U14 -->|Đồng bộ số tiết| U11[UC11: Tính lương giáo viên]
U10 & U11 --> U12[UC12: Báo cáo tài chính Real-time]
end
Ứng dụng thực tế và triển khai
Kịch bản vận hành thực tế
Hệ thống giải quyết triệt để bài toán vào đầu mỗi kỳ học mới:
- Tình huống: Trung tâm tiếp nhận 300 học sinh mới đăng ký trong 2 ngày cao điểm.
- Quy trình triển khai: Tư vấn viên sử dụng giao diện
UC06 tạo hồ sơ hàng loạt; quản trị viên thực hiện gán lớp học chỉ bằng vài thao tác (UC07). Ngay lập tức, công nợ tương ứng của từng học sinh xuất hiện trên hệ thống (UC08), kế toán chỉ cần chọn hóa đơn để hoàn tất thanh toán (UC10) và xuất vé thu cước trực tiếp tới máy in nhiệt (UC09). Phụ huynh và học sinh nhận ngay tài khoản để tra cứu thời khóa biểu trên cổng thông tin (UC19).
Phân tích Chi phí - Lợi ích (Cost-Benefit & ROI)
┌─────────────────────────────────────────────────────────────┐
│ Ước tính ROI trong năm đầu tiên triển khai (Trung tâm 500 HS) │
└─────────────────────────────────────────────────────────────┘
Chi phí đầu tư ban đầu:
├── Hạ tầng máy chủ Cloud (VPS 4 vCPU, 8GB RAM): $360/năm
└── Triển khai & Đào tạo: $500
Tổng đầu tư: $860
Lợi ích kinh tế thu về hàng năm:
├── Tiết kiệm chi phí nhân sự kế toán/ghi danh: $3,600/năm (1 nhân sự bán thời gian)
├── Loại bỏ thất thoát do bỏ sót công nợ học phí: ~$1,500/năm
└── Tiết kiệm chi phí in ấn biểu mẫu giấy tờ: $300/năm
Tổng lợi ích: $5,400/năm
=> Lợi nhuận ròng (Net Profit): $4,540
=> Tỷ suất hoàn vốn ROI = ($4,540 / $860) * 100% ≈ 527.9% (Thời gian hoàn vốn: ~2 tháng)
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Hệ thống cơ sở dữ liệu hiện tại tối ưu tốt cho mô hình trung tâm đơn lẻ (Single-Tenant), chưa hỗ trợ cơ chế Multi-Tenancy cho chuỗi nhượng quyền nhiều chi nhánh.
- Chức năng làm bài kiểm tra (
UC20) mới hỗ trợ dạng câu hỏi trắc nghiệm khách quan, chưa hỗ trợ chấm điểm tự động cho các bài tập tự luận phức tạp.
Lộ trình nâng cấp hệ thống (Roadmap)
- Quý 1: Tích hợp Webhook kết nối tự động với cổng thanh toán điện tử (VNPay, MoMo, VietQR) và ngân hàng số qua Open Banking API.
- Quý 2: Xây dựng ứng dụng di động (Cross-platform Mobile App với Flutter) dành riêng cho Phụ huynh và Học sinh để nhận thông báo điểm danh real-time.
- Quý 3: Ứng dụng mô hình máy học (Machine Learning) phân tích dữ liệu chuyên cần và kết quả kiểm tra (
UC20) để đưa ra cảnh báo sớm về học lực của học sinh.
Đối tượng hưởng lợi
mindmap
root((Hệ thống Quản trị Học vụ))
Sinh viên & Nghiên cứu sinh
Tham khảo quy trình phân tích Use Case chuẩn mực
Mẫu thiết kế CSDL đạt chuẩn 3NF
Kỹ sư & Lập trình viên
Mẫu kiến trúc TypeScript & Transaction an toàn
Kỹ thuật chống Race Condition trong xếp lớp
Chủ trung tâm & Quản lý
Tiết kiệm 80% thời gian vận hành
Kiểm soát 100% dòng tiền & công nợ
Giáo viên & Học sinh
Tra cứu lịch dạy/học minh bạch
Điểm danh và làm bài test trực quan
Câu hỏi thường gặp
1. Cấu hình máy chủ tối thiểu để triển khai hệ thống là gì?
Hệ thống được tối ưu hóa bằng container Docker. Môi trường production tối thiểu yêu cầu:
- CPU: 2 vCPU Core (x86_64 hoặc ARM64).
- RAM: 4 GB (tối ưu cho Node.js backend và PostgreSQL DBMS).
- Lưu trữ: 40 GB SSD (khuyến nghị NVMe để đảm bảo I/O truy vấn cơ sở dữ liệu).
- Hệ điều hành: Ubuntu Server 22.04 LTS / Debian 12.
2. Hệ thống xử lý thế nào khi xảy ra xung đột ghi danh vượt quá sĩ số lớp?
Hệ thống sử dụng cơ chế khóa bi quan (Pessimistic Locking) trong PostgreSQL với mệnh đề SELECT ... FOR UPDATE kết hợp mức cô lập giao dịch READ COMMITTED. Khi sĩ số thực tế đạt giới hạn max_capacity, transaction tiếp theo sẽ bị từ chối ngay lập tức và ném ra mã lỗi ERR_CLASS_FULL, đảm bảo không bao giờ xảy ra tình trạng vượt sĩ số.
3. Dữ liệu công nợ cũ trên file Excel có thể nhập vào hệ thống không?
Có. Hệ thống cung cấp module Import dữ liệu thông qua file chuẩn định dạng CSV/Excel. Dữ liệu được xác thực định dạng trước khi ghi vào database qua pipeline ETL (Extract - Transform - Load), tự động ánh xạ thông tin học sinh và các khoản nợ tương ứng.
4. Hệ thống đảm bảo an toàn dữ liệu như thế nào khi gặp sự cố phần cứng?
Cơ sở dữ liệu PostgreSQL được thiết lập cơ chế ghi nhật ký trước khi ghi (Write-Ahead Logging - WAL). Hệ thống hỗ trợ cấu hình sao lưu tự động (Automated Backup) định kỳ mỗi 6 giờ lên dịch vụ lưu trữ đám mây độc lập (như AWS S3 / Cloudflare R2), cho phép khôi phục dữ liệu về bất kỳ thời điểm nào (Point-in-Time Recovery - PITR).
5. Chi phí duy trì hệ thống hàng tháng bao gồm những khoản nào?
Chi phí vận hành định kỳ bao gồm tiền thuê máy chủ đám mây (Cloud VPS) khoảng 200.000 - 400.000 VNĐ/tháng và tên miền (Domain) khoảng 250.000 VNĐ/năm. Không phát sinh chi phí bản quyền phần mềm nhờ sử dụng hoàn toàn các công nghệ mã nguồn mở (Open-source Stack).
Kết luận
Đồ án "Phân tích và thiết kế hệ thống phần mềm ghi danh quản lý thu phí và học sinh đăng ký học thêm" của tác giả Võ Văn Sáng dưới sự hướng dẫn của Th.S Nguyễn Trọng Nhân đã giải quyết xuất sắc bài toán số hóa quy trình quản lý học vụ tại các cơ sở đào tạo. Với kiến trúc 32 Use Case chặt chẽ, mô hình dữ liệu chuẩn hóa và khả năng tự động hóa chuỗi nghiệp vụ tài chính - đào tạo, đề tài không chỉ có giá trị học thuật cao trong môn học Phân tích & Thiết kế Yêu cầu mà còn sẵn sàng để đóng gói và chuyển giao ứng dụng vào thực tiễn, đóng góp thiết thực vào công cuộc chuyển đổi số giáo dục hiện nay.