export interface PileCapGeometry { // Pile cap dimensions length: number; // ft (X-direction) width: number; // ft (Z-direction) depth: number; // in (pile cap thickness) soilCover: number; // ft // Column dimensions columnLength: number; // in (X-direction) columnWidth: number; // in (Z-direction) columnOffsetX: number; // ft columnOffsetZ: number; // ft // Pile configuration pileRows: number; pileColumns: number; pileSpacingX: number; // ft pileSpacingY: number; // ft // Pile properties pileType: 'Round' | 'Square'; pileSize: number; // in (diameter for round, side for square) pileEdgeDistance: number; // ft pileTopEmbed: number; // in accidentalOffset: number; // in // Pile capacities pileCompressionCapacity: number; // kips pileTensionCapacity: number; // kips pileLateralCapacity: number; // kips // Cover coverTop: number; // in coverBottom: number; // in } export interface LoadCase { id: string; name: string; deadLoad: number; // D (kips) liveLoad: number; // L (kips) roofLiveLoad: number; // Lr (kips) snowLoad: number; // S (kips) rainLoad: number; // R (kips) seismicLoad: number; // E (kips) windLoad: number; // W (kips) momentX: number; // ft-kips momentY: number; // ft-kips shearX: number; // kips shearY: number; // kips } export interface LoadInputs { cases: LoadCase[]; activeLoadCase: string; } export interface LoadCombinationResult { combinationName: string; axialLoad: number; momentX: number; momentY: number; shearX: number; shearY: number; caseId: string; } export interface MaterialProperties { // Concrete fc: number; // psi // Rebar fy: number; // psi // Reduction factors phiFlexure: number; phiShear: number; phiBearing: number; } export interface DesignParameters { designMethod: 'ASD' | 'LRFD'; loadCombination: string; codeYear: string; } export interface PileReaction { x: number; // ft from left edge y: number; // ft from bottom edge reaction: number; // kips pileNumber: number; } export interface ShearCheckResult { type: string; demand: number; capacity: number; ratio: number; pass: boolean; location: string; } export interface FlexuralDesignResult { direction: 'X' | 'Y'; moment: number; // kip-ft requiredAs: number; // in^2 providedAs: number; // in^2 minAs: number; // in^2 barSize: string; barCount: number; spacing: number; // in developmentLength: { required: number; // in available: number; // in pass: boolean; }; pass: boolean; } export interface CalculationResults { pileReactions: PileReaction[]; maxPileReaction: number; minPileReaction: number; shearChecks: ShearCheckResult[]; flexuralX: FlexuralDesignResult; flexuralY: FlexuralDesignResult; bearingChecks: { columnBearing: { demand: number; // kips capacity: number; // kips ratio: number; pass: boolean; requiredDowels: number; // in^2 }; pileBearing: { demand: number; // kips capacity: number; // kips ratio: number; pass: boolean; }; }; columnDesign: { capacityX: number; // k-ft capacityY: number; // k-ft demandX: number; // k-ft demandY: number; // k-ft axialLoad: number; // kips ratio: number; pass: boolean; interactionPointsX: { m: number, p: number }[]; interactionPointsY: { m: number, p: number }[]; }; governingCombination: string; governingCaseId: string; overallPass: boolean; } export interface ReinforcementConfig { // Top mat hasTopMat: boolean; topConcreteCover: number; // in topXBarSize: string; // e.g., "#8" topXBarCount: number; topXBarHooks: boolean; topZBarSize: string; topZBarCount: number; topZBarHooks: boolean; // Bottom mat hasBottomMat: boolean; bottomConcreteCover: number; // in bottomXBarSize: string; bottomXBarCount: number; bottomXBarHooks: boolean; bottomZBarSize: string; bottomZBarCount: number; bottomZBarHooks: boolean; // Column longitudinal bars columnBarSize: string; columnBarCount: number; }