Changelog

Neuerungen und Änderungen

Alle veröffentlichten Versionen mit dem, was neu, geändert oder behoben ist.

v1.0.2 1 Behoben 12.10.2026
  • Behoben Changelog: „GitHub-Releases konnten nicht abgerufen werden: HTTP 404“ trotz Token: Der Changelog-Import las nur GITHUB_TOKEN, das Token des App-Updates (HS_APP_UPDATE_GITHUB_TOKEN) kannte er nicht; ein Token ohne Zugriff auf das jeweilige private Repository führt bei GitHub ebenfalls zu 404. Jetzt gilt GITHUB_TOKEN als gemeinsames Token für Changelog, App-Update-Import und Download-Seite; für das App-Repository hat HS_APP_UPDATE_GITHUB_TOKEN Vorrang, und ist GITHUB_TOKEN leer, versucht es auch der Server-Changelog mit diesem Token. Leerzeichen oder ein Windows-Zeilenende im Token werden entfernt. Die Fehlermeldung nennt das Repository, die Variable, aus der das verwendete Token stammt, und was fehlt (kein Token, ungültiges Token oder kein Lesezugriff auf das Repository).
Release auf GitHub
v1.0.1 2 Neu2 Behoben 12.10.2026
  • Neu Download-Seite für die Apps unter /apps (in Kopfzeile, Fußzeile und beim App-Abschnitt der Startseite verlinkt): bietet immer die Dateien des neuesten Releases der Android-App an, mit Version, Veröffentlichungsdatum, Größe und SHA-256-Prüfsumme, dazu eine kurze Installationsanleitung. Nichts davon steht fest im Template: Die Seite liest das neueste GitHub-Release von hs-android-app (Repository aus hs.app-update.github-import.repository, kein Token nötig) und hält das Ergebnis zehn Minuten vor. Ist GitHub nicht erreichbar, bleibt der letzte bekannte Stand stehen, ersatzweise wird die über das eigene Backend bereitgestellte App-Update-APK angeboten, sonst ein Hinweis. /apps/android/download ist eine feste Adresse für die jeweils neueste APK (z. B. für QR-Codes).
  • Neu App-Download im Kundenbereich: Angemeldete Benutzer einer Firma und Inhaber eines Kundenkontos finden unter /app-herunterladen (Menüpunkt „App herunterladen“, im Kundenkonto auch im Schnellzugriff) dieselbe neueste APK mit Version, Datum, Größe und Prüfsumme, dazu einen QR-Code der festen Download-Adresse zum Abscannen mit dem Diensthandy.
  • Behoben Personalverwaltung lädt wieder schnell: Die Personalübersicht fragte Urlaubskonto und Abwesenheiten für jede Person einzeln ab, der Monatsexport die Arbeitszeit ebenso, und jede Personalakte las ihre Zeiterfassung Monat für Monat neu. Bei 150 Personen waren das gut 600 Datenbankabfragen für eine Seite. Jetzt kommen Konten und Arbeitszeit aller Personen mit wenigen gebündelten Abfragen, Rollen und Rechte der Zugänge werden gesammelt nachgeladen; die passenden Indizes kommen mit Migration V95 aus der Performance-Optimierung. Gemessen mit 150 Personen und zwei Jahren Daten: Personalübersicht von 875 auf 212 ms, Monatsexport von 1031 auf 85 ms, Dienstplan von 706 auf 239 ms. Außerdem durchsucht nicht mehr jeder Link einer Seite den Klassenpfad nach einer gleichnamigen statischen Datei.
  • Behoben Passkeys: Browser-Fehler „'rp.id' cannot be used with the current origin“: Die Passkey-Domain wurde fest aus BILLING_PUBLIC_BASE_URL genommen (ohne Wert sogar localhost). Wer die Anwendung unter einer anderen Adresse aufrief (andere Subdomain, Hauptdomain statt app., fehlende Basis-URL), bekam beim Einrichten oder Anmelden mit Passkey diesen Fehler. Jetzt richtet sich die Passkey-Domain nach der aufgerufenen Adresse (hinter Nginx aus Host und X-Forwarded-Proto): Liegt sie unter der Basis-URL bzw. HS_WEBAUTHN_RP_ID, gilt diese Domain wie bisher, sonst der aufgerufene Rechnername. Passt HS_WEBAUTHN_RP_ID nicht zur Adresse, beim Aufruf über eine IP-Adresse oder ohne https:// kommt eine verständliche Meldung statt des Browser-Fehlers, dazu ein Hinweis im Log. HS_WEBAUTHN_RP_ID darf auch versehentlich als URL eingetragen sein und nimmt mehrere Domains kommagetrennt an (z. B. hausservice-desk.de,hs.schleyer.dev).
