Giới thiệu dự án

Trong bối cảnh nền kinh tế số và sự bùng nổ của chuyển đổi số doanh nghiệp, việc duy trì và tối ưu hóa mối quan hệ với khách hàng là yếu tố sống còn đối với mọi tổ chức. Theo báo cáo từ GartnerStatista, các giải pháp Customer Relationship Management (CRM) giúp doanh nghiệp gia tăng tỷ lệ chuyển đổi bán hàng lên đến 29% và nâng cao năng suất làm việc của đội ngũ kinh doanh tới 34%. Tuy nhiên, phần lớn các doanh nghiệp vừa và nhỏ (SMEs), hộ kinh doanh cá thể, chuỗi cửa hàng dịch vụ F&B và bán lẻ tại Việt Nam vẫn đối mặt với rào cản chi phí bản quyền đắt đỏ từ các hệ sinh thái đóng như Salesforce, HubSpot hay sự phức tạp quá mức khi triển khai Odoo, SAP.

Thực trạng phân mảnh dữ liệu diễn ra phổ biến: thông tin khách hàng lưu trữ rải rác trên file Excel/Google Sheets, tiến độ dự án theo dõi qua ứng dụng chat rời rạc, điểm bán hàng (POS) tách biệt hoàn toàn với hệ thống chăm sóc sau bán. Điều này dẫn đến thất thoát cơ hội bán hàng, gián đoạn giao tiếp nội bộ và giảm sút trải nghiệm khách hàng. Đề tài "Hệ thống quản lý quan hệ khách hàng (CRM - WCRM)" của tác giả Bùi Văn Huân (Khoa Công nghệ Kỹ thuật – Nông nghiệp Công nghệ cao, Trường Đại học Bà Rịa – Vũng Tàu) được nghiên cứu và phát triển nhằm giải quyết triệt để bài toán tích hợp liên phân hệ trên một nền tảng mã nguồn mở thống nhất, tối ưu chi phí và dễ dàng tùy biến.

+-------------------------------------------------------------------------------+
|                       WCRM - KIẾN TRÚC TỔNG THỂ HỆ THỐNG                      |
+-------------------------------------------------------------------------------+
| [Front-End Layer]     : TailwindCSS 2.2 + Alpine.js 3.4 + jQuery + HTML5/CSS3 |
| [Web Server / WSGI]   : Werkzeug 2.0+ (WSGI Gateway)                          |
| [Application Layer]   : Python 3.9+ | Flask Framework 2.0.x (Blueprints)       |
| [ORM Layer]           : Flask-SQLAlchemy 2.5+ & WTForms Validation            |
| [Persistence / Cloud] : SQLite 3 (Dev) / PostgreSQL (Prod) | Heroku Cloud PaaS|
+-------------------------------------------------------------------------------+

Mục tiêu của đề tài

  1. Xây dựng nền tảng CRM all-in-one linh hoạt: Tích hợp đồng bộ 5 phân hệ cốt lõi gồm Quản lý khách hàng (Customer/Contact), Quản lý dự án (Project), Quản lý công việc và nhiệm vụ (Task/Checklist), Quản lý danh mục sản phẩm (Inventory/Product) và Điểm bán lẻ (POS).
  2. Thiết kế kiến trúc module hóa phân rã cao: Ứng dụng mô hình Flask Blueprints theo định hướng Microservices/Modular Monolith, cho phép doanh nghiệp mở rộng hoặc đóng ngắt các tính năng mà không gây ảnh hưởng đến tính toàn vẹn hệ thống.
  3. Phân quyền người dùng đa cấp độ (Role-Based Access Control - RBAC): Đảm bảo an toàn thông tin với 3 nhóm người dùng rõ rệt: Quản trị viên (Admin), Quản lý (Manager) và Nhân viên kinh doanh (Saler).
  4. Tối ưu hóa khả năng triển khai: Hệ thống vận hành mượt mà trên nền tảng đám mây PaaS (Heroku), giảm thiểu thời gian cài đặt ban đầu xuống dưới 15 phút.

Phương pháp tiếp cận và kết quả kỳ vọng

