34dbfa5d7d
TV-8 pricing: - computeRecommendedPrice(bdft, pricePerBdft) returns bdft × price/bdft rounded half-up to 2 decimals 0.96 bdft × 12.50/bdft → 12.00 - computeSlabPrice handles three paths: 1. Has rule, no override → recommended price, source 'recommendation' 2. Has rule, override → override stored (150.00), source 'override' 3. No rule, manual → manual stored (99.99), recommendedPrice null TV-9 thickness band: - findThicknessBand(thicknessIn, ranges) rounds to 1/8" then matches [min, max) half-open ranges - 1" → 1"–1 1/2" (rounds up, label from synced Woo attribute, not hardcoded) Test output (all 29 tests green, 6 new): - tv8-pricing.test.ts: 6 passed (recommended, override, no-rule, rounding) - tv9-thickness-band.test.ts: 6 passed (1"→1"–1 1/2", 0.75"→3/4"–1", 0.875"→3/4"–1", 1.5"→1 1/2"–2", null for out-of-range, rounding to 1/8")
21 lines
463 B
TypeScript
21 lines
463 B
TypeScript
/** TECH-SPEC §8 TV-8 pricing fixture. */
|
|
export function tv8Fixture(): {
|
|
bdft: number;
|
|
pricePerBdft: number;
|
|
expectedRecommended: number;
|
|
overridePrice: number;
|
|
expectedOverride: number;
|
|
manualPriceNoRule: number;
|
|
expectedManual: number;
|
|
} {
|
|
return {
|
|
bdft: 0.96,
|
|
pricePerBdft: 12.50,
|
|
expectedRecommended: 12.00,
|
|
overridePrice: 150.00,
|
|
expectedOverride: 150.00,
|
|
manualPriceNoRule: 99.99,
|
|
expectedManual: 99.99,
|
|
};
|
|
}
|