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

# Laporan Skrining AML: Hit, Skor & JSON

> Baca respons skrining AML Didit: hit, sanksi, PEP, media negatif, skor risiko, skor kecocokan, data terskrining, dan pemantauan berkelanjutan.

## Gambaran Umum

Skrining AML mencocokkan identitas subjek yang telah diverifikasi dengan kumpulan data sanksi global, PEP, daftar pantauan, dan media negatif. Setiap kecocokan mengembalikan entitas yang cocok, kumpulan data yang menghasilkan kecocokan tersebut, dua skor — `match_score` (keyakinan identitas) dan `risk_score` (risiko entitas) — serta rincian terstruktur berdasarkan sumber (`pep_matches[]`, `sanction_matches[]`, `warning_matches[]`, `adverse_media_matches[]`). Nilai `score` agregat adalah `risk_score` tertinggi di antara kecocokan yang tidak ditandai sebagai `False Positive`.

Bentuk yang sama dikembalikan oleh skrining AML pada sesi pengguna (KYC), sesi bisnis (KYB), dan API AML mandiri.

![Tangkapan layar laporan skrining AML Didit dengan kecocokan sanksi, PEP, dan media negatif](https://mintcdn.com/didit-0f962782/z6T2GHM4Zh-iSj-K/images/aml-screening-report.png?fit=max\&auto=format\&n=z6T2GHM4Zh-iSj-K\&q=85\&s=5b74561abdd242f108fee1b429ff5020)

## Tempat kemunculannya dalam respons API

Pada endpoint keputusan sesi, skrining AML dikembalikan sebagai array jamak **`aml_screenings[]`**. Setiap entri berhubungan dengan satu eksekusi AML dalam alur kerja (pemeriksaan AML yang berjalan dua kali menghasilkan dua entri dengan nilai `node_id` yang berbeda).

```text theme={null}
GET /v3/session/{sessionId}/decision/
  ──▶ { "aml_screenings": [ { node_id, status, total_hits, hits, … }, … ] }
```

AML mandiri dan sesi bisnis mengembalikan bentuk per rekaman yang sama. Kolom-kolom di bawah ini mencerminkan skema kanonis pada halaman [Model data](https://docs.didit.me/id/reference/data-models.md#skrining-aml).

## Tiga skor, bukan satu keputusan tunggal

`status` adalah sebuah keputusan; angka-angka yang mendasarinya berada di dalam payload yang sama. Baca angka-angka tersebut saat Anda membangun penentuan tingkat risiko sendiri (misalnya menggabungkan risiko AML dengan jawaban kuesioner seperti sumber kekayaan atau deklarasi mandiri PEP) alih-alih hanya membuat percabangan berdasarkan `Approved` / `In Review` / `Declined`:

| Skor | Lokasi | Skala | Jawaban |
| - | - | - | - |
| `hits[].match_score` | per kecocokan | 0-100 | Apakah kecocokan ini berasal dari orang yang sama dengan orang yang diskrining? Menentukan `review_status` awal dari kecocokan tersebut. |
| `hits[].risk_score` | per kecocokan | 0-100 | Seberapa berisiko entitas yang cocok? Ditentukan oleh kategori kecocokan (sanksi, PEP, kejahatan, ...). |
| `score` | per skrining | 0-100 | `risk_score` tertinggi di antara kecocokan yang tidak ditandai sebagai `False Positive`. Nilai inilah yang dibandingkan dengan ambang batas persetujuan / peninjauan untuk menghasilkan `status`. |

Ketiganya ada di setiap tempat laporan AML dikirimkan: `GET /v3/session/{sessionId}/decision/`, objek `decision` pada webhook `status.updated` dan `data.updated` di **setiap** versi webhook (V3 `aml_screenings[]`, serta bentuk tunggal versi lama V2 / V1 `aml`), dan API AML mandiri. Konsumen yang hanya melihat label ditandai / bersih sebenarnya membaca `status` (atau `review_status` dari kecocokan) dan melewatkan skor di sampingnya. Konsol menampilkan angka yang sama: header bagian AML memuat agregat **Skor risiko**, dan setiap baris pada tabel kecocokan memuat **Skor kecocokan** dan **Skor risiko** dengan rincian saat kursor diarahkan ke baris tersebut.

## Skema

Lihat [Skrining AML dalam referensi Model Data](https://docs.didit.me/id/reference/data-models.md#skrining-aml) untuk skema kanonikal. Kolom tingkat atas:

| Kolom | Tipe | Catatan |
| - | - | - |
| `status` | `Not Finished` \| `Approved` \| `Declined` \| `In Review` | Status tingkat fitur (`FeatureStatusChoices`). Mengendalikan aturan alur kerja dan layar peninjauan manual. |
| `total_hits` | integer | Jumlah entri dalam `hits[]`. `0` jika tidak ada kecocokan. |
| `entity_type` | `person` \| `company` | Jenis subjek yang diskrining. Perusahaan dan individu menggunakan logika pencocokan yang berbeda. |
| `score` | float (0-100) \| null | Skor risiko AML agregat — `risk_score` tertinggi di antara hit yang tidak ditandai `False Positive`. `0` jika tidak ada kemungkinan kecocokan; `null` hingga skrining dijalankan. |
| `hits` | `Hit[]` | Satu entri per rekaman yang cocok, **termasuk** hit yang diklasifikasikan otomatis sebagai `False Positive` (tetap dicantumkan tetapi dikecualikan dari `score` agregat). Lihat kolom per-hit di bawah. |
| `screened_data` | object | Nilai tepat yang dikirimkan Didit ke skrining: `full_name`, `date_of_birth`, `nationality` (ISO 3166-1 alpha-2), `document_number`. Berguna untuk menjelaskan hit kepada peninjau atau mengaudit apa yang dicari. |
| `is_ongoing_monitoring_enabled` | boolean | `true` setelah Anda mengaktifkan pemantauan berkelanjutan untuk sesi ini. |
| `next_ongoing_monitoring_bill_date` | string \| null | `YYYY-MM-DD` dari perpanjangan **penagihan** tahunan berikutnya (`last_aml_bill_date` + 365 hari). `null` hingga pemantauan diaktifkan. Ini bukan tanggal skrining — lihat `last_ongoing_screening_at` di bawah. |
| `last_ongoing_screening_at` | string (ISO 8601) \| null | Kapan pemantauan berkelanjutan terakhir kali **selesai** melakukan skrining ulang pada rekaman ini, baik hasilnya berubah maupun tidak. `null` jika rekaman belum pernah diskrining ulang sejak kolom ini dirilis — tidak pernah diisi secara retroaktif berdasarkan tanggal pengaktifan atau penagihan. |
| `last_ongoing_screening_datasets_updated_at` | string (ISO 8601) \| null | Tanggal pembaruan dataset AML terbaru yang dilaporkan penyedia pada saat skrining tersebut. `null` jika penyedia tidak melaporkan tanggal dataset; tidak pernah diperkirakan. |
| `warnings` | `Warning[]` | Tag peringatan khusus AML. Lihat [Peringatan AML](https://docs.didit.me/id/core-technology/aml-screening/warnings-aml-screening.md). |
| `node_id` | string \| null | Mengidentifikasi node graf alur kerja yang menghasilkan eksekusi AML ini pada respons sesi `/v3/`. Respons API AML mandiri menghilangkannya. |

### Kolom per-hit

Setiap entri dalam `hits[]` memiliki kolom-kolom berikut (subset yang ditampilkan). Array sumber kecocokan — `pep_matches[]`, `sanction_matches[]`, `warning_matches[]`, `adverse_media_matches[]` — hanya diisi untuk dataset yang memuat hit tersebut.

| Kolom | Tipe | Catatan |
| - | - | - |
| `id` | string | Pengidentifikasi hit yang stabil: `hit_` diikuti oleh 24 karakter heksadesimal. Entitas cocok yang sama mempertahankan `id` yang sama saat subjek diskrining lagi. Gunakan ini sebagai `hit_id` saat memperbarui `review_status` melalui endpoint status hit AML. |
| `caption` | string | Nama utama entitas sebagaimana disimpan dalam dataset. |
| `datasets` | string\[] | Kategori risiko tempat entitas terdaftar: `PEP` (beserta tingkatnya, `PEP Level 1` hingga `PEP Level 4`), `Sanctions`, `Adverse Media`, `Warnings and Regulatory Enforcement`, `Fitness and Probity`, `SIP`, `SIE`, atau `Insolvency`, dan `Other Lists` jika sumber entitas tidak mencantumkan kategori-kategori ini. |
| `match_score` | number (0-100) | Keyakinan identitas — seberapa besar kemungkinan hit tersebut merupakan orang yang sama. Hit di bawah `aml_match_score_threshold` (default `93`) pada awalnya berstatus `False Positive`; hit pada atau di atas ambang batas tersebut pada awalnya berstatus `Unreviewed`. Lihat [Skor kecocokan AML](https://docs.didit.me/id/core-technology/aml-screening/aml-match-score.md). |
| `risk_score` | number (0-100) | Risiko entitas — seberapa berisiko entitas yang cocok. `risk_score` tertinggi di antara hit non-`False Positive` menjadi `score` tingkat atas. Lihat [Skor risiko AML](https://docs.didit.me/id/core-technology/aml-screening/aml-risk-score.md). |
| `score` | number (0-1) | Skor kecocokan berbobot yang **sudah tidak digunakan lagi**. Gunakan `match_score` sebagai gantinya. |
| `match` | boolean \| null | Penanda kecocokan tepat lama. Lebih disarankan menggunakan `match_score` + `review_status`. |
| `target` | boolean \| null | Apakah entitas tersebut merupakan sasaran langsung dalam daftar. |
| `review_status` | `Unreviewed` \| `Confirmed Match` \| `False Positive` \| `Inconclusive` | Nilai awal diturunkan dari `match_score` vs `aml_match_score_threshold`. Dapat diubah melalui endpoint status hit AML; memperbaruinya akan memicu webhook `data.updated` tetapi **tidak** secara otomatis menghitung ulang `status` fitur — gunakan endpoint status AML atau peninjauan konsol untuk hal tersebut. |
| `score_breakdown` | object | Cara penghitungan `match_score`: skor nama/tanggal lahir/negara, bobot, kontribusi, dan efek "kunci emas" nomor dokumen (`MATCH` menimpa menjadi 100, `NEUTRAL` mempertahankan skor dasar, `HARD_MISMATCH` memberikan penalti). |
| `properties` | object | Atribut dataset mentah (nama, alias, tanggal lahir, kewarganegaraan, …). Berguna untuk ajudikasi. |
| `url` | string \| null | URL sumber untuk entitas yang cocok, jika tersedia. |
| `rca_name` | string \| null | Jika hit merupakan kerabat/rekan dekat (RCA), nama orang terkait yang melaluinya kecocokan terjadi. |
| `pep_matches[]` | object\[] | Posisi PEP, penerbit, tanggal lahir, dan pendidikan untuk hit tersebut. |
| `sanction_matches[]` | object\[] | Nama daftar sanksi, program, otoritas pemberi sanksi, tanggal dicantumkan, dan URL sumber. |
| `warning_matches[]` | object\[] | Rekaman daftar pantauan umum atau tindakan penegakan hukum. |
| `adverse_media_matches[]` | object\[] | Media negatif per artikel: judul utama, ringkasan, sentimen, URL sumber, tanggal publikasi, kata kunci. |
| `adverse_media_details` | object \| null | Sentimen media negatif agregat dan jumlah kata kunci di seluruh hit. |
| `risk_view` | object | Rincian risiko berbobot kategori, negara, dan kejahatan untuk hit (`risk_level`, `risk_scores`, `weightage`). |
| `linked_entities[]` | object\[] | Entitas terkait yang dihubungkan oleh dataset ke hit (misalnya, keluarga atau rekan bisnis). |
| `first_seen` / `last_seen` | string \| null | Kapan dataset pertama/terakhir kali mengamati entri ini. |
| `additional_information` | object | Data tambahan bentuk bebas dari penyedia dataset. |

> [!NOTE]
>
> Hit yang diklasifikasikan sebagai `False Positive` (karena `match_score` berada di bawah ambang batas skor kecocokan, atau karena peninjau menandainya) tetap berada di `hits[]` untuk tujuan auditabilitas. Hit tersebut hanya dikecualikan dari penghitungan `score` agregat.

### Pemantauan berkelanjutan

Ketika `is_ongoing_monitoring_enabled` bernilai `true`, Didit melakukan skrining ulang terhadap subjek secara terus-menerus dan mengirimkan kembali laporan AML setiap kali ada temuan kecocokan yang ditambahkan, dihapus, atau diubah. Skrining ulang yang mengubah status AML akan memicu webhook `status.updated`; skrining ulang yang hanya mengubah data temuan kecocokan akan memicu `data.updated`. Jendela pemantauan berjalan dari `last_aml_bill_date` selama 365 hari; `next_ongoing_monitoring_bill_date` menunjukkan kapan perpanjangan tahunan berikutnya jatuh tempo.

Sinyal-sinyal tersebut semuanya digerakkan oleh perubahan, sehingga subjek yang diskrining ulang selama berbulan-bulan tanpa adanya temuan kecocokan baru tidak akan menghasilkan sinyal apa pun. `last_ongoing_screening_at` adalah satu-satunya kolom yang diperbarui pada **setiap** eksekusi yang selesai, dan [endpoint riwayat skrining](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md#membuktikan-bahwa-pemantauan-berjalan) mencantumkan setiap eksekusi secara individual — termasuk yang tidak mengubah apa pun. Lihat [Pemantauan AML berkelanjutan](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md) untuk siklus hidup selengkapnya.

> [!WARNING]
>
> Tiga tanggal pada laporan ini memiliki tiga arti yang berbeda. `next_ongoing_monitoring_bill_date` adalah saat Anda ditagih berikutnya. `last_ongoing_screening_at` adalah saat subjek terakhir kali benar-benar diskrining. `last_ongoing_screening_datasets_updated_at` adalah saat daftar di balik skrining tersebut terakhir kali diperbarui oleh penyedia. Hanya tanggal kedua yang membuktikan bahwa kontrol tersebut benar-benar dijalankan.

## Nilai status

| Nilai | Makna |
| - | - |
| `Not Finished` | AML belum dieksekusi untuk sesi/node ini. |
| `Approved` | Skor agregat berada pada atau di bawah ambang batas persetujuan (default `80`) — termasuk saat tidak ada temuan kecocokan atau setiap temuan kecocokan adalah `False Positive` (skor `0`). |
| `In Review` | Skor agregat berada di atas ambang batas persetujuan (dan pada atau di bawah ambang batas peninjauan), atau `COULD_NOT_PERFORM_AML_SCREENING` dipicu. |
| `Declined` | Skor agregat berada di atas ambang batas peninjauan (default `100`, sehingga penolakan otomatis hanya terjadi setelah Anda menurunkannya), atau status diatur secara manual. |

Ambang batas dapat dikonfigurasi per node alur kerja — lihat [Skor risiko AML](https://docs.didit.me/id/core-technology/aml-screening/aml-risk-score.md). Aturan status kustom digabungkan dengan status turunan menggunakan urutan prioritas `Declined` > `In Review` > `Approved`; peninjau juga dapat mengganti status AML dari konsol atau endpoint status AML.

## Contoh

### Approved — tidak ada temuan

```json theme={null}
{
  "aml_screenings": [
    {
      "node_id": "aml-1",
      "status": "Approved",
      "total_hits": 0,
      "entity_type": "person",
      "score": 0,
      "hits": [],
      "screened_data": {
        "full_name": "Jane Doe",
        "nationality": "US",
        "date_of_birth": "1990-06-12",
        "document_number": "P9876543"
      },
      "is_ongoing_monitoring_enabled": false,
      "last_ongoing_screening_at": null,
      "last_ongoing_screening_datasets_updated_at": null,
      "next_ongoing_monitoring_bill_date": null,
      "warnings": []
    }
  ]
}
```

### In Review — PEP + temuan media negatif

Semua nama, URL, dan artikel di bawah ini adalah fiktif.

```json theme={null}
{
  "aml_screenings": [
    {
      "node_id": "aml-1",
      "status": "In Review",
      "total_hits": 1,
      "entity_type": "person",
      "score": 85,
      "hits": [
        {
          "id": "hit_7c1e9a40b2d35f86e0a4c912",
          "caption": "John Q. Exampleton",
          "datasets": ["PEP"],
          "match_score": 96,
          "risk_score": 85,
          "score": 0.97,
          "match": false,
          "target": null,
          "review_status": "Unreviewed",
          "properties": {
            "name": ["John Q. Exampleton"],
            "alias": ["Johnny Example"],
            "birthDate": ["1974"],
            "birthPlace": ["Springfield"]
          },
          "score_breakdown": {
            "name_score": 95,
            "name_weight": 60,
            "name_weight_normalized": 70.59,
            "name_contribution": 67.06,
            "dob_score": 100,
            "dob_weight": 25,
            "dob_weight_normalized": 29.41,
            "dob_contribution": 29.41,
            "country_score": 0,
            "country_weight": 15,
            "country_weight_normalized": 0,
            "country_contribution": 0,
            "document_number_match_type": "NEUTRAL",
            "document_number_effect": "No document number provided for screening",
            "total_score": 96
          },
          "pep_matches": [
            {
              "list_name": "Example PEP Registry",
              "publisher": "Example Registry",
              "matched_name": "John Q. Exampleton",
              "pep_position": "Regional council member",
              "date_of_birth": "1974-01-01",
              "place_of_birth": "Springfield",
              "source_url": "https://example.org/registry/entities/Q0000001"
            }
          ],
          "sanction_matches": [],
          "warning_matches": [],
          "adverse_media_matches": [
            {
              "country": "freedonia",
              "headline": "Court opens inquiry into council hiring irregularities",
              "summary": "John Q. Exampleton is named in a legal investigation regarding irregularities in public hiring.",
              "sentiment": "moderately negative",
              "sentiment_score": -2,
              "source_url": "https://example-news.org/articles/12345",
              "publication_date": "2025-06-09T10:19:10",
              "adverse_keywords": ["fraud", "irregularities"]
            }
          ],
          "adverse_media_details": {
            "sentiment": "Moderately Negative",
            "sentiment_score": -2,
            "entity_type": "person",
            "adverse_keywords": { "fraud": 3, "corruption": 2 }
          },
          "risk_view": {
            "categories": { "score": 100.0, "weightage": 50, "risk_level": "High", "risk_scores": { "PEP": 100.0 } },
            "countries":  { "score": 0.0,   "weightage": 30, "risk_level": "Low",  "risk_scores": {} },
            "crimes":     { "score": 0.0,   "weightage": 20, "risk_level": "Low",  "risk_scores": {} },
            "custom_list": {}
          },
          "linked_entities": [
            { "name": ["Mary Exampleton"], "relation": [], "details": [], "active": [], "status": [] }
          ],
          "first_seen": "2025-01-18T00:00:00",
          "last_seen": "2025-06-13T00:00:00"
        }
      ],
      "screened_data": {
        "full_name": "John Q. Exampleton",
        "nationality": "US",
        "date_of_birth": "1974-01-01",
        "document_number": null
      },
      "is_ongoing_monitoring_enabled": true,
      "next_ongoing_monitoring_bill_date": "2027-05-17",
      "warnings": [
        {
          "feature": "AML",
          "risk": "POSSIBLE_MATCH_FOUND",
          "additional_data": null,
          "log_type": "warning",
          "short_description": "Possible match found in AML screening",
          "long_description": "The Anti-Money Laundering (AML) screening process identified potential matches with watchlists or high-risk databases, requiring further review.",
          "node_id": "aml-1"
        }
      ]
    }
  ]
}
```

## Terkait

* [Peringatan AML](https://docs.didit.me/id/core-technology/aml-screening/warnings-aml-screening.md) — setiap kode peringatan yang dapat dimunculkan AML
* [Skor risiko AML](https://docs.didit.me/id/core-technology/aml-screening/aml-risk-score.md) dan [Skor kecocokan AML](https://docs.didit.me/id/core-technology/aml-screening/aml-match-score.md) — bagaimana kedua skor dihitung
* [Pemantauan AML berkelanjutan](https://docs.didit.me/id/core-technology/aml-screening/continuous-monitoring-aml-screening.md) — mengaktifkan dan menggunakan event pemantauan
* [Database daftar pantauan](https://docs.didit.me/id/core-technology/aml-screening/watchlist-database-aml-screening.md) — set data yang dicakup
* [Model data — skrining AML](https://docs.didit.me/id/reference/data-models.md#skrining-aml) — skema kanonis
* [Webhook](https://docs.didit.me/id/integration/webhooks.md) — `status.updated` dipicu saat AML mengubah status sesi; perubahan status peninjauan temuan kecocokan dan pembaruan data pemantauan memicu `data.updated`


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