{{ toastMsg }}
Trợ lý AI
Trợ lý HCWPlanhỏi-đáp · hướng dẫn · tư vấn
Bật lại trong “Sửa hồ sơ”.

Chào bạn 👋 Mình là trợ lý hướng dẫn sử dụng HCWPlan. Mình không đọc dữ liệu trong app — bạn hỏi cách dùng, nếu cần có thể chụp màn hình phần liên quan. Thử một gợi ý:

{{ m.hint }}
Dựa trên {{ m.knowledgeUsed.length }} tài liệu Cẩm nang
  • {{ kn }}
{{ m._taught==='merged' ? 'Đã bổ sung Cẩm nang' : 'Đã lưu Cẩm nang' }}
Dạy A.I trả lời đúng
Đang tìm bài liên quan…
Bổ sung vào bài có sẵn (khuyến nghị — tránh trùng lặp, giữ kho gọn):
Đang bổ sung bài «{{ aiTeach.mergeTitle }}»
{{ aiTeach.error }}
Model ưu tiên tạm hết lượt — đã tự chuyển sang {{ m.model }}
Ngân sách: {{ m.budgetWarn }} — đã tự hạ xuống model miễn phí
Đang soạn…
Nội dung & ảnh bạn gửi được chuyển tới nhà cung cấp A.I để phân tích. Đừng nhập/chụp mật khẩu, thông tin cá nhân (CMND/CCCD, số tài khoản, lương), hay dữ liệu nội bộ nhạy cảm — chỉ gửi phần liên quan tới câu hỏi cách dùng.
Hàng đợi xử lý
Các tác vụ tải và lưu đang được xử lý an toàn
{{ writeQueueItems.length }} tác vụ
{{ item.label }}
{{ item.message || 'Đang chờ hệ thống xử lý' }}
{{ writeQueueStatusLabel(item.status) }}
Đang tải dữ liệu

{{ getHeaderMeta(viewMode).title }}

{{ getHeaderMeta(viewMode).subtitle }}

Thông báo
{{ n.Title }}
{{ n.Body }}
Không có thông báo.
Đang tải dữ liệu…

Báo Cáo Tổng Quan Doanh Nghiệp

Năm {{ pnlYear }} - {{ generalDashMonthLabel }}
Chọn thời gian
Doanh Thu Thuần
{{ Math.round(generalDashFinancials.revenue.pct) }}% kế hoạch
{{ formatCurrency(generalDashFinancials.revenue.actual) }}
Kế hoạch: {{ formatCurrency(generalDashFinancials.revenue.plan) }}
TB Tháng: {{ formatMoneyCompact(generalDashFinancials.revenue.avgMonthly) }} YoY: +{{ generalDashFinancials.revenue.yoy.toFixed(1) }}%
Tổng Chi Phí
{{ generalDashFinancials.costRatio.toFixed(1) }}% doanh thu
{{ formatCurrency(generalDashFinancials.cost.actual) }}
Kế hoạch: {{ formatCurrency(generalDashFinancials.cost.plan) }}
Cố định (FC): {{ formatMoneyCompact(generalDashFinancials.cost.fixed) }} Biến đổi (VC): {{ formatMoneyCompact(generalDashFinancials.cost.variable) }}
Lợi Nhuận Ròng
Biên ròng: {{ generalDashFinancials.netProfitMargin.toFixed(1) }}%
{{ formatCurrency(generalDashFinancials.profit.actual) }}
Kế hoạch: {{ formatCurrency(generalDashFinancials.profit.plan) }}
EBIT: {{ formatMoneyCompact(generalDashFinancials.profit.ebit) }} Biên gộp: {{ generalDashFinancials.profit.grossMargin.toFixed(1) }}%
Điểm Hòa Vốn (BEP)
{{ generalDashFinancials.safetyMargin.toFixed(1) }}% an toàn
{{ formatCurrency(generalDashFinancials.bep.value) }}
MoS: {{ formatMoneyCompact(generalDashFinancials.bep.mos) }} {{ generalDashFinancials.revenue.actual >= generalDashFinancials.bep.value ? 'Vượt BEP: +' + formatMoneyCompact(generalDashFinancials.revenue.actual - generalDashFinancials.bep.value) : 'Thiếu BEP: -' + formatMoneyCompact(generalDashFinancials.bep.value - generalDashFinancials.revenue.actual) }}
Hòa vốn/Tháng: {{ formatMoneyCompact(generalDashFinancials.bep.monthly) }} Tỷ lệ CM: {{ generalDashFinancials.bep.cmRatio.toFixed(1) }}%

Quyền truy cập bị giới hạn

Bạn không có quyền xem thông tin Kế hoạch Tài chính (P&L).

Xu Hướng Doanh Thu, Chi Phí & Lợi Nhuận Ròng

Cơ Cấu Doanh Thu & Chi Phí Thực Tế

Tổng DT {{ formatMoneyCompact(generalDashFinancials.revenue.actual) }}
Doanh Thu
{{ seg.label }}
{{ seg.percent }}%
Tổng CP {{ formatMoneyCompact(generalDashFinancials.cost.actual) }}
Chi Phí
{{ seg.label }}
{{ seg.percent }}%

Quyền truy cập bị giới hạn

Tài khoản của bạn không có quyền xem báo cáo phân tích xu hướng tài chính.

Kế Hoạch & Mục Tiêu Chiến Lược

Bản đồ mục tiêu
Hiệu suất Viễn cảnh
{{ p.name }}
{{ p.avgProgress }}% Đạt
Đo lường tiến độ thực tế dựa trên mục tiêu chiến lược và kết quả then chốt (KPI)
Mục tiêu chiến dịch
{{ p.name }}
{{ p.avgProgress }}%
{{ obj.name }}
KPIs: {{ obj.kpisCount }} {{ obj.progress }}%

Tiến Độ Theo Nhãn Phòng Ban

Quản lý nhãn
Trực quan tiến độ phòng ban

{{ lbl.Name }}

{{ lbl.progress }}%
{{ lbl.ManagerInitials }}
{{ lbl.ManagerName }}
{{ lbl.ManagerPosition }}
{{ lbl.progress >= 80 ? 'Tốt' : (lbl.progress >= 70 ? 'Khá' : 'Cần chú ý') }}

Quyền truy cập bị giới hạn

Tài khoản của bạn không có quyền xem thông tin Kế hoạch chiến lược và mục tiêu doanh nghiệp.

Hiệu Suất & Xếp Hạng KPI Nhân Sự

Chi tiết
Đạt tối thiểu
{{ generalDashHrKpiData.passRate }}% nhân sự
Đánh giá
{{ generalDashHrKpiData.evaluatedCount }} nhân sự
Dẫn đầu
{{ generalDashHrKpiData.topDept }}
Cải thiện
{{ generalDashHrKpiData.lowDept }}
Phân bổ xếp hạng KPI TB: {{ generalDashHrKpiData.averageScore }}% ({{ generalDashHrKpiData.trend }})
XS ({{ generalDashHrKpiData.dist.excellent }}%)
Tốt ({{ generalDashHrKpiData.dist.good }}%)
Đạt ({{ generalDashHrKpiData.dist.average }}%)
Yếu ({{ generalDashHrKpiData.dist.weak }}%)
Bảng Xếp Hạng KPI Nhân Sự (Top 5)
{{ idx + 1 }}
{{ emp.name.charAt(0) }}

{{ emp.name }}

{{ emp.dept }}
{{ emp.score }}%

Quyền truy cập bị giới hạn

Tài khoản của bạn không có quyền xem thông tin Đánh giá KPI Nhân Sự.

Chỉ Số Vận Hành Công Việc Sự Vụ

Chi tiết
Đúng Hạn (SLA)
{{ taskStats.onTimeRate }}%
SLA Trọng yếu: {{ taskStats.criticalSla }}%
Độ ưu tiên
P1 Gấp-QT
{{ taskStats.priorityDist.critical }}%
P2 QT-KG
{{ taskStats.priorityDist.high }}%
P3 Gấp
{{ taskStats.priorityDist.medium }}%
P4
{{ taskStats.priorityDist.low }}%
Tổng {{ taskStats.total }}
Đúng hạn {{ taskStats.done }}
Trễ {{ taskStats.doneLate }}
Quá hạn {{ taskStats.overdue }}
Các việc đang trễ deadline
{{ t.title }}
Phụ trách: {{ t.owner }}
{{ t.dueDate }}

Quyền truy cập bị giới hạn

Tài khoản của bạn không có quyền xem Chỉ số vận hành công việc sự vụ.

Đang tải số liệu dự án…

Kinh doanh (CRM)

Xem chi tiết →
Tổng khách hàng
{{ gdCrm.totalCust }}
Cơ hội đang mở
{{ gdCrm.openDeals }}
Giá trị pipeline
{{ pjMoneyShort(gdCrm.pipelineVal) }}
Win rate
{{ gdCrm.winRate!=null?gdCrm.winRate+'%':'—' }}
Doanh thu Won
{{ pjMoneyShort(gdCrm.wonRev) }}
Giá trị pipeline theo giai đoạn
Cơ cấu khách hàng theo loại

Quy trình vận hành

Xem chi tiết →
Đang tải số liệu quy trình…
Lọc:
{{ k.label }}
{{ k.value }}

Phễu Bán Hàng

Nguồn Khách Hàng

Hiệu Suất Nhân Viên

HỆ THỐNG HOẠCH ĐỊNH CHIẾN LƯỢC

Năm làm việc Lọc dữ liệu
Chọn các tháng
|
Không tìm thấy nhãn phù hợp

Không có quyền truy cập

Bạn không có quyền truy cập vào bất kỳ phân hệ con nào của Lập Kế Hoạch Tổng Thể. Vui lòng liên hệ Admin để được phân quyền.

{{ pers.Name }}

{{ item.Name }}

{{ lbl.Name }} Chưa liên kết PB
Chỉ số KPIs: {{getObjectiveKpis(item.ID).length}} KPIs
TB: {{calcObjAvgProgress(item)}}%
Chưa có mục tiêu hiển thị
x

Danh sách mục tiêu và chỉ số KPI

Bộ lọc: {{getSelectedMonthsLabel()}}{{masterYearFilter}}

{{selectedKpis.length}} đã chọn
KPI

Chưa có chỉ tiêu KPI nào được giao

Vui lòng bấm nút "Khai báo & Giao KPI" để phân bổ chỉ số từ thư viện sang các mục tiêu chiến lược của năm {{ masterYearFilter }}.

{{obj.perspectiveName}} Mục tiêu ưu tiên

{{ obj.objectiveName }}

{{ obj.kpis.length }} KPIs
Tiến độ {{formatNumber(calcObjAvgProgress(obj), 1)}}%
Chỉ số KPI
Link báo cáo
Phân loại
Mục tiêu Thực đạt
Tiến độ

{{ kpi.KPIName }}

{{kpi.Description}}

{{kpi.KPIType}} ĐVT: {{ kpi.Unit }} {{kpi.Status}} Chưa gán nhãn
--
{{ kpi.Classification }}
Tỷ trọng: {{formatNumber(kpi.Weight, 1)}}%
{{formatNumber(kpi.Target, 2)}} {{formatNumber(kpi.Actual, 2)}}
{{formatNumber(kpi.Achievement, 1)}}%

Cập nhật 12 tháng

Bật/tắt thẻ KPI cho từng tháng. Tháng bị tắt sẽ không đóng góp vào mục tiêu năm.

DỮ LIỆU THÁNG {{m}}
Trạng thái
Khóa
Mục tiêu
{{ formatNumber(bpTrackerEditRow.months[m].Target, 1) }}
Thực đạt
{{ formatNumber(bpTrackerEditRow.months[m].Actual, 1) }}
Tỷ lệ đạt
{{ getTrackerMonthAchievement(bpTrackerEditRow.months[m], kpi.CalcMethod) === null ? '---' : formatNumber(getTrackerMonthAchievement(bpTrackerEditRow.months[m], kpi.CalcMethod), 1) + '%' }}
-

Sửa hàng loạt {{selectedKpis.length}} chỉ số KPI

Cập nhật nhanh mục tiêu liên kết và giá trị chỉ tiêu target

Chọn một mục tiêu chung ở trên nếu bạn muốn chuyển tất cả {{ selectedKpis.length }} KPI này sang mục tiêu đó.

Chỉ số KPI Chỉ tiêu Target mới
{{ item.KPIName }}
ĐVT: {{ item.Unit || 'N/A' }} Tự động Nhập tay mục tiêu Nhập tay thực tế Nhập trực tiếp
{{formatNumber(item.Target, 2)}}

III. Kế hoạch hành động

{{apSelectedIds.length}} đã chọn
Đang tải danh sách công việc... Đã tải {{ tasksLoadingState.loadedCount }} công việc — đang tải thêm ở nền... {{ tasksLoadingState.error }}
STT Hành động cụ thể Người phụ trách Thời gian Ưu tiên & Trạng thái Tiến độ (%) Kết quả (Báo cáo) Thao tác
Không tìm thấy kế hoạch hành động nào khớp với bộ lọc
{{ col.name }}
{{ kanbanColumns[col.key] ? kanbanColumns[col.key].length : 0 }}
{{ row.ActionName }}
P1 P2 P3 P4
{{ row.ObjectiveName || 'Mục tiêu liên kết' }} {{ row.KPIName || 'KPI liên kết' }}
BĐ: {{ apFormatDate(row.StartDate) || '--' }} | KT: {{ apFormatDate(row.EndDate) || '--' }}
Tiến độ {{ row.Progress }}%
Đúng hạn
Trễ hạn
{{ getAvatarInitials(row.AssignedTo) }} {{ getAvatarInitials(row.Supervisor) }}
Không có công việc nào
Màu sắc ưu tiên: Gấp - Quan trọng (P1) Quan trọng - Không gấp (P2) Gấp - Không quan trọng (P3) Không gấp - Không quan trọng (P4) Di chuột qua thanh bar để xem chi tiết.
DANH SÁCH HÀNH ĐỘNG CỤ THỂ
THÁNG {{ m }}
DANH SÁCH HÀNH ĐỘNG CỤ THỂ
{{ h.label }}
{{ col.label }}
Không tìm thấy kế hoạch hành động nào
Đang sửa
{{apFilteredData.length}} hành động {{apFilteredData.filter(r => Number(r.Progress) >= 100).length}} hoàn thành {{apFilteredData.filter(r => Number(r.Progress) > 0 && !(Number(r.Progress) >= 100)).length}} đang thực hiện {{apOverdueCount}} trễ hạn

{{ apBulkEditMode ? 'Chỉnh sửa kế hoạch hành động' : 'Khai báo kế hoạch hành động mới' }}

{{ apBulkEditMode ? 'Cập nhật chi tiết hành động của bạn' : 'Thiết lập nhanh danh sách hành động cần thực hiện (Hệ thống tự động liên kết mục tiêu tương ứng)' }}

{{ apBulkEditMode ? 'Chỉnh sửa thông tin chi tiết của hành động. Các trường có dấu (*) là bắt buộc.' : 'Nhập trực tiếp danh sách hành động cần tạo hàng loạt. Điền tên hành động để lưu.' }}
# KPI liên kết * Tên hành động * Mô tả chi tiết Phụ trách chính * Phối hợp (Supervisor) Ưu tiên * Bắt đầu * Kết thúc * Tiến độ (%) Kết quả (Báo cáo) Xóa
{{ idx + 1 }}
Các trường có dấu (*) là bắt buộc. Nhập tên hành động để lưu lại thành công.

Bản Đồ Chiến Lược

{{pers.Name}}

{{calcObjAvgProgress(item)}}%

{{item.Name}}

{{item.Description || 'Chưa có mô tả mục tiêu chiến lược...'}}

{{ lbl.Name }} Chưa liên kết
Chưa có mục tiêu hiển thị
1. Chọn Mục Tiêu Gốc (Từ đâu?)
{{pers.Name}}
{{item.Name}}
2. Chọn Mục Tiêu Đích (Mục tiêu '{{(strategyItems.find(i => i.ID === activeSourceID) || {}).Name}}' sẽ tác động đến...) Đang cấu hình liên kết ra

Vui lòng chọn một mục tiêu ở cột bên trái trước

{{pers.Name}}

{{item.Name}}
{{item.Description}}
# {{ strategyConfigMode === 'objectives' ? 'Tên Mục Tiêu' : 'Tên Viễn Cảnh' }} Thuộc Viễn Cảnh Màu Sắc / Icon Hiển Thị Thao Tác
{{idx+1}}
{{item.Name}}
{{item.Description}}
{{item.PerspectiveID}}
Chưa có dữ liệu

Thêm hàng loạt mục tiêu ({{stObjBulkRows.length}} dòng)

# Tên mục tiêu * Mô tả Viễn cảnh * Màu sắc
{{ri + 1}}
-

Cấu hình thẻ hiển thị

Trường mặc định
{{stage.name}} {{ getDealsByStage(stage.id).length }}
{{ formatCurrency(getStageTotal(stage.id)) }}
{{ deal.DealName }}
{{ getCustomerName(deal.CustomerID) }}
{{ formatCurrency(deal.Value) }}
{{ getCustomerPhone(deal.CustomerID) }}
{{ getOwnerInfo(deal.Owner).initial }}
{{getOwnerInfo(deal.Owner).name}}{{getOwnerInfo(deal.Owner).dept}}
{{ formatDateDisplay(deal.CreatedDate) }} · {{ getDealAge(deal.CreatedDate) }}d
Phụ trách:
Giai đoạn:
Thời gian:
-
Cơ Hội & Khách Hàng Giai đoạn Giá trị
{{d.DealName}}
{{getCustomerName(d.CustomerID)}}
{{ getStageName(d.StageID) }}
{{formatCurrency(d.Value)}}
{{formatDateDisplay(d.CreatedDate)}}
Loại:
Thời gian:
-
Khách Hàng Phân loại {{cf.label}}
{{c.Name}}
{{c.Phone}}
{{c.Type}}

Thêm Hàng Loạt Khách Hàng

STT Tên KH * SĐT * Loại Email {{cf.label}} *
{{bi+1}}

Chưa có dòng nào

Nhấn "Thêm dòng" để bắt đầu nhập khách hàng

Các dòng có Tên + SĐT sẽ được lưu. Trường có * là bắt buộc.
Người tạo:
Thời gian:
-
Nhà Cung Cấp
{{s.Name}}
{{s.Phone || '---'}}

Chưa có nhà cung cấp nào.

{{currentSupplier.SupplierID ? 'Sửa' : 'Thêm'}} Nhà Cung Cấp

