foamking/lib/constants.ts
mikl0s 3ebb63dc6c Add admin dashboard, authentication, step wizard, and quote management
Expand the calculator with a multi-step wizard flow, admin dashboard with
quote tracking, login/auth system, distance API integration, and history
page. Add new UI components (dialog, progress, select, slider, switch),
update pricing logic, and improve the overall design with new assets.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 20:59:11 +00:00

83 lines
2.7 KiB
TypeScript

export const PRICES = {
// Isolering (per m³ volume)
INSULATION_MATERIALS: 2850, // kr/m³
INSULATION_LABOR_PER_M3: 880, // kr/m³
INSULATION_TOTAL_PER_M3: 3730, // kr/m³
// Base insulation labor (always applied per m² area)
INSULATION_BASE_LABOR: 75, // kr/m² - always added when insulation is included
// Gulvvarme (altid inkluderet)
FLOOR_HEATING_MATERIALS: 75, // kr/m²
FLOOR_HEATING_LABOR: 130, // kr/m²
FLOOR_HEATING_TOTAL: 205, // kr/m²
// Syntetisk net (altid inkluderet)
SYNTHETIC_NET_MATERIALS: 24, // kr/m²
SYNTHETIC_NET_LABOR: 25, // kr/m²
SYNTHETIC_NET_TOTAL: 49, // kr/m²
// Flydespartel
SELF_LEVELING_COMPOUND: 450, // kr/m²
COMPOUND_WEIGHT_PER_M2: 90, // kg/m²
// Faste gebyrer
START_FEE: 3500, // kr (leje af anlæg og sikkerhedsudstyr)
// Transport
TRANSPORT_PER_KM: 18.75, // kr/km
GREAT_BELT_FEE: 500, // kr (kun Fyn)
// Procenttillæg
COVERING_PERCENTAGE: 0.007, // 0.7%
WASTE_PERCENTAGE: 0.0025, // 0.25%
TOTAL_PERCENTAGE: 0.0095, // 0.95%
// Moms
VAT: 0.25, // 25%
} as const
// Pumpebil fees include both materials and labor (from rene.pdf)
export const PUMP_TRUCK_FEES = [
{ minWeight: 8000, materialFee: 0, laborFee: 8800, fee: 8800 }, // >8000 kg
{ minWeight: 5000, materialFee: 3800, laborFee: 8000, fee: 11800 }, // 5000-8000 kg
{ minWeight: 3000, materialFee: 6000, laborFee: 7000, fee: 13000 }, // 3000-5000 kg
{ minWeight: 0, materialFee: 8100, laborFee: 7000, fee: 15100 }, // 0-3000 kg
] as const
export const CONSTRAINTS = {
MIN_AREA: 25, // m²
MAX_AREA: 250, // m²
MIN_HEIGHT: 8, // cm
MAX_HEIGHT: 100, // cm
CONCRETE_THICKNESS: 5, // cm (fratrækkes fra højde)
HOME_POSTAL_CODE: "4550", // Asnæs
HOME_CITY: "Asnæs",
} as const
// Gulvbelægningstyper - påvirker valg af gulvspartel
export const FLOORING_TYPES = {
STANDARD: {
id: "standard",
name: "Klinker / Svømmende trægulv",
description: "Fliser, klinker eller trægulv der ikke limes",
compoundMultiplier: 1.0, // Standard compound
},
GLUED_WOOD: {
id: "glued_wood",
name: "Limet trægulv",
description: "Trægulv der limes fast til underlaget",
compoundMultiplier: 1.28, // Premium compound kræves (+28%)
},
} as const
export type FlooringType = keyof typeof FLOORING_TYPES
export const COVERAGE_AREAS = {
WEST_ZEALAND: { start: 4000, end: 4999, bridgeFee: 0 },
COPENHAGEN: { start: 2000, end: 2999, bridgeFee: 0 },
NORTH_ZEALAND: { start: 3000, end: 3999, bridgeFee: 0 },
LOLLAND_FALSTER: { start: 4800, end: 4899, bridgeFee: 0 },
FUNEN: { start: 5000, end: 5999, bridgeFee: PRICES.GREAT_BELT_FEE },
} as const
export type CoverageArea = keyof typeof COVERAGE_AREAS