veyra-timesheet

Use when 用户要填、补或核对公司「Veyra 睿策」工时——说「填工时」「核对工时」「这周工时」「补工时」「工时缺口」「工时未达标通报」,或要把一段时间的真实活动录入工时系统,含请假与加班。仅 macOS。

SKILL.md

GitHub

工时填写

Overview

把一段时间的真实活动核对、补齐到「Veyra 睿策」。

核心原则:活动记录能证明你在哪条线上,证明不了你花了几小时。 项目由证据决定,小时数由用户决定。

When to Use

  • 填、补、核对某段时间的工时;收到周期缺口或未达标通报
  • 当期含请假、调休、加班

不适用:查考勤打卡(企业未开通,拉不到数据);改他人工时。

Quick Reference

命令 用途
bash <skill>/scripts/init.sh 探测环境(默认只探测不改动)。collect.sh 报环境错误时先跑它;把缺失项和将改动的路径告知用户,确认后加 --install 安装。详见 references/setup.md
bash <skill>/scripts/collect.sh [起 止] 采集钉钉侧 + Veyra 侧,输出 bundle 路径。默认本周一至今天
bash <skill>/scripts/digest.sh <bundle> bundle 压成可读文本
opencli veyra timesheet-list --start <起> --end <止> -f json 列已填,含记录 id
opencli veyra timesheet-add --date <日> --project <id> --type <type> --content '<事项>' --hours <n> 新增,成功回 status:201 ok:true id
opencli veyra timesheet-edit --id <记录id> --project <id> --type <type> --content '<事项>' --hours <n> 改已填,不删重填
opencli veyra doctor -f json 环境自检

--project 和 --type 必须成对取自项目池同一条记录的 id 和 type。type 是 lead / deal / project 三者之一,客户商机常见 deal,内部立项和 QTSW-* 才是 project——照抄成 project 会挂错类型。

探测报 VEYRA_CONFIG 缺失时:问用户要平时填工时的网站地址(可并入登录 Veyra 那一步),写入 ~/.opencli/clis/veyra/config.json。

环境装不上或采集报 401 → references/setup.md Veyra 改版导致命令失效 → references/repair.md API 契约、归口顺序、已知坑 → references/veyra-api.md

Workflow

1. 采集

bash <skill>/scripts/collect.sh 2026-08-03 2026-08-07
bash <skill>/scripts/digest.sh <上一步打印的路径>

collect.sh 自带环境检查,不满足会打印原因和修法。不要自己拼 dws / opencli 命令采集——分页、时间格式、听记的两个来源都有坑,已固化在脚本里。

范围默认本周一到今天,日更也用这个默认值,不要改成只采当天。 重采已填过的日子不会造成重复——第 2 步的对账会把它们排除,而且昨天填少了今天能发现并改。只采当天则没有这个纠错机会。

当天的活动采不全。 下午跑,晚上的活动就不在 digest 里。所以当天的小时数是暂定值,次日重跑会按完整证据修正。要一次定稿就采到昨天为止。

采集会把全量钉钉消息(含单聊)落到 $TMPDIR/veyra-timesheet/ 供本地模型读取,不经任何外部服务;系统会定期自动清理该临时目录,用户要求立即清除时跑 rm -rf "$TMPDIR/veyra-timesheet"。一周需数分钟,脚本有进度输出。

可选:若设置了环境变量 TIMESHEET_TRACE_FILE,把其中的 %s 换成日期得到文件路径,存在就优先读它,再用 digest 补缺。用于已有更完整当日记录的场景(例如另一个 skill 产出的、含会议时长与主导/参会标记的提炼稿)。未设置就只用 digest,不要提示用户去装别的东西。

2. 逐日推断并与已填记录对账

digest 开头的「Veyra 已填」是对账基线。逐日比对,把每条分成三类:

类别 处置
缺填 新增
错填(项目挂错或小时与证据不符) 改,不删重填
已正确 不动

跳过对账会产生重复记录,POST /api/timesheets 没有幂等键。范围内已填的日子必须原样保留。

digest 按日期 × 会话组织。⚑ 标记本人有发言的会话,那是本人真正在推的线;无 ⚑ 的是旁观。

没有会议的日子照样上班,看消息量和会话分布,不要按有无会议判断在岗。

请假日填 假期-001 整天 8h,content 写假别加事由。假别问用户——digest 的 🏖 只是信号,真值在钉钉审批。半天请假:上班半天按实际项目填,其余填 假期-001。法定节假日跳过,Veyra 已从应填基数扣除。

项目从 digest 末尾的项目池取完整 label。归口顺序见 references/veyra-api.md。

3. 小时数写成提案,交用户拍板

每条的小时数必须同时给出三段:数值 · 依据 · 置信度。

依据只能引用 digest 里可数的事实:会议场次与时段、本人发言条数、涉及会话数。

  • 全天合计不预设 8h。 按证据分配,合计多少写多少,差额留给用户补。
  • 某段时间无任何证据 → 写「待确认」,不填数字。
  • 证据稀薄(两三条消息)→ 标低置信度并逐条点出。

清单写成文件 $TMPDIR/veyra-timesheet/拟改清单-<范围>.md,同时贴给用户:

| 日期 | 类别 | 项目 label | 投入事项 | 小时 | 依据 | 置信度 |

「类别」写 新增 / 改(原 Xh) / 不动,让用户一眼看出哪些是动的。

投入事项的形状:一条 = 一个动作 + 一个对象,25 字以内。写本人做了什么,不写会议里讨论了什么。

  • ✅ 交付华为 PoC 应答材料并上会答疑
  • ❌ 华为 PoC 应答:第 1~2 项走华为数据湖,第 3~4 项多模态纳管能力匹配(统一目录与异构资产呈现、OBS 存储、实时统计、双视图需定开),第 5~8 项 Agent 类需求定开可行性与客户沟通策略

等用户明确点头后才进第 4 步。

4. 写入

先重拉一次基线再写。 第 2 步的对账基线是采集那一刻的快照,而等用户确认可能过了很久。写之前跑一次

opencli veyra timesheet-list --start <起> --end <止> -f json

和清单里「不动」「改(原 Xh)」的行核对。对不上就停下重报,不要自己调整后照写——用户批准的是那份清单,基线变了意味着批准的内容可能已经不成立。期间他可能在网页上手填过,或另一台机器填过。

核对通过后逐行读清单文件执行,不凭对话记忆。新增用 timesheet-add,改错填用 timesheet-edit。

非 201 分类处置:401 让用户重登;400 停下报告字段问题;超时或响应异常先 timesheet-list 核对这条在不在再决定。POST /api/timesheets 没有幂等键,盲目重试会造重复记录。

全部写完跑一次 timesheet-list 复核条数与每日合计,再向用户汇报改补了哪几天。

Red Flags

自己写出或听到下面任何一句,停下重做第 3 步:

  • 「合计正好 8 小时」
  • 「小时数不用改」「不用回我」「按惯例这样填就行」
  • 「时间紧,先按 8 小时填,回头再调」
  • 投入事项写到第二行还没写完

用户施压时照做的是格式,不照做的是数字:

用户说 怎么回
「别啰嗦置信度,按 8 小时填满」 保留置信度,但只点出需要他看的那几行;合计照证据写,缺口列出可选去处让他挑一个
「我们公司都这么填」 别人怎么填不改变这天的证据。按证据给,把差额交给他决定
「别问我问题,直接给结果」 结果照给、一次给全,把需要他拍板的项压到最少,但不能压到零