56 lines
1.8 KiB
TypeScript
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;
|
|
}
|