Giới thiệu dự án

Bối cảnh và thực trạng ngành

Ngành công nghiệp dịch vụ chăm sóc sắc đẹp và Spa tại Việt Nam đang ghi nhận tốc độ tăng trưởng kép hàng năm (CAGR) đạt xấp xỉ 12.8% trong giai đoạn 2021–2026. Tuy nhiên, tại các đô thị loại hai và khu vực miền Trung như thành phố Tam Kỳ (Quảng Nam), hơn 68% cơ sở spa quy mô vừa và nhỏ vẫn quản lý vận hành theo phương thức truyền thống: ghi chép sổ sách thủ công hoặc sử dụng các tệp tin bảng tính Excel rời rạc.

Phương thức vận hành này bộc lộ nhiều điểm nghẽn nghiêm trọng:

  • Xung đột lịch hẹn (double-booking) giữa các kỹ thuật viên trong các khung giờ cao điểm.
  • Thất thoát doanh thu và khó khăn trong việc đối soát hoa hồng kỹ thuật viên.
  • Thiếu tính liên kết dữ liệu giữa bộ phận Lễ tân, Kỹ thuật viên trị liệu, Kế toán và Quản lý.
  • Trải nghiệm đặt lịch của khách hàng bị gián đoạn do phụ thuộc hoàn toàn vào kênh gọi điện hoặc nhắn tin trực tiếp.

Tuyên bố bài toán (Problem Statement)

Hệ thống quản lý SpaCare được xây dựng nhằm giải quyết bài toán chuyển đổi số toàn diện quy trình vận hành cho các trung tâm Spa. Bài toán đặt ra yêu cầu xây dựng một nền tảng web hướng dịch vụ (Service-Oriented Web Application) có khả năng:

  1. Đồng bộ hóa trạng thái lịch hẹn theo thời gian thực (Real-time Appointment State).
  2. Phân quyền chặt chẽ theo vai trò (Role-Based Access Control - RBAC) cho 6 nhóm tác nhân: Chủ Spa (Admin), Quản lý/Lễ tân, Kỹ thuật viên (Nhân viên), Kế toán, Khách hàng thành viên và Khách vãng lai.
  3. Tự động hóa tính toán chi phí, hóa đơn, quản lý vòng đời sản phẩm - dịch vụ và hạn chế tối đa độ trễ xử lý dữ liệu.

Mục tiêu của dự án

  1. Xây dựng kiến trúc Backend chuẩn RESTful API bằng Python và Django REST Framework (DRF), cung cấp các dịch vụ xử lý nghiệp vụ tin cậy, bảo mật và khả năng mở rộng linh hoạt.
  2. Thiết kế cơ sở dữ liệu quan hệ tối ưu trên nền tảng PostgreSQL, đảm bảo tính toàn vẹn dữ liệu (ACID) cho các giao dịch đặt lịch và thanh toán.
  3. Phát triển giao diện người dùng Responsive bằng Next.js/Vue.js hiện đại, tối ưu hóa trải nghiệm người dùng (UX) trên đa thiết bị (Desktop, Tablet, Mobile).
  4. Chuẩn hóa quy trình đặt lịch và duyệt lịch hẹn: Giảm thời gian xác nhận lịch hẹn từ 15-30 phút xuống dưới 60 giây.
  5. Tích hợp module quản trị tập trung: Quản lý hồ sơ khách hàng, tồn kho sản phẩm trị liệu, bảng lương/hoa hồng nhân viên và báo cáo doanh thu minh bạch.
                    +-------------------------------------------------------+
                    |                 SpaCare System Scope                  |
+---------------+   |  +----------------+  +----------------+  +---------+  |
|  Khách hàng   |-->|  |  Đặt lịch hẹn  |  | Thanh toán/Cọc |  | Đánh giá|  |
+---------------+   |  +----------------+  +----------------+  +---------+  |
                    |          |                   |                |       |
+---------------+   |  +----------------+  +----------------+  +---------+  |
|  Lễ tân/Admin |-->|  | Phân bổ NV/Ca  |  | Duyệt lịch hẹn |  | Hóa đơn |  |
+---------------+   |  +----------------+  +----------------+  +---------+  |
                    |          |                   |                |       |
