04
数据准备 · 来源归一

考勤来源归一

attendance-source-normalizer
🧲
数据准备 skills/attendance/
把散落在源目录、.msg 附件、邮件正文、视觉记录里的考勤资料整理成统一审核入口负责「资料是什么、属于谁、是什么证据类型」。主要服务 B 型 / 邮件凭证型客户。

FLOW TYPES

适用客户
珠海基石
钉钉汇总表 + 大量 .msg 补卡/加班/出差/年假凭证
奥托立夫
钉钉考勤报表 + 补卡/加班/出差/请假/外出子表
复宏汉霖·英伟达
公司名 + 员工名 + 考勤/审批 .msg,夹杂图片/PDF/Excel

TRIGGERS

触发场景
大量 .msg 补卡/加班/出差凭证要归集
多来源混杂,要先认清「谁的、什么证据」
B 型客户交付前要一份可审计的来源清单

INPUT & OUTPUT

输入 / 产出
↘ INPUT · 输入
  • data/raw/<目录名>
  • attachments/(已抽附件)
  • reference_roster.xlsx
  • _email_texts.jsonl · vision_extracted_records.jsonl
↗ OUTPUT · 产出
  • normalized_sources.xlsx:来源归一 · 归属覆盖 · 待追问
🪜

STEPS

处理流程
  1. 1
    汇集所有来源
    msg、Excel、PDF、图片全部进「来源归一」,不漏原始邮件。
  2. 2
    归属员工
    从 roster、邮件主题、文件名、视觉记录多路匹配;匹配不到进「待追问」。
  3. 3
    分证据类型
    至少区分补卡、加班、出差/公出、外出、请假/休假、考勤汇总、审批。
  4. 4
    算归属覆盖
    每个员工已归属来源数和证据类型,缺口一目了然。

PIPELINE

与其他 skill 衔接
先跑 data-prep 抽附件、预渲染 PDF。
来源清单交给 exception-review 判异常、remarks 算备注。

ACCEPTANCE

闭环验收

ANTI-PATTERNS

反例检查
.msg 已抽附件,但原始邮件没进来源清单。
只按文件名归属,忽略 roster、邮件主题或视觉记录。
把客户名、公司名、部门名当成员工名。
图片/PDF 仍待识别,却被标成已解析考勤结论。

RUN

运行命令
RUN · 运行命令
uv run python skills/attendance/attendance-source-normalizer/scripts/normalize_attendance_sources.py \
  data/raw/<目录名> outputs/<目录名>/normalized_sources.xlsx \
  --attachments-dir outputs/<目录名>/attachments \
  --reference-roster outputs/<目录名>/reference_roster.xlsx \
  --email-texts outputs/<目录名>/_email_texts.jsonl \
  --vision-records outputs/<目录名>/vision_extracted_records.jsonl