Files
Jyotisha/frontend/src/lib/consultation-workflow-request.ts
T

56 lines
1.8 KiB
TypeScript

import {
consultationDomainDefinition,
consultationDomainIds,
type ConsultationDomain,
type ConsultationTheme,
} from "./consultation-domain-registry.ts";
export { consultationDomainIds as consultationThemeValues };
export type { ConsultationTheme };
export type ConsultationWorkflowRoute = ConsultationDomain | "rectification" | "prashna";
export type ConsultationWorkflowPlanMetadata = Readonly<{
plan_version: string;
depth: string;
requestedDomains: readonly string[];
timingHorizon: string | null;
precisionBoundary: string;
requiredEvidenceCategories: readonly string[];
}>;
type WorkflowProjection = {
question: string;
themes: readonly ConsultationDomain[];
strictWorkflowRoute: ConsultationWorkflowRoute;
requiredLayers: readonly string[];
claimBoundary: string;
plan_version: string;
depth: string;
requested_domains: readonly string[];
timing_horizon: string | null;
precision_boundary: string;
required_evidence_categories: readonly string[];
};
export function projectConsultationWorkflowRequest(
question: string,
theme: ConsultationTheme,
plan: ConsultationWorkflowPlanMetadata,
) {
const requirement = consultationDomainDefinition(theme);
const prefix = theme === "timing" ? "应期与阶段问题:" : "";
return {
question: `${prefix}${question}`,
themes: requirement.workflowThemes,
strictWorkflowRoute: requirement.strictWorkflowRoute,
requiredLayers: requirement.requiredLayers,
claimBoundary: requirement.claimBoundary,
plan_version: plan.plan_version,
depth: plan.depth,
requested_domains: plan.requestedDomains,
timing_horizon: plan.timingHorizon,
precision_boundary: plan.precisionBoundary,
required_evidence_categories: plan.requiredEvidenceCategories,
} satisfies WorkflowProjection;
}