SPB Git forge

spb/cancerindex

Public
37commits 1branches 0releases
2.9 MBsize
maindefault branch
10 days agolast push
TypeScript 97.2% SQL 1.5% CSS 0.6% JavaScript 0.5%
2.5 KB · 86 lines typescript
Raw Blame History
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