Solución
solution.tsTypeScript
export function calculateElectricityBill(kilo_vatios: number, tipo_cliente: string): number {
let costo = 0;
let consumo = 0;
const RESIDENTIAL_LOW_RATE = 0.10;
const RESIDENTIAL_MEDIUM_RATE = 0.15;
const RESIDENTIAL_HIGH_RATE = 0.20;
const COMMERCIAL_RATE = 0.18;
const COMMERCIAL_HIGH_CONSUMPTION_DISCOUNT = 0.90;
const INDUSTRIAL_RATE = 0.12;
const INDUSTRIAL_HIGH_CONSUMPTION_DISCOUNT = 0.85;
const INDUSTRIAL_FIXED_CHARGE = 50;
const MINIMUM_BILL_AMOUNT = 5;
// Calcular costo según el tipo de cliente
if (tipo_cliente === "residential") {
// Aplicar tarifa por tramos según consumo
if (kilo_vatios <= 100) {
costo = kilo_vatios * RESIDENTIAL_LOW_RATE;
} else if (kilo_vatios <= 300) {
costo = 100 * RESIDENTIAL_LOW_RATE + (kilo_vatios - 100) * RESIDENTIAL_MEDIUM_RATE;
} else {
costo = 100 * RESIDENTIAL_LOW_RATE + 200 * RESIDENTIAL_MEDIUM_RATE + (kilo_vatios - 300) * RESIDENTIAL_HIGH_RATE;
}
} else if (tipo_cliente === "commercial") {
// Aplicar tarifa plana con posible descuento por alto consumo
if (kilo_vatios > 500) {
costo = kilo_vatios * COMMERCIAL_RATE * COMMERCIAL_HIGH_CONSUMPTION_DISCOUNT;
} else {
costo = kilo_vatios * COMMERCIAL_RATE;
}
} else if (tipo_cliente === "industrial") {
// Aplicar tarifa plana con posible descuento y cargo fijo
if (kilo_vatios > 1000) {
costo = kilo_vatios * INDUSTRIAL_RATE * INDUSTRIAL_HIGH_CONSUMPTION_DISCOUNT + INDUSTRIAL_FIXED_CHARGE;
} else {
costo = kilo_vatios *INDUSTRIAL_RATE + INDUSTRIAL_FIXED_CHARGE;
}
}
// Aplicar cobro mínimo si el costo calculado es menor al permitido
if (isMinAmount(costo)) {
costo = MINIMUM_BILL_AMOUNT;
}
return +costo.toFixed(2);
}
function isMinAmount(consumption: number): boolean {
return consumption < 5;
}0respuestas