Añade impermeabilización, extras fijos y zonas al motor de presupuesto
Acerca el cálculo a tarifas de mercado sin rehacer el modelo lineal €/m²: - Impermeabilización como partida propia en zonas húmedas (cocina/baño/integral) - Extras fijos que no escalan con m²: boletín (siempre), tuberías (piso anterior a 2000) y cambio de distribución (mover inodoro/ducha/bañera) - Intensidad por tipo en fontanería/electricidad (baseline cocina) para que un integral no escale como un baño - Factor de zona por provincia en tramos (Madrid/BCN 1.40, islas 1.30, capitales 1.20, rural 0.85, resto 1.00) - 2 preguntas nuevas en el formulario del cliente para disparar los extras - Panel de precios: campo de impermeabilización + sección de extras fijos - Seed recalibrado (mano de obra, extras, catálogo suelo/pared) - Migración 0009 (leads.anterior_a_2000, leads.cambio_distribucion, pricing_config.extras) - Tests del motor ampliados (impermeabilización, extras, intensidad por tipo) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -21,11 +21,14 @@ export async function getEnvioMode(): Promise<EnvioMode> {
|
||||
|
||||
const MANO_OBRA_DEFAULT: Record<ManoObraKey, number> = {
|
||||
demolicion: 0,
|
||||
impermeabilizacion: 0,
|
||||
fontaneria: 0,
|
||||
electricidad: 0,
|
||||
mano_de_obra: 0,
|
||||
};
|
||||
|
||||
const EXTRAS_DEFAULT = { tuberias: 0, boletin: 0, distribucion: 0 };
|
||||
|
||||
export async function getPricingConfigFor(tenantId: string): Promise<PricingConfig> {
|
||||
const [row] = await db
|
||||
.select()
|
||||
@@ -34,12 +37,18 @@ export async function getPricingConfigFor(tenantId: string): Promise<PricingConf
|
||||
.limit(1);
|
||||
|
||||
if (!row) {
|
||||
return { alturaTechoDefault: 2.5, factorZona: {}, manoObra: { ...MANO_OBRA_DEFAULT } };
|
||||
return {
|
||||
alturaTechoDefault: 2.5,
|
||||
factorZona: {},
|
||||
manoObra: { ...MANO_OBRA_DEFAULT },
|
||||
extras: { ...EXTRAS_DEFAULT },
|
||||
};
|
||||
}
|
||||
return {
|
||||
alturaTechoDefault: row.alturaTechoDefault,
|
||||
factorZona: row.factorZona,
|
||||
manoObra: { ...MANO_OBRA_DEFAULT, ...(row.manoObra as Record<ManoObraKey, number>) },
|
||||
extras: { ...EXTRAS_DEFAULT, ...(row.extras ?? {}) },
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user