@sailboat-computer/validation
Version:
Validation framework for sailboat computer v3
186 lines • 4.83 kB
TypeScript
/**
* Extended validation types for Signal K
*
* This file extends the base validation types with Signal K specific types
* to enable more comprehensive validation of Signal K data.
*/
import { ValidationResult, RawSensorData } from './types';
/**
* Extended raw sensor data with additional marine-specific fields
*/
export interface ExtendedRawSensorData extends RawSensorData {
/**
* Signal K path (if applicable)
*/
signalKPath?: string;
/**
* Additional source details (extends the base source property)
*/
sourceDetails?: SignalKSource;
/**
* Additional metadata
*/
metadata?: Record<string, any>;
}
import { SignalKValidationContext } from './contexts/interface-contexts';
/**
* Signal K value types
*/
export declare enum SignalKValueType {
NUMBER = "number",
STRING = "string",
BOOLEAN = "boolean",
OBJECT = "object",
ARRAY = "array",
POSITION = "position",
ATTITUDE = "attitude",
DATETIME = "datetime"
}
/**
* Signal K position value
*/
export interface SignalKPosition {
latitude: number;
longitude: number;
altitude?: number;
}
/**
* Signal K attitude value
*/
export interface SignalKAttitude {
roll: number;
pitch: number;
yaw: number;
}
/**
* Signal K path metadata
*/
export interface SignalKPathMetadata {
path: string;
valueType: SignalKValueType;
units?: string;
description?: string;
displayName?: string;
zones?: SignalKZone[];
possibleValues?: string[];
defaultValue?: any;
}
/**
* Signal K zone for value ranges
*/
export interface SignalKZone {
lower?: number;
upper?: number;
state: 'normal' | 'alert' | 'warn' | 'alarm' | 'emergency';
message?: string;
}
/**
* Signal K source definition
*/
export interface SignalKSource {
type: 'NMEA0183' | 'NMEA2000' | 'SignalK' | 'I2C' | 'GPIO' | 'Computed' | string;
label: string;
talker?: string;
sentence?: string;
pgn?: number;
src?: number;
instance?: number;
deviceId?: string;
reliability?: number;
}
/**
* Signal K validation rule interface
*/
export interface SignalKValidationRule {
/**
* Validate a Signal K path and value
* @param path Signal K path
* @param value Value to validate
* @param context Validation context
* @returns Validation result
*/
validateSignalK(path: string, value: any, context: SignalKValidationContext): ValidationResult;
/**
* Check if this rule is applicable to a Signal K path
* @param path Signal K path
* @returns Whether the rule is applicable
*/
isApplicableToPath(path: string): boolean;
/**
* Get metadata for a Signal K path
* @param path Signal K path
* @returns Path metadata
*/
getPathMetadata(path: string): SignalKPathMetadata | undefined;
}
/**
* Signal K confidence calculation factors
*/
export interface SignalKConfidenceFactors {
/**
* Source reliability (0-1)
* Based on source type, device quality, historical reliability
*/
sourceReliability: number;
/**
* Path consistency (0-1)
* Based on path structure, expected format
*/
pathConsistency: number;
/**
* Value stability (0-1)
* Based on value changes over time, outlier detection
*/
valueStability: number;
/**
* Update frequency (0-1)
* Based on how often the value is updated compared to expected frequency
*/
updateFrequency: number;
/**
* Cross-validation score (0-1)
* Based on agreement with other related sensors
*/
crossValidation: number;
/**
* Context appropriateness (0-1)
* Based on whether the value makes sense in the current operational context
*/
contextAppropriateness: number;
}
/**
* Signal K validation result with confidence factors
*/
export interface SignalKValidationResult extends ValidationResult {
/**
* Confidence factors that contributed to the result
*/
confidenceFactors?: SignalKConfidenceFactors;
/**
* Path metadata used for validation
*/
pathMetadata?: SignalKPathMetadata;
/**
* Source information
*/
source?: SignalKSource;
/**
* Zone that the value falls into (if applicable)
*/
zone?: SignalKZone;
}
/**
* Calculate confidence for Signal K data
*
* @param factors Confidence factors
* @returns Confidence score (0-1)
*/
export declare function calculateSignalKConfidence(factors: SignalKConfidenceFactors): number;
/**
* Get Signal K path metadata for common paths
*
* @param path Signal K path
* @returns Path metadata if available
*/
export declare function getSignalKPathMetadata(path: string): SignalKPathMetadata | undefined;
//# sourceMappingURL=types-extension.d.ts.map