# Dashboard analitik — organisasi (`/analytics/org/*`)

Spesifikasi produk / FE: [`../FE/docs/BE_SPEC_ANALYTICS_DASHBOARD.md`](../FE/docs/BE_SPEC_ANALYTICS_DASHBOARD.md).

Endpoint **user** yang sudah ada (tanpa perubahan kontrak): `GET /api/v1/analytics/summary`, `GET /api/v1/analytics/trends` — lihat `internal/api/rest.go`.

---

## Otorisasi

Semua rute di bawah **`/api/v1/analytics/org`** memakai **`authMiddleware`** + **`requireSuperadmin`** (sama seperti `/admin/users`).

---

## `GET /api/v1/analytics/org/summary`

Query: `period` = `7d` | `30d` (default) | `90d` | `all`.

Agregasi **seluruh organisasi** dari tabel `reports` (filter `created_at` menurut periode):

| Field | Arti |
|-------|------|
| `reportsTotal` | Jumlah laporan dalam periode |
| `reportsDraft` / `reportsNonDraft` | Menurut `status` |
| `completionRatePercent` | `reportsNonDraft * 100 / reportsTotal` (0 jika total 0) |
| `blockerResolutionPercent` | **0** — belum ada entitas blocker di skema DB |
| `distinctReportersInPeriod` | `COUNT(DISTINCT user_id)` laporan dalam periode |
| `notificationsUnreadOrgWide` | Notifikasi belum dibaca, **semua** user |

---

## `GET /api/v1/analytics/org/by-division`

Query: `period` (sama seperti di atas).

Mengelompokkan **`reports.division`** (string kosong → `"(none)"`).

Respons `data.divisions`: array `{ "code", "label", "reportCount" }` (`code` = `label` = nilai divisi di DB).

---

## `GET /api/v1/analytics/org/top-reporters`

Query:

- `period` — sama.
- `limit` — default **10**, maks **50**.

Respons `data.reporters`: `{ "userId", "name", "email", "reportCount" }` (email tambahan untuk UI admin).

---

## Prasyarat data

- **Divisi** = kolom **`reports.division`** (bukan join terpisah ke master divisi).
- **Tim / user** — agregasi per user dari `reports.user_id` + join `users`.

---

## File kode

- `internal/api/analytics_org.go` — handler + filter periode.
- `internal/api/router.go` — grup `/analytics/org` + `requireSuperadmin`.

Deploy: `go build -o bin/api ./cmd/api/` lalu restart PM2 `workpulse-api`.
