{{ currentYear }}年{{ currentMonth + 1 }}月

{{ currentMonth + 1 }}月总劳动应得

¥ {{ boardMain.int }} {{ boardMain.frac }} 已达满勤¥{{ settings.fullBonusPerHour }}/h 出勤 {{ monthStats.workDays }}/{{ settings.fullDays }} · 差 {{ fullDaysLeft }} 天满勤

工时 {{ money(monthStats.basePay) }}({{ fmt(monthStats.totalHours) }}h) + 满勤 {{ money(monthStats.fullBonus) }} + 奖惩 {{ signed(monthStats.reviewNet) }} {{ monthStats.finalized ? '已定稿' : '未定稿' }}

这笔钱什么时候到手

{{ currentMonth + 1 }}/{{ settings.payDayA }} 上半月纯工时({{ payDayAPassed ? '已发' : '待发' }}) {{ money(earnedSplit.paid) }}
{{ nextLabel.month + 1 }}/{{ settings.payDayB }} 下半月+奖惩+满勤(结转) {{ money(earnedSplit.carry) }}
日一二三四五六
{{ day }} {{ day }} ¥
{{ getRecord(day).shift_type === 'day' ? '白' : '夜' }} {{ fmt(getRecord(day).hours) }}h 休 假 —
线上 → 当月{{ settings.payDayA }}号发 · 线下 → 次月{{ settings.payDayB }}号发

奖励与处罚统一在次月{{ settings.payDayB }}号结算

¥当月{{ settings.payDayA }}号发薪 · ¥当月{{ settings.payDayB }}号发薪
{{ currentMonth + 1 }}月总劳动应得 {{ currentMonth + 1 }}/1–{{ currentMonth + 1 }}/{{ daysInMonth }}
工时收入({{ fmt(monthStats.totalHours) }}h) 确定 {{ money(monthStats.basePay) }}
满勤奖{{ monthStats.workDays >= settings.fullDays ? '(已达' + settings.fullDays + '天)' : '(未达' + settings.fullDays + '天,不计)' }} {{ monthStats.workDays >= settings.fullDays ? '已达标' : monthStats.workDays + '/' + settings.fullDays }} {{ monthStats.fullBonus > 0 ? '+' + money(monthStats.fullBonus) : '¥0' }}
奖惩净额{{ monthStats.finalized ? '(审核终稿)' : '(未定稿,不计)' }} {{ monthStats.finalized ? '已定稿' : '待次月初审核' }} {{ signed(monthStats.reviewNet) }}
合计应得 {{ money(earnedTotal) }}

查获在本月只作记录(当前累计 {{ signed(monthStats.rawReview) }});须次月初组长审核、扣除漏查与其他扣款后提交定稿才算奖金。未定稿一律按 ¥0 计入应得,与未达 {{ settings.fullDays }} 天不计满勤奖同一个道理。

何时到手

{{ currentMonth + 1 }}/{{ settings.payDayA }} 上半月工时({{ payDayAPassed ? '已发' : '待发' }}) {{ money(earnedSplit.paid) }}
{{ nextLabel.month + 1 }}/{{ settings.payDayB }} 下半月工时+奖惩+满勤(结转) {{ money(earnedSplit.carry) }}

处罚已超过下半月工时收入,结转那笔按 ¥0 计,所以两笔相加不等于合计应得

{{ currentMonth + 1 }}月进账 时薪 {{ settings.rate }} 元/h · 实际到账
{{ prevLabel.month + 1 }}月

{{ currentMonth + 1 }}/{{ settings.payDayB }}

下半月 {{ fmt(prevStats.h2) }}h{{ prevStats.finalized ? ' + 奖惩 ' + signed(prevStats.adjustNet) : '(奖惩未定稿不计)' }}

{{ money(payoutThisB) }}
{{ prevLabel.month + 1 }}月奖惩{{ prevStats.finalized ? '已定稿·已计入' : (prevStats.adjustStatus === 'draft' ? '草稿未定稿·不计入' : '待审核·不计入') }}
{{ currentMonth + 1 }}月

{{ currentMonth + 1 }}/{{ settings.payDayA }}

上半月 {{ fmt(monthStats.h1) }}h · 纯工时

{{ money(payoutThisA) }}
合计进账 {{ money(cashTotal) }}

{{ currentMonth + 1 }}月工时

上半月 1–{{ settings.cutoff }}日

{{ fmt(monthStats.h1) }}h

{{ money(monthStats.h1 * settings.rate) }}

本月{{ settings.payDayA }}号发

下半月 {{ settings.cutoff + 1 }}日–月底

{{ fmt(monthStats.h2) }}h

{{ money(monthStats.h2 * settings.rate) }}

结转{{ nextLabel.month + 1 }}月{{ settings.payDayB }}号发

出勤天数{{ monthStats.workDays }} 天(白 {{ monthStats.dayShifts }} / 夜 {{ monthStats.nightShifts }})
休息 / 请假{{ monthStats.restDays }} / {{ monthStats.leaveDays }} 天
工时收入合计{{ money(monthStats.basePay) }}

{{ currentMonth + 1 }}月奖惩记录

{{ monthStats.finalized ? '已定稿·次月' + settings.payDayB + '号发' : '待次月初组长审核' }}

下方为日常记录累计,定稿前不计入任何金额口径