Hệ thống sử dụng ngôn ngữ lập trình Python kết hợp framework Flask cho tầng xử lý logic phía máy chủ (BackEnd), kết hợp hệ thống giao diện hiện đại TailwindCSS và Alpine.js ở tầng giao diện (FrontEnd). Cơ sở dữ liệu quan hệ được ánh xạ thông qua Object-Relational Mapping (Flask-SQLAlchemy) với giải pháp tùy biến lưu trữ chuỗi JSON linh hoạt cho đơn hàng.

Kết quả kỳ vọng đạt được gồm:

  • Tốc độ phản hồi API trung bình dưới 200ms cho các tác vụ CRUD thông thường.
  • Tiết kiệm 60% thời gian xử lý chu trình từ tư vấn khách lẻ, lập dự án dịch vụ đến thanh toán đơn hàng.
  • Đáp ứng đồng thời 100+ phiên làm việc với độ sẵn sàng dịch vụ đạt 99.5%.

Hệ thống tập trung phục vụ các doanh nghiệp vừa và nhỏ, cửa hàng bán lẻ và công ty dịch vụ với quy mô dưới 100 nhân sự; giới hạn ở phạm vi thanh toán trực tiếp tại quầy và ghi nhận lịch sử đơn hàng, chưa tích hợp cổng thanh toán ngân hàng trực tuyến tự động (như VNPay, Momo) trong phiên bản hiện tại.


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

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

Khảo sát thực tế các giải pháp phần mềm quản lý trên thị trường cho thấy sự phân cực rõ rệt giữa các hệ thống CRM/ERP thương mại quốc tế và các phần mềm bán hàng đơn lẻ trong nước.

Tiêu chí so sánh Salesforce / HubSpot CRM KiotViet / Sapo POS Đề tài WCRM (Python/Flask)
Mô hình tích hợp CRM chuyên sâu, thiếu tích hợp sâu POS tại quầy POS mạnh, quản lý CRM và Task/Dự án rất cơ bản Tích hợp đồng bộ: CRM + POS + Task/Project Management
Khả năng mở rộng mã nguồn Đóng (Proprietary SaaS), chi phí license cao ($25-$150/user/tháng) Đóng, thuê bao hàng tháng, không thể tùy biến code lõi Mã nguồn mở (Open-Source), tự chủ hạ tầng, tùy biến 100%
Tài nguyên vận hành Yêu cầu kết nối mạng băng thông cao, cấu hình phức tạp Phụ thuộc máy chủ nhà cung cấp Tinh gọn, tiêu hao < 128MB RAM, chạy tốt trên PaaS/VPS nhỏ
Khả năng module hóa Khá cao nhưng đòi hỏi chuyên gia cấu hình chứng chỉ Thấp, chỉ dùng được các module định sẵn Cao nhờ kiến trúc Flask Blueprints linh hoạt

Phân tích yêu cầu người dùng theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Xác thực người dùng và phân quyền RBAC; CRUD khách hàng, thông tin liên hệ đa đầu mối; quản lý dự án, task, checklist to-do; POS bán lẻ lưu thông tin hóa đơn.
  • Should-have (Nên có): Tìm kiếm và lọc nhanh khách hàng theo nhãn (Tag); quản lý thương hiệu và danh mục sản phẩm phân tầng; tính năng đăng ký dùng thử từ Landing page.
  • Could-have (Có thể có): Xuất hóa đơn POS định dạng PDF, cấu hình tiền tệ đa quốc gia (Currency), tùy biến giao diện thẻ màu sắc.
  • Won't-have (Chưa làm đợt này): Đồng bộ dữ liệu đa kênh qua API bên thứ ba (Omnichannel), cổng thanh toán quốc tế Visa/Mastercard.

Thiết kế hệ thống

Hệ thống được thiết kế theo cấu trúc tách biệt module rõ ràng. Cơ chế routing và xử lý logic được điều hướng thông qua Flask Blueprints, giúp cô lập mã nguồn giữa các phân hệ:

src/

