1.1.0-rc1

This commit is contained in:
michael committed 2026-10-13 10:43:53 +02:00
1 parent 649dd6f028
commit 45ff46b7eb
26 files changed
+4752 -1108

No files matched your search

@@ -0,0 +1,89 @@
# TicketTracker
Stand: Oktober 2026
TicketTracker ist ein Arbeits-, Projekt- und Abrechnungscockpit für ticketbasierte Arbeit. Das System ergänzt Zammad und Teamspace: Zammad bleibt das Ticketsystem, Teamspace bleibt die Quelle für Projektbudgets und gebuchte Projektwerte, TicketTracker führt Erfassung, Bewertung, ToDos, Projektüberwachung und Monatsabschluss zusammen.
Der Kernnutzen: Jeder Benutzer sieht, was er gearbeitet hat, was noch bewertet werden muss, welche Projektbudgets kritisch sind, welche Teamspace-Daten fehlen oder abweichen und wann ein Monat sauber abgeschlossen werden kann.
## Zielgruppe und Einsatz
TicketTracker ist für Teams oder Einzelpersonen gedacht, die viel mit Tickets arbeiten und ihre Zeiten zuverlässig nachvollziehen müssen.
Typische Einsatzfälle:
- Support- und Consulting-Zeiten per Timer erfassen
- Sessions nachträglich ergänzen
- Arbeit am Ticket dokumentieren
- Sessions als offen, abrechenbar, abgerechnet oder nicht abrechenbar bewerten
- Teamspace-Tageswerte für abrechnungsrelevante Projektzeiten pflegen oder Teamspace als Ist-Quelle nutzen
- Monatsabschlüsse kontrolliert vorbereiten
- Consulting-Projekte mit Teamspace-Budgets, Reststunden und Unterpositionen überwachen
- ToDos und Wiedervorlagen direkt am Ticket oder Projekt organisieren
- wiederkehrende Leistungen automatisch erzeugen lassen
- interne Zammad-Notizen aus TicketTracker heraus erzeugen
## Grundprinzip
TicketTracker arbeitet auf drei Ebenen:
1. **Session-Zeit**
Die tatsächlich gemessene oder manuell erfasste Arbeitszeit.
2. **Teamspace-/Projekt-Ist**
Je nach Profilmodus entweder in TicketTracker gepflegte Teamspace-Tageswerte oder direkt aus Teamspace synchronisierte Ist-Werte.
3. **Monatsabschluss**
Der kontrollierte Abschluss eines Monats, sobald alle Sessions final bewertet und die benötigten Prüfpunkte erledigt sind.
Wichtig: Tickets werden nicht abgeschlossen. Tickets dienen als Arbeits- und Auswertungsrahmen. Abgeschlossen wird der Monat.
## Die wichtigsten Bereiche
- **Timer und Sessions:** Zeiten erfassen, nachtragen, bewerten und dokumentieren.
- **Tickets:** Sessions pro Ticket, Tag und Monat prüfen.
- **Projekte:** Consulting-Projekte, Teamspace-Projekte, Budgets, Reststunden und Unterpositionen überwachen.
- **Teamspace:** Projekt-IDs, Budgets, Unterpositionen, Monatszeiten und Istwerte synchronisieren.
- **Zammad:** Organisationen, Ticketstammdaten, Status, Priorität und interne Notizen anbinden.
- **ToDos:** Aufgaben, Termine, Wiedervorlagen und Projektfollow-ups verwalten.
- **Dashboard:** Tagessteuerung für offene Bewertungen, ToDos, Teamspace-Nacharbeit und Projektwarnungen.
- **Statistiken:** Monatswerte, Organisationen, Tickets, Projektbudgets und Teamspace-Abgleich auswerten.
- **Monatsabschluss:** Einen Monat kontrolliert schließen oder wieder öffnen.
## Unterseiten für Confluence
Diese Dokumentation ist für den Import als Confluence-Seitenbaum vorbereitet:
1. `01-zeiterfassung-sessions-monatsabschluss.md`
2. `02-projekte-budgets-teamspace.md`
3. `03-zammad-sync-und-integration.md`
4. `04-dashboard-statistiken-und-widgets.md`
5. `05-todos-wiedervorlagen-fixe-abrechnungen.md`
6. `06-profil-admin-und-betrieb.md`
## Typischer Tagesablauf
1. Ticketnummer eingeben und Timer starten.
2. Tätigkeit dokumentieren.
3. Timer beenden und Session speichern.
4. Bei Bedarf Session nachtragen.
5. Sessions im Ticket bewerten.
6. Wenn Teamspace-Erfassung in TT aktiv ist: Teamspace-Tageswerte pro Projekt/Tag pflegen.
7. ToDos und Wiedervorlagen bearbeiten.
8. Dashboard prüfen, ob offene Bewertungen oder Teamspace-Nacharbeiten vorhanden sind.
## Typischer Monatsablauf
1. Monat in Tickets, Statistiken oder Monatsabschluss auswählen.
2. Offene Sessions prüfen.
3. Sessions final als **Abgerechnet** oder **Nicht abrechenbar** bewerten.
4. **Abrechenbar**-Zwischenstände klären, weil sie den Abschluss blockieren.
5. Bei aktivierter Teamspace-Erfassung: Teamspace-Tageswerte und Differenzen prüfen.
6. Im Zammad-Sync bei Bedarf den Teamspace-Monatsabgleich ausführen, um echte TS-Monatszeiten pro Projekt gegen TT zu prüfen.
7. Bei deaktivierter Teamspace-Erfassung: Teamspace-Differenzen entfallen; nur Session-Status ist relevant.
8. ToDos, Wiedervorlagen und Projektwarnungen prüfen.
9. Monat abschließen.
TicketTracker ist damit das Kontrollzentrum zwischen täglicher Ticketarbeit, Zammad-Dokumentation, Teamspace-Projekten und sauberer Abrechnung.
Die zentrale Frage bleibt:
**Ist alles vollständig, bewertet, dokumentiert und abrechnungsbereit?**
@@ -0,0 +1,96 @@
# Zeiterfassung, Sessions und Monatsabschluss
Diese Seite beschreibt die tägliche Erfassung, Bewertung und Monatsprüfung in TicketTracker.
## Timer
Benutzer starten einen Timer über eine Ticketnummer. Es können mehrere Timer vorbereitet sein, aber immer nur einer läuft aktiv. Wird ein anderer Timer gestartet, pausiert TicketTracker die übrigen Timer automatisch.
Beim Beenden werden Tätigkeit, Zeit, Ticket, Organisation, Art und optional Bewertung gespeichert. Wenn die Zammad-Notiz im Profil aktiv ist, kann TicketTracker beim Speichern einen internen Zammad-Article erzeugen.
## Sessions nachtragen
Vergessene Arbeit kann manuell als Session nachgetragen werden. Dabei werden erfasst:
- Datum
- Start und Ende
- Ticket
- Organisation
- Art, zum Beispiel Support oder Consulting
- Tätigkeit
- Bewertung
- optional interne Zammad-Notiz
Nachgetragene Sessions laufen genauso in Statistiken, Ticketansichten und Monatsabschluss ein wie per Timer erzeugte Sessions.
## Session-Bewertungen
Jede Session kann einen dieser Zustände haben:
- **Offen**
- **Abrechenbar**
- **Abgerechnet**
- **Nicht abrechenbar**
Nur **Abgerechnet** und **Nicht abrechenbar** gelten als final. **Abrechenbar** ist ein Zwischenstatus und blockiert weiterhin den Monatsabschluss.
Ein erneuter Klick auf den bereits gesetzten Status nimmt die Bewertung wieder zurück und macht die Session offen.
## Ticketdetailansicht
In der Ticketdetailansicht werden Sessions nach Tagen gruppiert. Dort werden Sessions bewertet, bearbeitet, gelöscht und aufgeklappt.
Pro Tag sieht man unter anderem:
- Summe abgerechneter Session-Zeit
- Summe abrechenbarer Session-Zeit
- Summe nicht abrechenbarer Session-Zeit
- offene Session-Zeit
- Teamspace-Tageswert, falls die Teamspace-Erfassung in TT aktiv ist
Die Tageswerte sind pro Benutzer und Projekt/Teamspace-Eintrag gespeichert. Sie sind nicht an einzelne Sessions gebunden.
## Teamspace-Tageswerte
Wenn im Profil **Teamspace-Zeiten in TT erfassen** aktiv ist, kann der Benutzer in der Ticketdetailansicht Teamspace-Tageswerte pflegen.
Die Eingabe erfolgt in Stunden, zum Beispiel:
- `1`
- `1,5`
- `2.25`
- `0,75`
Der Wert wird nicht während der Eingabe gespeichert. Sobald sich der Wert ändert, erscheint ein Speichern-Button. Ein leeres Feld entfernt den gespeicherten Teamspace-Wert für diesen Tag.
Wenn mehrere Teamspace-Projekte an einem Ticket hängen, wird der Tageswert pro Teamspace-Projekt-Eintrag geführt.
Wenn die Teamspace-Erfassung im Profil deaktiviert ist, sind diese Eingaben ausgeblendet und auch serverseitig gesperrt.
## Monatsabschluss
Der Monatsabschluss ist die zentrale Kontrollseite für einen Benutzer und Monat.
Sie zeigt unter anderem:
- offene Bewertungen
- Sessions mit Zwischenstatus **Abrechenbar**
- fehlende oder abweichende Teamspace-Werte, wenn Teamspace-Erfassung in TT aktiv ist
- Prüfpunkte vor dem Abschluss
- Möglichkeit, den Monat zu schließen oder wieder zu öffnen
Ein abgeschlossener Monat ist gegen versehentliche Änderungen geschützt. Wird eine Session in einem abgeschlossenen Zeitraum geändert, muss der Zeitraum vorher wieder geöffnet werden.
## Regeln bei deaktivierter Teamspace-Erfassung
Der Profil-Schalter **Teamspace-Zeiten in TT erfassen** ist userbezogen.
Wenn er ausgeschaltet ist:
- Teamspace-Tageswerte können nicht in TicketTracker gepflegt werden.
- Manuelle Projektstunden sind nicht editierbar.
- Monatsprüfung und Widgets prüfen nur Session-Status.
- Teamspace-Differenzen werden nicht angezeigt.
- Projekt-Istwerte kommen aus Teamspace.
Das ist für Benutzer gedacht, die keine Teamspace-Zeiten in TicketTracker nachpflegen, sondern Teamspace als führende Ist-Quelle verwenden.
@@ -0,0 +1,150 @@
# Projekte, Budgets und Teamspace
Diese Seite beschreibt die aktuelle Projekt- und Teamspace-Logik in TicketTracker.
## Projekte
Projekte erweitern normale Tickets um Consulting-Projektinformationen.
Ein Projekt enthält unter anderem:
- Ticketnummer
- Titel und Organisation
- Teamspace-Projekt-Einträge
- Beschreibung und Ziele
- Zeitraum
- Projektstatus offen oder geschlossen
- ToDos
- Teamspace-Budgets und Verbrauchswerte
- Teamspace-Unterpositionen
Projekt-Tickets sind Consulting-Tickets. Wird ein Projekt gelöscht, bleiben Ticket, Sessions und ToDos erhalten. Gelöscht werden nur die Projektinformationen.
## Teamspace als Budgetquelle
Teamspace ist die fachliche Quelle für Projektbudgets.
Aktuelle Budgetregeln:
- Teamspace ist die Source of Truth für Projektbudgets.
- Zammad-Budgets werden nicht mehr als Budgetquelle verwendet.
- Das Gesamtbudget eines Projekts kommt aus Teamspace.
- Wenn mehrere Teamspace-Projekte an einem Ticket hängen, wird das Gesamtbudget aus diesen Teamspace-Projekten zusammengesetzt.
- Unterpositionen zeigen ihre eigenen Teamspace-Budgets und Teamspace-Istwerte.
- Stückpositionen werden nicht als Stundenbudget in die Stundenbetrachtung eingerechnet.
## Verbrauchslogik
Der Projektverbrauch hängt vom Profil-Schalter **Teamspace-Zeiten in TT erfassen** ab.
Wenn der Schalter aktiv ist:
- Projekt-Ist kommt aus Teamspace-Tageswerten, die in TicketTracker gepflegt werden.
- Zusätzlich können manuelle Projektstunden erfasst werden.
- Progress Bars, Reststunden und Budgetwarnungen verwenden diese Werte.
Wenn der Schalter deaktiviert ist:
- Projekt-Ist kommt aus Teamspace.
- Manuelle Projektstunden sind ausgeblendet und serverseitig gesperrt.
- Teamspace-Tageswerte können nicht in TicketTracker erfasst werden.
- Statistiken und Widgets zeigen keine TT/Teamspace-Differenzprüfung für diesen Benutzer.
## Mehrere Teamspace-Projekte pro Ticket
Ein Ticket kann mehrere Teamspace-Projekt-IDs haben. TicketTracker speichert dafür mehrere Teamspace-Einträge am Projekt.
Beispiel:
- `EP-2025-Comp-009`
- `EP-2025-Comp-025`
Einer der Einträge ist der Standard. Sessions können einem Teamspace-Projekt-Eintrag zugeordnet werden. Diese Zuordnung erfolgt auf Ebene des Teamspace-Projekts, nicht auf Ebene einzelner Unterpositionen.
## Gemeinsames Teamspace-Budget über mehrere Tickets
Mehrere unterschiedliche Ticketnummern können dieselbe Teamspace-Projekt-ID verwenden. TicketTracker behandelt diese Teamspace-Nummer dann als gemeinsame Budgetquelle.
Dabei gilt:
- Es gibt keine automatische Aufteilung auf die Ticketnummern.
- Teamspace-API-ID, Teamspace-API-URL, Budget, Unterpositionen und Teamspace-Monatswerte werden für dieselbe Teamspace-Nummer konsolidiert.
- Der Teamspace-Sync zieht gleiche Teamspace-Nummern nach jedem Lauf wieder auf denselben Datenstand.
- Die Migration konsolidiert bereits vorhandene doppelte Teamspace-Nummern beim Start.
- Ticket-spezifische Felder wie Standard-Eintrag, Reihenfolge, Session-Zuordnung und manuelle Projektstunden bleiben am jeweiligen Ticket.
## Teamspace-Projekt-ID-Sync
Der Sync auf der Zammad-Sync-Seite löst offene Consulting-Projekte gegen die Teamspace-API auf.
Gespeichert werden unter anderem:
- Teamspace-API-ID des Projekts
- Teamspace-API-URL
- Teamspace-Gesamtbudget
- Teamspace-Unterpositionen
- Teamspace-Budgets und Istwerte der Unterpositionen
- Stückpositionen und deren Erfüllungsstand
- echte Teamspace-Monatszeiten aus `/api/time` für den gewählten Monat
Die fachliche Teamspace-ID aus Zammad oder Projektinformationen, zum Beispiel `EP-2026-A-035`, ist nicht identisch mit der API-ID für Einzelabfragen. TicketTracker speichert deshalb die interne Teamspace-API-ID, sobald sie gefunden wurde.
## Teamspace-Monatsabgleich
Der Teamspace-Projekt-ID-Sync auf der Zammad-Sync-Seite enthält zusätzlich einen Monatsabgleich. Der Benutzer wählt einen Monat aus, TicketTracker ruft für diesen Zeitraum die Teamspace-Zeitbuchungen des angemeldeten Teamspace-Benutzers ab und speichert einen Snapshot pro Teamspace-Projekt-Eintrag.
Technische Grundlage:
- API-Endpoint: `/api/time`
- Filter: `worker={Teamspace User-ID}` und `date=YYYY-MM-01..YYYY-MM-letzterTag`
- gezählt werden Einträge mit `draftStatus.value = NORMAL`
- relevante Minuten sind `amountBillable`
- `amount` wird als Gesamtzeit mitgeführt, ist aber nicht die Vergleichsgröße
Die Monatswerte werden pro Benutzer, Teamspace-Projekt-Eintrag und Monat gespeichert. Dadurch bleiben drei Dinge getrennt:
- TT-Tageswerte, die in TicketTracker gepflegt werden
- echte Teamspace-Monatszeiten aus Teamspace
- Teamspace-Budget- und Unterpositionswerte aus dem Projektsync
Im Ergebnis des Syncs sieht man pro Teamspace-Projekt:
- TT-Monatswert
- TS-Monatswert
- Differenz
- Anzahl der gefundenen TS-Zeitbuchungen
- betroffene Haupt- oder Unterpositionen mit TS-Minuten
Wenn Teamspace-Zeiten auf Unterpositionen gebucht wurden, werden diese ebenfalls dem passenden Teamspace-Projekt-Eintrag zugeordnet. TicketTracker mappt dafür nicht nur die Hauptprojekt-API-ID, sondern auch die synchronisierten Unterpositions-API-IDs. Die Positionsaufschlüsselung wird im Monats-Snapshot gespeichert und kann dadurch später in der Monatsübersicht angezeigt werden.
## Unterpositionen
Unterpositionen werden aus Teamspace synchronisiert und im Projektdetail angezeigt. Sie dienen als Teamspace-Anzeige, um Budget, Verbrauch und freie Ressourcen pro Teamspace-Position sichtbar zu machen.
Wichtig:
- Zeiten werden nicht auf Unterpositionen in TicketTracker erfasst.
- Unterpositionen bekommen ihre Budgets und Istwerte aus Teamspace.
- Teamspace-Descriptions werden dekodiert und formatiert ausgegeben.
- Unterpositionen können einen Alias in TicketTracker bekommen.
- Akkordions der Unterpositionsgruppen merken sich den letzten offenen oder geschlossenen Zustand pro Benutzer und Projekt.
- Bei Teamspace-Strukturen mit Überpositionen werden nur echte bebuchbare Unterpositionen angezeigt, nicht reine Summenpositionen.
- Positionsnummern werden lesbar dargestellt, zum Beispiel `1` statt `0001` oder `1.1` statt `0001.0001`.
## Stückpositionen
Teamspace-Positionen mit `billingType = INVOICEABLE_FIX` sind Stück- oder Fixpositionen.
Für diese Positionen gelten andere Regeln:
- Stundenwerte werden nicht als Stundenbudget interpretiert.
- TicketTracker zeigt sie als Stückpositionen an.
- Der Erfüllungsstand wird über `plannedIncome` gegen `sumIncome` geprüft.
- Ist das Soll erreicht, wird die Position als abgerechnet beziehungsweise erfüllt markiert.
- Überschreitungen werden mit einem Hinweis-Icon angezeigt.
## Projektansichten
Die Projektliste zeigt Gesamtbudget, Verbrauch, Reststunden und Projektwarnungen. Bei mehreren Teamspace-Projekten können Detailbalken pro Teamspace-Projekt angezeigt oder ausgeblendet werden. Der Hauptbalken zeigt weiterhin das Gesamtbudget aller Teamspace-Projekte.
Im Projektdetail stehen Projektinformationen und ToDos getrennt von den Teamspace-Unterpositionen. Die Unterpositionen liegen in einer eigenen breiten Card unterhalb der Projekt-/ToDo-Informationen.
@@ -0,0 +1,82 @@
# Zammad Sync und Integration
TicketTracker nutzt Zammad, ohne Zammad zu ersetzen. Zammad bleibt das führende Ticketsystem für Ticketstammdaten, Organisationen, Status und Prioritäten.
## Persönlicher Zammad-Token
Jeder Benutzer kann im Profil einen persönlichen Zammad API-Token speichern. Beim Speichern ruft TicketTracker Zammad ab, prüft den Token und speichert die Zammad User-ID.
Der Token wird verschlüsselt in der Datenbank gespeichert.
Der persönliche Token wird unter anderem für benutzerbezogene Zammad-Funktionen verwendet, zum Beispiel interne Notizen oder personenbezogene Synchronisierungen.
## Admin-Zammad-Zugang
Im Adminbereich wird der Zammad-Zugang für systemweite Synchronisierungen gepflegt.
Der Admin kann Organisationen aus Zammad synchronisieren. Dabei werden lokale Organisationen angelegt, aktualisiert oder entfernt beziehungsweise von alten Verknüpfungen gelöst.
## Ticketdaten aus Zammad
TicketTracker kann Ticketdaten aus Zammad übernehmen:
- Ticketnummer
- Titel
- Organisation
- Work-Type, zum Beispiel Support oder Consulting
- Status
- Priorität
- Owner
- Teamspace-Projektinformationen
Zammad-verwaltete Ticketstammdaten bleiben geschützt. Ticketnummer, Titel, Art und Organisation können dann in TicketTracker nicht beliebig überschrieben werden.
## Consulting-Projekte aus Zammad
Beim Zammad-Sync oder beim Anlegen eines Projekts können Consulting-Projektinformationen übernommen werden.
Dazu gehören insbesondere:
- Teamspace-Projekt-ID oder mehrere Teamspace-Projekt-IDs
- Zammad-Owner
- Projektstatus-Hinweise, zum Beispiel Review bei Abschlussstatus
Die Teamspace-Projekt-ID aus Zammad ist die fachliche ID, zum Beispiel `EP-2026-A-035`. Für Teamspace-API-Abfragen speichert TicketTracker zusätzlich die interne Teamspace-API-ID.
## Teamspace-Projekt-ID-Sync auf der Zammad-Sync-Seite
Auf der Zammad-Sync-Seite gibt es den Sync für Teamspace-Projekt-IDs, Budgets und Positionen.
Voraussetzungen:
- Admin hat die Teamspace-Base-URL gespeichert.
- Benutzer hat im Profil Teamspace-Geraete-ID und Geraetepasswort gespeichert.
- Die Teamspace User-ID ist bekannt.
- Das Projekt hat eine Teamspace-Projekt-ID.
Der Sync speichert:
- Teamspace-API-ID
- Teamspace-API-URL
- Gesamtbudget
- Unterpositionen
- Budgets und Istwerte der Unterpositionen
- Stückpositionen
## Interne Zammad-Notizen
Beim Timerabschluss und beim manuellen Nachtragen kann TicketTracker einen internen Zammad-Article erzeugen.
Der Article enthält die Tätigkeit und optional den `time_unit`-Wert. Im Profil kann eingestellt werden:
- ob die interne Notiz standardmäßig aktiv ist
- welcher Zammad-Zeitbuchungstyp vorausgewählt wird
- ob `time_unit` auf 5, 10, 15 oder 30 Minuten aufgerundet wird
Wenn Zammad nicht erreichbar ist oder die Notiz fehlschlägt, speichert TicketTracker die Session trotzdem. Die fehlgeschlagene Notiz wird geparkt und kann später im Profil erneut gesendet werden.
## eMail-/Article-Import
TicketTracker kann Zammad-Articles prüfen und daraus Sessions vorbereiten. Das ist besonders hilfreich, wenn Arbeit per eMail-Import ins Ticket kam.
Solche Sessions können nachträglich geprüft, zugeordnet und bewertet werden. Wenn ein importierter Eintrag keinem Teamspace-Projekt zugeordnet ist, kann das im Projektdetail sichtbar werden.
@@ -0,0 +1,95 @@
# Dashboard, Statistiken und Widgets
Diese Seite beschreibt die Kontroll- und Auswertungsflächen in TicketTracker.
## Dashboard
Das Dashboard ist das Tagescockpit. Es zeigt, ob heute oder in der aktuellen Arbeitslage noch etwas offen ist.
Typische Hinweise:
- offene Session-Bewertungen
- Sessions im Zwischenstatus **Abrechenbar**
- heutige oder überfällige ToDos
- fällige Wiedervorlagen
- fehlende Teamspace-Tageswerte, wenn Teamspace-Erfassung in TT aktiv ist
- Projektbudget-Hinweise
- Nacharbeit für heutige Tickets
Widgets können je nach Konfiguration angeordnet und genutzt werden. Favoriten und persönliche Notizen unterstützen die tägliche Arbeit.
## Teamspace-Verhalten im Dashboard
Der Profil-Schalter **Teamspace-Zeiten in TT erfassen** beeinflusst die Dashboard-Logik.
Wenn aktiv:
- Dashboard kann fehlende Teamspace-Tageswerte anzeigen.
- Nacharbeitslisten können Teamspace-Differenzen berücksichtigen.
- Projektverbrauch basiert auf TT-Teamspace-Tageswerten plus manuellen Projektstunden.
Wenn deaktiviert:
- Teamspace-Erfassung wird als ausgeschaltet angezeigt.
- Monatsprüfung läuft statusbasiert.
- Teamspace-Differenzhinweise werden ausgeblendet.
- Projekt-Istwerte kommen aus Teamspace.
## Statistiken
Die Statistikseite betrachtet einen Monat.
Sie zeigt unter anderem:
- abgerechnete Zeit
- abrechenbare Zwischenstände
- nicht abrechenbare Zeit
- offene Sessions
- Organisationen mit Aufwand
- Tickets mit Aufwand
- Projektbudget-Hinweise
- manuelle und fixe Sessions
- Teamspace-Abgleich, wenn Teamspace-Erfassung in TT aktiv ist
- Teamspace als Ist-Quelle, wenn die Erfassung in TT deaktiviert ist
## Abgerechnet, abrechenbar und offen
Für statistische Auswertungen gilt:
- **Abgerechnet** zählt in die abgerechnete Session-Zeit.
- **Abrechenbar** ist ein Zwischenstatus und bleibt offen für den Monatsabschluss.
- **Nicht abrechenbar** ist final, zählt aber nicht als abgerechnete Zeit.
- **Offen** blockiert den Monatsabschluss.
## Teamspace-Abgleich in Statistiken
Wenn Teamspace-Erfassung in TT aktiv ist, vergleicht TicketTracker:
`Teamspace-Zeit minus abgerechnete Session-Zeit`
Bedeutung:
- Positive Differenz: In Teamspace steht mehr Zeit als abgerechnet wurde.
- Negative Differenz: In Teamspace steht weniger Zeit als abgerechnet wurde.
- Null: Teamspace und abgerechnete Session-Zeit sind ausgeglichen.
Wenn Teamspace-Erfassung deaktiviert ist, werden Differenzspalten, Differenzbadges und Teamspace-Linien ausgeblendet oder angepasst. Die Statistik zeigt dann Teamspace als Ist-Quelle und prüft primär die Session-Status.
## Teamspace-Monatsabgleich aus dem Sync
Zusätzlich zum Tageswert-Abgleich kann der Zammad-Sync echte Teamspace-Monatszeiten abrufen. Diese Daten kommen aus Teamspace `/api/time` und verwenden `amountBillable` der Projektzeitbuchungen.
Der Sync speichert die Werte als Monats-Snapshot pro Benutzer und Teamspace-Projekt-Eintrag. Dadurch wird sichtbar, ob der in TicketTracker gepflegte Monatswert zu den echten Teamspace-Buchungen passt und bei welchem Projekt die Abweichung liegt.
Der Monatsabgleich ist besonders hilfreich, wenn mehrere Teamspace-Projekte an einem Ticket hängen oder wenn Teamspace-Zeiten direkt auf Unterpositionen gebucht wurden. Diese Unterpositionszeiten werden dem passenden Teamspace-Projekt-Eintrag zugerechnet.
In der Monatsübersicht wird der gespeicherte Snapshot direkt am Ticket ausgegeben: TS-Monatswert, Differenz und die betroffenen Haupt- oder Unterpositionen. So ist nicht nur sichtbar, dass eine Abweichung existiert, sondern auch, auf welcher Teamspace-Position die Zeit gebucht wurde.
## Projektbudget-Hinweise
Projektbudget-Hinweise basieren auf den aktuellen Projektregeln:
- Budget kommt aus Teamspace.
- Ist kommt entweder aus TT-Teamspace-Tageswerten plus manuellen Projektstunden oder aus Teamspace, abhängig vom Profil-Schalter.
- Überschreitungen werden als Warnung angezeigt.
- Stückpositionen werden gesondert bewertet und nicht als Stundenbudget behandelt.
@@ -0,0 +1,79 @@
# ToDos, Wiedervorlagen und fixe Abrechnungen
Diese Seite beschreibt die Aufgabenlogik und automatisch erzeugte Sessions.
## ToDos
ToDos können direkt an Tickets oder Projekte gehängt werden.
Ein ToDo enthält:
- Aufgabe
- Priorität
- Status offen oder erledigt
- optional Umsetzung von
- optional Umsetzung bis
- optionale Beschreibung
ToDos können bearbeitet, erledigt, wieder geöffnet oder gelöscht werden.
## ToDo-Seite
Die zentrale ToDo-Seite bietet:
- heutige ToDos
- offene, erledigte oder alle ToDos
- Suche nach Ticketnummer
- Sortierung
- Gruppierung
- freie Reihenfolge per Drag and Drop
- Kalenderansicht
Überfällige ToDos werden hervorgehoben. ToDos mit Zeitraum zählen an jedem Arbeitstag im Zeitraum. Ein-Tages-ToDos erscheinen einzeln am jeweiligen Tag.
## Wiedervorlagen
Für Consulting-Projekte können automatische Wiedervorlagen entstehen, wenn länger keine Aktivität im TicketTracker passiert ist.
Mögliche Regeln:
- erste Wiedervorlage nach einer definierten Anzahl Wochen ohne Aktivität
- optionale zweite Wiedervorlage nach weiterem Stillstand
- automatische Erledigung, wenn später wieder eine Session auf dem Projekt erfasst wird
Die Einstellungen dafür liegen im Profil.
## Zammad-Termine
Aus Zammad-Tickets im Status **Wartend** oder **Abschluss** mit Datum kann TicketTracker Termin-ToDos erzeugen.
So werden Zammad-Termine direkt im TicketTracker-Dashboard, in der ToDo-Seite und im Kalender sichtbar.
## Fixe Abrechnungen
Regelmäßige Leistungen können als fixe Abrechnung angelegt werden.
Beispiele:
- jeden Donnerstag 4 Stunden
- bestimmte Wochentage mit festen Zeiten
- alle 2 Wochen eine Leistung
TicketTracker erzeugt daraus automatisch Sessions.
## Feiertage und Ausnahmen
Bayerische Feiertage werden berücksichtigt. Für Feiertage werden keine fixen Sessions erzeugt.
Einzelne automatisch erzeugte Sessions können gelöscht werden, zum Beispiel wegen Urlaub, Krankheit oder Verschiebung. Diese Löschung wird als Ausnahme gespeichert, damit die Session beim nächsten Aufruf nicht automatisch wieder erscheint.
Wenn eine wiederkehrende Leistung an einem anderen Tag erbracht wurde, kann die erzeugte Session bearbeitet oder verschoben werden.
## Bewertung fixer Sessions
Fix erzeugte Sessions verhalten sich im Abschluss wie normale Sessions:
- Sie müssen bewertet werden.
- **Abrechenbar** bleibt ein Zwischenstatus.
- **Abgerechnet** und **Nicht abrechenbar** sind final.
- Offene oder abrechenbare Sessions blockieren den Monatsabschluss.
@@ -0,0 +1,107 @@
# Profil, Adminbereich und Betrieb
Diese Seite beschreibt persönliche Einstellungen, Adminfunktionen und betriebliche Hinweise.
## Profil
Jeder Benutzer pflegt im Profil seine persönlichen Einstellungen:
- Benutzername und Anzeigename
- Passwort
- persönlicher Zammad API-Token
- Teamspace-Geraete-ID und Geraetepasswort
- angezeigte Zammad User-ID
- angezeigte Teamspace User-ID
- Bewertungsabfrage beim Timerabschluss
- Teamspace-Zeiten in TT erfassen
- interne Zammad-Notiz beim Timerabschluss
- Standard-Typ für interne Zammad-Notizen
- optionale Zammad-Zeitaufrundung für `time_unit`
- ATOSS/eMail-Sync-Optionen, sofern aktiviert
- Projekt-Wiedervorlagen
Passwortänderungen erfordern das aktuelle Passwort. Bleiben die Passwortfelder leer, werden nur die übrigen Profildaten gespeichert.
## Zammad-Zugang im Profil
Normale Benutzer können im Profil einen persönlichen Zammad API-Token hinterlegen. Beim Speichern eines neuen Tokens ruft TicketTracker Zammad ab und speichert die User-ID, die Zammad für diesen Token zurückliefert.
Der Token wird verschlüsselt gespeichert. Die User-ID wird danach read-only im Profil angezeigt.
## Teamspace-Zugang im Profil
Jeder Benutzer kann seine Teamspace-Geraete-ID und sein Geraetepasswort speichern.
Beim Speichern werden die Zugangsdaten gegen Teamspace geprüft. Wenn die Prüfung erfolgreich ist, speichert TicketTracker die Teamspace User-ID und zeigt sie im Profil an.
Geraete-ID und Passwort werden verschlüsselt in der Datenbank gespeichert.
## Teamspace-Zeiten in TT erfassen
Der Schalter **Teamspace-Zeiten in TT erfassen** ist userbezogen und steuert, ob ein Benutzer Teamspace-Tageswerte in TicketTracker pflegt.
**An:**
- Teamspace-Tageswerte können in TicketTracker erfasst werden.
- Manuelle Projektstunden sind editierbar.
- Projekt-Ist kommt aus TT-Teamspace-Tageswerten plus manuellen Projektstunden.
- Statistiken und Monatsprüfung vergleichen TT gegen Teamspace-Werte.
**Aus:**
- Teamspace-Tageswerte können nicht erfasst werden.
- Manuelle Projektstunden sind ausgeblendet und serverseitig gesperrt.
- Projekt-Ist kommt aus Teamspace.
- Monatsprüfung und Widgets prüfen nur Session-Status.
- Teamspace-Differenzen werden ausgeblendet.
Der Schalter ist bewusst userbezogen. Zwei Benutzer können am gleichen Projekt arbeiten und trotzdem unterschiedliche Erfassungs- und Prüflogiken nutzen.
## Adminbereich
Der feste Admin ist für Systemverwaltung vorgesehen. Er kann:
- Benutzer anlegen und bearbeiten
- Passwörter für Benutzer setzen
- Zammad-Adminzugang für Organisationssync pflegen
- Teamspace-Base-URL speichern
- Organisationen aus Zammad synchronisieren
- SQL-Backups herunterladen
- Restore-fähige SQL-Backups wieder einspielen
Der Admin sieht keine Timer, keine persönlichen Auswertungen, keine Statistiken, keine fixen Abrechnungen und keinen Monatsabschluss. Diese Bereiche sind für normale Benutzer vorgesehen.
## Teamspace-Base-URL
Die Teamspace-Base-URL wird im Adminbereich gespeichert. Ohne diese URL können Benutzer ihre Teamspace-Zugangsdaten nicht sinnvoll für API-Syncs nutzen.
Die persönlichen Teamspace-Zugangsdaten liegen dagegen im Benutzerprofil.
## Backup und Restore
Der Adminbereich kann SQL-Backups erzeugen und wieder einspielen.
Der Export enthält alle Tabellen, die für den Systemstand notwendig sind, unter anderem:
- Benutzer
- Einstellungen
- Organisationen
- Tickets
- Sessions
- Teamspace-Werte
- Projektinformationen
- Unterpositionen
- fixe Abrechnungen
- Ausnahmen
- Monatsabschlüsse
Ein Restore ersetzt den aktuellen Datenbestand durch den Stand des Backups. Vor dem Restore wird die Struktur geprüft. Nach dem Restore ist eine neue Anmeldung mit den Zugangsdaten aus dem Backup notwendig.
## Technischer Stack
- Frontend: Next.js, React, shadcn/ui, Tailwind CSS
- Backend: Node.js, Express, TypeScript
- Datenbank: PostgreSQL
- Deployment: Docker-fähig
Secrets wie Zammad-Token und Teamspace-Zugangsdaten werden verschlüsselt gespeichert.