查获记录({{ monthStats.foundCount }}件) {{ monthStats.foundBonus > 0 ? '+' + money(monthStats.foundBonus) : '¥0' }}
漏查处罚({{ monthStats.missedCount }}件) {{ monthStats.missedPenalty > 0 ? '-' + money(monthStats.missedPenalty) : '¥0' }}
其他扣款 {{ monthStats.otherPenalties > 0 ? '-' + money(monthStats.otherPenalties) : '¥0' }}
日常累计 (待申报) {{ signed(monthStats.rawReview) }}
审核终稿 {{ monthStats.reviewDelta > 0 ? '上调' : '下调' }}{{ money(Math.abs(monthStats.reviewDelta)) }} {{ signed(monthStats.reviewAmount) }}
满勤奖{{ monthStats.workDays >= settings.fullDays ? '(' + fmt(monthStats.totalHours) + 'h×' + settings.fullBonusPerHour + ',下月' + (nextLabel.month + 1) + '号发)' : '(未达' + settings.fullDays + '天,不计)' }} {{ monthStats.fullBonus > 0 ? '+' + money(monthStats.fullBonus) : '¥0' }}
计入应得合计(满勤+奖惩) {{ signed(monthStats.adjustNet) }}
{{ monthStats.finalized ? '已定稿·已计入' : (monthStats.adjustStatus === 'draft' ? '草稿未定稿·不计入' : '仅记录·不计入') }}

处罚明细

{{ d.day }}日 {{ d.reason }} -{{ money(d.amount) }}

结转到 {{ nextLabel.month + 1 }}月{{ settings.payDayB }}日

{{ currentMonth + 1 }}月总应得里未发的部分 · 与实际到账同额

{{ money(earnedCarry) }}
{{ currentMonth + 1 }}月下半月工时 {{ fmt(monthStats.h2) }}h{{ money(monthStats.h2 * settings.rate) }}
{{ currentMonth + 1 }}月满勤奖{{ monthStats.fullBonus > 0 ? '+' + money(monthStats.fullBonus) : '¥0' }}
{{ currentMonth + 1 }}月奖惩结算{{ monthStats.finalized ? '' : '(未定稿不计)' }}{{ signed(monthStats.reviewNet) }}
奖惩状态 {{ monthStats.finalized ? '已定稿' : '仅记录 ' + signed(monthStats.rawReview) + '·待审核' }}

处罚已超过下半月工时收入,实发按 ¥0 计,差额可能顺延

诊断

本月还没有打卡记录

点这里回日历,选中日期就能记下白班或夜班。
记清一天,这里就会算好预估与满勤进度。

去打卡
设置

薪酬规则

满勤奖按「当月总工时 × 单价」计算,属于奖励,不并入当月工资。

奖惩标准

发放周期

1–{{ settings.cutoff }}日工时 → 当月{{ settings.payDayA }}号发;{{ settings.cutoff + 1 }}日–月底工时 + 当月奖惩 → 次月{{ settings.payDayB }}号一起发。

班次默认工时

打卡默认班次

夜班跨天,工时全部归入开始打卡的那一天。

数据

已存打卡记录 {{ recordCount }} 天

数据仅保存在本机浏览器(localStorage)。
清除浏览器数据会丢失,建议定期导出备份。

{{ currentMonth + 1 }}月{{ selectedDay }}日 打卡

今日到账 奖惩待定稿

{{ selectedPayInfo.desc }}

{{ money(selectedPayInfo.amount) }}
结算工时 {{ draftRecord.hours }} h

以下只是记录,需次月初组长审核定稿后才算金额

查获 +{{ settings.foundBonus }}/件

{{ draftRecord.contraband_found }}

漏查 −{{ settings.missedPenalty }}/件

{{ draftRecord.contraband_missed }}

{{ adjustTarget.year }}年{{ adjustTarget.month + 1 }}月 奖惩核对

次月1–2号汇总申报,以审核终稿为准 · 随{{ settings.payDayB }}号工资发放

日常打卡累计(只读)

查获奖励({{ adjustStats.foundCount }}件){{ adjustStats.foundBonus > 0 ? '+' + money(adjustStats.foundBonus) : '¥0' }}
漏查处罚({{ adjustStats.missedCount }}件){{ adjustStats.missedPenalty > 0 ? '-' + money(adjustStats.missedPenalty) : '¥0' }}
其他扣款{{ adjustStats.otherPenalties > 0 ? '-' + money(adjustStats.otherPenalties) : '¥0' }}
累计小计 {{ signed(adjustStats.rawReview) }}

满勤奖由出勤天数客观判定,不在核对范围内(当前 {{ adjustStats.workDays }}/{{ settings.fullDays }} 天,{{ adjustStats.fullBonus > 0 ? '+' + money(adjustStats.fullBonus) : '未达标' }})。

审核终稿金额

¥

奖多于罚填正数,罚多于奖填负数。例:累计 {{ signed(adjustStats.rawReview) }},审核只认 80 就填 80。

与累计差额 {{ adjustDelta > 0 ? '上调 +' : '下调 -' }}{{ money(Math.abs(adjustDelta)) }}
定稿后奖惩净额(含满勤奖) {{ signed((Number(adjustDraft.finalAmount) || 0) + adjustStats.fullBonus) }}

该金额将并入 {{ adjustTarget.month === 11 ? adjustTarget.year + 1 : adjustTarget.year }}年{{ adjustTarget.month === 11 ? 1 : adjustTarget.month + 2 }}月{{ settings.payDayB }}号发放。

已于 {{ (adjustStats.finalizedAt || '').slice(0, 16).replace('T', ' ') }} 定稿

存草稿不改变发放金额;定稿后按终稿金额计算。日常打卡记录不受影响。

{{ toast }}