> ## Documentation Index
> Fetch the complete documentation index at: https://docs.livingsecurity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Kepatuhan per orang

> Buat ulang ekspor kepatuhan pelatihan per orang dari penyedia sebelumnya menggunakan assignments, enrollments, dan courses dari /v1.

Laporan ini merupakan bagian pelatihan dari ekspor kepatuhan per orang milik penyedia sebelumnya:
identitas direktori ditambah satu baris per orang untuk setiap pendaftaran pelatihan
(status dan tanggal modul).

Granularitasnya berbentuk panjang (long-form), yaitu orang × penugasan, karena itulah yang
sudah dikembalikan oleh `GET /v1/assignments/{id}/enrollments`. Kueri ini tidak
memutar (pivot) modul menjadi kolom.

<Note>
  Pernyataan persetujuan kebijakan tidak termasuk dalam laporan ini. Living Security tidak
  memiliki API penerimaan kebijakan, sehingga kolom-kolom lama tersebut berada di luar cakupan, bukan
  pemetaan yang tertunda. Lihat [Perbedaan dari ekspor lama](#perbedaan-dari-ekspor-lama).
</Note>

Penyiapan, kredensial, paginasi, dan percobaan ulang akibat batas laju (rate limit) sama dengan
[panduan konektivitas Power BI / Excel](/id/developers/v1/powerbi). Tambahkan terlebih dahulu kueri
`Fn_FetchAll` bersama; laporan ini memanggilnya berdasarkan nama.

## Cakupan kunci yang diperlukan

| Cakupan | Digunakan untuk |
| - | - |
| `training:read` | `GET /v1/assignments` dan `GET /v1/assignments/{id}/enrollments` |
| `course:read` | `GET /v1/courses` (judul katalog) |

## Endpoint sumber

| Endpoint | Peran |
| - | - |
| `GET /v1/assignments` | Daftar penugasan: `assignment_id`, judul, `course_id`, status siklus hidup, `created_at`. Kueri tidak memfilter berdasarkan status, sehingga penugasan yang aktif, dijeda, dan selesai semuanya muncul (kepatuhan historis). |
| `GET /v1/assignments/{id}/enrollments` | Kemajuan per Pembelajar. Satu penelusuran berhalaman untuk setiap penugasan. Ini adalah granularitas fakta dan satu-satunya resource `/v1` dalam laporan ini yang membawa email sebagai kunci join pelaporan. |
| `GET /v1/courses` | Menerjemahkan `course_id` → judul kursus (nama modul Pelatihan). `Assignment.title` adalah label kampanye, bukan nama modul. |

Kueri ini **tidak** memanggil `GET /v1/entities`. Baris pendaftaran
sudah membawa `email` dan `display_name`, dan daftar entitas tidak memiliki
departemen atau jabatan, sehingga menelusurinya tidak akan mengisi
kolom direktori yang belum ada pada baris pendaftaran.

### Granularitas

Satu baris per pendaftaran (orang × penugasan). Orang yang ditugaskan kursus yang sama
melalui dua penugasan akan menghasilkan dua baris. Orang tanpa
pendaftaran tidak akan muncul — `/v1` tidak dapat menghasilkan baris direktori yang dapat digunakan
tanpa email, dan membuat baris khusus orang akan mencampur granularitas.

Anggaran permintaan: satu penelusuran berhalaman per penugasan, secara berurutan, dalam
batas laju per kunci yang dibagikan. Selalu atur `limit = "500"`.

## Pemetaan kolom

Nama kolom lama berasal dari ekspor penyedia Anda sebelumnya. Field `/v1`
adalah nama API publik; kueri memberi alias pada sebagian di antaranya untuk laporan.

| Kolom lama | Field `/v1` atau turunan | Kolom laporan |
| - | - | - |
| Email | `Enrollment.email` | `email` |
| Nama lengkap | `Enrollment.display_name` | `full_name` |
| Departemen | Tidak ada pada `/v1` | Dihilangkan, tidak diisi null |
| Direktori lainnya (jabatan, atasan, lokasi, …) | Tidak ada pada `/v1` — entitas hanya membawa email dan nama tampilan. | Dihilangkan |
| Modul Pelatihan / nama kursus | `Course.title`, dengan cadangan `Assignment.title` | `course_name` |
| Penugasan / status modul | `Enrollment.status` — `not_started` \| `in_progress` \| `completed` \| `overdue` \| `withdrawn` | `enrollment_status` |
| Tanggal penugasan | `Enrollment.assigned_at` | `assigned_at` |
| Tanggal selesai | `Enrollment.completed_at` | `completed_at` |
| Tanggal jatuh tempo | `Enrollment.due_at` (ekspor lama mungkin tidak memilikinya; disertakan karena API menyediakannya) | `due_at` |
| Persetujuan / pengakuan kebijakan | Tidak ada domain kebijakan | Dihilangkan |
| Nama kebijakan, tanggal disetujui | Tidak ada domain kebijakan | Dihilangkan |

Kunci join yang dipertahankan untuk model star-schema: `entity_id`, `assignment_id`,
`course_id`, `user_assignment_id`.

Kueri ini juga mempertahankan `course_slug`, `assignment_title`, `passed`,
`attempts`, `assignment_lifecycle_status`, dan `assignment_created_at`.
`enrollment_status` adalah kemajuan Pembelajar, bukan siklus hidup penugasan
(`active` / `paused` / `completed`).

## Perbedaan dari ekspor lama

* **Persetujuan kebijakan tidak tersedia.** Platform ini tidak memiliki domain
  kebijakan — tidak ada `/policies`, `/policy_acceptances`, atau resource
  `/v1` yang setara. Jangan perlakukan kolom-kolom tersebut sebagai pemetaan yang tertunda. Kolom-kolom itu
  berada di luar cakupan.
* **Tambahan direktori dihilangkan, tidak diisi null.** Departemen, jabatan,
  atasan, dan lokasi tidak ada pada `/v1`. Kueri tidak membuat
  kolom kosong untuk data tersebut.
* **Tanggal jatuh tempo disertakan** meskipun ekspor lama tidak memilikinya,
  karena `Enrollment.due_at` tersedia pada API.
* **Nama kursus mengutamakan judul katalog.** `Course.title` adalah nama
  modul. `Assignment.title` hanya digunakan ketika baris katalog tidak ada
  (dihapus atau tidak dipublikasikan).
* **Long-form, tidak dipivot.** Satu baris per pendaftaran, bukan satu baris per
  orang dengan satu kolom per modul.

## Langkah berikutnya

<CardGroup cols={2}>
  <Card title="Penyiapan Power BI dan Excel" href="/id/developers/v1/powerbi">
    Kredensial, paginasi, dan memuat kueri ini di Power BI atau Excel.
  </Card>

  <Card title="Log phishing email" href="/id/developers/v1/reports/email-phishing-log">
    Interaksi phishing tingkat peristiwa selama 12 bulan terakhir.
  </Card>

  <Card title="Pengguna paling rentan" href="/id/developers/v1/reports/most-susceptible-users">
    Rekapitulasi klik, kredensial, dan pelaporan per orang selama 12 bulan.
  </Card>

  <Card title="Kunci API" href="/id/developers/developer-hub/api-keys">
    Berikan `training:read` dan `course:read` pada kunci yang memperbarui laporan ini.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.