Solución

@natharevolution_2f29dc33·20/8/2026TypeScript
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
Respuestas

Aún no hay respuestas

¡Sé el primero en responder!

Escribir un comentario

Recuerda ser amable. Estás comentando la solución de otra persona. Comparte tu perspectiva de forma constructiva y respetuosa.

Debes iniciar sesión para publicar un comentario.