# Changelog
Alle nennenswerten Änderungen an diesem Projekt werden in dieser Datei dokumentiert.

## [2.23.2] - 2026-09-18
### Fixed
- Personalbereitstellung (AKÜ): In den ausfüllbaren PDF-Formularfeldern (z. B. Mailadresse, ATU-Nr.) ließen sich Zeichen wie "@" nicht eingeben, wenn sie sonst nirgends im Dokument vorkamen – die Felder verwenden jetzt die Standardschrift Helvetica mit vollem Zeichensatz statt der nur teilweise eingebetteten Hausschrift

## [2.23.1] - 2026-09-17
### Fixed
- PDF-Erzeugung (Personalvermittlung, Inseratenservice, Personalbereitstellung): Einleitungssatz beginnt nach der Anrede korrekt klein ("nachstehend finden Sie …")
- PDF-Erzeugung: Beschriftung "Zusätzliche Anmerkung" wird großgeschrieben
- PDF-Erzeugung: Seiteninhalt beginnt auf allen Seiten ca. 2 mm tiefer, damit der Text nicht am Briefkopf der Vorlage klebt
- Personalbereitstellung (AKÜ): Zwischen "Angebot gültig bis" und "Für weitere Informationen …" steht jetzt eine Leerzeile Abstand

### Changed
- Personalbereitstellung (AKÜ), nur IFAS: Hinweis zu Weg-/Reisezeiten zu einem Satz zusammengefasst ("Reisezeiten, Weg- und Lenkzeiten sowie nicht konsumierte Ersatzruhezeiten und Rufbereitschaften werden laut anzuwendendem Kollektivvertrag abgerechnet und mit einem Bearbeitungsaufschlag von 10% an Sie weiterverrechnet.")

## [2.23.0] - 2026-09-04
### Added
- Aufräum-Skript für alte Angebots-PDFs (`npm run cleanup:offers`, Cron-Wrapper `scripts/cron/cleanup-old-offer-pdfs.sh`): löscht PDFs in `uploads/offers/` und `uploads/applicant-requirements/`, die älter als 30 Tage sind – die Dateien werden bei jedem (erneuten) Versand ohnehin aus den DB-Daten neu erzeugt, ein Löschen alter Dateien beeinträchtigt spätere Versände daher nicht

## [2.22.0] - 2026-09-04
### Added
- Personalbereitstellung (AKÜ): Zustimmungsabschnitt (§19 Bauleistung, Betriebsvereinbarung, elektronische Rechnungsübermittlung, Mailadresse, Unterschrift Kunde) besteht im PDF jetzt aus echten, ausfüll-/ankreuzbaren Formularfeldern (Radiobuttons, Checkbox, Textfelder, Unterschriftsfeld) statt nur gezeichneter Kästchen

### Fixed
- PDF-Erzeugung (Personalvermittlung, Inseratenservice, Spezialistensuche, Personalbereitstellung): Weitere Blöcke (u. a. Vermittlungspauschale, Zusätzliche Anmerkung, Preisübersicht, Zahlungskonditionen, Signatur), die bei einer langen "zusätzliche Anmerkung" bzw. vielen Zusatzleistungen mitten im Block auf eine neue Seite umbrechen konnten, bleiben nun als Ganzes zusammen
- Spezialistensuche: Gebuchte Zusatzleistungen im Angebots-PDF wurden durch einen Zuweisungs- statt Vergleichsfehler in der Filterbedingung falsch ermittelt
- Personalbereitstellung (AKÜ): Zustimmungszeilen (§19 Bauleistung, Betriebsvereinbarung, elektronische Rechnungsübermittlung) linksbündig zueinander ausgerichtet, einheitliche Schriftgröße und etwas mehr Zeilenabstand

## [2.21.1] - 2026-09-02
### Changed
- Inseratenservice: AGB-Punkt "Vertragsabschluss" angepasst – statt der Verpflichtung des Auftraggebers, geeignete Kandidat:innen via TTI über Arbeitskräfteüberlassung oder Personalberatung anzustellen, heißt es nun, dass eine solche Anstellung erfolgen kann; Hinweis auf elektronische Rechnungslegung ergänzt

## [2.21.0] - 2026-08-31
### Changed
- Deployment auf Staging und Live-Server läuft jetzt automatisch: Ein Push auf den Branch `staging` bzw. `main` löst den Ausspielprozess (Code-Sync, Installation, Migration, Build, Neustart) selbstständig aus, das bisherige manuelle `npm run git` auf dem Server entfällt für den Regelfall
- Neuer Branch `staging` für Tests vor dem Live-Gang: Änderungen werden künftig zuerst nach `staging` gemerged und dort geprüft, bevor sie nach `main` (Live) gemerged werden

