Lưu trữ & Tính toán KPI

Đặc tả Lưu trữ và Tính toán Dữ liệu KPI

1. Tổng quan

Tài liệu này mô tả chi tiết cách thức dữ liệu KPI được thu thập sẽ được lưu trữ trong cơ sở dữ liệu ABMS và các quy trình, công thức cụ thể để tính toán các chỉ số KPI.

2. Đặc tả Lưu trữ Dữ liệu KPI

2.1. Mô hình Dữ liệu (Chi tiết hóa từ abms_implementation_design.md)

Các bảng chính liên quan đến lưu trữ dữ liệu KPI:

2.1.1. Bảng KPI_Data_Collection

Lưu trữ dữ liệu thô được thu thập từ các nguồn khác nhau.

Trường Kiểu dữ liệu Khóa Ràng buộc Chỉ mục Mô tả
collection_id INT PK NOT NULL, AUTO_INCREMENT YES ID duy nhất của bản ghi thu thập
kpi_id INT FK (KPI_Definition) NOT NULL YES ID của KPI liên quan
employee_id INT FK (Employees) NULL YES ID của nhân viên (nếu là KPI cá nhân)
department_id INT FK (Departments) NULL YES ID của bộ phận (nếu là KPI bộ phận)
project_id INT FK (Projects) NULL YES ID của dự án (nếu liên quan)
value DECIMAL(18,4) NOT NULL Giá trị dữ liệu thô thu thập được
collection_date DATE NOT NULL YES Ngày dữ liệu được thu thập/ghi nhận
period VARCHAR(10) NOT NULL YES Kỳ đánh giá (e.g., ‘2025-04’, ‘2025-Q2’)
source_id INT FK (KPI_Data_Source) NOT NULL YES ID của nguồn dữ liệu
collection_method VARCHAR(50) NOT NULL Phương pháp thu thập (e.g., ‘API_Sync’, ‘Manual_Input’, ‘Survey’)
collected_by INT FK (Users) NULL ID người nhập liệu (nếu thủ công)
verified_by INT FK (Users) NULL ID người xác minh
approved_by INT FK (Users) NULL ID người phê duyệt
status VARCHAR(20) NOT NULL, DEFAULT ‘Draft’ YES Trạng thái (Draft, Verified, Approved, Rejected)
notes TEXT NULL Ghi chú
created_at DATETIME NOT NULL, DEFAULT CURRENT_TIMESTAMP Thời gian tạo bản ghi
updated_at DATETIME NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Thời gian cập nhật bản ghi

2.1.2. Bảng KPI_Evaluation

Lưu trữ kết quả đánh giá KPI sau khi tính toán.

Trường Kiểu dữ liệu Khóa Ràng buộc Chỉ mục Mô tả
evaluation_id INT PK NOT NULL, AUTO_INCREMENT YES ID duy nhất của bản ghi đánh giá
template_id INT FK (KPI_Template) NOT NULL YES ID của mẫu KPI được áp dụng
employee_id INT FK (Employees) NOT NULL YES ID của nhân viên được đánh giá
period VARCHAR(10) NOT NULL YES Kỳ đánh giá (e.g., ‘2025-04’, ‘2025-Q2’)
kpi_id INT FK (KPI_Definition) NOT NULL YES ID của KPI được đánh giá
target DECIMAL(18,4) NOT NULL Mục tiêu của KPI trong kỳ
actual DECIMAL(18,4) NOT NULL Giá trị thực tế đạt được
achievement_rate DECIMAL(7,4) NOT NULL Tỷ lệ hoàn thành (Actual / Target)
score DECIMAL(7,4) NOT NULL Điểm số KPI (sau khi áp dụng trọng số và thang điểm)
weighted_score DECIMAL(7,4) NOT NULL Điểm số KPI đã nhân trọng số
comments TEXT NULL Nhận xét của người đánh giá
evaluation_date DATE NOT NULL YES Ngày thực hiện đánh giá
evaluator_id INT FK (Users) NOT NULL ID của người thực hiện đánh giá
status VARCHAR(20) NOT NULL, DEFAULT ‘Pending’ YES Trạng thái đánh giá (Pending, Reviewed, Finalized)
created_at DATETIME NOT NULL, DEFAULT CURRENT_TIMESTAMP Thời gian tạo bản ghi
updated_at DATETIME NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Thời gian cập nhật bản ghi

