[Intum](https://intum.fr/aide.md) / [Organizacja](https://intum.fr/aide/organizacja.md)

# [Czas pracy](https://intum.fr/aide/organizacja/czas-pracy.md) | [API](#api)

## Czym jest czas pracy?

Czas pracy (WorkInfo) to system rejestrowania czasu poświęconego na zadania. Każdy wpis opisuje kiedy, jak długo i nad czym pracował użytkownik. Wpisy czasu pracy są podstawą do generowania raportów miesięcznych.

## Rejestrowanie czasu

### Stoper (start/stop)

Najszybszy sposób rejestrowania czasu:

1. Kliknij **Mierz czas** (lub przycisk ▶ przy zadaniu)
2. Pracuj nad zadaniem
3. Kliknij **Stop** — system zapisze czas od startu do stopu

Stoper obsługuje przełączanie między zadaniami — rozpoczęcie pracy nad nowym zadaniem automatycznie pauzuje poprzednie.

### Ręczne dodawanie

1. Przejdź do **Czas pracy**
2. Kliknij **+** (Nowy wpis)
3. Wypełnij:
   - **Data** — dzień pracy
   - **Czas od / do** — godziny rozpoczęcia i zakończenia
   - **Opis** — co zostało zrobione (wymagane, chyba że wybrano zadanie)
   - **[Zadanie](zadania)** — opcjonalne powiązanie z zadaniem
   - **[Zespół](zespol)** — opcjonalne przypisanie do zespołu
   - **[Projekt](projekt)** — opcjonalne przypisanie do projektu
   - **Klient** — opcjonalne powiązanie z klientem CRM
   - **Tagi** — kategoryzacja wpisów
4. Zapisz

### Miejsce pracy

Pierwszy wpis danego dnia określa miejsce pracy na cały dzień:

- **Biuro** — praca stacjonarna
- **Zdalnie** — praca zdalna

## Ograniczenia

- Maksymalny czas jednego wpisu: **12 godzin** (720 minut)
- Wpisy nie mogą się **nakładać** — system blokuje konflikty czasowe
- Nie można dodawać wpisów dalej niż **3 dni w przyszłość**
- Jeśli istnieje zatwierdzony raport za dany dzień, edycja wpisów jest **zablokowana**

## Raporty czasu pracy

Raporty agregują wpisy czasu pracy za okres (miesiąc lub tydzień) dla danego [użytkownika](uzytkownik).

### Tworzenie raportu

1. Przejdź do **Czas pracy** → **Raporty**
2. Kliknij **+** (Nowy raport)
3. Wybierz:
   - **Okres** — data od/do
   - **[Użytkownik](uzytkownik)** — dla kogo raport
   - **[Zespół](zespol)** — opcjonalnie
4. Zapisz — system automatycznie generuje podsumowanie

### Zawartość raportu

Raport zawiera:

- **Łączne godziny pracy** z podziałem na dni
- **Godziny urlopowe** — jeśli użytkownik miał urlop w danym okresie
- **Korekta godzin** — możliwość ręcznej korekty z wymaganym uzasadnieniem
- **Podział na zadania** — ile czasu poświęcono na każde zadanie
- **Dni biurowe / zdalne** — statystyka miejsca pracy
- **Dzienna rozpiórka** — czas od/do, wpisy, urlopy dla każdego dnia

### Zatwierdzanie raportów

Raporty przechodzą przez proces zatwierdzania:

1. Użytkownik tworzy raport za dany okres
2. Przełożony **zatwierdza** raport (nie można zatwierdzić własnego raportu)
3. Po zatwierdzeniu raport można **eksportować** do PDF lub CSV
4. Zatwierdzony raport **blokuje edycję** wpisów za ten okres

Zatwierdzenie można cofnąć w razie potrzeby korekty.

### Eksport raportów

Zatwierdzone raporty można eksportować w formatach:

- **PDF** — pełny raport z podziałem dziennym
- **CSV** — dane tabelaryczne (dzień, miejsce pracy, godziny, opis)
- **JSON** — surowe dane raportu

## Automatyczne generowanie opisów

System może automatycznie uzupełnić opisy wpisów na podstawie aktywności systemowych (komentarze, zmiany statusów, commity) — przydatne przy uzupełnianiu czasu wstecz.

## Powiązania z innymi modułami

- **[Zadania](zadania)** — wpis czasu może być powiązany z zadaniem
- **[Projekt](projekt)** — agregacja czasu na poziomie projektu
- **[Zespół](zespol)** — raporty zespołowe
- **Mail** — powiązanie z obsłużonym e-mailem
- **CRM** — powiązanie z klientem

---

## API

### Ogólne API

# Intum API

Dokumentacja API platformy [Intum](https://intum.pl) - system operacyjny firmy.

## Host

Host jest zawsze taki sam jak adres konta: `xxxx.intum.com` lub `xxx.intum.pl` (w zależności od ustawień konta)

## Autoryzacja

Wszystkie requesty API wymagają `api_token`:
- header: `Authorization: Bearer TOKEN`

Token możesz wygenerować w **Ustawienia Konta** → **Tokeny API**

## Endpointy — Czas pracy (Workinfo)

| Metoda | Ścieżka | Opis |
|--------|---------|------|
| GET | `/organize/workinfos.json` | Lista wpisów czasu pracy |
| GET | `/organize/workinfos/:id.json` | Pojedynczy wpis |
| POST | `/organize/workinfos.json` | Utworzenie wpisu |
| PATCH | `/organize/workinfos/:id.json` | Aktualizacja wpisu |
| DELETE | `/organize/workinfos/:id.json` | Usunięcie wpisu |
| POST | `/organize/workinfos/start.json` | Start stopera |
| POST | `/organize/workinfos/stop.json` | Stop stopera |

**Autoryzacja:** `Authorization: Bearer TOKEN` (uprawnienie: **organize**)

## Pola wpisu

| Pole | Typ | Wymagane | Opis |
|------|-----|----------|------|
| `content` | string | warunkowo | Opis pracy (wymagany jeśli brak task_id) |
| `date` | string | tak | Data YYYY-MM-DD |
| `time_from` | string | tak | Czas rozpoczęcia (ISO 8601 lub HH:MM) |
| `time_to` | string | warunkowo | Czas zakończenia |
| `hours` | number | nie | Czas w godzinach (alternatywa dla time_to) |
| `task_id` | integer | nie | ID zadania |
| `team_id` | integer | nie | ID zespołu |
| `project_id` | integer | nie | ID projektu |
| `client_id` | integer | nie | ID klienta (CRM) |
| `user_id` | integer | nie | ID użytkownika (domyślnie bieżący) |
| `kind` | string | nie | Typ: `start`, `stop`, `pause` |
| `tags` | array | nie | Tagi kategoryzujące |

## Tworzenie wpisu

```
POST /organize/workinfos.json
Authorization: Bearer TOKEN
```

```json
{
  "workinfo": {
    "content": "Implementacja nowego modułu",
    "date": "2026-03-05",
    "time_from": "09:00",
    "time_to": "11:30",
    "task_id": 100,
    "team_id": 1
  }
}
```

## Start/Stop stopera

```
POST /organize/workinfos/start.json
```

```json
{"task_id": 100}
```

```
POST /organize/workinfos/stop.json
```

## Filtrowanie listy

```
GET /organize/workinfos.json?user_id=5&date=2026-03-05
```

| Parametr | Opis |
|----------|------|
| `user_id` | ID użytkownika (lub `user=me`) |
| `date` | Data YYYY-MM-DD |
| `task_id` | ID zadania |

---

## Endpointy — Raporty czasu pracy

| Metoda | Ścieżka | Opis |
|--------|---------|------|
| GET | `/organize/workinfo_reports.json` | Lista raportów |
| GET | `/organize/workinfo_reports/:id.json` | Pojedynczy raport |
| POST | `/organize/workinfo_reports.json` | Utworzenie raportu |
| PATCH | `/organize/workinfo_reports/:id.json` | Aktualizacja raportu |
| DELETE | `/organize/workinfo_reports/:id.json` | Usunięcie raportu |
| POST | `/organize/workinfo_reports/:id/approve.json` | Zatwierdzenie raportu |
| POST | `/organize/workinfo_reports/:id/unapprove.json` | Cofnięcie zatwierdzenia |
| GET | `/organize/workinfo_reports/:id/export.pdf` | Eksport PDF |
| GET | `/organize/workinfo_reports/:id/export.csv` | Eksport CSV |

## Pola raportu

| Pole | Typ | Wymagane | Opis |
|------|-----|----------|------|
| `date_from` | string | tak | Początek okresu YYYY-MM-DD |
| `date_to` | string | tak | Koniec okresu YYYY-MM-DD |
| `user_id` | integer | tak | ID użytkownika |
| `team_id` | integer | nie | ID zespołu |
| `corrected_hours` | number | nie | Korekta godzin |
| `corrected_hours_note` | string | warunkowo | Uzasadnienie korekty (wymagane jeśli corrected_hours ≠ 0) |

## Tworzenie raportu

```
POST /organize/workinfo_reports.json
Authorization: Bearer TOKEN
```

```json
{
  "workinfo_report": {
    "date_from": "2026-03-01",
    "date_to": "2026-03-31",
    "user_id": 5
  }
}
```

## Błędy (422)

```json
{"date_from": ["nie może być puste"]}
```