## [2.20.1] - 2026-08-28
### Fixed
- Personalvermittlung: Abstände und Preisanzeige der Auftragsbestätigung an das Angebot angeglichen
- Personalbereitstellung (AKÜ): Überstundenzuschläge zeigen "30% Zuschlag" statt "Zuschlag 30%" und sind exakt wie die Preisspalte darüber rechtsbündig ausgerichtet
- Personalbereitstellung (AKÜ): Verrechnungssätze-Tabelle zeigt im Spaltenkopf nur "Preis" bzw. "Faktor", wenn in den Zeilen ausschließlich das eine oder andere befüllt ist
- Anforderungsprofil-PDF: Inhalt folgt direkt der Einleitung statt auf eine neue Seite zu springen
- Anforderungsprofil: Fehler beim Speichern behoben, wenn kein Skill-Feld ausgefüllt wurde
- Inseratenservice: Preisübersicht (Basispaket bis Anforderungsprofil-Hinweis) bricht nicht mehr mitten im Block auf eine neue Seite um
- Spezialistensuche: Kurzform "AKÜ"/"PV" bei "Art der Anstellung" wird im PDF ausgeschrieben angezeigt

## [2.20.0] - 2026-08-24
### Added
- AKÜ: Bei der Angebotserstellung kann ein bestehendes Anforderungsprofil des Kunden ausgewählt und mit dem Angebot verknüpft werden; es wird im Angebots-PDF als eigene Seite mit ausgegeben
- AKÜ: Angebote zur Personalbereitstellung für IFAS erhalten eigene, angepasste Texte in E-Mail und PDF (kein Werbetext, eigene Formulierung zu Überstunden/Reisezeiten, Ansprechpartner- und AGB-Absatz)

