export function calculateRowTotalPower( quantity: number, powerPerUnit: number, simultaneityFactor: number ): number { return quantity * powerPerUnit * simultaneityFactor; } export function calculateCircuitTotalPower( rows: Array<{ quantity: number; powerPerUnit: number; simultaneityFactor: number }> ): number { return rows.reduce( (sum, row) => sum + calculateRowTotalPower(row.quantity, row.powerPerUnit, row.simultaneityFactor), 0 ); } export function calculateSectionTotalPower( circuits: Array<{ circuitTotalPower: number }> ): number { return circuits.reduce( (sum, circuit) => sum + circuit.circuitTotalPower, 0 ); } export function calculateDistributionBoardTotalPower( sections: Array<{ sectionTotalPower: number }> ): number { return sections.reduce( (sum, section) => sum + section.sectionTotalPower, 0 ); } export function applyDistributionBoardSimultaneityFactor( totalPower: number, simultaneityFactor: number ): number { if ( !Number.isFinite(simultaneityFactor) || simultaneityFactor < 0 || simultaneityFactor > 1 ) { throw new Error( "Distribution-board simultaneity factor must be between zero and one." ); } return totalPower * simultaneityFactor; }