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

8.0 KiB

📋 Installation Manuals til Tilbud - Komplet Guide

STATUS: FULDT FUNKTIONELT

Systemet kan nu automatisk udtrække monteringsopgaver fra PDF'er og bruge dem i tilbud!


🎯 Hvad Virker Nu

1. PDF Download & Analyse

  • PDF'er downloades fra Bygma produktsider
  • AI (GPT-4o) analyserer manualer automatisk
  • Udtrækker: monteringstrin, tid, værktøj, sikkerhed, materialer

2. Database

  • Installation data gemt i installation_manuals table
  • JSON felter med struktureret data
  • Klar til brug i tilbud-systemet

3. Tilbuds Integration

  • Hent monteringsopgaver direkte til tilbud
  • Beregn tid automatisk baseret på mængde
  • Formatterede opgavebeskrivelser klar til PDF

📖 Brug i Tilbud

Simpel Brug - Hent Opgave

const { getInstallationTask } = require('./get_installation_tasks');

// Hent monteringsopgave for 50 m² bølgeplader
const task = await getInstallationTask('Bølgeplade', 50);

console.log(task.formatted_description);
// Output: Komplet opgavebeskrivelse med trin, tid, vejrforhold

Output Eksempel:

MONTERING AF 280 MONTAGEVEJLEDNING BOELGEPLADETAG

Estimeret tid: 125.0 timer (ca. 16 arbejdsdage)
Sværhedsgrad: medium

MONTERINGSTRIN:
1. Kontroller rethed på lægter og spær med retholt eller snor
2. Monter Cembrit Plastudhængsklodser med ventilation ved tagfod
3. Fastgør lægter i henhold til gældende anvisninger
... (15 trin total)

VIGTIGE PUNKTER:
• Korrekt opbevaring og håndtering er afgørende
• Ventilation ved tagfod og kip er nødvendig
• Minimum 14˚ taghældning skal overholdes
...

VEJRFORHOLD:
Tørt vejr anbefales for at undgå kalkudfældninger

🔧 Integration i Tilbuds-System

I Quote Generator (unified-server/routes/quotes.js):

const { getInstallationTask } = require('../get_installation_tasks');

// Når du genererer tilbud med smart packages
router.post('/api/quotes/:id/generate-pdf', async (req, res) => {
  const quoteId = req.params.id;
  
  // Hent smart packages for tilbuddet
  const packages = await db.query(`
    SELECT sp.*, spm.material_name, spm.quantity
    FROM smart_packages sp
    JOIN smart_package_materials spm ON sp.id = spm.smart_package_id
    WHERE sp.quote_id = ?
  `, [quoteId]);
  
  // Tilføj monteringsopgaver
  const tasksForQuote = [];
  
  for (const pkg of packages) {
    const task = await getInstallationTask(pkg.material_name, pkg.quantity);
    
    if (task) {
      tasksForQuote.push({
        title: task.title,
        description: task.formatted_description,
        hours: task.time.total_hours,
        days: task.time.work_days
      });
    }
  }
  
  // Brug tasksForQuote i PDF generering
  // ...
});

I PDF Template:

