Files
AnnasRechnungsManager/README.md
T

120 lines
3.0 KiB
Markdown

# Annas Rechnungsmanager
Buchhaltungs- und Rechnungsverwaltungssystem für Mandanten.
## Features
- **Mandantenverwaltung** — Mehrere Unternehmen verwalten
- **Rechnungen** — Erstellen, verwalten, als PDF exportieren (§14 UStG konform)
- **Kundenverwaltung** — Kundenstammdaten pro Mandant
- **Steuerberichte** — USt-Voranmeldung, monatliche & quartalsweise Auswertungen
## Tech Stack
- **React Router v7** (Framework Mode, SSR) + TypeScript
- **MariaDB** via Prisma ORM
- **Cookie-Session-Auth** (bcryptjs)
- **Tailwind CSS v4** + shadcn/ui
- **@react-pdf/renderer** für PDF-Generierung
- **Docker** für die Datenbank
## Lokale Entwicklung
### Voraussetzungen
- Node.js 22+
- Docker + Docker Compose
### Installation
```bash
npm install
```
### Umgebungsvariablen
`.env` im Projektstamm anlegen:
```env
DATABASE_URL="mysql://annas_user:annas_password@localhost:3306/annas_rechnungen"
AUTH_SECRET="dein-zufaelliger-secret-string"
```
### Datenbank einrichten
```bash
npm run db:migrate # Migrationen ausführen
npm run db:seed # Demo-Daten einspielen
```
**Demo-Zugangsdaten:** `anna@example.de` / `demo123`
### Entwicklungsserver starten
```bash
npm run dev
```
Startet automatisch MariaDB via Docker und den Vite-Dev-Server auf `http://localhost:5173`.
## Scripts
| Befehl | Beschreibung |
|---|---|
| `npm run dev` | DB starten + Dev-Server |
| `npm run build` | Produktions-Build |
| `npm run start` | Produktions-Server starten |
| `npm run typecheck` | TypeScript prüfen |
| `npm run db:migrate` | Prisma Migrationen ausführen |
| `npm run db:seed` | Demo-Daten einspielen |
| `npm run db:studio` | Prisma Studio öffnen |
## Deployment
### Docker Compose
Startet App + MariaDB als komplettes Setup:
```bash
docker compose up -d
```
Die App läuft auf `http://localhost:3000`. Migrationen werden automatisch beim Start ausgeführt.
> `AUTH_SECRET` muss als Umgebungsvariable gesetzt sein.
### Kubernetes
```bash
# Secret-Werte in k8s.yml anpassen (auth-secret, ggf. Passwörter), dann:
kubectl apply -f k8s.yml
```
Das Manifest (`k8s.yml`) enthält: Namespace, Secret, MariaDB (PVC + Deployment + Service), App (Deployment mit Init-Container für Migrationen + Service + Ingress).
## Projektstruktur
```
app/
components/ UI-Komponenten (ui/, layout/, company/, invoice/)
lib/ Hilfsfunktionen (prisma, tax, utils, invoice-number)
routes/ Route-Dateien (React Router v7, file-based)
session.server.ts Auth (Login, Logout, Session)
types/ Gemeinsame TypeScript-Typen
db/
docker-compose.yml MariaDB + phpMyAdmin für lokale Entwicklung
prisma/
schema.prisma Datenbankschema
migrations/ Migrationsverlauf
```
## Rechnungs-Compliance (§14 UStG)
Alle PDFs enthalten die gesetzlich vorgeschriebenen Pflichtangaben:
- Name & Anschrift Rechnungssteller und -empfänger
- Steuernummer / USt-IdNr. des Ausstellers
- Rechnungsdatum & Rechnungsnummer (fortlaufend)
- Leistungsdatum / Lieferdatum
- Leistungsbeschreibung
- Nettobetrag, USt-Satz, USt-Betrag, Bruttobetrag