05
审核 · 异常
考勤异常审核
attendance-exception-review
接在 attendance-data-prep 之后,把资料来源和异常问题整理成可复核的考勤异常审核工作簿——来源清单 / 员工覆盖 / 异常清单 / 待追问 / 处理日志。不直接生成最终考勤备注,也不猜测截图、审批结论或客户特殊口径。
⚡
TRIGGERS
触发场景▸考勤异常审核 / 考勤待追问
▸缺卡审批核验
▸attendance exception review
▸
PREREQUISITE
前置条件- 1extract_msg_attachments.py从
data/raw/<目录名>抽出邮件附件到outputs/<目录名>/attachments。 - 2preprocess_pdfs_for_vision.py对 PDF 做视觉预处理,覆盖
data/raw与attachments两个来源目录。 - 3prepare_attendance_data.py整理考勤资料,指定
--attachments-dir与--base-table底表。
推荐先跑 data-prep 的这三个脚本,再运行本 skill;本段全部为 data-prep 脚本,详见 attendance-data-prep。
↹
INPUT & OUTPUT
输入 / 产出↘ INPUT · 输入
attachments/(data-prep 抽出的附件目录)reference_roster.xlsx(底表 roster)vision_extracted_records.jsonl(视觉结构化记录)<config.json>(判异常口径,命令传--config)
↗ OUTPUT · 产出
exception_review.xlsx- 固定 5 sheet:来源清单 · 员工覆盖 · 异常清单 · 待追问 · 处理日志
🪜
STEPS
处理流程- 1建来源清单逐文件登记来源类型、归属员工、解析状态、置信度。
- 2算员工覆盖底表员工是否有考勤资料、来源数、来源列表;roster 有员工无来源 →
missing_attendance_source。 - 3出异常清单缺卡、审批缺失、假别不明、夜班跨天、视觉低置信度等逐条列出。
- 4列待追问面向 HR / 客户 / 员工的确认问题和建议动作;Excel 可解析但无法确定员工 →
missing_employee_name。 - 5写处理日志本次规则、文件数、员工数、异常数、解析失败原因,与各 sheet 可核对。
▤
OUTPUTS
产物结构来源清单
文件、来源类型、归属员工、解析状态、置信度。
员工覆盖
底表员工、是否有考勤资料、来源数、来源列表。
异常清单
缺卡、审批缺失、假别不明、夜班跨天、视觉低置信度等。
待追问
面向 HR / 客户 / 员工的确认问题和建议动作。
处理日志
本次规则、文件数、员工数、异常数、解析失败原因。
⊞
CORE FIELDS
核心固定字段
client_nameemployee_nameid_numberpay_periodsource_typesource_filesheet_or_pageissue_typeseverityownerquestionsuggested_actionevidence_summaryconfidencestatus
⚖
PRINCIPLES
处理原则- ✓图片 / PDF / 截图必须依赖
vision_extracted_records.jsonl或人工复核,不直接猜结果。 - ✓员工在 roster 中但没有来源,写入
missing_attendance_source。 - ✓Excel 可解析但无法确定员工,写入
missing_employee_name。 - ✓邮件正文和视觉结果只作为待核验证据,不静默覆盖最终备注。
⇄
PIPELINE
与其他 skill 衔接←
上游 attendance-data-prep:本 skill 基于其输出生成审核工作簿。
→
下游 attendance-remarks 算最终考勤备注。(图谱推断;源仅声明本 skill 不直接生成最终备注。)
✓
ACCEPTANCE
闭环验收- ✓固定 sheet 来源清单 / 员工覆盖 / 异常清单 / 待追问 / 处理日志 全部存在。
- ✓员工覆盖中 roster 员工数与
reference_roster.xlsx一致;没有来源的员工必须有missing_attendance_source。 - ✓低置信度视觉记录、解析失败文件、无法确定员工的 Excel 都进入异常清单或待追问。
- ✓处理日志中的文件数、员工数、异常数与各 sheet 可核对。
交付说明应包含:异常总数、待追问总数、最高优先级问题和建议下一步。
⊘
ANTI-PATTERNS
反例检查✗
图片 / PDF / 截图没有
vision_extracted_records.jsonl 或人工记录,却被写成已解析。✗
来源清单显示解析失败,但异常清单和处理日志没有对应记录。
✗
员工在 roster 中无资料,却没有
missing_attendance_source。✗
低置信度视觉记录没有进入待追问。
↻
FAILURE & RETRY
失败重试✗
缺少
reference_roster.xlsx 或配置文件时,先回到 attendance-data-prep 或补配置,不要生成半成品。✗
解析单个 Excel 失败时,记录到处理日志,继续处理其他文件;失败文件进入待追问。
✗
视觉记录缺失时,先补跑 data-prep 的视觉预处理或人工复核,再重跑本 skill。
✦
LESSONS
复盘沉淀- ✓低置信度视觉结果若没有进入待追问,人工审核会漏掉扫描件和截图风险。
- ✓员工覆盖、异常清单、处理日志的数量不一致时,不能只看最终工作簿是否生成。
- ✓图片 / PDF 不能直接猜结论,必须依赖视觉结构化记录或人工复核。
异常类型、追问口径或来源归类出现新模式时,先记录到 LESSONS.md;稳定后再补到处理原则、脚本规则或测试用例。
⌘
RUN
运行命令uv run python skills/attendance/attendance-exception-review/scripts/build_exception_review.py \
outputs/<目录名>/attachments \
<YYYYMM> \
outputs/<目录名>/exception_review.xlsx \
--source-dir data/raw/<目录名> \
--reference-summary outputs/<目录名>/reference_roster.xlsx \
--config <config.json>