spb/cancerindex
Public
TypeScript 97.2%
SQL 1.5%
CSS 0.6%
JavaScript 0.5%
1import { z } from 'zod';23/** CLAUDE.md §2 — every imported fact carries provenance; every derived value is reproducible. */4export const EvidenceType = z.enum([5 'registry',6 'clinical_trial',7 'meta_analysis',8 'systematic_review',9 'cohort',10 'case_control',11 'case_series',12 'case_report',13 'preclinical',14 'regulatory',15 'guideline',16 'expert_curation',17 'database',18 'computed',19]);20export type EvidenceType = z.infer<typeof EvidenceType>;2122export const AccessLevel = z.enum(['open', 'registration_required', 'controlled', 'licensed']);23export type AccessLevel = z.infer<typeof AccessLevel>;2425export const ProvenanceInput = z.object({26 sourceId: z.string(),27 sourceRecordId: z.string().optional(),28 sourceUrl: z.string().url().optional(),29 dataset: z.string().optional(),30 datasetVersion: z.string().optional(),31 publicationId: z.string().optional(),32 pmid: z.string().optional(),33 doi: z.string().optional(),34 retrievedAt: z.string().datetime(),35 publishedAt: z.string().optional(),36 updatedAt: z.string().optional(),37 geography: z.string().optional(),38 population: z.string().optional(),39 cohortSize: z.number().int().nonnegative().optional(),40 methodology: z.string().optional(),41 evidenceType: EvidenceType,42 accessLevel: AccessLevel,43 confidence: z.number().min(0).max(1).optional(),44 license: z.string().optional(),45 ingestRunId: z.string().optional(),46});47export type ProvenanceInput = z.infer<typeof ProvenanceInput>;4849/** Data layer a value belongs to (CLAUDE.md §2 — layers stay separable). */50export const DataLayer = z.enum(['raw', 'normalized', 'canonical', 'derived', 'ranked', 'ai_synthesis']);51export type DataLayer = z.infer<typeof DataLayer>;5253/** Display category for scientific safety (CLAUDE.md §3). */54export const ClaimCategory = z.enum([55 'observed_data',56 'published_evidence',57 'curated_evidence',58 'regulatory_status',59 'clinical_guideline',60 'computed_metric',61 'ai_generated_synthesis',62]);63export type ClaimCategory = z.infer<typeof ClaimCategory>;6465/** Entity mapping confidence (CLAUDE.md §221). */66export const MatchType = z.enum([67 'EXACT_IDENTIFIER',68 'CURATED_EXACT',69 'ONTOLOGY_EXACT',70 'CURATED_BROADER',71 'CURATED_NARROWER',72 'ALIAS',73 'PROBABILISTIC',74 'UNRESOLVED',75]);76export type MatchType = z.infer<typeof MatchType>;7778/** Derived statistic envelope (CLAUDE.md §2). */79export interface DerivedValue {80 metric: string;81 value: number;82 computed: true;83 formulaVersion: string;84 inputs: string[];85}86