import type { CalibrationAcceptance, CalibrationPoint, CalibrationPointInput, CompoundDoseSeries, ControlDefinition, } from './types' import { idFromName } from './builderIdUtils' export function normalizeCompound(compound: CompoundDoseSeries): CompoundDoseSeries { return { ...compound, concentrations: [...compound.concentrations].sort((a, b) => b - a), metadata: compound.metadata ?? {}, } } export function normalizeCalibrationAcceptance( acceptance?: Partial, requireBlank = true ): CalibrationAcceptance { return { minRSquared: acceptance?.minRSquared ?? 0.99, standardTolerancePercent: acceptance?.standardTolerancePercent ?? 15, qcTolerancePercent: acceptance?.qcTolerancePercent ?? 20, requireBlank: acceptance?.requireBlank ?? requireBlank, metadata: acceptance?.metadata ?? {}, } } export function normalizeCalibrationPoint( point: CalibrationPointInput, unit: string, order: number, index: number ): CalibrationPoint { const role = point.role ?? 'standard' const level = point.level || `${role.charAt(0).toUpperCase()}${role.slice(1)} ${index + 1}` return { id: point.id || idFromName(level, `${role}-${index + 1}`), order: point.order ?? order, role, level, concentration: point.concentration ?? 0, unit: point.unit || unit, expectedResponse: point.expectedResponse, response: point.response, replicate: point.replicate ?? 1, include: point.include ?? true, status: point.status ?? 'planned', metadata: point.metadata ?? {}, } } export function normalizeControl(control: ControlDefinition): ControlDefinition { return { ...control, metadata: control.metadata ?? {}, } }