增加技术验证证据筛选并区分材料与独立测试
This commit is contained in:
@@ -1,4 +1,10 @@
|
||||
export type ResearchCategory = { id: string; name: string; description: string };
|
||||
export const technicalReviewLabels = {
|
||||
unreviewed: "技术证据尚未专项评审",
|
||||
description: "已读技术自述",
|
||||
"public-artifact": "公开代码/模型材料可访问",
|
||||
"independent-test": "有独立测试记录",
|
||||
};
|
||||
export type ResearchCompany = {
|
||||
id: string; name: string; url: string; cat: string; year: number | null;
|
||||
team: number | null; teamBound?: ">" | "≥"; location: string | null; business: string; buyer: string;
|
||||
@@ -8,6 +14,10 @@ export type ResearchCompany = {
|
||||
extraUrl?: string; pricingEvidence?: string;
|
||||
businessModel?: string; entityBasis?: string;
|
||||
profileOnly?: boolean; classificationBasis?: string; directoryTags?: string[];
|
||||
technicalReview?: {
|
||||
level: "description" | "public-artifact" | "independent-test";
|
||||
reviewedAt: string; summary: string; evidenceIds: string[]; testScope?: string;
|
||||
};
|
||||
};
|
||||
export type ResearchObservation = {
|
||||
id: string; company: string; name: string; kind: string; value: number;
|
||||
@@ -59,6 +69,15 @@ export function validateResearch(snapshot: ResearchSnapshot) {
|
||||
unique(snapshot.observations.map((o) => o.id), "observations");
|
||||
unique(snapshot.reviews.map((r) => r.id), "reviews");
|
||||
for (const c of snapshot.companies) {
|
||||
const technical = c.technicalReview;
|
||||
if (technical && (!["description", "public-artifact", "independent-test"].includes(technical.level) ||
|
||||
!/^\d{4}-\d{2}-\d{2}$/.test(technical.reviewedAt) ||
|
||||
Number.isNaN(Date.parse(technical.reviewedAt)) ||
|
||||
new Date(technical.reviewedAt).toISOString().slice(0, 10) !== technical.reviewedAt ||
|
||||
technical.reviewedAt > snapshot.asOf || !technical.summary.trim() ||
|
||||
!technical.evidenceIds.length || technical.evidenceIds.some((id) => !evidence.has(id)) ||
|
||||
(technical.level === "independent-test" && !technical.testScope?.trim())))
|
||||
throw new Error(`Invalid technical review: ${c.id}`);
|
||||
if (c.profileOnly && (c.revenueStatus !== "unknown" || !c.classificationBasis))
|
||||
throw new Error(`Invalid profile-only research record: ${c.id}`);
|
||||
if (!categories.has(c.cat) || !evidenceUrl(c.url) ||
|
||||
|
||||
Reference in New Issue
Block a user