Thông Tin NCC
Trường tùy chỉnh
Tổng Còn lại Hạn TT Trạng thái
{{dd.ContractNo || '-'}} {{formatCurrency(dd.TotalAmount)}} {{formatCurrency((getDebtAdjustedTotal(dd.DebtID, dd.TotalAmount))-(Number(dd.PaidUpfront)||0)-getDebtPaidAmount(dd.DebtID))}} {{dd.DueDate ? formatDateDisplay(dd.DueDate) : '-'}} {{debtStatusLabel(getDebtStatus(dd))}}
Chưa có công nợ
{{suppDebtsDataPaged.total}} hợp đồng
{{suppDebtsPage}} / {{suppDebtsDataPaged.pages}}
Ngày Loại Số tiền Lý do Người tạo
{{formatDateDisplay(lg.Date)}} {{(suppDebtsData.find(d => d.DebtID === lg.DebtID) || {}).ContractNo || '-'}} {{lg.Type === 'increase' ? 'Tăng thêm' : 'Giảm trừ'}} {{formatCurrency(lg.Amount)}} {{lg.Reason || '-'}} {{lg.CreatedBy}}
Chưa có điều chỉnh nào
{{suppDebtLogsDataPaged.total}} điều chỉnh
{{suppLogsPage}} / {{suppDebtLogsDataPaged.pages}}
Thu
{{formatNumber(suppLedgerData.income)}}
Chi
{{formatNumber(suppLedgerData.expense)}}
Thuần
{{formatNumber(suppLedgerData.income - suppLedgerData.expense)}}
Chưa có giao dịch nào với NCC này
STT Ngày Loại Danh mục Quỹ Số Tiền Mô Tả
{{(suppLedgerPage - 1) * 10 + idx + 1}} {{e.Date ? e.Date.substring(0, 10) : ''}} {{e.Type === 'income' ? 'Thu' : 'Chi'}} {{e.Category || ''}} {{(funds.find(f => f.FundID === e.FundID) || {}).FundName || ''}} {{e.Type === 'income' ? '+' : '-'}}{{formatNumber(Math.abs(Number(e.Amount) || 0))}} {{String(e.Description || '')}}
{{suppLedgerData.total}} giao dịch
{{suppLedgerPage}} / {{suppLedgerData.pages}}

Thêm Hàng Loạt Nhà Cung Cấp

STT Tên NCC * SĐT Email {{cf.label}} *
{{bi+1}}

Chưa có dòng nào

Nhấn "Thêm dòng" để bắt đầu nhập NCC

Các dòng có Tên sẽ được lưu. Trường có * là bắt buộc.

Chưa cấu hình Link báo cáo Looker Studio.

Người đang sở hữu

{{transferUsersList.length}}
{{u.name}}
{{u.position || '---'}} • {{u.team || '---'}}
{{u.role}} • {{getAssetsOfUser(u.username).length}} deals
{{u.role}}
Không tìm thấy nhân sự
{{ selectedTeamUser.name.charAt(0) }}

{{ selectedTeamUser.name }}

{{selectedTeamUser.username}} • {{transferAssetsList.length}} Deals

Đã chọn
{{transferSelection.length}}
Quản lý danh mục sở hữu
Thông tin Deal Đặc điểm & Phân loại Giá trị Giai đoạn
{{item.name}}
{{getCustomerName(item.CustomerID)}} {{getCustomerPhone(item.CustomerID)}} {{formatDateDisplay(item.CreatedDate, true)}}
{{formatCurrency(item.val)}} {{ getStageName(item.StageID) }}

Không tìm thấy Deals nào phù hợp

Vui lòng chọn nhân viên sở hữu bên trái

Quản lý hiệu quả danh mục cơ hội

Quản Lý Phòng Ban

{{teamsList.length}} Phòng ban đang hoạt động

Tên Phòng Ban Trưởng Phòng Thành Viên Mô Tả Thao Tác
{{t.TeamName}}
{{(getUserName(t.Lead) || '?').charAt(0)}}
{{getUserName(t.Lead)}}
---
{{getTeamMemberCount(t.TeamName)}} thành viên {{t.Description || '---'}}
Không có dữ liệu phòng ban
Ban Giám Đốc
BAN QUẢN TRỊ
{{(getUserName(boardOfDirectorsTeam.Lead) || '?').charAt(0)}}
{{getUserName(boardOfDirectorsTeam.Lead)}}
@{{boardOfDirectorsTeam.Lead}}
{{u.name.charAt(0)}}
{{getTeamMemberCount(boardOfDirectorsTeam.TeamName)}} thành viên
HCWPlan Company
{{t.TeamName}}
{{getTeamMemberCount(t.TeamName)}} thành viên

{{t.Description || 'Chưa có mô tả phòng ban.'}}

Trưởng phòng
{{(getUserName(t.Lead) || '?').charAt(0)}}
{{getUserName(t.Lead)}}
@{{t.Lead}}
Chưa gán quản lý
{{u.name.charAt(0)}}
+{{getTeamMemberCount(t.TeamName) - 4}}
Không có dữ liệu phòng ban

{{selectedTeamDetail.TeamName}}

Chi tiết phòng ban & Thành viên

Trưởng phòng
{{(getUserName(selectedTeamDetail.Lead) || '?').charAt(0)}}
{{getUserName(selectedTeamDetail.Lead)}}
@{{selectedTeamDetail.Lead}}
Chưa gán Trưởng phòng
Danh sách thành viên ({{selectedTeamMembers.length}})
{{u.name.charAt(0)}}
{{u.name}}
@{{u.username}} - {{u.team || 'Chưa gán phòng'}}
Không tìm thấy nhân sự phù hợp
{{m.name.charAt(0)}}
{{m.name}}
{{m.position}}
Không tìm thấy thành viên nào
Mô tả phòng ban

{{selectedTeamDetail.Description || 'Không có mô tả.'}}

STT KPI Đơn vị tính thực đạt & target Giải thích ý nghĩa KPI Mục đích sử dụng KPI Điểm thách thức (1-10) Nguồn lấy dữ liệu Chiều hướng Cách tính tỷ lệ đạt Loại KPI Mô tả cách tính Phân loại Trạng thái Thao tác
Mới Active
Chua co chi so KPI nao. Bam "Them KPI" de bat dau.
Phân loại:
STT Tháng Viễn cảnh Mục tiêu KPI Đơn vị Điểm thách thức Target Thực đạt Tỷ lệ đạt (%) Tỷ trọng (%) Trạng thái Thao tác
Mới
{{bpNewRow.ObjectiveID ? (strategyItems.find(s => s.Type === 'Objective' && String(s.ID) === String(bpNewRow.ObjectiveID)) || {}).Name || '-- Chọn mục tiêu --' : '-- Chọn mục tiêu --'}}
{{obj.Name}}
Không tìm thấy
{{bpNewRow.LibID ? (kpiLibrary.find(k => k.LibID === bpNewRow.LibID) || {}).KPIName || '-- Chọn KPI --' : '-- Chọn KPI --'}}
{{kpi.KPIName}}
Không tìm thấy
{{calcAchievement(bpNewRow.Actual, bpNewRow.Target, bpNewRow.CalcMethod).toFixed(1)}}% {{calcWeight(bpNewRow).toFixed(1)}}% Active
Chưa có KPI nào. Bấm "Thêm KPI" để bắt đầu.

Khóa KHKD - Năm {{bpSelectedYear}}

Chọn tháng cần khóa để bảo vệ dữ liệu KHKD

Khóa Chỉ số KPI - Năm {{masterYearFilter}}

Chọn tháng cần khóa để bảo vệ dữ liệu Chỉ tiêu & Thực đạt KPI

Tháng:

I. Mục tiêu KPI tổng thể

Bảng tổng hợp chỉ tiêu Target theo từng tháng

Tên mục tiêu
KPI
Đơn vị tính thực đạt & target
Loại KPI
Cả năm
Tháng {{m}}
Chưa có dữ liệu KPI cho năm {{bpSelectedYear}}
{{dbPivotData.length}} Mục tiêu
{{dbPivotData.reduce((sum, g) => sum + g.kpis.length, 0)}} Chỉ số KPI
Tháng hiện tại: {{new Date().getMonth() + 1}}

II. Theo dõi tỷ lệ đạt mục tiêu chiến lược

Tỷ lệ đạt mục tiêu theo tháng ({{bpSelectedYear}})

Tên mục tiêu
Cả năm
Tháng {{m}}
{{obj.objectiveName}} {{obj.yearlyAvg}}% {{obj.monthlyAchievement[m]}}%
Chưa có dữ liệu

Xu hướng tỷ lệ đạt — {{selectedObjForChart}} — Tất cả mục tiêu

Tỷ lệ đạt của mục tiêu

Tỷ trọng theo số lượng KPI

III. Theo dõi tỷ lệ đạt các chỉ số KPI then chốt

Chi tiết Target / Thực đạt / Tỷ lệ đạt theo từng tháng ({{bpSelectedYear}})

Tên mục tiêu
KPI
Cả năm Tháng {{m}}
Target
Thực đạt
Tỷ lệ đạt KPI(%)
Chưa có dữ liệu

Tỷ lệ đạt (trung bình) — {{selectedKPIForS3}}

Tỷ lệ đạt theo thời gian — {{selectedKPIForS3}}

STT Tháng Mã NV Tên nhân viên Vị trí Phòng Ban Tên mục tiêu KPI Phân loại Đơn vị Cách tính Mô tả cách tính Target Thực đạt Tỷ lệ đạt (%) Check Trạng thái Thao tác
*
{{hrKpiNewRow.Username ? (hrKpiNewRow.EmployeeName || hrKpiNewRow.Username) : '-- Chọn nhân viên --'}}
{{u.name}} {{u.position}} {{u.team}}
Không tìm thấy
{{hrKpiNewRow.ObjectiveID ? getObjName(hrKpiNewRow.ObjectiveID) : '-- Chọn mục tiêu --'}}
{{obj.Name}}
Không tìm thấy
{{hrKpiNewRow.LibID ? getKpiName(hrKpiNewRow.LibID) : '-- Chọn KPI --'}}
{{kpi.KPIName}}
Không tìm thấy
{{ getHRKPISourceLabel(hrKpiNewRow) }}
{{calcAchievement(hrKpiNewRow.Actual, hrKpiNewRow.Target, hrKpiNewRow.CalcMethod).toFixed(1)}}%

Không có dữ liệu KPI

Khóa KPI - Năm {{hrKpiSelectedYear}}

Chọn tháng cần khóa để bảo vệ dữ liệu KPI

Đối chiếu KPI tổng thể

{{hrKpiCrossRefModal.kpiName}} - Năm {{hrKpiCrossRefModal.hrKpiRow ? hrKpiCrossRefModal.hrKpiRow.Year : ''}}

Kế hoạch kinh doanh (BP) - Tổng hợp

Tháng Target (BP) Thực đạt Đạt (%)
Tháng {{m}} {{formatNumber(hrKpiCrossRefModal.monthlyData[m] ? hrKpiCrossRefModal.monthlyData[m].target : 0)}} {{formatNumber(hrKpiCrossRefModal.monthlyData[m] ? hrKpiCrossRefModal.monthlyData[m].actual : 0)}} {{hrKpiCrossRefModal.monthlyData[m] && hrKpiCrossRefModal.monthlyData[m].target > 0 ? (hrKpiCrossRefModal.monthlyData[m].actual / hrKpiCrossRefModal.monthlyData[m].target * 100).toFixed(1) + '%' : '---'}}
TỔNG {{formatNumber(hrKpiCrossRefModal.totalTarget)}} {{formatNumber(hrKpiCrossRefModal.totalActual)}} {{hrKpiCrossRefModal.totalPct ? hrKpiCrossRefModal.totalPct.toFixed(1) : 0}}%

KPI Nhân viên đang thiết lập

Nhân viên: {{hrKpiCrossRefModal.hrKpiRow.EmployeeName}}
Bộ phận: {{hrKpiCrossRefModal.hrKpiRow.Department}}
Target NV: {{formatNumber(hrKpiCrossRefModal.hrKpiRow.Target)}}
Thực đạt: {{formatNumber(hrKpiCrossRefModal.hrKpiRow.Actual)}}
Chiếm: {{(hrKpiCrossRefModal.hrKpiRow.Target / hrKpiCrossRefModal.totalTarget * 100).toFixed(1)}}% BP target
Tháng:

I. Mục tiêu KPI chi tiết theo nhân viên

Bảng tổng hợp chỉ tiêu Target theo từng tháng — Năm {{hrKpiSelectedYear}}

Bộ phận
Tên nhân viên
Vị trí
Mục tiêu
KPI
Cả năm
Tháng {{m}}
Chưa có dữ liệu KPI cho năm {{hrKpiSelectedYear}}
{{hrKpiDbStats.deptCount}} Bộ phận
{{hrKpiDbStats.empCount}} Nhân viên
{{hrKpiDbStats.kpiCount}} Chỉ số KPI
Tháng hiện tại: {{new Date().getMonth() + 1}}

II. Số lượng KPI theo bộ phận & nhân viên

Phân bổ chỉ số KPI theo từng bộ phận và nhân viên — Năm {{hrKpiSelectedYear}}

KPI theo bộ phận

Tỷ trọng KPI theo bộ phận

KPI theo nhân viên

III. Tỷ lệ đạt KPI bộ phận & nhân sự theo tháng

Phân tích tỷ lệ hoàn thành chỉ tiêu KPI — Năm {{hrKpiSelectedYear}}

Tỷ lệ đạt KPI theo bộ phận

Tỷ lệ đạt KPI của nhân sự

Tên nhân viên Tháng {{m}}
{{row.name}} {{row.monthly[m] !== null ? row.monthly[m].toFixed(2) + '%' : '-'}}
Chưa có dữ liệu

Tỷ lệ đạt theo nhân viên

Tỷ lệ đạt theo tháng

Tỷ lệ đạt KPI tổng thể

{{hrKpiOverallAchievement.toFixed(1)}}%

Tỷ lệ đạt KPI của nhân sự

Tháng / Tỷ lệ đạt KPI của nhân sự

Tháng Tỷ lệ đạt (%) Biểu đồ
Tháng {{m.month}} {{m.avg !== null ? m.avg.toFixed(2) + '%' : '-'}}

IV. Bảng KPI chi tiết nhân viên

Chi tiết Target / Thực đạt / Tỷ lệ đạt theo từng tháng — Năm {{hrKpiSelectedYear}}

Tên nhân viên
Tên mục tiêu
KPI
Cả năm Tháng {{m}}
Target
Thực đạt
Tỷ lệ đạt(%)
Chưa có dữ liệu

Quản Lý Nhân Sự

{{usersList.length}} Tài khoản đang tồn tại

Mã NV Nhân Viên Email SĐT Username Quyền Vị Trí Phòng Ban Trạng Thái Thao Tác
{{u.employeeCode || '---'}}
{{u.name.charAt(0)}}
{{u.name}}
{{u.email || '---'}} {{u.phone || '---'}} {{u.username}} {{getRoleName(u.role)}} {{u.position || '---'}} {{u.team || '---'}} {{u.status}}
Không tìm thấy nhân sự phù hợp
Không có dữ liệu
Không có dữ liệu
STT Tên mục tiêu
KPI
Hành động cụ thể
Mô tả
Mức ưu tiên
Nơi thực hiện
Người thực hiện
Người phối hợp
Tần suất
Bắt đầu
Kết thúc
Trạng thái
Ngày HT
Tiến độ
Kết quả hoàn thành
{{wk.label}}
{{wk.range}}
Chưa có kế hoạch hành động nào
Đang sửa
{{apFilteredData.length}} hành động {{apFilteredData.filter(r => Number(r.Progress) >= 100).length}} hoàn thành {{apFilteredData.filter(r => Number(r.Progress) > 0 && !(Number(r.Progress) >= 100)).length}} đang thực hiện {{apOverdueCount}} trễ hạn
Hành động cụ thể Quy trình Công việc con Vai trò Người phụ trách Thời gian Ưu tiên & Trạng thái Tiến độ (%) Kết quả (Báo cáo) Ghi chú Thao tác
Chưa có công việc sự vụ nào
Hiển thị dòng mỗi trang. Tổng số: {{ tasksLoadingState.totalCount || cvsvFilteredData.length }} công việc.
Đang sửa
{{col.label}} {{col.tasks.length}}
{{task.Title||'Không tiêu đề'}} PH {{task.Priority||''}}
{{apGetUserNames(task.AssignedTo)}} {{apGetUserNames(task.AssignedTo)}} {{apFormatDate(task.DueDate)}} Quy trình Đang chờ {{ bpmTaskBadge(task).done }}/{{ bpmTaskBadge(task).total }}
{{Number(task.Progress)||0}}%
Không có công việc

Chi tiết công việc

Công việc phối hợp chỉ sửa được Tiến độ và Kết quả

{{cvsvKanbanEditRow.Title || 'Không tiêu đề'}}

{{cvsvKanbanEditRow.Description || 'Không có mô tả chi tiết cho công việc này.'}}
Chưa có công việc con
{{Number(cvsvKanbanEditRow.Progress)||0}}%
Tự tính theo công việc con
Thông tin chi tiết
Trạng thái {{cvsvAutoStatus(cvsvKanbanEditRow)==='done'?'Hoàn thành đúng hạn': cvsvAutoStatus(cvsvKanbanEditRow)==='done_late'?'Hoàn thành trễ hạn': cvsvAutoStatus(cvsvKanbanEditRow)==='in_progress'?'Đang thực hiện': cvsvAutoStatus(cvsvKanbanEditRow)==='overdue'?'Trễ hạn':'Chưa bắt đầu'}}
Ưu tiên {{cvsvKanbanEditRow.Priority==='P1'?'● Gấp - Quan trọng': cvsvKanbanEditRow.Priority==='P2'?'● Quan trọng - Không gấp': cvsvKanbanEditRow.Priority==='P3'?'● Gấp - Không quan trọng': '⚪ Không gấp - Không quan trọng'}}
Người thực hiện {{apGetUserName(cvsvKanbanEditRow.AssignedTo)}}
Người phối hợp {{cvsvKanbanEditRow.Supervisor ? apGetUserNames(cvsvKanbanEditRow.Supervisor) : '—'}}
Ngày bắt đầu {{apFormatDate(cvsvKanbanEditRow.StartDate) || '—'}}
Hạn hoàn thành {{apFormatDate(cvsvKanbanEditRow.DueDate) || '—'}}
Thực tế HT {{cvsvKanbanEditRow.CompletedDate ? apFormatDate(cvsvKanbanEditRow.CompletedDate) : '—'}}
Chú thích & Hiển thị
MÀU SẮC TIẾN ĐỘ THEO ƯU TIÊN: P1 (Khẩn cấp, Quan trọng) P2 (Quan trọng, Không khẩn) P3 (Khẩn cấp, Ít quan trọng) P4 (Ít quan trọng, Không khẩn) | Di chuột qua thanh bar hoặc click đúp dòng để xem chi tiết.
Hiển thị: Từng ngày (Bước 1 ngày) Bước 5 ngày Bước 10 ngày Bước 15 ngày
STT
HÀNH ĐỘNG CỤ THỂ / PHỤ TRÁCH
{{ h.label }}
STT
Tiêu đề công việc
{{ col.label }}
{{ String((cvsvCurrentPage - 1) * cvsvItemsPerPage + idx + 1).padStart(2, '0') }}
{{ row.Title }}
{{ getAvatarInitials(row.AssignedTo) }} {{ apGetUserName(row.AssignedTo) }} | {{ cvsvGetStatusText(row) }}
{{ row.Progress }}%
Không tìm thấy công việc sự vụ nào
Hiển thị dòng mỗi trang. Tổng số: {{ tasksLoadingState.totalCount || cvsvFilteredData.length }} công việc.

Danh mục dự án

Danh mục dự án / {{ pjDetail.project.Name }}

{{ pjDetail.project.Name }}

