malk 327c2a402a feat(timecard): enforce employment dates and overseas calendars il y a 4 jours
..
src 327c2a402a feat(timecard): enforce employment dates and overseas calendars il y a 4 jours
tests 327c2a402a feat(timecard): enforce employment dates and overseas calendars il y a 4 jours
README.md bb287aae99 docs(timecard): record verified merged deployment il y a 1 semaine

README.md

TimeCard 页面源码

src/timecard-repair.oyd.jsx 为阿科德斯 Timecard_补填 的维护源码,采用宜搭现有平台 JSX 模式。主管规则为内部员工取人员档案 Manager,外部员工取所选月份有效项目经理,只有业务数据缺失时才兜底 Raymond。

src/timecard-repair-lifecycle.oyd.jsx 历史上以2026-10-21线上版本52合入上下文轮询,作为版本53发布源码。2026-10-23两份补填维护源先合入封账原生查询并发布版本54,再以线上版本54为基线合入加班口径和外部补填规则,发布版本55;后续仍须重新读取线上基线,不能直接覆盖。

src/timecard-main.actions.js 与 src/timecard-main.render.jsx 为正式填报页手动发布的双文件源码留档,与Tech目录交付文件一致。本轮仅actions修改加班口径,render未变;用户已确认JS手动发布。不得将两者拼成单文件覆盖正式主页面,助手不访问或回读该生产页面。

src/timecard-change.oyd.jsx 为Timecard_变更维护源码,包含版本24的实例隔离、resize监听卸载和异步回写终止,以及2026-10-23版本25的封账原生查询。后续发布仍须先回读线上最新Schema,再把修改合入线上基线。

其他工时补填请求必须携带 otherGroup.managerId。buildTimecardRepairRequest 和调用方需要完整等待主管解析,再发起后端请求。

封账状态查询(2026-10-23)

三个入口的loadMonthClosingStatus(year, month)改用宜搭原生getProcessInstances,按上海时区月份完整分页查询封账流程,并归约为旧后端相同的六字段契约。补填、变更仍保留原串行队列、来源月/当前月判断、失败禁止写入和保存提交顺序;新增辅助方法仅处理封账数据读取与解析。

前置条件是月度封账流程配置全员实例可查看权限。getMonthClosingStatus连接器和POST /month-closing/status作为页面旧查询路径废弃,保留配置/接口用于历史兼容,页面代码不再调用。原因是连接器中转链路持续出现499,后端缓存预热亦存在SSL/认证异常;原生直查可以减少页面准入依赖。

MonthClosingService仍用于保存、提交、审批补发及封账业务校验,不能随页面旧入口一并移除;按需缓存和并发合并保持原样。旧MonthClosingCacheWarmupTimer及服务的预热方法已标记Deprecated:定时类取消Spring注册和生命周期调度,不再创建线程,历史方法空实现,不能通过全局enable.scheduling=true误启。其他审批补发、回写与同步任务保持原样。执行、等价验证及实际后端部署状态见Tech目录开发/封账查询前端直查-实施发布记录-20261023.md。

归档补充:正式Timecard的actions-only自动补丁曾被原有JSX/连接器描述的emoji校验在保存前阻断,该历史证据保留。2026-10-23用户随后确认已手工发布;助手本轮未再访问或回读正式页,不将用户发布确认记作助手线上逐项验收。真实员工/组长业务复测仍需按场景验证;默认长期发布边界不变。

加班口径及外部补填(2026-10-23)

正式填报和补填按实际日期汇总正常及补填工时计算加班,排除正负变更工时,保留每日规则和内部员工36小时上限。原表与补填表同日存在有效记录时按来源归并,冲突或查询不完整时阻止继续计算,界面未保存输入仍参与校验。

内部员工补填保留原工时汇总、补填汇总双表校验;外部员工加载、保存及提交均跳过原工时汇总,补填自身的锁定及防重继续执行。后端独立核实人员属性,前端staffType仅用于缓存隔离,不能绕过人员校验;上下文首包仍异步返回。

补填v55已完成发布和独立回读,13个原数据源及页面config保留。后端与旧封账查询/预热停用合并,于2026-10-23 11:00部署、11:03:59验收通过:服务、内外网及内外部补填上下文正常,旧预热线程消失且180秒无新预热日志。发布回执及SHA见Tech中的统一执行记录及部署验收文件。真实角色保存及提交尚未验证,未写入生产工时或发起审批。

验证命令

从仓库根运行,无需浏览器、登录态或后端启动:

node pages/tests/verify-repair-manager.cjs
node pages/tests/verify-repair-lifecycle.cjs
node pages/tests/verify-repair-context.cjs pages/src/timecard-repair-lifecycle.oyd.jsx
node pages/tests/verify-change-lifecycle.cjs
node pages/tests/verify-native-closing.cjs
node pages/tests/verify-overtime.cjs

8 个用例覆盖主管缓存、缓存缺失、内外部员工规则、业务兜底、纯项目工时、连接器实际请求及主管获取失败。也可验证回读 Schema 的源码或编译代码:

node pages/tests/verify-repair-manager.cjs /absolute/path/to/readback-schema.json compiled

加班专项默认读取Tech中保留的三人只读样本(不提交业务数据),可用第3个命令行参数指定本地样本JSON。后端联合定向测试61项通过:TimeCardPersonnelPolicyTest、TimeCardRepairServiceTest、MonthClosingServiceTest、MonthClosingCacheWarmupTimerTest。

发布边界

  • 目标应用:APP_ZQ3I7XO2RSHDJ4QDEVNB。
  • 补填页面:FORM-C7FA6060445B4820AF93668DE6AD9C4FY0CY。
  • 变更页面:FORM-03AD081995774FC38E148AFE8C60D2FECK7K。
  • 发布前回读最新线上 Schema,将修改合入线上基线,再执行 openyida check-page、compile、publish --health-check。发布后核对源码、原有功能与页面数据源。
  • 正式 Timecard 主页面仍由用户手工发布,本目录源码不能用于覆盖该页面。
  • 登录态沿用已绑定阿科德斯组织的项目环境,不提交凭据、Schema 快照、编译产物或缓存。
  • 技术说明、执行证据与归档记录保留在 /Users/malk/Desktop/Tech/1. malk/宜搭/阿科德斯/TimeCard/;该目录的 程序 链接指向本仓库。