feat: 数字员工财务报告体系与定时提醒及看板快照调度
- 新增数字员工财务报告生成、邮件投递与渲染调度器 - 引入员工画像扫描调度与定时提醒任务 - 完善财务看板快照、排行口径与部门人员占比计算 - 优化数字员工工作看板仪表盘与技能目录 - 增强前端总览页图表、工作台摘要与顶部导航栏交互 - 新增差旅申请规划推动提醒与报销创建会话状态管理 - 补充财务报告、看板调度、数字员工工作记录测试覆盖
This commit is contained in:
@@ -18,9 +18,31 @@ const KNOWLEDGE_JOB_TYPES = new Set([
|
||||
'finance_policy_knowledge_organize'
|
||||
])
|
||||
|
||||
export const VISIBLE_DIGITAL_EMPLOYEE_WORK_TASK_TYPES = new Set([
|
||||
'finance_dashboard_snapshot',
|
||||
'digital_employee_reminder_scan',
|
||||
'employee_behavior_profile_scan',
|
||||
'department_expense_baseline_accumulate',
|
||||
'budget_overrun_precontrol_evaluate',
|
||||
'multi_evidence_consistency_evaluate',
|
||||
'travel_spatiotemporal_consistency_evaluate',
|
||||
'global_risk_scan',
|
||||
'finance_policy_knowledge_organize'
|
||||
])
|
||||
|
||||
const DAILY_COMPACT_TASK_TYPES = new Set([
|
||||
'finance_dashboard_snapshot'
|
||||
])
|
||||
|
||||
const TASK_TYPE_LABELS = {
|
||||
finance_dashboard_snapshot: '财务经营快照沉淀',
|
||||
digital_employee_reminder_scan: '定时提醒与待办扫描',
|
||||
global_risk_scan: '财务风险图谱巡检',
|
||||
employee_behavior_profile_scan: '员工行为画像巡检',
|
||||
department_expense_baseline_accumulate: '部门费用基线沉淀',
|
||||
budget_overrun_precontrol_evaluate: '预算占用与超标预警',
|
||||
multi_evidence_consistency_evaluate: '单据多凭证一致性评估',
|
||||
travel_spatiotemporal_consistency_evaluate: '差旅时空一致性评估',
|
||||
risk_clue_collect: '风险线索归集',
|
||||
finance_policy_knowledge_organize: '知识制度整理',
|
||||
knowledge_index_sync: '知识制度整理',
|
||||
@@ -29,10 +51,16 @@ const TASK_TYPE_LABELS = {
|
||||
}
|
||||
|
||||
const TASK_CODE_TO_TYPE = {
|
||||
'task.hermes.finance_dashboard_snapshot': 'finance_dashboard_snapshot',
|
||||
'task.hermes.digital_employee_reminder_scan': 'digital_employee_reminder_scan',
|
||||
'task.hermes.global_risk_scan': 'global_risk_scan',
|
||||
'task.hermes.employee_behavior_profile_scan': 'employee_behavior_profile_scan',
|
||||
'task.hermes.risk_rule_discovery': 'risk_clue_collect',
|
||||
'task.hermes.finance_policy_knowledge_organize': 'finance_policy_knowledge_organize'
|
||||
'task.hermes.department_expense_baseline_accumulate': 'department_expense_baseline_accumulate',
|
||||
'task.hermes.budget_overrun_precontrol_evaluate': 'budget_overrun_precontrol_evaluate',
|
||||
'task.hermes.multi_evidence_consistency_evaluate': 'multi_evidence_consistency_evaluate',
|
||||
'task.hermes.travel_spatiotemporal_consistency_evaluate': 'travel_spatiotemporal_consistency_evaluate',
|
||||
'task.hermes.finance_policy_knowledge_organize': 'finance_policy_knowledge_organize',
|
||||
'task.hermes.risk_rule_discovery': 'risk_clue_collect'
|
||||
}
|
||||
|
||||
function toObject(value) {
|
||||
@@ -52,6 +80,12 @@ function resolveTaskTypeFromToolName(value) {
|
||||
if (name.includes('financial_risk_graph')) {
|
||||
return 'global_risk_scan'
|
||||
}
|
||||
if (name.includes('finance_dashboard_snapshot') || name.includes('finance_dashboard')) {
|
||||
return 'finance_dashboard_snapshot'
|
||||
}
|
||||
if (name.includes('digital_employee_reminder') || name.includes('reminder')) {
|
||||
return 'digital_employee_reminder_scan'
|
||||
}
|
||||
if (name.includes('employee_behavior_profile')) {
|
||||
return 'employee_behavior_profile_scan'
|
||||
}
|
||||
@@ -128,6 +162,43 @@ export function resolveWorkRecordTaskType(run) {
|
||||
return ''
|
||||
}
|
||||
|
||||
export function isVisibleDigitalEmployeeWorkRecord(run) {
|
||||
const taskType = resolveWorkRecordTaskType(run)
|
||||
return VISIBLE_DIGITAL_EMPLOYEE_WORK_TASK_TYPES.has(taskType)
|
||||
}
|
||||
|
||||
function resolveWorkRecordDayKey(run) {
|
||||
const date = new Date(run?.started_at || run?.finished_at || '')
|
||||
if (Number.isNaN(date.getTime())) {
|
||||
return 'unknown'
|
||||
}
|
||||
return date.toISOString().slice(0, 10)
|
||||
}
|
||||
|
||||
export function compactDigitalEmployeeWorkRecords(items = []) {
|
||||
const rows = []
|
||||
const compactedKeys = new Set()
|
||||
|
||||
for (const run of items) {
|
||||
const taskType = resolveWorkRecordTaskType(run)
|
||||
if (!VISIBLE_DIGITAL_EMPLOYEE_WORK_TASK_TYPES.has(taskType)) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (DAILY_COMPACT_TASK_TYPES.has(taskType)) {
|
||||
const key = `${taskType}:${resolveWorkRecordDayKey(run)}`
|
||||
if (compactedKeys.has(key)) {
|
||||
continue
|
||||
}
|
||||
compactedKeys.add(key)
|
||||
}
|
||||
|
||||
rows.push(run)
|
||||
}
|
||||
|
||||
return rows
|
||||
}
|
||||
|
||||
export function resolveWorkRecordTaskLabel(run) {
|
||||
const taskType = resolveWorkRecordTaskType(run)
|
||||
return TASK_TYPE_LABELS[taskType] || ''
|
||||
@@ -135,6 +206,12 @@ export function resolveWorkRecordTaskLabel(run) {
|
||||
|
||||
export function resolveWorkRecordProductKind(run) {
|
||||
const taskType = resolveWorkRecordTaskType(run)
|
||||
if (taskType === 'finance_dashboard_snapshot') {
|
||||
return 'finance_snapshot'
|
||||
}
|
||||
if (taskType === 'digital_employee_reminder_scan') {
|
||||
return 'reminder_scan'
|
||||
}
|
||||
if (taskType === 'global_risk_scan') {
|
||||
return 'risk_graph'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user