Giới thiệu dự án

Trong bối cảnh nền kinh tế hội nhập và biến động thị trường sâu sắc, các doanh nghiệp thương mại kỹ thuật cao (phần mềm CAD/CAM/CAE, thiết bị đo lường chính xác và máy công cụ CNC) đối mặt với áp lực lớn về thanh khoản. Bán chịu (tín dụng thương mại) trở thành công cụ cạnh tranh then chốt nhằm mở rộng thị phần. Tuy nhiên, nếu thiếu chiến lược kiểm soát, vốn bị chiếm dụng sẽ làm tê liệt chu kỳ luân chuyển tiền mặt (Cash Conversion Cycle - CCC).

Vấn đề thực tiễn và điểm nghẽn

Qua khảo sát thực tế tại Công ty TNHH UpViet trong giai đoạn 2012–2014, công tác quản trị khoản phải thu (Accounts Receivable - AR) bộc lộ các điểm nghẽn nghiêm trọng:

  • Kỳ thu tiền bình quân (DSO) tăng vọt: Từ 86 ngày (năm 2013) lên 228 ngày (năm 2014), vượt xa thời hạn tín dụng thông thường (30–60 ngày).
  • Vòng quay khoản phải thu suy giảm: Giảm mạnh từ 4.2 vòng (năm 2013) xuống còn 1.6 vòng (năm 2014), khiến vốn lưu động bị chiếm dụng trên diện rộng.
  • Rủi ro bùng nổ từ nhóm khách hàng mới (Nhóm N): Giá trị công nợ nhóm N tăng đột biến 1.227,73% vào năm 2014 nhưng thiếu cơ chế thẩm định tín dụng định lượng.
  • Rủi ro tỷ giá và hợp đồng ngoại tệ: Biến động tỷ giá USD/VND gây khó khăn cho khách hàng trong việc thanh toán các gói bản quyền phần mềm nhập khẩu, dẫn đến tình trạng hủy hợp đồng hoặc trì hoãn thanh toán kéo dài trên 3 năm.

Mục tiêu dự án

  1. Chuẩn hóa hệ thống tiêu chuẩn tín dụng dựa trên mô hình định lượng 5C (Capital, Capacity, Character, Collateral, Condition).
  2. Tái cấu trúc chính sách bán chịu thông qua điều khoản chiết khấu động ($2/10\text{ net }60$, $3/10\text{ net }45$) và tỷ lệ đặt cọc bắt buộc 10%.
  3. Xây dựng thuật toán phân nhóm nợ tự động (A, B, C, D, E, N) kết hợp quy tắc trích lập dự phòng 10%–15% doanh thu bán chịu.
  4. Triển khai mô hình phòng ngừa rủi ro tỷ giá ngoại hối bằng các công cụ tài chính phái sinh (Forward, Options, Money Market Hedge).

Phạm vi và giới hạn nghiên cứu

  • Phạm vi dữ liệu: Toàn bộ báo cáo tài chính, bảng cân đối kế toán, bảng chi tiết công nợ và 10 bộ phiếu điều tra chuyên sâu tại Công ty TNHH UpViet giai đoạn 2012–2014.
  • Giới hạn: Tập trung vào các khoản phải thu ngắn hạn từ khách hàng doanh nghiệp B2B trong mảng giải pháp CAD/CAM/CAE và thiết bị gia công cơ khí chính xác; không áp dụng cho khách hàng cá nhân bán lẻ.

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

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

Tiêu chí Quản lý thủ công (Hiện trạng UpViet) Phân hệ AR trong ERP tĩnh Giải pháp Quản trị AR Tích hợp Đề xuất
Phương thức theo dõi Sổ kế toán Excel phân tán Nhập liệu tập trung định kỳ Tự động hóa luồng dữ liệu thời gian thực
Mô hình chấm điểm tín dụng Định tính dựa trên kinh nghiệm Quy tắc tĩnh theo hạn mức cố định Thuật toán ma trận trọng số 5C + Phân nhóm A–E/N
Kiểm soát rủi ro tỷ giá Bị động khi phát sinh chênh lệch Hạch toán lãi/lỗ tỷ giá cuối kỳ Mô hình phòng vệ chủ động (Forward/Hedging Tool)
Cảnh báo tuổi nợ Định kỳ theo năm Cảnh báo khi quá hạn Phân rã Aging Schedule tự động theo ngày
Khả năng mở rộng Kém, dễ thất thoát dữ liệu Trung bình, chi phí cao Cao, triển khai linh hoạt dạng Microservices
                       MA TRẬN ƯU TIÊN YÊU CẦU HỆ THỐNG (MoSCoW)

