Commit Graph
3 Commits
Author SHA1 Message Date
schakal00783andClaude Opus 5 2710baa615 fix(import): Sammelbuchungen und nicht abrechenbare Projekte anlegen
Beim Nachziehen der Harvest-Historie sind zwei Regeln im Weg gestanden,
die fuer eine Uebernahme nicht passen:

- Beim Anlegen verlangte die API auch fuer nicht abrechenbare Projekte
  einen Satz, obwohl validateProject ihn direkt danach verwirft. Nur
  Abruf rechnet ueber den Satz am Projekt ab, also gilt die Pflicht auch
  nur dort.
- Der Importweg liess hoechstens 24 Stunden je Tag zu. In Harvest stehen
  Sammelbuchungen ("Nachbuchung DORA September und Oktober", 80 Stunden
  auf einem Tag). Sie abzulehnen verliert die Stunden und verfaelscht das
  Restbudget, sie zu verteilen erfindet Leistungsdaten - deshalb kommen
  sie so herein, wie sie gebucht wurden. Eine Buchung darf jetzt bis zu
  31 Tage umfassen, damit Zahlendreher weiter auffallen. Im
  Buchungsdialog bleibt die Tagesgrenze bestehen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 16:28:14 +02:00
schakal00783andClaude Opus 5 e962be41ea fix(historie): Uebernahme alter Zeiten, Rollenzone Externe, Reportfehler
Die Uebernahme der Harvest-Historie ist an drei Stellen haengen geblieben:

- resolvePot hat abgelaufene Toepfe grundsaetzlich gesperrt. Fuer eine
  historische Buchung ist das falsch - dort zaehlt, ob der Topf am
  Leistungstag lief. Der Importweg setzt jetzt `historic`, das Volumen
  wird weiter geprueft, damit Ueberbuchungen auffallen.
- In der SSO-Verwaltung fehlte die Ablagezone fuer die Rolle "Externe";
  Konten liessen sich dort nicht zuordnen.
- In buildProjectDetail und der Kundenauswertung stand ein Rest der
  Auslastungsaenderung (bisHeute/capTo) ohne Bezug im Scope. Beide
  Reportseiten liefen dadurch auf 500.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 15:56:09 +02:00
schakal00783andClaude Opus 5 7e7188d476 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>
2026-09-21 11:37:26 +02:00