03
数据准备
考勤数据准备
attendance-data-prep
把某客户某月原始考勤源数据整理成「按员工分文件夹」的结构化目录,产出标准化员工清单
reference_roster.xlsx,供下游直接消费。负责「数据从哪来、有哪些人、文件归谁」。⚡
TRIGGERS
触发场景▸拿到一个月原始考勤源目录(msg/Excel/PDF/图片混杂)
▸要先抽附件、AI 视觉预处理、按人归档
▸下游 remarks / exception-review 需要 reference_roster
↹
INPUT & OUTPUT
输入 / 产出↘ INPUT · 输入
- data/raw/<目录名> 源目录
- 可选底表(账单/工资/人员清单)
- .msg 附件 / 邮件正文 / PDF / 图片
↗ OUTPUT · 产出
- reference_roster.xlsx 员工清单
- 数据收集汇总.xlsx · 人工复核清单.xlsx
- employees/<姓名>/ 按人归档 + _sources.json
- vision_extracted_records.jsonl + 视觉提取结果.xlsx
- _email_texts.jsonl 邮件正文(供 remarks 消费)
🪜
STEPS
处理流程- 1抽取 .msg 附件解出邮件附件到
attachments/。 - 2PDF 逐页渲染 PNG考勤不依赖 PDF 文本层;即使是文字型 PDF 也逐页出图交给视觉识别。
- 3AI 视觉结构化预处理逐图、逐页 PNG 读取,产出 vision_extracted_records(保留 source_file / page,不猜身份证和小时数)。
- 4确定底表单候选可继续(须说明依据);多候选必须暂停问用户;无候选进无底表模式。
- 5确定目标员工范围有底表以底表为准;无底表先视觉 + 文件名候选,再由 LLM 语义复核,人工确认前不生成 roster。
- 6按员工归档优先级:Excel 内姓名 > 文件名 > 邮件主题 > 视觉结果 > _unmatched/。
⇄
PIPELINE
与其他 skill 衔接✓
ACCEPTANCE
闭环验收- ✓reference_roster / 数据收集汇总 / 人工复核清单 / _prep_summary / _prep_questions / _vision_manifest 均生成。
- ✓有底表时底表员工全覆盖;无底表时结构化 Excel + 已确认视觉 + 已确认候选均覆盖。
- ✓数字自洽:员工数 = 有文件员工 + 缺数据员工;未归属文件数与 unmatched_file 一致。
- ✓人工复核清单中可处理附件已被读取并回写视觉结果,再重跑归档刷新状态。
⊘
ANTI-PATTERNS
反例检查✗
公司名、部门名、月份标签被误识别成人名。
✗
manifest 仍 needs_pdf_preprocess,却把 PDF 当已处理。
✗
视觉记录缺 source_file / page,下游无法追溯。
✗
把签到明细/打卡截图直接当成已审批加班。
✗
同名员工只靠姓名归档,未用身份证号或待追问区分。
⌘
RUN
运行命令uv run python skills/attendance/attendance-data-prep/scripts/extract_msg_attachments.py \
data/raw/<目录名> outputs/<目录名>/attachments
uv run python skills/attendance/attendance-data-prep/scripts/preprocess_pdfs_for_vision.py \
outputs/<目录名> --source-dir data/raw/<目录名> \
--source-dir outputs/<目录名>/attachments
uv run python skills/attendance/attendance-data-prep/scripts/prepare_attendance_data.py \
data/raw/<目录名> outputs/<目录名> \
--attachments-dir outputs/<目录名>/attachments \
--base-table data/raw/<目录名>/<底表.xlsx>