120 lines
3.0 KiB
Markdown
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
|