Technology Stack:

  • BackEnd: Python 3.9+, Flask Framework 2.0.2, Werkzeug 2.0.1, Jinja2 3.0.1, Flask-WTForms 0.15.1, Flask-SQLAlchemy 2.5.1.
  • FrontEnd: HTML5, CSS3, TailwindCSS 2.2 (Utility-first CSS), Alpine.js 3.4.2 (State management nhẹ), jQuery 3.6.0.
  • Cơ sở dữ liệu: SQLite 3 (Development testing) và PostgreSQL 13 (Production deployment).
  • Hạ tầng Cloud: Heroku PaaS, Gunicorn WSGI Server.
-- Trích đoạn cấu trúc bảng cốt lõi trong lược đồ CSDL
CREATE TABLE client (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    client_status_id INTEGER,
    country_id INTEGER,
    currency_id INTEGER,
    name VARCHAR(100) NOT NULL,
    phone VARCHAR(50),
    zip_code VARCHAR(50),
    website VARCHAR(100),
    vat_number VARCHAR(50),
    address VARCHAR(100),
    email VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCES user(id),
    FOREIGN KEY (client_status_id) REFERENCES client_status(id)
);

CREATE TABLE client_order (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    client_id INTEGER NOT NULL,
    invoice VARCHAR(50) UNIQUE NOT NULL,
    status VARCHAR(20) DEFAULT 'Pending',
    date_created DATETIME DEFAULT CURRENT_TIMESTAMP,
    orders TEXT NOT NULL, -- Serialized JSON Payload
    FOREIGN KEY (client_id) REFERENCES client(id)
);

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 rút gọn với 4 Sprint chính (mỗi Sprint kéo dài 2 tuần):

  • Sprint 1 (Khảo sát & Kiến trúc): Thiết kế ERD CSDL với 23 bảng quan hệ, thiết lập cấu trúc thư mục, khởi tạo môi trường Python virtualenv và base templates.
  • Sprint 2 (Lõi CRM & Xác thực): Xây dựng Authentication, Authorization RBAC, hoàn thiện phân hệ Client, Contact, Project Tags.
  • Sprint 3 (Quản trị Dự án & POS): Phát triển module Project, Task, To-do Checklist items; xây dựng bảng điều khiển POS, giỏ hàng session-based và chuyển đổi JSON đơn hàng.
  • Sprint 4 (Kiểm thử, Tối ưu & Đóng gói Triển khai): Thực hiện Unit Test, UAT, tối ưu hóa CSS bundle với TailwindCSS Purge, cấu hình Procfile và deploy lên Heroku Cloud.

Implementation và kết quả

Quy trình phát triển và thuật toán xử lý dữ liệu

Điểm nhấn kỹ thuật quan trọng của hệ thống là việc giải quyết bài toán biến động cấu trúc mặt hàng trong đơn hàng mà không làm phức tạp hóa quan hệ cơ sở dữ liệu. Tác giả đã triển khai lớp mở rộng TypeDecorator của SQLAlchemy mang tên JsonEcodedDict nhằm tự động hóa quá trình serialize/deserialize dữ liệu JSON khi giao tiếp với database.

import json
from src.db import db

class JsonEcodedDict(db.TypeDecorator):
    """
    Tùy biến TypeDecorator để lưu trữ và truy xuất 
    dữ liệu giỏ hàng dưới dạng chuỗi JSON thuần trong CSDL.
    """
    impl = db.Text

    def process_bind_param(self, value, dialect):
        # Chuyển đổi Python Dict sang JSON String trước khi ghi vào CSDL
        if value is None:
            return '{}'
        else:
            return json.dumps(value, ensure_ascii=False)

    def process_result_value(self, value, dialect):
        # Parse JSON String từ CSDL thành Python Dict khi truy vấn
        if value is None:
            return {}
        else:
            return json.loads(value)

Tại tầng Controller, cấu trúc Flask Blueprint phân tách rõ ràng luồng định tuyến (Routing) và xác thực biểu mẫu với Flask-WTForms:

from flask import Blueprint, render_template, redirect, url_for, flash, request
from src.modules.client.models import Client, ClientStatus
from src.modules.client.forms import ClientForm
from src.db import db

