# Handoff BE/Produk — tugas Daily Report (Kanban) vs Kalender & Team Monitoring

Pertanyaan umum: *“Saya sudah isi/upload task di Daily Report; kenapa tidak muncul di Kalender dan Team Monitoring?”*

Dokumen ini menjelaskan **perilaku sistem saat ini** (bukan bug tunggal di satu endpoint), **ekspektasi yang benar**, dan **opsi pengembangan BE** jika produk ingin data itu “terhubung”.

---

## 1. Jawaban singkat: apakah “harusnya muncul”?

Dengan implementasi **sekarang**: **tidak otomatis**.

- **Tugas papan Kanban** disimpan di **`reports.body`** sebagai string JSON (schema `workpulse.report.v1`, array `tasks`). Itu adalah **isi laporan**, bukan entitas terpisah di database.
- **Kalender** hanya menampilkan baris dari tabel **`calendar_events`** lewat `GET /api/v1/calendar/events` (filter `user_id` pemilik token, rentang `from` / `to`). **Tidak ada** join atau parse ke `reports.body` untuk tugas Kanban.
- **Team Monitoring** (FE `pages/team.vue`) memuat:
  - **Superadmin:** agregat organisasi per **divisi** / daftar **pelapor** (endpoint analytics), bukan daftar kartu tugas per orang.
  - **User biasa:** daftar **tim** + **anggota** dari `GET /api/v1/teams` dan `GET /api/v1/teams/:id/members`. Bukan feed “task hari ini” dari laporan.

Jadi user yang mengharapkan “task yang saya ketik di laporan = acara di kalender = baris di team monitoring” akan **tidak melihat** itu kecuali produk menambah alur baru (lihat §4).

---

## 2. Kalender — sumber data

| Sumber | Keterangan |
|--------|------------|
| Tabel **`calendar_events`** | Kolom antara lain: `user_id`, `title`, `starts_at`, `ends_at`, `team_id`, `all_day`. |
| API | `GET /api/v1/calendar/events?from=…&to=…` — lihat `BE/internal/api/rest.go` (`listCalendar`). |
| Buat acara dari app | Di repo ini **hanya ada pembacaan** (GET / org GET); **tidak** ditemukan `INSERT` ke `calendar_events` dari alur Daily Report. Acara bisa dari migrasi seed, skrip admin, atau API yang belum/tidak dipakai FE. |

**Kesimpulan:** mengisi Kanban di Daily Report **tidak** mengisi Kalender.

---

## 3. Team Monitoring & dashboard “no team”

| Kondisi | Dampak di UI |
|---------|----------------|
| User **bukan anggota** `team_members` untuk tim mana pun | `GET /api/v1/teams` kosong → Team Monitoring (mode user) minim; dashboard “PENDING IN TEAM / Team snapshot” menunjuk **no team** / ajakan join tim. |
| User **superadmin** | Tampilan per **divisi** dari analytics, tetap **bukan** kartu Kanban per laporan. |

Agregat **laporan** (draft/submitted) untuk tim memakai join **`reports`** ↔ **`team_members`** (lihat `teamSummary` di `rest.go`), **bukan** isi JSON task per kartu.

---

## 4. Opsi pengembangan (jika produk ingin “muncul”)

Pilih salah satu atau kombinasi; masing-masing punya dampak BE + FE.

1. **Proyeksi tugas → `calendar_events`**  
   Saat `PATCH/POST` report (atau job async): untuk setiap task (mis. kolom `todo`/`doing` + `title`), buat/update baris `calendar_events` dengan `starts_at`/`ends_at` diturunkan dari `report_date` + jam kerja atau default slot.  
   Perlu: aturan deduplikasi, update saat drag kolom, hapus saat task dihapus, izin tim.

2. **Endpoint baca saja “task dari laporan”**  
   Mis. `GET /api/v1/reports/tasks-in-range?from=&to=&teamId=` yang `jsonb_each` / parse `body` di server (atau kolom `JSONB` terpisah). FE Kalender menggambar layer kedua tanpa mengubah `calendar_events` dulu.

3. **Tabel `report_tasks`**  
   Normalisasi tugas keluar dari JSON; trigger/kode menjaga sinkron dari body; Kalender & query lain baca dari sini.

4. **Team board khusus**  
   Halaman baru atau tab “Laporan tim” yang memuat draft/submitted rekan satu tim dan **expand** `body` untuk Kanban read-only — tetap perlu BE filter by team + policy.

5. **Operasional: pastikan user di-assign ke tim**  
   Tanpa tim, fitur yang bergantung pada `teams` tetap kosong walaupun laporan sudah di-submit.

---

## 5. Referensi file

| Area | Path |
|------|------|
| FE Daily Report + body JSON | `FE/pages/report.vue`, `FE/utils/report-kanban-payload.ts` |
| FE Kalender | `FE/pages/calendar.vue`, `FE/composables/useWorkpulseCalendar.ts` |
| FE Team Monitoring | `FE/pages/team.vue`, `FE/docs/BE_SPEC_TEAM_MONITORING_DIVISIONS.md` |
| BE kalender | `BE/internal/api/rest.go` (`listCalendar`), `BE/internal/db/migrations/*` (`calendar_events`) |
| BE ringkasan tim | `BE/internal/api/rest.go` (`teamSummary`) |

**Lanjutan — agar Kanban tampil di Kalender pada tanggal `report_date`:** lihat spesifikasi implementasi BE [`BE_SPEC_CALENDAR_SYNC_DAILY_REPORT_KANBAN.md`](./BE_SPEC_CALENDAR_SYNC_DAILY_REPORT_KANBAN.md).

---

*Dokumen ini menjawab gap ekspektasi user; tidak mengubah kontrak API kecuali produk memilih salah satu opsi di §4.*
