fix: 移除规避率30%打折,已解决风险直接用预估损失作为规避价值
- 后端移除 RISK_AVOIDANCE_RATE,adjustedLossAvoided = lossAvoided - 前端移除规避率列和30%说明,表格直接展示预估损失=规避损失 - 价值计算说明更新:系统已发现并解决,全部潜在损失即为规避价值
This commit is contained in:
@@ -1630,8 +1630,6 @@ export async function getAnnualValueReport(orgId: string, year: number) {
|
||||
}),
|
||||
])
|
||||
|
||||
const RISK_AVOIDANCE_RATE = 0.3
|
||||
|
||||
// 按身份证号去重(同一人可能有多条 Employee 记录),无身份证号时回退到 employeeId
|
||||
// 同时按风险类型去重(同一风险被重复创建解决多次,只取 estimatedLoss 最大的一条)
|
||||
const personBreakdown: Record<string, {
|
||||
@@ -1712,7 +1710,7 @@ export async function getAnnualValueReport(orgId: string, year: number) {
|
||||
department: p.department,
|
||||
riskCount: details.length,
|
||||
lossAvoided,
|
||||
adjustedLoss: Math.round(lossAvoided * RISK_AVOIDANCE_RATE),
|
||||
adjustedLoss: lossAvoided,
|
||||
details,
|
||||
}
|
||||
})
|
||||
@@ -1730,10 +1728,10 @@ export async function getAnnualValueReport(orgId: string, year: number) {
|
||||
}))
|
||||
|
||||
// 价值计算
|
||||
// 1. 规避损失 = 已解决风险的预估损失之和 × 0.3(规避率30%,非每项风险都会演变为实际仲裁)
|
||||
// 1. 规避损失 = 已解决风险的预估损失之和(系统已发现并解决,全部潜在损失即为规避价值)
|
||||
// 2. 节约工时 = AI 查询 * 0.5h + 合同审查 * 1h + 算薪批次 * 2h + 制度公示 * 1h
|
||||
// 3. 节约成本 = 节约工时 * 100 元/h(HR 平均时薪)
|
||||
const adjustedLossAvoided = Math.round(lossAvoided * RISK_AVOIDANCE_RATE)
|
||||
const adjustedLossAvoided = lossAvoided
|
||||
const aiTimeSaved = aiConversations * 0.5 + aiReviews * 1.0
|
||||
const payrollTimeSaved = payrollBatches * 2.0
|
||||
const policyTimeSaved = policiesPublished * 1.0
|
||||
@@ -1741,7 +1739,7 @@ export async function getAnnualValueReport(orgId: string, year: number) {
|
||||
const timeSaved = Math.round(aiTimeSaved + payrollTimeSaved + policyTimeSaved + contractTimeSaved)
|
||||
const costSaved = timeSaved * 100
|
||||
|
||||
// 总价值 = 规避损失(打折后) + 节约成本
|
||||
// 总价值 = 规避损失 + 节约成本
|
||||
const totalValue = adjustedLossAvoided + costSaved
|
||||
|
||||
// ROI = 总价值 / 系统成本(年费 12000 元),上限 9999%
|
||||
|
||||
@@ -231,9 +231,7 @@ export default function AnnualValueReport() {
|
||||
<th className="text-left py-2 px-2 font-medium">员工</th>
|
||||
<th className="text-left py-2 px-2 font-medium">部门</th>
|
||||
<th className="text-center py-2 px-2 font-medium">风险数</th>
|
||||
<th className="text-right py-2 px-2 font-medium">原始损失</th>
|
||||
<th className="text-right py-2 px-2 font-medium">规避率</th>
|
||||
<th className="text-right py-2 px-2 font-medium">规避损失(×30%)</th>
|
||||
<th className="text-right py-2 px-2 font-medium">预估损失</th>
|
||||
<th className="text-left py-2 px-2 font-medium">风险明细</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -243,8 +241,6 @@ export default function AnnualValueReport() {
|
||||
<td className="py-2 px-2 font-medium">{emp.name}</td>
|
||||
<td className="py-2 px-2 text-gray-600">{emp.department}</td>
|
||||
<td className="py-2 px-2 text-center">{emp.riskCount}</td>
|
||||
<td className="py-2 px-2 text-right text-gray-600">¥{emp.lossAvoided.toLocaleString()}</td>
|
||||
<td className="py-2 px-2 text-right text-gray-400">30%</td>
|
||||
<td className="py-2 px-2 text-right font-bold text-safe">¥{emp.adjustedLoss.toLocaleString()}</td>
|
||||
<td className="py-2 px-2">
|
||||
<div className="space-y-0.5">
|
||||
@@ -264,9 +260,7 @@ export default function AnnualValueReport() {
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr className="border-t-2 border-gray-200 font-bold">
|
||||
<td className="py-2 px-2" colSpan={3}>合计</td>
|
||||
<td className="py-2 px-2 text-right">¥{(report.lossAvoided || 0).toLocaleString()}</td>
|
||||
<td className="py-2 px-2"></td>
|
||||
<td className="py-2 px-2" colSpan={2}>合计</td>
|
||||
<td className="py-2 px-2 text-right text-safe">¥{(report.adjustedLossAvoided || 0).toLocaleString()}</td>
|
||||
<td className="py-2 px-2"></td>
|
||||
</tr>
|
||||
@@ -282,7 +276,7 @@ export default function AnnualValueReport() {
|
||||
<div className="space-y-1 text-xs text-gray-600">
|
||||
<div className="flex items-start gap-1.5">
|
||||
<span className="w-1.5 h-1.5 rounded-full bg-safe mt-1 flex-shrink-0" />
|
||||
<span><b>规避损失</b>:已解决风险的预估损失之和 × 30%规避率(依据《劳动合同法》量化模型,单条上限按法定标准封顶)</span>
|
||||
<span><b>规避损失</b>:已解决风险的预估损失之和(系统已发现并解决,全部潜在损失即为规避价值,依据《劳动合同法》量化模型,单条上限按法定标准封顶)</span>
|
||||
</div>
|
||||
<div className="flex items-start gap-1.5">
|
||||
<span className="w-1.5 h-1.5 rounded-full bg-blue-500 mt-1 flex-shrink-0" />
|
||||
@@ -294,7 +288,7 @@ export default function AnnualValueReport() {
|
||||
</div>
|
||||
<div className="flex items-start gap-1.5">
|
||||
<span className="w-1.5 h-1.5 rounded-full bg-amber-500 mt-1 flex-shrink-0" />
|
||||
<span><b>总价值</b>:规避损失(打折后) + 节约成本</span>
|
||||
<span><b>总价值</b>:规避损失 + 节约成本</span>
|
||||
</div>
|
||||
<div className="flex items-start gap-1.5">
|
||||
<span className="w-1.5 h-1.5 rounded-full bg-gray-400 mt-1 flex-shrink-0" />
|
||||
|
||||
Reference in New Issue
Block a user