Release auf GitHub
v1.0.0 119 Neu6 Geändert62 Behoben 11.10.2026
  • Neu Neues Standardlayout für die System-E-Mails: Ohne eigenes Theme gehen die Mails jetzt als HTML (mit Textfassung) im Hausservice-Desk-Stil raus: dunkler Kopf mit dem Hausservice-Desk-Logo (ein hochgeladenes Logo ersetzt es), der Betreff als hervorgehobene Überschrift, der Text, ein Support-Kasten mit Knopf zur Kontaktseite und ein dunkler Fuß mit Links zu AGB, Datenschutz, Widerrufsrecht und Impressum sowie den Anbieterangaben. Die Angaben (Firma, Anschrift, Telefon, Fax, E-Mail, Vertretung, Registergericht und -nummer, USt-IdNr.) kommen aus hs.impressum.* (Standardwerte wie auf /rechtliches/impressum; Registernummer und USt-IdNr. über HS_IMPRESSUM_REGISTERNUMMER und HS_IMPRESSUM_UST_ID, leere Felder entfallen). Im Theme-Editor gibt es dafür neue Platzhalter für eigene Gerüste ({{impressum}}, {{akzenthell}}, {{firma}}, {{link_support}}, {{link_agb}} u. a.). Das Layout ist für Smartphones responsiv und für Outlook ausgelegt, lädt aber keine Webfonts oder Bilder von Fremdservern. Wer lieb
  • Neu Roadmap-Update zu 1.0.0: docs/ROADMAP-1.0.0.md fasst Neuerungen, Sicherheitsthemen, Änderungen und Entfernungen (Umstiegshinweise von 0.4.0) und die Reihenfolge danach zusammen; erledigte Einträge der öffentlichen Standard-Roadmap sind als erledigt markiert.
  • Neu Erweiterte Roadmap: TASKS.md enthält 27 neue Vorhaben und Optimierungen, die öffentliche Standard-Roadmap sieben neue Punkte (im Team über „Fehlende Standard-Einträge hinzufügen“ übernehmbar).
  • Neu E-Mail-Theme für die System-E-Mails: Unter Team → E-Mail-Vorlagen → E-Mail-Theme legt das Team das Layout getrennt von den Texten fest: Format (nur Text oder HTML mit Textfassung), Kopf und Fuß (in beiden Fassungen, Platzhalter {{betreff}}, {{jahr}}), Akzent-, Hintergrund-, Inhalts- und Textfarbe, Schriftart, ein eingebettetes Logo (PNG/JPEG/GIF) und auf Wunsch ein komplett eigenes HTML-Gerüst mit {{inhalt}}. Vorschau als HTML und Text mit jeder Vorlage und Testmail an sich selbst; jede Vorlage zeigt zusätzlich, wie die Mail im Theme ankommt. Ohne eigenes Theme gilt das Standardtheme: reiner Text ohne Kopf und Fuß, also genau die bisherigen Mails.
  • Neu Vollständiger Checkout auf einer Seite unter /checkout: Paket und Abrechnungsintervall wählen (mit Preisübersicht netto, USt. und brutto je Zeitraum), Kundenkonto anlegen (Name, E-Mail, Passwort) oder als Bestandskunde anmelden und zurückkehren, Firma mit Rechnungsanschrift, Zahlungsart samt SEPA-Mandat, Gutscheincode sowie AGB, Datenschutz, AVV und Abo-Bestätigung. Danach geht es direkt zum Zahlungsanbieter; wahlweise startet stattdessen die kostenlose Testphase. Bisher waren dafür Registrierung, E-Mail-Bestätigung, Anmeldung, Firmenanlage und Zahlungsseite nötig. Muss die E-Mail-Adresse bestätigt werden, meldet der Link im selben Browser an und öffnet die vorausgefüllte Zahlungsseite. Die Preisseite („bestellen“) führt jetzt in den Checkout; /registrierung bleibt für ein Konto ohne Bestellung.
  • Neu Website mit echten Einblicken: Die Startseite zeigt statt der gezeichneten Attrappe Bildschirmfotos aus Büro (Dashboard, Terminplanung), Android-App (Heute-Ansicht, Stempeluhr, Auftragsbericht) und Kundenkonto, dazu einen Vorher/Nachher-Vergleich und „Jetzt registrieren“ als ersten Knopf. Die Kennzahlen im Kopfbereich (Zahl der Module, Preisspanne) kommen aus Modulliste und Preisen statt aus festem Text. Jede Themenseite unter /loesungen zeigt passende Ansichten; neu ist /loesungen/personalverwaltung-handwerk. Die Fotos lassen sich mit dem Profil schaufenster (Beispieldaten) und scripts/website-screenshots.js erneuern.
  • Neu Kostenlose Lizenzpakete (0,00 €): Im Lizenz-Manager lassen sich eigene Pakete und Standardpläne mit einem Nettopreis von 0,00 € anlegen (negative Preise bleiben verboten). Eine Firma auf einer kostenlosen Lizenz wird ohne Zahlungsanbieter und ohne Rechnung sofort freigeschaltet: direkt bei der Firmenanlage, oder auf der Zahlungsseite mit „Kostenlos freischalten“ statt Rechnungsdaten. Die Testphase des Kontos bleibt dabei für eine bezahlte Firma erhalten.
  • Neu Funktionen feiner buchbar: Die Sammelfunktion „Personalverwaltung und Dienstplan“ ist aufgeteilt in Teams, Dienstplan (mit Dienstplan-Analyse und Schichtterminen in der Terminplanung), Abwesenheiten und Personalakte (mit Urlaubs- und Arbeitszeitkonto). Serviceverträge sind jetzt ebenfalls eine buchbare Funktion. Der Lizenz-Manager und die Paketformulare zeigen die Funktionen nach Bereichen (Aufträge und Betrieb, Personal, Auswertung, Anbindungen). Bestehende Pläne, eigene Pakete und Ausnahmen je Firma sind per Migration unverändert: wer die Personal-Funktion hatte, hat alle vier; Serviceverträge sind überall enthalten. Ohne die Funktion ruhen fällige Serviceverträge, bis sie wieder gebucht ist.
  • Neu Abhängigkeiten werden wöchentlich geprüft: Dependabot schlägt montags Updates für die Gradle-Bibliotheken und die GitHub Actions als Pull Request vor (kleine Updates gebündelt), die CI prüft sie wie jede andere Änderung.
  • Neu Externe Kopie und Wiederherstellungstest für Backups: Das Backup-Skript kopiert jede Sicherung auf Wunsch per rsync (HS_BACKUP_RSYNC_ZIEL) oder rclone (HS_BACKUP_RCLONE_ZIEL) auf ein anderes System; die Werte stehen in /opt/hs-web-app/hs-web-app-backup.env. Mit HS_BACKUP_GPG_PASSPHRASE_DATEI wird die externe Kopie vorher mit AES-256 verschlüsselt (gpg), das Ziel sieht nur *.gpg-Dateien. Jeder Datenbank-Dump wird nach dem Schreiben auf Vollständigkeit geprüft, ein abgebrochener Dump oder eine fehlgeschlagene externe Kopie lässt den Lauf mit Fehler enden. Neu ist deploy/hs-web-app-backup-pruefen.sh: spielt eine Sicherung (auch eine verschlüsselte vom externen Ziel) in eine Wegwerf-Datenbank ein, zeigt Schema-Stand und Kerntabellen, prüft das Archiv der Uploads und räumt danach auf. Beide Skripte haben Tests in der CI (deploy/test/backup-test.sh).
  • Neu Betriebsbereitschaft im Start-Log: Nach dem Start im Produktivbetrieb steht im Journal (journalctl -u hs-web-app), was für den Betrieb noch fehlt – die Warnungen und Fehler der Seite Team → Betrieb (z. B. keine System-E-Mail, kein Backup, wenig Speicherplatz) und die offenen Punkte der Zahlungs-Prüfliste (https-Adresse, Webhook-Secret, Steuersatz-ID, Empfänger-IBAN für Überweisungen). Punkte des nicht gewählten Zahlungsanbieters zählen nicht. Der Start wird dadurch nicht abgebrochen; das bleibt der Produktionsprüfung für Entwicklungswerte vorbehalten.
  • Neu Kundenkonto ausgebaut, Kontostand integriert: „Mein Kundenkonto“ zeigt jetzt sechs Kennzahlen (Firmen und aktive Firmen, aktive Benutzer, Kontostand, offene Rechnungen, Lizenzkosten pro Monat, offene Tickets) und ist in Reiter gegliedert: Überblick mit „Zu erledigen“ (überfällige Rechnungen, fehlende Zahlung einer Firma, endende Testphase, Tickets mit Rückfrage, fehlende Anschrift), Terminen und Schnellzugriff; Firmen und Lizenzen mit Abonnement, Zahlungsart, Intervall, nächster Abrechnung, Benutzerzahl, Testphase und AVV-Status; Kontostand; Rechnungen; Zahlungen; Support; Kontodaten mit Support-PIN. Der Kontostand ist keine eigene Seite mehr: /konto/kontostand leitet auf den Reiter /konto#kontostand weiter, der Menüpunkt entfällt, der CSV-Kontoauszug bleibt unter derselben Adresse.
  • Neu Einstellbare Mahnstufen mit Gebühren: Unter Team → Mahnwesen legt das Team bis zu sechs Stufen fest, je mit Bezeichnung, Tagen nach Fälligkeit (z. B. Zahlungserinnerung nach 7 Tagen, 1. Mahnung nach 21 Tagen), Gebühr und E-Mail-Vorlage. Beim Versand einer Stufe kommt ihre Gebühr auf die Rechnung on top; die Mahnung nennt Mahngebühren und Gesamtbetrag (neue Platzhalter {{stufe}}, {{gebuehr}}, {{gebuehren}}, {{gesamt}}, {{gebuehrenhinweis}}; angepasste Vorlagen ohne diese Platzhalter bekommen den Hinweis angehängt). Kontostand, Verrechnung mit Guthaben und der automatische Zahlungsabgleich (bunq, Referenz) rechnen mit dem Betrag inklusive Gebühren, ein Zahlungseingang ohne Gebühren wird weiterhin zugeordnet. Ohne eigene Stufen gelten wie bisher die drei Standardstufen aus hs.mahnwesen.* ohne Gebühren.
  • Neu Profil der App direkt aus der Personalakte: Neuer Endpunkt GET/PUT /api/benutzer/mich/stammdaten für die Android-App mit Telefonnummer, E-Mail-Adresse, Anschrift, Geburtsdatum und Notfallkontakt. Mit Personalakte kommen alle Werte aus der Akte und werden dort gespeichert (Geburtstag, Anschrift und Telefon werden wie bisher auf den Zugang gespiegelt, die Personalnummer bleibt Sache der Verwaltung); ohne Personalakte gelten sie für den Zugang, ohne Notfallkontakt. Der bisherige Endpunkt /api/benutzer/mich/profil bleibt für ältere App-Versionen bestehen.
  • Neu GiroCode für Überweisungen: Die Überweisungsseite im Checkout, der Kontostand im Kundenkonto und das PDF offener Team-Rechnungen zeigen einen GiroCode (EPC-QR-Code). Die Banking-App liest daraus Empfänger, IBAN, BIC, Betrag und Verwendungszweck (Rechnungsnummer bzw. Kundennummer), der Kunde muss nichts abtippen. Auf dem Kontostand ist der Betrag nur vorbelegt, wenn etwas offen ist. Bezahlte und stornierte Rechnungen sowie Entwürfe bekommen keinen Code; ohne gültige IBAN in den Team-Einstellungen (bunq) erscheint keiner.
  • Neu Auftragsverarbeitungsvertrag (AVV) unter /avv (Art. 28 DSGVO, mit Anlagen: Gegenstand und Datenarten, technische und organisatorische Maßnahmen, Unterauftragnehmer, vom Kunden veranlasste Dienste). Kunden bestätigen den AVV beim Anlegen einer Firma (Pflicht-Kästchen); Zeitpunkt und Version werden an der Firma gespeichert. Bestehende Firmen sehen im Kundenkonto einen Hinweis mit Knopf „AVV bestätigen“. Der Link steht in Fußzeile und Rechtsseiten, die AGB verweisen darauf.
  • Neu Datenschutzerklärung neu gefasst auf die tatsächlich genutzten Verarbeitungen: Rollen (Verantwortlicher/Auftragsverarbeiter), Website und Hosting, nur technisch notwendige Cookies, Registrierung und Kundenkonto, Anmeldeschutz/Zwei-Faktor/Turnstile, Support und Aufschaltung, Bestellung und Zahlung (Stripe, Mollie, bunq, Buchhaltungssoftware), Android-App (Standort, Kartendienste, Benachrichtigungen), Empfänger und Drittländer, Speicherdauer, Social-Media-Links, Betroffenenrechte mit zuständiger Aufsichtsbehörde. Die nicht genutzten Abschnitte (CDN, Messenger, Videokonferenzen, Gewinnspiele, Bewertungen, eingebettete Plug-ins) sind entfallen.
  • Neu PAYMENT.md: Anleitung zum Einrichten von Stripe, Mollie und bunq, zu den Webhooks (Endpunkte, Ereignisse, Absicherung, Wiederholung), zum Testen lokal im Testmodus mit Tunnel, mit einem Testplan über 20 Fälle sowie Fehlersuche und Go-Live-Checkliste.
  • Neu Jede Lizenzzahlung hat eine Rechnung: Bisher bekamen Kunden bei Zahlung per Karte oder Lastschrift (Stripe/Mollie) nur einen Zahlungseintrag und eine Zeile im Kontostand, aber keine Rechnung im Kundenkonto; nur Überweisungen erzeugten eine nummerierte Rechnung. Jetzt wird zu jeder bestätigten Zahlung (erste Zahlung und jede Verlängerung) dieselbe nummerierte Rechnung als bezahlt angelegt: mit PDF unter „Rechnungen“, verknüpft mit der Zahlung und über die Team-Buchhaltung (Übertragung und Zahlung verbuchen) in die Buchhaltungssoftware. Ist die Team-Buchhaltung eingerichtet, entfällt die bisherige direkte orgaMAX-Übergabe der Zahlung (sonst gäbe es die Rechnung doppelt); ohne Team-Buchhaltung bleibt sie wie bisher. Der Kontostand zählt die Zahlung nicht doppelt. Der veraltete Hinweis „Online-Zahlungsabwicklung wird noch angebunden“ im Kundenkonto ist entfernt. Der Checkout setzt in Produktion keine orgaMAX-Zugangsdaten mehr voraus (die Rechnung entsteht im System; die Übergabe an die Buc
  • Neu Profil in der App und Personalakte gleichen auch die E-Mail ab: Die E-Mail aus der Personalakte erscheint im App-Profil, solange der Zugang keine eigene geschäftliche Adresse hat; eine in der App gespeicherte geschäftliche E-Mail gilt auch in der Personalakte.
  • Neu Auftragsbericht in zwei Fassungen: Der Bericht gibt es als Kundenbericht (Auftragsdetails, Kunde und Einsatzort, Beschreibung, durchgeführte Arbeiten, Unterschriften – ohne Arbeitszeit, Material, Zusatzangaben und Zuweisung) und als Interner Bericht (alles, mit Kennzeichnung „Interner Bericht“). Beide wahlweise mit oder ohne Bilder; Bilder stehen immer im Anhang ab Seite 2, die erste Seite bleibt bildfrei. Download-Menü, Vorschau (mit Umschalter), ZIP und API (?art=KUNDE|INTERN, Standard INTERN) kennen beide Fassungen; die E-Mail an den Kunden verschickt den Kundenbericht. Die öffentliche Unterschriftsseite zeigt dem Kunden keine Stunden mehr.
  • Neu Kurzer Anmeldename durch Administratoren setzbar: Firmen-Administratoren tragen den Kurznamen eines Benutzers in dessen Stammdaten ein (leer = entfernen), das Team den von Team-Mitgliedern in der Rechte-Seite (mit Eintrag im Aktivitätsprotokoll). Gleiche Regeln wie bei der eigenen Eingabe (3 bis 40 Zeichen, eindeutig).
  • Neu Betriebsüberwachung zeigt unbestätigte Konten: Neue Prüfung „Unbestätigte Konten“ mit der Zahl der Registrierungen, die noch auf die E-Mail-Bestätigung warten, und einer Warnung, wenn Konten zur nächtlichen Löschung anstehen.
  • Neu „Was ist neu“-Hinweis: Nach einem Update der Webanwendung sieht jeder Benutzer einer Firma einmal einen wegklickbaren Hinweis „Neu in Version x.y.z“ mit den wichtigsten Neuerungen aus dem Changelog (Fehlerbehebungen nur, wenn es nichts anderes gibt) und einem Link auf alle Änderungen. Neue Konten bekommen keinen Rückblick, das Team sieht den Hinweis nicht. Gemerkt wird die zuletzt bestätigte Version je Benutzer.
  • Neu Startprüfung erkennt Test-Schlüssel der Zahlungsanbieter: Im Produktivbetrieb bricht der Start jetzt auch ab, wenn STRIPE_SECRET_KEY ein Test-Schlüssel (sk_test_…) oder MOLLIE_API_KEY ein Test-Schlüssel (test_…) ist. Ist die Zwei-Faktor-Pflicht für das Team nicht eingeschaltet, steht ein Hinweis im Start-Log.
  • Neu Prüfung für Datei-Uploads der Firmen: Dokumente am Auftrag nehmen nur noch erlaubte Dateitypen an (PDF, Bilder, Word/Excel/PowerPoint, Text/CSV, ZIP), höchstens 25 MB, und prüfen anhand des Dateikopfs, ob der Inhalt zur Endung passt; Fotos der Auftragsberichte nur als Bild (PNG, JPG, WebP, GIF) bis 15 MB; sie werden am Inhalt erkannt und bekommen die passende Endung (die Android-App schickt Galerie-Bilder als JPEG unter dem Originalnamen, z. B. .heic). Dateinamen werden bereinigt. Abgelehnte Dateien erscheinen als Hinweis auf der Seite (in der API als Status 400 mit Meldung). Dieselben Regeln gelten schon für Support-Anhänge und Personalakten.
  • Neu Content-Security-Policy im Beobachtungsmodus: Alle Seiten senden jetzt den Header Content-Security-Policy-Report-Only (nur eigene Quellen, Cloudflare Turnstile für Formulare, keine Frames, kein Plugin-Inhalt). Es wird nichts blockiert; Verstöße meldet der Browser an /csp-report und landen als Warnung im Log. Wenn das Log sauber ist, lässt sich die Richtlinie mit HS_SECURITY_CSP_REPORT_ONLY=false erzwingen.
  • Neu Android-App 0.4.0 veröffentlicht: Das GitHub-Release android-v0.4.0 mit signierter APK und Prüfsumme ist erstellt (Release-Pipeline mit Signier-Secrets). Neue Version enthält unter anderem Meine Personaldaten, Profil aus der Personalakte und Abgleich alle zwei Minuten. Import in HS Desk unter Team → App-Update.
  • Neu Support-PIN: erneuern, absichern, im Ticket sehen: Konto-Inhaber können ihre PIN im Profilmenü selbst erneuern (die alte gilt sofort nicht mehr, Eintrag im Aktivitätsprotokoll). Jeder Abruf einer Kundenakte über die PIN steht im Aktivitätsprotokoll der Firma („Kundenakte über die Support-PIN abgerufen“, mit Team-Mitglied). Nach fünf Fehlversuchen ist die PIN-Suche für das Team-Mitglied zehn Minuten gesperrt, damit sich die sechsstellige PIN nicht durchprobieren lässt. Im Ticket zeigt das Team die PIN des Kundenkontos an.
  • Neu Rechte wirken sofort in laufenden Sitzungen: Wer eine Rolle wechselt, einen Bereich entzogen bekommt oder gesperrt wird, musste sich bisher neu anmelden, damit es galt. Jetzt gleicht ein Filter die Berechtigungen jeder Browser-Sitzung höchstens alle 30 Sekunden mit der Datenbank ab: Rechteänderungen (Team wie Firmen, auch Änderungen an einer Rolle oder am Lizenzumfang) gelten spätestens nach einer halben Minute, ein gesperrter oder entfernter Zugang wird abgemeldet. Support-Aufschaltungen und API-Zugriffe sind nicht betroffen.
  • Neu Support-Handlungen im Protokoll dem Team zugeordnet: Was das Team während einer Support-Aufschaltung in einer Kundenfirma ändert, stand bisher unter dem Namen des Kundenzugangs. Jetzt gehört der Eintrag im Aktivitätsprotokoll dem Team-Mitglied und beginnt mit „[Support: Name]“; Kunden sehen damit, was Support und was ihr eigenes Team getan hat. Beginn und Ende der Aufschaltung wurden schon vorher protokolliert.
  • Neu Eigene Team-Rollen: Unter *Team-Rollen* (Bereich Team-Verwaltung) legst Du Rollen mit frei gewähltem Namen, Beschreibung und Funktionsbereichen an, änderst und löschst sie (Löschen erst, wenn kein Zugang sie mehr nutzt). In *Team-Zugänge* lässt sich eine eigene Rolle beim Anlegen und Bearbeiten statt eines festen Profils wählen; einzelne Bereiche können wie bisher je Mitglied zusätzlich vergeben oder entzogen werden. Eigene Rollen bringen nie den vollen Zugriff auf Firmendaten mit. Anlegen, Ändern und Löschen stehen im Aktivitätsprotokoll; Änderungen der Bereiche wirken ab der nächsten Anmeldung.
  • Neu Listen als Karten auf dem Handy: Unter 768 px zeigen Buchhaltung und Transaktionen im Team, Rechnungen und Transaktionen im Kundenkonto sowie die Zeitauswertung jede Zeile als Karte mit beschrifteten Werten statt einer seitlich scrollenden Tabelle. Technisch ein Opt-in über die Klasse hs-tabelle-karten an der Tabelle (die Beschriftung kommt automatisch aus der Kopfzeile, app.js).
  • Neu Formulare und Fenster auf dem Handy: Auf Bildschirmen unter 576 px füllen Fenster („Neuer Auftrag“ usw.) die Breite fast vollständig aus, Titel- und Knopfzeile bleiben beim Scrollen sichtbar (Knöpfe untereinander, mit Abstand zur Gestenleiste), Eingabefelder haben 16 px Schrift (kein Heranzoomen auf dem iPhone) und größere Tippflächen, Kontrollkästchen sind größer. Geprüft bei 375 px: kein seitliches Überlaufen.
  • Neu Befristete Gutschein-Rabatte auch bei Karte und Lastschrift: Gutscheine mit Laufzeit („erste N Monate“) lassen sich jetzt bei jeder Zahlungsart einlösen. Ein täglicher Lauf (03:30 Uhr, RabattEndeService) stellt Abonnements bei Stripe/Mollie nach dem letzten Rabatttag auf den Listenpreis um und passt den wiederkehrenden Betrag beim Anbieter an; schlägt das fehl, bleibt der Rabatt stehen und der nächste Lauf versucht es erneut. Überweisungs-Abos stellt weiter die Rechnungserzeugung um.
  • Neu Landing-Page überarbeitet: Der Abschnitt „Einstieg“ beschreibt jetzt den tatsächlichen Weg (Registrieren → Paket bestellen und bezahlen, bei Online-Zahlung sofort freigeschaltet → Team und Stammdaten einrichten → Loslegen mit der Android-App) statt des früheren Erstgesprächs. Falsche oder veraltete Aussagen wurden korrigiert (kein „Offline“-Versprechen mehr, Schnittstellen zu Lexware Office, sevDesk und orgaMAX als verfügbar), Texte zu Terminplanung, Zeiterfassung und Dokumenten aktualisiert, das Modul heißt jetzt „Personalverwaltung und Dienstplan“ (Personalakte, Urlaubskonto, Arbeitszeit, Personen ohne Zugang). Neu: Vorteile „Personalakte mit Urlaub und Fristen“ und „Online bestellen, direkt starten“ sowie die Grundfunktionen „Kundenkonto und Rechnungen“ und „Android-App“; alles auf Deutsch und Englisch.
  • Neu Social-Media-Symbole unter der Sprachwahl in der Fußzeile der Website (Discord, TeamSpeak, X, Facebook, Instagram, YouTube, LinkedIn, TikTok, Twitch, GitHub, Mastodon, Telegram). Sie erscheinen nur, wenn die Adresse gesetzt ist (HS_SITE_SOCIAL_<KANAL>, siehe deploy/hs-web-app.env.example; nur https://, bei TeamSpeak auch ts3server://) und stehen zusätzlich als sameAs in den strukturierten Daten der Startseite.
  • Neu Alle Assets lokal: Bootstrap 5.3.3, Font Awesome Free 6.5.2 (inkl. Schriftdateien) und Chart.js 4.4.1 liegen unter /vendor/… und werden vom eigenen Server geladen (Versionen und Lizenzen in static/vendor/LIZENZEN.txt); die preconnect-Hinweise auf Fremd-CDNs entfallen. Das verbessert Datenschutz und Ladezeit und funktioniert auch ohne Zugriff auf Fremdserver. /vendor/ ist öffentlich freigegeben (sonst fehlten Gästen die Stile). Ein Test stellt sicher, dass keine Seite ein Fremd-CDN einbindet.
  • Neu Terminplanung für Personen ohne Zugang: In „Termin anlegen“ der Terminplanung gibt es die Gruppe „Personen ohne Zugang“ (Ziel person:<id>); Einzeltermine und Serien (täglich, wöchentlich, alle zwei Wochen, monatlich) lassen sich für sie anlegen und über den Dienstplan wie gewohnt bearbeiten oder als Serie löschen. „Alle Mitarbeiter (zentraler Termin)“ schließt Personen ohne Zugang jetzt ein. Der Kalender zeigt Namen und Abwesenheiten der Personen; bei Terminen an Abwesenheitstagen kommt der übliche Warnhinweis. Aufträge lassen sich weiter nur Zugängen und Teams zuweisen.
  • Neu Mobile Ansicht überarbeitet: Auf dem Handy und Tablet (unter 901 px) ist die Seitenleiste jetzt eine schmale Leiste mit Logo, Firmenname und Menü-Knopf, die beim Scrollen oben stehen bleibt; Navigation, Benutzer und „Kundenkonto/Abmelden“ liegen gemeinsam in der Menü-Schublade (vorher belegte der Konto-Fuß dauerhaft rund ein Achtel des Bildschirms). Die Titelzeilen brechen ihre Knöpfe um statt die Seite zu verbreitern (Personal), und die Tabellen von Zahlungsarten, Umsatz, Statistiken, Teams und Personalakte haben einen Rollbalken. Geprüft wurden rund 50 Seiten der Firma und des Teams bei 375 px Breite auf seitliches Überlaufen.
  • Neu Dienstplan und Terminplanung als Karten auf dem Handy: Der Wochenplan zeigt auf schmalen Bildschirmen (unter 768 px) je Person eine Karte mit nur den Tagen, an denen etwas ansteht (heute hervorgehoben; Personen ohne Einträge mit dem Hinweis „Diese Woche nichts geplant“) – Schichten bleiben dort bearbeitbar. In der Terminplanung ist die Woche eine Tagesliste, und die Monatsansicht zeigt nur Tage mit Terminen, Schichten oder Abwesenheiten, jeweils mit Wochentag und Datum. Der Desktop bleibt unverändert.
  • Neu Klebende Kopfzeile: Auf dem Desktop bleibt die Kopfleiste (Suche, Benachrichtigungen, Firmenwahl, Konto) beim Scrollen oben stehen; auf allen Seiten klebt zusätzlich die Titelzeile (Name der Seite mit ihren Aktionen wie „Neuer Auftrag“) direkt darunter; Sprungziele landen nicht hinter den Leisten. Wer eine Titelzeile nicht kleben lassen will, gibt ihr die Klasse hs-topbar-frei. Auf Tablet und Handy (Seitenleiste oben) bleibt es beim bisherigen Verhalten.
  • Neu Abo-Betrag beim Zahlungsanbieter wird automatisch angepasst: Bei einem Lizenzwechsel in der Kundenakte setzt der Server den wiederkehrenden Betrag des laufenden Abonnements bei Stripe (Position des Abonnements mit neuem Preis, Intervall und Steuersatz, ohne Nachberechnung) und Mollie (Betrag per Änderung des Abonnements, brutto) selbst auf den neuen Preis; den Ausgleich für den laufenden Zeitraum rechnet weiter der Lizenzwechsel. Die Vorschau kündigt das an. Schlägt der Abgleich beim Anbieter fehl, bleibt der Plan gewechselt und die Meldung nennt den Betrag, der von Hand einzutragen ist. Zusätzlich gibt es in der Firmenzeile den Knopf Betrag beim Anbieter abgleichen für einen erneuten Versuch. Überweisungs- und Demo-Abos sind nicht betroffen.
  • Neu Kundenakte: Rechnungsaktionen direkt im Reiter Abrechnung: Die Rechnungsliste zeigt jetzt Firma, Fälligkeit, farbigen Status und – wenn schon in die Buchhaltungssoftware übertragen – ein Wolken-Symbol. Mit dem Team-Bereich Abrechnung lassen sich Entwürfe versenden oder verwerfen, offene Rechnungen als bezahlt markieren oder stornieren, Rechnungen in die Buchhaltungssoftware übertragen (wenn angebunden) und die Zahlung verbuchen; dazu ein PDF-Knopf. Es geht danach zurück in die Akte. Rechnungen anderer Kundenkonten sind darüber nicht erreichbar.
  • Neu Kundenakte: Reiter „Benutzer“: Alle Benutzer des Kundenkontos auf einen Blick – der Kunden-Inhaber und je Firma die Mitarbeiter mit Rollen, Team, Status (aktiv, gesperrt, E-Mail unbestätigt) und Zwei-Faktor-Stand. Mit dem Team-Bereich „Kunden und Firmen“ lassen sich ein Reset-Link zum Passwort senden, die Zwei-Faktor-Anmeldung zurücksetzen (der Benutzer bekommt eine Hinweis-Mail) und Mitarbeiter sperren/entsperren (der Inhaber nicht); jede Aktion steht im Aktivitätsprotokoll der Firma. Der Support-Bereich sieht die Liste nur lesend. Benutzer fremder Kundenkonten lassen sich darüber nicht ändern.
  • Neu Abwesenheiten für Personen ohne Zugang: Auf der Personalakte (Reiter Urlaub) trägt die Verwaltung Urlaub, Krankheit und Sonstiges für Personen ohne Zugang ein (auch halbtags); die Einträge gelten sofort als genehmigt, lassen sich löschen und stehen im Aktivitätsprotokoll. Sie zählen im Urlaubskonto (Arbeitstage ohne Feiertage, Hinweis bei Überschreitung des Anspruchs), erscheinen im Abwesenheitskalender, im Dienstplan (mit Konflikthinweis bei Schichten an Urlaubstagen), im PDF, in der App-API und in der Terminplanung. Beim Koppeln an einen Zugang gehen die Einträge mit, beim Lösen zurück. Die Arbeitszeitkonto-Anzeige zeigt für Personen ohne Zugang kein Soll mehr, weil es dort keine Zeiterfassung gibt. Flyway H2 V89 / PostgreSQL V85
  • Neu Personen ohne Zugang im Dienstplan: Personen der Personalakte, die keinen Zugang haben (z. B. Aushilfen), erscheinen mit Namen und Anstellungskürzel als eigene Zeilen im Dienstplan (Gruppe „Ohne Zugang“, nur für die Verwaltung sichtbar) und lassen sich in der Schicht-Auswahl, im PDF und in der App-API (ohneZugang) verwenden. Wird die Person später an einen Zugang gekoppelt, gehören ihre Schichten dem Zugang; beim Lösen wandern sie zur Person zurück. Abwesenheiten, Aufträge und Stempeluhr gibt es weiter nur für Zugänge. Flyway H2 V88 / PostgreSQL V84
  • Neu Eigenes Recht „Personalakte“: Personalakten (Stammdaten, Urlaub, Arbeitszeit, Dokumente, Fristen, Export, Kalender) sind nicht mehr über „Benutzer verwalten“ zugänglich, sondern brauchen das neue Recht Personalakte (Rollen und Rechte). Wer bisher Benutzer verwalten durfte, bekommt es bei der Umstellung automatisch (Rollen, zusätzlich vergebene und entzogene Rechte). Auch die Erinnerungen an ablaufende Nachweise gehen nur noch an Benutzer mit diesem Recht; die Personalspalte in der Zugangsliste und die Kopplung auf der Zugangsseite sind ebenfalls nur dafür sichtbar. Flyway H2 V87 / PostgreSQL V83
  • Neu Team-Rollen und Rechte: Team-Mitglieder haben eine Rolle – neu Buchhaltung und Vertrieb zusätzlich zu Supporter, Entwickler, Administration und Geschäftsführung – und acht Funktionsbereiche: Übersicht, Support, Kunden und Firmen, Abrechnung, Produkt und Website, Betrieb und Wartung, Aufschalten, Team-Verwaltung. Die Rolle bringt Standardbereiche mit; unter Team → Team-Zugänge → Rolle und Rechte lassen sich einzelne Bereiche zusätzlich vergeben oder entziehen. Die Bereiche gelten für die Seiten (Adressen und Menü), die Kundenakte (Kontobuchung, Lizenzwechsel und Einmalrechnung brauchen Abrechnung, Aufschalten braucht Aufschalten) und das Aufschalten. Jede Änderung steht im Aktivitätsprotokoll und gilt ab der nächsten Anmeldung; mindestens ein aktives Mitglied behält die Team-Verwaltung. Flyway H2 V86 / PostgreSQL V82
  • Neu App-Profil mit Personalakte abgeglichen: GET/PUT /api/benutzer/mich/profil liefert Geburtsdatum, Anschrift und private Telefonnummer aus der Personalakte, speichert Änderungen auch dorthin und enthält die Anstellung (anstellung: Art, Kürzel, Funktion, Personalnummer, Eintritt, Wochenstunden); die Personalnummer ist per App nicht änderbar, sobald es eine Akte gibt; der Notfallkontakt (notfallName, notfallTelefon) wird ebenfalls aus der Akte geliefert und beim Speichern dorthin übernommen.
  • Neu Support-Aufschaltung statt technischem Benutzer: Der versteckte Benutzer „Hausservice-Desk Supportzugang“ je Firma entfällt (neue Firmen bekommen keinen mehr, bestehende werden beim Start als gelöscht markiert). Das Team schaltet sich stattdessen auf den Kunden-Inhaber auf und wählt dabei die Firma: in der Kundenakte (Reiter Firmen und Lizenz, Knopf Aufschalten mit Bestätigung), in der Mandantenliste und über „Als Kunde anmelden“; der Weg über die Support-PIN führt in die Kundenakte. Beginn und Ende stehen im Aktivitätsprotokoll der Firma (der Kunde sieht, wann der Support aufgeschaltet war). Ein Banner zeigt die Aufschaltung, und sie endet nach 30 Minuten ohne Bedienung automatisch: das Team ist dann wieder als es selbst angemeldet und landet in der Kundenliste (Hintergrundabfragen verlängern die Zeit nicht). Aufschalten dürfen nur Team-Mitglieder mit dem Recht „Mandanten verwalten“.
  • Neu Android-App 0.4.0: Personaldaten und App-Update-Import: Neuer Endpunkt GET /api/personal/ich (eigene Personalakte in Kurzform, nur lesend: Anstellung mit Kürzel, Urlaubskonto, Arbeitszeit des Monats mit Überstundenkonto und Prüfhinweisen, ablaufende Nachweise; ohne Akte vorhanden=false, braucht die Lizenz Personalplanung). Die Dienstplan-API liefert je Zeile anstellungKuerzel. Unter Team → App-Update importiert Neuestes Release aus GitHub importieren die signierte Release-APK samt Prüfsumme direkt aus dem GitHub-Release der App (Prüfsumme Pflicht, schon bereitgestellte Version wird übersprungen); mit HS_APP_UPDATE_GITHUB_IMPORT_AUTOMATISCH=true täglich automatisch.
  • Neu Team: Kundenakte mit Reitern, Lizenzwechsel mit Differenz, Einmalrechnung: Die Kundenakte ist übersichtlich in die Reiter Überblick (Gesundheit, Stammdaten des Kundenkontos), Firmen und Lizenz, Abrechnung (Kontostand, Rechnungen, Zahlungen, Einmalrechnung), Support (Support-PIN, Tickets, Anfragen) und Notizen und Aktivität gegliedert; der Reiter bleibt in der Adresse erhalten. Je Firma gibt es die Knöpfe Bearbeiten, Lizenz wechseln und Funktionen. Beim Lizenzwechsel zeigt der Dialog live die Differenz: Der Plan wechselt sofort, der Abo-Preis wird angepasst (ein Prozent-Rabatt bleibt erhalten), für den Rest des laufenden Abrechnungszeitraums wird anteilig nachberechnet (Rechnungsentwurf) oder gutgeschrieben (Kontostand). Läuft das Abo beim Zahlungsanbieter, weist die Meldung darauf hin, den Betrag dort anzupassen. Die Einmalrechnung (Einrichtung, Schulung, Jahrespaket …) legt einen Entwurf in der Buchhaltung an. In der Mandantenliste führt ein Knopf Akte direkt zur Firma.
  • Neu Personalverwaltung (Stufe 3): Arbeitszeit, Dokumente, Kalender, Export: In der Personalakte gibt es die Reiter Arbeitszeit (Soll aus den Wochenstunden – Montag bis Freitag ohne Feiertage, nur im Beschäftigungszeitraum und bis heute –, Ist aus der Stempeluhr, Gutschrift für genehmigten Urlaub und Krankheit, Saldo im Monat und Überstundenkonto seit Jahresbeginn, Arbeitszeitprüfung auf Pause, 10-Stunden-Grenze und 11 Stunden Ruhezeit) und Dokumente (Verträge, Zeugnisse, Bescheinigungen bis 10 MB, nur mit dem Recht „Benutzer verwalten“, jeder Abruf, Upload und jedes Löschen im Aktivitätsprotokoll; die Dateien fallen unter den Firmen-Löschlauf). Dazu der Abwesenheitskalender (Monatsraster aller Personen mit Urlaub, Krankheit, Sonstigem, beantragt blass, Feiertage und Wochenenden hervorgehoben) und der Monatsexport als CSV (Personalnummer, Soll, Ist, Gutschrift, Saldo, Urlaub und Krankheit in Tagen – Grundlage für die Lohnabrechnung). Für Personen ohne Zugang lässt sich aus der Akte ein Zuga
  • Neu Fehlerbehebung Zugang anlegen: „Neuer Zugang“ in der Zugangsliste brach mit einem Serverfehler ab (die Prüfung des Kurznamens lieferte bei aktivem Mandantenfilter mehrere Treffer); die Prüfung ist jetzt eine einfache Zählung.
  • Neu Navigation für Kunden ohne Firma: Das Kundenkonto-Menü (Kundenkonto, Rechnungen, Kontostand, Zahlungen, Support-Tickets) steht jetzt auch zur Verfügung, solange noch keine Firma angelegt ist; dazu ein Hinweis und der Eintrag Firma anlegen als nächster Schritt. Firmenmenüs (Aufträge, Kunden …) bleiben bis dahin ausgeblendet.
  • Neu Personal als eigene Personalakte, Mitarbeiter heißen jetzt „Zugänge“: Die Seite Personal führt jetzt Personen mit eigenen Stammdaten (Name, Geburtsdatum, Anschrift, Telefon, E-Mail) – ein Zugang (Anmeldung) ist optional, so lassen sich auch Aushilfen oder Subunternehmer ohne Login verwalten. Eine Person lässt sich an einen Zugang koppeln und die Kopplung zentral wieder lösen – sowohl auf der Personalseite als auch direkt auf der Zugangsseite (dort: an eine vorhandene Person binden, neue Personalakte aus dem Zugang anlegen oder lösen). Der frühere Menüpunkt „Mitarbeiter“ heißt Zugänge; dort bleiben nur Anzeigename, Benutzername, Team, geschäftliche E-Mail und Telefon, Rollen und Rechte – Geburtsdatum, Anschrift, Land, private Telefonnummer und Personalnummer pflegst Du in der Personalakte. Nachweise und Urlaubsanspruch hängen jetzt an der Person; Erinnerungen gehen an den gekoppelten Zugang (falls vorhanden) und an alle Verwalter. Zugänge ohne Akte werden auf der Personalseite angeboten
  • Neu Personalverwaltung (Stufe 2): Urlaubskonto: Im Mitarbeiterprofil gibt es den Reiter Urlaub mit Anspruch, Übertrag, Sonderurlaub, genommenem, beantragtem und verbleibendem Urlaub je Jahr. Gezählt werden Arbeitstage Montag bis Freitag ohne gesetzliche Feiertage (alle 16 Bundesländer, das Bundesland stellst Du auf der Seite Personal ein), halbe Tage zählen 0,5. Die Standard-Urlaubstage stehen im Profil und lassen sich je Jahr überschreiben; der Resturlaub lässt sich mit einem Klick ins Folgejahr übertragen. Mitarbeiter sehen ihr Urlaubskonto auf der Seite Abwesenheiten, bei einem Antrag über den Resturlaub hinaus erscheint ein Hinweis (der Antrag bleibt möglich). Die Personalliste zeigt den Resturlaub. Flyway H2 V83 / PostgreSQL V79
  • Neu Personalverwaltung (Stufe 1): Neuer Bereich Personal (Menü Verwaltung, mit der Personalplanung-Lizenz) – Übersicht aller Mitarbeiter mit Anstellungsart, Personalnummer, Funktion und der nächsten Frist; je Mitarbeiter ein Profil mit Anstellungsart (Vollzeit VZ, Teilzeit TZ, Minijob MJ, Werkstudent WS, Azubi AZ, Praktikant PR, Aushilfe AH, Freelancer FL, Subunternehmer SU, Sonstige SO), Personalnummer, Ein- und Austritt, Funktion, Soll-Wochenstunden und Notfallkontakt. Im Dienstplan steht das Kürzel der Anstellungsart neben dem Namen. Nachweise mit Ablaufdatum (Personalausweis, Reisepass, Aufenthaltstitel, Führerschein, Erste-Hilfe-Schein, Unterweisung, Gesundheitszeugnis, Scheine, Ende der Probezeit oder Befristung) erinnern täglich (6:15 Uhr) im Programm und per E-Mail: den Mitarbeiter selbst und alle mit dem Recht „Benutzer verwalten“, mit einstellbarer Vorlaufzeit je Nachweis (Vorgabe je Art, z. B. 90 Tage beim Ausweis), danach wöchentlich, solange der Nachweis abgelaufen ist. Flyway
  • Neu Firmenname schon bei der Registrierung: Das Registrierungsformular fragt optional den Firmennamen ab. Er wird als Name des Kundenkontos übernommen und beim Anlegen der Firma (nach einer Bestellung) vorausgefüllt – ein Feld weniger auf dem Weg zum Checkout.
  • Neu Willkommens-Mail nach der Freischaltung: Sobald eine bestellte Firma nach der Zahlung freigeschaltet wird (Karte, Lastschrift, Online-Zahlung oder bestätigte Überweisung), bekommt der Kunde einmal eine Mail mit Link zur Anwendung, ersten Schritten, Kundennummer und Support-PIN. Der Text ist unter Team → E-Mail-Vorlagen („Willkommen nach der Freischaltung“) anpassbar. Flyway H2 V81 / PostgreSQL V77
  • Neu Pakete direkt bestellen (erster Schritt): Auf der Preisseite heißen die Knöpfe jetzt „Basis bestellen“, „Professional bestellen“ … statt „anfragen“ und führen ohne Umweg zur Registrierung (bzw. direkt zur Firmenanlage, wenn man angemeldet ist). Das gewählte Paket wird am Konto gemerkt (auch nach der E-Mail-Bestätigung in einem anderen Browser), nach der Anmeldung geht es ohne Firma direkt zur Firmenanlage mit vorgewähltem Paket und von dort zum Checkout; mit bestätigter Zahlung wird die Firma automatisch freigeschaltet. Flyway H2 V80 / PostgreSQL V76
  • Neu Support-PIN zentral abrufen: Das Team gibt die PIN, die der Kunde am Telefon nennt, in der Kopfzeile ein (Feld „Support-PIN“, Enter) und landet direkt in der Kundenakte; falsche PINs führen zur Kundenliste mit Hinweis. Der Abruf steht im Log.
  • Neu Einstellungen: Herkunft der Zugangsdaten und Diagnose: Team → Einstellungen zeigt je Eintrag, ob die Zugangsdaten in der Oberfläche gespeichert sind, aus der Umgebungsdatei (.env) kommen oder fehlen – bisher stand dort „Nicht eingerichtet“, obwohl der Server die Werte aus der .env nutzte. Team → Zahlungsarten hat eine Prüfliste „Status der Anbindungen“ (https-Adresse, Live-/Test-Schlüssel passend zur Betriebsart, Webhook-Secret, Steuersatz-ID, orgaMAX, Bankdaten) mit Hinweis, was genau fehlt.
  • Neu Weitere CSV-Exporte im Team: Mahnwesen (überfällige Rechnungen mit Mahnstufe und Guthaben), E-Mail-Versand (Versandprotokoll mit dem gewählten Filter) und Abonnements (Kundenkonto, Kundennummer, Firma, Lizenz, Status, Zahlungsart, Anbieter, Intervall, Preis) lassen sich als CSV herunterladen.
  • Neu Serientermine gemeinsam löschen: Die Einträge eines Serientermins gehören zusammen. Im Dienstplan löscht das Wiederholen-Symbol neben dem Termin diesen und alle folgenden Termine der Serie für diese Person; Termine anderer Personen und frühere Termine bleiben. Flyway H2 V79 / PostgreSQL V75
  • Neu Serientermine in der Terminplanung: Beim Anlegen eines Termins lässt er sich wiederholen – täglich (Mo–Fr), wöchentlich, alle zwei Wochen oder monatlich – bis zu einem Datum (höchstens 60 Termine und zwei Jahre voraus). Für jeden Termin und jeden Mitarbeiter entsteht ein eigener Eintrag, Abwesenheiten werden als Warnung mit Datum gemeldet.
  • Neu Kundenliste mit Kundennummer und Kontostand: Die Kundenliste im Team zeigt Kundennummer, Support-PIN und den Kontostand je Konto (rot = noch zu zahlen, grün = Guthaben). Die Suche findet auch die Kundennummer.
  • Neu Mahnwesen und Guthaben: Hat ein Konto Guthaben (Vorauszahlung, Gutschrift), wird eine überfällige Rechnung vor dem Mahnversand damit bezahlt – es geht dann keine Mahnung raus. In der Mahnliste steht das Guthaben des Kontos an der Rechnung.
  • Neu Unbestätigte Registrierungen aufräumen: Wer seine E-Mail-Adresse nicht bestätigt und noch keine Firma angelegt hat, bekommt nach 3 Tagen einmal eine neue Bestätigungs-Mail, und das Konto wird nach 14 Tagen gelöscht (täglicher Lauf um 3:40 Uhr). Konten mit Firma oder weiteren Benutzern bleiben immer unberührt. Einstellbar mit REGISTRIERUNG_ERINNERUNG_TAGE und REGISTRIERUNG_UNBESTAETIGT_LOESCHEN_TAGE (0 = aus).
  • Neu Kontoauszug als CSV: Der Kontoauszug (Rechnungen, Zahlungen, Gutschriften mit laufendem Stand) lässt sich im Kundenkonto unter *Kontostand* und im Team in der Kundenakte als CSV herunterladen, im Kundenkonto auch für einen Zeitraum.
  • Neu Zahlungsarten übersichtlich gruppiert: Im Lizenz-Checkout und unter Team → Zahlungsarten erscheinen die Zahlungsmöglichkeiten unter vier Überschriften – Überweisung, Lastschrift, Kreditkarte und Online-Zahlungsmethoden (PayPal, iDEAL, Klarna, Bancontact, EPS, Przelewy24, Apple Pay, TWINT, BLIK). Leere Gruppen entfallen; Reihenfolge, Freigabe und Anbindung gelten weiter je Zahlungsmöglichkeit.
  • Neu Statistiken mit Diagrammen und Tabs: Die Team-Statistik (Team → Statistiken) ist jetzt in Reiter gegliedert – Überblick, Kunden & Lizenzen, Abonnements, Zahlungen, Nutzung – und zeigt Linien-, Säulen-, Balken- und Ringdiagramme (Wachstum, Zahlungseingänge, Lizenzverteilung, Zahlungsarten, Länder u. a.); die Zahlen stehen weiter als Tabelle unter jedem Diagramm. Die Statistik der Firmen (Menü Statistik) hat ebenfalls Reiter (Überblick, Aufträge, Team und Zeit, Tabellen) mit Diagrammen zu Aufträgen nach Status, neuen Aufträgen pro Monat, Aufträgen und Durchlaufzeit je Auftraggeber und Arbeitsstunden je Mitarbeiter. Diagramme: Chart.js, der gewählte Reiter steht in der Adresse (z. B. #abos).
  • Neu Funktionsumfang je Firma: befristet, protokolliert, für alle Firmen: Eine Freigabe oder ein Entzug lässt sich bis zu einem Datum begrenzen (Testzugang); danach gilt wieder der Lizenzumfang, ein nächtlicher Lauf räumt die Ausnahme auf. Jede Änderung steht im Änderungsprotokoll der Firma (im Fenster „Funktionen dieser Firma"), und die Einstellung lässt sich mit einem Haken für alle Firmen des Kundenkontos übernehmen. Flyway H2 V78 / PostgreSQL V74
  • Neu Aufgaben: Wiederholung und Erinnerung: Aufgaben in der Kundenakte lassen sich wöchentlich, monatlich, vierteljährlich oder jährlich wiederholen – sobald eine erledigt ist, entsteht die nächste (immer in der Zukunft). Eine Erinnerungs-Mail um 7:45 Uhr nennt fällige und überfällige Aufgaben, an die Zuständigen (geschäftliche E-Mail) bzw. gesammelt an BETRIEB_WARN_EMAIL, je Aufgabe höchstens einmal am Tag. Die Navigation zeigt bei Aufgaben die Zahl der heute oder früher fälligen. Flyway H2 V77 / PostgreSQL V73
  • Neu Weitere Zahlungsarten (Team → Zahlungsarten, Lizenz-Checkout): zusätzlich zu Karte, SEPA-Lastschrift und Überweisung jetzt PayPal, iDEAL, Bancontact, EPS, Przelewy24, Klarna, Apple Pay (Mollie), TWINT und BLIK über Stripe bzw. Mollie. Karte, Lastschrift und PayPal werden automatisch abgebucht; alle anderen werden je Abrechnungszeitraum per Rechnung bezahlt – die erste Rechnung öffnet gleich die Online-Zahlung, später gibt es auf Konto → Rechnungen den Knopf „Online bezahlen“ (auch für manuelle Rechnungen). Eingehende Zahlungen werden dem Anbieter-Webhook folgend verbucht, die Firma wird freigeschaltet. Flyway H2 V76 / PostgreSQL V72
  • Neu Abrechnungsintervall für Lizenz-Abos: monatlich, vierteljährlich oder jährlich (Auswahl im Checkout). Stripe-/Mollie-Abos buchen im gewählten Rhythmus ab, Rechnungen entstehen je Zeitraum (Preis = Monatspreis × Monate).
  • Neu Kundennummer und Kontostand: Jedes Kundenkonto bekommt eine fortlaufende Kundennummer (K-10001 …; bestehende Konten werden beim Start nachgetragen). Sie steht auf Rechnungs-PDF, Überweisungsseite und Mahnungen. Überweisungen mit Kundennummer, Konto-UUID oder Firmen-UUID (Mandat) im Verwendungszweck ordnet der Bank- und Anbieterabgleich automatisch dem Konto zu: passt der Betrag zu einer offenen Rechnung, wird sie bezahlt, sonst wird die Zahlung Guthaben. Der Kontostand (Guthaben − offene Rechnungen) mit Kontoauszug steht unter Konto → Kontostand und im Team in der Kundenakte, dort lassen sich Gutschriften und Korrekturen buchen. Guthaben wird automatisch mit offenen und neuen Rechnungen verrechnet.
  • Neu Datenschutz-Antworten per E-Mail: Neue E-Mail-Vorlagen (Eingangsbestätigung, Rückfrage zur Identität, erledigt, abgelehnt, Frist verlängert). Die Eingangsbestätigung geht automatisch an den Antragsteller, das Team bekommt einen Hinweis (BETRIEB_WARN_EMAIL) und täglich um 7:30 Uhr eine Erinnerung an Fristen, die innerhalb von 7 Tagen ablaufen oder überschritten sind. Weitere Antworten sendest Du aus der Anfrage per Knopfdruck; alles steht im Protokoll.
  • Neu Löschlauf für Firmendaten (Datenschutz → Löschanfrage): Die Löschung eines Kundenkontos entfernt jetzt auch alle Daten der Firmen – Aufträge, Kunden und Einsatzorte, Dokumente, Montageberichte, Fotos und Unterschriften, Material, Fahrzeuge, Dienstplan, Tickets, Integrationen u. a. – samt den hochgeladenen Dateien (erst nach erfolgreichem Datenbank-Commit). Der Lauf folgt den Fremdschlüsseln der Datenbank und bleibt dadurch auch bei neuen Tabellen vollständig (Test prüft das). Bestehen bleiben Firma und Benutzer als anonyme Reste sowie Rechnungen, Zahlungen, Abonnement und Gutschein-Einlösungen (Aufbewahrungspflicht); Verweise darauf werden geleert. Vor der Löschung zeigt die Anfrage den Umfang je Firma und bietet die Datenrückgabe als ZIP (JSON je Tabelle plus Dateien, ohne Zugangsdaten); das Ergebnis steht im Protokoll.
  • Neu Datenschutzanfragen (Auskunft, Löschung u. a.) (Team → Kunden und Support → Datenschutz): Anfragen von Betroffenen nach DSGVO (Auskunft Art. 15, Berichtigung, Löschung Art. 17, Einschränkung, Datenübertragung, Widerspruch, Sonstiges) als Vorgang mit Status, Bearbeiter und Frist (ein Monat ab Eingang; Verlängerung mit Begründung bis höchstens drei Monate), Dokumentation der Identitätsprüfung und lückenlosem Protokoll. Zu einem Kundenkonto entsteht automatisch eine Wiedervorlage in der Kundenakte. Datenauskunft für das Kundenkonto als PDF oder JSON direkt aus der Anfrage; Löschung als "Konto anonymisieren" (nur nach Identitätsprüfung, nur ohne offene Rechnungen und aktive Abonnements, mit Bestätigung durch Eintippen von LÖSCHEN): Kontaktdaten, alle Benutzerzugänge und Firmenkontaktdaten werden entfernt, Firmen deaktiviert, interne Notizen gelöscht; Rechnungen bleiben wegen der Aufbewahrungspflicht bestehen, Aufträge und Kundendaten der Firmen werden nicht gelöscht. Die Anfrage selbst ble
  • Neu Aufgaben und Wiedervorlagen (Team → Kunden und Support → Aufgaben): Interne Notizen in der Kundenakte können eine Wiedervorlage ("fällig am") und einen Zuständigen bekommen und werden damit zur Aufgabe. Die Seite zeigt alle offenen Aufgaben über alle Kunden, filterbar nach "Meine" und "Überfällig", mit Erledigt-Knopf; in der Akte lassen sie sich ebenfalls erledigen und wieder öffnen. Flyway H2 V73 / PostgreSQL V69
  • Neu Funktionsumfang je Firma (Kundenakte → Schalter-Symbol an der Firma): einzelne Funktionen nur für diese Firma zusätzlich freigeben (z. B. Beta-Funktionen zum Ausprobieren) oder entziehen, unabhängig vom Lizenzplan; Lexware- und E-Mail/Ticket-Integration bleiben immer enthalten. Flyway H2 V74 / PostgreSQL V70
  • Neu CSV-Exporte im Team: Transaktionen (mit den aktuellen Filtern) und Kunden-Gesundheit als CSV (Semikolon, UTF-8 mit BOM, Excel-tauglich, mit Schutz vor Formeln in Zellen)
  • Neu Gutschein-Link: /registrierung?gutschein=CODE merkt den Code in der Sitzung und füllt ihn auf der Zahlungsseite vor
  • Neu Team-Übersichten: Kennzahl "Abos mit Gutschein" (mit Rabatt pro Monat) in den Statistiken, Gutschein am Abonnement in der Kundenakte, Kennzeichnung "E-Mail unbestätigt" in der Kundenliste
  • Neu Gutscheine und Rabatte (Team → Abrechnung → Gutscheine): Rabattcodes für den Lizenz-Checkout, als Prozent oder Festbetrag (netto) auf den Monatspreis, dauerhaft oder für die ersten Monate. Pro Gutschein lassen sich Einlösezeitraum, Höchstzahl der Einlösungen und bestimmte Kundenkonten festlegen; ausschalten, bearbeiten und die Einlösungen (Firma, Konto, Preis) einsehen. Der Code wird auf der Zahlungsseite eingegeben und mit "Prüfen" samt Preis nach Rabatt angezeigt; eine Firma kann jeden Code nur einmal einlösen. Der Preis sinkt nie auf 0 (mindestens 1 Cent, Prozent unter 100). Dauerhafte Rabatte gelten für alle Zahlungswege (Stripe, Mollie, Überweisung), befristete nur bei Überweisung, weil Kartenanbieter laufende Abos nicht automatisch zurücksetzen; nach Ablauf wird wieder der Listenpreis berechnet. Der Gutschein steht auf der Monatsrechnung. Flyway H2 V72 / PostgreSQL V68
  • Neu System-E-Mail-Vorlagen im Team (Team → Betrieb und Team → E-Mail-Vorlagen): Die Texte der System-E-Mails lassen sich anpassen: Passwort zurücksetzen, E-Mail-Adresse bestätigen, Sicherheitshinweis (Rahmen), Testphase endet bald / letzter Tag / abgelaufen sowie die drei Mahnstufen. Betreff und Text enthalten Platzhalter wie {{name}} oder {{link}} (Übersicht mit Beschreibung und Beispiel, ein Klick fügt sie ein); das Speichern prüft auf unbekannte oder fehlende Pflichtplatzhalter (z. B. den Link). Live-Vorschau mit Beispielwerten, "Testmail an mich" über die System-E-Mail und "Auf Standard zurücksetzen"; Speichern des unveränderten Standardtexts entfernt die Anpassung. Die Standardtexte entsprechen dem bisherigen Wortlaut. Flyway H2 V71 / PostgreSQL V67
  • Neu Zahlungsarten im Team einstellen (Team → Abrechnung → Zahlungsarten): Jede Zahlungsmöglichkeit im Lizenz-Checkout ist eine eigene Einstellung aus Zahlungsart (Karte, SEPA-Lastschrift, Überweisung) und Anbindung (Stripe, Mollie, bunq): z. B. "SEPA-Lastschrift über Mollie" oder "Überweisung über bunq". Pro Zahlungsart lassen sich ein- und ausschalten, eine eigene Bezeichnung für Kunden, die Reihenfolge und die Freigabe wie bei den Lizenzpaketen festlegen: öffentlich, nur ausgewählte Kundenkonten, alle außer ausgewählten oder privat. Der Checkout zeigt nur Zahlungsarten, die angeboten werden, deren Anbindung eingerichtet ist und die für das Kundenkonto freigegeben sind; mehrere Anbieter nebeneinander sind möglich (die globale Einstellung BILLING_PROVIDER entscheidet nicht mehr allein). Beim Update entstehen die bisherigen Zahlungsarten als öffentliche Standardeinträge. Flyway H2 V70 / PostgreSQL V66
  • Neu bunq-Bankverbindung vollständig konfigurierbar (Team → Einstellungen → bunq): zusätzlich zu IBAN und Kontoinhaber jetzt Bankinstitut und BIC/SWIFT. Die Angaben erscheinen auf der Überweisungsseite der Kunden, in den Mahnungen und im Rechnungs-PDF (dort gehen sie den Werten aus hs.buchhaltung.aussteller.* vor)
  • Neu E-Mail-Bestätigung bei der Registrierung: Neue Kundenkonten erhalten eine Mail mit einem 24 Stunden gültigen Bestätigungslink; erst danach ist die Anmeldung möglich (auch Passkey-Anmeldung und API-Anmeldung der App sind bis dahin gesperrt). Auf der Anmeldeseite lässt sich die Mail erneut anfordern, im Team (Kundenakte) kann die Adresse von Hand als bestätigt markiert werden. Die Pflicht gilt nur, wenn die System-E-Mail eingerichtet ist (sonst würde sich niemand mehr anmelden können) und lässt sich mit REGISTRIERUNG_EMAIL_BESTAETIGUNG=false abschalten; bestehende Konten und vom Team angelegte Zugänge sind nicht betroffen. Flyway H2 V68 / PostgreSQL V64
  • Neu Benutzername für die Anmeldung: Unter Mein Konto lässt sich ein kurzer, eindeutiger Benutzername festlegen (3 bis 40 Zeichen); damit meldest du dich zusätzlich zum bisherigen Anmeldenamen (meist die E-Mail-Adresse) an, im Browser, per Passwort-vergessen und in der App
  • Neu Team: Teams richtig auflösen: Teamdetails mit "Mitglieder verwalten" (Häkchen setzen, wer im Team ist; wer fehlt, wird entfernt), "Team auflösen" (Mitglieder und Zuweisungen von Aufträgen und Serviceverträgen werden gelöst, dann wird das Team gelöscht); der Teamleiter ist automatisch Mitglied und wird beim Entfernen, Wechseln oder Löschen des Benutzers nicht mehr als Leiter "vergessen"; deaktivierte Mitarbeiter erscheinen nicht mehr in Auswahllisten
  • Neu Team: Team-Zugänge entfernen (Team → Team-Zugänge → Entfernen): Zugang wird unbrauchbar gemacht (Name anonymisiert, Passwort ungültig, zweiter Faktor entfernt), der eigene und der letzte aktive Zugang sind geschützt
  • Neu Terminplanung: zentraler Termin: Beim Anlegen eines anderweitigen Termins lässt sich "Alle Mitarbeiter", ein Team oder ein einzelner Mitarbeiter wählen; für Gruppen entsteht der Termin für jedes (aktive) Mitglied, Abwesenheiten werden als Hinweis aufgelistet
  • Neu Kunde im Auftrag anlegen: Der Dialog "Neuer Kunde" im Dialog "Neuer Auftrag" hat jetzt dieselben Felder wie die Kundenliste (Anschrift, Ansprechpartner, Telefon, E-Mail, Notiz, Unterschrift per Link, Bericht per E-Mail, SEPA-Mandat); beide benutzen dasselbe Formular-Fragment
  • Neu Team: Firmendaten und Kundenkonto bequem bearbeiten: In der Kundenakte öffnen "Kundenkonto bearbeiten" und der Stift an jeder Firma einen Dialog (inkl. USt-IdNr., Land, Rechnungs-E-Mail, Reverse-Charge, Subdomain und Zwei-Faktor-Pflicht der Firma). Firmendaten sind im Team nur noch mit dem Firmennamen als Pflichtfeld speicherbar (bisher scheiterte das an leerer Anschrift oder ausländischer PLZ)
  • Neu Eigene Lizenzpakete mit Freigabe: Pro Paket lässt sich festlegen, wer es beim Anlegen einer Firma wählen darf: öffentlich, nur ausgewählte Kundenkonten, alle außer ausgewählten oder privat (nur das Team ordnet es zu). Die Freigabe ist auch bei bereits genutzten Paketen änderbar; das Anlegen einer Firma prüft sie serverseitig. Flyway H2 V69 / PostgreSQL V65
  • Neu Transaktionen zuordnen und filtern (Team → Transaktionen): zusätzlich zum Anbieter (bunq, Mollie, Stripe, manuell) lässt sich nach Typ (Überweisung, Karte, SEPA, iDEAL, PayPal ...), Zuordnung und Text (Verwendungszweck, Absender, ID) filtern; Summen je Typ. Nicht zugeordnete Zahlungen ordnest du einem Kundenkonto und optional gleich einer offenen Rechnung zu (die Rechnung wird als bezahlt markiert, ein gesperrtes Abo wird wieder freigeschaltet); die Zuordnung zu einem Konto lässt sich wieder lösen
  • Neu Team: Kunde anlegen (Team → Kunden → "Kunde anlegen", als Fenster/Modal): Name, Ansprechpartner, E-Mail (Anmeldename), Telefon und Anschrift erfassen; das Konto bekommt Inhaber, Support-PIN und die gewohnte Buchhaltungs-Anlage. Das Passwort legt der Kunde selbst fest: Das Team lässt eine Einladung mit Link zum Festlegen des Passworts per E-Mail senden (abschaltbar, sonst "Passwort vergessen"). Fehler (fehlende Angaben, E-Mail schon vergeben) erscheinen im wieder geöffneten Fenster mit den eingegebenen Werten; danach geht es direkt in die Kundenakte
  • Neu Team: Kunden-Gesundheit (/team/gesundheit, Bereich "Kunden und Support", dazu eine Karte in der Kundenakte): Jedes Kundenkonto bekommt 0 bis 100 Punkte (ab 70 gesund, ab 40 beobachten, darunter Risiko). Abzüge gibt es für lange Inaktivität (14/30 Tage, nie aktiv), keine Aufträge in 30 Tagen, nur einen aktiven Benutzer, Kündigung, gestörte Zahlung, überfällige Rechnung (ab 28 Tagen mehr), mindestens 3 offene Tickets und eine endende Testphase. Die Liste zeigt die schlechtesten zuerst mit den Gründen im Klartext, dem Umsatz pro Monat und dem Umsatz, der im Risiko steht; filterbar per Klick auf die Kennzahlen. Neue Konten (unter 7 Tagen) gelten nicht als inaktiv
  • Neu Team: Mahnwesen (/team/mahnwesen, Bereich "Abrechnung"): Überfällige Team-Rechnungen mit Tagen, Betrag, Mahnstufe und Empfehlung (Zahlungserinnerung nach 3, 1. Mahnung nach 14, letzte Mahnung nach 28 Tagen, Sperrhinweis nach 45 Tagen; alles einstellbar). Ein Klick sendet die nächste Stufe per E-Mail an den Rechnungsempfänger (mit Betrag, Fälligkeit und Überweisungsdaten aus den Team-Einstellungen); der Versand taucht im E-Mail-Versandprotokoll auf. Optional täglich automatisch (MAHNWESEN_AUTOMATISCH=true, Mindestabstand 7 Tage je Rechnung). Dazu die Liste der Abonnements mit gestörter Zahlung. Gesperrt wird nichts automatisch. Flyway H2 V67 / PostgreSQL V63
  • Neu Team: E-Mail-Versandprotokoll (/team/mails, Bereich "Betrieb und Team"): Jede System-E-Mail (Passwort zurücksetzen, Sicherheitshinweise, Testphasen-Erinnerungen, Kontaktanfragen und Antworten, Betriebswarnungen, Benachrichtigungen) wird mit Zeit, Art, Empfänger, Betreff und Ergebnis protokolliert, bei Fehlern mit der Meldung des Mailservers. Kennzahlen für 24 Stunden und 30 Tage, Filter nach Ergebnis, Art und Empfänger. Der Nachrichtentext wird bewusst nicht gespeichert (Passwort-Links); Einträge werden nach 180 Tagen gelöscht. Flyway H2 V66 / PostgreSQL V62
  • Neu Team: Betriebsüberwachung (/team/betrieb, Bereich "Betrieb und Team"): Prüfungen mit Ampel (Datenbank, System-E-Mail, Alter des letzten Backups, Speicherplatz, Arbeitsspeicher, Zahlungsquellen, geplante Läufe, Fehler der letzten Stunde, Warteschlange), Stand jedes geplanten Laufs (letzter Start, Dauer, Ergebnis, Anzahl Läufe und Fehler), die letzten 200 Fehler aus dem Log mit Ausnahme und Stapel sowie die Warteschlange fehlgeschlagener Vorgänge (Rechnung an die Buchhaltung, Zahlung verbuchen, Vertragsrechnung, unzugestellte Antworten) mit "Erneut versuchen". Bei Fehlerhäufung (Standard: 5 in 10 Minuten) oder kritischem Zustand sendet der Server höchstens stündlich eine Warn-E-Mail an BETRIEB_WARN_EMAIL
  • Neu Team: Kundenakte (/team/kunden/{Konto}/akte, in der Kundenliste über den Namen oder "Akte"): Alles zu einem Kundenkonto auf einer Seite – Kontaktdaten und Support-PIN, Kennzahlen (Kunde seit, letzte Aktivität, wiederkehrender Umsatz, offene Posten, offene Tickets), Firmen mit Plan, Abonnement, Nutzung und Status (Testphase, Zwei-Faktor-Pflicht), Rechnungen, Zahlungen, Support-Tickets, Kontaktanfragen mit gleicher E-Mail-Adresse, letzte Aktivitäten sowie interne Notizen (anheftbar, nur für das Team); dazu "Bearbeiten" und "Als Kunde anmelden"
  • Neu Team: Statistiken (/team/statistiken): Kennzahlen (registrierte Konten, Firmen aktiv/inaktiv, Benutzer, Aufträge, zahlende Abonnements mit MRR, Testphasen mit Umwandlungsquote) und Balkenverteilungen: Registrierungen und neue Firmen pro Monat, Aufträge und Zahlungseingänge pro Monat, Firmen nach Lizenz, Abonnements nach Status, Zahlungsart und Zahlungsanbieter, Zahlungen nach Methode und Quelle (mit Summen) sowie Kundenkonten nach Land
  • Neu Transaktionen im Team aus allen Quellen: Neben bunq werden jetzt auch Zahlungen von Mollie und Stripe direkt bei den Anbietern abgeholt (alle 10 Minuten und per "Jetzt abgleichen"; benötigt MOLLIE_API_KEY bzw. STRIPE_SECRET_KEY). Die Liste lässt sich nach Quelle filtern, oben stehen Summe und Anzahl je Quelle und der Status jeder Anbindung; Zahlungen, die schon über den Checkout erfasst wurden, werden nicht doppelt angelegt
  • Neu Aktivitätsprotokoll lesbar: Typen heißen jetzt "App-Update", "Team-Zugang", "Wartung und Backup" usw. statt "SuperAdminAppUpdate"; Aktionen werden erkannt (Hochgeladen, Versendet, Aktiviert, Deaktiviert, Zurückgesetzt, Exportiert, Genehmigt, Abgelehnt neben Angelegt, Geändert, Gelöscht); Beschreibungen lauten "App-Update: hochgeladen (POST /team/app-update)", Bezeichnungen "Aktiv schalten" statt "aktivSchalten". Ältere Einträge werden beim Update umbenannt und beim Anzeigen lesbar gemacht
  • Neu Zeitstempel lesbar: App-Update (Veröffentlicht am) zeigt "09.10.2026 22:15" statt eines ISO-Zeitstempels; die Backup-Liste nennt die Erstellzeit
  • Neu Anmeldung im Stil der Registrierung: Die Login-Karte hat jetzt dieselbe Optik wie die Karten der Registrierung (Überschrift mit Symbol, gleiche Felder, Rand und Schatten); die Anmeldung steht auf dem Desktop in der gleichen Breite wie die Seitenspalte
  • Neu Passwortfelder: Tastaturen sollen nichts mehr automatisch ergänzen (kein Großschreiben, keine Autokorrektur); beginnt oder endet ein Passwort mit einem Leerzeichen, erscheint ein Hinweis darunter
  • Neu Roadmap weiter gefüllt (iPhone-Web-App, Störungsannahme und Rufbereitschaft, Projekte, Nachkalkulation, Zahlung vor Ort, Preisanpassung, Dokumentenablage, Qualifikationen, weitere Sprachen, Sicherheitshärtung, Statusseite, Hochverfügbarkeit, Barrierefreiheit, Telefonie, Umweltbilanz); Lösungswege stehen in TASKS.md unter "Roadmap-Details"
  • Neu Roadmap erweitert um wesentliche künftige Themen (E-Rechnung/XRechnung, GoBD-Archivierung, digitale Prüfprotokolle, Leistungskatalog, DATEV, Kalender-Sync, Plantafel mit Live-Standort, Fahrzeuglager, Kundenbewertungen, DSGVO-Werkzeuge, Lohn-Export, API-Schlüssel/Webhooks, Single Sign-on, KI-Assistent, Auftragsannahme per E-Mail, Partnerportal, Branding); erledigte Punkte sind nachgetragen. Bestehende Roadmaps ergänzt "Fehlende Standard-Einträge hinzufügen" im Team
  • Neu Testphase: Missbrauchsschutz – hatte eine Firma gleichen Namens (Groß-/Kleinschreibung und Leerzeichen egal) schon eine Testphase, gibt es keine zweite in einem neuen Konto; statt stillem Wechsel zur Zahlung erscheint ein Hinweis
  • Neu Zuweisung vereinheitlicht: Überall gibt es nur noch ein Feld "Zugewiesen an", das einen Mitarbeiter oder ein Team aufnimmt – in der Auftragsliste (ein Filter statt zweier, eine Spalte statt zweier), in den Auftragsdetails, in den PDFs und im Servicevertrag (Auswahl mit den Gruppen Teams und Mitarbeiter). Die bisherigen Parameter zugewiesenAnId/zugewiesenesTeamId der Liste funktionieren weiter. Die App zeigt "Zugewiesen an" ebenfalls als ein Feld ("Team Nord" bei Teamzuweisung)
  • Neu Termin setzt den Status: Trägt man bei einem offenen Auftrag einen Termin ein (Auftragsdetails, Terminplanung, neuer Auftrag, Serviceverträge), wechselt er sofort auf "Terminiert" (mit Eintrag in Historie und Protokoll); entfernt man den Termin wieder, geht ein terminierter Auftrag zurück auf "Offen". Andere Status (z. B. In Bearbeitung) bleiben unverändert
  • Neu Tickets: Chat-Verlauf (Kunde rechts, Team links mit Symbol, Position und Name), Datei-Anhänge (Prüfung von Endung, Inhalt und Größe, geschützter Download), Ereignisse im Verlauf; Team-Ansicht mit Kennzahlen-Karten, Filtern, Zuständigkeit, Textbausteinen, Seitenleiste mit Details/Anhängen/weiteren Tickets
  • Neu Urlaub: halbtags/ganztags bei eintägigen Abwesenheiten, Arbeitstage (halbe Tage 0,5); Dienstplan und Terminplanung zeigen genehmigten und beantragten Urlaub; Warnung beim Planen von Schichten, Terminen und Aufträgen auf abwesende Mitarbeiter; API liefert Tagesanteil
  • Neu bunq: Monetary-Account-ID in den Team-Einstellungen
  • Geändert Neue Adressen für Anmeldung und Rechtstexte: Alles rund um die Anmeldung liegt unter /auth (/auth/login, /auth/login/2fa, Passkey-Anmeldung, /auth/logout, /auth/registrierung, /auth/passwort-vergessen, /auth/passwort-zuruecksetzen, /auth/email-bestaetigen), die Rechtstexte unter /rechtliches (/rechtliches/impressum, /agb, /datenschutz, /avv, /widerrufsrecht; /rechtliches selbst führt zum Impressum). Die bisherigen Adressen leiten dauerhaft (301) weiter, inklusive Token, damit bereits verschickte Links zum Passwort-Zurücksetzen und zur E-Mail-Bestätigung weiter funktionieren.
  • Geändert Zahlungsarten auf eine feste Liste beschränkt: Im Team (Zahlungsarten) und im Checkout gibt es nur noch Banküberweisung, PayPal, SEPA-Lastschrift, Kreditkarte und Online-Zahlungsmethoden. iDEAL, Bancontact, EPS, Przelewy24, Klarna, Apple Pay, TWINT und BLIK sind als eigene Zahlungsarten entfallen; bestehende Optionen und Abonnements damit werden zu „Online-Zahlungsmethoden“. Bei dieser Zahlungsart legt HS Desk keine Methode fest: der Kunde wählt auf der Zahlungsseite von Stripe bzw. Mollie unter den dort freigeschalteten Methoden.
  • Geändert Land überall als Auswahlliste: Die Länderangabe bei Kunden (Einsatzorten), Auftraggebern, in der Kundenakte und im Kundenstamm des Teams ist jetzt eine Auswahlliste statt Freitext (Kunden und Auftraggeber speichern den Ländernamen wie bisher, Konten den Code). Ältere Freitext-Werte, die nicht in der Liste stehen, bleiben als zusätzliche Auswahl erhalten.
  • Geändert Kopfzeile: Neben dem Profilbild steht der Anzeigename; im Profilmenü stehen Name und Support-PIN (mit Kopieren-Knopf).
  • Geändert DEPLOYMENT.md überarbeitet: Inhaltsverzeichnis und Schnellüberblick (Installation, Update, Deinstallation), Konfigurationsreferenz aller Umgebungsvariablen, Upgrade-Hinweise zu den letzten Änderungen, Betrieb im Alltag (Logs, Health-Check, automatische Läufe), Deinstallation und eine erweiterte Fehlerbilder-Tabelle; deploy/hs-web-app.env.example enthält jetzt alle Variablen (optionale auskommentiert mit Standardwert)
  • Geändert Team-Navigation neu geordnet in fünf einklappbare Bereiche: Übersicht (System-Übersicht, Statistiken, Umsatz), Kunden und Support (Mandanten, Kunden, Support-Tickets, Kontaktanfragen), Abrechnung (Lizenz-Manager, Buchhaltung, Transaktionen), Produkt und Website (Roadmap, Changelog, App-Update, Meldungen) und Betrieb und Team (Team-Zugänge, Aktivitätsprotokoll, Wartung und Backup, Einstellungen). Die aktuelle Seite ist hervorgehoben, der Bereich mit der aktuellen Seite bleibt offen, eingeklappte Bereiche werden im Browser gemerkt (auch in der Navigation der Firmen wird die aktive Seite jetzt markiert)
  • Behoben Zeitauswertung und „Meine Zeiten“ brachen mit einem Fehler ab, sobald eine Buchung noch lief (eingestempelt, ohne Ende). Die Spalte zeigt jetzt „läuft …“.
  • Behoben Testphase → Abonnement ging nicht: Der Banner-Link „Jetzt Abonnement abschließen“ führte in der Testphase zurück zum Dashboard, weil die Zahlungsseite aktive Firmen ausschloss; auch der Checkout lehnte aktive Firmen ab. Jetzt lässt sich das Abonnement in der Testphase abschließen. Außerdem beendet eine per Überweisung bezahlte Rechnung die Testphase (vorher blieb sie bestehen, und die Firma wäre nach deren Ablauf wieder gesperrt worden).
  • Behoben Mandantenfilter für Benutzer war nicht geklammert (mandant_id = … or (konto_inhaber … )): Abfragen auf Benutzer lieferten dadurch innerhalb einer Anfrage zusätzlich alle Konto-Inhaber der eigenen Kundenkonten, egal nach was gesucht wurde. Folgen waren falsche „bereits vergeben“-Meldungen (z. B. bei geschäftlicher E-Mail oder Kurzname) und eine Zuordnung der Suche zu falschen Benutzern. Die Bedingung ist jetzt geklammert.
  • Behoben Die Suche nach einem Kurznamen lieferte innerhalb angemeldeter Anfragen falsche Treffer (die abgeleitete Abfrage lief durch den erweiterten Mandantenfilter und fand fremde Benutzer), sodass ein freier Kurzname als „vergeben“ galt. Die Suche ist jetzt eine einfache Tabellenabfrage (findAllByLoginName) und wird bei Anmeldung, Passwort-Zurücksetzen, Zwei-Faktor und API genutzt.
  • Behoben Die Seite „Anmeldung & Sicherheit“ erschien bei Konten mit Zwei-Faktor-Pflicht ohne Stile und Symbole, weil die lokal ausgelieferten Bibliotheken (/vendor/…) zur Einrichtung umgeleitet wurden. Sie sind jetzt ausgenommen (Test ergänzt).
  • Behoben Sicherheit: HTTP-Basic nur noch für die API: Auf den Weboberflächen wird ein Basic-Header abgewiesen (Anmeldung nur über die Anmeldeseite mit Sperre nach Fehlversuchen und zweitem Faktor). Nginx-Vorlage ergänzt Referrer-Policy und Permissions-Policy.
  • Behoben Menü auf Team-Seiten: Auf elf Team-Seiten (Betrieb, Gesundheit, Kontakt, Mahnwesen, E-Mail-Versand, Roadmap, Changelog, Umsatz, Wartungsmeldungen) ließ sich das Menü am Handy nicht öffnen, weil dort das Skript der Oberfläche nicht geladen wurde; auch Profil- und Benachrichtigungsmenü blieben auf diesen Seiten ohne Funktion.
  • Behoben Landing am Handy: Anmelden und Registrieren fehlten, weil die Knöpfe der Kopfzeile unter 1200 px ausgeblendet sind; sie stehen jetzt im mobilen Menü.
  • Behoben Sicherheit: Zwei-Faktor-Anmeldung umgehbar: Konten mit zweitem Faktor waren per HTTP-Basic-Header (Benutzername und Passwort) auf den Weboberflächen auch ohne Code erreichbar; die Sperre gilt jetzt für jeden Pfad.
  • Behoben Sicherheit: Dateiname beim Upload: Ein Dateiname mit ../ konnte außerhalb des Zielordners schreiben (auch in Ordner anderer Firmen). Namen werden jetzt auf den reinen Dateinamen reduziert und der Zielpfad geprüft.
  • Behoben Sicherheit: Client-IP hinter Nginx: Mit forward-headers-strategy: native sehen Anmeldeschutz und Limits die echte Besucheradresse statt der Proxy-Adresse (sonst konnten wenige Fehlversuche alle Nutzer sperren).
  • Behoben Sicherheit: Buchungen auf dem Kontostand verlangen das Team-Verwaltungsrecht, nicht nur das Support-Recht. Download-Dateinamen werden korrekt kodiert.
  • Behoben Build: Mehr Speicher für Gradle und den Kotlin-Compiler (gradle.properties).
  • Behoben orgaMAX-Zugang gilt jetzt für Abrechnung und Buchhaltung: Wer orgaMAX nur unter Buchhaltung (Oberfläche oder BUCHHALTUNG_ORGAMAX_*) eingetragen hatte, bekam im Checkout trotzdem „nicht vollständig konfiguriert“, weil die Abrechnung eigene ORGAMAX_*-Werte verlangte. Beide Seiten nutzen jetzt dieselben Zugangsdaten.
  • Behoben Preise ohne Nachkommastelle: Preise von Lizenzplänen und -paketen erscheinen als 29,90 € (statt 29,9), auch auf der Preisseite der Website und in den Eingabefeldern im Team.
  • Behoben Button im Ticketsystem: Das Plus-Symbol im Knopf „Neues Ticket“ (leere Ticketliste) war als großer Kreis dargestellt und sprengte den Knopf; es ist jetzt normal groß, im Team- und im Kundenbereich.
  • Behoben Navigation: Alle Menüpunkte haben denselben Abstand zwischen Symbol und Text.
  • Behoben Technischer Support-Benutzer erscheint nicht mehr in der Benutzerliste der Kunden.
  • Behoben Zwei-Faktor-Prüfung überarbeitet: Der zweite Faktor, die Sperre nach Fehlversuchen und die API-Anmeldung werten jetzt auch den Kurznamen aus (sonst hätte sich ein Schutz mit dem anderen Namen umgehen lassen); nach erfolgreichem zweitem Faktor oder Passkey kommt ein deaktiviertes oder unbestätigtes Konto nicht mehr hinein
  • Behoben Profil speichern mit doppelter geschäftlicher E-Mail: Kommt dieselbe geschäftliche E-Mail-Adresse bei mehreren Benutzern vor (Altdaten), brach das Speichern von Benutzerdaten, "Mein Konto" und des App-Profils mit "Query did not return a unique result" ab. Die Prüfung auf doppelte Adressen schaut jetzt auf alle Treffer; "Passwort vergessen" wählt bei mehreren Treffern den Benutzer mit gleichem Anmeldenamen, sonst den ersten aktiven
  • Behoben orgaMAX-Übertragung von Team-Rechnungen: Die Positionen enthielten discountPercent, priceGross und metaData nicht, orgaMAX lehnte die Rechnung mit "JSON Schema validation of input failed" (HTTP 400) ab. Die Felder werden jetzt mitgesendet (Rabatt 0 %, Brutto aus Netto und Steuersatz, Reverse-Charge ohne Steuer); die Lizenzrechnung der Abonnements sendet auch discountPercent. Fehlgeschlagene Rechnungen lassen sich unter Team → Betriebsüberwachung mit "Erneut versuchen" nachholen
  • Behoben Zuweisung: Heißt ein Team schon "Team Nord", steht nicht mehr "Team Team Nord" (Liste, Details, PDFs)
  • Behoben Login: Das Schloss-Symbol vor dem Passwortfeld war durch das Feld verdeckt (leere Fläche) und ist wieder sichtbar
  • Behoben Serviceverträge: Hinweise – schlägt ein Rechnungsentwurf fehl, bekommen der Zuständige und alle Mitarbeiter mit dem Recht "Rechnungsentwürfe anlegen" eine Benachrichtigung (mit der Meldung der Buchhaltungssoftware); ein aktiver Vertrag, der in den nächsten 30 Tagen endet, wird einmalig gemeldet (täglicher Lauf)
  • Behoben Login-Seite in der gleichen Inhaltsbreite wie die Registrierung
  • Behoben Zwei-Faktor verpflichtend: Der Konto-Inhaber schaltet beim Bearbeiten einer Firma "Zwei-Faktor-Anmeldung für alle Benutzer verpflichtend" ein; für das Team gilt HS_TEAM_ZWEI_FAKTOR_PFLICHT=true. Betroffene Benutzer ohne zweiten Faktor werden auf "Anmeldung & Sicherheit" geleitet, bis sie Authenticator-App oder Passkey eingerichtet haben (API-Aufrufe erhalten 403 mit Code ZWEI_FAKTOR_EINRICHTEN; "Als Benutzer anmelden" durch das Team ist ausgenommen)
  • Behoben E-Mail-Hinweise zur Sicherheit an den betroffenen Benutzer: Zugang gesperrt (zu viele Fehlversuche), Passwort über "Passwort vergessen" geändert, Authenticator-App/Passkey eingerichtet oder entfernt, Zwei-Faktor durch einen Administrator zurückgesetzt
  • Behoben Team: Zwei-Faktor von Team-Mitgliedern zurücksetzen (Teamverwaltung zeigt den Status und den Knopf "2FA zurücksetzen")
  • Behoben Changelog und Roadmap im Aufbau der Registrierung (Kopfzeile mit Schnellzugriffen, Versionen als breite Karten mit farbigen Rubriken-Chips und Zeilen je Eintrag)
  • Behoben Eingeloggte Besucher sehen auf der Website keine "Jetzt registrieren"-Knöpfe mehr
  • Behoben Kostenlose Testphase für Neukunden: Beim Anlegen der ersten Firma gibt es neben "Speichern" den Knopf "14 Tage kostenlos testen" (Dauer über HS_TESTPHASE_TAGE, abschaltbar mit HS_TESTPHASE_AKTIV=false; höchstens einmal je Kundenkonto). Die Firma ist sofort nutzbar, ein Banner zeigt die Resttage und führt zum Abonnement. Ein täglicher Lauf erinnert per E-Mail 3 Tage und 1 Tag vor dem Ende und sperrt die Firma nach Ablauf, wenn bis dahin kein bezahltes Abonnement läuft (Daten bleiben, "Zahlung abschließen" schaltet frei). Eine Zahlung beendet die Testphase. Das Team sieht Testphasen in der Kundenübersicht und im Umsatz-Dashboard und kann sie mit "+7 Tage" verlängern (auch abgelaufene)
  • Behoben Kontaktseite im Aufbau der Registrierung (dunkle Kopfzeile mit Vorteilen, Formularkarte, Seitenspalte)
  • Behoben Login-Seite im selben Aufbau wie die Registrierung (Kopfzeile, Anmeldekarte links, Seitenspalte "Neu hier?" rechts)
  • Behoben Auftragsbericht per E-Mail an den Kunden: Beim Kunden lässt sich "Auftragsbericht automatisch per E-Mail senden" einschalten; nach der Monteur-Unterschrift geht das PDF (mit Bildern) einmalig an die E-Mail-Adresse des Kunden. Zusätzlich gibt es im Auftragsbericht die Knöpfe "Bericht per E-Mail an den Kunden senden" und "Link per E-Mail an den Kunden senden" (Unterschrift-Link). Versand über die aktive SMTP-Anbindung der Firma, sonst über die System-E-Mail des Teams (Antwortadresse = E-Mail der Firma)
  • Behoben Roadmap im Team: "Fehlende Standard-Einträge hinzufügen" ergänzt neue Vorhaben der Standard-Roadmap, ohne vorhandene Einträge zu ändern
  • Behoben Team: Kundenübersicht mit Kennzahlen (je Firma: aktive Benutzer, Aufträge der letzten 30 Tage, Plan, Abo-Status, letzte Aktivität; "ruhig" bei 30 Tagen ohne Aktivität als frühe Warnung)
  • Behoben Team: Umsatz-Dashboard (/team/umsatz): MRR und Jahreshochrechnung, aktive/gestörte Abonnements, Kündigungen, Neukunden pro Monat, Umsatz je Plan, offene und überfällige Posten
  • Behoben Team: Wartungsmeldungen (/team/wartungsmeldungen): Hinweis, Warnung oder Störung als Banner über jeder Seite für alle angemeldeten Benutzer, mit optionalem Zeitraum und Ein-/Ausschalter
  • Behoben Kontaktformular (/kontakt) statt E-Mail-Link: "Kontakt" in Navigationsleiste, Footer und Landing führt dorthin. Anfragen (mit Datenschutz-Zustimmung, Spamschutz durch Köderfeld, Turnstile falls konfiguriert und Begrenzung auf 5 je Stunde und IP) erscheinen im Team unter *Kontaktanfragen*; dort lassen sie sich lesen, per E-Mail beantworten (Verlauf bleibt gespeichert, Fehlversand wird markiert), mit Status versehen und löschen. Optional meldet der Server neue Anfragen per E-Mail (HS_KONTAKT_BENACHRICHTIGUNG_EMAIL) und/oder per Webhook (HS_KONTAKT_WEBHOOK_URL, HS_KONTAKT_WEBHOOK_TOKEN) an ein externes Ticketsystem
  • Behoben Footer verlinkt die API-Dokumentation (/api-docs/ui)
  • Behoben Changelog-Seite nutzt die volle Inhaltsbreite; Versionen sind Kacheln in zwei Spalten, die geöffnete Version geht über die ganze Breite
  • Behoben Öffentliche Seiten Roadmap (/roadmap, in der Navigationsleiste) und Changelog (/changelog, im Footer, Akkordeon je Version, Reiter Webanwendung/Android-App): beides im Team unter *Roadmap* und *Changelog* pflegbar (Anlegen, Bearbeiten, Löschen, Sichtbarkeit, Reihenfolge). Changelog-Versionen lassen sich mit GitHub-Releases koppeln (Import der Releases als Entwurf, Link zum Release), aus Markdown einfügen und werden erst mit "Veröffentlichen" öffentlich; dabei gelten Roadmap-Einträge mit dieser Ziel-Version als erledigt. Wird ein App-Update bereitgestellt, entsteht dazu automatisch ein Entwurf im Android-Changelog. Beim ersten Start werden Changelog (aus CHANGELOG.md und dem App-Changelog) und eine Start-Roadmap angelegt
  • Behoben Passwortfelder haben ein Auge zum Anzeigen/Verbergen des Passworts (Login, Registrierung, Passwort zurücksetzen, Konto)
  • Behoben Login-Seite überarbeitet (ruhige Karte, Passwort-Zeile mit "Vergessen?", Passkey-Anmeldung mit Trennlinie); Farben von Login, Registrierung und Anmeldung an die Marke angeglichen (kein Gelb mehr), Schritte der Registrierung korrekt dargestellt
  • Behoben orgaMAX-Kunden: E-Mail-Adressen werden nur noch gesendet, wenn sie gültig sind (leere/ungültige Werte führten zu einem Fehler); lehnt orgaMAX den Kunden ab, wird ohne E-Mail und USt-IdNr. erneut versucht. Der Kunde wird zusätzlich mit name und kind angelegt, wie es die orgaMAX-Beschreibung verlangt
  • Behoben Team-Buchhaltung automatisiert (BUCHHALTUNG_AUTOMATISCH=true): bei der Registrierung wird der Kunde in orgaMAX, Lexware Office oder sevDesk angelegt und dessen ID gespeichert (buchhaltung_kunde); Kontoänderungen gleichen ihn ab. Neue und versendete Rechnungen werden automatisch übertragen (mit Kunden-ID, optional festgeschrieben mit BUCHHALTUNG_FESTSCHREIBEN=true), bezahlte Rechnungen werden als Zahlung verbucht (orgaMAX; sevDesk mit SEVDESK_ZAHLUNGSKONTO_ID; Lexware Office bietet keine Schnittstelle). Ein stündlicher Lauf holt Fehlgeschlagenes nach (max. 10 Versuche). Knopf "Kunden abgleichen" für bereits registrierte Kunden, "Zahlung verbuchen" an der Rechnung
  • Behoben Buchhaltungs-Übergabe (Team und Mandanten-Rechnungen, auch Serviceverträge): Fehlermeldungen enthalten jetzt HTTP-Status und Antwort des Dienstes; Antworten werden tolerant gelesen (data.id, objects.id, flach); sevDesk-Rechnungen enthalten Kontakt und Kontaktperson; die PSP-Zahlung (Stripe/Mollie) wird in orgaMAX gleich als Zahlung verbucht
  • Behoben Stempeluhr: An einem ganztägig genehmigten Urlaubs- oder Abwesenheitstag ist "Kommen" gesperrt (Web, App und API; Meldung "Schönen Urlaub!"). Der Status liefert abwesend, abwesenheitHinweis und die eigenen Abwesenheiten der nächsten 30 Tage; halbtägige und noch beantragte Abwesenheiten sperren nicht
  • Behoben "Montagebericht" heißt jetzt überall "Auftragsbericht" (Oberfläche, PDF, Dateinamen, App, Website); interne Namen und Adressen (/montageberichte) bleiben unverändert
  • Behoben Auftragsbericht-PDF neu gesetzt: Kopf mit Firma, Auftrag und Kunde (Anschrift, Ansprechpartner, Telefon, E-Mail), Zusatzangaben des Auftraggebers, Auftragsbeschreibung, durchgeführte Arbeiten, Material, Unterschriften; Fußzeile mit Erstellzeitpunkt, Firma und "Seite x von y"; Bilder nur im Bildanhang auf eigenen Seiten nach Kategorien (Vorher, Während, Nachher); ohne Bilder bleibt der Bericht auf der Textseite
  • Behoben API: GET /api/auftraege/{id} liefert die Zusatzfelder des Auftraggebers (felder: Name und Wert) für die App
  • Behoben Website: Leistungen (vier neue Karten), Module (Serviceverträge, Sicherer Zugang), zwei neue Lösungsseiten (Wartungsverträge, App für Monteure), Auftragsbericht-Texte aktualisiert
  • Behoben README neu für Einsteiger (Schnellstart, Zugänge, Konfiguration, Probleme); das frühere Detail-README liegt als docs/ENTWICKLUNG.md; neue TASKS.md mit offenen Aufgaben und Ideen
  • Behoben Montagebericht: zwei Unterschriften. Die des Monteurs ist Pflicht (ohne sie lässt sich der Auftrag nicht abschließen, geprüft im Server), die des Kunden ist optional; statt ihrer lässt sich "Kunde nicht anwesend" oder "Unterschrift verweigert" vermerken. PDF zeigt beide nebeneinander. Bestehende Unterschriften anderer Personen wandern per Migration in den Kunden-Platz.
  • Behoben Kunden-Unterschrift per Link (pro Kunde einschaltbar, Standard aus): Einmal-Link mit 7 Tagen Gültigkeit, öffentliche Unterschriftsseite ohne Anmeldung, in der App über den Teilen-Dialog.
  • Behoben Zwei-Faktor-Anmeldung: Authenticator-App (TOTP), Wiederherstellungscodes und Passkeys (WebAuthn); Passkey-Anmeldung auch ohne Passwort. Verwaltung unter Mein Konto → Anmeldung & Sicherheit. Die Android-App meldet sich bei aktivem zweitem Faktor mit Passwort + Code an und nutzt danach ein Zugriffstoken (Basic-Anmeldung ist für diese Konten gesperrt).
  • Behoben Serviceverträge (wiederkehrende Aufträge): Intervall, Vorlauf, Zuständigkeit; Abrechnung als Abonnement (Pauschale je Zeitraum) oder je Auftrag mit Rechnungsentwurf in orgaMAX, Lexware Office oder sevDesk; Zahlungsweg Überweisung oder SEPA-Lastschrift (Mandat beim Kunden, Einzugsdatei pain.008 mit Gläubigerdaten unter Serviceverträge → Lastschriften).
  • Behoben Team: Weiterleitung auf die Team-Übersicht, wenn ein Team-Mitglied eine reine Mandanten-Seite öffnet; neues Ticket als Modal.
  • Behoben Android: Auftragsdetails übersichtlicher (kompakter Kopf, Beschreibung und Hinweise zuerst, Einsatzort mit Direktaktionen, Ablauf mit Schritt "Unterschrift Monteur", Auftragsdaten eingeklappt).
  • Behoben GitHub Actions auf aktuelle Versionen (checkout v7, setup-java v6, upload-artifact v7, ubuntu-24.04).
  • Behoben Integrationen mit Logo-Kacheln und OAuth-Anmeldung per Weiterleitung (Microsoft 365, OneDrive, Gmail, Google Drive, Dropbox): Klick auf den Button leitet zum Anbieter, der Rücksprung speichert verschlüsselte Token (automatische Erneuerung). E-Mail-Versand über Microsoft Graph/Gmail API und Dateispiegelung nach OneDrive/Google Drive/Dropbox. Standard ist die OAuth-App von Hausservice-Desk (Team → Einstellungen → "OAuth-Apps"), Kunden können optional eigene App-Daten hinterlegen. Eigene Logos: static/img/integrationen/<typ>.svg.
  • Behoben Aufträge-Seite: je fünf zuletzt angelegte und zuletzt geänderte Aufträge
Release auf GitHub
v0.4.0 10 Neu2 Geändert5 Sicherheit 07.10.2026
  • Neu GitHub-Actions: CI (Tests, Boot-JAR, Shell-Skripte) und Release (Tag v<version> → Release mit JAR und Prüfsumme)
  • Neu deploy/deploy.sh: automatisches Deployment mit Prüfsumme, Backup, Health-Check und automatischem Rollback (Tests in `deploy/test/deploy-test.sh`)
  • Neu Zahlungshistorie für Kunden (/konto/transaktionen) und Team (/team/transaktionen), bunq-Abgleich mit Zahlungsart, Gegenpartei und Sandbox-Umgebung; Hilfsskript `scripts/bunq-sandbox.py`
  • Neu Stempeluhr: Korrektur, Nachtrag, Löschen; Stundenzettel als PDF/Vordruck; Tätigkeit Home-Office
  • Neu Material im Montagebericht; Auftragsnotizen; Termine mit Titel; Auftragsverlauf-API
  • Neu Rechnungsentwürfe an sevDesk, Lexware Office und orgaMAX (Aufträge und Team-Rechnungen)
  • Neu Ticketsystem mit Bezügen, Karten und Pagination; DSGVO-Export als PDF/JSON
  • Neu Profil prod mit Startprüfung (ProduktionsPruefung), Prüfsummen-Sperre für Produktionsmigrationen
  • Neu /api/version (Server-Version, kleinste unterstützte App-Version), Version im Sidebar-Footer
  • Neu API-Dokumentation /api-docs/ui öffentlich
  • Geändert "Benutzer" heißt in der Oberfläche "Mitarbeiter"; Landing-Page-Buttons in Marken-Orange
  • Geändert Ein eindeutiges Deployment-Artefakt hs-web-app-<version>.jar
  • Sicherheit Login-Schutz gegen Passwort-Raten (config/LoginSchutz.kt): nach 5 Fehlversuchen je Benutzername 5 Minuten Sperre, jede weitere verdoppelt (bis 60 Minuten); je IP 30 Fehlversuche/15 Minuten; gilt für Formular-Login und HTTP-Basic der API (429 mit `Retry-After`); "Passwort vergessen" max. 5 Anfragen je IP/15 Minuten. Einstellbar unter `hs.security.login-schutz.*`.
  • Sicherheit Nginx-Konfiguration anpassen: X-Forwarded-For wird jetzt überschrieben statt angehängt (`deploy/nginx-hs-web-app.conf`), sonst ließe sich die IP-Begrenzung fälschen. Auf bestehenden Servern die Datei übernehmen und `sudo nginx -t && sudo systemctl reload nginx` ausführen.
  • Sicherheit Clickjacking-Schutz in Produktion aktiv, Server lauscht in Produktion nur auf 127.0.0.1
  • Sicherheit Zahlungszuordnung nur mit eigenständiger Rechnungsnummer; bunq-Sitzung gegen Parallelzugriff gesperrt
  • Sicherheit Logs, Uploads und echte Testschlüssel aus dem Repository entfernt (Schlüssel rotieren!)
Release auf GitHub
v0.1.0-grundgeruest 1 Neu
  • Neu Erster Stand (Grundgerüst).

Zur Roadmap