# BE handoff — tanggal laporan (`report_date`) & jam kerja di `body`

Dokumen ini merangkum perubahan kontrak yang dipakai halaman **Daily Report** (`FE/pages/report.vue`) agar pengguna bisa memilih **tanggal laporan** (kalender) dan **jam mulai / selesai** (presisi menit), bukan hanya satu field teks “work hours”.

---

## 1. Kolom `reports.report_date` — `PATCH` mengirim `reportDate`

**Sudah diimplementasi di BE:** `PATCH /api/v1/reports/:id` menerima field opsional **`reportDate`** (string) di JSON body.

| Nilai `reportDate` | Efek SQL |
|--------------------|----------|
| Diabaikan (field tidak dikirim) | Tidak mengubah `report_date`. |
| `""` atau hanya whitespace | `report_date = NULL`. |
| `YYYY-MM-DD` (PostgreSQL cast `::date`) | `report_date` di-set ke tanggal tersebut. |

**Referensi kode:** `BE/internal/api/rest.go` — struct `reportPatch` (field `ReportDate *string`) dan cabang `if body.ReportDate != nil` di `patchReport`.

**FE:** `createReport` dan `patchReport` mengirim `reportDate` (format `Y-m-d`); judul laporan memakai tanggal yang sama: `Daily report · YYYY-MM-DD`.

---

## 2. Jam kerja — hanya di `reports.body` (JSON), tanpa kolom DB baru

Jam tidak disimpan di kolom terpisah; mereka ada di **string JSON** `reports.body` dengan schema **`workpulse.report.v1`**.

Field tambahan (opsional, string **`HH:MM`** 24 jam):

| Field | Keterangan |
|-------|------------|
| `workStart` | Jam mulai. |
| `workEnd` | Jam selesai. |
| `workHours` | Ringkasan satu baris; FE mengisi dari `workStart` + `workEnd`, mis. `08:00 - 17:00`, untuk kompatibilitas baca cepat / laporan lama. |

**BE tidak wajib diubah** untuk jam: cukup menyimpan `body` seperti biasa. Validasi server untuk format waktu tetap opsional (backlog).

**Referensi FE:** `FE/utils/report-kanban-payload.ts` (`ReportBodyPayloadV1`, `formatWorkHoursRange`, `parseWorkHoursRange`).

---

## 3. Ringkasan endpoint

| Metode | Path | Catatan |
|--------|------|---------|
| `POST` | `/api/v1/reports` | Sudah mendukung `reportDate` di body create (sesuai implementasi BE yang ada). |
| `PATCH` | `/api/v1/reports/:id` | Kirim `reportDate` saat autosave jika tanggal laporan berubah; body JSON tetap lewat `body`. |

---

## 4. Kompatibilitas mundur

- Laporan lama dengan `workHours` saja (tanpa `workStart`/`workEnd`): FE mengurai rentang dari string `workHours` bila perlu.
- `body` non-JSON: tetap ditampilkan di blockers; jam default UI `08:00`–`17:00` sampai pengguna mengubah.

---

*File ini mendampingi `FE/docs/BE_SPEC_REPORT_KANBAN_BODY_SCHEMA.md`.*