client_blueprint = Blueprint('client', __name__, template_folder='templates')

@client_blueprint.route('/clients', methods=['GET'])
def list_clients():
    page = request.args.get('page', 1, type=int)
    clients_pagination = Client.query.paginate(page=page, per_page=10, error_out=False)
    return render_template('client/list.html', pagination=clients_pagination)

@client_blueprint.route('/clients/create', methods=['GET', 'POST'])
def create_client():
    form = ClientForm()
    if form.validate_on_submit():
        new_client = Client(
            name=form.name.data,
            email=form.email.data,
            phone=form.phone.data,
            address=form.address.data,
            vat_number=form.vat_number.data,
            user_id=form.user_id.data,
            client_status_id=form.status_id.data
        )
        db.session.add(new_client)
        db.session.commit()
        flash('Thêm thông tin khách hàng thành công!', 'success')
        return redirect(url_for('client.list_clients'))
    return render_template('client/create.html', form=form)

Kiểm thử và đánh giá hiệu năng

Hệ thống được kiểm thử qua 45 kịch bản kiểm thử chức năng (Functional Test Cases) và kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT) trên nhóm 15 người dùng thực nghiệm (gồm 3 Quản trị viên, 4 Quản lý và 8 Nhân viên kinh doanh).

+-------------------------------------------------------------------------------+
|                      KẾT QUẢ ĐÁNH GIÁ VẬN HÀNH HỆ THỐNG                       |
+-------------------------------------------------------------------------------+
| Độ trôi giao dịch API (P95 Latency) : 142ms                                  |
| Mức tiêu hao RAM máy chủ (Idle/Load): 48MB / 118MB                            |
| Tỷ lệ bao phủ kiểm thử (Test Coverage): 84.5%                                 |
| Điểm đánh giá độ hài lòng UI/UX     : 4.65 / 5.0 (UAT Score)                  |
| Tỷ lệ xử lý thành công đơn hàng POS : 99.8% (0 lỗi mất mát giao dịch)         |
+-------------------------------------------------------------------------------+

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

Hệ thống hoàn thành 100% các chức năng cốt lõi theo đề cương nghiên cứu:

  • Xây dựng giao diện Landing page chuyên nghiệp tích hợp Bảng giá dịch vụ và Form liên hệ trực tuyến.
  • Phân hệ quản lý khách hàng và liên hệ đa tầng với đầy đủ tính năng phân loại, gắn thẻ (Tags).
  • Phân hệ quản trị dự án, quản lý công việc (Task) với mức độ ưu tiên (Priority) và bảng kiểm tra nhiệm vụ chi tiết (Checklist Items).
  • Giao diện bán hàng POS phản hồi tức thì, hỗ trợ thêm/xóa nhanh sản phẩm vào giỏ hàng và xuất hóa đơn lưu trữ lịch sử đặt hàng.

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

  1. Cơ chế lưu trữ đơn hàng linh hoạt bằng TypeDecorator JSON: Khắc phục nhược điểm cứng nhắc của mô hình quan hệ truyền thống bằng cách lưu trữ toàn bộ snapshot của giỏ hàng (tên, giá tại thời điểm mua, khuyến mãi) vào cột orders kiểu JSON. Phương pháp này giảm thiểu 3 phép JOIN phức tạp khi truy xuất lịch sử đơn hàng, tăng tốc độ truy vấn lên 42%.
  2. Kiến trúc Modular Monolith tối ưu chi phí: Khác với các hệ thống Microservices phân tán đòi hỏi hạ tầng Kubernetes đắt đỏ, mô hình Blueprint phân cụm trong WCRM mang lại sự linh hoạt tương đương trong phát triển mã nguồn nhưng có thể chạy trọn vẹn trên 1 Dyno Heroku miễn phí/giá rẻ ($0 - $7/tháng).
  3. Trải nghiệm FrontEnd nhẹ (Lightweight Reactive Frontend): Việc kết hợp TailwindCSS với Alpine.js thay thế cho các Single Page App cồng kềnh (như Angular hay React + Webpack nặng nề) giúp giảm kích thước gói tài nguyên tải trang xuống dưới 350KB, tăng tốc độ tải trang ban đầu (First Contentful Paint) lên 58%.
  4. Đóng góp cho học thuật và ứng dụng thực tiễn: Cung cấp bộ khung mã nguồn mẫu chuẩn mực cho sinh viên và lập trình viên nghiên cứu cách triển khai kiến trúc ứng dụng web hướng dịch vụ bằng Python/Flask trong thực tế.

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

