Files
tickettracker/docs/confluence/02-projekte-budgets-teamspace.md
T
2026-10-13 10:43:53 +02:00

151 lines
7.0 KiB
Markdown

# 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.