eeee0e49af
BUG-341 added declared_birth_window, but the natal-minute helper still returned boolean, so next build could not pass that mode into serverChartFromProfile. Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
2.2 KiB
TypeScript
75 lines
2.2 KiB
TypeScript
import { z } from "zod";
|
|
import {
|
|
guardGeneralNoBirthTimeOutput,
|
|
guardPreciseTimingOutput,
|
|
} from "./timing-output-guard.ts";
|
|
|
|
export const consultationBirthTimeModeSchema = z.enum([
|
|
"verified_chart",
|
|
"unverified_birth_time",
|
|
"declared_birth_window",
|
|
"general_no_birth_time",
|
|
]);
|
|
|
|
export type ConsultationBirthTimeMode = z.infer<typeof consultationBirthTimeModeSchema>;
|
|
export type NatalMinuteConsultationMode = Extract<
|
|
ConsultationBirthTimeMode,
|
|
"verified_chart" | "unverified_birth_time"
|
|
>;
|
|
|
|
export const UNVERIFIED_BIRTH_TIME_NOTICE = "使用未校正填报时间;分钟敏感结论的置信度已降低。";
|
|
|
|
export function isNatalMinuteConsultationMode(
|
|
mode: ConsultationBirthTimeMode,
|
|
): mode is NatalMinuteConsultationMode {
|
|
return mode === "verified_chart" || mode === "unverified_birth_time";
|
|
}
|
|
|
|
export function shouldRunBirthChartWorkflow(mode: ConsultationBirthTimeMode): boolean {
|
|
return isNatalMinuteConsultationMode(mode);
|
|
}
|
|
|
|
export function shouldRunDeclaredWindowWorkflow(mode: ConsultationBirthTimeMode): boolean {
|
|
return mode === "declared_birth_window";
|
|
}
|
|
|
|
export function applyBirthTimeModeToWorkflowContext<
|
|
T extends {
|
|
consumer_context: {
|
|
answer_policy: Record<string, unknown>;
|
|
[key: string]: unknown;
|
|
};
|
|
[key: string]: unknown;
|
|
},
|
|
>(context: T, mode: ConsultationBirthTimeMode): T {
|
|
if (mode !== "unverified_birth_time") return context;
|
|
return {
|
|
...context,
|
|
consumer_context: {
|
|
...context.consumer_context,
|
|
answer_policy: {
|
|
...context.consumer_context.answer_policy,
|
|
birth_time_confidence: "unverified_reported_time",
|
|
candidate_is_confirmed: false,
|
|
},
|
|
},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Server-side output boundary. Timing and guarantee filtering remains active
|
|
* without inserting a rectification warning into every answer.
|
|
*/
|
|
export function createBirthTimeModeOutputGuard(
|
|
mode: ConsultationBirthTimeMode,
|
|
canAnswerPreciseTiming: boolean,
|
|
): (text: string) => string {
|
|
return (text) => {
|
|
if (mode === "general_no_birth_time") return guardGeneralNoBirthTimeOutput(text);
|
|
if (mode === "declared_birth_window" || !canAnswerPreciseTiming) {
|
|
return guardPreciseTimingOutput(text);
|
|
}
|
|
return text;
|
|
};
|
|
}
|