import { PlateMap, ProtocolStep, Reagent, SampleType, Well } from '../types'; import { QpcrPlateTemplate } from './templateQpcrTypes'; export type TemplateKind = 'experiment-design'; export type TemplateId = 'plate-map' | 'sample-sheet' | 'sample-prep' | 'dose-response' | 'calibration-curve' | 'time-course' | 'protocol-steps' | 'assay-matrix' | 'reagent-list' | 'flow-cytometry-panel' | 'instrument-run' | 'qpcr-plate'; export type TemplatePresetId = 'wellplate-screen' | 'qpcr-expression' | 'lcms-batch' | 'targeted-metabolomics' | 'elisa-assay' | 'flow-cytometry-assay' | 'western-blot-assay'; export type TemplatePackId = 'cell-culture-screen' | 'omics-assay' | 'longitudinal-study' | 'molecular-assay'; export interface BioTemplateEnvelope> { template_id: TemplateId | string; template_version: string; kind: TemplateKind | string; data: TData; metadata: Record; } export type TemplateCollection = Record>; export interface TemplateCollectionEnvelope { templates: TemplateCollection; metadata?: Record; } export type TemplateWell = Well; export type TemplatePlateMap = PlateMap; export type TemplateSample = SampleType; export interface PlateMapTemplateData { plates: TemplatePlateMap[]; samples: TemplateSample[]; activePlateId?: string; selectedWells?: string[]; activeSampleId?: string; } export type PlateMapTemplate = BioTemplateEnvelope; export type SampleColumnType = 'string' | 'number' | 'integer' | 'boolean' | 'date' | 'category' | 'unknown'; export interface SampleColumn { id: string; label: string; type: SampleColumnType; required: boolean; groupable: boolean; } export interface SampleRecord { sampleId: string; name?: string; group?: string; batch?: string; replicate?: number | string; plateId?: string; wellId?: string; metadata?: Record; } export interface SampleGroupDefinition { name: string; color: string; samples: string[]; } export interface SampleSheetTemplateData { samples: SampleRecord[]; columns: SampleColumn[]; groups: SampleGroupDefinition[]; } export type SampleSheetTemplate = BioTemplateEnvelope; export type SamplePrepStepType = 'extraction' | 'dilution' | 'normalization' | 'transfer' | 'incubation' | 'centrifugation' | 'cleanup' | 'digestion' | 'labeling' | 'other'; export type SamplePrepStatus = 'planned' | 'in-progress' | 'completed' | 'failed' | 'skipped'; export interface SamplePrepStep { id: string; order: number; type: SamplePrepStepType; name: string; sourceSampleId?: string; sourcePlateId?: string; sourceWellId?: string; destinationSampleId?: string; destinationPlateId?: string; destinationWellId?: string; reagentId?: string; inputVolume?: number; outputVolume?: number; volumeUnit: string; durationMin?: number; status: SamplePrepStatus; metadata?: Record; } export interface SamplePrepTemplateData { protocolName: string; steps: SamplePrepStep[]; metadata: Record; } export type SamplePrepTemplate = BioTemplateEnvelope; export type SamplePrepStepInput = Partial & { name?: string; sourceSampleId?: string; }; export interface CompoundDoseSeries { id: string; name: string; concentrations: number[]; metadata?: Record; } export type ControlRole = 'vehicle' | 'positive' | 'negative' | 'blank' | 'baseline' | 'other'; export interface ControlDefinition { id: string; name: string; role: ControlRole; vehicle?: string; metadata?: Record; } export interface DoseResponseTemplateData { compounds: CompoundDoseSeries[]; unit: string; replicates: number; controls: ControlDefinition[]; layout?: PlateMapTemplateData; metadata: Record; } export type DoseResponseTemplate = BioTemplateEnvelope; export type CalibrationModel = 'linear' | 'linear-weighted-1-x' | 'linear-weighted-1-x2' | 'quadratic' | 'four-parameter-logistic'; export type CalibrationPointRole = 'blank' | 'standard' | 'qc' | 'unknown'; export type CalibrationPointStatus = 'planned' | 'accepted' | 'rejected' | 'warning'; export interface CalibrationAcceptance { minRSquared: number; standardTolerancePercent: number; qcTolerancePercent: number; requireBlank: boolean; metadata?: Record; } export interface CalibrationPoint { id: string; order: number; role: CalibrationPointRole; level: string; concentration: number; unit: string; expectedResponse?: number; response?: number; replicate: number; include: boolean; status: CalibrationPointStatus; metadata?: Record; } export interface CalibrationCurveTemplateData { analyte: string; model: CalibrationModel; xUnit: string; responseUnit: string; points: CalibrationPoint[]; acceptance: CalibrationAcceptance; metadata: Record; } export type CalibrationCurveTemplate = BioTemplateEnvelope; export type CalibrationAcceptanceInput = Partial; export type CalibrationPointInput = Partial & { concentration?: number; level?: string; }; export type TimeUnit = 'second' | 'minute' | 'hour' | 'day' | 'week'; export interface TimePoint { id: string; label: string; value: number; unit: TimeUnit; metadata?: Record; } export interface TimeCourseCondition { id: string; name: string; color?: string; description?: string; metadata?: Record; } export interface TimeCourseSample { sampleId: string; conditionId: string; timepointId: string; replicate: number; metadata?: Record; } export interface TimeCourseTemplateData { timepoints: TimePoint[]; conditions: TimeCourseCondition[]; samples: TimeCourseSample[]; metadata: Record; } export type TimeCourseTemplate = BioTemplateEnvelope; export type AssayFeatureType = 'metabolite' | 'protein' | 'gene' | 'cell' | 'compound' | 'readout' | 'other'; export interface AssaySample { sampleId: string; name?: string; group?: string; metadata?: Record; } export interface AssayFeature { id: string; name: string; type: AssayFeatureType; unit?: string; metadata?: Record; } export interface AssayMeasurement { sampleId: string; featureId: string; value?: number | null; metadata?: Record; } export interface AssayMatrixTemplateData { samples: AssaySample[]; features: AssayFeature[]; measurements: AssayMeasurement[]; metadata: Record; } export type AssayMatrixTemplate = BioTemplateEnvelope; export type ProtocolStepRecord = ProtocolStep & { metadata?: Record; }; export interface ProtocolStepsTemplateData { steps: ProtocolStepRecord[]; metadata: Record; } export type ProtocolStepsTemplate = BioTemplateEnvelope; export type ReagentKind = 'compound' | 'antibody' | 'primer' | 'enzyme' | 'buffer' | 'media' | 'kit' | 'reagent' | 'other'; export type ReagentTemplateInput = Omit & { expiryDate?: Date | string | null; kind?: ReagentKind; concentration?: string; metadata?: Record; }; export interface ReagentRecord extends Omit { expiryDate?: string; kind?: ReagentKind; concentration?: string; metadata?: Record; } export interface ReagentListTemplateData { reagents: ReagentRecord[]; metadata: Record; } export type ReagentListTemplate = BioTemplateEnvelope; export type FlowMarkerPurpose = 'phenotype' | 'viability' | 'activation' | 'sorting' | 'control' | 'other'; export type FlowControlKind = 'unstained' | 'single-stain' | 'fmo' | 'isotype' | 'viability' | 'beads' | 'other'; export interface FlowPanelMarker { id: string; marker: string; fluorophore: string; detector?: string; clone?: string; reagentId?: string; purpose: FlowMarkerPurpose; compensationRequired: boolean; metadata?: Record; } export interface FlowPanelControl { id: string; name: string; kind: FlowControlKind; markerId?: string; required: boolean; metadata?: Record; } export interface FlowCytometryPanelTemplateData { markers: FlowPanelMarker[]; controls: FlowPanelControl[]; instrument?: string; metadata: Record; } export type FlowCytometryPanelTemplate = BioTemplateEnvelope; export type InstrumentRunItemKind = 'sample' | 'blank' | 'qc' | 'standard' | 'calibration' | 'wash' | 'other'; export type InstrumentRunStatus = 'planned' | 'queued' | 'running' | 'completed' | 'failed' | 'skipped'; export interface InstrumentMethod { id: string; name: string; instrument?: string; acquisitionMode?: string; metadata?: Record; } export interface InstrumentRunItem { id: string; order: number; kind: InstrumentRunItemKind; sampleId?: string; name?: string; methodId: string; vial?: string; plateId?: string; wellId?: string; injectionVolume?: number; expectedDurationMin?: number; status: InstrumentRunStatus; metadata?: Record; } export interface InstrumentRunTemplateData { runId: string; instrument?: string; methods: InstrumentMethod[]; items: InstrumentRunItem[]; metadata: Record; } export type InstrumentRunTemplate = BioTemplateEnvelope; export type InstrumentMethodInput = Partial & { name?: string; }; export type InstrumentRunItemInput = Partial & { name?: string; sampleId?: string; }; export type DataFrameTemplate = SampleSheetTemplate | SamplePrepTemplate | CalibrationCurveTemplate | TimeCourseTemplate | ProtocolStepsTemplate | AssayMatrixTemplate | ReagentListTemplate | FlowCytometryPanelTemplate | InstrumentRunTemplate | QpcrPlateTemplate; export type { QpcrChemistry, QpcrControlKind, QpcrPlateTemplate, QpcrPlateTemplateData, QpcrReaction, QpcrSample, QpcrTarget, } from './templateQpcrTypes'; export type { CreateAssayMatrixTemplateOptions, CreateBioTemplatePackCollectionOptions, CreateCalibrationCurveTemplateOptions, CreateDoseResponseTemplateOptions, CreateElisaAssayCollectionOptions, CreateFlowCytometryAssayCollectionOptions, CreateFlowCytometryPanelTemplateOptions, CreateInstrumentRunTemplateOptions, CreateLcmsBatchCollectionOptions, CreatePlateMapTemplateOptions, CreateProtocolStepsTemplateOptions, CreateQpcrExpressionCollectionOptions, CreateQpcrPlateTemplateOptions, CreateReagentListTemplateOptions, CreateSamplePrepTemplateOptions, CreateSampleSheetTemplateOptions, CreateTargetedMetabolomicsCollectionOptions, CreateTimeCourseTemplateOptions, CreateWellPlateScreenCollectionOptions, CreateWesternBlotAssayCollectionOptions, } from './templateCreateOptions'; export type { AssayMatrixColumnsAdapterResult, AssayMatrixDataFrameAdapterResult, AssayMatrixRowsAdapterResult, AssayMatrixSampleOptionsAdapterResult, CalibrationCurveColumnsAdapterResult, CalibrationCurveDataFrameAdapterResult, CalibrationCurveRowsAdapterResult, DataFrameAdapterResult, DoseConditionsAdapterResult, FlowPanelColumnsAdapterResult, FlowPanelDataFrameAdapterResult, FlowPanelRowsAdapterResult, InstrumentRunColumnsAdapterResult, InstrumentRunDataFrameAdapterResult, InstrumentRunRowsAdapterResult, InstrumentRunScheduleEventsAdapterResult, InstrumentRunStepsAdapterResult, PlateMapEditorAdapterResult, ProtocolColumnsAdapterResult, ProtocolDataFrameAdapterResult, ProtocolRowsAdapterResult, ProtocolStepsAdapterResult, QpcrColumnsAdapterResult, QpcrDataFrameAdapterResult, QpcrRowsAdapterResult, QpcrWellMapAdapterResult, ReagentColumnsAdapterResult, ReagentDataFrameAdapterResult, ReagentListItemsAdapterResult, ReagentRowsAdapterResult, SampleColumnsAdapterResult, SampleDataFrameAdapterResult, SampleOptionsAdapterResult, SamplePrepColumnsAdapterResult, SamplePrepDataFrameAdapterResult, SamplePrepRowsAdapterResult, SampleRowsAdapterResult, TemplateDataFrameAdapterResult, TimeCourseColumnsAdapterResult, TimeCourseDataFrameAdapterResult, TimeCourseRowsAdapterResult, TimeCourseStepsAdapterResult, WellMapAdapterResult, } from './templateAdapterTypes';