From bdd703f9d80b6b8b58afce63de0185f10cb7471a Mon Sep 17 00:00:00 2001
From: OpenClaw Agent
+ + 记录中 {{ signed(monthStats.rawReview) }}(查获 {{ monthStats.foundCount }} 件 · 漏查 {{ monthStats.missedCount }} 件),需次月初组长审核定稿后才计入 +
+@@ -395,11 +401,11 @@ {{ monthStats.fullBonus > 0 ? '+' + money(monthStats.fullBonus) : '¥0' }}
查获在本月只作记录;实际奖金需次月初组长审核、扣除漏查与其他扣款后定稿,金额可能与此处累计不同。
+查获在本月只作记录(当前累计 {{ signed(monthStats.rawReview) }});须次月初组长审核、扣除漏查与其他扣款后提交定稿才算奖金。未定稿一律按 ¥0 计入应得,与未达 {{ settings.fullDays }} 天不计满勤奖同一个道理。
@@ -441,7 +447,7 @@ {{ prevLabel.month + 1 }}月{{ currentMonth + 1 }}/{{ settings.payDayB }}
-下半月 {{ fmt(prevStats.h2) }}h + 奖惩 {{ signed(prevStats.adjustNet) }}
+下半月 {{ fmt(prevStats.h2) }}h{{ prevStats.finalized ? ' + 奖惩 ' + signed(prevStats.adjustNet) : '(奖惩未定稿不计)' }}
{{ currentMonth + 1 }}月奖惩
- 次月{{ settings.payDayB }}号结算 +{{ currentMonth + 1 }}月奖惩记录
+ {{ monthStats.finalized ? '已定稿·次月' + settings.payDayB + '号发' : '待次月初组长审核' }}以下金额不计入当月工资
+下方为日常记录累计,定稿前不计入任何金额口径
处罚已超过下半月工时收入,实发按 ¥0 计,差额可能顺延
@@ -787,7 +794,7 @@ {{ selectedDay <= settings.cutoff ? `${currentMonth + 1}月${settings.payDayA}号` : `${nextLabel.month + 1}月${settings.payDayB}号` }} - · 奖惩次月{{ settings.payDayB }}号结算 + · 奖惩定稿后随次月{{ settings.payDayB }}号发以下奖惩不计入当月工资,次月{{ settings.payDayB }}号结算
+以下只是记录,需次月初组长审核定稿后才算金额
查获 +{{ settings.foundBonus }}/件
@@ -1161,19 +1168,22 @@ createApp({ const foundBonus = foundCount * c.foundBonus; const missedPenalty = missedCount * c.missedPenalty; - // 待申报奖惩 = 查获 - 漏查 - 其他扣款(不含满勤奖),这是需要次月初核对的部分 + // 日常累计奖惩 = 查获 - 漏查 - 其他扣款(不含满勤奖)。 + // 这只是「记录」,不是可发金额:查获多少件当月只记账,实际奖金要等次月初组长 + // 审核提交、扣掉漏查与其他扣款后才确定。 const rawReview = foundBonus - missedPenalty - otherPenalties; - // 已定稿 → 用审核终稿金额;未定稿 → 用日常累计值(预估) + // 与「满勤未达标 → 满勤奖按 0 计」同一个道理: + // 奖惩未定稿 → 一律按 0 计,不进任何应得/发放口径;只有定稿后才用审核终稿金额。 const adj = getMonthAdjust(year, month); const finalized = !!(adj && adj.status === 'final' && Number.isFinite(Number(adj.finalAmount))); - const reviewAmount = finalized ? Number(adj.finalAmount) : rawReview; + const reviewAmount = finalized ? Number(adj.finalAmount) : 0; const reviewDelta = finalized ? reviewAmount - rawReview : 0; - // 奖惩净额(不含满勤奖):查获−漏查−其他扣款,需次月初组长审核定稿;页面单列这一项。 + // 计入应得的奖惩净额:未定稿恒为 0,页面单列这一项并标明「未定稿不计」。 const reviewNet = reviewAmount; - // 发放净额 = 满勤奖 + 奖惩净额。次月 payDayB 这两笔与下半月工时一起发, + // 发放净额 = 满勤奖 + 已定稿奖惩。次月 payDayB 这两笔与下半月工时一起发, // 「挣得」与「结转」两套口径都复用它,保证同名同数。 - const adjustNet = fullBonus + reviewAmount; + const adjustNet = fullBonus + reviewNet; return { h1, h2, totalHours, workDays, dayShifts, nightShifts, restDays, leaveDays, @@ -1464,14 +1474,14 @@ createApp({ `上半月 ${fmt(s.h1)}h → ${money(s.h1 * c.rate)} 下半月 ${fmt(s.h2)}h → ${money(s.h2 * c.rate)}`, ``, `【${m}月总劳动应得】${money(earnedTotal.value)}`, - `工时收入 ${money(s.basePay)}(确定) | 满勤奖 ${money(s.fullBonus)}(${s.workDays >= settings.fullDays ? '已达标' : '未达' + settings.fullDays + '天不计'}) | 奖惩净额 ${signed(s.reviewNet)}(${s.finalized ? '已定稿' : '记录·待次月初审核'})`, + `工时收入 ${money(s.basePay)}(确定) | 满勤奖 ${money(s.fullBonus)}(${s.workDays >= settings.fullDays ? '已达标' : '未达' + settings.fullDays + '天不计'}) | 奖惩 ${signed(s.reviewNet)}(${s.finalized ? '已定稿' : '未定稿不计,仅记录 ' + signed(s.rawReview)})`, `何时到手:${m}/${settings.payDayA} ${money(earnedSplit.value.paid)}(上半月工时) | ${nm}/${settings.payDayB} ${money(earnedSplit.value.carry)}(结转:下半月工时+奖惩+满勤奖)`, ``, `【${m}月奖惩明细·次月${settings.payDayB}号结算】`, `满勤奖 ${s.fullBonus > 0 ? '+' + money(s.fullBonus) : '¥0(未满勤)'}`, `查获 +${money(s.foundBonus)}(${s.foundCount}件) | 漏查 -${money(s.missedPenalty)}(${s.missedCount}件) | 其他 -${money(s.otherPenalties)}`, - `日常累计(待申报)${signed(s.rawReview)}${s.finalized ? ` → 审核终稿 ${signed(s.reviewAmount)}` : ''}`, - `奖惩净额 ${signed(s.reviewNet)}(查获−漏查−扣款,${s.finalized ? '已定稿' : '待次月初审核'})`, + `日常累计(仅记录,未定稿不计入应得)${signed(s.rawReview)}${s.finalized ? ` → 审核终稿 ${signed(s.reviewAmount)}` : ''}`, + `计入应得的奖惩 ${signed(s.reviewNet)}(${s.finalized ? '已定稿' : '未定稿按 ¥0 计,同满勤未达标口径'})`, ``, `【${m}月进账·实际到账】${money(cashTotal.value)}`, `${m}月${settings.payDayB}日 ${money(payoutThisB.value)}(归属${pm}月:下半月 ${fmt(p.h2)}h + 奖惩 ${signed(p.adjustNet)})`,