# Chatbot WhatsApp Analysis Pipeline

## Data Source
- **Google Sheets ID**: `1x0pAx5uqI-ttgr9x3qk8gah_72oudcINyr2S_ffPxUQ`
- **Sheet**: `Total` (gid=756284932)
- **Export URL**: `https://docs.google.com/spreadsheets/d/{ID}/export?format=csv&gid={gid}`
- **Columns**: Waktu | Nomor Pengirim | Nama Pengirim | pertanyaan | Jawaban AI

## Download & Parse
```python
import urllib.request
URL = "https://docs.google.com/spreadsheets/d/1x0pAx5uqI-ttgr9x3qk8gah_72oudcINyr2S_ffPxUQ/export?format=csv&gid=756284932"
urllib.request.urlretrieve(URL, '/tmp/spreadsheet_data.csv')
```

## CRITICAL: Pak Edi Must Be Excluded
Nomor HP Pak Edi: `6281256560202` — ini adalah operator chatbot (131 pesan).
**SELALU hapus dari dataset sebelum analisis:**
```python
data = [d for d in data if d['nomor'] != '6281256560202']
```
Jika tidak dihapus: (1) distorsi statistik, (2) Pak Edi terlihat sebagai pengguna tertinggi → kesan chatbot "untuk dirinya sendiri".

## Kategori Pertanyaan — 18 kategori (Juli 2026, diperbaiki)
**VERSI LAMA SALAH**: classifier lama membuat "Lainnya" sampai 47% — banyak pertanyaan peternakan
yang tidak tertangkap keyword. Gunakan versi ini:

```python
def classify(q):
    q_lower = q.lower()
    if any(k in q_lower for k in ['pmk','penyakit mulut dan kuku','foot and mouth disease','fmd']):
        return '01-PMK'
    if any(k in q_lower for k in ['rabies','anjing','kucing','gigit','pembawa rabies','hewan pembawa rabies','hpr','digigit']):
        return '02-Rabies & Lalu Lintas'
    if any(k in q_lower for k in ['lsd','lumpy skin disease','lumpy']):
        return '03-LSD'
    if any(k in q_lower for k in ['avian influenza','flu burung','hpaai','h5n1','bird flu','flu avian']):
        return '04-Avian Influenza'
    if any(k in q_lower for k in ['obat','vaksin','antibiotik','ivermectin','amoxicillin','gentamicin','oxytetracycline','obat-obatan','injeksi','suntik','dosis obat','vaksinasi','vaksinas']):
        return '05-Obat & Vaksinasi'
    if any(k in q_lower for k in ['pakan','nutrisi','rumput','konsentrat','silase','dedak','jagung','ransum','vitamin','mineral','gizi','hijauan','air garam']):
        return '06-Pakan & Nutrisi'
    if any(k in q_lower for k in ['reproduksi',' ib ','inseminasi','bunting','kebuntingan','kawin','betin','jantan','birahi','kawin alam','gestasi','melahirkan','waktu ib']):
        return '07-Reproduksi & IB'
    if any(k in q_lower for k in ['mastitis','susu','sapi perah','kualitas susu','ambig','ambingan']):
        return '08-Mastitis & Susu'
    if any(k in q_lower for k in ['surveilans','pelaporan','autp','peruntingan','penyakit hewan','wabah','penyakit menular','zoonosis','investigas','kasus penyakit']):
        return '09-Surveilans & Penyakit Hewan'
    if any(k in q_lower for k in ['itik','bebek','unggas','ayam petelur','ayam pedaging','doc ','day old chick','pullet','layer','broiler','poultry','duck','cepet','ayam aduan','ayam bangkok','kandang ayam','kaki ayam cacat','leher muter','ayam pilek']):
        return '10-Itik & Unggas'
    if any(k in q_lower for k in ['rph','rumah potong','tph','tempat pemotongan',' nkv','sertifikat veteriner','veteriner','kesmavet','kesehatan masyarakat veteriner',' rw ','hewan qurban','penyembelihan','animal welfare','kesejahteraan hewan']):
        return '11-RPH & Kesmavet'
    if any(k in q_lower for k in ['itung','jumlah','populasi','total ','berapa ekor','banyaknya','statistik','data populasi','ekor']):
        return '12-Populasi & Perhitungan'
    if any(k in q_lower for k in ['siska','siska kalsel','sapi induk','sapi potong','program sapi','investasi','kups','bantuan ternary','p2sb','siti hawa']):
        return '13-Program & Investasi'
    if any(k in q_lower for k in ['dimana ','alamat','kontak','dokter hewan','praktek','puskeswan','pusat kesehatan hewan','dinas','informasi','siapa','unit usaha','nkves']):
        return '14-Info & Kelembagaan'
    if any(k in q_lower for k in ['penyakit sura','jembrana','bvd','bovine viral','lato2','nipah','cacing','gondok','kaki ayam','cempe','kembung','ayam mati','sapi mati','sapi lemas','sapi gelisah','sapi teriak','kerbau','kudis','scabies','parasit']):
        return '15-Penyakit Lainnya'
    if any(k in q_lower for k in ['harga','biaya','berapa harga','berapa biaya']):
        return '16-Harga & Biaya'
    if any(k in q_lower for k in ['ikirnasi','ishiknas','sistem informasi']):
        return '17-Data & Sistem Informasi'
    if any(k in q_lower for k in ['korporasi','karet','sawit','kelapa','hilirisasi','transgender','pendidikan','kuliah','kampus','lunasi hutang','domisili','berangkat via udara']):
        return '18-Non-Livestock'
    return '15-Penyakit Lainnya'  # default = penyakit, BUKAN off-topic
```

