feat: derive cantidades from minimal measurements
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
39
mvp/b2c/src/budget/derive.ts
Normal file
39
mvp/b2c/src/budget/derive.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import type { BudgetInputs, PricingConfig, TipoReforma } from './types';
|
||||
|
||||
export interface Cantidades {
|
||||
m2Suelo: number;
|
||||
m2Pared: number;
|
||||
mlMobiliario: number;
|
||||
perimetro: number;
|
||||
alturaTecho: number;
|
||||
}
|
||||
|
||||
const M2_MEDIANA: Record<TipoReforma, number> = {
|
||||
cocina: 10,
|
||||
bano: 5,
|
||||
salon: 20,
|
||||
comedor: 16,
|
||||
integral: 70,
|
||||
otro: 12,
|
||||
};
|
||||
|
||||
// Metros lineales de mobiliario por metro de perímetro. Solo cocina/baño.
|
||||
const FACTOR_MOBILIARIO: Partial<Record<TipoReforma, number>> = {
|
||||
cocina: 0.5,
|
||||
bano: 0.3,
|
||||
};
|
||||
|
||||
export function deriveCantidades(inputs: BudgetInputs, config: PricingConfig): Cantidades {
|
||||
const m2Suelo =
|
||||
inputs.m2Suelo != null && inputs.m2Suelo > 0
|
||||
? inputs.m2Suelo
|
||||
: M2_MEDIANA[inputs.tipoReforma];
|
||||
const alturaTecho =
|
||||
inputs.alturaTecho != null && inputs.alturaTecho > 0
|
||||
? inputs.alturaTecho
|
||||
: config.alturaTechoDefault;
|
||||
const perimetro = 4 * Math.sqrt(m2Suelo);
|
||||
const m2Pared = perimetro * alturaTecho;
|
||||
const mlMobiliario = perimetro * (FACTOR_MOBILIARIO[inputs.tipoReforma] ?? 0);
|
||||
return { m2Suelo, m2Pared, mlMobiliario, perimetro, alturaTecho };
|
||||
}
|
||||
Reference in New Issue
Block a user