@@ -370,12 +370,16 @@
- 奖惩净额
+ 奖惩净额(不含满勤奖)
{{ monthStats.finalized ? '已定稿' : '预估·待审核' }}
- {{ signed(monthStats.adjustNet) }}
+ {{ signed(monthStats.reviewNet) }}
+
+ 满勤奖(另计,月底定)
+ {{ monthStats.fullBonus > 0 ? '+' + money(monthStats.fullBonus) : '¥0' }}
+
合计应得
{{ money(earnedTotal) }}
@@ -1121,12 +1125,15 @@ createApp({
const finalized = !!(adj && adj.status === 'final' && Number.isFinite(Number(adj.finalAmount)));
const reviewAmount = finalized ? Number(adj.finalAmount) : rawReview;
const reviewDelta = finalized ? reviewAmount - rawReview : 0;
+ // 奖惩净额(不含满勤奖):用于「挣得」口径——满勤奖月底才确定,不混进已确认的劳动所得。
+ const reviewNet = reviewAmount;
+ // 发放净额(含满勤奖):进账/结转实际会发这笔,满勤奖次月 payDayB 确实到账。
const adjustNet = fullBonus + reviewAmount;
return {
h1, h2, totalHours, workDays, dayShifts, nightShifts, restDays, leaveDays,
foundCount, missedCount, otherPenalties,
- fullBonus, foundBonus, missedPenalty, adjustNet,
+ fullBonus, foundBonus, missedPenalty, adjustNet, reviewNet,
rawReview, reviewAmount, reviewDelta, finalized,
adjustStatus: adj ? adj.status : null,
adjustNote: adj && adj.note ? adj.note : '',
@@ -1149,9 +1156,10 @@ createApp({
// ===== 两套记账口径(这是页面之前最主要的歧义源) =====
// 归属制「挣得」:本月 1–月底干出来的钱,不管什么时候发。打一天卡当天就涨。
+ // 只含工时 + 已确认奖惩(满勤奖月底才确定,不混入挣得,单独展示)。
// 收付制「进账」:本月卡里实际进的钱,含上月结转部分。
// 两者永远不相等,必须各自具名、分区展示,不能都叫「本月」。
- const earnedTotal = computed(() => monthStats.value.basePay + monthStats.value.adjustNet);
+ const earnedTotal = computed(() => monthStats.value.basePay + monthStats.value.reviewNet);
const cashTotal = computed(() => payoutThisB.value + payoutThisA.value);
// 「挣得」拆成两笔落地时间:上半月工时随本月 payDayA;下半月工时 + 奖惩结转次月 payDayB。
// 这一行是两套口径之间唯一的桥,解释了为何挣得 ≠ 进账。
@@ -1399,7 +1407,7 @@ createApp({
`出勤 ${s.workDays}/${c.fullDays} 天(白${s.dayShifts}/夜${s.nightShifts}) | 总工时 ${fmt(s.totalHours)}h`,
`上半月 ${fmt(s.h1)}h → ${money(s.h1 * c.rate)} 下半月 ${fmt(s.h2)}h → ${money(s.h2 * c.rate)}`,
``,
- `【${m}月挣得·干活口径】${money(earnedTotal.value)}`,
+ `【${m}月挣得】${money(earnedTotal.value)}`,
`工时收入 ${money(s.basePay)}(确定) | 奖惩净额 ${signed(s.adjustNet)}(${s.finalized ? '已定稿' : '预估·待审核'})`,
`何时到手:${m}/${settings.payDayA} ${money(earnedSplit.value.paid)}(上半月工时) | ${nm}/${settings.payDayB} ${money(earnedSplit.value.carry)}(结转:下半月工时+奖惩)`,
``,