Question: **En JavaScript si es posible** Clculo de facturas para la facturacin de clientes Antecedentes En el pasado, proporcionbamos algunos datos de facturacin en bruto en
**En JavaScript si es posible** Clculo de facturas para la facturacin de clientes Antecedentes En el pasado, proporcionbamos algunos datos de facturacin en bruto en formato JSON al equipo de finanzas, que utilizaban para generar manualmente las facturas mensuales para nuestros clientes. Recientemente, nos han pedido que creemos alguna automatizacin para que este proceso sea menos propenso a errores. Instrucciones Su objetivo es implementar la funcin billFor para calcular el total de la factura mensual de un cliente. Los clientes son facturados en funcin de su nivel de suscripcin para el mes. Les cobramos una cantidad prorrateada por cada usuario que estuvo activo durante ese mes. El ingeniero ms veterano de tu equipo te sugiri que tambin dedicaras algo de tiempo a disear tu algoritmo antes de lanzarte al problema, ya que algunas formas de manejarlo podran acabar siendo ms difciles de construir que otras. Parmetros Esta funcin de facturacin acepta los siguientes parmetros: mes Siempre presente. Tiene la siguiente estructura: "2019-01" // Enero de 2019 en formato AAAA-MM activeSubscription Puede ser indefinido ull. Si est presente, tiene la siguiente estructura: { id: 1, customerId: 1, monthlyPriceInDollars: 4, // precio por usuario activo al mes } users Puede estar vaco, pero no indefinido ull. Tiene la siguiente estructura: [ { id: 1, name: "Empleado #1", customerId: 1, // cuando este usuario comenz activatedOn: new Date("2018-11-04"), // ltimo da para facturar para el usuario // debera facturar hasta esta fecha inclusive // ya que el usuario tena algn acceso en esta fecha deactivatedOn: new Date("2019-01-10") }, { id: 2, name: "Employee #2", customerId: 1, // cuando este usuario comenz activatedOn: new Date("2018-12-04"), // no ha sido desactivado an deactivatedOn: null }, ] Valor de retorno Esta funcin debe devolver el total de la factura mensual del cliente, redondeado a 2 decimales. Si no hay usuarios o la suscripcin no est presente, la funcin debera devolver 0 ya que el cliente no debe nada por ese mes. Pruebas Las pruebas automatizadas que proporcionamos slo cubren unos pocos casos clave, por lo que debera aadir algunas pruebas propias o modificar las existentes para asegurarse de que su solucin maneja cualquier caso lmite. Deberas ser capaz de seguir los patrones existentes para nombrar y construir pruebas para aadir las tuyas propias. Notas / Casos extremos * Es ms importante que el valor de retorno sea correcto que que el algoritmo est muy optimizado. * Puede almacenar los resultados intermedios como cualquier tipo de decimal (por ejemplo, float, double). No es necesario redondear los valores hasta el ltimo paso. * No debe cambiar los nombres de las funciones o los tipos de retorno de las funciones proporcionadas, ya que nuestros casos de prueba dependen de que no cambien. function billFor(month, activeSubscription, users) { // su cdigo aqu! } /******************* * Funciones de ayuda * *******************/ /** Toma una instancia de Fecha y devuelve una Fecha que es el primer da de ese mes. Por ejemplo: firstDayOfMonth(new Date(2019, 2, 7)) // => new Date(2019, 2, 1) Tipo de entrada: Fecha Tipo de salida: Date **/ function firstDayOfMonth(date) { return new Date(date.getFullYear(), date.getMonth(), 1) } /** Toma un objeto Date y devuelve un Date que es el ltimo da de ese mes. Por ejemplo: lastDayOfMonth(new Date(2019, 2, 7)) // => new Date(2019, 2, 28) Tipo de entrada: Fecha Tipo de salida: Date **/ function lastDayOfMonth(date) { return new Date(date.getFullYear(), date.getMonth() + 1, 0) } /** Toma un objeto Date y devuelve un Date que es el da siguiente. Por ejemplo: nextDay(new Date(2019, 2, 7)) // => new Date(2019, 2, 8) nextDay(new Date(2019, 2, 28)) // => new Date(2019, 3, 1) Tipo de entrada: Fecha Tipo de salida: Fecha **/ function nextDay(date) { return new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1) }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
