main create
This commit is contained in:
Vendored
+38
@@ -0,0 +1,38 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ExpenseEngine = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
class ExpenseEngine {
|
||||
calculateSplit(totalCost, adultCount, childCount, childDiscountPercent) {
|
||||
if (totalCost < 0 || adultCount < 0 || childCount < 0 || childDiscountPercent < 0) {
|
||||
throw new common_1.BadRequestException('Dữ liệu đầu vào không được là số âm.');
|
||||
}
|
||||
if (childDiscountPercent > 100) {
|
||||
throw new common_1.BadRequestException('Phần trăm giảm giá không thể vượt quá 100%.');
|
||||
}
|
||||
if (adultCount + childCount === 0) {
|
||||
throw new common_1.BadRequestException('Số lượng người tham gia phải lớn hơn 0.');
|
||||
}
|
||||
const discountRate = childDiscountPercent / 100;
|
||||
const childRateFactor = 1 - discountRate;
|
||||
const weightedParticipantCount = adultCount + (childCount * childRateFactor);
|
||||
const adultPriceRaw = totalCost / weightedParticipantCount;
|
||||
const childPriceRaw = adultPriceRaw * childRateFactor;
|
||||
const perAdult = Math.round(adultPriceRaw);
|
||||
const perChild = Math.round(childPriceRaw);
|
||||
const adultsTotal = perAdult * adultCount;
|
||||
const childrenTotal = perChild * childCount;
|
||||
const actualSum = adultsTotal + childrenTotal;
|
||||
return {
|
||||
targetTotal: totalCost,
|
||||
actualTotal: actualSum,
|
||||
perAdult,
|
||||
perChild,
|
||||
roundingDifference: totalCost - actualSum,
|
||||
adultsTotal,
|
||||
childrenTotal,
|
||||
};
|
||||
}
|
||||
}
|
||||
exports.ExpenseEngine = ExpenseEngine;
|
||||
//# sourceMappingURL=expense-engine.service.js.map
|
||||
Reference in New Issue
Block a user