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

{{ currentMonth + 1 }}月预计到账

¥ {{ boardMain.int }} {{ boardMain.frac }}

{{ settings.payDayB }}日 {{ money(payoutThisB) }} · {{ settings.payDayA }}日 {{ money(payoutThisA) }}

出勤 {{ monthStats.workDays }}/{{ settings.fullDays }} 工时 {{ fmt(monthStats.totalHours) }}h 工时收入 {{ money(monthStats.basePay) }}
日一二三四五六
{{ day }} {{ day }} ¥
{{ getRecord(day).shift_type === 'day' ? '白' : '夜' }} {{ fmt(getRecord(day).hours) }}h 休 假 —
线上 → 当月{{ settings.payDayA }}号发 · 线下 → 次月{{ settings.payDayB }}号发

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

¥当月{{ settings.payDayA }}号发薪 · ¥当月{{ settings.payDayB }}号发薪
本月到账 时薪 {{ settings.rate }} 元/h

{{ currentMonth + 1 }}月{{ settings.payDayB }}日

{{ prevLabel.month + 1 }}月下半月 {{ fmt(prevStats.h2) }}h + 奖惩 {{ signed(prevStats.adjustNet) }}

{{ money(payoutThisB) }}
{{ prevLabel.month + 1 }}月奖惩{{ prevStats.finalized ? '已定稿' : (prevStats.adjustStatus === 'draft' ? '草稿未定稿' : '待申报') }}

{{ currentMonth + 1 }}月{{ settings.payDayA }}日

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

{{ money(payoutThisA) }}
本月现金流合计 {{ money(payoutThisB + payoutThisA) }}

本月工时

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

{{ fmt(monthStats.h1) }}h

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

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

{{ fmt(monthStats.h2) }}h

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

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

本月奖惩

次月{{ 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 + ')' : '(未达' + 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 }}日预估

{{ money(payoutNextB) }}
本月下半月工时 {{ fmt(monthStats.h2) }}h{{ money(monthStats.h2 * settings.rate) }}
本月奖惩结算{{ signed(monthStats.adjustNet) }}
奖惩口径 {{ monthStats.finalized ? '已定稿' : '预估(未申报)' }}

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

诊断

本月还没有打卡记录

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

去打卡
设置

薪酬规则

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

奖惩标准

发放周期

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

班次默认工时

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

数据

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

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

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

工时计入 {{ selectedDay <= settings.cutoff ? `${currentMonth + 1}月${settings.payDayA}号` : `${nextLabel.month + 1}月${settings.payDayB}号` }} · 奖惩次月{{ settings.payDayB }}号结算

今日到账 奖惩待定稿

{{ selectedPayInfo.desc }}

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

以下奖惩不计入当月工资,次月{{ settings.payDayB }}号结算

查获 +{{ 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 }}