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