feat(rectification): 出卡加精度门槛,补经历改成系统点名
Independent Staging Quality Gate / validate (push) Failing after 6m28s
Independent Staging Quality Gate / publish (push) Skipped

宽度超过 10 分钟或头名并列时不再出交付卡,改为按大运边界逐条问、
用类型芯片和年/月选择器录入。跳过的线换问法再问一次;答「这类事
都没有过」的不再问。用户说「没有了」仍立刻给目前范围。Skill 10.0.27。

BUG-740~743
This commit is contained in:
jesse-ux
2026-09-16 18:35:27 +08:00
parent 317e9f1886
commit cfb41daf3d
75 changed files with 4763 additions and 383 deletions
@@ -69,6 +69,8 @@ export type RectificationTimelineView = Readonly<{
* the projection carries no count — never a zero this module invented.
*/
answeredLabel: string | null;
/** `已对照 N 件`. Null when the projection carries no dated-event count. */
datedEventLabel: string | null;
}>;
/** `HH:MM` or `HH:MM:SS` to minutes past midnight; null when unparseable. */
@@ -181,6 +183,8 @@ export type RectificationTimelineInput = Readonly<{
workingAdopted?: boolean;
/** `inference_state.answered_probe_count`; absent when not projected. */
answeredProbeCount?: number | null;
/** Dated confirmed events already on the ledger. */
datedEventCount?: number | null;
}>;
/**
@@ -252,6 +256,7 @@ export function buildRectificationTimeline(
widthLabel: timelineDurationLabel(bandEnd - bandStart + 1),
workingLabel: workingMinuteLabel(input.workingTime, input.workingAdopted === true),
answeredLabel: answeredProbeLabel(input.answeredProbeCount),
datedEventLabel: datedEventLabel(input.datedEventCount),
};
}
@@ -278,3 +283,8 @@ export function answeredProbeLabel(count: number | null | undefined): string | n
if (typeof count !== "number" || !Number.isInteger(count) || count <= 0) return null;
return `已答 ${count} 题`;
}
export function datedEventLabel(count: number | null | undefined): string | null {
if (typeof count !== "number" || !Number.isInteger(count) || count <= 0) return null;
return `已对照 ${count} 件`;
}