export interface FallClearanceInput { lanyardLength: number; decelerationDistance: number; harnessStretch: number; workerHeight: number; safetyFactor: number; anchorHeight: number; rescueClearance?: number; obstacleHeight?: number; } export interface FallClearanceResult { totalFallDistance: number; minimumHeight: number; rescueClearance: number; freeSpaceRequired: number; clearanceAboveObstacle: number; isAdequate: boolean | null; warnings: string[]; } export type CouplingQuality = 'good' | 'fair' | 'poor'; export type WorkDuration = 'short' | 'medium' | 'long'; export interface NioshInput { horizontalDistance: number; verticalDistance: number; verticalTravel: number; asymmetryAngle: number; frequency: number; duration: WorkDuration; coupling: CouplingQuality; loadWeight: number; } export interface NioshResult { rwl: number; liftingIndex: number; hm: number; vm: number; dm: number; am: number; fm: number; cm: number; riskLevel: 'low' | 'moderate' | 'high'; } export interface NoiseExposure { soundLevel: number; duration: number; } export interface NoiseExposureInput { exposures: NoiseExposure[]; } export interface NoiseExposureResult { dose: number; twa: number; status: 'compliant' | 'actionRequired' | 'exceeds'; } export type WorkloadIntensity = 'light' | 'moderate' | 'heavy' | 'veryHeavy'; export interface WbgtInput { dryBulbTemp: number; wetBulbTemp: number; globeTemp: number; isOutdoor: boolean; workload: WorkloadIntensity; isAcclimatized: boolean; } export interface WbgtResult { wbgt: number; threshold: number; status: 'safe' | 'caution' | 'danger'; } export interface ToolExposure { vibrationMagnitude: number; exposureTime: number; } export interface HavsInput { tools: ToolExposure[]; } export interface HavsResult { a8: number; partialExposures: number[]; percentEAV: number; percentELV: number; exposurePoints: number; status: 'safe' | 'action' | 'limit'; maxDailyExposure: number; } export type VentilationActivityLevel = 'sedentary' | 'light' | 'moderate' | 'heavy'; export type SpaceType = 'office' | 'classroom' | 'retail' | 'restaurant' | 'industrial' | 'warehouse' | 'gym' | 'custom'; export interface VentilationRateInput { roomLength: number; roomWidth: number; roomHeight: number; occupants: number; activityLevel: VentilationActivityLevel; spaceType: SpaceType; customAch?: number; } export interface VentilationRateResult { roomVolume: number; requiredAch: number; cfm: number; m3PerHour: number; litersPerSecond: number; cfmPerPerson: number; } export type RespiratorType = 'filtering-facepiece' | 'half-mask' | 'full-facepiece' | 'powered-half-mask' | 'powered-hood' | 'powered-full-facepiece' | 'supplied-air-half' | 'supplied-air-full' | 'supplied-air-full-pd' | 'scba-pd'; export interface RespiratorInput { concentration: number; oel: number; respiratorType: RespiratorType; } export interface RespiratorResult { muc: number; apf: number; hazardRatio: number; requiredAPF: number; protectionAdequate: boolean; safetyMargin: number; } /** * Ladder Angle Calculator Types (OSHA 4:1 rule) */ export interface LadderAngleInput { ladderLength: number; height?: number; baseDistance?: number; } export interface LadderAngleResult { angle: number; height: number; baseDistance: number; ladderLength: number; idealBaseDistance: number; reachHeight: number; isCompliant: boolean; warnings: string[]; } /** * Illuminance Calculator Types (Lumen Method) */ export interface IlluminanceInput { roomLength: number; roomWidth: number; luminaireHeight: number; workplaneHeight?: number; targetLux: number; lumensPerLuminaire: number; wattsPerLuminaire?: number; cu?: number; mf?: number; } export interface IlluminanceResult { fixturesNeeded: number; actualLux: number; roomIndex: number; cu: number; roomIndexClamped: boolean; totalLumens: number; powerDensity: number | null; recommendedSpacing: number; } /** * Thermal Comfort (PMV/PPD) Types — ISO 7730 */ export interface ThermalComfortInput { airTemp: number; radiantTemp: number; airVelocity: number; relativeHumidity: number; metabolicRate: number; clothingInsulation: number; } export interface ThermalComfortResult { pmv: number; ppd: number; category: 'A' | 'B' | 'C' | 'outside'; sensation: 'cold' | 'cool' | 'slightly_cool' | 'neutral' | 'slightly_warm' | 'warm' | 'hot'; } /** * REBA (Rapid Entire Body Assessment) Types */ export interface RebaInput { trunkAngle: number; trunkTwisted: boolean; trunkSideBent: boolean; neckAngle: number; neckTwisted: boolean; neckSideBent: boolean; legSupport: 'bilateral' | 'unilateral'; kneeFlexion: number; upperArmAngle: number; shoulderRaised: boolean; armAbducted: boolean; armSupported: boolean; lowerArmAngle: number; wristAngle: number; wristTwisted: boolean; /** Hand-to-object coupling quality (REBA Step 11). Defaults to 'good' (+0). */ coupling?: 'good' | 'fair' | 'poor' | 'unacceptable'; load: number; shockForce: boolean; staticPosture: boolean; repeatedSmallRange: boolean; rapidLargeChange: boolean; } export interface RebaResult { trunkScore: number; neckScore: number; legScore: number; upperArmScore: number; lowerArmScore: number; wristScore: number; couplingScore: number; scoreA: number; scoreB: number; scoreC: number; rebaScore: number; riskLevel: 'negligible' | 'low' | 'medium' | 'high' | 'very_high'; actionLevel: number; } /** * Arc Flash Types — IEEE 1584 / NFPA 70E */ export interface ArcFlashInput { voltage: number; boltedFaultCurrent: number; workingDistance: number; faultClearingTime: number; gapBetweenConductors: number; enclosureType: 'open' | 'box' | 'mcc' | 'panel' | 'cable'; } export interface ArcFlashResult { arcCurrent: number; incidentEnergy: number; arcFlashBoundary: number; ppeCategory: 0 | 1 | 2 | 3 | 4; hazardLevel: 'safe' | 'danger' | 'extreme'; requiredPPE: string; } /** * Confined Space Atmospheric Assessment Types — OSHA 29 CFR 1910.146 */ export interface ConfinedSpaceInput { oxygenPercent: number; lelPercent: number; h2sPpm?: number; coPpm?: number; customGas?: { name: string; concentration: number; pel: number; idlh: number; }; } export interface ConfinedSpaceResult { oxygenStatus: 'safe' | 'deficient' | 'enriched'; lelStatus: 'safe' | 'caution' | 'danger'; h2sStatus: 'safe' | 'caution' | 'danger' | 'idlh' | null; coStatus: 'safe' | 'caution' | 'danger' | 'idlh' | null; customGasStatus: 'safe' | 'exceeds_pel' | 'idlh' | null; overallStatus: 'safe' | 'caution' | 'danger' | 'idlh'; entryPermitted: boolean; warnings: string[]; } /** * LEL (Lower Explosive Limit) Mixed Gas Types — Le Chatelier's Rule */ export interface GasComponent { name: string; concentration: number; lel: number; } export interface LelInput { gases: GasComponent[]; temperature?: number; pressure?: number; } export interface LelResult { mixtureLel: number; totalConcentration: number; percentOfLel: number; status: 'safe' | 'caution' | 'danger'; safetyMargin: number; contributions: { name: string; fraction: number; }[]; } //# sourceMappingURL=types.d.ts.map