# 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**, **ekspektasi yang benar**, dan **opsi pengembangan BE** jika produk ingin data itu “terhubung”.

**Salinan BE (checkout terpisah):** [`../BE/docs/BE_SPEC_DAILY_REPORT_TASKS_VS_CALENDAR_AND_TEAM.md`](../BE/docs/BE_SPEC_DAILY_REPORT_TASKS_VS_CALENDAR_AND_TEAM.md)

---

## 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** (`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.

User yang mengharapkan “task 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`** | `user_id`, `title`, `starts_at`, `ends_at`, `team_id`, `all_day`, … |
| API | `GET /api/v1/calendar/events?from=…&to=…` — [`../BE/internal/api/rest.go`](../BE/internal/api/rest.go) (`listCalendar`). |
| Buat acara dari Daily Report | Di repo ini **tidak** ada `INSERT` ke `calendar_events` dari alur Daily Report. |

**Kesimpulan:** mengisi Kanban di Daily Report **tidak** mengisi Kalender.

---

## 3. Team Monitoring & dashboard “no team”

| Kondisi | Dampak di UI |
|---------|----------------|
| User **bukan anggota** `team_members` | `GET /api/v1/teams` kosong → Team Monitoring minim; dashboard “pending di tim” → **no team**. |
| User **superadmin** | Tampilan per **divisi** dari analytics — **bukan** kartu Kanban per laporan. |

Agregat laporan per tim: join **`reports`** ↔ **`team_members`** (`teamSummary` di `../BE/internal/api/rest.go`), **bukan** JSON task per kartu.

---

## 4. Opsi pengembangan (jika produk ingin “muncul”)

1. **Proyeksi tugas → `calendar_events`** — pada `PATCH`/`POST` report atau job async; deduplikasi, update/hapus.
2. **Endpoint baca** `GET /api/v1/reports/tasks-in-range?…` — parse `body` / JSONB; FE layer kedua di kalender.
3. **Tabel `report_tasks`** — normalisasi + sinkron.
4. **Team board** — filter laporan per tim + expand `body`.
5. **Operasional** — assign user ke **`team_members`**.

---

## 5. Referensi file

| Area | Path |
|------|------|
| FE Daily Report + body JSON | `pages/report.vue`, `utils/report-kanban-payload.ts` |
| FE Kalender | `pages/calendar.vue`, `composables/useWorkpulseCalendar.ts` |
| FE Team Monitoring | `pages/team.vue`, [`BE_SPEC_TEAM_MONITORING_DIVISIONS.md`](./BE_SPEC_TEAM_MONITORING_DIVISIONS.md) |
| BE | [`../BE/docs/BE_SPEC_DAILY_REPORT_TASKS_VS_CALENDAR_AND_TEAM.md`](../BE/docs/BE_SPEC_DAILY_REPORT_TASKS_VS_CALENDAR_AND_TEAM.md), [`../BE/docs/BE_SPEC_REPORT_KANBAN_BODY_SCHEMA.md`](../BE/docs/BE_SPEC_REPORT_KANBAN_BODY_SCHEMA.md) |

---

*Gap ekspektasi user; kontrak API tidak berubah kecuali produk memilih opsi di §4.*