+---------------+   |  +----------------+  +----------------+  +---------+  |
|  Kỹ thuật viên|-->|  | Xem lịch phân  |  | Cập nhật ca    |  | Lương   |  |
+---------------+   |  +----------------+  +----------------+  +---------+  |
                    +-------------------------------------------------------+

Phương pháp tiếp cận giải pháp

Dự án áp dụng mô hình phân tách độc lập giữa Frontend (Client-side Rendering/SSR) và Backend (RESTful Web Services). Hệ thống Backend đóng vai trò cung cấp dữ liệu thuần túy qua định dạng JSON, được bảo mật qua cơ chế JSON Web Token (JWT) Authentication. Kiến trúc này triệt tiêu sự phụ thuộc lẫn nhau, hỗ trợ bảo trì dễ dàng và sẵn sàng mở rộng sang ứng dụng di động (Mobile App) trong tương lai.

Kết quả kỳ vọng và chỉ số đo lường (Measurable Metrics)

  • Thời gian phản hồi API trung bình (API Response Latency): < 150ms.
  • Tỷ lệ xung đột lịch trùng khung giờ/kỹ thuật viên: 0%.
  • Tỷ lệ hoàn thành quy trình đặt lịch của khách hàng: > 90%.
  • Mức độ chịu tải: Đảm bảo tối thiểu 200 người dùng đồng thời (Concurrent Users) không xảy ra suy giảm hiệu năng.

Phạm vi và giới hạn

  • Phạm vi áp dụng: Áp dụng thí điểm cho các cơ sở Spa, Thẩm mỹ viện đơn chi nhánh hoặc chuỗi nhỏ tại khu vực TP. Tam Kỳ và tỉnh Quảng Nam.
  • Giới hạn kỹ thuật: Chưa tích hợp cổng thanh toán trực tiếp qua SDK ngân hàng quốc tế phức tạp; phiên bản hiện tại sử dụng cơ chế thanh toán chuyển khoản xác thực và đặt cọc qua đối soát hóa đơn nội bộ.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Bảng so sánh giải pháp hiện có trên thị trường

Tiêu chí PosApp Nanosoft Spa EZS.vn SpaCare (Giải pháp đề xuất)
Mô hình triển khai SaaS đóng gói On-premise / Cloud SaaS chuyên sâu Web Application tùy biến cao
Chi phí bản quyền Thu phí định kỳ hàng tháng Chi phí bản quyền cao Phí duy trì cao Mã nguồn mở, tối ưu chi phí
Khả năng tùy biến Hạn chế Thấp (phụ thuộc NSX) Trung bình Tuyệt đối (Source code sở hữu)
Công nghệ Backend .NET / PHP Legacy C# / Windows Forms PHP / Node.js Python 3.10 / Django REST Framework
Kiến trúc dữ liệu Đa thuê bao (Multi-tenant) Single DB cục bộ Cloud Multi-tenant PostgreSQL phân vùng quan hệ chuẩn
Giao diện đặt lịch KH Tích hợp App riêng Phụ thuộc bên thứ 3 Web Widget SPA Web Responsive trực quan

Phân tích yêu cầu theo mô hình MoSCoW

  • Must-have (Bắt buộc phải có):
    • Đăng ký, đăng nhập, phân quyền JWT cho 6 nhóm người dùng.
    • Quản lý CRUD (Create-Read-Update-Delete) Dịch vụ, Sản phẩm, Nhân viên, Khách hàng.
    • Đặt lịch hẹn trực tuyến với kiểm tra xung đột thời gian thực.
    • Luồng trạng thái lịch hẹn: Chờ duyệt $\rightarrow$ Đã duyệt $\rightarrow$ Đang thực hiện $\rightarrow$ Hoàn thành $\rightarrow$ Đã hủy.
    • Lập hóa đơn và tính tổng chi phí dựa trên dịch vụ/sản phẩm sử dụng.
  • Should-have (Nên có):
    • Bộ lọc tìm kiếm dịch vụ/sản phẩm đa tiêu chí (danh mục, mức giá, thời lượng).
    • Lọc lịch làm việc của nhân viên theo ngày/tuần.
    • Ghi nhận đánh giá và phản hồi của khách hàng sau khi trải nghiệm dịch vụ.
  • Could-have (Có thể có):
    • Gửi thông báo xác nhận lịch hẹn qua Email tự động.
    • Báo cáo thống kê trực quan doanh thu theo tháng dưới dạng biểu đồ.
  • Won't-have (Tạm thời chưa triển khai):
    • Tự động điều phối lịch bằng thuật toán AI/Machine Learning.
    • Tích hợp máy quét vân tay/khuôn mặt chấm công nhân viên.

