/* RFC-0505: the ratgeber claim record schema. A structured claim record at `surface/claims/{lang}/*.md` with claimId, articleId, claimText, claimType, sourceRefs, calculationInputs, limitations, verifiedAt, expiresAt, and reviewStatus. This is the ratgeber-specific claim registry that replaces the RFC-0502 claim sidecars for ratgeber articles. Do not validate claim records — the kernel validators (ratgeber.claim.validate) do that. Do not resolve sourceRefs or calculationInputs — the validators resolve them against source descriptors and PBP data. Do not confuse with recordClaimsSchema (RFC-0212) — that is the CKL claim sidecar for business records; this is the ratgeber claim record. RFC-0505: initial claim record schema + type. */ import { z } from "zod"; /** ISO 8601 calendar date, e.g. 2026-07-23. */ const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/; const isoDate = z.string().regex(ISO_DATE, "must be an ISO 8601 date (YYYY-MM-DD)"); /** A source reference within a claim record. */ export const claimSourceRefSchema = z .object({ sourceId: z.string().min(1), url: z.string().url(), title: z.string().min(1), retrievedAt: isoDate, }) .strict(); export type ClaimSourceRef = z.infer; /** A calculation input reference within a claim record (for `calculation` type). */ export const calculationInputSchema = z .object({ ref: z.string().min(1), value: z.string(), }) .strict(); export type CalculationInput = z.infer; /** * A structured ratgeber claim record (RFC-0505). Lives at * `surface/claims/{lang}/{claimId}.md` as frontmatter-only content. */ export const claimRecordSchema = z .object({ claimId: z.string().min(1), articleId: z.string().min(1), claimText: z.string(), claimType: z.enum(["factual", "calculation", "methodological", "regulatory"]), sourceRefs: z.array(claimSourceRefSchema), calculationInputs: z.array(calculationInputSchema).optional().default([]), limitations: z.array(z.string()).optional().default([]), verifiedAt: isoDate, expiresAt: isoDate.optional(), reviewStatus: z.enum(["verified", "unverified", "disputed"]), }) .strict(); export type ClaimRecord = z.infer;