**Distribusi akhir (971 pesan tanpa Pak Edi):**
| Kategori | % |
|----------|---|
| 15-Penyakit Lainnya | ~40% (VALID — pertanyaan peternakan sah) |
| 10-Itik & Unggas | ~10% |
| 02-Rabies & Lalu Lintas | ~8% |
| 12-Populasi & Perhitungan | ~7% |
| 14-Info & Kelembagaan | ~7% |
| 11-RPH & Kesmavet | ~5% |
| 06-Pakan & Nutrisi | ~5% |
| 18-Non-Livestock | **0.8%** (off-topic sejati — sangat kecil) |

**NOTE**: Kategori "Penyakit Lainnya" itu BUKAN "main-main". Contoh isi: "sapi teriak malam-malam",
"cempe kembung", "kaki ayam cacat", "leher itik muter" — semua sah & sesuai tupoksi bidang.
Hanya 8 pesan (0.8%) yang benar-benar Non-Livestock.

## Standar Privasi (WAJIB)
- **Nama pengirim → tampilkan sebagai nomor HP tersamarkan**
- Format: `phone[:6] + "xxx" + phone[9:]` (contoh: `628125xxx0202`)
- Berlaku untuk: teks laporan, tabel, grafik, chart
- **Pengecualian**: hanya operator/sistem (cth: "drh. Edi Santosa") yang BOLEH tampil dengan nama asli
- **Jangan pernah** tampilkan nama asli peternak/pengirim (misal "Andre", "Juragan Wedos", "Mased")

## Tools Setup
```bash
# matplotlib + python-docx perlu venv khusus (system python3.11 tidak punya module ini)
python3 -m venv /tmp/mplenv
/tmp/mplenv/bin/pip install matplotlib python-docx

# Jalankan:
/tmp/mplenv/bin/python3 /tmp/generate_charts.py   # 20 grafik PNG → /tmp/charts/
/tmp/mplenv/bin/python3 /tmp/generate_report.py    # dokumen Word → /tmp/Laporan_*.docx
```

## Output Locations
- Laporan Word: `/home/ubuntu/kantor/chatbot_whatsapp_2026/Laporan_Analisis_Chatbot_WhatsApp.docx`
- 20 Grafik PNG: `/home/ubuntu/kantor/chatbot_whatsapp_2026/chart*.png`
- Dataset CSV: `/tmp/spreadsheet_data.csv`
