Files
tilbudgivern/docs/features/SMART_PACKAGES_INTELLIGENT_FLOW.md
alexpolo1 4a372d2e28 clean up
2025-10-30 18:28:58 +00:00

8.3 KiB

Smart Packages - Intelligent Automated Flow

Oversigt

Smart Packages er nu redesigned til at være fuldt automatisk med AI-integration for at beregne tid, materialer og opgaver baseret på m² fra projekter.

Ny Struktur

1. Arbejdsområder (Categories)

Før: "package_type" (standard, premium, basic) - gav ingen mening
Nu: Arbejdsområder baseret på byggeopgaver:

  • Tag - Tagarbejde, tagsten, tagplader
  • Gulv - Gulvlægning, underlag, finish
  • Væg - Vægge, skillevægge, isolering
  • Køkken - Køkkenmontage, bordplader, skabe
  • Badeværelse - VVS, fliser, membran

2. Database Struktur

material_packages (Hovedtabel)

- id: INT
- name: VARCHAR(255)
- description: TEXT
- category: VARCHAR(100)  -- Tag, Gulv, Væg, etc.
- difficulty_level: INT (1-4)
- estimated_hours: DECIMAL (basis timer)
- hourly_rate: DECIMAL
- area_based: BOOLEAN  -- Om pakken skal beregnes ud fra m²
- time_per_sqm: DECIMAL  -- Timer per m² (beregnes automatisk)
- auto_calculated: BOOLEAN  -- Om alt beregnes automatisk
- installation_notes: TEXT
- is_template: BOOLEAN
- popularity_score: INT

smart_package_materials (Materialer i pakke)

- id: INT
- package_id: INT
- material_id: INT
- quantity_base: DECIMAL  -- Basismængde (uanset størrelse)
- quantity_per_sqm: DECIMAL  -- Mængde per m²
- quantity_formula: VARCHAR  -- Formel: "area * 1.5 + 10"
- waste_percentage: DECIMAL  -- Spildprocent (5%, 10%)
- optional: BOOLEAN
- installation_manual_id: INT  -- Link til montagevejledning

smart_package_tasks (Opgaver i pakke)

- id: INT
- package_id: INT
- task_title: VARCHAR(255)
- task_description: TEXT
- estimated_hours: DECIMAL
- time_per_sqm: DECIMAL  -- Timer per m² for denne opgave
- order_index: INT  -- Rækkefølge
- source: VARCHAR  -- 'manual' eller 'ai_generated'
- source_material_id: INT  -- Hvis AI-genereret fra materiale

Intelligent Workflow

Fase 1: Opret Smart Pakke med Materialer

  1. Tømrer opretter ny smart pakke (f.eks. "Tag Renovering - Betontagsten")
  2. Vælger kategori: "Tag"
  3. Tilføjer materialer via autocomplete
  4. For hvert materiale:
    • Klik på 📋 knap → Henter montagevejledning automatisk
    • AI analyserer montagevejledning → Udtræk opgaver
    • Beregner tid per m² baseret på montagevejledning
    • Opretter formler for materialemængder per m²

Fase 2: AI Generering af Opgaver (TODO)

// Når montagevejledning hentes:
async function generateTasksFromManual(installationManual, materialId, packageId) {
  const prompt = `
    Baseret på denne montagevejledning, generer en struktureret liste af opgaver:
    
    Produkt: ${installationManual.product_name}
    Monteringstrin: ${JSON.stringify(installationManual.installation_steps)}
    Tidsestimat: ${installationManual.time_estimate_per_unit} ${installationManual.time_unit}
    Sværhedsgrad: ${installationManual.skill_level}
    
    Generer:
    1. Opgave titel (kort, præcis)
    2. Opgave beskrivelse
    3. Timer per m² for denne opgave
    4. Rækkefølge (1, 2, 3...)
    
    Format: JSON array
  `;
  
  const tasks = await openaiService.generateTasks(prompt);
  
  // Gem opgaver i smart_package_tasks
  for (const task of tasks) {
    await db.execute(`
      INSERT INTO smart_package_tasks 
      (package_id, task_title, task_description, time_per_sqm, order_index, source, source_material_id)
      VALUES (?, ?, ?, ?, ?, 'ai_generated', ?)
    `, [packageId, task.title, task.description, task.timePerSqm, task.order, materialId]);
  }
  
  // Opdater pakken med samlet tid per m²
  const totalTimePerSqm = tasks.reduce((sum, t) => sum + t.timePerSqm, 0);
  await db.execute(`
    UPDATE material_packages 
    SET time_per_sqm = ?, auto_calculated = 1
    WHERE id = ?
  `, [totalTimePerSqm, packageId]);
}