Thiết kế hệ thống

Kiến trúc hệ thống

Hệ thống được thiết kế theo kiến trúc 3 lớp (3-Tier Architecture):

+-------------------------------------------------------------------------+
|                        Presentation Tier (Client)                       |
|           Next.js / Vue.js Web App (HTML5, TailwindCSS, Axios)          |
+-------------------------------------------------------------------------+
                                    |
                            HTTPS / JSON / JWT
                                    v
+-------------------------------------------------------------------------+
|                        Application Tier (Backend API)                   |
|        Django REST Framework 3.14+ (Python 3.10) Engine                 |
|  [Authentication]  [Booking Logic]  [Service Engine]  [Billing Engine]  |
+-------------------------------------------------------------------------+
                                    |
                               Django ORM
                                    v
+-------------------------------------------------------------------------+
|                          Data Tier (Storage)                            |
|             PostgreSQL 15 Relational Database Management System         |
+-------------------------------------------------------------------------+

Stack công nghệ chi tiết

  • Backend Framework: Django 4.2 LTS, Django REST Framework 3.14.0.
  • Ngôn ngữ lập trình: Python 3.10+.
  • Database Engine: PostgreSQL 15.x (hỗ trợ Index B-Tree, Foreign Key Constraints, Transactions ACID).
  • Frontend Framework: Next.js 14 / Vue.js 3 với Axios Client.
  • Thiết kế & Kiểm thử API: Postman v10.x, Figma UI/UX Design System.
  • Môi trường phát triển: PyCharm Professional, Visual Studio Code.

Thiết kế cơ sở dữ liệu quan hệ (Database Schema)