2.1.3. Bảng KPI_Summary

Lưu trữ điểm KPI tổng hợp cho từng nhân viên theo kỳ.

Trường Kiểu dữ liệu Khóa Ràng buộc Chỉ mục Mô tả
summary_id INT PK NOT NULL, AUTO_INCREMENT YES ID duy nhất của bản ghi tổng hợp
employee_id INT FK (Employees) NOT NULL YES ID của nhân viên
period VARCHAR(10) NOT NULL YES Kỳ đánh giá (e.g., ‘2025-04’, ‘2025-Q2’)
total_personal_score DECIMAL(7,4) NULL Tổng điểm KPI cá nhân
total_team_score DECIMAL(7,4) NULL Tổng điểm KPI nhóm (nếu có)
total_dept_score DECIMAL(7,4) NULL Tổng điểm KPI bộ phận
total_company_score DECIMAL(7,4) NULL Tổng điểm KPI công ty
final_kpi_score DECIMAL(7,4) NOT NULL Điểm KPI cuối cùng (dùng tính P3)
p3_amount DECIMAL(18,2) NULL Số tiền lương P3 tương ứng
summary_date DATE NOT NULL YES Ngày tổng hợp
status VARCHAR(20) NOT NULL, DEFAULT ‘Calculated’ YES Trạng thái (Calculated, Paid)
created_at DATETIME NOT NULL, DEFAULT CURRENT_TIMESTAMP Thời gian tạo bản ghi
updated_at DATETIME NOT NULL, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP Thời gian cập nhật bản ghi

2.2. Quy ước Lưu trữ

3. Đặc tả Tính toán KPI

3.1. Quy trình Tính toán Tổng quát

  1. Thu thập Dữ liệu Thô: Dữ liệu được thu thập vào bảng KPI_Data_Collection và trải qua quá trình xác minh, phê duyệt.
  2. Tổng hợp Dữ liệu Thực tế (actual): Dựa trên kpi_idperiod, tổng hợp dữ liệu từ KPI_Data_Collection (đã được ‘Approved’) để có giá trị actual cho mỗi KPI trong kỳ.
    • Ví dụ: KPI “Doanh thu bộ phận” sẽ tổng hợp tất cả các bản ghi doanh thu đã được phê duyệt trong kỳ.
  3. So sánh với Mục tiêu (target): Lấy giá trị target từ KPI_Template và tính toán tỷ lệ hoàn thành (achievement_rate).
  4. Tính điểm KPI (score): Áp dụng thang điểm và trọng số để tính điểm KPI.
  5. Tổng hợp Điểm KPI: Tổng hợp điểm KPI theo các cấp độ (cá nhân, nhóm, bộ phận, công ty) và lưu vào KPI_Summary.
  6. Tính toán P3: Dựa trên điểm KPI cuối cùng, tính toán lương hiệu suất (P3).

3.2. Công thức Tính toán Chi tiết

3.2.1. Tính Tỷ lệ Hoàn thành (achievement_rate)

Tùy thuộc vào loại KPI, công thức tính tỷ lệ hoàn thành sẽ khác nhau:

  1. KPI Tăng (càng cao càng tốt):

    achievement_rate = actual / target

    Ví dụ: KPI “Doanh thu” với target = 100 triệu, actual = 120 triệu → achievement_rate = 120 / 100 = 1.2 (120%)

  2. KPI Giảm (càng thấp càng tốt):

    achievement_rate = (2 - actual / target) nếu actual <= target * 2
                achievement_rate = 0 nếu actual > target * 2

    Ví dụ: KPI “Thời gian phản hồi” với target = 4 giờ, actual = 3 giờ → achievement_rate = (2 - 3/4) = 1.25 (125%)

  3. KPI Đạt/Không đạt:

    achievement_rate = 1 nếu actual >= target
                achievement_rate = 0 nếu actual < target

    Ví dụ: KPI “Tuân thủ quy trình” với target = 100%, actual = 100% → achievement_rate = 1 (100%)

