docs: Planungsdokumente erstellen
- Marktanalyse (Wettbewerber, Lücken, USPs) - Anforderungskatalog (Must-Have, Should-Have, Nice-to-Have) - MVP Definition (Features, Datenmodell, Zeitplan) - Technische Architektur (Stack, API, DB-Schema) - Waagen-Integration (Hersteller, Protokolle, Strategie)
This commit is contained in:
122
docs/ANFORDERUNGEN.md
Normal file
122
docs/ANFORDERUNGEN.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# SchüttGo - Anforderungskatalog
|
||||
|
||||
## 1. Must-Have Features (MVP)
|
||||
|
||||
### 1.1 Stammdaten
|
||||
| Feature | Beschreibung | Priorität |
|
||||
|---------|--------------|-----------|
|
||||
| Kundenverwaltung | Name, Adresse, Kontakt, Konditionen | 🔴 Kritisch |
|
||||
| Lieferantenverwaltung | Lieferanten von Schüttgut | 🟡 Hoch |
|
||||
| Materialstamm | Schüttgüter mit Preisen, Einheiten | 🔴 Kritisch |
|
||||
| Fahrzeugstamm | LKW-Daten, Kennzeichen, Tara | 🔴 Kritisch |
|
||||
| Mitarbeiter | Benutzer, Rollen, Rechte | 🔴 Kritisch |
|
||||
|
||||
### 1.2 Kernprozesse
|
||||
| Feature | Beschreibung | Priorität |
|
||||
|---------|--------------|-----------|
|
||||
| Auftrag erfassen | Kunde, Material, Menge, Liefertermin | 🔴 Kritisch |
|
||||
| Wiegung durchführen | Ein-/Ausfahrt, Brutto/Tara/Netto | 🔴 Kritisch |
|
||||
| Lieferschein erstellen | Automatisch nach Wiegung | 🔴 Kritisch |
|
||||
| Lieferschein drucken | PDF-Export, Drucker | 🔴 Kritisch |
|
||||
|
||||
### 1.3 Abrechnung
|
||||
| Feature | Beschreibung | Priorität |
|
||||
|---------|--------------|-----------|
|
||||
| Rechnung erstellen | Aus Lieferscheinen | 🔴 Kritisch |
|
||||
| Preisfindung | Kundenpreise, Staffeln | 🟡 Hoch |
|
||||
| Sammelrechnung | Mehrere Lieferscheine | 🟡 Hoch |
|
||||
|
||||
## 2. Should-Have Features (Phase 2)
|
||||
|
||||
### 2.1 Erweiterte Funktionen
|
||||
| Feature | Beschreibung | Priorität |
|
||||
|---------|--------------|-----------|
|
||||
| Dashboard | KPIs, Tagesübersicht | 🟡 Hoch |
|
||||
| Berichte | Umsatz, Mengen, Kunden | 🟡 Hoch |
|
||||
| Lagerbestand | Bestandsführung, Inventur | 🟡 Hoch |
|
||||
| Fuhrpark | Fahrzeuge, Touren, Kosten | 🟡 Hoch |
|
||||
| Disposition | Tourenplanung | 🟢 Mittel |
|
||||
|
||||
### 2.2 Integration
|
||||
| Feature | Beschreibung | Priorität |
|
||||
|---------|--------------|-----------|
|
||||
| Waagen-API | Diverse Hersteller | 🔴 Kritisch |
|
||||
| DATEV-Export | Buchhaltung | 🟡 Hoch |
|
||||
| E-Mail | Lieferscheine/Rechnungen versenden | 🟡 Hoch |
|
||||
| PDF-Vorlagen | Anpassbare Dokumente | 🟢 Mittel |
|
||||
|
||||
## 3. Nice-to-Have Features (Phase 3)
|
||||
|
||||
### 3.1 Erweiterungen
|
||||
| Feature | Beschreibung | Priorität |
|
||||
|---------|--------------|-----------|
|
||||
| GPS-Tracking | Fahrzeugortung | 🟢 Mittel |
|
||||
| Fahrer-App | Mobile App für LKW-Fahrer | 🟢 Mittel |
|
||||
| Kundenportal | Self-Service für Kunden | 🟢 Mittel |
|
||||
| Automatische Waage | Unbemannte Wiegung | 🔵 Niedrig |
|
||||
| QR-Code Scanner | Schnelle Identifikation | 🟢 Mittel |
|
||||
| Statistiken | Erweiterte Analytics | 🔵 Niedrig |
|
||||
|
||||
## 4. Nicht-funktionale Anforderungen
|
||||
|
||||
### 4.1 Performance
|
||||
- Seitenladezeit < 2 Sekunden
|
||||
- Wiegung < 500ms Response
|
||||
- 100+ gleichzeitige Benutzer
|
||||
|
||||
### 4.2 Sicherheit
|
||||
- DSGVO-konform
|
||||
- Verschlüsselte Verbindung (HTTPS)
|
||||
- Rollenbasierte Zugriffskontrolle
|
||||
- Audit-Log für Wiegungen
|
||||
|
||||
### 4.3 Verfügbarkeit
|
||||
- 99,5% Uptime
|
||||
- Tägliche Backups
|
||||
- Disaster Recovery Plan
|
||||
|
||||
### 4.4 Usability
|
||||
- Responsive Design (Desktop, Tablet)
|
||||
- Max. 3 Klicks für Kernfunktionen
|
||||
- Deutsche Sprache
|
||||
- Touch-optimiert für Waagen-Terminal
|
||||
|
||||
## 5. Technische Anforderungen
|
||||
|
||||
### 5.1 Client
|
||||
- Moderner Browser (Chrome, Firefox, Edge, Safari)
|
||||
- Keine Installation erforderlich
|
||||
- Offline-Fähigkeit für Kernfunktionen (optional)
|
||||
|
||||
### 5.2 Waagen-Integration
|
||||
- RS232/COM-Port Unterstützung
|
||||
- TCP/IP Unterstützung
|
||||
- Protokolle: ASCII, Modbus, Herstellerspezifisch
|
||||
- Unterstützte Hersteller (Ziel):
|
||||
- Mettler Toledo
|
||||
- Bizerba
|
||||
- KERN
|
||||
- Sartorius
|
||||
|
||||
### 5.3 Schnittstellen
|
||||
- REST API für alle Funktionen
|
||||
- Webhook-Support für Events
|
||||
- CSV/Excel Import/Export
|
||||
- PDF-Generierung
|
||||
|
||||
## 6. User Stories
|
||||
|
||||
### Waagenbediener
|
||||
> Als Waagenbediener möchte ich ein Fahrzeug schnell identifizieren können (Kennzeichen), um die Wiegung effizient durchzuführen.
|
||||
|
||||
### Disponent
|
||||
> Als Disponent möchte ich alle offenen Aufträge sehen und Fahrzeuge zuweisen können.
|
||||
|
||||
### Buchhalter
|
||||
> Als Buchhalter möchte ich aus Lieferscheinen mit einem Klick Rechnungen erstellen und an DATEV exportieren können.
|
||||
|
||||
### Geschäftsführer
|
||||
> Als Geschäftsführer möchte ich ein Dashboard mit Tagesumsatz, Mengen und Vergleichszahlen sehen.
|
||||
|
||||
---
|
||||
*Erstellt: 2026-02-19*
|
||||
291
docs/ARCHITEKTUR.md
Normal file
291
docs/ARCHITEKTUR.md
Normal file
@@ -0,0 +1,291 @@
|
||||
# SchüttGo - Technische Architektur
|
||||
|
||||
## 1. Tech-Stack Übersicht
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ FRONTEND │
|
||||
│ Vue 3 + FluxKit UI + TailwindCSS + TypeScript │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ HTTPS / REST API
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ BACKEND │
|
||||
│ Deno + Oak + TypeScript │
|
||||
│ ├── Auth (JWT) │
|
||||
│ ├── REST API │
|
||||
│ ├── PDF Generator │
|
||||
│ └── Waagen-Service (optional) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
│ SQL
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ DATABASE │
|
||||
│ PostgreSQL 16 │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 2. Frontend
|
||||
|
||||
### 2.1 Technologie
|
||||
| Komponente | Technologie | Begründung |
|
||||
|------------|-------------|------------|
|
||||
| Framework | Vue 3 | Reaktiv, performant, gute DX |
|
||||
| UI Library | FluxKit UI | Eigene Komponenten, einheitlich |
|
||||
| Styling | TailwindCSS | Utility-first, schnell |
|
||||
| State | Pinia | Offiziell, einfach |
|
||||
| HTTP | Axios | Standard, Interceptors |
|
||||
| Routing | Vue Router | Standard |
|
||||
| Build | Vite | Schnell, modern |
|
||||
|
||||
### 2.2 Projektstruktur
|
||||
```
|
||||
schuettgo-frontend/
|
||||
├── src/
|
||||
│ ├── components/ # Wiederverwendbare Komponenten
|
||||
│ │ ├── WeighingForm.vue
|
||||
│ │ ├── CustomerSelect.vue
|
||||
│ │ └── ...
|
||||
│ ├── views/ # Seiten
|
||||
│ │ ├── Dashboard.vue
|
||||
│ │ ├── Weighing.vue
|
||||
│ │ ├── Customers.vue
|
||||
│ │ └── ...
|
||||
│ ├── stores/ # Pinia Stores
|
||||
│ │ ├── auth.ts
|
||||
│ │ ├── weighing.ts
|
||||
│ │ └── ...
|
||||
│ ├── api/ # API Client
|
||||
│ ├── router/ # Routing
|
||||
│ └── utils/ # Hilfsfunktionen
|
||||
├── public/
|
||||
└── package.json
|
||||
```
|
||||
|
||||
## 3. Backend
|
||||
|
||||
### 3.1 Technologie
|
||||
| Komponente | Technologie | Begründung |
|
||||
|------------|-------------|------------|
|
||||
| Runtime | Deno 2.x | Sicher, TS native, modern |
|
||||
| Framework | Oak | Express-ähnlich, stabil |
|
||||
| ORM | Drizzle ORM | Type-safe, performant |
|
||||
| Auth | JWT | Stateless, skalierbar |
|
||||
| Validation | Zod | Schema-basiert |
|
||||
| PDF | @pdfme/generator | Vorlagen-basiert |
|
||||
|
||||
### 3.2 Projektstruktur
|
||||
```
|
||||
schuettgo-backend/
|
||||
├── src/
|
||||
│ ├── routes/ # API Endpoints
|
||||
│ │ ├── auth.ts
|
||||
│ │ ├── customers.ts
|
||||
│ │ ├── materials.ts
|
||||
│ │ ├── vehicles.ts
|
||||
│ │ ├── weighings.ts
|
||||
│ │ └── invoices.ts
|
||||
│ ├── services/ # Business Logic
|
||||
│ │ ├── weighing.service.ts
|
||||
│ │ ├── invoice.service.ts
|
||||
│ │ └── pdf.service.ts
|
||||
│ ├── db/ # Datenbank
|
||||
│ │ ├── schema.ts # Drizzle Schema
|
||||
│ │ ├── migrations/
|
||||
│ │ └── seed.ts
|
||||
│ ├── middleware/ # Auth, CORS, etc.
|
||||
│ └── utils/
|
||||
├── deno.json
|
||||
└── .env
|
||||
```
|
||||
|
||||
### 3.3 API Design
|
||||
```
|
||||
POST /api/auth/login
|
||||
POST /api/auth/logout
|
||||
GET /api/auth/me
|
||||
|
||||
GET /api/customers
|
||||
POST /api/customers
|
||||
GET /api/customers/:id
|
||||
PUT /api/customers/:id
|
||||
DELETE /api/customers/:id
|
||||
|
||||
GET /api/materials
|
||||
POST /api/materials
|
||||
...
|
||||
|
||||
GET /api/vehicles
|
||||
POST /api/vehicles
|
||||
GET /api/vehicles/search?plate=...
|
||||
|
||||
GET /api/weighings
|
||||
POST /api/weighings/entry # Einfahrt
|
||||
PUT /api/weighings/:id/exit # Ausfahrt
|
||||
GET /api/weighings/:id
|
||||
|
||||
GET /api/delivery-notes
|
||||
GET /api/delivery-notes/:id/pdf
|
||||
|
||||
GET /api/invoices
|
||||
POST /api/invoices
|
||||
GET /api/invoices/:id/pdf
|
||||
```
|
||||
|
||||
## 4. Datenbank
|
||||
|
||||
### 4.1 PostgreSQL Schema
|
||||
```sql
|
||||
-- Benutzer
|
||||
CREATE TABLE users (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
role VARCHAR(50) NOT NULL DEFAULT 'operator',
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Kunden
|
||||
CREATE TABLE customers (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name VARCHAR(255) NOT NULL,
|
||||
address TEXT,
|
||||
city VARCHAR(100),
|
||||
postal_code VARCHAR(20),
|
||||
contact_name VARCHAR(255),
|
||||
contact_email VARCHAR(255),
|
||||
contact_phone VARCHAR(50),
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Kundenpreise
|
||||
CREATE TABLE customer_prices (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
customer_id UUID REFERENCES customers(id),
|
||||
material_id UUID REFERENCES materials(id),
|
||||
price DECIMAL(10,2) NOT NULL,
|
||||
valid_from DATE,
|
||||
valid_until DATE,
|
||||
UNIQUE(customer_id, material_id, valid_from)
|
||||
);
|
||||
|
||||
-- Materialien
|
||||
CREATE TABLE materials (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name VARCHAR(255) NOT NULL,
|
||||
category VARCHAR(100),
|
||||
unit VARCHAR(20) DEFAULT 't',
|
||||
default_price DECIMAL(10,2),
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Fahrzeuge
|
||||
CREATE TABLE vehicles (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
license_plate VARCHAR(20) UNIQUE NOT NULL,
|
||||
type VARCHAR(100),
|
||||
tara_weight DECIMAL(10,2),
|
||||
customer_id UUID REFERENCES customers(id),
|
||||
notes TEXT,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Wiegungen
|
||||
CREATE TABLE weighings (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
vehicle_id UUID REFERENCES vehicles(id),
|
||||
customer_id UUID REFERENCES customers(id),
|
||||
material_id UUID REFERENCES materials(id),
|
||||
gross_weight DECIMAL(10,2),
|
||||
tare_weight DECIMAL(10,2),
|
||||
net_weight DECIMAL(10,2),
|
||||
entry_time TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
exit_time TIMESTAMP,
|
||||
status VARCHAR(20) DEFAULT 'open',
|
||||
operator_id UUID REFERENCES users(id),
|
||||
notes TEXT
|
||||
);
|
||||
|
||||
-- Lieferscheine
|
||||
CREATE TABLE delivery_notes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
number SERIAL,
|
||||
weighing_id UUID REFERENCES weighings(id),
|
||||
customer_id UUID REFERENCES customers(id),
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
printed_at TIMESTAMP,
|
||||
emailed_at TIMESTAMP
|
||||
);
|
||||
|
||||
-- Rechnungen
|
||||
CREATE TABLE invoices (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
number SERIAL,
|
||||
customer_id UUID REFERENCES customers(id),
|
||||
total_net DECIMAL(10,2),
|
||||
total_vat DECIMAL(10,2),
|
||||
total_gross DECIMAL(10,2),
|
||||
status VARCHAR(20) DEFAULT 'draft',
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
due_date DATE
|
||||
);
|
||||
|
||||
-- Rechnungspositionen
|
||||
CREATE TABLE invoice_items (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
invoice_id UUID REFERENCES invoices(id),
|
||||
delivery_note_id UUID REFERENCES delivery_notes(id),
|
||||
description TEXT,
|
||||
quantity DECIMAL(10,3),
|
||||
unit VARCHAR(20),
|
||||
unit_price DECIMAL(10,2),
|
||||
amount DECIMAL(10,2)
|
||||
);
|
||||
```
|
||||
|
||||
## 5. Deployment
|
||||
|
||||
### 5.1 Docker Setup
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
environment:
|
||||
POSTGRES_DB: schuettgo
|
||||
POSTGRES_USER: schuettgo
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "127.0.0.1:5433:5432"
|
||||
|
||||
backend:
|
||||
build: ./schuettgo-backend
|
||||
environment:
|
||||
DATABASE_URL: postgres://schuettgo:${DB_PASSWORD}@postgres:5432/schuettgo
|
||||
JWT_SECRET: ${JWT_SECRET}
|
||||
ports:
|
||||
- "127.0.0.1:8003:8000"
|
||||
depends_on:
|
||||
- postgres
|
||||
|
||||
frontend:
|
||||
build: ./schuettgo-frontend
|
||||
ports:
|
||||
- "127.0.0.1:3005:80"
|
||||
depends_on:
|
||||
- backend
|
||||
```
|
||||
|
||||
### 5.2 URLs
|
||||
- Frontend: https://schuettgo.kronos-soulution.de
|
||||
- API: https://api.schuettgo.kronos-soulution.de
|
||||
|
||||
---
|
||||
*Erstellt: 2026-02-19*
|
||||
102
docs/MARKTANALYSE.md
Normal file
102
docs/MARKTANALYSE.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# SchüttGo - Marktanalyse
|
||||
|
||||
## 1. Bestehende Lösungen im deutschsprachigen Raum
|
||||
|
||||
### 1.1 Praxis EDV - WinWaage / ProWaage
|
||||
- **Anbieter:** Praxis EDV GmbH
|
||||
- **Fokus:** Wiegesoftware für Schüttgutbetriebe
|
||||
- **Features:**
|
||||
- Waagen-Integration (diverse Hersteller)
|
||||
- Lieferscheinerstellung
|
||||
- Kundenverwaltung
|
||||
- Auftragsverwaltung
|
||||
- Materialstammdaten
|
||||
- Statistiken und Auswertungen
|
||||
- **Plattform:** Windows Desktop
|
||||
- **Schwächen:** Keine Cloud-Lösung, veraltete UI
|
||||
|
||||
### 1.2 Modula / Primus Software
|
||||
- **Fokus:** ERP für Baustoffhandel
|
||||
- **Features:**
|
||||
- Komplette Warenwirtschaft
|
||||
- Fuhrparkverwaltung
|
||||
- Tourenplanung
|
||||
- Rechnungswesen
|
||||
- **Plattform:** Windows / Client-Server
|
||||
- **Schwächen:** Komplex, hoher Preis, nicht spezialisiert auf Schüttgut
|
||||
|
||||
### 1.3 BuS Baustoff-Software
|
||||
- **Fokus:** Baustoffhandel und Schüttgut
|
||||
- **Features:**
|
||||
- Auftragsabwicklung
|
||||
- Waagen-Anbindung
|
||||
- Disposition
|
||||
- Fakturierung
|
||||
- **Plattform:** Windows
|
||||
- **Schwächen:** Ältere Technologie
|
||||
|
||||
### 1.4 Wiegemeister / WinScale
|
||||
- **Fokus:** Reine Wiegesoftware
|
||||
- **Features:**
|
||||
- Waagen-Integration
|
||||
- Verwiegung
|
||||
- Protokollierung
|
||||
- **Schwächen:** Nur Wiegefunktion, keine Gesamtlösung
|
||||
|
||||
## 2. Marktlücken & Chancen
|
||||
|
||||
### 2.1 Identifizierte Lücken
|
||||
| Lücke | Chance für SchüttGo |
|
||||
|-------|---------------------|
|
||||
| Keine moderne Cloud-Lösung | SaaS-Modell, überall nutzbar |
|
||||
| Veraltete UIs | Moderne, responsive UI |
|
||||
| Komplizierte Installation | Browser-basiert, kein Install |
|
||||
| Hohe Lizenzkosten | Flexibles Abo-Modell |
|
||||
| Keine Mobile-Unterstützung | Responsive + PWA |
|
||||
| Schlechte Integration | Offene API, Webhooks |
|
||||
|
||||
### 2.2 USPs für SchüttGo
|
||||
1. **Cloud-First:** Keine lokale Installation, automatische Updates
|
||||
2. **Modernes UI:** Einfache Bedienung, schnelle Einarbeitung
|
||||
3. **Mobile Ready:** Tablet-Bedienung auf der Waage
|
||||
4. **API-First:** Integration mit Buchhaltung, ERP, etc.
|
||||
5. **Flexibles Pricing:** Monatlich kündbar, nach Nutzung
|
||||
|
||||
## 3. Zielgruppe
|
||||
|
||||
### 3.1 Primäre Zielgruppe
|
||||
- Kieswerke (5-50 Mitarbeiter)
|
||||
- Sandgruben
|
||||
- Steinbrüche
|
||||
- Schotter-/Splittwerke
|
||||
- Recyclinghöfe (Bauschutt)
|
||||
|
||||
### 3.2 Sekundäre Zielgruppe
|
||||
- Baustoffhändler mit eigener Waage
|
||||
- Agrarbetriebe (Getreide, Futtermittel)
|
||||
- Entsorger (Mülldeponie)
|
||||
|
||||
## 4. Preisvergleich (geschätzt)
|
||||
|
||||
| Anbieter | Einmalkosten | Monatlich | Wartung/Jahr |
|
||||
|----------|--------------|-----------|--------------|
|
||||
| WinWaage | 2.000-5.000€ | - | 500-800€ |
|
||||
| Primus | 10.000-30.000€ | - | 2.000€+ |
|
||||
| BuS | 5.000-15.000€ | - | 1.000€+ |
|
||||
| **SchüttGo** | 0€ | 99-299€ | inkl. |
|
||||
|
||||
## 5. Fazit
|
||||
|
||||
Der Markt ist geprägt von:
|
||||
- Etablierten, aber technisch veralteten Lösungen
|
||||
- Hohen Einmalkosten und komplizierten Installationen
|
||||
- Mangel an Cloud- und Mobile-Lösungen
|
||||
|
||||
**Empfehlung:** SchüttGo als moderne Cloud-Alternative positionieren mit:
|
||||
- Einfacher Einstieg (Freemium/Testphase)
|
||||
- Transparente Preise (Abo-Modell)
|
||||
- Moderne Technik (Vue 3, responsive)
|
||||
- Schnelle Waagen-Integration
|
||||
|
||||
---
|
||||
*Erstellt: 2026-02-19*
|
||||
154
docs/MVP.md
Normal file
154
docs/MVP.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# SchüttGo - MVP (Minimum Viable Product)
|
||||
|
||||
## Release 1.0 - Kernfunktionen
|
||||
|
||||
### Ziel
|
||||
Ein funktionsfähiges System für einen kleinen Schüttgutbetrieb mit 1 Waage.
|
||||
|
||||
### Zeitrahmen
|
||||
- Entwicklung: 4-6 Wochen
|
||||
- Testing: 1 Woche
|
||||
- Pilotphase: 2 Wochen
|
||||
|
||||
---
|
||||
|
||||
## MVP Features
|
||||
|
||||
### 1. Authentifizierung & Benutzer
|
||||
- [x] Login/Logout
|
||||
- [x] Passwort vergessen
|
||||
- [x] Benutzerrollen: Admin, Waagenbediener, Büro
|
||||
- [x] Benutzer anlegen/bearbeiten
|
||||
|
||||
### 2. Stammdaten
|
||||
|
||||
#### 2.1 Kunden
|
||||
- [x] Kunde anlegen (Firma, Ansprechpartner, Adresse)
|
||||
- [x] Kunde bearbeiten
|
||||
- [x] Kunde suchen/filtern
|
||||
- [x] Kundenpreise hinterlegen
|
||||
|
||||
#### 2.2 Materialien
|
||||
- [x] Material anlegen (Name, Einheit, Standardpreis)
|
||||
- [x] Materialkategorien (Kies, Sand, Schotter, etc.)
|
||||
- [x] Material bearbeiten
|
||||
|
||||
#### 2.3 Fahrzeuge
|
||||
- [x] Fahrzeug anlegen (Kennzeichen, Typ, Tara)
|
||||
- [x] Fahrzeug einem Kunden zuordnen
|
||||
- [x] Tara aktualisieren
|
||||
|
||||
### 3. Wiegung (Kernmodul)
|
||||
|
||||
#### 3.1 Einfahrt
|
||||
- [x] Fahrzeug auswählen (Kennzeichen-Suche)
|
||||
- [x] Kunde automatisch ermitteln
|
||||
- [x] Material auswählen
|
||||
- [x] Bruttogewicht erfassen
|
||||
- [x] Wiegung speichern
|
||||
|
||||
#### 3.2 Ausfahrt
|
||||
- [x] Offene Wiegung laden
|
||||
- [x] Leergewicht (Tara) erfassen
|
||||
- [x] Nettogewicht berechnen
|
||||
- [x] Lieferschein erstellen
|
||||
- [x] Optional: Lieferschein drucken
|
||||
|
||||
### 4. Lieferschein
|
||||
- [x] Automatische Nummer
|
||||
- [x] Alle Wiegungsdaten
|
||||
- [x] PDF-Generierung
|
||||
- [x] Druckfunktion
|
||||
- [x] E-Mail-Versand (optional)
|
||||
|
||||
### 5. Einfache Rechnung
|
||||
- [x] Rechnung aus Lieferschein(en)
|
||||
- [x] Kundenpreise anwenden
|
||||
- [x] PDF-Generierung
|
||||
- [x] Rechnungsliste
|
||||
|
||||
### 6. Dashboard
|
||||
- [x] Heute: Anzahl Wiegungen, Gesamtmenge
|
||||
- [x] Offene Wiegungen (Einfahrt ohne Ausfahrt)
|
||||
- [x] Letzte 10 Wiegungen
|
||||
- [x] Schnellzugriff auf neue Wiegung
|
||||
|
||||
---
|
||||
|
||||
## Nicht im MVP
|
||||
|
||||
❌ Waagen-Hardware-Integration (manuelle Eingabe im MVP)
|
||||
❌ DATEV-Export
|
||||
❌ Lagerbestandsführung
|
||||
❌ Fuhrparkverwaltung
|
||||
❌ GPS-Tracking
|
||||
❌ Kundenportal
|
||||
❌ Erweiterte Berichte
|
||||
|
||||
---
|
||||
|
||||
## Technischer Scope
|
||||
|
||||
### Frontend
|
||||
- Vue 3 + FluxKit UI
|
||||
- TailwindCSS
|
||||
- Responsive (Desktop + Tablet)
|
||||
|
||||
### Backend
|
||||
- Deno + Oak
|
||||
- PostgreSQL
|
||||
- JWT Auth
|
||||
|
||||
### Deployment
|
||||
- Docker
|
||||
- Nginx Reverse Proxy
|
||||
- SSL (Let's Encrypt)
|
||||
|
||||
---
|
||||
|
||||
## Datenmodell (MVP)
|
||||
|
||||
```
|
||||
users
|
||||
├── id, email, password_hash, role, name
|
||||
|
||||
customers
|
||||
├── id, name, address, contact_name, contact_email, contact_phone
|
||||
|
||||
materials
|
||||
├── id, name, category, unit, default_price
|
||||
|
||||
vehicles
|
||||
├── id, license_plate, type, tara_weight, customer_id
|
||||
|
||||
weighings
|
||||
├── id, vehicle_id, customer_id, material_id
|
||||
├── gross_weight, tare_weight, net_weight
|
||||
├── entry_time, exit_time, status
|
||||
├── delivery_note_id
|
||||
|
||||
delivery_notes
|
||||
├── id, number, weighing_id, customer_id
|
||||
├── created_at, printed_at, emailed_at
|
||||
|
||||
invoices
|
||||
├── id, number, customer_id
|
||||
├── total_amount, status, created_at
|
||||
|
||||
invoice_items
|
||||
├── id, invoice_id, delivery_note_id
|
||||
├── quantity, unit_price, amount
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
1. ✅ Kompletter Wiegezyklus (Ein-/Ausfahrt) funktioniert
|
||||
2. ✅ Lieferschein wird korrekt erstellt
|
||||
3. ✅ Rechnung kann generiert werden
|
||||
4. ✅ System läuft stabil für 1 Benutzer
|
||||
5. ✅ Response-Zeit < 1 Sekunde
|
||||
|
||||
---
|
||||
*Erstellt: 2026-02-19*
|
||||
169
docs/WAAGEN-INTEGRATION.md
Normal file
169
docs/WAAGEN-INTEGRATION.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# SchüttGo - Waagen-Integration
|
||||
|
||||
## 1. Übersicht Waagen-Hersteller
|
||||
|
||||
### 1.1 Mettler Toledo
|
||||
- **Marktführer** bei Industriewaagen
|
||||
- **Modelle:** IND780, IND570, IND500
|
||||
- **Schnittstellen:**
|
||||
- RS232 (seriell)
|
||||
- Ethernet/TCP-IP
|
||||
- Modbus TCP/RTU
|
||||
- **Protokoll:** MT-SICS (Standard)
|
||||
- **Doku:** Gut verfügbar
|
||||
|
||||
### 1.2 Bizerba
|
||||
- **Fokus:** Industriewägetechnik
|
||||
- **Modelle:** ST-EX Serie, iS Serie
|
||||
- **Schnittstellen:**
|
||||
- RS232
|
||||
- USB
|
||||
- Ethernet
|
||||
- **Protokoll:** Bizerba Protocol / ASCII
|
||||
- **Doku:** Auf Anfrage
|
||||
|
||||
### 1.3 KERN
|
||||
- **Fokus:** Preis-Leistung
|
||||
- **Modelle:** IFS, IFB, EOB Serie
|
||||
- **Schnittstellen:**
|
||||
- RS232
|
||||
- USB (optional)
|
||||
- **Protokoll:** ASCII (einfach)
|
||||
- **Doku:** Gut verfügbar
|
||||
|
||||
### 1.4 Sartorius
|
||||
- **Fokus:** Präzisionswaagen
|
||||
- **Modelle:** Combics, Signum
|
||||
- **Schnittstellen:**
|
||||
- RS232
|
||||
- Ethernet
|
||||
- **Protokoll:** Sartorius SBI
|
||||
- **Doku:** Gut verfügbar
|
||||
|
||||
## 2. Schnittstellen-Typen
|
||||
|
||||
### 2.1 RS232 (Seriell)
|
||||
```
|
||||
┌──────────┐ RS232 ┌──────────┐
|
||||
│ Waage │ ────────────── │ PC │
|
||||
└──────────┘ 9-pin/25-pin └──────────┘
|
||||
```
|
||||
- **Vorteile:** Einfach, zuverlässig, Standard
|
||||
- **Nachteile:** Kurze Kabelwege (max 15m), 1:1 Verbindung
|
||||
- **Baudrate:** Typisch 9600 oder 19200
|
||||
- **Datenformat:** 8N1 (8 Datenbits, keine Parität, 1 Stoppbit)
|
||||
|
||||
### 2.2 Ethernet/TCP-IP
|
||||
```
|
||||
┌──────────┐ TCP/IP ┌──────────┐
|
||||
│ Waage │ ────────────── │ Server │
|
||||
└──────────┘ Netzwerk └──────────┘
|
||||
```
|
||||
- **Vorteile:** Lange Distanzen, mehrere Clients, flexibel
|
||||
- **Nachteile:** Komplexer, Netzwerk-Abhängigkeit
|
||||
- **Port:** Herstellerspezifisch (z.B. 4001)
|
||||
|
||||
### 2.3 USB
|
||||
- **Emuliert meist RS232** (virtueller COM-Port)
|
||||
- Treiber erforderlich
|
||||
|
||||
## 3. Protokoll-Beispiele
|
||||
|
||||
### 3.1 MT-SICS (Mettler Toledo)
|
||||
```
|
||||
Befehl: S # Stable weight
|
||||
Antwort: S S 123.456 kg
|
||||
|
||||
Befehl: SI # Send immediately
|
||||
Antwort: S D 123.456 kg (D=dynamic/unstabil)
|
||||
|
||||
Befehl: Z # Zero/Tare
|
||||
Antwort: Z A # Acknowledged
|
||||
```
|
||||
|
||||
### 3.2 ASCII Standard (KERN u.a.)
|
||||
```
|
||||
Anfrage: <ENQ> # ASCII 05
|
||||
Antwort: + 123.45 kg\r\n
|
||||
|
||||
Format: [Vorzeichen][Leerzeichen][Gewicht][Einheit][CR][LF]
|
||||
```
|
||||
|
||||
### 3.3 Modbus RTU
|
||||
- Binäres Protokoll
|
||||
- Register-basiert
|
||||
- CRC-Prüfsumme
|
||||
- Komplexer zu implementieren
|
||||
|
||||
## 4. Implementierungsstrategie
|
||||
|
||||
### 4.1 Phase 1: Manuelle Eingabe (MVP)
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ Gewicht: [___________] kg 📥 │
|
||||
│ │
|
||||
│ [Waage ablesen] → Manuell eingeben │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
- Kein Hardware-Aufwand
|
||||
- Sofort einsetzbar
|
||||
- Fehleranfällig
|
||||
|
||||
### 4.2 Phase 2: Lokaler Waagen-Agent
|
||||
```
|
||||
┌──────────┐ ┌─────────────┐ ┌──────────┐
|
||||
│ Waage │─────│ Waagen-Agent │─────│ SchüttGo │
|
||||
│ RS232 │ │ (lokal PC) │ WS │ Cloud │
|
||||
└──────────┘ └─────────────┘ └──────────┘
|
||||
```
|
||||
- Kleines Programm auf Waagen-PC
|
||||
- WebSocket-Verbindung zur Cloud
|
||||
- Gewicht wird automatisch übertragen
|
||||
|
||||
### 4.3 Waagen-Agent Architektur
|
||||
```javascript
|
||||
// Pseudo-Code Waagen-Agent
|
||||
const serial = new SerialPort('/dev/ttyUSB0', { baudRate: 9600 });
|
||||
const ws = new WebSocket('wss://api.schuettgo.../waage/connect');
|
||||
|
||||
serial.on('data', (data) => {
|
||||
const weight = parseWeight(data);
|
||||
ws.send(JSON.stringify({
|
||||
type: 'weight',
|
||||
value: weight,
|
||||
unit: 'kg',
|
||||
stable: true
|
||||
}));
|
||||
});
|
||||
|
||||
ws.on('message', (msg) => {
|
||||
if (msg.type === 'request_weight') {
|
||||
serial.write('S\r\n'); // Gewicht anfordern
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
## 5. Empfohlene Hardware für Pilotphase
|
||||
|
||||
### 5.1 Budget-Option (< 500€)
|
||||
- **KERN EOB 150K50** (150kg/50g)
|
||||
- RS232 Schnittstelle
|
||||
- Einfaches ASCII-Protokoll
|
||||
- Ideal zum Testen
|
||||
|
||||
### 5.2 Profi-Option (1.500-3.000€)
|
||||
- **Mettler Toledo IND570**
|
||||
- Ethernet + RS232
|
||||
- MT-SICS Protokoll
|
||||
- Robust, industrietauglich
|
||||
|
||||
## 6. Nächste Schritte
|
||||
|
||||
1. [ ] Testwaage beschaffen (KERN oder gebraucht)
|
||||
2. [ ] Waagen-Agent Prototyp entwickeln
|
||||
3. [ ] WebSocket API im Backend implementieren
|
||||
4. [ ] Frontend-Integration (Live-Gewicht-Anzeige)
|
||||
5. [ ] Protokolle für 2-3 Hersteller implementieren
|
||||
|
||||
---
|
||||
*Erstellt: 2026-02-19*
|
||||
Reference in New Issue
Block a user