# Tilbudgivern - AI-baseret Tilbudsberegner En AI-drevet tilbudsberegner for tømrerfaget, der hjælper med at generere detaljerede og professionelle tilbud baseret på projektbeskrivelser. ## Funktioner - **AI-genererede tilbud**: Bruger OpenAI GPT-4 til at generere detaljerede tilbud - **Smart Pakker**: 15 forudkonfigurerede tømrerpakker til tagarbejde med auto-beregning - **7 Tagtyper**: Sadeltag, Valmtag, Københavnertag, Fladtag, Pulttag, Tag med Kviste, Mansardtag - **Ordrestyring Integration**: GraphQL integration til kunder, sager, tilbud og kalender - **Materialeimport**: Bygma prisbog og Stark katalog import - **PDF Generering**: Professionelle tilbuds-PDF'er via Puppeteer - **Real-time Updates**: Socket.IO til live samarbejde - **Struktureret Logging**: JSON logs med correlation IDs ## Teknologi Stack | Lag | Teknologi | |-----|-----------| | **Frontend** | React 18, Material-UI 5, Socket.IO Client | | **Backend** | Node.js/Express (unified server) | | **Database** | MariaDB/MySQL | | **AI** | OpenAI GPT-4 API ($9/måned budget) | | **Process Manager** | PM2 | | **Test** | Playwright, Jest, Selenium | ## Forudsætninger - Node.js 18+ - MariaDB/MySQL database - OpenAI API nøgle ## Quick Start ### 1. Installer afhængigheder ```bash npm install cd backend && npm install cd ../frontend && npm install ``` ### 2. Konfigurer environment Opret `backend/.env`: ```env # Database DB_HOST=127.0.0.1 DB_USER=tilbuduser DB_PASSWORD=din-password DB_NAME=tilbudgivern DB_PORT=3306 # AI OPENAI_API_KEY= # Server PORT=4032 # Valgfri ORDRESTYRING_API_TOKEN=din-ordrestyring-token ``` ### 3. Start applikationen **Development:** ```bash npm run dev ``` **Production:** ```bash npm run build # Byg frontend pm2 start ecosystem.config.js ``` Applikationen kører på **http://localhost:4032** ## Kommandoer ### Development ```bash npm run dev # Start med hot reload npm run build # Byg frontend til produktion ``` ### Production ```bash pm2 restart tilbudgivern-unified # Genstart server pm2 logs tilbudgivern-unified # Se logs pm2 status # Check status ``` ### Test ```bash npm run test:pw # Playwright E2E tests (produktion) npm run test:pw:local # Playwright tests (lokal) npm run test:pw:headed # Playwright med synlig browser cd backend && npm test # Backend unit tests (Jest) npm run test:selenium # Selenium UI tests ``` ## Arkitektur ### Unified Server Pattern Applikationen bruger en unified server (`backend/unified-server.js`) der: - Serverer React frontend fra `frontend/build/` - Leverer alle API endpoints på port 4032 - Håndterer WebSocket via Socket.IO ### Backend Services (40+) ``` backend/src/services/ ├── openaiService.js # GPT-4 tilbudsgenerering ├── smartPackageManagementService.js # Smart pakke håndtering ├── ordrestyringSyncService.js # Ordrestyring integration ├── roofGeometryService.js # Tagberegninger ├── pdfGenerationService.js # PDF generering ├── bygmaPrisbogImportService.js # Bygma import ├── starkImportService.js # Stark import └── ... ``` ### Frontend Components ``` frontend/src/components/ ├── ProjectFlow.js # Projekt wizard ├── EnhancedGeometry.js # Tag geometri med SVG ├── SmartPackagesEnhanced.js # Smart pakke konfiguration ├── FinalReview.js # Tilbuds review ├── MaterialsManager.js # Materiale valg └── ... ``` ## Projektstruktur ``` tilbudgivern/ ├── backend/ │ ├── unified-server.js # Hoved server (~12,700 LOC) │ ├── src/ │ │ ├── services/ # 40+ services │ │ ├── routes/ # API routes │ │ ├── middleware/ # Express middleware │ │ └── graphql/ # Ordrestyring queries │ └── migrations/ # Database migrations ├── frontend/ │ ├── src/ │ │ ├── components/ # 57+ React komponenter │ │ ├── contexts/ # Auth context │ │ └── services/ # Frontend services │ └── build/ # Produktion build ├── database/ # Schema og seeds ├── tests/ # Playwright & Selenium tests ├── docs/ # Dokumentation └── ecosystem.config.js # PM2 konfiguration ``` ## API Endpoints ### Tilbud ``` POST /api/quotes/generate # Generer tilbud POST /api/quotes/generate-ai # AI-drevet generering GET /api/quotes/completed # Liste fuldførte tilbud POST /api/quotes/:id/accept # Accepter tilbud DELETE /api/quotes/:id # Slet tilbud ``` ### Smart Pakker ``` GET /api/smart-packages/ # Liste alle pakker POST /api/smart-packages/ # Opret pakke GET /api/smart-packages/:id # Hent specifik pakke PUT /api/smart-packages/:id # Opdater pakke ``` ### Projekter ``` POST /api/projects # Opret projekt GET /api/projects # Liste projekter GET /api/projects/:id # Hent projekt PUT /api/projects/:id # Opdater projekt ``` ### Materialer & Priser ``` GET /api/materials # Liste materialer GET /api/materials/search # Søg materialer POST /api/pricing/bygma-prisbog # Import Bygma prisbog GET /api/pricing/bygma-prices # Hent Bygma priser ``` ### Analytics ``` GET /api/analytics/kpis # Key performance indicators GET /api/dashboard/noegletal # Nøgletal dashboard GET /api/dashboard/economics # Økonomisk overblik ``` ## Database ### Primære Tabeller | Tabel | Beskrivelse | |-------|-------------| | `project_quotes` | Genererede tilbud | | `customer_projects` | Projekt metadata | | `roof_geometry` | Tag dimensioner og typer | | `material_packages` | Smart pakke definitioner | | `smart_package_tasks` | Opgaver i pakker | | `project_materials` | Materiale valg | | `project_labor` | Arbejdstimer | | `system_logs` | Struktureret logging | ## Eksterne Integrationer ### Ordrestyring API - GraphQL endpoint til ordre/kundestyring - Synkronisering af kunder, sager og tilbud - Kalender integration ### OpenAI API - GPT-4 til intelligent tilbudsgenerering - Token tracking og budget overvågning - $9/måned budget (~160K tokens) ### Bygma & Stark - Materiale prisbog import - Katalog synkronisering ## Tagtyper (7 understøttede) 1. **Sadeltag** - Standard sadeltag (default) 2. **Valmtag** - Fire-sidet tag 3. **Københavnertag** - Fladt tag med hældning 4. **Fladtag** - Helt fladt tag 5. **Pulttag** - Ensidigt skrå tag 6. **Tag med Kviste** - Tag med kviste 7. **Mansardtag** - Mansard stil ## Sikkerhed - Rate limiting på API endpoints - Input validering med Joi - Helmet.js sikkerhedsheaders - JWT authentication - Parameteriserede SQL queries - CORS konfiguration ## Dokumentation Se `/docs/` mappen for detaljeret dokumentation: - [API Dokumentation](docs/api/) - [Feature Guides](docs/features/) - [Deployment Guide](docs/deployment/) - [Logging System](docs/LOGGING_SYSTEM.md) ## Support Ved spørgsmål eller problemer, opret et issue i projektets GitHub repository. ## Licens MIT License - se LICENSE fil for detaljer.