3.2.2. Tính Điểm KPI (score)

Điểm KPI được tính dựa trên tỷ lệ hoàn thành và thang điểm:

  1. Thang điểm cơ bản (0-10):

    score = min(10, achievement_rate * 10)

    Ví dụ: achievement_rate = 1.2 → score = min(10, 1.2 * 10) = 10

  2. Thang điểm có giới hạn trên:

    score = min(max_score, achievement_rate * 10)

    Ví dụ: achievement_rate = 1.2, max_score = 12 → score = min(12, 1.2 * 10) = 12

  3. Thang điểm có thưởng vượt trội:

    score = 10 nếu achievement_rate <= 1
                score = 10 + (achievement_rate - 1) * bonus_factor * 10 nếu achievement_rate > 1

    Ví dụ: achievement_rate = 1.2, bonus_factor = 1.5 → score = 10 + (1.2 - 1) * 1.5 * 10 = 10 + 3 = 13

3.2.3. Tính Điểm KPI có Trọng số (weighted_score)

weighted_score = score * weight

Ví dụ: score = 9, weight = 0.25 → weighted_score = 9 * 0.25 = 2.25

3.2.4. Tính Tổng Điểm KPI theo Cấp độ

  1. Tổng điểm KPI cá nhân:

    total_personal_score = SUM(weighted_score) cho tất cả KPI cá nhân
  2. Tổng điểm KPI nhóm:

    total_team_score = SUM(weighted_score) cho tất cả KPI nhóm
  3. Tổng điểm KPI bộ phận:

    total_dept_score = SUM(weighted_score) cho tất cả KPI bộ phận
  4. Tổng điểm KPI công ty:

    total_company_score = SUM(weighted_score) cho tất cả KPI công ty

3.2.5. Tính Điểm KPI Cuối cùng (final_kpi_score)

Điểm KPI cuối cùng là tổng có trọng số của các cấp độ KPI:

final_kpi_score = (total_personal_score * personal_weight) +
                             (total_team_score * team_weight) +
                             (total_dept_score * dept_weight) +
                             (total_company_score * company_weight)

Ví dụ: - total_personal_score = 8.5, personal_weight = 0.6 - total_team_score = 9.0, team_weight = 0.1 - total_dept_score = 7.5, dept_weight = 0.2 - total_company_score = 8.0, company_weight = 0.1

→ final_kpi_score = (8.5 * 0.6) + (9.0 * 0.1) + (7.5 * 0.2) + (8.0 * 0.1) = 5.1 + 0.9 + 1.5 + 0.8 = 8.3

3.2.6. Tính Lương Hiệu suất (P3)

p3_amount = base_p3 * (final_kpi_score / 10)

Ví dụ: base_p3 = 5,000,000 VND, final_kpi_score = 8.3 → p3_amount = 5,000,000 * (8.3 / 10) = 4,150,000 VND

3.3. Quy trình Tính toán Theo Chu kỳ

3.3.1. Tính toán KPI Hàng tháng

  1. Ngày 1-3 của tháng tiếp theo:
    • Thu thập và xác minh dữ liệu KPI tháng trước
    • Phê duyệt dữ liệu KPI
  2. Ngày 4-5 của tháng tiếp theo:
    • Tính toán tỷ lệ hoàn thành và điểm KPI
    • Lưu kết quả vào KPI_Evaluation
  3. Ngày 6-7 của tháng tiếp theo:
    • Tổng hợp điểm KPI theo các cấp độ
    • Tính điểm KPI cuối cùng và lương P3
    • Lưu kết quả vào KPI_Summary
  4. Ngày 8-10 của tháng tiếp theo:
    • Xem xét và phê duyệt kết quả KPI
    • Cập nhật trạng thái thành ‘Finalized’