Fase 3: Brug i Projekt

  1. Tømrer er i projekt flow (f.eks. Tag Renovering på 85m²)

  2. Vælger Smart Pakke "Tag Renovering - Betontagsten"

  3. m² fra projekt indsættes automatisk (85m²)

  4. System beregner automatisk:

    // Materialer beregnes:
    for (material in package.materials) {
      quantity = (material.quantity_per_sqm * area) + material.quantity_base
      quantity = quantity * (1 + material.waste_percentage / 100)
    }
    
    // Tid beregnes:
    totalHours = package.time_per_sqm * area
    
    // Pris beregnes:
    materialCost = sum(material.price * material.quantity)
    laborCost = totalHours * package.hourly_rate
    totalPrice = materialCost + laborCost
    
  5. Opgaver tilføjes til projekt med korrekt rækkefølge

  6. Materialer tilføjes til indkøbsliste

  7. Timer tilføjes til tidsplan

Eksempel Flow

Eksempel: Tag Renovering Smart Pakke

1. Opret pakke:

  • Navn: "Tag Renovering - Betontagsten"
  • Kategori: "Tag"
  • Sværhedsgrad: 3

2. Tilføj materialer:

Materiale 1: Betontagsten

  • Klik 📋 → Hent montagevejledning
  • AI finder: "2.5 timer per 10m²" = 0.25 timer/m²
  • Formel: 12 stk/m² * area (med 10% spild)
  • AI genererer opgaver:
    1. "Fjern gamle tagsten" - 0.15 timer/m²
    2. "Kontroller undertag" - 0.05 timer/m²
    3. "Læg nye betontagsten" - 0.25 timer/m²
    4. "Monter ryg og noktagsten" - 0.10 timer/m²

Materiale 2: Undertag

  • Klik 📋 → Hent montagevejledning
  • AI finder: "1.8 timer per 10m²" = 0.18 timer/m²
  • Formel: 1 m²/m² * area (med 5% spild)
  • AI genererer opgaver:
    1. "Udrul undertag" - 0.08 timer/m²
    2. "Fastgør undertag" - 0.10 timer/m²

3. System beregner automatisk:

  • Samlet tid per m²: 0.73 timer/m²
  • Opdaterer material_packages.time_per_sqm = 0.73

4. Brug i projekt (85m² tag):

Materialer:
- Betontagsten: 12 * 85 * 1.10 = 1122 stk
- Undertag: 1 * 85 * 1.05 = 89 

Tid:
- Total: 0.73 * 85 = 62 timer

Pris:
- Betontagsten: 1122 * 15kr = 16,830kr
- Undertag: 89 * 45kr = 4,005kr
- Arbejdsløn: 62 * 580kr = 35,960kr
- I ALT: 56,795kr

Fordele

For Tømrer

Ingen manuel beregning - Alt er automatisk
Præcise estimater - Baseret på faktiske montagevejledninger
Hurtig tilbudsgivning - Vælg pakke, indtast m², færdig
Strukturerede opgaver - AI genererer arbejdsliste automatisk

For System

Læring over tid - Jo flere pakker, jo bedre estimater
Konsistens - Samme beregning hver gang
Sporbarhed - Se hvor tid/materialer kom fra
Fleksibilitet - Nem at justere formler

Næste Skridt (Implementation)

1. AI Opgave Generering (Højeste prioritet)

  • Database struktur klar
  • OpenAI integration til at parse montagevejledning
  • Automatisk opgave generering ved tilføjelse af materiale
  • UI til at vise AI-genererede opgaver med mulighed for at redigere

2. Formel Beregning

  • Frontend: Vis formel editor ved tilføjelse af materiale
  • Backend: Parse og validér formler
  • Test: Beregn korrekt med forskellige input

3. Projekt Integration

  • API endpoint: /api/customer-projects/:id/add-smart-package
  • Automatisk udtræk m² fra projekt geometri
  • Beregn alt automatisk ved tilføjelse
  • Vis resultat før bekræftelse

4. Smart Package Browser

  • Filtrer efter kategori (Tag, Gulv, osv.)
  • Vis m² range og estimeret pris
  • Preview: Hvad indgår i pakken?
  • Popularitet: Mest brugte pakker

API Endpoints

Nye endpoints der skal oprettes:

// Generer opgaver fra montagevejledning
POST /api/smart-packages/:id/materials/:materialId/generate-tasks
Body: { installationManualId: number }
Response: { tasks: Task[], timePerSqm: number }

// Beregn pakke for specifik m²
POST /api/smart-packages/:id/calculate
Body: { area: number }
Response: { 
  materials: { id, name, quantity, unit, price, total }[],
  tasks: { title, hours, description }[],
  totalHours: number,
  materialCost: number,
  laborCost: number,
  totalCost: number
}

// Tilføj smart pakke til projekt
POST /api/customer-projects/:projectId/add-smart-package
Body: { packageId: number, area?: number }
Response: { 
  addedMaterials: number,
  addedTasks: number,
  totalCost: number
}

Status:

Database struktur oprettet
Kategorier ændret til arbejdsområder
Frontend opdateret til at fjerne package_type
AI opgave generering mangler
Automatisk beregning i projekt mangler

Næste: Implementér AI opgave generering når materiale tilføjes!