{{ pjDetail.project.Status }}{{ pjDetail.project.Priority }}
{{ pjDetail.project.Code }} · {{ pjDetail.project.Description || 'Không có mô tả' }}
Chủ nhiệm
{{ pjDetail.project.Owner || '—' }}
Tiến độ
{{ Number(pjDetail.project.Progress)||0 }}%
Thời gian
{{ pjFmtDate(pjDetail.project.StartDate) }} → {{ pjFmtDate(pjDetail.project.EndDate) }}
Thành viên
{{ pjDetail.members.length }} người
Danh mục dự án / Quản trị
{{ pjStats.total }}
Tổng dự án
{{ pjStats.running }}
Đang chạy
{{ pjStats.done }}
Hoàn thành
{{ pjStats.overdue }}
Trễ hạn
{{ pjStats.highRisk }}
Rủi ro cao
Tiến độ TB{{ pjPortfolio.ops.avgProgress }}%
Việc quá hạn{{ pjPortfolio.ops.tasks.overdue }}
Mốc đạt{{ pjPortfolio.ops.milestones.achieved }}/{{ pjPortfolio.ops.milestones.total }}
Số liệu tài chính cần quyền Tài chính dự án
Phân bố dự án
Công việc
Tài chính: KH vs TT
Lãi ròng theo dự án (KH · top 8)
Tài chính danh mục
Doanh thu
{{ pjMoneyShort(pjPortfolio.fin.planRev) }}
TT {{ pjMoneyShort(pjPortfolio.fin.actRev) }}
Chi phí
{{ pjMoneyShort(pjPortfolio.fin.planCost) }}
TT {{ pjMoneyShort(pjPortfolio.fin.actCost) }}
Lãi ròng (KH)
{{ pjMoneyShort(pjPortfolio.fin.netPlan) }}
Biên {{ pjPortfolio.fin.netMarginPlan!=null?Math.round(pjPortfolio.fin.netMarginPlan*100)+'%':'—' }} · TT {{ pjMoneyShort(pjPortfolio.fin.netAct) }}
Vượt ngân sách
{{ pjPortfolio.fin.overBudgetCount }}
dự án AC > ngân sách
Điểm hòa vốn
Đã đạt hòa vốn
{{ pjPortfolio.bep.reached }}/{{ pjPortfolio.bep.withData }}
DT thực ≥ DT hòa vốn
Tổng biên an toàn
{{ pjMoneyShort(pjPortfolio.bep.marginSafetyTotal) }}
DT vượt trên hòa vốn (Σ)
Vận hành
Tiến độ trung bình
{{ pjPortfolio.ops.avgProgress }}%
các dự án đang chạy
Công việc
{{ pjPortfolio.ops.tasks.done }}/{{ pjPortfolio.ops.tasks.total }}
{{ pjPortfolio.ops.tasks.overdue }} quá hạn
Mốc
{{ pjPortfolio.ops.milestones.achieved }}/{{ pjPortfolio.ops.milestones.total }}
đã đạt
Nhà thầu
{{ pjPortfolio.ops.contractors.count }}
GT {{ pjMoneyShort(pjPortfolio.ops.contractors.totalValue) }}giá trị ẩn
{{ pjFilteredList.length }} dự án
Dự ánTrạng tháiTiến độKết thúc
{{ p.Name }}({{ p.Code }})
{{ p.Status }}
{{ Number(p.Progress)||0 }}%
{{ pjFmtDate(p.EndDate) }}
{{ pjList.length ? 'Không có dự án khớp bộ lọc.' : 'Chưa có dự án. Bấm "Tạo dự án" để bắt đầu.' }}
Đang tải…
{{ pjSel.length }} đã chọn
{{ g.phase ? g.phase.Name : 'Chưa gán giai đoạn' }} ⚠ Rủi ro
{{ g.phase._progress||0 }}%
{{ g._taskCount }} việc · {{ g.milestones.length }} mốc · {{ g.risks.length }} rủi ro
{{ t.Title }} ⚠ Rủi ro ⏳ {{ bpmTaskBadge(t).done }}/{{ bpmTaskBadge(t).total }} {{ t.Priority }}
{{ t.DueDate ? pjFmtDate(t.DueDate) : '' }}
{{ Number(t.Progress)||0 }}%
Chưa có công việc. Bấm ở đầu giai đoạn để thêm.
Thảo luận dự án {{ pjComments.length }}
Chưa có trao đổi nào. Bắt đầu thảo luận bên dưới.
{{ pjInitials(c.CreatedBy) }}
{{ getUserName ? getUserName(c.CreatedBy) : c.CreatedBy }} {{ pjRelTime(c.CreatedAt) }}
{{ c.Body }}
{{ pjInitials(user.username) }}
{{ col.label }}{{ col.tasks.length }}
{{ t.Title }}
{{ t.AssignedTo }}{{ pjFmtDate(t.DueDate) }}{{ t.Priority }}⏳ {{ bpmTaskBadge(t).done }}/{{ bpmTaskBadge(t).total }}

Thành viên dự án

Chỉ chủ nhiệm/quản lý mới thêm/sửa/bớt. Vai trò Quan sát chỉ được xem.
STTThành viênVai tròPhân bổ
{{ i+1 }}
{{ pjInitials(mb.Username) }}
{{ getUserName ? getUserName(mb.Username) : mb.Username }}
{{ pjRoleLabel(mb.Role || 'Member') }} {{ mb.Allocation ? mb.Allocation+'%' : '—' }}
Chưa có thành viên. Bấm Thêm thành viên.

Nhà thầu & nhà cung cấp

Danh sách nhà thầu chính/phụ, nhà cung cấp của dự án. Tự nhập tay (chưa liên kết CRM).
{{ pjCtrSel.length }} nhà thầu đã chọn
Số nhà thầu
{{ (pjDetail.contractors||[]).length }}
Tổng giá trị hợp đồng
{{ pjMoney(pjContractorCost.plan) }}
Đã nghiệm thu
{{ pjMoney(pjContractorCost.actual) }}
Còn lại
{{ pjMoney(pjContractorCost.plan - pjContractorCost.actual) }}
STT Nhà thầuLoại Gói việc / Phạm viLiên hệ Giá trị HĐTrạng thái
Chưa có nhà thầu. Bấm Thêm nhà thầu.
Công việc chưa có ngày bắt đầu/kết thúc để vẽ tiến độ.
{{ pjGantt.from }}{{ pjGantt.to }}
{{ m.label }}
{{ r.type==='phase'? r.progress+'%' : (r.type==='task'? r.progress+'%':'') }}
Giai đoạn Công việc / % hoàn thành Mốc (xanh=đạt · cam=sẵn sàng · xám=đang chờ) Việc thuộc mốc Hôm nay Nét đứt = phụ thuộc
Tải công việc dự án theo người (số việc đang mở — hệ không theo giờ công). >8 = quá tải.
{{ r.user }}
{{ r.open }} mở / {{ r.total }} · {{ r.projects }} dự án
Chưa có công việc dự án nào được giao.

Mẫu dự án

Tạo dự án nhanh từ khuôn có sẵn (giai đoạn/mốc/công việc theo ngày tương đối).
{{ pjTplSel.length }} mẫu đã chọn
{{ tpl.Name }}
{{ tpl.Description || 'Không có mô tả' }}
Chưa có mẫu. Mở một dự án rồi bấm "Lưu … thành mẫu".
{{ pjFieldSel.length }} trường đã chọn

Trường của DỰ ÁN

Trường tùy chỉnh (ngoài mặc định) hiện trong form tạo/sửa dự án. Xóa không mất dữ liệu đã nhập.
STTTên trườngKiểuLựa chọn
{{ i+1 }} {{ f.Label }} {{ pjFieldTypeLabel(f.Type) }} {{ f.Options || '—' }}
Chưa có trường tùy chỉnh. Bấm Thêm trường.

Trường của CÔNG VIỆC (chuẩn quản lý dự án)

Hiện trong form chi tiết công việc dự án. Đã seed sẵn mẫu chuẩn PM. Không đụng công việc ở CVSV/CRM.
STTTên trườngKiểuLựa chọn
{{ i+1 }} {{ f.Label }} {{ pjFieldTypeLabel(f.Type) }} {{ f.Options || '—' }}
Chưa có trường công việc.

Trường của HẠNG MỤC NHÀ THẦU (tùy biến)

Thêm cột riêng cho từng hạng mục hợp đồng (vd: khối lượng, đơn giá, đơn vị tính, đội thi công…). Khung cứng (nội dung, giá trị, thời gian, liên kết) đã có sẵn.
STTTên trườngKiểuLựa chọn
{{ i+1 }} {{ f.Label }} {{ pjFieldTypeLabel(f.Type) }} {{ f.Options || '—' }}
Chưa có trường tùy biến. Khung sẵn có đã đủ dùng cơ bản.
Đang tính toán chỉ số…
Không tải được dữ liệu.

Bảng P&L dự án

PM tự nhập Kế hoạch/Thực tế (độc lập P&L công ty). Lãi gộp = Doanh thu − Chi phí trực tiếp; Lãi ròng trừ thêm chi phí gián tiếp.
Doanh thu (KH)
{{ pjMoney(pjPnlView.revenue.plan) }}
Thực tế: {{ pjMoney(pjPnlView.revenue.act) }}
Tổng chi phí (KH)
{{ pjMoney(pjPnlView.totalCostPlan) }}
Thực tế: {{ pjMoney(pjPnlView.totalCostAct) }}
Lãi gộp (KH)
{{ pjMoney(pjPnlView.gross.plan) }}
Biên {{ pjPnlView.gross.mp }}% · TT {{ pjPnlView.gross.ma }}%
Lãi ròng (KH)
{{ pjMoney(pjPnlView.net.plan) }}
Biên {{ pjPnlView.net.mp }}% · TT {{ pjPnlView.net.ma }}%
Chi phí thầu phụ (tự tổng hợp) Kế hoạch: {{ pjMoney(pjContractorCost.plan) }} Thực chi (đã nghiệm thu): {{ pjMoney(pjContractorCost.actual) }} Còn lại: {{ pjMoney(pjContractorCost.plan - pjContractorCost.actual) }} Nguồn: tab Nhà thầu → hạng mục hợp đồng. Có thể nhập tay chi phí thầu thành 1 nhóm P&L nếu muốn tách riêng.
STT Khoản mục Kế hoạch Thực tế Chênh lệch % TH
LÃI GỘP (DT − CP trực tiếp){{ pjMoney(pjPnlView.gross.plan) }}{{ pjMoney(pjPnlView.gross.act) }}Biên KH {{ pjPnlView.gross.mp }}% · TT {{ pjPnlView.gross.ma }}%
LÃI RÒNG (sau CP gián tiếp){{ pjMoney(pjPnlView.net.plan) }}{{ pjMoney(pjPnlView.net.act) }}Biên KH {{ pjPnlView.net.mp }}% · TT {{ pjPnlView.net.ma }}%
Đơn vị: VND. Chênh lệch = Thực tế − Kế hoạch (chi phí vượt = đỏ; doanh thu vượt = xanh). % TH = Thực tế / Kế hoạch.

{{ pjTaskMode==='add' ? 'Thêm công việc' : 'Chi tiết công việc' }}

🛡️
Việc này là biện pháp phòng ngừa & hạn chế rủi ro: {{ pjTaskRiskName }}
{{ idx+1 }}.
{{ pjTaskProgDraft }}%
Công việc thuộc quy trình BPM — hoàn thành (100%) sẽ đẩy luồng sang bước tiếp.
Tệp đính kèm ({{ pjTaskFiles2.length }})
{{ a.FileName }} {{ pjFmtSize(a.Size) }}
Chưa có tệp. Tải lên hoặc gắn link Drive (tệp lớn).

{{ pjMsMode==='add' ? 'Thêm mốc' : 'Sửa mốc' }}

{{ pjMsBadge(pjMsRow).t }} ⚑ {{ pjGateBadge(pjMsRow.gate).t }}
Không bật: 1 người (Owner) xác nhận đạt là đủ.

{{ pjPhaseMode==='add' ? 'Thêm giai đoạn' : 'Sửa giai đoạn' }}

{{ idx+1 }}.

Sửa hàng loạt

Áp dụng cho {{ pjSel.length }} mục đã chọn. Chỉ trường được tích mới bị thay đổi.
{{ pjBulkProg }}%

{{ pjMemMode==='add' ? 'Thêm thành viên' : 'Sửa thành viên' }}

Quan sát: chỉ xem. Quản lý: được quản trị thành viên/xóa dự án.

{{ pjQuickRiskMode==='edit' ? 'Sửa rủi ro' : 'Thêm rủi ro' }}

Mức rủi ro: {{ pjQuickRiskLevel }} (tự tính từ Khả năng × Ảnh hưởng)
Bấm + Biện pháp ở dòng rủi ro (cây Tổng quan) để tạo việc phòng ngừa (là một công việc đầy đủ).

{{ pjPnlMode==='add' ? 'Thêm khoản mục P&L' : 'Sửa khoản mục P&L' }}

Chiều thời gian (tùy chọn — điền Kỳ để khoản mục vào đường cong dòng tiền & hòa vốn)
Chọn bất kỳ tháng nào (kể cả trước/sau lịch dự án: tạm ứng, bảo hành, giữ lại…).

{{ pjCtrMode==='add' ? 'Thêm nhà thầu' : 'Sửa nhà thầu' }}

Giá trị hợp đồng: {{ pjFmtMoney(pjCtrRow.ContractValue||0) }} ₫ — tự cộng từ {{ pjCtrItemsOf(pjCtrRow.ID).length }} hạng mục. Sửa giá trị & thời gian chi tiết ở từng hạng mục (bung dòng nhà thầu). Giá trị hợp đồng sẽ tự cộng từ các hạng mục bạn thêm sau khi tạo (mỗi hạng mục = 1 phần việc + giá trị + thời gian riêng). Khoán gọn 1 giá → thêm 1 hạng mục là đủ.

{{ pjItemMode==='add' ? 'Thêm hạng mục hợp đồng' : 'Sửa hạng mục' }}

{{ pjItemG('Progress')||0 }}%

{{ pjFieldMode==='add' ? 'Thêm trường' : 'Sửa trường' }} · {{ pjFieldScope==='task' ? 'Công việc' : (pjFieldScope==='contractorItem' ? 'Hạng mục nhà thầu' : 'Dự án') }}

Chọn từ danh sách nhân sự (username · tên · vị trí · phòng ban).
Trường sẽ hiện trong form {{ pjFieldScope==='task' ? 'chi tiết công việc dự án' : (pjFieldScope==='contractorItem' ? 'hạng mục hợp đồng nhà thầu' : 'tạo/sửa dự án') }}. Xóa trường không mất dữ liệu đã nhập.

Sửa mẫu dự án

Cấu trúc mẫu (giai đoạn/mốc/công việc) giữ nguyên; chỉ đổi tên & mô tả.

{{ pjForm.ProjectID ? 'Sửa dự án' : 'Tạo dự án mới' }}

{{ pjForm.ProjectID ? ('Mã: ' + (pjForm.Code || '—')) : 'Mã dự án sẽ được hệ thống tự tạo (DA-…)' }}
Hiện tại: {{ pjForm._curStatus || 'Nháp' }}
Hệ thống tự chuyển Nháp → Đang chạy → Hoàn thành theo tiến độ. Chọn tay chỉ để Tạm dừng/Hủy.
Trạng thái tự cập nhật theo tiến độ (bắt đầu ở "Nháp").
Đang mở
{{ myWorkStats.open }}
{{ myWorkStats.process }} quy trình · {{ myWorkStats.adhoc }} phát sinh
Trễ hạn
{{ myWorkStats.overdue }}
việc cần xử lý gấp
Đến hạn hôm nay
{{ myWorkStats.dueToday }}
{{ myWorkStats.dueSoon }} việc trong 7 ngày tới
Tiến độ TB
{{ myWorkStats.avgProg }}%
Đã hoàn thành
{{ myWorkStats.done }}
tỷ lệ {{ myWorkStats.completionRate }}% tổng việc
Đúng hạn
{{ myWorkStats.onTimeRate }}%
trong số việc đã xong

Phân bổ trạng thái

Chưa có dữ liệu.
{{ myWorkByStatus.total }}
việc
{{ s.label }} {{ s.count }} {{ s.pct }}%

Việc mở theo ưu tiên

{{ p.key }}
{{ p.count }}

Đến hạn 7 ngày tới

{{ b.count }}
{{ b.label }}
Đang tải công việc…
Không có việc nào khớp bộ lọc.
{{ t.Title || 'Không tiêu đề' }}
{{ t._checklist.filter(c=>c.completed).length }}/{{ t._checklist.length }} mục
{{ t.Description }}
{{ t._pri }}
Quy trình Phát sinh
{{ t._prog }}%
{{ myWorkStatusMeta(t._st).label }} {{ apFormatDate(t.DueDate) }}
{{ myWorkList.length }} việc · trang {{ myWorkPage }}/{{ myWorkTotalPages }}
Không tìm thấy quy trình phù hợp.
· Đã chọn {{ bpmRunSelectedCount }}
Chưa có luồng công việc nào.
Trang {{ bpmRunPage }}/{{ bpmRunTotalPages }} · {{ bpmFilteredInstances.length }} luồng
{{ bpmInstDetail.instance.Title || bpmInstDetail.instance.ProcessName }}
{{ bpmInstDetail.instance.ProcessName }} · {{ bpmInstStatusLabel(bpmInstDetail.instance.Status) }}
Sơ đồ quy trình đang chờ đã xong chưa tới
{{ (n.type==='start')?'▶':(n.type==='end')?'✓':((n.type==='gateway'?'◇ ':'')+(n.name.length>20?n.name.slice(0,19)+'…':n.name)) }}
Bước {{ card.idx }} ◇ CỔNG {{ card.name }} lần {{ card.attempt }}

{{ card.desc }}

{{ bpmStatusText(card.status) }}
{{ (card.assignee||'?').charAt(0) }}{{ card.assignee }} {{ apFormatDate(card.due) }} · quá hạn SLA {{ card.sla }}
{{ it.text }} cần {{ ({text:'chữ',number:'số',date:'ngày',link:'link',file:'tệp'})[it.capType] }}
↳ {{ it.value }}
{{ fd.label }} *
{{ bpmIsGatewayStep(card.id) ? 'Quyết định — chọn nhánh đi tiếp' : 'Hoàn thành bước — điền kết quả' }}

Cổng chưa nối tới bước nào.

{{ c.fileName }}
Trả về bước phía trước

Không có bước phía trước để trả về.

{{ bpmLogMeta(lg.Action).t }} — {{ bpmLogDetailMap[lg.LogID].stepName }} — {{ lg.Note }} {{ bpmFmtLogTimeFull(lg.Timestamp) }}
bởi {{ getUserName ? getUserName(lg.Actor) : lg.Actor }} · xem nội dung đã nhập
{{ it.text }}
↳ {{ it.value }}
{{ f.label }}: {{ f.value.fileName || 'tệp đính kèm' }} {{ f.value }} {{ bpmLogFieldDisplay(f) }}
Đang tải số liệu…
Chọn tháng
|
Tổng công việc
{{cvsvDbModel.total}}
{{cvsvDbModel.rest}} đang xử lý (đúng tiến độ)
Hoàn thành
{{cvsvDbModel.done}}
tỷ lệ {{cvsvDbModel.doneRate}}% tổng việc
Quá hạn
{{cvsvDbModel.overdue}}
tỷ lệ {{cvsvDbModel.overdueRate}}% ({{cvsvDbModel.overdueOpen}} chưa xong)
Đúng hạn
{{cvsvDbModel.onTimeRate}}%
{{cvsvDbModel.onTime}} / {{cvsvDbModel.total}} công việc
Tiến độ TB
{{cvsvDbModel.avgProgress}}%

Phân bổ trạng thái