Kịch bản ứng dụng thực tế

  • Công ty Agency / Dịch vụ Marketing: Sử dụng phân hệ Client để quản lý đối tác; tạo Project và phân rã Task cho từng chiến dịch quảng cáo; kiểm soát hạn chót (Deadline) và trạng thái công việc của từng Designer/Content Creator.
  • Chuỗi cửa hàng bán lẻ và quán cà phê: Sử dụng POS để lên đơn bán lẻ trực tiếp tại quầy; hệ thống tự động cập nhật tồn kho (Stock) và lưu trữ lịch sử tiêu dùng của từng khách hàng thân thiết để phục vụ chính sách khuyến mãi.
+-------------------------------------------------------------------------------+
|                       QUY TRÌNH DEPLOY HỆ THỐNG LÊN CLOUD                     |
+-------------------------------------------------------------------------------+
| 1. Chuẩn bị tệp requirements.txt và Procfile: `web: gunicorn src.app:app`     |
| 2. Khởi tạo Git repository và push mã nguồn lên GitHub/Heroku Remote           |
| 3. Cấu hình biến môi trường trên Heroku Settings (SECRET_KEY, DATABASE_URL)   |
| 4. Chạy migration tạo bảng CSDL: `heroku run flask db upgrade`                |
| 5. Ứng dụng sẵn sàng phục vụ 24/7 với chứng chỉ SSL/HTTPS tự động             |
+-------------------------------------------------------------------------------+

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

Đối với một doanh nghiệp có quy mô 10 nhân sự:

  • Chi phí sử dụng phần mềm thương mại truyền thống: 10 users × $20/tháng = $2,400/năm (xấp xỉ 60.000.000 VNĐ/năm).
  • Chi phí vận hành WCRM trên máy chủ đám mây riêng: ~$80 - $120/năm (chi phí VPS tiêu chuẩn).
  • Mức tiết kiệm chi phí vận hành: Đạt hơn 95%, thời gian hoàn vốn đầu tư triển khai (ROI) đạt được ngay trong tháng đầu tiên vận hành.

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

Hạn chế kỹ thuật

  • Cơ sở dữ liệu SQLite trong môi trường phát triển mặc định chưa tối ưu hóa cho các thao tác ghi đồng thời quy mô lớn; cần nâng cấp đồng bộ lên PostgreSQL cho mọi môi trường.
  • Chưa tích hợp hệ thống hàng đợi tác vụ nền (Celery + Redis) để gửi email marketing hoặc thông báo tự động khi giao việc mới.
  • Chưa xây dựng bộ API chuẩn RESTful/GraphQL kèm tài liệu Swagger để hỗ trợ ứng dụng di động độc lập (Mobile App).

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

  1. Xây dựng phân hệ Báo cáo trực quan (Analytics Dashboard) tích hợp biểu đồ Chart.js nhằm dự báo doanh thu và phân tích hành vi mua sắm.
  2. Tích hợp cổng thanh toán trực tuyến qua mã QR động (VietQR/Napas247) tại màn hình POS.
  3. Ứng dụng xử lý bất đồng bộ với Celery/RabbitMQ để gửi thông báo đẩy (Push Notifications) và báo cáo định kỳ tự động qua Telegram/Email.
  4. Nâng cấp bộ REST API chuẩn OpenAPI 3.0 phục vụ ứng dụng React Native / Flutter trên thiết bị di động.

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

  • Sinh viên ngành CNTT & Kỹ thuật phần mềm: Nguồn tài liệu thực hành toàn diện về lập trình Python/Flask từ thiết kế CSDL quan hệ, kiến trúc Blueprint đến deploy thực tế.
  • Lập trình viên (Developers): Tham khảo mẫu thiết kế tùy biến TypeDecorator trong SQLAlchemy và cách kết hợp tối ưu giữa TailwindCSS và Alpine.js.
  • Doanh nghiệp vừa và nhỏ (SMEs): Sở hữu giải pháp quản trị khách hàng và bán hàng trọn gói, tiết kiệm hàng chục triệu đồng chi phí bản quyền phần mềm hàng năm.
  • Nhà nghiên cứu học thuật: Cung cấp cơ sở thực nghiệm về việc đánh giá hiệu quả giữa mô hình Modular Monolith và Microservices trong các ứng dụng chuyển đổi số quy mô nhỏ.

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

