Features: - Complete Next.js 16 app with TypeScript and Tailwind CSS - Customer-facing price calculator form with validation - Admin mode showing detailed price breakdowns - Accurate price calculations matching business requirements - Responsive design with custom shadcn/ui theme - API endpoint for quote requests - Danish postal code distance calculations - Complete test coverage against documentation examples 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
63 lines
No EOL
1.7 KiB
TypeScript
63 lines
No EOL
1.7 KiB
TypeScript
export const PRICES = {
|
|
// Isolering
|
|
INSULATION_MATERIALS: 2850, // kr/m³
|
|
INSULATION_LABOR: 880, // kr/m³
|
|
INSULATION_TOTAL: 3730, // kr/m³
|
|
SIMPLE_LABOR: 75, // kr/m² (når højde = 0)
|
|
|
|
// 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
|
|
|
|
export const PUMP_TRUCK_FEES = [
|
|
{ minWeight: 8000, fee: 0 },
|
|
{ minWeight: 5000, fee: 3800 },
|
|
{ minWeight: 3000, fee: 6000 },
|
|
{ minWeight: 0, fee: 8100 },
|
|
] as const
|
|
|
|
export const CONSTRAINTS = {
|
|
MIN_AREA: 25, // m²
|
|
MAX_AREA: 300, // m²
|
|
MIN_HEIGHT: 0, // 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
|
|
|
|
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 |