Chưa có dữ liệu.
{{cvsvDbDonut.total}}
công việc
{{s.label}} {{s.count}} {{cvsvDbDonut.total?Math.round(s.count/cvsvDbDonut.total*100):0}}%

Hiệu suất theo phòng ban

Đúng hạn Xong trễ Quá hạn Còn lại
Chưa có dữ liệu phòng ban.
{{d.dept}} {{d.onTime + d.doneLate}}/{{d.total}} xong · {{d.doneRate}}%

Chi tiết theo nhân sự

Xếp theo khối lượng công việc — Năm {{apSelectedYear}}

# Nhân sự Phòng ban Tổng công việc Hoàn thành Đúng hạn Quá hạn Tỷ lệ đúng hạn Trung bình tiến độ
{{idx + 1}} {{s.name}} {{s.dept || ''}} {{s.total}} {{s.done}} {{s.onTime}} {{s.overdue}} {{s.onTimeRate}}%
{{s.avgProgress}}%
Chưa có dữ liệu hiệu suất

Cấu Hình Hệ Thống

1

Thông Tin Chung

2

Pipeline (V1)

Chưa có bước nào
2

Quản Lý Vị Trí

Quản lý và đồng bộ danh mục chức danh nhân sự

{{filteredPositionsList.length}}/{{positionsList.length}} vị trí
Bạn có thay đổi chưa lưu trên danh sách Vị Trí. Vui lòng bấm Lưu Cấu Hinh để áp dụng vào hệ thống.
STT Tên Vị Trí Nhân Sự Đang Giữ Trạng Thái Thao Tác
{{ idx + 1 }}
{{ pos }}
{{ getPositionUserCount(pos) }} nhân sự
Đang hoạt động Chưa sử dụng
{{ positionsList.length === 0 ? 'Chưa có vị trí nào được khai báo' : 'Không tìm thấy vị trí phù hợp' }}
6

Dọn Dẹp Lịch Sử Hoạt Động

Xóa activities cũ để giảm dung lượng Google Sheet

Hành động này không thể hoàn tác. Activities bị xóa sẽ không khôi phục được.

Dung Lượng Lưu Trữ Tệp Đính Kèm

Giới hạn để tệp đính kèm không làm đầy ổ đĩa máy chủ (VPS)

Đang tải...

Quản lý tệp đính kèm

Toàn bộ tệp lưu trên máy chủ theo từng phân hệ. Tải về, xóa, hoặc chuyển sang link Google Drive để giải phóng ổ đĩa.

{{ stgFilteredFiles.length }} mục · {{ stgFmtBytes(stgFilesTotalBytes) }} trên ổ đĩa
Phân hệ Thuộc về (dự án/việc/bước) Tên tệp Người tải Ngày Kích thước Thao tác
{{ f.module }} {{ f.entity }} {{ f.fileName }} link {{ f.uploadedBy }} {{ stgFmtDate(f.createdAt) }} {{ f.hasFile ? stgFmtBytes(f.size) : '— chỉ link —' }}
Không có tệp nào.
Tổng kho: {{ stgFmtBytes(stgStats.usedBytes) }} / {{ stgStats.maxTotalBytes ? stgFmtBytes(stgStats.maxTotalBytes) : 'không giới hạn' }} · Ổ đĩa còn {{ stgFmtBytes(stgStats.disk.freeBytes) }}
Trang {{ stgPage }} / {{ stgTotalPages }}

Gắn link Google Drive

Dán link cho tệp {{ stgLinkFor.fileName }}. Tệp gốc trên máy chủ vẫn được giữ nguyên — muốn giải phóng ổ đĩa, sau đó bấm nút "Xóa tệp máy chủ (giữ link)".

Nhật Ký Hoạt Động Hệ Thống

Theo dõi, kiểm tra lịch sử thao tác của các tài khoản và phân hệ

Hiển thị {{ filteredActivityLogs.length }} / {{ activityLogs ? activityLogs.length : 0 }} hoạt động

Đang tải nhật ký hoạt động...

Không tìm thấy nhật ký hoạt động nào

Vui lòng thay đổi từ khóa hoặc bộ lọc để hiển thị nhiều hơn.

STT Thời gian Tài khoản Phân hệ Hành động Chi tiết nội dung
{{ idx + 1 }} {{ log.Timestamp || log.CreatedTime }} {{ log.User || log.user || log.username || log.CreatedBy || log.createdBy || 'System' }} {{ log.RefID }} {{ log.Type }} {{ log.Content }}

Trung Tâm A.I

Quản lý provider & model, chi phí/ngân sách, phân quyền và cấu hình trợ lý A.I

Thống kê sử dụng & chi phí
Đang tải…
{{ aiStatsError }}
{{ aiStats.summary.requests }}
Lượt hỏi
{{ aiFmtTok(aiStats.summary.tokens) }}
Token
{{ aiFmtCost(aiStats.summary.cost) }}
Chi phí
Lượt hỏi theo ngày
{{ aiStats.byDay[0].day }}{{ aiStats.byDay[aiStats.byDay.length-1].day }}
Theo model
{{ m.model }} {{ m.requests }} lượt {{ aiFmtCost(m.cost) }}
Chưa có dữ liệu.
Theo người dùng
{{ u.username }} {{ u.requests }} lượt {{ aiFmtCost(u.cost) }}
Chưa có dữ liệu.

Đọc từ nhật ký thực (mỗi lượt chat ghi 1 dòng: token + chi phí theo model thực dùng). Model :free có chi phí $0.

Ngân sách chi phí
Đang tải…
Chưa đặt ngân sách nào — chi phí không bị giới hạn. Bấm “Thêm hạn mức” để kiểm soát.
{{ aiBudgetLevelLabel(b.Level) }} · {{ b.Ref }} {{ b.SoftHard === 'hard' ? 'Chặn khi vượt' : 'Chỉ cảnh báo' }} tự hạ model ${{ b.spent.toFixed(4) }} / ${{ b.CapUsd.toFixed(2) }} ({{ b.pct }}%)

Hạn mức tính theo tháng dương lịch, reset đầu tháng. Áp đồng thời 3 tầng — chặt nhất thắng. Vượt hạn mức Chặn → không gọi được A.I; bật Tự hạ model → tự chuyển model miễn phí thay vì chặn.

Cấu hình trợ lý
Phạm vi trả lời
Chế độ suy nghĩ (tiết kiệm chi phí)

Chỉ tác động đến model có khả năng suy nghĩ (Gemini 2.5/3.x…). Token suy nghĩ bị tính phí như token trả lời — tắt sẽ giảm đáng kể chi phí cho câu hỏi đơn giản.

Các quy tắc bảo mật luôn được áp dụng tự động, không tắt được: Trợ lý A.I chỉ tư vấn cách dùng (không đọc dữ liệu app, không thao tác trên app), chỉ trả lời cách-dùng dựa trên Cẩm nang (không bịa), và coi nội dung người dùng gửi là dữ-liệu-không-phải-lệnh (chống chèn lệnh).
Model mặc định & theo người dùng

Chọn model dùng mặc định cho mọi lượt chat, và ghi đè riêng cho từng người dùng (VD: cấp quản lý dùng model mạnh, nhân viên dùng model miễn phí). Chỉ chọn được trong danh sách model của nhà cung cấp đang bật — kiểm soát chi phí. Người dùng vẫn có thể tự chọn model khác trong bộ đã duyệt ngay trong ô chat.

Chưa có nhà cung cấp đang bật hoặc chưa chọn model. Thêm nhà cung cấp & chọn model ở dưới trước.
Cẩm nang A.I — tài liệu hướng dẫn & nghiệp vụ
Nhập tài liệu từ file
Đang đọc & cắt tài liệu…

Tệp sẽ được cắt theo đề mục thành nhiều tài liệu nhỏ — vì A.I nạp nguyên văn tài liệu vào mỗi câu hỏi, để cả tệp lớn làm 1 tài liệu sẽ tốn token gấp nhiều lần và trả lời kém chính xác. Hỗ trợ Word (.docx); bản .doc cũ hãy lưu lại thành .docx.

Trợ lý A.I chỉ tư vấn cách dùng/nghiệp vụ theo tài liệu ở đây (truy hồi tự động theo câu hỏi, tìm không dấu vẫn ra). Chưa có tài liệu → A.I sẽ nói "chưa có thông tin" thay vì bịa. Viết mỗi tài liệu 1 chủ đề gọn, gắn đúng phân hệ để truy hồi chính xác.

Nội dung (cách dùng, ý nghĩa chỉ số, quy trình…) — hỗ trợ Markdown, ảnh & video
Mẹo: bôi đen chữ rồi bấm nút định dạng. Ảnh/video sẽ hiện trong câu trả lời của trợ lý.
Xem trước
Đang tải…
Chưa có tài liệu nào. Bấm "Thêm tài liệu" để dạy A.I hiểu cách dùng HCWPlan.
{{ sec.name }}
{{ d.Title }} Bật Tắt
{{ d.Content }}
Câu hỏi người dùng hỏi mà CHƯA CÓ tài liệu

Đây là những câu trợ lý không tìm thấy tài liệu để trả lời — gợi ý bạn nên viết doc gì (ưu tiên câu hỏi nhiều lần). Bấm Tạo tài liệu để soạn nhanh.

Đang tải…
Chưa có câu hỏi nào bị thiếu tài liệu. 👍
×{{ g.Count }} {{ g.QuerySample }} {{ aiKnowModuleName(g.Module) }}
Phản hồi câu trả lời — phân hệ A.I đang yếu

Người dùng bấm 👍/👎 dưới mỗi câu trả lời. Nhiều 👎 ở phân hệ nào ⇒ nên dạy thêm Cẩm nang cho phân hệ đó.

Đang tải…
Nhật ký A.I
· Đã chọn {{ aiLogSelCount }} Tích chọn để xóa hàng loạt
Đang tải…
{{ aiLogSub==='conv' ? 'Chưa có hội thoại nào' : 'Chưa có hành động nào' }} khớp bộ lọc.
{{ grp.name }} ({{ grp.items.length }})
{{ c.ModuleName }} {{ c.msgCount }} tin
{{ c.Username }}
{{ m.role==='user' ? 'Người dùng' : m.role==='assistant' ? 'A.I' : m.role }}
🔧 gọi công cụ: {{ m.toolCalls.map(function(t){return t.name}).join(', ') }}
Đang tải tin nhắn…
{{ aiLogStatusText(a.Status) }} {{ aiLogAuditLabel(a) }} {{ a.Username }}

Nhóm theo module · người hỏi · phòng ban{{ aiLogSub==='action' ? ' · trạng thái' : '' }}. Tích chọn nhiều dòng rồi bấm Xóa. Hành động = đề xuất ghi (proposed→executed/rejected).

Phân quyền A.I theo phân hệ × vai trò
Không — A.I không dùng Chat — A.I tư vấn/đọc (⊆ quyền Xem) Thực thi — A.I đề xuất ghi (⊆ quyền Ghi, luôn duyệt trước) — Vai trò chưa có quyền gốc

Bấm vào ô để đổi mức (Không → Chat → Thực thi). Quyền A.I ⊆ quyền gốc của vai trò: chỉ mở được Chat khi vai trò có quyền Xem, chỉ mở được Thực thi khi có quyền Ghi trên phân hệ đó — ô tự khoá nếu vượt.

Chưa tải được danh sách vai trò. Bấm "Tải lại".
Phân hệ {{ role.RoleName }}
{{ m.name }} live lộ trình
Đang hoạt động: Công việc/Giao việc (Chat + Thực thi), KPI Nhân Sự (Chat). Các phân hệ lộ trình sẽ tự có hiệu lực khi bổ sung công cụ A.I ở các Phase nghiệp vụ tiếp theo. Quyền lưu tại đây là cùng một dữ liệu với màn "Vai trò" (module ai_assistant) — chỉnh nơi nào cũng đồng bộ.
{{ aiProvForm.ProviderID ? 'Sửa nhà cung cấp' : 'Nhà cung cấp mới' }}
Base URL (đã tự điền theo loại — hầu như không cần đổi)

Đây là địa chỉ máy chủ API của nhà cung cấp — chọn Loại ở trên là tự điền đúng. Chỉ đổi nếu bạn dùng máy chủ riêng/proxy.

Trạng thái tài khoản
Đang kiểm tra…
{{ aiKeyStatusError }}
{{ aiKeyStatus.isFreeTier ? 'Free tier' : 'Tài khoản trả phí' }} Đã dùng: ${{ aiKeyStatus.usageDaily.toFixed(4) }} hôm nay · ${{ aiKeyStatus.usageMonthly.toFixed(4) }} tháng này · Credit còn: ${{ (aiKeyStatus.limitRemaining || 0).toFixed(2) }}

Free tier: giới hạn theo tài khoản/ngày dùng chung mọi model :free (~50 lượt/ngày, ~1000 nếu ví từng nạp ≥$10) — không theo từng model. Hết lượt → lỗi tạm thời, không tính tiền.

Model — chọn & sắp thứ tự ưu tiên
{{ aiStaleModels.length }} model đang chọn không có trong danh mục hiện tại của nhà cung cấp ({{ aiStaleModels.join(', ') }}) — có thể đã đổi tên/ngừng. Hãy bỏ và chọn lại từ danh sách bên dưới, nếu không A.I sẽ báo lỗi khi gọi.
{{ mi === 0 ? '★ Mặc định' : '#' + (mi+1) }} {{ mid }} ⚠ lỗi thời 🛠 {{ aiModelLabel(mid).agentic }} FREE ${{ aiModelLabel(mid).inUsd }}/{{ aiModelLabel(mid).outUsd }} no-tool

Chưa chọn model nào — chọn từ danh sách bên dưới.

Đang tải danh sách model…
{{ aiModelsError }}
Không có model khớp bộ lọc.

Danh sách + điểm lấy trực tiếp từ nhà cung cấp (tự cập nhật). FREE = miễn phí · $vào/$ra/1 triệu token · IQ = trí tuệ tổng quát · 🛠 = điểm dùng tool (giao việc/đọc dữ liệu — càng cao càng tốt cho trợ lý) · = hỗ trợ tool. Điểm từ OpenRouter (artificial_analysis).

{{ aiProvTestResult.message }} {{ aiProvTestResult.hint }}
Nhà cung cấp đã kết nối ({{ aiProviders.length }})
Đang tải…
{{ aiProvidersError }}
Chưa có nhà cung cấp nào. Bấm “Thêm nhà cung cấp” để cắm key OpenRouter, OpenAI, Anthropic hoặc Gemini.
{{ p.Name || aiProvMeta(p.Type).label }} Đang bật Tắt
{{ aiProvMeta(p.Type).label }}
{{ p.KeyHint }} Chưa có key
{{ aiModelsText(p.Models) || '—' }}
{{ aiProvTestResult.message }} {{ aiProvTestResult.hint }}

Quản Lý Quyền Hệ Thống

{{ role.RoleName }}
{{ role.userCount || 0 }}
{{ role.Description || 'Chưa có mô tả' }}
Chưa có vai trò nào

Chọn một vai trò để xem và chỉnh sửa quyền

Hoặc tạo vai trò mới bằng nút phía trên

{{ permSelectedRole.RoleName }}

{{permSelectedRole.Description || 'Chưa có mô tả'}}

Module
Phạm vi
Xem
Thêm
Sửa
Xóa

{{ roleFormData.RoleID ? 'Sửa Vai Trò' : 'Tạo Vai Trò Mới' }}

Tên vai trò mặc định không thể thay đổi

Lịch Sử Thao Tác

Theo dõi hoạt động Thêm/Sửa/Xóa

Thời gian User Module Hành động
{{log.Timestamp}}
{{log.User}}
{{log.Module}} {{log.Content}}
Chưa có lịch sử giao dịch nào.

Cấu hình trường tùy chỉnh

Thêm/sửa/xóa các trường nhập liệu cho Khách hàng, Cơ hội và Nhà cung cấp

Thêm trường mới

Cột dữ liệu được tạo tự động trong CSDL khi bản ghi đầu tiên chứa trường này được lưu.

Trường của {{(CRM_FIELD_ENTITIES.find(e=>e.key===crmCfgEntity)||{}).label}}

Chưa có trường tùy chỉnh nào. Thêm ở khung bên trái.
{{crmTypeLabel(f.type)}}
Lựa chọn:

Sửa tên / bắt buộc / lựa chọn rồi bấm Lưu thay đổi. Đổi loại dữ liệu: xóa trường và tạo lại.

Giai đoạn Pipeline (cột trên Quy trình bán hàng)

Chưa có giai đoạn nào.
{{si+1}}

Loại: Đang mở = cột thường; Thắng (Won) = tính vào doanh thu Dashboard; Thua (Lost) = deal thất bại. Cần ít nhất 1 giai đoạn "Thắng". Kéo thứ tự bằng nút ▲▼.

Sales Dashboard

Phân tích hiệu suất bán hàng

Lọc:
{{k.label}}
{{k.value}}

Doanh thu theo tháng (Won)

Số Deal theo giai đoạn

Top nhân viên (Doanh thu Won)

Xu hướng Deal tạo mới vs Won

Chưa có Cơ hội (Deal) nào trong bộ lọc — biểu đồ sẽ hiện khi có dữ liệu.

Quản Trị Dòng Tiền

Ghi nhận mọi giao dịch thu/chi của doanh nghiệp

{{ledgerFilters.category || 'Tất cả danh mục'}}
  • ■ Tất cả danh mục
  • {{c.label}}
{{ledgerFilters.group || 'Tất cả nhóm'}}
  • ■ Tất cả nhóm
  • {{g.name}}
Thêm Giao Dịch Mới {{ledgerBulkRows[0].Type==='income' ? '↑ Thu' : '↓ Chi'}}

Ngày giờ sẽ tự động lấy theo thời điểm lưu

Tổng Dòng Thu
{{formatNumber(ledgerTotals.income)}}
Tổng Dòng Chi
{{formatNumber(ledgerTotals.expense)}}
Dòng Tiền Thuần
{{ledgerTotals.net >= 0 ? '+' : ''}}{{formatNumber(ledgerTotals.net)}}
Ngày giờ
Người tạo
Loại
Nhóm
Danh mục
Quỹ
Khách Hàng
Nhà Cung Cấp
Hợp Đồng
Hóa Đơn
Số tiền
Mô tả
{{cf.label}}

Chưa có giao dịch nào

Bấm "Thêm giao dịch" để ghi nhận giao dịch đầu tiên

Hiển thị {{(ledgerPage - 1) * ledgerPageSize + 1}}–{{Math.min(ledgerPage * ledgerPageSize, filteredLedger.length)}} / {{filteredLedger.length}} giao dịch (Đã chọn: {{selectedLedger.length}})
{{ledgerPage}} / {{ledgerTotalPages}}

Tổng Dòng Thu & Tổng Dòng Chi Theo Ngày

Không có dữ liệu trong khoảng thời gian này

Dòng Thu, Dòng Chi & Dòng Tiền Thuần Theo Tháng

Không có dữ liệu

Cơ Cấu Dòng Thu

Không có dữ liệu thu

Cơ Cấu Dòng Chi

Không có dữ liệu chi

Top 10 Khách Hàng (Dòng Thu Lớn Nhất)

Không có dữ liệu

Top 10 Nhà Cung Cấp (Dòng Chi Lớn Nhất)

Không có dữ liệu

Bảng Phân Tích Dòng Tiền Theo Hạng Mục

