Audit Data adalah penilaian otomatis berbasis aturan terhadap kualitas data yang sudah masuk ke tabel final (report_ppls, report_ppl_items), dibandingkan dengan sumber dari Telegram (log_msg_telegram: teks dan JSON hasil ekstraksi).
Audit bersifat read-mostly: hasilnya disimpan di tabel report_ppl_audits dan tidak mengubah isi laporan final. Tujuannya dua arah:
score_similarity_percent di includes/helpers.php).| Istilah / kolom | Arti singkat |
|---|---|
report_ppl_audits | Baris riwayat audit per laporan (bisa lebih dari satu jika dijalankan ulang tanpa skip). |
audit_batch_uuid | ID satu kali jalan CLI step6_audit_reports.php; semua baris dalam run yang sama punya UUID sama. |
report_ppl_id | ID laporan final di report_ppls. |
log_msg_telegram_id | ID baris log Telegram yang terhubung lewat posted_report_ppl_id (bisa kosong jika tidak ketemu). |
completeness_score | Skor 0–100: seberapa lengkap field penting (tanggal, tipe, desa, aktivitas, masalah, solusi, komoditas untuk lapangan, dll.). |
content_quality_score | Skor 0–100: apakah isi teks field bermakna (bukan placeholder), tidak terlalu pendek, nama petani tidak mencurigakan. |
consistency_score | Skor 0–100: konsistensi logis antar field (mis. lapangan harus ada komoditas; luas negatif; dll.). |
reference_match_score | Skor 0–100: desa ada di master; komoditas cocok master/sinonim (untuk lapangan); skor tambahan jika ada peserta / pengirim terlacak ke users. |
extraction_accuracy_score | Skor 0–100: kemiripan antara teks sumber (ppl_report_text atau text_message) dengan nilai final (desa, komoditas, aktivitas, masalah, solusi). |
overall_audit_score | Skor gabungan 0–100 dari lima skor di atas dengan bobot tetap (lihat bagian 3). |
audit_status | Ringkasan tiga nilai: good, warning, bad (lihat bagian 4). |
missing_critical_fields | Daftar field penting yang dianggap kurang (format JSON array string). |
inconsistency_flags | Daftar kode aturan yang melanggar konsistensi (format JSON array string). |
raw_audit_json | Detail teknis perhitungan (breakdown, bukti singkat, id sumber) untuk debug dan analitik lanjutan. |
overall_audit_score)Rumus berbobot (sumber kode):
| Komponen | Bobot |
|---|---|
completeness_score | 25% |
content_quality_score | 20% |
consistency_score | 20% |
reference_match_score | 15% |
extraction_accuracy_score | 20% |
Overall = jumlah (skor_komponen × bobot), dibulatkan ke 2 desimal.
completeness_score)Beberapa aspek dinilai 0–1 lalu dirata-rata menjadi 0–100. Untuk laporan lapangan, diwajibkan minimal satu item dengan komoditas. Untuk administratif, blok komoditas dianggap terpenuhi. Nama petani (lapangan) mendapat bobot sedikit; jika mencurigakan (pola seperti di suspicious_farmer_name()) skor poin petani diturunkan.
content_quality_score)Mulai dari 100, lalu pengurangan jika aktivitas/masalah/solusi berupa placeholder (“tidak ada”, “-”, dll.), terlalu pendek, atau nama petani mencurigakan.
consistency_score)Mulai dari 100, pengurangan per pelanggaran aturan (contoh: lapangan tanpa komoditas, village_id kosong, luas negatif, solusi ada tanpa masalah, kombinasi umur tanam vs aktivitas panen, dll.). Detail kode ada di stage6_score_consistency().
reference_match_score)Tiga blok (40% + 40% + 20% dari skor referensi ini secara internal): validitas desa di master; kecocokan komoditas (untuk administratif blok komoditas diberi penuh tanpa wajib match); skor PPL/pengirim jika ada peserta atau from_id cocok kolom Telegram di tabel users/user.
extraction_accuracy_score)Teks sumber utama: ppl_report_text, jika kosong text_message. Untuk tiap pasangan yang relevan dihitung score_similarity_percent antara teks normalisasi. Jika sumber kosong, skor ekstraksi diberi nilai netral (50). Opsional: perbandingan aktivitas final vs cuplikan di extracted_json masuk ke breakdown di raw_audit_json.
audit_statusoverall_audit_score < 50, atau ada salah satu missing kritis (desa / tanggal laporan / item komoditas untuk tipe lapangan), atau ada dua atau lebih flag konsistensi keras (contoh: lapangan tanpa komoditas, village_id null, luas negatif).Threshold persis dihitung di stage6_compute_audit_record() — bila diubah di kode, halaman ini perlu diselaraskan.
CLI: php step6_audit_reports.php (skrip audit data). Pengaturan di config.php (stage6_dry_run, stage6_limit, stage6_skip_already_audited, dll.).
Setiap run menghasilkan banyak baris di report_ppl_audits dengan audit_batch_uuid yang sama per eksekusi.