3.3.2. Tính toán KPI Hàng quý

  1. Ngày 1-5 của tháng đầu tiên quý tiếp theo:
    • Thu thập và xác minh dữ liệu KPI quý trước
    • Phê duyệt dữ liệu KPI
  2. Ngày 6-10 của tháng đầu tiên quý tiếp theo:
    • Tính toán tỷ lệ hoàn thành và điểm KPI
    • Lưu kết quả vào KPI_Evaluation
  3. Ngày 11-15 của tháng đầu tiên quý tiếp theo:
    • Tổng hợp điểm KPI theo các cấp độ
    • Tính điểm KPI cuối cùng và lương P3
    • Lưu kết quả vào KPI_Summary
  4. Ngày 16-20 của tháng đầu tiên quý tiếp theo:
    • Xem xét và phê duyệt kết quả KPI
    • Cập nhật trạng thái thành ‘Finalized’

4. Triển khai Tính toán KPI trên ABMS

4.1. Stored Procedures

Các stored procedures sẽ được tạo để tự động hóa quá trình tính toán KPI:

4.1.1. sp_CalculateKPIActual

Tổng hợp dữ liệu thực tế từ KPI_Data_Collection cho mỗi KPI trong kỳ.

CREATE PROCEDURE sp_CalculateKPIActual(IN p_period VARCHAR(10))
            BEGIN
                -- Tổng hợp dữ liệu thực tế cho mỗi KPI trong kỳ
                -- Kết quả được lưu vào bảng tạm thời hoặc trả về trực tiếp
            END;

4.1.2. sp_CalculateKPIScore

Tính toán điểm KPI dựa trên giá trị thực tế và mục tiêu.

CREATE PROCEDURE sp_CalculateKPIScore(IN p_period VARCHAR(10))
            BEGIN
                -- Lấy giá trị thực tế và mục tiêu
                -- Tính toán tỷ lệ hoàn thành và điểm KPI
                -- Lưu kết quả vào KPI_Evaluation
            END;

4.1.3. sp_CalculateKPISummary

Tổng hợp điểm KPI theo các cấp độ và tính điểm KPI cuối cùng.

CREATE PROCEDURE sp_CalculateKPISummary(IN p_period VARCHAR(10))
            BEGIN
                -- Tổng hợp điểm KPI theo các cấp độ
                -- Tính điểm KPI cuối cùng và lương P3
                -- Lưu kết quả vào KPI_Summary
            END;

4.2. Triggers

Các triggers sẽ được tạo để đảm bảo tính toàn vẹn dữ liệu và tự động cập nhật khi có thay đổi:

4.2.1. trg_KPI_Data_Collection_After_Update

Tự động cập nhật trạng thái và thông báo khi dữ liệu được xác minh hoặc phê duyệt.

CREATE TRIGGER trg_KPI_Data_Collection_After_Update
            AFTER UPDATE ON KPI_Data_Collection
            FOR EACH ROW
            BEGIN
                -- Kiểm tra nếu trạng thái thay đổi thành 'Approved'
                -- Gửi thông báo cho người liên quan
            END;

4.2.2. trg_KPI_Evaluation_After_Insert

Tự động cập nhật dashboard khi có đánh giá KPI mới.

CREATE TRIGGER trg_KPI_Evaluation_After_Insert
            AFTER INSERT ON KPI_Evaluation
            FOR EACH ROW
            BEGIN
                -- Cập nhật dashboard
            END;

4.3. Scheduled Jobs

Các scheduled jobs sẽ được thiết lập để tự động tính toán KPI theo lịch trình:

4.3.1. job_CalculateMonthlyKPI

Tự động tính toán KPI hàng tháng vào ngày 5 của tháng tiếp theo.