# Loại / Tên Hạng Mục T{{parseInt(m.slice(5),10)}}-{{m.slice(0,4)}} Grand Total
- DÒNG THU {{formatCurrency(ldPivotData.revTotal[m]) || '-'}} {{formatCurrency(ldPivotData.revTotal.Total) || '-'}}
{{idx+1}} {{r.cat}} {{formatCurrency(r[m]) || ''}} {{formatCurrency(r.Total) || ''}}
- DÒNG CHI {{formatCurrency(ldPivotData.expTotal[m]) || '-'}} {{formatCurrency(ldPivotData.expTotal.Total) || '-'}}
{{idx+1}} {{r.cat}} {{formatCurrency(r[m]) || ''}} {{formatCurrency(r.Total) || ''}}
DÒNG TIỀN THUẦN {{ldPivotData.grandTotal[m] >= 0 ? '+' : ''}}{{formatCurrency(ldPivotData.grandTotal[m]) || '0'}} {{ldPivotData.grandTotal.Total >= 0 ? '+' : ''}}{{formatCurrency(ldPivotData.grandTotal.Total) || '0'}}

Không có dữ liệu giao dịch trong khoảng thời gian này

Số Dư Quỹ Hiện Tại

Tổng Số Dư Cuối Kỳ

{{formatCurrency(ldFundBalances.reduce((sum, f) => sum + f.EndingBalance, 0))}}
Số dư quỹ hiện tại

Chi Tiết Số Dư

# Tên quỹ Số dư cuối kỳ (hiện tại)
{{i + 1}} {{f.FundName}}
{{formatCurrency(f.EndingBalance)}}
Chưa có dữ liệu quỹ

Cơ Cấu Số Dư Các Quỹ

Không có dữ liệu số dư

Lịch Sử Số Tiền Giao Dịch Vào / Ra ({{(ldFundBalances.find(f => f.FundID === ldSelectedFund) || {}).FundName}})

Đang xử lý chuyển quỹ...

Chuyển Quỹ Nội Bộ

Tự động theo giờ hệ thống

Đang khóa tháng...

Khóa Sổ Thu Chi - Năm {{ledgerFilters.year}}

Chọn tháng cần khóa để bảo vệ dữ liệu Sổ Thu Chi

Đang khóa tháng...

Khóa Công Nợ - Năm {{debtFilters.year}}

Chọn tháng cần khóa để bảo vệ dữ liệu Công Nợ

Ghi nhận thanh toán vẫn hoạt động bình thường khi tháng bị khóa

Công Nợ

{{(customers.find(c => c.CustomerID === debtFilters.customerId) || {}).Name || 'Tất cả KH'}}
  • Tất cả KH
  • {{c.Name}}
{{(suppliers.find(s => s.SupplierID === debtFilters.supplierId) || {}).Name || 'Tất cả NCC'}}
  • Tất cả NCC
  • {{s.Name}}
Thêm Công Nợ Mới {{debtNewRow.Type==='receivable' ? 'Phải thu' : 'Phải trả'}}
Còn lại phải trả: {{formatCurrency((debtNewRow.TotalAmount||0)-(debtNewRow.PaidUpfront||0))}}
Tổng Phải Thu
{{formatCurrency(debtTotals.receivable)}}
Tổng Phải Trả
{{formatCurrency(debtTotals.payable)}}
Công Nợ Ròng
{{formatCurrency(debtTotals.net)}}
TỔNG PHẢI THU
{{formatCurrency(dbDashboardMetrics.totalRec)}} đ
Quá hạn: {{formatCurrency(dbDashboardMetrics.totalRecOverdue)}}đ {{dbDashboardMetrics.totalRec === 0 ? '0' : (dbDashboardMetrics.totalRecOverdue / dbDashboardMetrics.totalRec * 100).toFixed(1)}}%
TỔNG PHẢI TRẢ
{{formatCurrency(dbDashboardMetrics.totalPay)}} đ
Quá hạn: {{formatCurrency(dbDashboardMetrics.totalPayOverdue)}}đ {{dbDashboardMetrics.totalPay === 0 ? '0' : (dbDashboardMetrics.totalPayOverdue / dbDashboardMetrics.totalPay * 100).toFixed(1)}}%
CÔNG NỢ RÒNG
{{formatCurrency(dbDashboardMetrics.totalRec - dbDashboardMetrics.totalPay)}} đ
Chênh lệch Phải Thu và Phải Trả
Kỳ phân tích: {{dbDashboardMetrics.periodLabel}} Số liệu tính theo ngày phát sinh hợp đồng
Đầu kỳ · Phải Thu
{{formatCurrency(dbDashboardMetrics.openRecOpening)}}
Dư nợ trước kỳ
Phát sinh · Phải Thu
{{formatCurrency(dbDashboardMetrics.periodRecNew)}}
HĐ mới trong kỳ
Đã thu · Trong kỳ
{{formatCurrency(dbDashboardMetrics.periodRecPaid)}}
Thanh toán trong kỳ
Cuối kỳ · Phải Thu
{{formatCurrency(dbDashboardMetrics.closingRec)}}
= Đầu kỳ + Phát sinh − Đã thu
Đầu kỳ · Phải Trả
{{formatCurrency(dbDashboardMetrics.openPayOpening)}}
Dư nợ trước kỳ
Phát sinh · Phải Trả
{{formatCurrency(dbDashboardMetrics.periodPayNew)}}
HĐ mới trong kỳ
Đã trả · Trong kỳ
{{formatCurrency(dbDashboardMetrics.periodPayPaid)}}
Thanh toán trong kỳ
Cuối kỳ · Phải Trả
{{formatCurrency(dbDashboardMetrics.closingPay)}}
= Đầu kỳ + Phát sinh − Đã trả
Công Nợ Ròng Cuối Kỳ
{{formatCurrency(dbDashboardMetrics.closingRec - dbDashboardMetrics.closingPay)}}
Phải thu cuối kỳ: {{ formatCurrency(dbDashboardMetrics.closingRec) }}
Phải trả cuối kỳ: {{ formatCurrency(dbDashboardMetrics.closingPay) }}

Dư Nợ Phải Thu Theo Khách Hàng {{dbDashboardMetrics.periodLabel}}

Khách hàng Dư nợ hiện tại Sau điều chỉnh Quá hạn Tỷ lệ quá hạn Dư nợ đầu kỳ Phát sinh trong kỳ Sau điều chỉnh Đã thu trong kỳ Dư nợ cuối kỳ Quá hạn (hiện tại) Tỷ lệ quá hạn / dư nợ cuối kỳ Tỷ trọng
Không có dữ liệu phải thu
{{c.CustomerID==='khach_le'?'Khách lẻ':getDebtCustomerName(c.CustomerID)}} {{ formatCurrency(c.TotalRemaining) }} {{c.Overdue > 0 ? formatCurrency(c.Overdue) : '-'}} {{c.TotalRemaining > 0 ? (c.Overdue / c.TotalRemaining * 100).toFixed(1) + '%' : '0%'}} {{c.OpeningBalance > 0 ? formatCurrency(c.OpeningBalance) : '-'}} {{c.PeriodNew > 0 ? formatCurrency(c.PeriodNew) : '-'}} {{c.PeriodPaid > 0 ? formatCurrency(c.PeriodPaid) : '-'}} {{ formatCurrency(c.ClosingBalance) }} {{c.Overdue > 0 ? formatCurrency(c.Overdue) : '-'}} {{c.ClosingBalance > 0 ? (c.Overdue / c.ClosingBalance * 100).toFixed(1) + '%' : '0%'}}
{{((dbDashboardMetrics.hasTimePeriod ? c.ClosingBalance : c.TotalRemaining) / dbDashboardMetrics.receivables.reduce((a,x)=>a+(dbDashboardMetrics.hasTimePeriod?x.ClosingBalance:x.TotalRemaining),0) * 100).toFixed(1)}}%

Dư Nợ Phải Trả Theo Nhà Cung Cấp {{dbDashboardMetrics.periodLabel}}

Nhà cung cấp Dư nợ hiện tại Sau điều chỉnh Quá hạn Tỷ lệ quá hạn Dư nợ đầu kỳ Phát sinh trong kỳ Sau điều chỉnh Đã trả trong kỳ Dư nợ cuối kỳ Quá hạn (hiện tại) Tỷ lệ quá hạn / dư nợ cuối kỳ Tỷ trọng
Không có dữ liệu phải trả
{{c.SupplierID==='ncc_le'?'Nhà cung cấp lẻ':getDebtSupplierName(c.SupplierID)}} {{formatCurrency(c.TotalRemaining)}} {{c.Overdue > 0 ? formatCurrency(c.Overdue) : '-'}} {{c.TotalRemaining > 0 ? (c.Overdue / c.TotalRemaining * 100).toFixed(1) + '%' : '0%'}} {{c.OpeningBalance > 0 ? formatCurrency(c.OpeningBalance) : '-'}} {{c.PeriodNew > 0 ? formatCurrency(c.PeriodNew) : '-'}} {{c.PeriodPaid > 0 ? formatCurrency(c.PeriodPaid) : '-'}} {{formatCurrency(c.ClosingBalance)}} {{c.Overdue > 0 ? formatCurrency(c.Overdue) : '-'}} {{c.ClosingBalance > 0 ? (c.Overdue / c.ClosingBalance * 100).toFixed(1) + '%' : '0%'}}
{{((dbDashboardMetrics.hasTimePeriod ? c.ClosingBalance : c.TotalRemaining) / dbDashboardMetrics.payables.reduce((a,x)=>a+(dbDashboardMetrics.hasTimePeriod?x.ClosingBalance:x.TotalRemaining),0) * 100).toFixed(1)}}%

Cơ cấu dư nợ Phải Thu (Top 10)

⚠ Cơ cấu theo dư nợ cuối kỳ

Cơ cấu dư nợ Phải Trả (Top 10)

⚠ Cơ cấu theo dư nợ cuối kỳ

Phải Thu Quá Hạn Chi Tiết Thời điểm hiện tại

Khách hàng Số tiền Quá hạn
✨ Không có khoản quá hạn
{{r.CustomerID==='khach_le'?'Khách lẻ':getDebtCustomerName(r.CustomerID)}}
HĐ: {{ r.ContractNo }}
{{ formatCurrency(r.Amount) }} đ {{r.Days}} ngày

Phải Trả Quá Hạn Chi Tiết Thời điểm hiện tại

Nhà cung cấp Số tiền Quá hạn
✨ Không có khoản quá hạn
{{r.SupplierID==='ncc_le'?'Nhà cung cấp lẻ':getDebtSupplierName(r.SupplierID)}}
HĐ: {{ r.ContractNo }}
{{ formatCurrency(r.Amount) }} đ {{r.Days}} ngày

Cấn trừ Giao dịch cho: {{(debtLinkModal.debt || {}).ContractNo || '-'}}

Chọn các Giao dịch có thể cấn trừ (chưa gắn Mã hợp đồng) bên dưới để tự động hạch toán giảm nợ.

Ngày Loại Số tiền Chi tiết
{{formatDateDisplay(tx.Date)}} {{tx.Type === 'income' ? 'Thu' : 'Chi'}} {{formatCurrency(tx.Amount)}} {{tx.Description}}
Không có giao dịch nào có thể cấn trừ cho Khách hàng / Nhà cung cấp này.
Đã chọn: {{debtLinkModal.selectedIds.length}} giao dịch

Điều chỉnh giá trị HĐ: {{(debtAdjustModal.debt || {}).ContractNo || '-'}}

Giao dịch này sẽ được ghi nhận vào Lịch sử điều chỉnh nhưng KHÔNG làm thay đổi Sổ Quỹ (Ledger).
Danh mục Tháng {{m}} Tổng năm
DỰ BÁO DÒNG THU
● Công nợ
TỔNG DÒNG THU DỰ KIẾN
{{formatCurrency(cashplanSummary.revenue.plan['m'+m] || 0)}}
TT: {{formatCompact(cashplanSummary.revenue.actual['m'+m])}}
{{formatCurrency(cashplanSummary.revenue.planTotal || 0)}}
TT: {{formatCompact(cashplanSummary.revenue.actualTotal)}}
{{Math.round(cashplanSummary.revenue.actualTotal/cashplanSummary.revenue.planTotal*100)}}%
DỰ BÁO DÒNG CHI
● Công nợ
TỔNG DÒNG CHI DỰ KIẾN
{{formatCurrency(cashplanSummary.expense.plan['m'+m] || 0)}}
TT: {{formatCompact(cashplanSummary.expense.actual['m'+m])}}
{{formatCurrency(cashplanSummary.expense.planTotal || 0)}}
TT: {{formatCompact(cashplanSummary.expense.actualTotal)}}
{{Math.round(cashplanSummary.expense.actualTotal/cashplanSummary.expense.planTotal*100)}}%
DÒNG TIỀN THUẦN DỰ KIẾN
{{formatCurrency(cashplanSummary.net.plan['m'+m] || 0)}}
{{formatCurrency(cashplanSummary.net.actual['m'+m] || 0)}}
{{formatCurrency(cashplanSummary.net.planTotal || 0)}}
TT: {{formatCompact(cashplanSummary.net.actualTotal || 0)}}
Cân đối Kế Hoạch (T1-T{{cashplanRebalanceInfo.revenue.currentM}} so với thực tế)
THU
Danh mục KH (T1-T{{cashplanRebalanceInfo.revenue.currentM}}) Thực tế Chênh lệch Đề xuất/tháng
CHI
Danh mục KH (T1-T{{cashplanRebalanceInfo.expense.currentM}}) Thực tế Chênh lệch Đề xuất/tháng
TT / Dự Báo Thu (Tháng {{cashplanDashMonth}})(Luỹ kế năm)
{{formatCurrency(cpDashData.revenue.plan)}}
Thực đạt: {{formatCompact(cpDashData.revenue.actual)}} {{cpDashData.revenue.pct}}%
TT / Kế Hoạch Chi (Tháng {{cashplanDashMonth}})(Luỹ kế năm)
{{formatCurrency(cpDashData.expense.plan)}}
Thực đạt: {{formatCompact(cpDashData.expense.actual)}} {{cpDashData.expense.pct}}%
Dòng Tiền Thuần (Tháng {{cashplanDashMonth}})(Luỹ kế năm)
+{{formatCurrency(cpDashData.net.plan)}}
Thực đạt: {{formatCompact(cpDashData.net.actual)}} {{ Math.round((cpDashData.net.actual / cpDashData.net.plan) * 100) }}%

Dự báo Thu (12 Tháng)

Tỷ trọng Thu T{{cashplanDashMonth}}Lũy kế năm

Tổng Thu {{formatCompact(cpDashData.revenue.actual)}} {{formatCompact(cpDashData.revenue.plan)}}

Dự báo Chi (12 Tháng)

Tỷ trọng Chi T{{cashplanDashMonth}}Lũy kế năm

Tổng Chi {{formatCompact(cpDashData.expense.actual)}} {{formatCompact(cpDashData.expense.plan)}}

Tỷ lệ hoàn thành dự báo thu

Tỷ lệ chi theo kế hoạch chi

Tổng Hợp Dòng Tiền (12 Tháng)

Xóa dữ liệu dòng tiền

Vui lòng chọn phạm vi tính toán xóa dữ liệu (chỉ xóa số tiền, không xóa danh mục):

Lịch công nợ

{{cfTitle}}
Dự kiến Thu (tháng)
{{formatCurrency(cfMonthSummary.receivable)}}
Dự kiến Chi (tháng)
{{formatCurrency(cfMonthSummary.payable)}}
Dòng tiền thuần dự kiến
{{formatCurrency(cfMonthSummary.net)}}
Quá hạn chưa thu/trả
{{cfMonthSummary.overdueCount}}
khoản cần xử lý
{{d}}
{{cell.day}}
+{{formatCompact(cell.receivable)}}
-{{formatCompact(cell.payable)}}
{{cell.count}} khoản

Công nợ đến hạn ngày {{cfSelectedDay}}

{{cfDebtPage}}/{{cfSelectedDayDebts.totalPages}} ({{cfSelectedDayDebts.total}})
Không có công nợ đến hạn
Loại KH / NCC Hợp đồng Tổng Còn lại
{{debt.Type==='receivable'?'Phải thu':'Phải trả'}} {{debt.Type==='receivable' ? getCustomerName(debt.CustomerID) : getSupplierName(debt.SupplierID)}} {{debt.ContractNo || '-'}} {{formatCurrency(debt.TotalAmount)}} {{formatCurrency(debt.remaining)}}
Xem Thay Đổi ({{ pnlEditsList.length + Object.keys(pnlPendingConfigs).length }})
Hoạch định P&L Năm {{ pnlYear }} — Nhãn: {{ pnlLabelFilter === 'all' ? 'Tất cả chi nhánh' : labelIdToName(pnlLabelFilter) }}
Thuế: %
Danh mục
Tháng {{m}} Tổng năm
THU NHẬP TRƯỚC THUẾ (EBT)
{{(pnlSummary.months[m-1]?.ebt.plan || 0) !== 0 ? formatCurrency(pnlSummary.months[m-1].ebt.plan) : ''}}
Thực đạt: {{formatCurrency(pnlSummary.months[m-1].ebt.actual)}}
{{formatCurrency(pnlSummary.totals.ebt.plan)}}
Thực đạt: {{formatCurrency(pnlSummary.totals.ebt.actual)}}
(-) Thuế TNDN ({{pnlTaxRate}}%)
Tính theo từng tháng riêng lẻ. Quyết toán thực tế có thể khác.
{{(pnlSummary.months[m-1]?.tax.plan || 0) > 0 ? formatCurrency(pnlSummary.months[m-1].tax.plan) : ''}}
Thực đạt: {{formatCurrency(pnlSummary.months[m-1]?.tax.actual || 0)}}
{{pnlSummary.totals.tax.plan > 0 ? formatCurrency(pnlSummary.totals.tax.plan) : '0'}}
Thực đạt: {{formatCurrency(pnlSummary.totals.tax.actual || 0)}}
LỢI NHUẬN RÒNG
{{(pnlSummary.months[m-1]?.net.plan || 0) !== 0 ? formatCurrency(pnlSummary.months[m-1].net.plan) : ''}}
Thực đạt: {{formatCurrency(pnlSummary.months[m-1].net.actual)}}
{{formatCurrency(pnlSummary.totals.net.plan)}}
Thực đạt: {{formatCurrency(pnlSummary.totals.net.actual)}}
Margin: {{(pnlSummary.ratioTotals.net.plan.num / pnlSummary.ratioTotals.net.plan.den * 100).toFixed(1)}}%
Tỷ suất LN ròng
Kế hoạch: {{(pnlSummary.ratioTotals.net.plan.num / pnlSummary.ratioTotals.net.plan.den * 100).toFixed(1)}}%
Thực đạt: {{(pnlSummary.ratioTotals.net.actual.num / pnlSummary.ratioTotals.net.actual.den * 100).toFixed(1)}}%
{{((pnlSummary.ratioTotals.net.actual.num / pnlSummary.ratioTotals.net.actual.den) / (pnlSummary.ratioTotals.net.plan.num / pnlSummary.ratioTotals.net.plan.den) * 100).toFixed(0)}}% đạt KH
Đã chọn {{ pnlSelectedRows.length }} dòng
Chưa lưu cấu hình Nhấp để đồng bộ Google Sheet
Lũy kế tháng:
Tổng lũy kế: {{pnlDashMonths.length}} tháng
Doanh Thu
{{formatCurrency(pnlDashMetrics.revenue.plan)}}
Thực đạt: {{formatCurrency(pnlDashMetrics.revenue.actual)}} {{pnlDashMetrics.revenue.plan > 0 ? ((pnlDashMetrics.revenue.actual / pnlDashMetrics.revenue.plan) * 100).toFixed(1) : 0}}%
Giá Vốn (COGS)
{{formatCurrency(pnlDashMetrics.cogs.plan)}}
Thực đạt: {{formatCurrency(pnlDashMetrics.cogs.actual)}} {{pnlDashMetrics.cogs.plan > 0 ? ((pnlDashMetrics.cogs.actual / pnlDashMetrics.cogs.plan) * 100).toFixed(1) : 0}}%
LỢI NHUẬN GỘP
{{formatCurrency(pnlDashMetrics.gross_profit.plan)}}
Thực đạt: {{formatCurrency(pnlDashMetrics.gross_profit.actual)}} {{pnlDashMetrics.gross_profit.plan > 0 ? ((pnlDashMetrics.gross_profit.actual / pnlDashMetrics.gross_profit.plan) * 100).toFixed(1) : 0}}%
CHI PHÍ HOẠT ĐỘNG
{{formatCurrency(pnlDashMetrics.opex.plan)}}
Thực đạt: {{formatCurrency(pnlDashMetrics.opex.actual)}} {{pnlDashMetrics.opex.plan > 0 ? ((pnlDashMetrics.opex.actual / pnlDashMetrics.opex.plan) * 100).toFixed(1) : 0}}%
LỢI NHUẬN TRƯỚC THUẾ
{{formatCurrency(pnlDashMetrics.ebt.plan)}}
Thực đạt: {{formatCurrency(pnlDashMetrics.ebt.actual)}} {{pnlDashMetrics.ebt.plan > 0 ? ((pnlDashMetrics.ebt.actual / pnlDashMetrics.ebt.plan) * 100).toFixed(1) : 0}}%
LỢI NHUẬN RÒNG
{{formatCurrency(pnlDashMetrics.net_profit.plan)}}
Thực đạt: {{formatCurrency(pnlDashMetrics.net_profit.actual)}} {{pnlDashMetrics.net_profit.plan > 0 ? ((pnlDashMetrics.net_profit.actual / pnlDashMetrics.net_profit.plan) * 100).toFixed(1) : 0}}%