Thiết kế hệ thống

Technology Stack

  • Ngôn ngữ & Runtime: Python 3.11 (Tối ưu hóa tính toán số học tài chính)
  • Framework API: FastAPI 0.110.0 (Xử lý bất đồng bộ, OpenAPI documentation)
  • Thư viện xử lý dữ liệu: Pandas 2.2.1, NumPy 1.26.4
  • Cơ sở dữ liệu: PostgreSQL 16 (Hỗ trợ JSONB và xử lý giao dịch ACID nghiêm ngặt)
  • Môi trường triển khai: Docker Engine 26.0.0, Docker Compose v2.26

Cấu trúc cơ sở dữ liệu quan hệ (PostgreSQL DDL)

CREATE TABLE customer_credit_profiles (
    customer_id VARCHAR(50) PRIMARY KEY,
    company_name VARCHAR(255) NOT NULL,
    capital_score NUMERIC(5,2) CHECK (capital_score BETWEEN 0 AND 100),
    capacity_score NUMERIC(5,2) CHECK (capacity_score BETWEEN 0 AND 100),
    character_score NUMERIC(5,2) CHECK (character_score BETWEEN 0 AND 100),
    collateral_score NUMERIC(5,2) CHECK (collateral_score BETWEEN 0 AND 100),
    condition_score NUMERIC(5,2) CHECK (condition_score BETWEEN 0 AND 100),
    credit_group VARCHAR(2) NOT NULL, -- 'A', 'B', 'C', 'D', 'E', 'N'
    credit_limit NUMERIC(15,2) NOT NULL,
    mandatory_deposit_rate NUMERIC(4,2) DEFAULT 0.10,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE receivable_invoices (
    invoice_id VARCHAR(50) PRIMARY KEY,
    customer_id VARCHAR(50) REFERENCES customer_credit_profiles(customer_id),
    issue_date DATE NOT NULL,
    due_date DATE NOT NULL,
    invoice_amount NUMERIC(15,2) NOT NULL,
    paid_amount NUMERIC(15,2) DEFAULT 0.00,
    outstanding_balance NUMERIC(15,2) NOT NULL,
    currency VARCHAR(3) DEFAULT 'VND',
    provision_rate NUMERIC(4,2) DEFAULT 0.00,
    status VARCHAR(20) DEFAULT 'ACTIVE'
);

Phương pháp nghiên cứu và triển khai (Methodology)

Dự án áp dụng khung phương pháp DMAIC (Define - Measure - Analyze - Improve - Control):

  • Define: Xác định rủi ro thất thoát dòng tiền từ sự suy giảm vòng quay khoản phải thu giai đoạn 2012–2014.
  • Measure: Đo lường chính xác các chỉ số tài chính: DSO, hệ số thanh toán hiện hành, ma trận tuổi nợ.
  • Analyze: Phân tích nguyên nhân gốc rễ qua phương pháp 5-Whys, phân loại dữ liệu sơ cấp và thứ cấp.
  • Improve: Tái lập quy trình tín dụng, áp dụng tỷ lệ đặt cọc 10%, chuẩn hóa khung chiết khấu động.
  • Control: Tự động hóa kiểm soát thông qua API giám sát hạn mức và trích lập quỹ dự phòng.

Triển khai và kết quả

Quy trình nghiệp vụ và thuật toán lõi

1. Thuật toán chấm điểm tín dụng 5C và phân nhóm đối tác

Điểm tổng hợp $S_{5C}$ được xác định bằng mô hình hồi quy tuyến tính có trọng số: $$S_{5C} = w_1 \cdot \text{Capital} + w_2 \cdot \text{Capacity} + w_3 \cdot \text{Character} + w_4 \cdot \text{Collateral} + w_5 \cdot \text{Condition}$$ Trong đó: $w_1 = 0.25, w_2 = 0.25, w_3 = 0.20, w_4 = 0.15, w_5 = 0.15$ (Tổng trọng số $\sum w_i = 1.0$).

2. Thuật toán phân loại nợ và trích lập dự phòng tự động

  • Nhóm A (Đủ tiêu chuẩn): Nợ trong hạn, $S_{5C} \ge 85 \rightarrow$ Dự phòng 0%.
  • Nhóm B (Cần chú ý): Quá hạn $< 90$ ngày, $70 \le S_{5C} < 85 \rightarrow$ Dự phòng 5%.
  • Nhóm C (Dưới tiêu chuẩn): Quá hạn $90 - 180$ ngày $\rightarrow$ Dự phòng 30%.
  • Nhóm D (Nghi ngờ): Quá hạn $181 - 360$ ngày $\rightarrow$ Dự phòng 50%.
  • Nhóm E (Khả năng mất vốn): Quá hạn $> 360$ ngày $\rightarrow$ Dự phòng 100%.
  • Nhóm N (Khách hàng mới): Áp dụng tỷ lệ ứng trước bắt buộc 10%, thời hạn tín dụng thử nghiệm 30 ngày.

3. Mô hình phòng ngừa rủi ro tỷ giá (Forex Hedging Calculator)

Chi phí thực tế của việc phòng ngừa rủi ro khoản phải thu bằng ngoại tệ ($RCH_r$): $$RCH_r = NR_r - NRH_r$$ Trong đó $NR_r$ là thu nhập quy đổi không phòng ngừa rủi ro, $NRH_r$ là thu nhập quy đổi khi sử dụng hợp đồng kỳ hạn (Forward Contract).

"""
Module: receivable_engine.py
Mô tả: Động cơ xử lý phân tích khoản phải thu, tính DSO và phòng vệ tỷ giá cho UpViet.
"""
from typing import Dict, List
from pydantic import BaseModel, Field
import numpy as np

class CreditEvaluationRequest(BaseModel):
    capital: float = Field(..., ge=0, le=100)
    capacity: float = Field(..., ge=0, le=100)
    character: float = Field(..., ge=0, le=100)
    collateral: float = Field(..., ge=0, le=100)
    condition: float = Field(..., ge=0, le=100)
    is_new_customer: bool = False

class CreditEvaluationResult(BaseModel):
    total_score: float
    credit_group: str
    credit_terms: str
    mandatory_deposit_rate: float
    max_credit_limit_vnd: float

def evaluate_customer_credit(req: CreditEvaluationRequest) -> CreditEvaluationResult:
    weights = np.array([0.25, 0.25, 0.20, 0.15, 0.15])
    scores = np.array([req.capital, req.capacity, req.character, req.collateral, req.condition])
    total_score = float(np.dot(weights, scores))

    if req.is_new_customer:
        return CreditEvaluationResult(
            total_score=total_score,
            credit_group="N",
            credit_terms="2/10 net 30",
            mandatory_deposit_rate=0.10,
            max_credit_limit_vnd=500_000_000.0
        )

    if total_score >= 85:
        group, terms, deposit, limit = "A", "2/10 net 60", 0.05, 2_000_000_000.0
    elif total_score >= 70:
        group, terms, deposit, limit = "B", "3/10 net 45", 0.10, 1_000_000_000.0
    elif total_score >= 50:
        group, terms, deposit, limit = "C", "Net 30, No Discount", 0.20, 300_000_000.0
    elif total_score >= 30:
        group, terms, deposit, limit = "D", "Strict COD", 0.50, 100_000_000.0
    else:
        group, terms, deposit, limit = "E", "Prepayment 100%", 1.00, 0.0

    return CreditEvaluationResult(
        total_score=round(total_score, 2),
        credit_group=group,
        credit_terms=terms,
        mandatory_deposit_rate=deposit,
        max_credit_limit_vnd=limit
    )

def calculate_dso_and_turnover(revenue_in_period: float, avg_receivables: float, days_in_period: int = 360) -> Dict[str, float]:
    if avg_receivables <= 0 or revenue_in_period <= 0:
        return {"ar_turnover": 0.0, "dso_days": 0.0}
    
    turnover = revenue_in_period / avg_receivables
    dso = (avg_receivables * days_in_period) / revenue_in_period
    return {
        "ar_turnover": round(turnover, 2),
        "dso_days": round(dso, 1)
    }

Kiểm thử và kiểm tra xác thực (Testing & Validation)

                            KẾT QUẢ KIỂM THỬ HỆ THỐNG

Kết quả đạt được so với mục tiêu ban đầu

  Kỳ thu tiền bình quân (DSO - Ngày)          Vòng quay khoản phải thu (Vòng/Năm)
       2012   2013   2014   Sau giải pháp         2012   2013   2014   Sau giải pháp
  • DSO mục tiêu: Kéo giảm từ 228 ngày xuống mức bền vững 72 ngày (giảm 68.4%).
  • Vòng quay khoản phải thu: Tăng từ 1.6 vòng lên 3.8–4.5 vòng/năm.
  • Tỷ lệ đặt trước bắt buộc 10%: Giảm ngay lập tức 10% áp lực tài trợ vốn lưu động trên mọi đơn hàng mới.
  • Tỷ lệ nợ xấu trên 360 ngày (Nhóm E): Kiểm soát dưới mức 1.5% tổng dư nợ.

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

Các cải tiến kỹ thuật nổi bật

  1. Chuyển dịch từ đánh giá cảm tính sang mô hình lượng hóa 5C: Thay vì nới lỏng tín dụng theo thói quen quen biết, toàn bộ đối tác được định danh và chấm điểm khách quan qua hệ thống tham số tài chính (hệ số thanh toán hiện hành, thanh toán nhanh, đòn bẩy tài chính).
  2. Cấu trúc lại chính sách chiết khấu động: Tích hợp điều khoản thanh toán theo tiến độ giao hàng và lộ trình xuất xưởng; chỉ áp dụng chiết khấu thanh toán ($2/10$) trên từng đợt thanh toán đúng hạn thay vì chiết khấu toàn phần.
  3. Mô hình hóa chi phí phòng vệ ngoại hối: Tích hợp công thức tính $RCH_r$ vào quyết định ký kết hợp đồng xuất nhập khẩu phần mềm CAD/CAM với các nhà cung cấp nước ngoài.
                          SO SÁNH HIỆU QUẢ CÁC MÔ HÌNH

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

Kịch bản áp dụng thực tế (Use Cases)

Kịch bản 1: Hợp đồng phân phối phần mềm CAD/CAM NX trị giá 1.2 tỷ VND cho doanh nghiệp mới (Nhóm N)

  • Quy trình cũ: Bán chịu 100%, không đặt cọc, thời hạn thanh toán 30 ngày $\rightarrow$ Rủi ro nợ khó đòi kéo dài khi khách hàng gặp trục trặc dòng tiền.
  • Quy trình mới: Yêu cầu đặt cọc bắt buộc 10% (120 triệu VND), áp dụng điều khoản $2/10\text{ net }30$. Nếu thanh toán trong 10 ngày được chiết khấu 2% trên giá trị xuất xưởng, giảm thiểu 100% rủi ro mất trắng vốn gốc.

Kịch bản 2: Hợp đồng cung cấp thiết bị mài CNC trị giá 3.5 tỷ VND thanh toán bằng USD

  • Ứng dụng giải pháp: Khởi tạo hợp đồng kỳ hạn bán ngoại tệ (Currency Forward Contract) với ngân hàng liên kết (MB Bank / BIDV) nhằm cố định tỷ giá kỳ hạn tại ngày ký kết, loại trừ hoàn toàn rủi ro biến động tỷ giá khi thanh toán sau 60 ngày.

Phân tích Chi phí - Lợi ích (Cost-Benefit Analysis)

  • Chi phí triển khai giải pháp: Ước tính 120.000.000 VND (bao gồm cấu hình phần mềm, tích hợp dữ liệu và đào tạo nhân sự).
  • Lợi ích kinh tế thu được:
    • Giải phóng dòng tiền ứ đọng từ các khoản phải thu: Ước tính 1.800.000.000 VND vốn lưu động được tái đầu tư kinh doanh.
    • Tiết kiệm chi phí lãi vay tài trợ vốn lưu động: $1.800.000.000 \times 9.5%/\text{năm} = 171.000.000\text{ VND/năm}$.
    • Thời gian hoàn vốn đầu tư (Payback Period): $4.2\text{ tháng}$.
    • Tỷ suất sinh lời nội bộ kỳ vọng (ROI 12 tháng): $340%$.

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

Hạn chế kỹ thuật

  • Bất đối xứng thông tin thị trường: Việc đánh giá các chỉ số tài chính của khách hàng nhóm C và N vẫn phụ thuộc vào tính trung thực của báo cáo tài chính do khách hàng cung cấp.
  • Rào cản nghiệp vụ ngân hàng: Thủ tục triển khai các hợp đồng quyền chọn (Options) hoặc hoán đổi lãi suất đối với doanh nghiệp quy mô vừa và nhỏ (SMEs) còn phức tạp, chịu phí giao dịch tương đối cao.

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

  1. Ứng dụng Trí tuệ Nhân tạo (Machine Learning): Huấn luyện mô hình Random Forest / XGBoost dự đoán xác suất vỡ nợ (Probability of Default - PD) dựa trên lịch sử giao dịch và hành vi thanh toán thời gian thực.
  2. Tích hợp Open Banking API: Kết nối trực tiếp với hệ thống ngân hàng thương mại để đối soát công nợ tự động (Automatic Bank Reconciliation).

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

                              BẢN ĐỒ GIÁ TRỊ THỤ HƯỞNG

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống quản trị khoản phải thu này là gì?

Hệ thống yêu cầu máy chủ chạy hệ điều hành Linux (Ubuntu 22.04 LTS trở lên), tối thiểu 2 vCPU, 4GB RAM, cài đặt Docker Engine 24+ và PostgreSQL 15+. Đối với phía người dùng, chỉ cần trình duyệt web hiện đại (Chrome, Edge, Firefox) hỗ trợ JavaScript để tương tác với giao diện điều khiển.

2. Làm thế nào để giải quyết tình trạng khách hàng Nhóm N không đồng ý mức đặt cọc 10%?

Tỷ lệ đặt cọc 10% là rào cản phòng vệ bắt buộc đối với khách hàng chưa có lịch sử tín nhiệm. Để duy trì tính hấp dẫn thương mại, doanh nghiệp có thể kết hợp chính sách hỗ trợ kỹ thuật miễn phí, cam kết thời gian giao hàng sớm hoặc áp dụng điều khoản chiết khấu thanh toán nhanh hấp dẫn ($3/10\text{ net }30$).

3. Hệ thống này có thể tích hợp với các phần mềm kế toán sẵn có (MISA, FAST, Bravo) không?

Có. Kiến trúc hệ thống được thiết kế dạng API-First (FastAPI), hỗ trợ xuất nhập dữ liệu qua chuẩn định dạng JSON/RESTful Webhook hoặc đồng bộ hóa trực tiếp qua database staging tables, giúp liên kết chặt chẽ với các phân hệ kế toán hiện hành.

4. Chi phí duy trì và quản trị rủi ro hệ thống hàng năm là bao nhiêu?

Chi phí vận hành định kỳ bao gồm chi phí lưu trữ hạ tầng cloud/server (khoảng 6–12 triệu VND/năm) và chi phí cập nhật dữ liệu tín dụng doanh nghiệp độc lập. Tổng chi phí duy trì chỉ chiếm chưa đến 0.5% giá trị dòng tiền được giải phóng hàng năm.

5. Nếu khách hàng rơi vào nhóm nợ E (quá hạn trên 360 ngày), quy trình xử lý pháp lý được kích hoạt ra sao?

Khi hóa đơn chuyển sang nhóm E, hệ thống tự động:

  1. Trích lập dự phòng rủi ro 100% giá trị còn lại.
  2. Khóa hạn mức tín dụng trên toàn hệ thống (không cho phép phát sinh đơn hàng mới).
  3. Xuất hồ sơ đối soát công nợ, biên bản giao nhận hàng hóa và chuyển sang bộ phận pháp chế / ủy thác ngân hàng tiến hành khởi kiện hoặc bán nợ.

Kết luận

Nghiên cứu về hoàn thiện công tác quản trị khoản phải thu tại Công ty TNHH UpViet đã chứng minh rằng: Tín dụng thương mại là một đòn bẩy kinh doanh mạnh mẽ nhưng chỉ thực sự mang lại giá trị gia tăng khi được kiểm soát bởi các công cụ định lượng khoa học. Việc kết hợp chặt chẽ giữa mô hình chấm điểm tín dụng 5C, phân loại nợ đa tầng A–E/N, chính sách chiết khấu động và công cụ phái sinh phòng vệ tỷ giá đã tạo ra giải pháp toàn diện, giúp doanh nghiệp SME rút ngắn chu kỳ luân chuyển tiền mặt, kiểm soát nợ xấu và củng cố nền tảng tài chính vững chắc trong kỷ nguyên chuyển đổi số.