1
This commit is contained in:
1 parent
62546bc937
commit
33913c29d2
9 files changed
+1153
-239
No files matched your search
@@ -4,10 +4,70 @@ import { toFiniteNumberOrNull } from '@/lib/number'
|
||||
|
||||
type ScaleMode = 'cost' | 'area'
|
||||
|
||||
export const getBenchmarkBudgetByScale = (value: unknown, mode: ScaleMode) => {
|
||||
export interface ScaleFeeSplitResult {
|
||||
basic: number
|
||||
optional: number
|
||||
total: number
|
||||
basicFormula: string
|
||||
optionalFormula: string
|
||||
}
|
||||
|
||||
export const getBenchmarkBudgetSplitByScale = (
|
||||
value: unknown,
|
||||
mode: ScaleMode
|
||||
): ScaleFeeSplitResult | null => {
|
||||
const scaleValue = toFiniteNumberOrNull(value)
|
||||
const result = getBasicFeeFromScale(scaleValue, mode)
|
||||
return result ? roundTo(addNumbers(result.basic, result.optional), 2) : null
|
||||
if (!result) return null
|
||||
|
||||
const basic = roundTo(result.basic, 2)
|
||||
const optional = roundTo(result.optional, 2)
|
||||
const basicFormula = typeof result.basicFormula === 'string' ? result.basicFormula : ''
|
||||
const optionalFormula = typeof result.optionalFormula === 'string' ? result.optionalFormula : ''
|
||||
return {
|
||||
basic,
|
||||
optional,
|
||||
total: roundTo(addNumbers(basic, optional), 2),
|
||||
basicFormula,
|
||||
optionalFormula
|
||||
}
|
||||
}
|
||||
|
||||
export const getBenchmarkBudgetByScale = (value: unknown, mode: ScaleMode) => {
|
||||
const splitResult = getBenchmarkBudgetSplitByScale(value, mode)
|
||||
return splitResult ? splitResult.total : null
|
||||
}
|
||||
|
||||
export const getScaleBudgetFeeSplit = (params: {
|
||||
benchmarkBudgetBasic: unknown
|
||||
benchmarkBudgetOptional: unknown
|
||||
majorFactor: unknown
|
||||
consultCategoryFactor: unknown
|
||||
}): ScaleFeeSplitResult | null => {
|
||||
const benchmarkBudgetBasic = toFiniteNumberOrNull(params.benchmarkBudgetBasic)
|
||||
const benchmarkBudgetOptional = toFiniteNumberOrNull(params.benchmarkBudgetOptional)
|
||||
const majorFactor = toFiniteNumberOrNull(params.majorFactor)
|
||||
const consultCategoryFactor = toFiniteNumberOrNull(params.consultCategoryFactor)
|
||||
|
||||
if (
|
||||
benchmarkBudgetBasic == null ||
|
||||
benchmarkBudgetOptional == null ||
|
||||
majorFactor == null ||
|
||||
consultCategoryFactor == null
|
||||
) {
|
||||
return null
|
||||
}
|
||||
|
||||
const basic = roundTo(toDecimal(benchmarkBudgetBasic).mul(majorFactor).mul(consultCategoryFactor), 2)
|
||||
const optional = roundTo(toDecimal(benchmarkBudgetOptional).mul(majorFactor).mul(consultCategoryFactor), 2)
|
||||
|
||||
return {
|
||||
basic,
|
||||
optional,
|
||||
total: roundTo(addNumbers(basic, optional), 2),
|
||||
basicFormula: '',
|
||||
optionalFormula: ''
|
||||
}
|
||||
}
|
||||
|
||||
export const getScaleBudgetFee = (params: {
|
||||
|
||||
Reference in new issue
Block a user