So sánh Doanh thu & Lợi nhuận Ròng

Xu hướng Kế hoạch & Thực tế hàng tháng (Cả năm)

Chỉ số Hiệu quả Lợi nhuận (% Biên LN)

Xu hướng Kế hoạch & Thực tế hàng tháng (Cả năm)

Cơ cấu 1 Đồng Doanh Thu Dự Báo (Theo tháng Kế hoạch)

{{ pnlDashRevChartMode === 'actual' ? 'Cơ cấu Doanh Thu Thực Tế' : 'Cơ cấu Doanh Thu Kế Hoạch' }}

Top 5 danh mục & phần còn lại (Lũy kế)

{{ pnlDashCogsChartMode === 'actual' ? 'Cơ cấu Giá Vốn Thực Tế' : 'Cơ cấu Giá Vốn Kế Hoạch' }}

Top 5 danh mục & phần còn lại (Lũy kế)

{{ pnlDashOpexChartMode === 'actual' ? 'Cơ cấu Chi Phí Hoạt Động Thực Tế (OPEX)' : 'Cơ cấu Chi Phí Hoạt Động Kế Hoạch (OPEX)' }}

Top 5 danh mục & phần còn lại (Lũy kế)

Phân Tích Hiệu Quả Theo Nhãn

Bảng đối soát hiệu quả và phân bổ tỷ trọng doanh thu, chi phí, lợi nhuận giữa các nhãn (Lũy kế các tháng đã chọn)

Nhãn P&L Doanh thu Giá vốn (COGS) Lợi nhuận gộp Chi phí (OPEX) Lợi nhuận ròng % Hoàn thành KH (Thực tế / Kế hoạch Doanh thu)
{{ b.name }}
{{ formatCurrency(b.revenue.plan) }} ({{(b.revenue.plan / (pnlDashMetrics.revenue.plan || 1) * 100).toFixed(1)}}%)
Thực đạt: {{ formatCurrency(b.revenue.actual) }} ({{(b.revenue.actual / (pnlDashMetrics.revenue.actual || 1) * 100).toFixed(1)}}%)
{{ formatCurrency(b.cogs.plan) }} ({{(b.cogs.plan / (pnlDashMetrics.cogs.plan || 1) * 100).toFixed(1)}}%)
Thực đạt: {{ formatCurrency(b.cogs.actual) }} ({{(b.cogs.actual / (pnlDashMetrics.cogs.actual || 1) * 100).toFixed(1)}}%)
{{ formatCurrency(b.gross.plan) }} ({{(b.gross.plan / (pnlDashMetrics.gross_profit.plan || 1) * 100).toFixed(1)}}%)
Thực đạt: {{ formatCurrency(b.gross.actual) }} ({{(b.gross.actual / (pnlDashMetrics.gross_profit.actual || 1) * 100).toFixed(1)}}%)
{{ formatCurrency(b.opex.plan) }} ({{(b.opex.plan / (pnlDashMetrics.opex.plan || 1) * 100).toFixed(1)}}%)
Thực đạt: {{ formatCurrency(b.opex.actual) }} ({{(b.opex.actual / (pnlDashMetrics.opex.actual || 1) * 100).toFixed(1)}}%)
{{ formatCurrency(b.net.plan) }} ({{(b.net.plan / (pnlDashMetrics.net_profit.plan || 1) * 100).toFixed(1)}}%)
Thực đạt: {{ formatCurrency(b.net.actual) }} ({{(b.net.actual / (pnlDashMetrics.net_profit.actual || 1) * 100).toFixed(1)}}%)
{{ b.revenue.plan > 0 ? ((b.revenue.actual / b.revenue.plan) * 100).toFixed(1) : 0 }}%
TỔNG CỘNG
{{ formatCurrency(pnlDashMetrics.revenue.plan) }} (100.0%)
Thực đạt: {{ formatCurrency(pnlDashMetrics.revenue.actual) }} (100.0%)
{{ formatCurrency(pnlDashMetrics.cogs.plan) }} (100.0%)
Thực đạt: {{ formatCurrency(pnlDashMetrics.cogs.actual) }} (100.0%)
{{ formatCurrency(pnlDashMetrics.gross_profit.plan) }} (100.0%)
Thực đạt: {{ formatCurrency(pnlDashMetrics.gross_profit.actual) }} (100.0%)
{{ formatCurrency(pnlDashMetrics.opex.plan) }} (100.0%)
Thực đạt: {{ formatCurrency(pnlDashMetrics.opex.actual) }} (100.0%)
{{ formatCurrency(pnlDashMetrics.net_profit.plan) }} (100.0%)
Thực đạt: {{ formatCurrency(pnlDashMetrics.net_profit.actual) }} (100.0%)
{{pnlDashMetrics.revenue.plan > 0 ? ((pnlDashMetrics.revenue.actual / pnlDashMetrics.revenue.plan) * 100).toFixed(1) : 0}}%

Cơ cấu Doanh Thu KH (Theo Nhãn)

Cơ cấu Doanh Thu TT (Theo Nhãn)

Cơ cấu LN Ròng KH (Theo Nhãn)

Cơ cấu LN Ròng TT (Theo Nhãn)

Chưa thiết lập Chi phí Cố định (FC). Điểm hòa vốn hiển thị = 0 vì chưa có danh mục nào được gán loại Cố định (CĐ) trong tab Dự báo P&L. Hãy vào tab Dự báo P&L → bấm vào badge của từng danh mục chi phí để chuyển sang .
Doanh thu hòa vốn dự kiến
{{formatCurrency(beAnalysis.breakEvenPoint)}}
Chi phí cố định dự kiến
{{formatCurrency(beAnalysis.fixedCost)}}
Chi phí biến đổi dự kiến
{{formatCurrency(beAnalysis.variableCost)}}
{{beAnalysis.passedBep ? 'ĐÃ VƯỢT ĐIỂM HÒA VỐN' : 'CHƯA ĐẠT ĐIỂM HÒA VỐN'}}
DT thực đạt: {{formatCurrency(beAnalysis.actualRevenue)}} Mốc hòa vốn: {{formatCurrency(beAnalysis.breakEvenPoint)}} Chênh lệch: {{beAnalysis.bepDiff >= 0 ? '+' : ''}}{{formatCurrency(beAnalysis.bepDiff)}}
Biên An Toàn (MoS)
{{beAnalysis.marginOfSafety.toFixed(1)}}%
{{beAnalysis.marginOfSafety >= 20 ? 'Tín hiệu an toàn' : beAnalysis.marginOfSafety >= 0 ? 'Tín hiệu rủi ro thấp' : 'Nguy cơ rủi ro cao'}}

I. Tương Quan Doanh Thu Lũy Kế & Điểm Hòa Vốn

Thời gian Doanh số lũy kế Mức hòa vốn Chênh lệch
Tháng {{d.month}} {{formatCompact(d.cumRevActual)}} {{formatCompact(beAnalysis.breakEvenPoint)}} {{d.bepActualDiff >= 0 ? '+' : ''}}{{formatCompact(d.bepActualDiff)}}

Mức Độ Tương Quan & Điểm Giao Cắt

II. Chi Phí Cố Định (FC)

Tổng cấu thành FC
{{formatCurrency(beAnalysis.fixedCost)}}
Hạng mục chi phí cố định Chi phí ước tính Tỷ trọng
{{it.name}} {{formatCurrency(it.value)}} {{it.percent.toFixed(1)}}%
Không có dữ liệu định phí (FC).

III. Chi Phí Biến Đổi (VC) Tại Mức Điểm Hòa Vốn

Tỷ lệ biến phí (VC Ratio)
{{beAnalysis.totalRevenue > 0 ? ((beAnalysis.variableCost/beAnalysis.totalRevenue)*100).toFixed(1) : 0}}%
Hạng mục chi phí biến đổi CP tại điểm hòa vốn Tỷ trọng
{{it.name}} {{formatCurrency(it.valueAtBep)}} {{it.percent.toFixed(1)}}%
Không có dữ liệu biến phí (VC).

IV. Phân Tích Độ Nhạy (Định Phí) & Biểu Đồ Tuyến Tính Trực Quan

* Chạm (Click) vào từng tùy chọn Kịch bản Định phí (FC) để phân tích Điểm hòa vốn tương ứng trên Biểu đồ bên phải.

Kịch bản Định phí (FC) Điểm cân bằng mới & Biến động bù trừ
-
{{s.label}}
Biến động bù trừ: {{s.diff > 0 ? '+' : ''}}{{s.diff === 0 ? '-' : formatCurrency(s.diff)}}
{{formatCurrency(s.bep)}}

Phân Tích Giao Cắt Tuyến Tính ({{beSensitivity.find(s => s.delta === selectedSensitivityDelta)?.label || 'Hiện tại'}})

V. So Sánh & Phân Tích Điểm Hòa Vốn Theo Nhãn

So sánh mốc doanh số hòa vốn dự kiến và khả năng sinh lời giữa các nhãn hoạt động trong kỳ

Nhãn P&L Doanh thu KH Doanh thu TT Định phí (FC) Biến phí (VC) Tỷ suất CM Mốc Hòa Vốn Biên an toàn (MOS) Trạng thái
{{ lbl.name }} {{ formatCurrency(lbl.revenuePlan) }} {{ formatCurrency(lbl.revenueActual) }} {{ formatCurrency(lbl.fixedCost) }} {{ formatCurrency(lbl.variableCost) }} {{ (lbl.cmRatio * 100).toFixed(1) }}% {{ formatCurrency(lbl.bep) }} {{ lbl.marginOfSafety.toFixed(1) }}% Vượt hòa vốn Dưới hòa vốn
TỔNG CỘNG {{ formatCurrency(beAnalysis.totalRevenue) }} {{ formatCurrency(beAnalysis.actualRevenue) }} {{ formatCurrency(beAnalysis.fixedCost) }} {{ formatCurrency(beAnalysis.variableCost) }} {{ (beAnalysis.cmRatio * 100).toFixed(1) }}% {{ formatCurrency(beAnalysis.breakEvenPoint) }} {{ beAnalysis.marginOfSafety.toFixed(1) }}% Vượt hòa vốn Dưới hòa vốn

So Sánh DT vs Mốc Hòa Vốn Theo Nhãn

Lũy kế tháng: Lũy kế: {{pnlSimMonths.length}}T

Bảng Kịch Bản

{{simItems.length}} biến số

Chưa có biến số nào

Thêm biến số để mô phỏng sự thay đổi của Doanh thu, Chi phí.

{{ item.category }}
{{item.labelId === 'global' ? 'Chung' : ((pnlLabelsList || []).find(l => l && l.id === item.labelId)?.name || item.labelId)}} {{ item.months.length }} tháng
%
Gốc ({{ simGetItemImpact(item).count }}T): {{formatCompact(simGetItemImpact(item).sumBase)}} {{ formatCompact(simGetItemImpact(item).sumSim) }}
Tổng doanh thu
Kế hoạch: {{formatCompact(simHealthCards.rev.plan)}}
Thực đạt
{{formatCompact(simHealthCards.rev.actual)}} {{simHealthCards.rev.deltaAct > 0 ? '+' : ''}}{{ formatCompact(simHealthCards.rev.deltaAct) }}
Giả định
{{formatCompact(simHealthCards.rev.sim)}} {{simHealthCards.rev.deltaSim > 0 ? '+' : ''}}{{ formatCompact(simHealthCards.rev.deltaSim) }}
Tổng lợi nhuận gộp {{ simHealthCards.gross.grossMargin }}%
Kế hoạch: {{formatCompact(simHealthCards.gross.plan)}}
Thực đạt
{{formatCompact(simHealthCards.gross.actual)}} {{simHealthCards.gross.deltaAct > 0 ? '+' : ''}}{{formatCompact(simHealthCards.gross.deltaAct)}}
Giả định
{{formatCompact(simHealthCards.gross.sim)}} {{simHealthCards.gross.deltaSim > 0 ? '+' : ''}}{{formatCompact(simHealthCards.gross.deltaSim)}}
Chi phí hoạt động (OPEX)
Kế hoạch: {{formatCompact(simHealthCards.opex.plan)}}
Thực đạt
{{formatCompact(simHealthCards.opex.actual)}} {{simHealthCards.opex.deltaAct > 0 ? '+' : ''}}{{formatCompact(simHealthCards.opex.deltaAct)}}
Giả định
{{formatCompact(simHealthCards.opex.sim)}} {{simHealthCards.opex.deltaSim > 0 ? '+' : ''}}{{formatCompact(simHealthCards.opex.deltaSim)}}
Tổng lợi nhuận ròng
Kế hoạch: {{formatCompact(simHealthCards.net.plan)}}
Thực đạt
{{formatCompact(simHealthCards.net.actual)}} {{simHealthCards.net.deltaAct > 0 ? '+' : ''}}{{ formatCompact(simHealthCards.net.deltaAct) }}
Giả định
{{formatCompact(simHealthCards.net.sim)}} {{simHealthCards.net.deltaSim > 0 ? '+' : ''}}{{ formatCompact(simHealthCards.net.deltaSim) }}
Độ lệch của Tổng Lợi Nhuận Ròng
{{ simHealthCards.deltaNet.value > 0 ? '+' : '' }}{{ formatCompact(simHealthCards.deltaNet.value) }}

Phân Tích Điểm Hòa Vốn (BEP)

Doanh Thu Hòa Vốn
{{ formatCompact(simBepMetrics.bepRev) }}
Kế hoạch: {{formatCompact(simBepMetrics.baseBepRev)}} Δ: {{formatCompact(simBepMetrics.bepRev - simBepMetrics.baseBepRev)}}
Biên An Toàn
{{simBepMetrics.safety.toFixed(1)}}%
Kế hoạch: {{simBepMetrics.baseSafety.toFixed(1)}}% Δ: {{(simBepMetrics.safety - simBepMetrics.baseSafety) > 0 ? '+' : ''}}{{(simBepMetrics.safety - simBepMetrics.baseSafety).toFixed(1)}}%
Thời Điểm Hòa Vốn
{{simBepMetrics.noFC ? 'Không có FC' : (simBepMetrics.bepMonth ? 'Tháng ' + simBepMetrics.bepMonth : 'Không đạt')}}
Kế hoạch: {{simBepMetrics.baseBepMonth ? 'Tháng ' + simBepMetrics.baseBepMonth : '-'}}
Đòn Bẩy (DOL)
{{simBepMetrics.dol !== null ? simBepMetrics.dol.toFixed(2) + 'x' : '-'}}
Kế hoạch: {{simBepMetrics.baseDol !== null ? simBepMetrics.baseDol.toFixed(2) + 'x' : '-'}}

Lợi nhuận ròng: So sánh Giả định và kế hoạch gốc

ĐỘ LỆCH CỦA TỔNG LỢI NHUẬN RÒNG THEO NHÃN

Biến động P&L các tháng tác động

Chỉ tiêu Tháng {{ m }} Tổng thay đổi
Doanh Thu
Kế hoạch: {{formatCompact(pnlSummary?.months?.[m-1]?.revenue?.plan || 0)}}
Giả định: {{formatCompact(simulatedPnlSummary.months[m-1].rev)}}
{{formatCompact(simAffectedMonths.reduce((sum, m) => sum + simulatedPnlSummary.months[m-1].rev - (pnlSummary?.months?.[m-1]?.revenue?.plan || 0), 0))}}
Lợi Nhuận Gộp
Kế hoạch: {{formatCompact(pnlSummary?.months?.[m-1]?.gross?.plan || 0)}}
Giả định: {{formatCompact(simulatedPnlSummary.months[m-1].gross)}}
{{formatCompact(simAffectedMonths.reduce((sum, m) => sum + simulatedPnlSummary.months[m-1].gross - (pnlSummary?.months?.[m-1]?.gross?.plan || 0), 0))}}
Chi phí hoạt động (OPEX)
Kế hoạch: {{formatCompact(pnlSummary?.months?.[m-1]?.opex?.plan || 0)}}
Giả định: {{formatCompact(simulatedPnlSummary.months[m-1].opex)}}
{{formatCompact(simAffectedMonths.reduce((sum, m) => sum + simulatedPnlSummary.months[m-1].opex - (pnlSummary?.months?.[m-1]?.opex?.plan || 0), 0))}}
Lợi Nhuận Ròng
Kế hoạch: {{formatCompact(pnlSummary?.months?.[m-1]?.net?.plan || 0)}}
Giả định: {{formatCompact(simulatedPnlSummary.months[m-1].net)}}
{{formatCompact(simAffectedMonths.reduce((sum, m) => sum + simulatedPnlSummary.months[m-1].net - (pnlSummary?.months?.[m-1]?.net?.plan || 0), 0))}}
Chưa có tháng nào bị tác động.
ROI Kịch bản
{{simBepMetrics.roi !== null ? simBepMetrics.roi.toFixed(1) + '%' : '-'}}
Thời gian hoàn vốn
{{simBepMetrics.payback !== null ? simBepMetrics.payback.toFixed(1) + ' tháng' : '-'}}
Rủi ro hòa vốn
{{simBepMetrics.bepRisk !== null ? simBepMetrics.bepRisk.toFixed(1) + '%' : '-'}}
Tỷ trọng FC (FC Ratio)
{{simBepMetrics.fcRatio !== null ? simBepMetrics.fcRatio.toFixed(1) + '%' : '-'}}
Chọn nhãn:
{{simDeltaByLabel.filter(x => x.hasItem).length}}/{{simDeltaByLabel.length}} nhãn có kịch bản tác động.