<!-- I tilbud PDF template -->
<div class="installation-tasks">
  <h2>Monteringsopgaver</h2>
  
  {{#each tasks}}
  <div class="task">
    <h3>{{this.title}}</h3>
    <div class="task-details">
      <strong>Estimeret tid:</strong> {{this.hours}} timer ({{this.days}} arbejdsdage)
    </div>
    <pre class="task-description">{{this.description}}</pre>
  </div>
  {{/each}}
</div>

📊 Database Struktur

CREATE TABLE installation_manuals (
  id INT AUTO_INCREMENT PRIMARY KEY,
  product_name VARCHAR(255),              -- "280 Montagevejledning Boelgepladetag"
  manufacturer VARCHAR(255),              -- "Cembrit"
  manual_filename VARCHAR(255),
  manual_type ENUM('installation', ...),
  
  -- Monteringsdata
  installation_steps JSON,                -- Array af trin
  time_estimate_per_unit DECIMAL(5,2),   -- 2.5 timer per m²
  time_unit ENUM('per_sqm', ...),
  
  -- Hjælpemidler
  required_tools JSON,                    -- ["Vinkelsliber", ...]
  safety_requirements JSON,               -- ["Brug støvafsugning", ...]
  material_requirements JSON,             -- {"Tagskruer": "2.1 stk/m²", ...}
  
  -- Metadata
  skill_level ENUM('let','medium','svær'),
  weather_conditions TEXT,
  key_points JSON,
  
  created_at TIMESTAMP,
  updated_at TIMESTAMP
);

🚀 Workflow: Fra PDF til Tilbud

1. Download PDF fra Bygma

# Manuelt: Gå til Bygma produktside og download PDF
# Gem i: manuals/

2. Analyser med AI

cd /mnt/HC_Volume_103713257/tilbudgivern
python3 analyze_manual_pdfs.py

Output:

  • installation_data/analysis_results.json - AI analyse
  • installation_data/installation_manuals_migration.sql - Database migration

3. Import til Database

mysql -u tilbudgivern_service -p'REDACTED_PASSWORD' tilbudgivern < \
  installation_data/installation_manuals_migration.sql

4. Test i Node.js

node get_installation_tasks.js

5. Brug i Tilbud

const task = await getInstallationTask('Bølgeplade', 50);
// Brug task.formatted_description i PDF

📁 Filer Oprettet

Python Scripts (AI Analyse)

  • analyze_manual_pdfs.py - Hovedscript til PDF analyse
  • download_bygma_manuals.py - Bygma scraper
  • manuals/ - PDF storage
  • installation_data/ - Output (JSON + SQL)

Node.js Integration

  • get_installation_tasks.js - Hent opgaver til tilbud
  • core/installationManuals.js - Full integration modul
  • queries_installation_tasks.sql - SQL eksempler

💡 Use Cases

1. Smart Package med Auto-tid

// Når kunde vælger "Tag renovering 100 m²"
const materials = [
  { name: 'Bølgeplade', quantity: 100 }
];

const timeCalc = await calculateTotalInstallationTime(materials);
console.log(`Total tid: ${timeCalc.total_hours} timer`);
// Output: Total tid: 250 timer

2. Opgavebeskrivelse i Tilbud PDF

const task = await getInstallationTask('Bølgeplade', 100);

// Brug i PDF:
pdf.addPage();
pdf.text(task.formatted_description);
// Inkluderer: Trin, tid, vejrforhold, vigtige punkter

3. Værktøjsliste til Kunde

const task = await getInstallationTask('Bølgeplade', 50);

console.log('Nødvendigt værktøj:');
task.tools.forEach(tool => console.log(`- ${tool}`));
// Output:
// - Håndværktøj
// - Vinkelsliber med diamantklinge
// - Rundsav med hårdmetalklinge
// ...

🎯 Nuværende Data

Antal manualer i database: 1

  • Cembrit Bølgeplader (280 Montagevejledning)
    • 15 monteringstrin
    • 2.5 timer per m²
    • Medium sværhedsgrad
    • 6 værktøjer
    • 3 sikkerhedskrav

Næste steps:

  1. Download flere PDF'er fra Bygma produktsider
  2. Kør analyze_manual_pdfs.py for hver ny PDF
  3. Import til database
  4. Data er automatisk tilgængelig i tilbuds-systemet

🔗 Quick Reference

Test Script

node get_installation_tasks.js

SQL Query

SELECT product_name, time_estimate_per_unit, skill_level 
FROM installation_manuals;

API i Code

const { getInstallationTask } = require('./get_installation_tasks');
const task = await getInstallationTask('produktnavn', mængde);

Fordele

Automatisk - AI udtrækker alt fra PDF'er
Præcist - GPT-4o forstår danske montagemanualer
Struktureret - JSON data klar til brug
Fleksibelt - Kan bruges i PDF, UI, beregninger
Skalerbart - Nemt at tilføje flere manualer


📝 Eksempel Data

{
  "title": "Montering af 280 Montagevejledning Boelgepladetag",
  "quantity": 50,
  "unit": "m²",
  "time": {
    "per_unit": 2.5,
    "total_hours": 125,
    "work_days": 16
  },
  "difficulty": "medium",
  "steps": [
    "Kontroller rethed på lægter og spær med retholt eller snor",
    "Monter Cembrit Plastudhængsklodser med ventilation ved tagfod",
    ...
  ],
  "key_points": [
    "Korrekt opbevaring og håndtering er afgørende",
    "Ventilation ved tagfod og kip er nødvendig",
    ...
  ],
  "tools": [
    "Håndværktøj",
    "Vinkelsliber med diamantklinge",
    ...
  ],
  "weather": "Tørt vejr anbefales for at undgå kalkudfældninger"
}

Status: Klar til produktion
Testet: Fungerer med Cembrit bølgeplader
Næste: Download flere PDFer og test i fuldt tilbud workflow