This commit is contained in:
zwgczx committed 2026-03-03 16:16:16 +08:00
1 parent 62546bc937
commit 33913c29d2
9 files changed
+1153 -239

No files matched your search

+62 -2
View File
@@ -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: {