Thêm biến số kịch bản

1
2
3
Danh mục Tháng Giá trị

{{ sec.name }}

Đã chọn:
{{ simAddCategory?.category }}
Nhãn: {{simAddCategory?.labelId === 'global' ? 'Chung' : ((pnlLabelsList || []).find(l => l && l.id === simAddCategory?.labelId)?.name || simAddCategory?.labelId)}}

Chọn tháng tác động

{{simAddMonths.length}}/12
Preset:
{{ simAddCategory?.category }}
{{simAddMonths.length}} tháng: {{ simAddMonths.sort((a,b)=>a-b).map(m=>'T'+m).join(', ') }}

Điều chỉnh giá trị

Theo % thay đổi
Giảm (-20%)
{{ simAddMultiplier > 0 ? '+' : '' }}{{ simAddMultiplier }}%
Tăng (+20%)
Preview Kết Quả
Tổng các tháng gốc:
{{ formatCompact(simAddPreview.base) }}
{{formatCompact(simAddPreview.base + simAddPreview.totalDelta)}}
Tổng thay đổi ({{ simAddMonths.length }} tháng):
{{ simAddPreview.totalDelta > 0 ? '+' : ''}}{{ formatCompact(simAddPreview.totalDelta) }}

Đã ghi vào Kế hoạch!

Kịch bản mô phỏng đã được áp dụng. Tổng cộng {{simApplyCount}} ô dữ liệu đã được ghi đè trong bảng P&L.

Lưu ý: Dữ liệu mới chỉ lưu tạm thời. Hãy sang tab Dự báo P&L kiểm tra và nhấn Lưu thay đổi để ghi lên hệ thống.

Thêm danh mục — {{pnlBulkAddSection === 'revenue' ? 'Doanh Thu' : (pnlBulkAddSection === 'cogs' ? 'Giá Vốn' : 'Chi phí OPEX')}}

Tham chiếu Kế hoạch % Doanh thu
Tham chiếu Kế hoạch % Doanh thu

Cập nhật cấu hình hàng loạt

Đang cập nhật cấu hình cho {{pnlSelectedRows.length}} danh mục được chọn.

Nhân bản hàng loạt ({{pnlSelectedRows.length}} mục)

Cấu hình công thức

Đang cấu hình cho:
{{ pnlConfigFormulaRow.split('|')[1] }}
Hệ thống đang trỏ tới: {{ pnlFormulaBaseCombined.split('|')[0] || 'Tất cả danh mục' }} ({{pnlFormulaBaseCombined.split('|')[1] === 'global' ? 'Chung (Global)' : pnlGetLabelName(pnlFormulaBaseCombined.split('|')[1] || 'global')}})

Xóa dữ liệu Dự Báo P&L

Vui lòng chọn phạm vi tính toán xóa dữ liệu (chỉ xóa số tiền, không xóa danh mục):

Xem trước kết quả nhập Excel P&L

Thông tin file Excel
Tên file: {{ pnlImportModal.fileName }}
Năm dữ liệu: {{ pnlImportModal.fileYear || 'Không xác định' }}
Thông tin hệ thống
Năm đang chọn: {{ pnlImportModal.systemYear }}
Trạng thái đối chiếu: Khớp năm Lệch năm
Cảnh báo lệch năm!
Năm trong file Excel ({{ pnlImportModal.fileYear }}) không trùng khớp với Năm đang chọn trên hệ thống ({{ pnlImportModal.systemYear }}). Hành động ghi đè hoặc nhập đè có thể dẫn đến sai sót dữ liệu. Vui lòng kiểm tra kỹ trước khi tiếp tục.
Thông báo kiểm tra ({{ pnlImportModal.errorsCount }} Lỗi, {{ pnlImportModal.warningsCount }} Cảnh báo)
Dòng {{ idx + 1 }} ({{ row.category }}): {{ err }}
Dòng {{ idx + 1 }} ({{ row.category }}): {{ wrn }}
Phân loại Danh mục Chi nhánh Kiểu Trạng thái Tổng năm hiện tại Tổng năm Excel Chênh lệch
{{ row.pnlLineName }} {{ row.category }} {{ row.labelName }} {{ row.dataType === 'plan' ? 'Kế hoạch' : 'Thực tế' }} Lỗi Thêm mới Cập nhật Không đổi {{ row.inputModePlan === 'percent' ? (row.oldTotal.toFixed ? Number(row.oldTotal.toFixed(2)) : row.oldTotal) + '%' : formatCurrency(row.oldTotal) }} {{ row.inputModePlan === 'percent' ? (row.newTotal.toFixed ? Number(row.newTotal.toFixed(2)) : row.newTotal) + '%' : formatCurrency(row.newTotal) }} {{ row.newTotal - row.oldTotal > 0 ? '+' : '' }}{{ row.inputModePlan === 'percent' ? (Number((row.newTotal - row.oldTotal).toFixed(2))) + '%' : formatCurrency(row.newTotal - row.oldTotal) }}
Không tìm thấy dữ liệu thay đổi nào.
Dữ liệu sau khi bấm áp dụng sẽ chỉ được ghi vào bộ nhớ tạm thời trên lưới và có màu cam nổi bật. Bạn cần bấm "Lưu Thay Đổi" trên thanh lưu để ghi nhận thực tế.

Khởi Tạo KPI Tài Chính

Thiết lập tự động từ cấu trúc P&L hoặc tạo công thức tùy chỉnh linh hoạt

Nhóm Dữ Liệu P&L

Hệ thống đã phân tích sơ đồ P&L và gợi ý {{suggestedKpisGrouped.flatMap(g => g.items).length}} chỉ số có thể liên kết tự động.

{{ suggestedKpisGrouped[suggestedKpisActiveGroupIdx].label }}

Không có chỉ số nào trong nhóm này
{{manualKpiFormulaError}} Công thức hợp lệ! Sẵn sàng liên kết.
Chèn thẻ dữ liệu P&L
Chỉ số Tổng hợp P&L
{{ tag.label }}
Danh mục Doanh thu
{{ c.label }}
Danh mục Chi phí (COGS / OPEX)
{{ c.label }}
Chỉ số KPI từ Lập kế hoạch tổng thể
{{ kpi.labelText }}
Đã chọn: {{selectedSuggestedKpisCount}} chỉ số gợi ý Chế độ thiết lập công thức tự do

Danh sách KPI Tài chính

Đang tải dữ liệu...
Tên KPI (Thư viện) Tham chiếu P&L (Mapping) Mục tiêu (Target) Thực tế (Actual) Thao tác

Chưa có chỉ số KPI tài chính nào

Bạn có thể tạo nhanh bằng cách nhấp "Đề xuất KPI" hoặc tự xây dựng công thức liên kết P&L.

{{ kpi.KPIName }}
Đơn vị: {{ kpi.Unit }}
KPI Công thức (Bấm Cấu hình để xem/sửa)
{{kpiMappingsObj[kpi.LibID]?.pnlSource ? formatPnlSource(kpiMappingsObj[kpi.LibID].pnlSource) : 'Không liên kết'}}
{{formatKpiValue(getKpiVal(kpi.LibID, 'Target', activeMonth, isAccumulated, pnlYear), kpi.Unit)}} P&L
Nhập tay
{{formatKpiValue(getKpiVal(kpi.LibID, 'Actual', activeMonth, isAccumulated, pnlYear), kpi.Unit)}} P&L
Nhập tay
-
Tên KPI / Tham chiếu P&L Phân loại Tháng {{ m }} Cả năm Thao tác
Không có dữ liệu KPI Tài chính.

Cấu hình chỉ số đơn lẻ

{{ kpiMappingActiveKpiName }}

Tên KPI
Đơn vị
Mã liên kết
Kế hoạch (Target):
Thực đạt (Actual):
Phương thức gộp kỳ:

Công thức tùy chỉnh

Chèn thẻ biến số (Click để thêm):
Đồng bộ thông minh

Đồng bộ KPI sang Thư viện chỉ số

● Tự động Đề xuất Thông số BSC Dựa trên tên chỉ số "{{ syncForm.name }}", hệ thống tự động tra cứu và điền sẵn các trường thông tin tiêu chuẩn từ Thư viện chỉ số để bạn duyệt nhanh.
{{duplicateType === 'exact' ? '⚠️ Phát Hiện Chỉ Số Trùng Lặp Hoàn Toàn (Exact Match)' : '⚠️ Phát Hiện Trùng Lặp Tiềm Năng (Potential Match)'}}
Chỉ số "{{ syncForm.name }}" đã tồn tại trong Thư viện chỉ số. Hãy chọn hành động xử lý để chống rác dữ liệu:
Phát hiện chỉ số có tên tương tự trong Thư viện: "{{duplicateTargetKpi ? duplicateTargetKpi.KPIName : ''}}" (Trùng khớp Levenshtein cao). Hãy chọn giải pháp tốt nhất:
{{syncForm.complexity}}/10
KPI sau khi đồng bộ sẽ sẵn sàng để gán cho các phòng ban.

Cấu hình Nhãn Hoạch định Tài chính (P&L)

Thêm Nhãn Mới

Mã sẽ sinh: {{ pnlNewLabelPreviewId }}

STT Tên Nhãn / Chi nhánh Mã Nhãn Màu hiển thị Thao tác
1 Chung (Global) Mặc định global slate Hệ thống
{{ idx + 2 }} {{ lbl.id }}
Chưa khai báo thêm nhãn tùy chỉnh nào. Nhập ở biểu mẫu phía trên để thêm!
Thay đổi cần được lưu để đồng bộ lên máy chủ.

Xem trước các thay đổi chưa lưu (P&L)

Dưới đây là danh sách toàn bộ các giá trị ô dữ liệu P&L đã thay đổi nhưng chưa được đồng bộ lên Google Sheets.

Chi tiết thay đổi số liệu ({{ pnlEditsList.length }} ô)
STT Phân loại Danh mục Nhãn / Chi nhánh Kiểu Tháng Giá trị cũ Giá trị mới Chênh lệch Thao tác
{{ idx + 1 }} {{ formatPnlSource(edit.pnlLine) }} {{ edit.category }} {{ pnlGetLabelName(edit.labelId) }} {{ edit.dataType === 'plan' ? 'Kế hoạch' : 'Thực tế' }} Tháng {{ edit.month }} {{ getPnlOldDisplay(edit.dataType, edit.pnlLine, edit.category, edit.labelId, edit.month) }} {{ getPnlNewDisplay(edit.dataType, edit.pnlLine, edit.category, edit.labelId, edit.month) }}
Không tìm thấy thay đổi nào về số liệu ô.
Thay đổi cấu hình danh mục ({{ Object.keys(pnlModifiedConfigs).length }} danh mục)
STT Phân loại Danh mục Thuộc tính thay đổi Giá trị cũ Giá trị mới Thao tác

Dashboard KPI Tài chính

Năm {{ pnlYear }} · {{ pnlLabelFilter === 'all' ? 'Tất cả nhãn' : pnlLabelFilter }}
Tháng Đang chọn {{ financialKpiDashboardSelectedMonths.length }} tháng
KPI hiển thị
{{ financialKpiDashboardSummary.total }}
Tỷ lệ đạt TB
{{ financialKpiDashboardSummary.avg.toFixed(1) }}%
Đạt mục tiêu
{{ financialKpiDashboardSummary.safe }}
Cảnh báo
{{ financialKpiDashboardSummary.risk }}
Đang tải dashboard
Chưa có KPI nào được kết nối
{{ row.profile.KPIName }}
{{ row.profile.Unit }} · {{ row.profile.KPIType }}
{{ row.status.label }}
{{ row.achievement === null ? '--' : row.achievement.toFixed(1) + '%' }}
Tỷ lệ đạt
Thực tế: {{ formatKpiValue(row.actual, row.profile.Unit) }}
Mục tiêu: {{ formatKpiValue(row.target, row.profile.Unit) }}
Xu hướng 12 tháng
KPI Công thức đạt Mục tiêu Thực tế Đạt Trạng thái Xu hướng Thao tác
{{ row.profile.KPIName }}
{{ row.profile.Unit }} · {{ row.profile.DataSource }}
{{ row.profile.CalcMethod }} {{ formatKpiValue(row.target, row.profile.Unit) }} {{ formatKpiValue(row.actual, row.profile.Unit) }} {{ row.achievement === null ? '--' : row.achievement.toFixed(1) + '%' }} {{ row.status.label }}
Phân tích chi tiết 12 tháng
{{ financialKpiDashboardSelectedRow && financialKpiDashboardSelectedRow.profile.KPIName }}
Đơn vị: {{ financialKpiDashboardSelectedRow && financialKpiDashboardSelectedRow.profile.Unit }}
Ma trận hiệu suất 12 tháng
Tỷ lệ hoàn thành KPI theo từng tháng
KPI T{{ m }}
{{ row.profile.KPIName }} {{ getFinancialKpiDashboardAchievement(row.kpi, m) === null ? '--' : Math.round(getFinancialKpiDashboardAchievement(row.kpi, m)) + '%' }}
Dashboard KPI tài chính

Kết nối KPI

KPI Nguồn Profile Trạng thái Thao tác
{{ row.profile && row.profile.KPIName || row.kpi.KPIName }}
{{ row.profile && row.profile.Unit || row.kpi.Unit || '--' }}
{{ row.profile && row.profile.DataSource || '--' }}
{{ row.ready ? 'Đã chuẩn hóa' : 'Cần profile tạm' }} {{ row.connected ? 'Đã kết nối' : 'Chưa kết nối' }}

{{ financialKpiDashboardSelectedRow.profile.KPIName }}

{{ financialKpiDashboardSelectedRow.profile.Direction }} · {{ financialKpiDashboardSelectedRow.profile.CalcMethod }}
Nguồn dữ liệu
{{ financialKpiDashboardSelectedRow.profile.DataSource }}
Độ phức tạp/trọng số
{{ financialKpiDashboardSelectedRow.profile.Complexity }}/10
Ý nghĩa KPI
{{ financialKpiDashboardSelectedRow.profile.Description }}
Mục đích theo dõi
{{ financialKpiDashboardSelectedRow.profile.Purpose }}
Mô tả cách tính
{{ financialKpiDashboardSelectedRow.profile.FormulaNote }}
Chuẩn hóa Dashboard

Profile KPI tài chính

Hoạch định tài chính

Định mức Chi phí & Ngân sách

Theo dõi ngân sách kế hoạch, chi phí thực tế và mức tiêu hao từ dữ liệu Dự báo P&L hiện hành.

Lũy kế tháng:
Tổng lũy kế: {{budgetSelectedMonths.length}} tháng
Chọn nhóm lớn
Chọn danh mục
Chưa có danh mục phù hợp

Tổng ngân sách

{{ formatBudgetMoney(budgetMetrics.totalPlan) }}

{{ budgetSelectedRangeLabel }}

Thực tế đã chi

{{ formatBudgetMoney(budgetMetrics.totalActual) }}

Lấy trực tiếp từ P&L

Chênh lệch ngân sách

{{ formatBudgetMoney(budgetMetrics.variance) }}

Kế hoạch trừ thực tế

Tỷ lệ tiêu hao

{{ Math.round((budgetMetrics.spendRatio || 0) * 100) }}%

Phân tích Pareto

{{ budgetMetrics.paretoCount }}/{{ budgetMetrics.itemCount }}

Hạng mục tạo 80% chi phí

Biến động theo tháng

So sánh kế hoạch và thực tế theo dòng chi phí

{{ budgetMetrics.status.label }}

Cơ cấu chi phí

Theo thực tế hoặc kế hoạch nếu chưa có thực tế

Bảng kiểm soát định mức

Các dòng chi phí đang được lọc theo {{ budgetSelectedRangeLabel }}

{{ budgetTableRows.filter(r => r.type === 'item').length }} hạng mục
Hạng mục Nhãn Kế hoạch Thực tế Còn lại Tiêu hao Trạng thái
Không có dữ liệu chi phí phù hợp cho kỳ lọc hiện tại.
{{ row.name }}
{{ row.labelName }} {{ formatBudgetMoney(row.plan) }} {{ formatBudgetMoney(row.actual) }} {{ formatBudgetMoney(row.variance) }}
{{ Math.round((row.ratio || 0) * 100) }}%
{{ row.status.label }}

Nhóm quy trình

Tất cả quy trình
{{ bpmProcesses.length }}
{{ grp.Name }}
{{ bpmProcesses.filter(p => p.GroupID === grp.GroupID).length }}

{{ bpmSelectedGroupId === 'all' ? 'Tất cả quy trình vận hành' : bpmGroups.find(g => g.GroupID === bpmSelectedGroupId)?.Name || 'Danh mục quy trình' }}

Xây dựng, lưu trữ và xuất bản quy trình vận hành chuẩn của doanh nghiệp

Chưa có quy trình nào

Bắt đầu trực quan hóa các quy trình vận hành SOP bằng công cụ vẽ sơ đồ tương tác thông minh của HCWPlan.

{{ bpmSelectedProcess.Name }}

Chế độ xem quy trình

Lịch làm việc

Hệ thống dùng lịch này để tính hạn chót và "quá hạn" — không tính ngoài giờ, cuối tuần, nghỉ lễ.

Lịch làm việc tuần
Thứ Làm việc Buổi sáng Buổi chiều
{{ d.t }}

Để trống khung Chiều nếu ngày đó chỉ làm buổi sáng. Khoảng giữa Sáng và Chiều được coi là nghỉ trưa (không tính giờ-công).

Ngày nghỉ lễ
Ngày lặp hằng năm (VD 30/04) hãy chọn năm bất kỳ.
{{ bpmWorkCalFmtHoliday(h) }}

Chưa có ngày nghỉ lễ nào.

{{ bpmValidateResult.runnable ? 'Quy trình hợp lệ — có thể khởi chạy' : 'Quy trình CÒN LỖI — chưa chạy được' }}
  • {{ e.msg }}
  • {{ w.msg }}

Không có lỗi hay cảnh báo nào.

Thành phần sơ đồ

Kéo thả khối vào khung vẽ

Điểm Bắt đầu
Công việc (Task)
Quyết định
Điểm Kết thúc
Chú thích chữ
Làn phân vai
Khung Blueprint

Phân tích & SLA

Phản hồi & tối ưu sơ đồ

Tổng SLA chu trình {{ bpmValidationResults.totalSla }} Độ dài đường tới hạn (Critical Path)
Lỗi sơ đồ ({{ bpmValidationResults.errors.length }})
{{ err }}
Cảnh báo ({{ bpmValidationResults.warnings.length }})
{{ warn }}
Sơ đồ quy trình chuẩn hóa thành công!
Nối nhanh

Cấu hình bước

{{ bpmGroupForm.GroupID ? 'Cập nhật nhóm quy trình' : 'Thêm nhóm quy trình mới' }}

{{ bpmProcessForm.ProcessID ? 'Cập nhật quy trình' : 'Thiết lập quy trình mới' }}

Nhóm công việc quy trình

{{ bpmCurrentProcessTaskGroups.length }} nhóm — Quy trình: {{ bpmSelectedProcess?.Name }}

Chưa có nhóm công việc nào