### Changed
- AKÜ, Inseratenservice, Personalvermittlung und Spezialistensuche: Bereits gesendete Angebote (Status „Gesendet") bleiben bearbeitbar und können erneut versendet werden, solange der Kunde den Auftrag noch nicht angenommen hat. Beim erneuten Versand wird der im Erstversand enthaltene Auftragserteilungslink automatisch ungültig ("Link ist nicht mehr gültig")
- Die Kunden- und Ansprechpartneranlage im Service Designer wurde entfernt, da die Kundenstammdaten jetzt in Echtzeit aus WEX übernommen werden

### Fixed
- PDF-Erzeugung (alle Angebots- und Bestätigungs-PDFs): Wenn ein langer Text (z. B. eine lange "zusätzliche Anmerkung") automatisch auf eine neue Seite umgebrochen wurde, fehlte auf dieser Seite bislang der Briefkopf/Hintergrund
- Spezialistensuche: Fehlender AGB-Zustimmungssatz im Angebots-PDF ergänzt

## [2.19.2] - 2026-08-11
### Fixed
- Inseratenservice: Zahlungsziel in den Allgemeinen Geschäftsbedingungen (Honorar-Fälligkeit) von "prompt" auf "8 Tage netto" korrigiert

## [2.19.1] - 2026-07-20
### Fixed
- Inseratenservice & Spezialistensuche: Zahlungsziel im Angebots- und Auftragsbestätigungs-PDF von "prompt"/"sofort" auf "8 Tage netto" korrigiert

## [2.19.0] - 2026-06-28
### Added
- Login-Logs: Automatischer wöchentlicher E-Mail-Versand der Login-Daten (Zeitraum Freitag früh bis Freitag früh) als Excel an die Gesellschaften (TTI, Berger, IFAS, Squadra), CC an f.bair@tti-group.at. Jede Empfängeradresse erhält die komplette Wochenliste; identische Adressen (TTI/Squadra) werden dedupliziert, sodass nur eine Mail versendet wird. Empfängeradressen je Gesellschaft über neues Feld `clients.login_report_email`. Auslösung per Cron (`scripts/send-weekly-login-report.js`, Wrapper und Installer unter `scripts/cron/`)

### Changed
- Login-Logs: Der manuelle Export liefert nun eine Excel-Datei (.xlsx) mit Filtermöglichkeit in der Überschriftenzeile statt CSV
- Personalvermittlung & Arbeitskräfteüberlassung: Bei den Zahlungskonditionen stehen nur noch "8 Tage netto" und "siehe zusätzliche Anmerkungen" zur Auswahl; "14 Tage netto" wurde entfernt

## [2.18.0] - 2026-06-19
### Fixed
- Passwort wiederherstellen: Der Reset-Token (`hash`) blieb bei einem Eingabefehler (Passwort zu kurz oder stimmt nicht überein) nicht erhalten — nach Korrektur musste der gesamte Mail-Flow neu gestartet werden. Der Token wird nun beibehalten
- Passwort wiederherstellen: Bei ungültigem oder abgelaufenem Link wurde fälschlich „Passwort wurde erfolgreich geändert" angezeigt, obwohl nichts geändert wurde — es erscheint nun eine korrekte Fehlermeldung mit Hinweis, das Zurücksetzen erneut anzufordern
- Passwort wiederherstellen: Eingaben werden defensiv gelesen, um mögliche Serverfehler bei fehlenden Formularfeldern zu vermeiden

## [2.17.0] - 2026-06-19
### Fixed
- Admin/Benutzer: Passwortänderung wurde beim Bearbeiten eines Benutzers nicht gespeichert — das neue Passwort wird nun korrekt übernommen, sodass der Login damit funktioniert
- Admin/Benutzer: Beim Bearbeiten oder Anlegen eines Benutzers wurde oben rechts fälschlich der bearbeitete statt des angemeldeten Benutzers angezeigt (Variablenkollision in der View behoben)
- Admin/Benutzer: Nach dem Anlegen eines Benutzers fehlte ein `await`, wodurch die Bearbeiten-Ansicht mit fehlerhaften Formulardaten gerendert wurde

## [2.16.0] - 2026-06-16
### Changed
- AKÜ: Faktor, Preis je Stunde und Überstunden-Prozentwerte können nun mit bis zu 5 Nachkommastellen erfasst, gespeichert und im PDF sowie in der Zusammenfassung ausgegeben werden (Spalten auf DECIMAL(10,5) erweitert)

## [2.15.0] - 2026-06-16
### Changed
- AKÜ: Die Kalkulations-Excel wird im WEX-Archiv nun wie das Angebots-PDF benannt, mit Präfix "KALK_" (z. B. `KALK_AN_AKUE_20261186.xlsx`), und ist dadurch eindeutig zuordenbar

## [2.14.0] - 2026-06-11
### Added
- Inseratenservice: Freies Textfeld "Zusätzliche Anmerkung" im Angebotsformular (analog zur Personalvermittlung), Speicherung in der Datenbank sowie Ausgabe in Angebots- und Auftragsbestätigungs-PDF, Übersicht und Auftragsanzeige

## [2.13.0] - 2026-06-10
### Added
- AKÜ-PDF: Deutsche Silbentrennung in den Tabellen (Verrechnungssätze und Zulagen) — lange Wörter wie "Produktionsmitarbeiter" werden nun korrekt nach Silben mit Trennstrich umbrochen (Bibliothek `hyphen`)

### Changed
- AKÜ-PDF: Preis/Faktor-Spalte schmäler, Leistung-Spalte breiter — "EUR" steht nun näher beim Betrag, die Spalte bleibt einzeilig

## [2.12.0] - 2026-06-10
### Added
- Inseratenservice: Client-spezifische Social-Media-Bilder für TTI, Berger, IFAS und Squadra hinzugefügt
- Inseratenservice: YouTube-Video-IDs für Reel-Vorschauen in eine client-spezifische Konfigurationsdatei ausgelagert

### Changed
- Inseratenservice: Social-Media-Vorschauen werden nun über den Client-Slug geladen
- Inseratenservice: Berger-Feed-Vorschauen verwenden bei nur einem verfügbaren Bild keinen Hover-Wechsel
- Inseratenservice: Reel-Vorschauen sind nur klickbar, wenn für den Client eine Video-ID konfiguriert ist
- Inseratenservice: Client-Bilder auf die TTI-Vorlagenmaße zugeschnitten

## [2.11.0] - 2026-05-31
### Changed
- AKÜ-PDF: Überstundenzuschläge und Zulagen werden bei zu langen Leistungslisten zusammen auf die nächste Seite verschoben
- Frontend-Assets: Bootstrap-Icon-CSS auf die tatsächlich verwendeten Icons reduziert
- Frontend-Assets: ungenutzte Bootstrap-Komponenten aus dem SCSS-Build entfernt
- Lokale Agent-Hinweise auf den TTI-Service-Designer angepasst

## [2.10.4] - 2026-05-20
### Changed
- Anforderungsprofil: Anmerkungstexte werden nun als LONGTEXT gespeichert und sind nicht mehr durch TINYTEXT begrenzt

## [2.10.3] - 2026-05-20
### Changed
- Benutzer werden beim Löschen nicht mehr aus der Datenbank entfernt, sondern als gelöscht markiert
- Gelöschte Benutzer können sich nicht mehr anmelden und werden in der Benutzerverwaltung ausgeblendet

## [2.10.2] - 2026-05-19
### Added
- Spezialistensuche: Excel-Datei zur Preisformel inklusive Algorithmuswerten, Branchenwerten, Servicepreis und geschützten Eingabezellen erstellt
- ExcelJS als Bibliothek zur robusteren Excel-Erzeugung hinzugefügt

### Changed
- Admin: Branchen-Komplexität kann nun mit Werten von 1 bis 7 gepflegt werden

## [2.10.1] - 2026-05-19
### Changed
- Neue AKÜ-Kalkulationsvorlage

## [2.10.0] - 2026-05-18
### Added
- AKÜ: Auswahl Leistung vor dem Versand mit Arbeitskräfteüberlassung und Konditionsanpassung Arbeitskräfteüberlassung
- AKÜ: Eigener Versand- und Bestätigungsflow für Konditionsanpassungen inklusive angepasster E-Mail-Texte

## [2.9.2] - 2025-05-13
### Changed
- Anmerkungsfelder erkennen nun Zeilenumbrüche und sind nicht auf 255 zeichen begrenzt

## [2.9.1] - 2025-05-12
### Changed
- Bestätigungsbuttons sind nun POST Requests und werden nicht mehr als GET Requests gesendet.
- Textänderungen in der Acceptseite.

## [2.9] - 2026-04-26
### Added
- Bestätigungsschritt vor der finalen Auftragserteilung für Personalvermittlung, Spezialistensuche, Inseratenservice und Arbeitskräfteüberlassung
- Öffentliche `/confirm`-Seiten mit Unternehmenslogo vor der finalen Annahme

### Changed
- Bearbeiten bestehender Angebote funktioniert nun direkt per URL auch nach erneutem Login für Personalvermittlung, Spezialistensuche, Inseratenservice und Arbeitskräfteüberlassung
- Anforderungsprofil in der Personalvermittlung zeigt nun einen separaten Auge-Button statt des Namens als Button

### Bugfix
- Feld `additional_information` in der Spezialistensuche konsistent zu `additional_agreement` umbenannt, inklusive Migration

## [2.8.2] - 2026-04-21
### Bugfix
- AKÜ: Qualifikation ist beim Erstellen eines Angebots nicht mehr verpflichtend
- AKÜ: Kollektivvertrag wird auch ohne ausgewählte Qualifikation korrekt gespeichert und angezeigt

## [2.8.1] - 2026-04-21
### Bugfix
- Kundenauswahl bei Firmen mit gleichem Namen eindeutig gemacht

## [2.8.0] - 2026-04-20
### Added
- Möglichkeit Kunden und Kontakte anzulegen
  - diese werden als "Lokal" gekennzeichnet
  - es werden wenn Kunde oder Kontakt "Lokal" ist keine Messages an das Wex versendet
### Internal
- Einführung eines Migrationtools für Datenbanksynchronisation

## [2.7.0] - 2026-04-17
### Added
- Admin : Verwalten der Kollektivverträge
- Admin : erstellen neuer Branchen
- Admin : Vereinheitlichungen in Sprache und Aussehen

## [2.6.1] - 2026-04-16
### Changed
- alle Kollektivverträge werden nun angezeigt

## [2.6.0] - 2026-04-16
### Added
- Logging Improvements

## [2.5.3] - 2026-04-16
### Bugfix
- Berger Mail Signature ausgebessert
- Anforderungsprofile Filtern geht nun

## [2.5.1] - 2026-04-10
### Bugfix
- Mails gingen immer an den Standardkontakt eines Unternehmens



## [2.5.0] - 2026-04-3
### Änderungen
- Mail abfangen, wenn kein Empfänger
- es werden zuerst die Messages gesendet ans Wex, bevor die Bestätigsungsmails gesendet werden

## [2.4.0] - 2026-04-02
### Änderungen
- neue AKÜ Excel Vorlage

## [2.3.0] - 2026-04-01
### Änderungen
- Erweiterung Marketingmails um - wer ist der Berater und welche Marketingprodukte wurden gekauft

## [2.2.0] - 2026-03-31
### Änderungen
- Bestätigungsmails kommen auch an die Niederlassungen (neues Feld email in locations)
- Zahlungskonditionen (PV, AKÜ) - "siehe zusätzliche Anmerkugnen" hinzugefügt

## [2.1.0] - 2026-03-30
### Änderungen
- Anzeige der aktuellen Versionsnummer inklusive Changelog Verlinkung
- Erweiterung Personalvermittlung auf Auswahl für Jahres- oder Monatsbruttogehalt
- Textänderung: Anforderungsprofil Erstellung "Name" durch "Stellenbezeichnung ersetzt"

## [2.0.0] - 2026-03-27
- Veröffentlichung der Version 2.0.0
- Start des Livebetriebs
 
