feat(saetze): Satz je Task plus Import-Endpunkt fuer Harvest
Satz je Task Ein Task kann einen eigenen Satz tragen; leer bedeutet weiter "Satz des Budgettopfs" bzw. bei Abruf "Satz des Projekts". Damit lassen sich "remote" und "vor Ort" im selben Projekt abrechnen, ohne dafuer getrennte Projekte anzulegen. Das Budget bleibt in Stunden - gemischte Saetze aendern nichts daran, wann ein Topf voll ist. Der Umsatz wird je Task-Satz aufsummiert: loadProjects gruppiert den Topfverbrauch nach Task-Satz und gibt das Ergebnis an potStats, Abruf rechnet je Task. Mitarbeiter sehen keine Saetze, auch nicht die am Task. Import POST /api/imports/entries (nur Administrator) schreibt Buchungen fuer beliebige Personen - POST /api/entries bucht bewusst nur auf den angemeldeten Benutzer. Der Import laeuft durch dieselben Regeln: Projekt aktiv, Person zugewiesen, Topf passend zum Datum, maximal 24 h am Tag. dry_run schreibt nichts. Jede uebernommene Buchung traegt ihre harvest_id (unique). Ein zweiter Lauf legt nichts doppelt an. DELETE /api/imports/entries entfernt genau die uebernommenen Zeiten; handgetippte bleiben unberuehrt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7606df9280
commit
7e7188d476
@@ -80,6 +80,30 @@ Ein Klick auf eine Zeile öffnet dieselbe Detailansicht wie eine Kachel, hier un
|
||||
mindestens Vorgesetzter ist.
|
||||
|
||||
|
||||
## Sätze: Topf, Projekt, Task
|
||||
|
||||
Der Satz kommt in dieser Reihenfolge: **Task → Budgettopf → Projekt** (letzteres nur bei *Abruf*).
|
||||
Ein Satz am Task ist freiwillig und deckt Fälle ab, in denen dieselbe Leistung je Task anders
|
||||
vergütet wird – typisch „vor Ort" neben „remote". Bleibt er leer, ändert sich nichts gegenüber
|
||||
vorher. Die Einheit (Stunde oder Tag) steht am Projekt und gilt auch für den Task-Satz.
|
||||
|
||||
Das Budget bleibt in **Stunden** – gemischte Sätze ändern also nichts daran, wann ein Topf voll
|
||||
ist. Der Umsatz eines Topfes wird dafür je Task-Satz aufsummiert (`loadProjects` gruppiert den
|
||||
Verbrauch nach Task-Satz und gibt das Ergebnis an `potStats`). Mitarbeiter sehen keine Sätze,
|
||||
auch nicht die am Task.
|
||||
|
||||
## Übernahme aus Harvest
|
||||
|
||||
`POST /api/imports/entries` (nur Administrator) schreibt Buchungen für beliebige Personen –
|
||||
`POST /api/entries` bucht bewusst nur auf den angemeldeten Benutzer. Der Import läuft durch
|
||||
dieselben Regeln: Projekt aktiv, Person zugewiesen, Topf passend zum Leistungsdatum, höchstens
|
||||
24 Stunden am Tag. Mit `dry_run: true` schreibt er nichts und meldet nur, was passieren würde.
|
||||
|
||||
Jede übernommene Buchung trägt ihre `harvest_id` (`pulse_time_entries.harvest_id`, unique). Ein
|
||||
zweiter Lauf legt deshalb nichts doppelt an, sondern meldet „schon vorhanden". `GET
|
||||
/api/imports/entries` listet alles Übernommene, `DELETE /api/imports/entries` entfernt es wieder –
|
||||
handgetippte Zeiten bleiben unberührt, weil sie keine `harvest_id` haben.
|
||||
|
||||
## Profilbilder
|
||||
|
||||
Jeder kann sein eigenes Bild hochladen (*Mein Konto*), Vorgesetzte und Administratoren
|
||||
|
||||
Reference in New Issue
Block a user