# Lohnkonto Service

Webdienst zur Generierung von Lohnkontoblättern als PDF.
CSV hochladen → fertiges PDF herunterladen.

## Funktionen

- CSV-Upload (Semikolon-getrennt, Swissdec-Lohnkonto-Export)
- Automatische Erkennung von **Mitarbeitername** und **Abrechnungsperiode**
  aus dem Dateinamen (z. B. `202601-202612-Lohnkonto-Albert_Leuzinger-2026-05-19.csv`)
- PDF im Swissdec-Layout: Lohnarten gruppiert (Lohnbestandteile, Abzüge
  Arbeitnehmer, Zulagen/Spesen, Arbeitgeberbeiträge, Auszahlung & Buchung,
  Basen/Grundlagen), Zebrastreifen, Total-Zeilen hervorgehoben, negative
  Beträge rot, CH-Zahlenformat
- Saubere Mehrseiten-Paginierung mit „Seite x / n" und Fortsetzungs-Headern
- Verarbeitung **nur im Arbeitsspeicher** – keine Dateien werden gespeichert
- Web-Oberfläche mit Drag-&-Drop, Live-Vorschau und Download

## Lokal starten

```bash
npm install
npm start
```

Dann im Browser öffnen: <http://localhost:3000>

Der Port kann über die Umgebungsvariable `PORT` gesetzt werden.

## CSV-Format

Erwartet wird eine semikolongetrennte Datei mit dieser Kopfzeile:

```
LA;Bezeichnung;Januar;Februar;März;April;Mai;Juni;Juli;August;September;Oktober;November;Dezember;Total
```

Beträge im Punkt-Dezimalformat. Es werden nur Monate dargestellt, die
tatsächlich Werte enthalten. Der Mitarbeitername wird aus dem Dateinamen
gelesen (Teil nach `Lohnkonto-`), kann aber im Formular übersteuert werden.

## Mit Docker

```bash
docker build -t lohnkonto-service .
docker run -p 3000:3000 lohnkonto-service
```

## Deployment

Der Dienst ist eine Standard-Node.js-Express-App und läuft ohne Anpassung
auf Plattformen wie Render, Railway, Fly.io oder einem eigenen Server.
Startbefehl: `npm start`, benötigte Node-Version: ≥ 18.

## Projektstruktur

```
.
├── server.js              Express-Server & API-Endpunkt
├── lib/
│   ├── parseCsv.js        CSV-Parser (Name/Periode-Erkennung)
│   └── generatePdf.js     PDF-Generator (Swissdec-Layout)
├── public/
│   └── index.html         Web-Oberfläche
├── package.json
├── Dockerfile
└── README.md
```

## Hinweis

Das PDF ist *angelehnt* an das Swissdec-Layout und dient internen Zwecken.
Es ist kein offiziell zertifiziertes Swissdec-Dokument.