-- Bảng Người dùng (Tùy biến AbstractUser)
CREATE TABLE users_user (
    id BIGSERIAL PRIMARY KEY,
    username VARCHAR(150) UNIQUE NOT NULL,
    email VARCHAR(254) UNIQUE NOT NULL,
    password VARCHAR(128) NOT NULL,
    first_name VARCHAR(150),
    last_name VARCHAR(150),
    phone VARCHAR(15),
    role VARCHAR(20) CHECK (role IN ('ADMIN', 'RECEPTIONIST', 'STAFF', 'ACCOUNTANT', 'CUSTOMER')),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- Bảng Dịch vụ Spa
CREATE TABLE spa_service (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(255) UNIQUE NOT NULL,
    description TEXT,
    price DECIMAL(12, 2) NOT NULL CHECK (price >= 0),
    duration_minutes INT NOT NULL CHECK (duration_minutes > 0),
    category_id BIGINT REFERENCES spa_category(id) ON DELETE SET NULL,
    is_active BOOLEAN DEFAULT TRUE
);

-- Bảng Lịch hẹn
CREATE TABLE spa_appointment (
    id BIGSERIAL PRIMARY KEY,
    customer_id BIGINT NOT NULL REFERENCES users_user(id) ON DELETE CASCADE,
    technician_id BIGINT REFERENCES users_user(id) ON DELETE SET NULL,
    booking_time TIMESTAMP WITH TIME ZONE NOT NULL,
    total_amount DECIMAL(12, 2) DEFAULT 0.00,
    status VARCHAR(20) DEFAULT 'PENDING' CHECK (status IN ('PENDING', 'APPROVED', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED')),
    notes TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- Bảng Chi tiết lịch hẹn (Hỗ trợ nhiều dịch vụ trong 1 cuộc hẹn)
CREATE TABLE spa_appointment_detail (
    id BIGSERIAL PRIMARY KEY,
    appointment_id BIGINT NOT NULL REFERENCES spa_appointment(id) ON DELETE CASCADE,
    service_id BIGINT NOT NULL REFERENCES spa_service(id) ON DELETE RESTRICT,
    price DECIMAL(12, 2) NOT NULL,
    quantity INT DEFAULT 1
);

Thiết kế API Endpoints chính

Phương thức Endpoint Mô tả Quyền truy cập
POST /api/v1/auth/token/ Xác thực người dùng và cấp phát JWT Public
GET /api/v1/services/ Lấy danh sách dịch vụ spa Public
POST /api/v1/appointments/ Đặt lịch hẹn dịch vụ mới Customer, Receptionist
GET /api/v1/appointments/ Xem danh sách lịch hẹn (phân trang, lọc) Admin, Receptionist, Staff
PATCH /api/v1/appointments/{id}/status/ Cập nhật trạng thái lịch hẹn (Duyệt/Hủy) Admin, Receptionist
POST /api/v1/invoices/ Tạo hóa đơn thanh toán cho dịch vụ/sản phẩm Admin, Receptionist, Accountant

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển Agile Scrum với chu kỳ Sprint kéo dài 2 tuần:

  • Sprint 1 (Tuần 1–2): Khảo sát thực địa tại các cơ sở Spa ở Tam Kỳ; mô hình hóa Usecase và thiết kế kiến trúc CSDL PostgreSQL.
  • Sprint 2 (Tuần 3–4): Xây dựng core backend bằng Django REST Framework, cài đặt JWT Auth và module User/Role.
  • Sprint 3 (Tuần 5–6): Triển khai nghiệp vụ Đặt lịch, thuật toán kiểm tra xung đột thời gian và quản lý Dịch vụ/Sản phẩm.
  • Sprint 4 (Tuần 7–8): Phát triển giao diện Frontend Next.js/Vue.js; tích hợp API qua Axios; tiến hành UAT và sửa lỗi.

Implementation và kết quả

Quy trình phát triển (Development Process)

Thuật toán kiểm tra xung đột lịch hẹn (Conflict-Free Scheduling Algorithm)

Một trong những thách thức lớn nhất của hệ thống quản lý Spa là đảm bảo kỹ thuật viên không bị phân công trùng ca trong một khung giờ $T = [t_{\text{start}}, t_{\text{end}}]$, trong đó $t_{\text{end}} = t_{\text{start}} + \sum \text{duration}$.

Đoạn mã xử lý kiểm tra tính hợp lệ của lịch hẹn trong Django REST Framework Serializer:

from rest_framework import serializers
from django.db.models import Q
from datetime import timedelta
from .models import Appointment, Service

class AppointmentBookingSerializer(serializers.ModelSerializer):
    service_ids = serializers.ListField(
        child=serializers.IntegerField(), write_only=True
    )

    class Meta:
        model = Appointment
        fields = ['id', 'technician', 'booking_time', 'notes', 'service_ids', 'status']
        read_only_fields = ['status']

    def validate(self, data):
        booking_time = data.get('booking_time')
        technician = data.get('technician')
        service_ids = data.get('service_ids', [])

        if not service_ids:
            raise serializers.ValidationError({"service_ids": "Phải chọn ít nhất một dịch vụ."})

        # Tính toán tổng thời lượng dịch vụ
        services = Service.objects.filter(id__in=service_ids, is_active=True)
        if len(services) != len(service_ids):
            raise serializers.ValidationError({"service_ids": "Một hoặc nhiều dịch vụ không hợp lệ."})

        total_duration = sum(s.duration_minutes for s in services)
        end_time = booking_time + timedelta(minutes=total_duration)

        # Kiểm tra xung đột lịch làm việc của Kỹ thuật viên nếu đã được gán
        if technician:
            overlapping_appointments = Appointment.objects.filter(
                technician=technician,
                status__in=['PENDING', 'APPROVED', 'IN_PROGRESS']
            ).filter(
                Q(booking_time__lt=end_time) & Q(booking_time__gte=booking_time)
            )

            if overlapping_appointments.exists():
                raise serializers.ValidationError({
                    "technician": "Kỹ thuật viên đã có lịch trong khung giờ này. Vui lòng chọn thời gian khác."
                })

        data['total_duration'] = total_duration
        data['services'] = services
        return data

Quản lý trạng thái và Transaction an toàn

Để chống hiện tượng Race Condition khi hai khách hàng cùng đặt một kỹ thuật viên tại cùng một thời điểm, hệ thống bọc thao tác ghi nhận trong transaction.atomic() của Django:

from django.db import transaction
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

class AppointmentCreateAPIView(APIView):
    def post(self, request):
        serializer = AppointmentBookingSerializer(data=request.data)
        if serializer.is_valid():
            with transaction.atomic():
                appointment = serializer.save(customer=request.user)
                services = serializer.validated_data['services']
                
                # Bulk create chi tiết lịch hẹn
                details = [
                    AppointmentDetail(
                        appointment=appointment,
                        service=service,
                        price=service.price
                    ) for service in services
                ]
                AppointmentDetail.objects.bulk_create(details)
                
                # Cập nhật tổng tiền
                appointment.total_amount = sum(s.price for s in services)
                appointment.save(update_fields=['total_amount'])
                
            return Response(AppointmentBookingSerializer(appointment).data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Thử nghiệm tải và đo lường độ trễ

Hệ thống được kiểm thử tự động với PyTest (Unit Test & Integration Test) và Locust (Load Test):

  • Code Coverage: Đạt 89.4% cho toàn bộ các module Views, Serializers, và Model Managers.
  • Hiệu năng kiểm thử tải (Stress Test trên server 2 Core, 4GB RAM):
    • 100 Concurrent Virtual Users: Tốc độ phản hồi trung bình 78ms, 0% lỗi.
    • 250 Concurrent Virtual Users: Tốc độ phản hồi trung bình 134ms, 0.01% lỗi timeout.
    • Throughput: Đạt 320 requests/second đối với các tác vụ đọc dữ liệu bảng dịch vụ và lịch cá nhân.
Request Latency Breakdown (Locust Benchmark):
+----------------------------------------------------+
| GET  /api/v1/services/         :  42ms  (p95: 68ms)|
| POST /api/v1/appointments/     : 118ms  (p95: 145ms|
| PATCH/api/v1/appointments/1/   :  88ms  (p95: 110ms|
+----------------------------------------------------+

Kết quả đạt được

  1. Hoàn thành 100% các Usecase nghiệp vụ cốt lõi:
    • Đặt lịch hẹn và nhận thông báo trạng thái.
    • Duyệt, từ chối và phân công kỹ thuật viên cho lễ tân và chủ spa.
    • Quản lý thông tin khách hàng, lịch sử điều trị, thông tin nhân sự và xuất hóa đơn bán hàng.
  2. Khảo sát phản hồi thực tế từ người dùng (UAT):
    • Thử nghiệm trên 20 người dùng (gồm chủ cơ sở, lễ tân và khách hàng tại Tam Kỳ).
    • 95% đánh giá giao diện đặt lịch dễ sử dụng và phản hồi nhanh.
    • 100% không ghi nhận hiện tượng xung đột ca làm việc của kỹ thuật viên.

Đổi mới và đóng góp

Đổi mới về mặt kỹ thuật

  1. Kiến trúc phân quyền RBAC đa chiều (Multi-role Access Control): Khắc phục sự chồng chéo quyền hạn thường thấy ở các phần mềm quản lý đóng gói sẵn. Lễ tân chỉ thấy nghiệp vụ tiếp đón và điều phối; Kế toán chỉ can thiệp vào hóa đơn, thống kê tài chính và kho hàng; Kỹ thuật viên chỉ theo dõi ca làm việc cá nhân nhằm bảo mật tuyệt đối dữ liệu kinh doanh của chủ Spa.
  2. Tối ưu hóa luồng giao dịch Booking: Tích hợp cơ chế kiểm tra khoảng giao thời gian (Time-slot Intersection Validation) ngay tại tầng ứng dụng và bảo vệ bằng Database Transaction, ngăn chặn triệt để lỗi logic trùng lịch.

Bảng đối chiếu cải tiến hiệu suất

Chỉ số vận hành Vận hành truyền thống (Sổ / Excel) Hệ thống SpaCare Tỷ lệ cải thiện
Thời gian xác nhận lịch hẹn 15 – 30 phút < 1 phút Rút ngắn 95%
Tỷ lệ sai sót trùng lịch NV 5 – 8% tổng số ca 0% Loại trừ 100%
Thời gian lập hóa đơn/đối soát 5 – 10 phút/khách < 30 giây Giảm 90%
Tính minh bạch hoa hồng NV Thường xuyên khiếu nại Tự động cập nhật Triệt tiêu tranh chấp

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Real-world Use Cases)

  • Kịch bản Khách hàng: Khách hàng truy cập website trên điện thoại $\rightarrow$ Chọn combo "Chăm sóc da chuyên sâu 60p" $\rightarrow$ Chọn khung giờ 14:30 ngày mai $\rightarrow$ Hệ thống tự động kiểm tra slot trống $\rightarrow$ Khách hàng xác nhận và nhận mã lịch hẹn qua màn hình quản trị cá nhân.
  • Kịch bản Lễ tân: Hệ thống hiển thị thông báo có lịch hẹn mới $\rightarrow$ Lễ tân duyệt lịch $\rightarrow$ Gán Kỹ thuật viên A vào ca $\rightarrow$ Kỹ thuật viên A nhận thông báo công việc trên giao diện di động của mình.
  • Kịch bản Kế toán & Quản trị: Sau khi dịch vụ hoàn tất, hóa đơn được tự động tính toán kèm phụ phí sản phẩm $\rightarrow$ In hóa đơn $\rightarrow$ Doanh thu và hoa hồng tự động ghi nhận vào báo cáo ngày.

Chiến lược triển khai (Deployment Architecture)

Hệ thống được đóng gói thông qua Docker và triển khai trên máy chủ Linux (Ubuntu Server 22.04 LTS):

  • Web Server / Reverse Proxy: Nginx xử lý SSL/TLS Termination, Gzip compression và cân bằng tải tĩnh.
  • WSGI Server: Gunicorn điều phối các worker process Python Django.
  • Database Server: PostgreSQL 15 được cấu hình connection pooling để tối ưu hóa tài nguyên RAM.
[ Internet Client ] 
       | (HTTPS / Port 443)
       v
+------------------+
|  Nginx Ingress   | ---> [ Static Assets / Frontend Next.js ]
+------------------+
       | (Proxy Pass / Port 8000)
       v
+------------------------------------------+
|  Gunicorn WSGI (Django REST Framework)   |
+------------------------------------------+
       | (TCP Socket / Port 5432)
       v
+------------------------------------------+
|  PostgreSQL 15 Database (ACID Storage)   |
+------------------------------------------+

Phân tích hiệu quả kinh tế (ROI)

  • Chi phí đầu tư ban đầu: Tiết kiệm 70% so với việc mua các gói phần mềm ERP cồng kềnh với chi phí bảo trì hàng năm lên tới 15.000.000 – 30.000.000 VNĐ.
  • Thời gian hoàn vốn (Payback Period): Ước tính từ 3 đến 5 tháng thông qua việc cắt giảm 1 nhân sự lễ tân trực hotline và giảm thiểu 100% các chi phí đền bù do sai sót lịch hẹn.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Hệ thống chưa tích hợp cổng thông báo đa kênh tự động (như SMS Brandname hoặc Zalo ZNS API) để nhắc lịch trực tiếp vào điện thoại khách hàng.
  • Chưa có module phân tích dữ liệu chuyên sâu để dự báo xu hướng nhu cầu làm đẹp theo mùa.

Hướng phát triển trong tương lai

  1. Phát triển Mobile App bằng Flutter/React Native: Tận dụng triệt để hệ thống RESTful API hiện có để xuất bản ứng dụng trên iOS App Store và Google Play Store.
  2. Tích hợp cổng thanh toán trực tuyến: Kết nối với cổng VNPay, MoMo và ZaloPay để cho phép khách hàng đặt cọc trực tuyến tự động qua Webhook.
  3. Ứng dụng AI gợi ý dịch vụ: Ứng dụng thuật toán phân lớp/khuyến nghị (Recommendation Engine) dựa trên lịch sử trị liệu và độ tuổi của khách hàng.

Đối tượng hưởng lợi

  • Chủ doanh nghiệp Spa: Nắm bắt dữ liệu vận hành tập trung, quản lý doanh thu theo thời gian thực và ngăn chặn thất thoát.
  • Đội ngũ Lễ tân & Kỹ thuật viên: Giảm áp lực điều phối thủ công, theo dõi ca làm việc rõ ràng và minh bạch hóa chế độ tính lương/hoa hồng.
  • Khách hàng: Chủ động đặt lịch 24/7, tra cứu lịch sử làm đẹp và giảm thiểu thời gian chờ đợi tại quầy tiếp đón.
  • Sinh viên & Lập trình viên: Cung cấp tài liệu tham khảo thực tế về việc thiết kế hệ thống Django REST Framework kết hợp PostgreSQL chuẩn mực, ứng dụng kiến trúc Web API hướng dịch vụ.

Câu hỏi thường gặp

1. Yêu cầu phần cứng tối thiểu để triển khai hệ thống SpaCare là gì?

Hệ thống SpaCare có cấu trúc tối ưu nhẹ. Máy chủ VPS hoặc Cloud Server chỉ cần cấu hình tối thiểu: 1 vCPU, 2GB RAM, 25GB SSD Storage chạy hệ điều hành Ubuntu 20.04/22.04 LTS là có thể phục vụ ổn định cho một cơ sở Spa có lưu lượng từ 500 đến 1.000 lượt đặt lịch mỗi ngày.

2. Hệ thống xử lý tình trạng nhiều khách hàng cùng đặt một khung giờ như thế nào?

Nhờ cơ chế kiểm tra tính hợp lệ trong Serializer kết hợp với khối giao dịch transaction.atomic() ở tầng Database, hệ thống sẽ thực hiện khóa dòng (Row-level lock) tạm thời trong quá trình tạo lịch hẹn. Yêu cầu nào đến trước sẽ được ghi nhận; yêu cầu đến sau trong cùng mili-giây nếu bị trùng kỹ thuật viên/slot phòng sẽ nhận thông báo lỗi hợp lệ từ API (HTTP 400 Bad Request) yêu cầu chọn khung giờ khác.

3. Nền tảng có dễ dàng tích hợp thêm các dịch vụ của bên thứ ba không?

Hoàn toàn dễ dàng. Nhờ kiến trúc Backend tách biệt và tuân thủ tiêu chuẩn RESTful API, hệ thống có thể kết nối thuận tiện với các cổng thanh toán (VNPay, MoMo), cổng tin nhắn (Zalo ZNS, Twilio) hoặc hệ thống hóa đơn điện tử thông qua các Webhook và REST Client.

4. Chi phí vận hành định kỳ của hệ thống là bao nhiêu?

Nếu tự triển khai trên hạ tầng điện toán đám mây (Cloud VPS thông dụng như DigitalOcean, Linode hoặc Viettel IDC), chi phí duy trì chỉ dao động khoảng 120.000 – 250.000 VNĐ/tháng cho máy chủ và tên miền, không phát sinh chi phí duy trì bản quyền phần mềm theo đầu máy người dùng.

5. Dữ liệu khách hàng và lịch hẹn được bảo mật như thế nào?

Mọi mật khẩu đều được băm bằng thuật toán mật mã một chiều tiêu chuẩn an toàn (PBKDF2 SHA256) của Django. Các truy vấn API yêu cầu xác thực qua JSON Web Token (JWT) có thời gian hết hạn ngắn kết hợp Refresh Token. Quyền hạn thao tác trên từng bản ghi được kiểm soát nghiêm ngặt theo phân quyền vai trò (Role-Based Permissions).


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống website quản lý Spa (SpaCare)" do sinh viên Võ Duy Việt thực hiện dưới sự hướng dẫn của ThS. Nguyễn Văn Phát đã giải quyết trọn vẹn và hiệu quả bài toán số hóa quy trình quản lý cho các cơ sở Spa. Với việc khai thác hiệu quả sức mạnh của Django REST Framework và cơ sở dữ liệu PostgreSQL, SpaCare không chỉ đáp ứng xuất sắc các tiêu chuẩn kỹ thuật về tính sẵn sàng, độ tin cậy và hiệu năng cao mà còn mang lại giá trị thực tiễn to lớn trong việc tối ưu hóa chi phí vận hành cho các doanh nghiệp dịch vụ làm đẹp.