1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?

Hệ thống yêu cầu máy chủ hoặc Cloud VPS tối thiểu 1 vCPU, 512MB RAM và 1GB dung lượng đĩa trống. Môi trường phần mềm bao gồm Python phiên bản từ 3.8 trở lên, pip package manager, và web server hỗ trợ WSGI như Gunicorn/Nginx.

2. Dữ liệu giỏ hàng lưu dưới dạng chuỗi JSON có đảm bảo tính toàn vẹn khi kiểm toán không?

Có. Cấu trúc JSON được khóa cứng tại thời điểm tạo hóa đơn (invoice), bao gồm toàn bộ thông tin giá bán, tên sản phẩm và số lượng. Việc này ngăn chặn sự biến đổi lịch sử hóa đơn khi giá sản phẩm trong danh mục gốc bị điều chỉnh trong tương lai.

3. Hệ thống có thể tích hợp với các cơ sở dữ liệu mạnh mẽ hơn như PostgreSQL hay MySQL không?

Có. Nhờ tầng trừu tượng hóa ORM của Flask-SQLAlchemy, doanh nghiệp chỉ cần thay đổi chuỗi kết nối SQLALCHEMY_DATABASE_URI trong file cấu hình (config.py) sang PostgreSQL hoặc MySQL mà không cần thay đổi bất kỳ dòng mã xử lý logic nghiệp vụ nào.

4. Hệ thống đảm bảo an toàn thông tin người dùng như thế nào?

Mật khẩu người dùng được băm một chiều an toàn bằng thuật toán mã hóa PBKDF2:SHA256 thông qua thư viện Werkzeug.security. Toàn bộ dữ liệu biểu mẫu đầu vào đều được kiểm duyệt chống tấn công CSRF (Cross-Site Request Forgery) và SQL Injection thông qua Flask-WTForms và SQLAlchemy Parameterized Queries.

5. Chi phí duy trì và khả năng mở rộng của hệ thống ra sao?

Hệ thống hoàn toàn miễn phí bản quyền phần mềm. Chi phí duy trì hạ tầng đám mây dao động từ $0 (trên các gói Cloud PaaS cơ bản) đến $5-$10/tháng trên các nhà cung cấp VPS phổ biến như DigitalOcean, Linode hay AWS Lightsail khi lượng truy cập tăng trưởng lên hàng nghìn khách hàng mỗi ngày.


Kết luận

Đồ án tốt nghiệp "Hệ thống quản lý quan hệ khách hàng (CRM - WCRM)" của sinh viên Bùi Văn Huân đã nghiên cứu và triển khai thành công một giải pháp quản trị toàn diện, tích hợp hiệu quả giữa quản lý thông tin khách hàng, giám sát tiến độ dự án và bán lẻ trực tiếp tại điểm bán (POS). Với nền tảng công nghệ hiện đại dựa trên Python, Flask Framework, TailwindCSS và kiến trúc module hóa linh hoạt, đề tài không chỉ đạt giá trị cao về mặt học thuật trong kỹ thuật công nghệ phần mềm mà còn mang tính ứng dụng thực tiễn vượt trội, giúp các doanh nghiệp vừa và nhỏ tháo gỡ rào cản chi phí và nâng cao năng lực cạnh tranh trong kỷ nguyên số.