-- Tạo scheduled job để chạy vào ngày 5 hàng tháng
            -- Gọi các stored procedures: sp_CalculateKPIActual, sp_CalculateKPIScore, sp_CalculateKPISummary

4.3.2. job_CalculateQuarterlyKPI

Tự động tính toán KPI hàng quý vào ngày 10 của tháng đầu tiên quý tiếp theo.

-- Tạo scheduled job để chạy vào ngày 10 của tháng đầu tiên mỗi quý
            -- Gọi các stored procedures: sp_CalculateKPIActual, sp_CalculateKPIScore, sp_CalculateKPISummary

5. Ví dụ Tính toán KPI Cụ thể

5.1. Ví dụ 1: KPI Doanh thu Bộ phận Phát triển Kinh doanh

5.1.1. Dữ liệu Thu thập

Ngày Giá trị (VND) Nguồn Trạng thái
2025-04-01 50,000,000 ABMS CRM Approved
2025-04-10 75,000,000 ABMS CRM Approved
2025-04-20 60,000,000 ABMS CRM Approved
2025-04-30 45,000,000 ABMS CRM Approved

5.1.2. Tính toán

  1. Tổng hợp Dữ liệu Thực tế:

    actual = 50,000,000 + 75,000,000 + 60,000,000 + 45,000,000 = 230,000,000 VND
  2. So sánh với Mục tiêu:

    target = 200,000,000 VND
                achievement_rate = 230,000,000 / 200,000,000 = 1.15 (115%)
  3. Tính Điểm KPI:

    score = min(10, 1.15 * 10) = 10
  4. Tính Điểm KPI có Trọng số:

    weight = 0.3
                weighted_score = 10 * 0.3 = 3

5.2. Ví dụ 2: KPI Thời gian Phản hồi Khách hàng

5.2.1. Dữ liệu Thu thập

Ngày Giá trị (giờ) Nguồn Trạng thái
2025-04-05 3.5 ABMS CRM Approved
2025-04-12 2.8 ABMS CRM Approved
2025-04-19 4.2 ABMS CRM Approved
2025-04-26 3.1 ABMS CRM Approved

5.2.2. Tính toán

  1. Tổng hợp Dữ liệu Thực tế:

    actual = (3.5 + 2.8 + 4.2 + 3.1) / 4 = 3.4 giờ
  2. So sánh với Mục tiêu:

    target = 4 giờ
                achievement_rate = (2 - 3.4/4) = 1.15 (115%)
  3. Tính Điểm KPI:

    score = min(10, 1.15 * 10) = 10
  4. Tính Điểm KPI có Trọng số:

    weight = 0.15
                weighted_score = 10 * 0.15 = 1.5

5.3. Ví dụ 3: Tính Điểm KPI Cuối cùng và Lương P3

5.3.1. Tổng hợp Điểm KPI theo Cấp độ

Cấp độ Tổng điểm Trọng số
Cá nhân 8.5 0.6
Nhóm 9.0 0.1
Bộ phận 7.5 0.2
Công ty 8.0 0.1

5.3.2. Tính Điểm KPI Cuối cùng

final_kpi_score = (8.5 * 0.6) + (9.0 * 0.1) + (7.5 * 0.2) + (8.0 * 0.1)
                            = 5.1 + 0.9 + 1.5 + 0.8
                            = 8.3

5.3.3. Tính Lương P3

base_p3 = 5,000,000 VND
            p3_amount = 5,000,000 * (8.3 / 10) = 4,150,000 VND

6. Báo cáo và Trực quan hóa

6.1. Báo cáo KPI

6.1.1. Báo cáo KPI Cá nhân

6.1.2. Báo cáo KPI Bộ phận

6.1.3. Báo cáo KPI Công ty

6.2. Dashboard KPI

6.2.1. Dashboard KPI Cá nhân

6.2.2. Dashboard KPI Quản lý

7. Quy trình Kiểm tra và Xác minh

7.1. Kiểm tra Tính toán

7.2. Xác minh Kết quả

7.3. Quy trình Điều chỉnh