> ## 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.

# Peringatan & Kode Error Verifikasi Identitas

> Daftar peringatan modul Verifikasi Identitas Didit, termasuk pemicu auto-decline, kode manipulasi, serta penyebab dan solusinya.

## Ikhtisar

Peringatan pada laporan verifikasi identitas menandai setiap kondisi yang ditemukan Didit saat membaca dan memvalidasi dokumen. Peringatan tersebut masuk ke array `warnings[]` pada setiap item `id_verifications[]` (lihat [Laporan verifikasi identitas](https://docs.didit.me/id/core-technology/id-verification/report-id-verification.md)), dengan struktur yang dijelaskan dalam [Model data: objek Peringatan](https://docs.didit.me/id/reference/data-models.md#objek-peringatan): `feature`, `risk`, `additional_data`, `log_type`, `short_description`, `long_description`, `node_id`.

Setiap peringatan memiliki tiga lapisan:

1. **Kode `risk`**: pengenal yang stabil dan dapat Anda cocokkan dalam kode Anda.
2. **`log_type`**: diturunkan dari tindakan yang dikonfigurasi untuk risiko tersebut saat evaluasi. **Tolak → `error`**, **Tinjau → `warning`**, selain itu → `information`.
3. **Dampak keputusan**: ditetapkan oleh grup risiko yang dapat dikonfigurasi pada alur kerja. Kode `risk` yang sama dapat diarahkan ke **Setujui**, **Tinjau**, atau **Tolak** tergantung pada cara aplikasi Anda dikonfigurasi.

## Kondisi penolakan otomatis

Dalam alur kerja, risiko berikut selalu memaksa laporan verifikasi identitas (dan sesi) menjadi `Declined`. Risiko ini tidak dapat dikonfigurasi:

| Risiko | Pemicu |
| - | - |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | Jenis dokumen yang dikirim tidak ada dalam daftar dokumen yang diizinkan untuk aplikasi Anda. `additional_data` menyertakan `issuing_state`, `document_type`, `document_subtype`, `document_region`, dan `document_region_with_subtype` agar Anda dapat mengaktifkan dokumen yang tepat dalam alur kerja Anda. |
| `DOCUMENT_EXPIRED` | Tanggal kedaluwarsa dokumen sudah lewat pada saat pengambilan gambar. |
| `PORTRAIT_IMAGE_NOT_DETECTED` | Tidak ada foto potret yang dapat ditemukan pada dokumen. |
| `ID_DOCUMENT_IN_BLOCKLIST` | Dokumen cocok dengan entri dalam daftar blokir aplikasi Anda. |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | Swafoto yang diambil kamera depan saat pengambilan dokumen cocok dengan wajah dalam daftar blokir wajah Anda. |
| `AGE_BELOW_MINIMUM` | Hanya untuk alur kerja verifikasi usia adaptif: usia yang diekstrak di bawah usia minimum. |
| `AGE_NOT_DETECTED` | Hanya untuk alur kerja verifikasi usia adaptif: usia tidak dapat diekstrak dari dokumen. |

Untuk **API OCR mandiri**, kumpulan penolakan tanpa syarat adalah `DOCUMENT_EXPIRED`, `MINIMUM_AGE_NOT_MET`, `PORTRAIT_IMAGE_NOT_DETECTED`, `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED`, dan `PUBLIC_DOCUMENT_IMAGE_DETECTED`. Dalam alur kerja, usia minimum dapat dikonfigurasi (default Tolak), dan ketiga risiko liveness dokumen ditentukan berdasarkan ambang batas (lihat di bawah).

Risiko yang dapat dikonfigurasi pada API tersebut menggunakan `DECLINE` atau `NO_ACTION`, bukan hasil Tinjauan, sebagai parameter permintaan. Satu-satunya hasil Tinjauan yang dapat dikembalikan API ini tidak dapat dikonfigurasi: ketika pemeriksaan liveness dokumen yang diminta tidak menghasilkan skor yang dapat digunakan, responsnya adalah `In Review` dengan peringatan `DOCUMENT_LIVENESS_NOT_COMPUTED` (lihat [Liveness dokumen](#liveness-dokumen-manipulasi)).

| Parameter permintaan | Risiko | Default |
| - | - | - |
| `invalid_mrz_action` | `MRZ_VALIDATION_FAILED`, `MRZ_NOT_DETECTED` | `DECLINE` |
| `inconsistent_data_action` | `DATA_INCONSISTENT`, `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME`, `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS` | `DECLINE` |
| `expiration_date_not_detected_action` | `EXPIRATION_DATE_NOT_DETECTED` | `NO_ACTION` |
| `critical_field_occlusion_action` | `CRITICAL_FIELD_OCCLUSION_DETECTED` | `DECLINE` |
| `document_or_personal_number_format_mismatch_action` | `DOCUMENT_NUMBER_FORMAT_MISMATCH`, `PERSONAL_NUMBER_FORMAT_MISMATCH` | `NO_ACTION` |

## Pengaturan verifikasi yang dapat dikonfigurasi

Di konsol Didit, sisa risiko ID dikelompokkan ke dalam pengaturan yang memungkinkan Anda menetapkan tindakan ke **Setujui**, **Tinjau**, atau **Tolak** (per alur kerja, dan per node pada alur kerja graf):

| Grup | Risiko | Tindakan default |
| - | - | - |
| **Usia Minimum** | `MINIMUM_AGE_NOT_MET` | Tolak |
| **Usia Maksimum** | `MAXIMUM_AGE_EXCEEDED` | Tolak |
| **Pengguna Duplikat** | `POSSIBLE_DUPLICATED_USER` (dilewati saat nomor dokumen ada di daftar izin dokumen Anda) | Setujui (informasi) |
| **Kode Tidak Valid** | `QR_NOT_DETECTED`, `BARCODE_NOT_DETECTED`, `QR_VALIDATION_FAILED`, `BARCODE_VALIDATION_FAILED` | Setujui (informasi) |
| **MRZ Tidak Valid** | `MRZ_VALIDATION_FAILED`, `MRZ_NOT_DETECTED` | Setujui (informasi) |
| **Inkonsistensi Data** | `DATA_INCONSISTENT`, `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME`, `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS`, `DOCUMENT_SIDES_MISMATCH`, `ID_VERIFICATION_DATA_MISMATCH_BETWEEN_DOCUMENTS` | Setujui (informasi) |
| **Validasi Tidak Valid** | `INVALID_DATE`, `COULD_NOT_RECOGNIZE_DOCUMENT`, `DOCUMENT_NUMBER_NOT_DETECTED`, `COULD_NOT_DETECT_DOCUMENT_TYPE`, `NAME_NOT_DETECTED`, `DATE_OF_BIRTH_NOT_DETECTED` | Tinjau |
| **Ketidakcocokan Detail yang Diharapkan** | `FULL_NAME_MISMATCH_WITH_PROVIDED`, `GENDER_MISMATCH_WITH_PROVIDED`, `DOB_MISMATCH_WITH_PROVIDED`, `COUNTRY_MISMATCH_WITH_PROVIDED`, `NATIONALITY_MISMATCH_WITH_PROVIDED`, `IDENTIFICATION_NUMBER_MISMATCH_WITH_PROVIDED` | Tinjau |
| **Tanggal Kedaluwarsa Tidak Terdeteksi** | `EXPIRATION_DATE_NOT_DETECTED` | Setujui (informasi) |
| **Ketidakcocokan Format Nomor Dokumen atau Nomor Pribadi** | `DOCUMENT_NUMBER_FORMAT_MISMATCH`, `PERSONAL_NUMBER_FORMAT_MISMATCH` (satu tindakan bersama) | Tinjau |
| **Kolom Penting Tertutup** | `CRITICAL_FIELD_OCCLUSION_DETECTED` | Tinjau |
| **Alamat Tidak Terurai** | `UNPARSED_ADDRESS` | Setujui (informasi) |
| **Kualitas Gambar** | `IMAGE_TOO_BLURRY`, `IMAGE_TOO_DARK`, `IMAGE_TOO_BRIGHT` (satu tindakan per risiko) | Setujui (informasi) |
| **Dokumen Tanpa Potret** | `DOCUMENT_HAS_NO_PORTRAIT` | Tinjau |
| **Wajah duplikat di Tangkapan senyap** | `FRONT_CAMERA_DUPLICATED_FACE`, `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` (satu tindakan bersama) | Setujui (informasi) |
| **Duplikat Tangkapan senyap dengan nama berbeda** | `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` (hanya dapat membuat hasil wajah duplikat lebih ketat) | Tinjau |
| **Duplikat Tangkapan senyap dengan tanggal lahir berbeda** | `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` (hanya dapat membuat hasil wajah duplikat lebih ketat) | Tinjau |

Risiko duplikat Tangkapan senyap dan risiko daftar blokir berasal dari [Pencarian Wajah pada swafoto yang diambil saat pengambilan dokumen](https://docs.didit.me/id/core-technology/face-search/overview.md#swafoto-yang-diambil-selama-pengambilan-dokumen). Pencarian berjalan selama **Pencarian wajah Tangkapan senyap** (`document_selfie_face_search_enabled`) aktif, yang merupakan default, dan Pencarian Wajah tidak dimatikan pada langkah Liveness. Jika tidak, keenam risiko ini tidak akan dimunculkan.

Dua keluarga risiko ID bersifat **berbasis ambang batas**, bukan sakelar Setujui/Tinjau/Tolak:

* **Liveness dokumen**: `SCREEN_CAPTURE_DETECTED`, `PRINTED_COPY_DETECTED`, `PORTRAIT_MANIPULATION_DETECTED`. Setiap jenis penipuan memiliki ambang batas tolak dan peninjauan sendiri: skor di bawah ambang tolak → `error` + Ditolak; di bawah ambang peninjauan → `warning` + Dalam peninjauan; selain itu `information`.
* **Pencocokan wajah lintas kamera**: `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY`, diatur oleh `document_selfie_portrait_match_decline_threshold` / `document_selfie_portrait_match_review_threshold`.

### Mengonfigurasi ambang batas liveness dokumen

Di editor alur kerja, ambang batas ini berada pada tab **Pemalsuan** pada langkah Verifikasi Identitas, dengan satu kartu untuk setiap jenis penipuan: **Penggantian potret**, **Salinan cetak**, dan **Tangkapan layar**.

Setiap pemeriksaan memberi dokumen skor dari `0` sampai `100` yang menunjukkan seberapa asli tampilannya. **Skor yang lebih tinggi berarti dokumen lebih mungkin asli.** Dua nilai pada sebuah kartu membagi skala ini menjadi tiga rentang:

| Skor | Hasil |
| - | - |
| Di bawah nilai **Tolak** | `error`, sesi Ditolak |
| Sama dengan atau di atas nilai **Tolak** dan di bawah nilai **Tinjauan** | `warning`, sesi masuk dalam peninjauan |
| Sama dengan atau di atas nilai **Tinjauan** | `information`, pemeriksaan lolos |

Menaikkan salah satu nilai membuat pemeriksaan lebih ketat: lebih banyak sesi masuk ke rentang di atasnya. Menurunkan nilai membiarkan lebih banyak sesi lolos. Di editor, nilai Tolak tidak dapat melewati nilai Tinjauan. Melalui API, nilai Tolak yang lebih tinggi dari nilai Tinjauan menghapus rentang Dalam peninjauan.

Default platform, yang digunakan saat alur kerja tidak menetapkan nilai:

| Jenis penipuan | Ditolak di bawah | Peninjauan di bawah | Kunci konfigurasi alur kerja |
| - | - | - | - |
| Penggantian potret | `35` | `70` | `document_liveness_portrait_replace_decline_threshold`, `document_liveness_portrait_replace_review_threshold` |
| Salinan cetak | `35` | `77` | `document_liveness_printed_copy_decline_threshold`, `document_liveness_printed_copy_review_threshold` |
| Tangkapan layar | `30` | `70` | `document_liveness_screen_replay_decline_threshold`, `document_liveness_screen_replay_review_threshold` |

Mulailah dari default dan ubah satu nilai setiap kali. Setiap kartu menampilkan default-nya dan tombol **Atur ulang ke default**, jadi Anda selalu dapat kembali ke nilai tersebut. Editor juga memperingatkan Anda tentang konfigurasi berikut:

* **Peninjauan di `100`.** Hanya skor sempurna yang lolos, sehingga hampir setiap sesi masuk dalam peninjauan atau ditolak.
* **Tolak di `100`.** Hanya skor sempurna yang terhindar dari penolakan, sehingga hampir setiap sesi ditolak.
* **Kedua nilai di `0`.** Tidak ada skor yang akan ditandai, sehingga pemeriksaan secara efektif nonaktif.

Menetapkan kedua nilai ke angka yang sama menghapus rentang Dalam peninjauan: skor di bawah angka itu ditolak dan skor lainnya lolos.

Ketika **Salinan cetak** dan **Tangkapan layar** sama-sama akan menandai dokumen yang sama, hanya `SCREEN_CAPTURE_DETECTED` yang dilaporkan.

Pencocokan wajah lintas kamera menggunakan gagasan yang sama dengan satu perbedaan pada batas: skor yang sama dengan ambang batas peninjauannya tetap masuk ke Dalam peninjauan.

Empat risiko ID tidak dapat dikonfigurasi dan tidak bergantung pada ambang batas. `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` selalu diarahkan ke **Tinjauan**: swafoto yang mirip dengan wajah dalam daftar blokir, tanpa menjadi kecocokan yang terkonfirmasi, harus dinilai oleh manusia, tidak pernah ditolak secara otomatis dan tidak pernah diabaikan. `BARCODE_SIGNATURE_INVALID` selalu diarahkan ke **Tinjauan**. Peringatan ini hanya muncul ketika barcode memuat tanda tangan otoritas penerbit yang gagal verifikasi kriptografis, sehingga tidak ada konfigurasi yang dapat mengabaikan pemalsuan yang terbukti. `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` selalu berupa **informasi** dan tidak pernah memengaruhi keputusan: peringatan ini menunjukkan keterbatasan katalog dokumen Didit, bukan karakteristik dokumen yang diserahkan, sehingga tidak ada konfigurasi yang dapat menolak atau meninjau pemegang dokumen yang sah.
`FRONT_CAMERA_CAPTURED_DOCUMENT` selalu diarahkan ke **Tinjauan**.
Peringatan ini hanya muncul ketika bingkai kamera depan yang diambil saat dokumen dipindai menampilkan dokumen identitas dan tidak ada orang, sehingga pengambilan yang tidak menunjukkan siapa pemegang dokumen selalu ditinjau oleh manusia.
Peringatan ini diperiksa setiap kali pencocokan swafoto dengan foto dokumen (`is_document_selfie_portrait_match_enabled`) aktif.

## Peringatan yang dihasilkan

Diverifikasi terhadap `collect_ocr_logs`, alur pengambilan dokumen, dan `process_ocr_logs_and_get_status`. Deskripsi singkat di bawah adalah string `short_description` persis yang dikembalikan oleh API.

### Pengenalan dan kualitas dokumen

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `COULD_NOT_RECOGNIZE_DOCUMENT` | Could not validate Document | Sistem tidak dapat memastikan keaslian atau keabsahan dokumen yang dikirim, sering kali karena kualitas gambar yang buruk atau jenis dokumen yang tidak didukung. Kode ini juga digunakan sebagai fallback untuk kegagalan pemrosesan yang tidak dikenali. | Dapat dikonfigurasi: Invalid Validation, default Review |
| `COULD_NOT_DETECT_DOCUMENT_TYPE` | Could not detect document type | Sisi depan dokumen tidak cocok dengan desain dokumen resmi yang dikenal dengan tingkat keyakinan tinggi, atau mesin OCR tidak dapat mengklasifikasikan keluarga dokumen (paspor vs kartu identitas vs SIM/DL). Dokumen yang memuat data valid tetapi tata letaknya tidak cocok dengan desain resmi mana pun (dokumen yang diedit atau dibuat dengan komputer, atau desain baru yang belum didukung) akan masuk ke kode ini. Saat kode ini terpicu, `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` ditekan, karena jenis dokumen tidak diketahui sehingga "tidak didukung" akan bertentangan. | Dapat dikonfigurasi: Invalid Validation, default Review |
| `DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION` | Document not supported for your application | Jenis dokumen yang dikenali tidak ada dalam daftar yang diizinkan untuk aplikasi. `additional_data` berisi negara, jenis dokumen, subjenis, dan subjenis yang disesuaikan dengan wilayah. | `error`: **tolak otomatis** |
| `DOCUMENT_EXPIRED` | Document expired | Saat pengambilan: tanggal kedaluwarsa dokumen sudah lewat (`error`, tolak otomatis). Setelah persetujuan: pemantauan kedaluwarsa berkelanjutan menambahkan peringatan ini dengan `log_type: "warning"` ketika tanggal dokumen yang telah disetujui terlewati, dan status laporan menjadi `Expired`. | `error` saat pengambilan; `warning` dari pemantauan |
| `DOCUMENT_SIDES_MISMATCH` | Document sides mismatch | Gambar depan dan belakang tidak berasal dari dokumen yang sama. | Dapat dikonfigurasi: Data Inconsistency, default information |
| `DOCUMENT_BACK_SIDE_NOT_AVAILABLE` | Back side not available for this document | Alur kerja meminta kedua sisi, sisi depan berhasil dikenali, dan katalog dokumen Didit tidak mencatat sisi belakang untuk dokumen persis ini, sehingga hanya sisi depan yang dapat dikumpulkan. Bukti pada laporan hanya satu sisi. Tidak ada yang salah dengan dokumen yang ditunjukkan, pengguna tidak pernah diminta mengambil ulang, dan pemindaian ulang tidak dapat menambahkan sisi belakang. `additional_data` berisi `front_document_name` yang dikenali. | `information`: tidak pernah memengaruhi keputusan |
| `PORTRAIT_IMAGE_NOT_DETECTED` | Portrait image not detected | Potret tidak dapat ditemukan pada dokumen yang seharusnya memilikinya (ditunda ketika pengguna mengunggah sisi tanpa potret terlebih dahulu). | `error`: **tolak otomatis** |
| `DOCUMENT_HAS_NO_PORTRAIT` | Document has no portrait | Keluarga dokumen yang dikenali tidak pernah memuat foto potret di sisi mana pun (beberapa izin tinggal, kartu kesehatan, sertifikat registrasi, kartu pajak, dan sebagian SIM serta kartu identitas). Ini adalah fakta di tingkat katalog tentang jenis dokumen, bukan masalah kualitas gambar. Memindai ulang dokumen tidak dapat mengubah hasil. | Dapat dikonfigurasi: Document Without Portrait, default Review |
| `IMAGE_TOO_BLURRY` / `IMAGE_TOO_DARK` / `IMAGE_TOO_BRIGHT` | Document image is too blurry / too dark / too bright | Pemeriksaan kualitas gambar menolak unggahan (pengguna diminta mengambil ulang). `additional_data` berisi `side` yang gagal. Pengambilan ulang yang berhasil menghapus peringatan lama. Gerbang ini dilewati pada percobaan terakhir yang diizinkan bagi pengguna, sehingga mereka tidak pernah terblokir sepenuhnya. | Dapat dikonfigurasi per risiko: tindakan Image Quality, default information |

> [!NOTE]
>
> Alur pengambilan juga dapat menolak unggahan dengan kode umpan balik `IMAGE_RESOLUTION_TOO_LOW`, `DOCUMENT_NOT_FULLY_VISIBLE`, `IMAGE_QUALITY_TOO_LOW`, dan `DOCUMENT_OCCLUSION_DETECTED` (jari atau objek dinilai menutupi teks cetak secara fisik). Setiap kode memicu permintaan pengambilan ulang di SDK dan dicatat pada laporan sebagai risiko tersendiri, yang diarahkan oleh pengaturan Image Quality. `DOCUMENT_OCCLUSION_DETECTED` dan `IMAGE_QUALITY_TOO_LOW` berbagi satu tindakan. Kode-kode ini menggambarkan *pengambilan*: pengambilan ulang yang berhasil akan menghapus peringatan. Apakah kolom yang tertutup seharusnya memengaruhi keputusan adalah hal yang terpisah, yaitu `CRITICAL_FIELD_OCCLUSION_DETECTED` di sisi integritas yang dijelaskan di bawah. Kode itu muncul saat keputusan dibuat dan secara default diarahkan ke Review.

> [!TIP]
>
> Jika alur kerja Anda menggunakan Pencocokan Wajah sebagai dasar identitas, bukan potret dokumen, pertimbangkan untuk mengarahkan **Document Without Portrait** ke Decline. Jika tidak, keluarga dokumen tanpa potret akan sampai ke Pencocokan Wajah tanpa apa pun untuk dibandingkan.

### Ekstraksi kolom

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `NAME_NOT_DETECTED` | First name and/or last name not detected | Nama depan dan nama belakang tidak dapat diekstrak. Dikecualikan jika pemegang dokumen memang hanya memiliki satu nama (negara dengan satu nama, atau MRZ itu sendiri hanya memuat satu nama) dan setidaknya satu nilai nama berhasil diekstrak. | Dapat dikonfigurasi: Invalid Validation, default Review |
| `DATE_OF_BIRTH_NOT_DETECTED` | Date of birth not detected | Tanggal lahir tidak dapat diekstrak dari dokumen yang seharusnya memilikinya. | Dapat dikonfigurasi: Invalid Validation, default Review |
| `DOCUMENT_NUMBER_NOT_DETECTED` | Document number not detected | Nomor dokumen maupun nomor pribadi tidak dapat diekstrak. | Dapat dikonfigurasi: Invalid Validation, default Review |
| `EXPIRATION_DATE_NOT_DETECTED` | Expiration date not detected | Tanggal kedaluwarsa tidak dapat diekstrak dari dokumen yang seharusnya memilikinya. | Dapat dikonfigurasi: Expiration Date Not Detected, default information |
| `INVALID_DATE` | Invalid Date | Tanggal pada dokumen (tanggal lahir atau tanggal kedaluwarsa) tidak dapat diurai menjadi tanggal yang valid. Dalam alur pengambilan saat ini, kondisi ini muncul sebagai permintaan pengambilan ulang saat unggahan, bukan sebagai peringatan yang disimpan. Kode ini tetap berada dalam grup routing Invalid Validation dan mungkin muncul pada sesi lama. | Dapat dikonfigurasi: Invalid Validation, default Review |
| `DOCUMENT_NUMBER_FORMAT_MISMATCH` | Format nomor dokumen tidak sesuai | Nomor dokumen tidak sesuai dengan format yang dikonfigurasi untuk jenis dokumen ini. `additional_data` berisi `expected_format` dan `extracted_value`. | Dapat dikonfigurasi: Format Mismatch, default Review |
| `PERSONAL_NUMBER_FORMAT_MISMATCH` | Format nomor pribadi tidak sesuai | Nomor pribadi tidak sesuai dengan format yang dikonfigurasi untuk jenis dokumen ini. | Dapat dikonfigurasi: Format Mismatch, default Review |
| `CRITICAL_FIELD_OCCLUSION_DETECTED` | Kolom dokumen kritis tertutup | Pemeriksaan oklusi melaporkan bahwa kolom cetak kritis secara fisik tertutup pada pengambilan gambar, yaitu nomor identitas, nama, tanggal lahir, atau tanggal kedaluwarsa. Ini adalah sinyal integritas dokumen, bukan sinyal kualitas pengambilan gambar: menutupi nomor yang justru dijadikan acuan rekonsiliasi laporan adalah ciri dokumen yang disunting atau dimanipulasi. Nilai yang terbaca dari kolom yang tertutup dibuang dari hasil ekstraksi dan tidak dikembalikan sebagai nilai yang terkonfirmasi, sehingga risiko `*_NOT_DETECTED` yang sesuai biasanya menyertai peringatan ini. `additional_data` berisi nama kolom yang tertutup di `covered_fields`, dan `covered_identifiers` jika salah satunya menjadi sumber `document_number` atau `personal_number`. | Dapat dikonfigurasi: Critical Field Covered, default Review |

### MRZ, QR, barcode

Ketiga risiko MRZ dilewati untuk jenis dokumen yang MRZ-nya diketahui tidak andal.

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `MRZ_NOT_DETECTED` | MRZ tidak terdeteksi | MRZ tidak dapat ditemukan pada dokumen yang seharusnya memilikinya. | Dapat dikonfigurasi: Invalid MRZ, default informasi |
| `MRZ_VALIDATION_FAILED` | MRZ tidak valid | MRZ gagal validasi checksum atau format. Sering disebabkan oleh pengambilan gambar berkualitas rendah; dapat menjadi indikasi manipulasi. | Dapat dikonfigurasi: Invalid MRZ, default informasi |
| `MRZ_AND_DATA_EXTRACTED_FROM_OCR_NOT_SAME` | MRZ dan data hasil OCR memiliki beberapa ketidaksesuaian | Isi MRZ tidak sesuai dengan OCR zona visual (VIZ). Kemungkinan terjadi perubahan. | Dapat dikonfigurasi: Data Inconsistency, default informasi |
| `QR_NOT_DETECTED` | QR tidak terdeteksi | Kode QR tidak dapat ditemukan pada dokumen yang seharusnya memilikinya. | Dapat dikonfigurasi: Invalid Code, default informasi |
| `QR_VALIDATION_FAILED` | Validasi QR gagal | Isi kode QR tidak dapat divalidasi terhadap bagian lain dokumen. | Dapat dikonfigurasi: Invalid Code, default informasi |
| `BARCODE_NOT_DETECTED` | Barcode tidak terdeteksi | Barcode tidak dapat ditemukan pada dokumen yang seharusnya memilikinya. | Dapat dikonfigurasi: Invalid Code, default informasi |
| `BARCODE_VALIDATION_FAILED` | Validasi barcode gagal | Isi barcode tidak dapat divalidasi terhadap bagian lain dokumen. | Dapat dikonfigurasi: Invalid Code, default informasi |
| `BARCODE_SIGNATURE_INVALID` | Tanda tangan barcode tidak valid | Barcode membawa tanda tangan digital dari otoritas penerbit, dan tanda tangan tersebut tidak lolos verifikasi. Artinya, data dalam barcode bukan data yang ditandatangani otoritas, yang mengindikasikan dokumen palsu atau diubah. Saat ini diperiksa untuk barcode **French 2D-Doc (ANTS)**. Jika tanda tangannya terverifikasi, Didit dapat meningkatkan tingkat kepercayaan pada kolom tanpa memerlukan konfirmasi dari MRZ. Tanda tangan AAMVA (SIM dan kartu identitas AS/Kanada) hanya dideteksi dan dicatat, belum diberlakukan. | Tetap: Review (grup tindakan tersendiri `invalid_barcode_signature_action`; belum dapat dikonfigurasi di konsol/API) |
| `DATA_INCONSISTENT` | Data OCR dalam dokumen tidak konsisten | Data yang diekstrak dari bagian berbeda dokumen tidak sesuai, biasanya antara sisi depan dan belakang dokumen yang sama. | Dapat dikonfigurasi: Data Inconsistency, default informasi |

> [!NOTE]
>
> Verifikasi tanda tangan barcode saat ini mencakup kartu identitas nasional Prancis, yang barcode ANTS 2D-Doc-nya ditandatangani oleh otoritas penerbit. `BARCODE_SIGNATURE_INVALID` hanya dimunculkan ketika pemeriksaan tanda tangan itu sendiri menolak payload. Barcode tanpa tanda tangan, barcode yang ditandatangani otoritas yang belum ada di repositori kepercayaan Didit, atau barcode yang tanda tangannya tidak dapat didekode diperlakukan sebagai data yang tidak terautentikasi dan divalidasi terhadap MRZ serta teks tercetak seperti biasa, tanpa memunculkan risiko ini.
>
> Barcode lisensi mengemudi AS dan Kanada (AAMVA) tidak diverifikasi secara kriptografis: penandatanganan digital di sana bersifat opsional dan spesifik per yurisdiksi, dan tidak ada yurisdiksi yang mempublikasikan kunci verifikasi, sehingga Didit hanya mendeteksi dan mencatat apakah payload membawa tanda tangan; tanda tangannya sendiri tidak pernah diperiksa. Kegagalan tanda tangan AAMVA saat ini bukan sinyal risiko. Payload AAMVA yang dimanipulasi hanya memunculkan `BARCODE_VALIDATION_FAILED`, dan itu pun hanya jika manipulasi juga membuat barcode tidak sesuai dengan data MRZ atau data tercetak/OCR. Tanda tangan palsu pada payload yang secara internal konsisten lolos tanpa sinyal apa pun.
>
> Pengguna tidak pernah diminta mengambil ulang gambar saat `BARCODE_SIGNATURE_INVALID`: tanda tangan yang tidak cocok dengan payload tidak dapat diperbaiki dengan mengambil foto yang lebih baik.

### Pencocokan Identitas

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `ID_DOCUMENT_IN_BLOCKLIST` | Dokumen identitas ada dalam daftar blokir | Dokumen cocok dengan dokumen dalam daftar blokir (tanggal lahir, negara penerbit, dan nomor dokumen yang sama persis) atau dengan nomor dokumen yang diblokir secara manual. `additional_data` berisi referensi sesi yang diblokir. | `error`: **penolakan otomatis** |
| `ID_DOCUMENT_IN_ALLOWLIST` | Dokumen identitas ada dalam daftar izin | Nomor dokumen cocok dengan daftar izin dokumen Anda, sehingga tindakan pengguna duplikat dilewati. `additional_data` berisi `document_number`. | `information` |
| `POSSIBLE_DUPLICATED_USER` | Kemungkinan pengguna duplikat dari sesi lain | Dokumen lain dalam aplikasi Anda memiliki tanggal lahir dan negara penerbit yang sama, serta nama lengkap yang sangat mirip, tetapi dimiliki pengguna yang berbeda (`vendor_data`), terlepas dari status sesi tersebut. `additional_data` berisi referensi sesi duplikat. | Dapat dikonfigurasi: Duplicated User, default informasi |
| `DOCUMENT_NAME_DIFFERENT_FROM_OTHER_APPROVED_DOCUMENTS` | Nama dokumen berbeda dari dokumen lain yang disetujui | Nama pada dokumen ini berbeda dengan dokumen yang sebelumnya disetujui untuk pengguna yang sama. Hanya dihasilkan untuk akun protokol Didit (UserKYC), bukan sesi API standar. | Dapat dikonfigurasi: Data Inconsistency, default informasi |
| `ID_VERIFICATION_DATA_MISMATCH_BETWEEN_DOCUMENTS` | Ketidaksesuaian data antar dokumen verifikasi identitas | Dua dokumen identitas dalam sesi yang sama tidak sesuai pada nama atau tanggal lahir. | Dapat dikonfigurasi: Inkonsistensi Data, informasi default |
| `LOW_FRONT_CAMERA_FACE_MATCH_SIMILARITY` | Swafoto saat pengambilan dokumen tidak cocok dengan potret pada dokumen | Wajah yang diambil dari kamera depan pengguna saat pengambilan dokumen tidak cocok dengan baik dengan potret pada dokumen. | Bergantung pada ambang batas: `error` di bawah ambang penolakan, `warning` pada atau di bawah ambang tinjauan |
| `FRONT_CAMERA_FACE_IN_BLOCKLIST` | Swafoto saat pengambilan dokumen cocok dengan wajah dalam daftar blokir | Wajah dalam swafoto yang diambil dengan kamera depan saat pengambilan dokumen cocok secara meyakinkan dengan wajah dalam daftar blokir Anda, baik wajah itu ditambahkan dari pemeriksaan liveness, dari swafoto pengambilan dokumen sesi lain, maupun melalui unggahan. `additional_data` memuat referensi sesi yang masuk daftar blokir (`blocklisted_session_id`, `blocklisted_session_number`) ketika wajah yang masuk daftar blokir berasal dari sesi, dan `face_image_source` (`front_image_camera_front` atau `back_image_camera_front`) untuk swafoto yang cocok. | `error`: **penolakan otomatis** |
| `POSSIBLE_FRONT_CAMERA_FACE_IN_BLOCKLIST` | Swafoto saat pengambilan dokumen mungkin cocok dengan wajah dalam daftar blokir | Wajah dalam swafoto pengambilan dokumen mirip dengan wajah dalam daftar blokir Anda, tetapi tidak cukup mirip untuk dianggap sebagai kecocokan yang terkonfirmasi. `additional_data` sama seperti di atas. | `warning`: selalu **Tinjau** |
| `FRONT_CAMERA_DUPLICATED_FACE` | Swafoto saat pengambilan dokumen cocok dengan pengguna yang disetujui | Wajah dalam swafoto yang diambil dengan kamera depan saat pengambilan dokumen cocok secara meyakinkan dengan wajah pengguna yang sudah disetujui dalam aplikasi Anda, sehingga orang yang sama mungkin sedang memverifikasi lagi dengan akun lain. `additional_data` memuat sesi yang cocok (`duplicated_session_id`, `duplicated_session_number`) dan `face_image_source` untuk swafoto yang cocok. | Sesuai **Wajah duplikat di Tangkapan senyap** (default **Setujui**, `information`) |
| `POSSIBLE_FRONT_CAMERA_DUPLICATED_FACE` | Swafoto saat pengambilan dokumen mungkin cocok dengan pengguna yang disetujui | Wajah dalam swafoto pengambilan dokumen mirip dengan wajah pengguna yang sudah disetujui dalam aplikasi Anda, tetapi tidak cukup mirip untuk dianggap sebagai kecocokan yang terkonfirmasi. `additional_data` sama seperti di atas. | Sesuai **Wajah duplikat di Tangkapan senyap** (default **Setujui**, `information`) |
| `FRONT_CAMERA_DUPLICATED_FACE_NAME_MISMATCH` | Swafoto pengambilan dokumen cocok dengan pengguna dengan nama yang berbeda | Dimunculkan di atas `FRONT_CAMERA_DUPLICATED_FACE` ketika pengguna yang disetujui diverifikasi dengan nama yang berbeda. `additional_data` menambahkan `name_match_score`; data ini tidak pernah memuat nama pengguna lain. | Sesuai **Duplikat Silent Capture dengan nama yang berbeda** (default **Tinjau**, `warning`) |
| `FRONT_CAMERA_DUPLICATED_FACE_DOCUMENT_MISMATCH` | Swafoto pengambilan dokumen cocok dengan pengguna dengan tanggal lahir yang berbeda | Dimunculkan di atas `FRONT_CAMERA_DUPLICATED_FACE` ketika dokumen identitas pengguna yang disetujui menunjukkan tanggal lahir yang berbeda. Dokumen lain milik orang yang sama (misalnya paspor setelah kartu identitas), dokumen yang diperbarui, atau nomor dokumen yang sama dari negara yang sama tidak ditandai. `additional_data` menambahkan `mismatch_dimensions`, tidak pernah memuat data dokumen pengguna lain. | Sesuai **Duplikat Silent Capture dengan tanggal lahir yang berbeda** (default **Tinjau**, `warning`) |
| `FRONT_CAMERA_CAPTURED_DOCUMENT` | Kamera depan mengambil dokumen identitas, bukan pengguna | Bingkai kamera depan yang diambil saat dokumen dipindai menampilkan dokumen identitas (misalnya kartu yang diangkat ke depan kamera) dan tidak ada orang. Pencocokan swafoto pengambilan dokumen tidak dihitung untuk bingkai tersebut. | Selalu **Tinjau** |

### Liveness dokumen (manipulasi)

Bergantung pada ambang batas per jenis penipuan dalam alur kerja. Pada API OCR mandiri, ketiga risiko ini selalu menolak, dan pemeriksaan yang diminta tetapi tidak menghasilkan skor yang dapat dipakai akan mengembalikan `In Review`, bukan menyetujui.

Skor itu sendiri tercantum di setiap laporan V3 sebagai [`document_liveness`](https://docs.didit.me/id/core-technology/id-verification/report-id-verification#skor-liveness-dokumen), termasuk ketika tidak ada peringatan yang muncul, sehingga dokumen yang disetujui tetap dapat diaudit.

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `SCREEN_CAPTURE_DETECTED` | Tangkapan layar dokumen terdeteksi | Dokumen diambil dari layar, bukan dari dokumen fisik. | `error` di bawah ambang penolakan, `warning` di bawah ambang tinjauan, selain itu `information` |
| `PRINTED_COPY_DETECTED` | Salinan cetak dokumen terdeteksi | Dokumen tampak sebagai salinan cetak, bukan dokumen asli. | Menggunakan tiga kelompok ambang yang sama |
| `PORTRAIT_MANIPULATION_DETECTED` | Manipulasi potret terdeteksi | Area potret tampaknya telah diganti atau diubah. | Menggunakan tiga kelompok ambang yang sama |
| `DOCUMENT_LIVENESS_NOT_COMPUTED` | Pemeriksaan liveness dokumen tidak dapat dihitung | Pemeriksaan liveness dokumen (pemalsuan) yang diminta tidak mengembalikan skor yang dapat dipakai: penyedia gagal, merespons selain 200, atau merespons HTTP 200 dengan `status="ERR"`, sehingga dokumen tidak pernah diperiksa untuk penggantian potret, salinan cetak, atau pemutaran ulang layar. Skor yang hilang bukan bukti bahwa dokumen itu asli. Hanya untuk API OCR mandiri. | `warning` + `In Review` (tidak dapat dikonfigurasi; tidak pernah menimpa `Declined`) |

### Integritas saluran pengambilan

| Risiko | Deskripsi singkat | Penyebab | Dapat dikonfigurasi melalui | Default |
| - | - | - | - | - |
| `INJECTION_ATTACK_DETECTED` | Serangan injeksi terdeteksi | Pengambilan disuntikkan, bukan diambil oleh kamera perangkat itu sendiri: kamera virtual perangkat lunak yang dapat memutar video apa pun, aliran kamera yang dihasilkan oleh halaman atau otomasi browser, kamera yang dibajak (hooked), atau alat instrumentasi yang terpasang pada aplikasi yang memasok bingkai. `additional_data.reasons` hanya mencantumkan alasan yang membuktikannya, dan `source` bernilai `capture_integrity`. Ini berlaku untuk pengambilan dokumen dan untuk swafoto yang diambil untuk pencarian ID. | `id_verification_injection_attack_action` | **Tolak** |

Nilai `log_type` mengikuti tindakan yang dikonfigurasi: `error` untuk Tolak, `warning` untuk Tinjau, dan `information` untuk Tanpa tindakan.
Tindakan yang direkomendasikan: perlakukan sesi yang ditolak sebagai hasil tangkapan yang diinjeksi dan minta pengguna mencoba lagi dengan perangkat fisik menggunakan kamera bawaannya.
Sinyal yang dapat dihasilkan oleh orang sungguhan tidak pernah memicu `INJECTION_ATTACK_DETECTED` dan tetap bersifat informasional.
Aplikasi yang meneruskan kamera asli, misalnya ponsel yang digunakan sebagai webcam atau lapisan efek di atas webcam asli, tidak dilaporkan sebagai serangan injeksi.
Ini adalah deteksi serangan injeksi, yang terpisah dari deteksi serangan presentasi (objek palsu yang ditampilkan ke kamera asli).

### Gambar dokumen publik yang diketahui

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `PUBLIC_DOCUMENT_IMAGE_DETECTED` | Gambar dokumen publik yang dikenal dan tersedia di internet terdeteksi | Gambar dokumen yang dikirim cocok dengan gambar publik di internet yang sudah diketahui (misalnya spesimen, foto pers, atau foto stok dokumen), sehingga tidak mungkin merupakan foto dokumen fisik milik pengguna. Pencocokan menggunakan sidik jari eksak dan perseptual (pHash/dHash) terhadap korpus gambar dokumen publik yang diketahui milik Didit; `additional_data` memuat `match_type` (`exact` atau `perceptual`), `source`, `source_url`, dan `similarity_score` (0-100). | Tetap: Tinjau di alur kerja; **penolakan otomatis** pada API mandiri `/id-verification` |

### Ketidakcocokan detail yang diharapkan

Saat Anda meneruskan `expected_details` ke sesi, Didit memunculkan peringatan ketidakcocokan untuk setiap kolom yang tidak cocok. Satu pengaturan (`expected_details_mismatch_action`, default Tinjau) mengatur perutean semua peringatan ini:

| Risiko | Deskripsi singkat | Penyebab |
| - | - | - |
| `FULL_NAME_MISMATCH_WITH_PROVIDED` | Nama lengkap tidak cocok dengan informasi yang diberikan | Nama yang diberikan memperoleh skor di bawah ambang kecocokan nama terhadap dokumen. |
| `DOB_MISMATCH_WITH_PROVIDED` | Tanggal lahir tidak cocok dengan informasi yang diberikan | Tanggal lahir yang diberikan tidak cocok. |
| `GENDER_MISMATCH_WITH_PROVIDED` | Jenis kelamin tidak cocok dengan informasi yang diberikan | Jenis kelamin yang diberikan tidak cocok. |
| `COUNTRY_MISMATCH_WITH_PROVIDED` | Negara tidak cocok dengan informasi yang diberikan | Negara yang diberikan tidak cocok dengan `issuing_state`. |
| `NATIONALITY_MISMATCH_WITH_PROVIDED` | Kewarganegaraan tidak cocok dengan informasi yang diberikan | Kewarganegaraan yang diberikan tidak cocok. |
| `IDENTIFICATION_NUMBER_MISMATCH_WITH_PROVIDED` | Nomor identifikasi tidak cocok dengan informasi yang diberikan | Nomor ID yang diberikan tidak cocok dengan nomor dokumen, nomor pribadi, atau nomor pajak. |

Setiap peringatan ketidakcocokan memuat nilai yang diharapkan dan nilai yang diekstrak di `additional_data`.

### Usia

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `MINIMUM_AGE_NOT_MET` | Usia minimum tidak terpenuhi | Pemegang dokumen berada di bawah usia minimum yang dikonfigurasi (global atau per negara/negara bagian). `additional_data` memuat `min_age_allowed` dan `user_age`. | Dapat dikonfigurasi: Usia Minimum, default Tolak (`error`); penolakan tanpa syarat pada API OCR mandiri |
| `MAXIMUM_AGE_EXCEEDED` | Melebihi usia maksimum | Pemegang dokumen berada di atas usia maksimum yang dikonfigurasi. `additional_data` memuat `max_age_allowed` dan `user_age`. | Dapat dikonfigurasi: Usia Maksimum, default Tolak (`error`) |
| `AGE_NOT_DETECTED` | Usia tidak terdeteksi | Alur kerja verifikasi usia adaptif: usia tidak dapat diekstrak dari dokumen. | `error`: **penolakan otomatis** |
| `AGE_BELOW_MINIMUM` | Usia di bawah minimum | Alur kerja verifikasi usia adaptif: usia yang diekstrak berada di bawah minimum. | `error`: **penolakan otomatis** |

### Alamat

| Risiko | Deskripsi singkat | Penyebab | Tingkat keparahan |
| - | - | - | - |
| `UNPARSED_ADDRESS` | Tidak dapat menentukan lokasi alamat | Dokumen mendefinisikan kolom alamat, tetapi alamat yang diekstrak tidak dapat diurai atau digeolokasikan. | Dapat dikonfigurasi: Alamat Tidak Terurai, default informasional |

## Kecocokan dokumen lintas sesi

Selain peringatan di atas, laporan ID V3 menyertakan larik `matches[]`: hingga 5 dokumen lain di aplikasi Anda dengan tanggal lahir yang sama, negara penerbit yang sama, dan nama lengkap yang sangat mirip (dokumen dalam daftar blokir juga memerlukan kecocokan persis nomor dokumen). Sesi milik pengguna yang sama tidak disertakan. Dokumen yang Anda tambahkan ke daftar blokir muncul dengan `is_blocklisted: true`. Dokumen dalam daftar izin tetap muncul dalam kecocokan, tetapi tindakan untuk pengguna duplikat dilewati.

Setiap kecocokan menyertakan `session_id`, `session_number`, `vendor_data`, `verification_date`, `user_details` (`name`, `document_type`, `document_number`), `status`, `is_blocklisted`, `api_service`, dan `front_image_url` yang ditandatangani.

## Contoh

### Peringatan yang dapat dikonfigurasi pada perutean default (informasional)

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "QR_NOT_DETECTED",
    "additional_data": null,
    "log_type": "information",
    "short_description": "QR not detected",
    "long_description": "The system couldn't find or read the QR code on the document. This could be due to poor image quality or an unsupported document type.",
    "node_id": "id_primary"
  }
]
```

### Penolakan otomatis pada dokumen kedaluwarsa

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "DOCUMENT_EXPIRED",
    "additional_data": null,
    "log_type": "error",
    "short_description": "Document expired",
    "long_description": "The document's expiration date has passed, rendering it no longer valid for use.",
    "node_id": "id_primary"
  }
]
```

### Ketidakcocokan detail yang diharapkan beserta payload

```json theme={null}
"warnings": [
  {
    "feature": "ID_VERIFICATION",
    "risk": "DOB_MISMATCH_WITH_PROVIDED",
    "additional_data": {
      "expected_dob": "1990-01-01",
      "extracted_dob": "1991-03-15"
    },
    "log_type": "warning",
    "short_description": "Date of birth mismatch with provided information",
    "long_description": "The provided date of birth in `expected_details` doesn't match the date extracted from the document.",
    "node_id": "id_primary"
  }
]
```

## Jenis peringatan

Setiap risiko diberi tingkat keparahan berdasarkan konfigurasi aplikasi Anda. Tiga tingkat keparahan tersebut adalah:

## Terkait

* [Laporan Verifikasi Identitas](https://docs.didit.me/id/core-technology/id-verification/report-id-verification.md): skema laporan lengkap dan statusnya.
* [Pemantauan dokumen](https://docs.didit.me/id/core-technology/id-verification/document-monitoring-id-verification.md): cara Didit mendeteksi manipulasi dan duplikasi lintas sesi.
* [Webhook](https://docs.didit.me/id/integration/webhooks.md): `session.status.updated` membawa peringatan segera setelah langkah verifikasi identitas selesai.
* [Model data: Verifikasi Identitas](https://docs.didit.me/id/reference/data-models.md#verifikasi-identitas): skema kolom demi kolom yang kanonik.
* [Model data: Objek peringatan](https://docs.didit.me/id/reference/data-models.md#objek-peringatan): bentuk setiap entri di `warnings[]`.


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