Bạn có thể tự động tạo các nhóm công việc dựa trên các bước có checklist của sơ đồ quy trình này

{{ item.text }}
Không có mục nào
Đang tạo lại...

{{ bpmDeletingGroupId === 'batch' ? 'Xác nhận xóa hàng loạt?' : 'Xác nhận xóa nhóm việc?' }}

{{bpmDeletingGroupId === 'batch' ? 'Bạn có chắc chắn muốn xóa ' + bpmSelectedTaskGroupIds.length + ' nhóm công việc đã chọn? Các task CVSV đã import các nhóm này sẽ không bị ảnh hưởng.' : 'Bạn có chắc chắn muốn xóa nhóm này? Các task CVSV đã import nhóm này sẽ không bị ảnh hưởng.'}}

Thư viện công việc quy trình toàn cục

Tổng số quy trình có nhóm công việc: {{ bpmGroupedProcessTaskGroups.length }}

Không tìm thấy quy trình nào

Không có dữ liệu quy trình trùng khớp hoặc chưa có quy trình nào có nhóm công việc.

{{ subGrp.Name }}
{{ subGrp.items ? subGrp.items.length : 0 }} checklist
{{ item.text }}
Không có mục nào

Công cụ sơ đồ

{{ Math.round(bpmZoomScale * 100) }}%

Sơ đồ liên kết 6 bước

Liên kết tài chính đến vận hành BPM

Độ hoàn thiện chuỗi {{ chainCompletionPercent }}%
DOANH THU & LỢI NHUẬN MỤC TIÊU
{{ linkDiagramStats.revenueTarget }} / {{ linkDiagramStats.profitTarget }}
MỤC TIÊU ĐÃ XÂY DỰNG
{{ linkDiagramStats.objectivesCount }} Mục tiêu
KẾ HOẠCH ĐÃ TẠO
{{ linkDiagramStats.plansCount }} Kế hoạch
KPI ĐÃ XÂY DỰNG
{{ linkDiagramStats.kpisCount }} KPI
CÔNG VIỆC HOÀN THÀNH
{{ linkDiagramStats.completedTasks }} / {{ linkDiagramStats.totalTasks }}
QUY TRÌNH ĐÃ XÂY DỰNG
{{ linkDiagramStats.bpmProcessesCount }} Quy trình

{{ step.name }}

BƯỚC 0{{ step.id }}
P&L Forecast BEP Target
BEP
Strategy Map
Tài chính
Khách hàng
Quy trình
Học hỏi
Action Timeline MKT & Sales
Plan MKT
Sales Goal
HR Recruitment
HR Performance Score
85%
Giao chỉ tiêu
Đã chốt KPI
Weekly Kanban Tasks
To Do
In Progress
Done
BPM Operation Flow
Yêu cầu
Xét duyệt
Ký số SOP
Độ hoàn thiện {{ getStepCompletionPercent(step.id) }}%
Mã phân hệ: BƯỚC {{ selectedStepDrawer.id }}

{{ selectedStepDrawer.name }}

Tiến độ xây dựng phân hệ {{ getStepCompletionPercent(selectedStepDrawer.id) }}%

Chỉ dẫn nghiệp vụ của CEO

{{ selectedStepDrawer.whyImportant }}

Checklist chi tiết từng nghiệp vụ con

Luồng liên kết đầu vào & đầu ra

Dữ liệu đầu vào
{{ selectedStepDrawer.input }}
Dữ liệu đầu ra
{{ selectedStepDrawer.output }}

Giấy phép phần mềm

Đang tải trạng thái giấy phép…

Nhật ký bằng chứng (cục bộ)

Chưa có bản ghi.
Thời điểm Sự kiện Chi tiết Người/Nguồn Vân tay
{{ new Date(e.Ts).toLocaleString('vi-VN') }} {{ licenseEventLabel(e.Event) }} {{ e.Detail }} {{ e.Actor }} {{ (e.Fingerprint || '').slice(0, 12) }}

Nhật ký lưu cục bộ trong máy chủ của bạn (zero-egress). Đây là bằng chứng thời điểm kích hoạt/khởi động/đổi máy — không gửi ra ngoài.

Không xem được nội dung bên dưới? Mở trong cửa sổ mới

{{currentDeal.DealID ? 'Chi Tiết' : (isCustomerViewMode ? 'Hồ Sơ Khách Hàng' : 'Tạo Mới')}}

Đang theo dõi KH Đang theo dõi

Thông Tin Khách Hàng

Đang theo dõi
Mã Khách
Tên Khách *
{{s.Name}}
{{s.Phone}}
Liên Hệ *
{{f.label}} *
{{ getOwnerInfo(currentCust.Owner).initial }}
Người Phụ Trách
{{ getOwnerInfo(currentCust.Owner).name }}
{{[getOwnerInfo(currentCust.Owner).position, getOwnerInfo(currentCust.Owner).dept].filter(Boolean).join(' · ')}}
Người theo dõi
{{ w.trim() }}

Thông Tin Deal

Tên Deal *
Giá trị
Giai đoạn *
{{f.label}} *
{{ getOwnerInfo(currentDeal.Owner).initial }}
Người Phụ Trách
{{ getOwnerInfo(currentDeal.Owner).name }}
{{[getOwnerInfo(currentDeal.Owner).position, getOwnerInfo(currentDeal.Owner).dept].filter(Boolean).join(' · ')}}
Người theo dõi Deal
{{ w.trim() }}
Chỉ lưu thông tin Khách hàng — không sửa được Deal
Chỉ lưu Deal — không sửa được thông tin KH
Bạn chỉ có quyền theo dõi khách hàng này
Lưu Deal trước khi tạo Task
{{(usersList.find(u => u.username === user.username)||{}).name || user.username}}
Chưa có công việc sự vụ nào
STT Hành động Mô tả Ưu tiên Người TH Người PH Tần suất Bắt đầu Kết thúc Trạng thái Ngày HT Tiến độ Kết quả
{{ti+1}}
{{t.Title}}
{{t.Description||''}} {{t.Priority==='P1'?'●':t.Priority==='P2'?'●':t.Priority==='P3'?'●':'⚪'}} {{t.Priority==='P1'?'Gấp-QT':t.Priority==='P2'?'QT':t.Priority==='P3'?'Gấp':t.Priority||''}} {{apGetUserName(t.AssignedTo)||t.AssignedTo}} {{apGetUserNames(t.Supervisor)}} {{t.Frequency||''}} {{apFormatDate(t.StartDate)}} {{apFormatDate(t.DueDate)}} {{cvsvAutoStatus(t)==='done'?'Hoàn thành đúng hạn':cvsvAutoStatus(t)==='done_late'?'Hoàn thành trễ hạn':cvsvAutoStatus(t)==='in_progress'?'Đang thực hiện':cvsvAutoStatus(t)==='overdue'?'Trễ hạn':'Chưa bắt đầu'}} {{apFormatDate(t.CompletedDate)}}
{{Number(t.Progress)||0}}%
{{t.Result||''}}
{{getModalTasks.length}} công việc {{getModalTasks.filter(t=>t.Status==='Done').length}} xong
Lịch Sử Deal
Chưa có deal nào.
{{d.DealName}}
{{formatDateDisplay(d.CreatedDate)}}
{{formatCurrency(d.Value)}}
{{getStageName(d.StageID)}}

Đang tải lịch sử...

Chưa có hoạt động nào.

{{formatDateDisplay(a.CreatedTime,true)}}
{{a.Content}}

Chuyển Giao {{transferType === 'deal' ? 'Cơ Hội' : 'Khách Hàng'}}

Chỉ chuyển quyền sở hữu Deal. Khách hàng giữ nguyên — người nhận sẽ được thêm làm Người theo dõi KH. Hành động này sẽ chuyển quyền sở hữu của Deal và Khách hàng liên quan. Chỉ chuyển quyền sở hữu Khách hàng. Deals giữ nguyên chủ sở hữu cũ. Hành động này sẽ chuyển quyền sở hữu của Khách hàng và tất cả Deal liên quan.

Chuyển Giao Hàng Loạt {{bulkTransferType === 'deal' ? 'Deals' : 'Khách Hàng'}}

Đã chọn: {{bulkTransferType === 'deal' ? selectedDeals.length : selectedCustomers.length}} mục
Deals đã chọn sẽ được chuyển. Khách hàng giữ nguyên — người nhận được thêm làm Người theo dõi. Tất cả Deals đã chọn sẽ được chuyển sang người phụ trách mới. Khách hàng liên quan cũng sẽ được đồng bộ. Khách hàng đã chọn sẽ được chuyển. Deals giữ nguyên chủ sở hữu cũ. Tất cả Khách hàng đã chọn sẽ được chuyển sang người phụ trách mới. Deals liên quan cũng sẽ được đồng bộ.

{{currentUserForm.isEdit ? 'Sửa Nhân Viên' : 'Thêm Nhân Viên'}}

{{currentUserForm.isEdit ? 'Cập nhật thông tin nhân viên' : 'Điền đầy đủ thông tin để tạo tài khoản mới'}}

Cảnh báo {{ isBod(currentUserForm.Team) ? 'Phụ trách chính' : 'Trưởng phòng' }}: Phòng ban {{currentUserForm.Team}} đã có {{ isBod(currentUserForm.Team) ? 'Phụ trách chính' : 'Trưởng phòng' }} là {{showManagerDuplicateWarning.leadName}}. Bạn không thể lưu người này làm {{ isBod(currentUserForm.Team) ? 'Phụ trách chính' : 'Trưởng phòng' }} trừ khi hạ chức {{ isBod(currentUserForm.Team) ? 'Phụ trách chính' : 'Trưởng phòng' }} cũ trước.

Đặt Lại Mật Khẩu

{{ otpModalUsernames.length > 1 ? 'Đặt lại cho ' + otpModalUsernames.length + ' nhân sự' : 'Đặt lại cho ' + otpModalNames[0] }}

{{ name }} ({{ otpModalUsernames[idx] }})
Mật khẩu sẽ được đặt về 123456. Nhân sự sẽ bị bắt đổi mật khẩu ngay lần đăng nhập tới. Hệ thống không gửi email — hãy báo trực tiếp cho nhân sự.

Quản Lý Vị Trí

Thêm hoặc xóa các vị trí nhân sự

Chưa có vị trí nào

{{pos}}

{{ currentTeamForm.isEdit ? 'Sửa Phòng Ban' : 'Thêm Phòng Ban Mới' }}

{{(user.name || user.FullName || user.username || '?').charAt(0)}}

Hồ Sơ Cá Nhân

Cập nhật thông tin của bạn

Thông tin chỉnh sửa

Trợ Lý A.I

Hiện Trợ lý A.I Tắt để ẩn nút trợ lý và popup chat trên mọi màn hình.

Đổi Mật Khẩu

Bảo mật & Phiên làm việc

Nếu bạn nghi ngờ tài khoản bị truy cập trái phép hoặc quên đăng xuất trên thiết bị khác, bạn có thể đăng xuất khỏi tất cả các thiết bị.

Tham số chiến lược

Cấu hình Bản đồ Chiến lược Doanh nghiệp

Thêm Viễn cảnh chiến lược mới

Chọn biểu tượng

Danh sách viễn cảnh chiến lược

Kéo thả hàng hoặc dùng nút di chuyển để sắp xếp thứ tự hiển thị của các Viễn cảnh trên Bản đồ.

{{perspectives.length}} viễn cảnh
Thứ tự
Tên viễn cảnh chiến lược
Biểu tượng
Màu sắc giao diện
Liên kết
Xóa
{{pers.Code}} Hàng {{ idx + 1 }}
Thay đổi biểu tượng
{{ objectives.filter(o => o.PerspectiveID === pers.Name).length }} mục tiêu

Thêm Mục tiêu chiến lược mới

Danh sách & Lộ trình Mục tiêu chiến lược

Quản lý và lập lịch hoạt động cho các mục tiêu chiến lược. Lựa chọn các chế độ hiển thị phù hợp bên dưới.

{{objectives.length}} mục tiêu
{{pers.Code}}
{{ pers.Name }}
{{ objectives.filter(o => o.PerspectiveID === pers.Name).length }} mục tiêu chiến lược
Thứ tự
Tên mục tiêu chiến lược
KPIs liên kết
Chuyển Viễn cảnh
Xóa
Màu sắc
Icon
{{pers.Code}} Thứ tự {{ objIdx + 1 }}
{{ k.name }} Chưa gắn KPI
Chưa có mục tiêu chiến lược nào thuộc viễn cảnh này.

Lộ trình Thời gian Hoạt động của Mục tiêu

Lập lịch hoạt động linh hoạt cho các tháng trong năm {{ matrixYear }}. Các tháng hoạt động liền kề sẽ tự động nối thành các dải lộ trình liền mạch.

{{objectives.length}} mục tiêu
Kỳ Hoạch Định Năm:
Mã & Tên mục tiêu chiến lược Viễn cảnh Kỳ hoạch định năm {{ matrixYear }} (Tháng hoạt động T1 - T12) Lập lịch nhanh (Năm {{ matrixYear }})
{{ (perspectives.find(p => p.Name === obj.PerspectiveID) || {}).Code || 'OBJ' }} {{ obj.Name }}
{{ obj.PerspectiveID }}
Chưa có mục tiêu nào được tạo.

Quản lý Nhãn Kế hoạch & Nhân sự Phụ trách (HOD)

Cấu hình danh sách nhãn phòng ban động, màu sắc giao diện và ánh xạ trưởng phòng phụ trách đồng bộ bền vững.

Thêm Nhãn Bộ Phận Mới

{{ newLabelForm.Color }}
Tên nhãn bộ phận Trưởng phòng phụ trách (HOD) Chức danh / Vai trò Ẩn nhãn Visual & Color Thao tác
{{ lbl.Role || 'Nhân viên / Chưa đồng bộ' }}
Chưa có nhãn bộ phận nào được khai báo. Hãy dùng biểu mẫu phía trên để thêm nhãn mới!
⚠️ Thông Báo

Vui lòng nhập đầy đủ các trường bắt buộc:

  • {{err}}

Chi tiết KPI

{{kpiDetailModal.data.KPIName}}

{{kpiDetailModal.data.Unit || '---'}} {{kpiDetailModal.data.Status}}

Chiều hướng

{{kpiDetailModal.data.Direction || '---'}}

Cách tính tỷ lệ đạt

{{kpiDetailModal.data.CalcMethod || '---'}}

Loại KPI

{{kpiDetailModal.data.KPIType || 'Lũy kế'}}

Điểm thách thức

{{kpiDetailModal.data.Complexity || '0'}}/10

Giải thích ý nghĩa KPI

{{kpiDetailModal.data.Description || 'Chưa có dữ liệu'}}

Mục đích sử dụng KPI

Nguồn lấy dữ liệu

{{kpiDetailModal.data.DataSource || 'Chưa có dữ liệu'}}

Mô tả cách tính

{{kpiDetailModal.data.FormulaNote || 'Chưa có dữ liệu'}}

QUẢN LÝ NHÃN, MỤC TIÊU VÀ KPI

Đang lưu toàn bộ cấu trúc...

Chỉ số KPI / Cấu trúc gốc Thuộc Mục tiêu (Thay đổi) Gán Nhãn Phụ trách Trạng thái (12 Tháng)

Logic tự động đồng bộ (Auto-sync):

Khi bạn thay đổi Nhãn của KPI hoặc chuyển KPI sang Mục tiêu khác, hệ thống sẽ tự động cấu trúc lại dữ liệu tương ứng. Dữ liệu sẽ được lưu khi bấm nút Lưu phía dưới.

KHAI BÁO & GIAO KPI CHO BỘ PHẬN

Phân bổ chỉ số chiến lược từ Thư viện KPI mẫu

1. Cấu hình giao KPI hàng loạt

{{ obj.Name }}
Chưa có mục tiêu chiến lược nào.
Không có bộ phận nào khả dụng hoặc bạn không có quyền giao KPI cho các bộ phận hiện tại.
|

2. Chọn KPI mẫu từ thư viện

Đã chọn: {{ assignModalSelectedKpiIds.size }}
Tên chỉ số & Đặc tả ĐVT / Chu kỳ
{{ kpi.KPIName }} {{kpi.Description}}
ĐVT: {{ kpi.Unit || 'N/A' }} {{ kpi.KPIType || 'Lũy kế' }}
Không tìm thấy KPI nào khớp với từ khóa tìm kiếm.
KPI được chọn sẽ tự động được gán target = 100 nếu thuộc loại "Tự đánh giá", hoặc = 0 cho loại khác.

Khai thác chỉ số mục tiêu

{{ explorerObj.Name }}

Viễn cảnh: {{ explorerObj.PerspectiveID }}

{{explorerObj.Description || 'Chưa có mô tả chi tiết cho mục tiêu này...'}}

Tiến độ trung bình

{{ explorerObjAvgProgress }}%

Số lượng KPIs

{{ explorerObjKpis.length }} KPIs

KPI Đạt chỉ tiêu

{{ explorerObjKpis.filter(k => k.progress >= 90).length }} / {{ explorerObjKpis.length }}

KPI Cần cải thiện

{{ explorerObjKpis.filter(k => 90 > k.progress && k.progress >= 60).length }} / {{explorerObjKpis.length}}

Danh sách KPIs chi tiết

Mã KPI Tên chỉ số KPI con Phòng ban Đơn vị Tiến độ Trạng thái
{{ kpi.id }} {{ kpi.name }}
Chung
{{ kpi.unit || 'N/A' }} {{ formatNumber(kpi.progress) }}% Hoàn thành Khá tốt Cảnh báo
Mục tiêu này chưa có chỉ số KPI nào được thiết lập.

Cập nhật Nhãn phụ trách

Đang chỉnh sửa: {{ editLabelNameDisplay }}

Chọn các Nhãn phòng ban phụ trách:

Chưa có dữ liệu Nhãn phòng ban.

Lưu ý: Thao tác này sẽ áp dụng thay đổi Nhãn cho toàn bộ 12 tháng của KPI này trong cấu hình kế hoạch hiện tại.

Link báo cáo

{{customReportLinkDialog.title}}

Link này đi theo KPI, nhãn và năm đang xem. Để trống rồi bấm Lưu nếu muốn xóa link.

{{customReportLinkDialog.error}}

{{customPromptDialog.title}}

Giấy phép

Kích hoạt giấy phép HCWPlan

{{ licenseActivateDialog.error }}

{{customDialog.headerLabel}}

{{customDialog.title}}

{{customDialog.message}}

Cảnh báo

Xung đột dữ liệu!

Dữ liệu đã được người dùng khác cập nhật trong khi bạn đang chỉnh sửa.
Bạn muốn làm gì?

Đang tải lại dữ liệu...

Vui lòng chờ trong giây lát

Tải dữ liệu mới thành công!

Dữ liệu đã được cập nhật

Lỗi tải dữ liệu!

Vui lòng thử lại

Cấu hình đơn vị KPI

Đơn vị hiện có

Chưa có đơn vị nào.

Thêm đơn vị mới

{{row.DisplayOrder}}
Bấm vào đây để thêm đơn vị mới
Đang thêm {{bulkNewUnits.length}} đơn vị
Cấu hình phân loại nhãn KPI

Nhãn hiện có

Chưa có phân loại nhãn nào.

Thêm nhãn mới

{{row.DisplayOrder}}
Bấm để thêm dòng nhãn mới
Đang thêm {{bulkNewSources.length}} nhãn mới