Spaces:
Running
Running
| title: PRESUNI BPOM | |
| emoji: ποΈ | |
| colorFrom: blue | |
| colorTo: indigo | |
| sdk: docker | |
| pinned: false | |
| <div align="center"> | |
| # ποΈ BPOM Compliance AI System | |
| **Sistem Cerdas Pemeriksaan Kepatuhan Registrasi Produk Pangan Berbasis AI** | |
| [](https://huggingface.co/spaces/Expanic/PRESUNI_BPOM) | |
| [](https://python.org) | |
| [](https://gradio.app) | |
| [](https://ai.google.dev) | |
| [**π Coba Demo Langsung**](https://huggingface.co/spaces/Expanic/PRESUNI_BPOM) Β· [**π Blueprint Teknis**](./blueprint.md) Β· [**π§ͺ Contoh Test Case**](./TEST_CASES.md) | |
| </div> | |
| --- | |
| ## π Apa Itu Aplikasi Ini? | |
| **BPOM Compliance AI** adalah aplikasi berbasis web yang secara otomatis memeriksa apakah produk pangan/suplemen memenuhi standar keamanan **BPOM (Badan Pengawas Obat dan Makanan)** Republik Indonesia. | |
| Pengguna cukup meng-upload **laporan uji laboratorium** (PDF/DOCX) atau mengetik data hasil uji secara manual, lalu sistem akan: | |
| 1. π **Mengekstrak** data cemaran mikroba, logam berat, dan informasi produk secara otomatis | |
| 2. π·οΈ **Mengklasifikasi** kategori produk (Suplemen, Dairy, Daging Olahan, Buah & Sayur) | |
| 3. βοΈ **Memeriksa kepatuhan** setiap parameter secara deterministik terhadap ambang batas resmi BPOM | |
| 4. π€ **Menjelaskan** hasil pelanggaran dalam bahasa Indonesia yang mudah dipahami menggunakan AI (Gemini) | |
| 5. π **Menghasilkan laporan** final dalam format PDF yang siap cetak | |
| ### Arsitektur Hybrid: Rule-Based + AI | |
| | Komponen | Metode | Kenapa? | | |
| |---|---|---| | |
| | Pengecekan Lulus/Gagal | **Rule-Based (Deterministik)** | Kepastian hukum mutlak β tidak boleh ada halusinasi AI | | |
| | Klasifikasi Produk | **Hybrid (Keyword + LLM Fallback)** | Keyword matching cepat, LLM hanya dipanggil jika ambigu | | |
| | Penjelasan Pelanggaran | **RAG + LLM (Gemini)** | Menjelaskan mengapa gagal, lengkap dengan pasal hukum | | |
| | Referensi Hukum | **Vector DB (ChromaDB)** | Semantic search ke dokumen peraturan BPOM asli | | |
| --- | |
| ## π Dasar Regulasi BPOM | |
| Seluruh ambang batas dan aturan dalam sistem ini **bersumber langsung dari peraturan resmi BPOM** yang diunduh dari [JDIH BPOM](https://jdih.pom.go.id/): | |
| | Peraturan | Ruang Lingkup | Digunakan Untuk | | |
| |---|---|---| | |
| | **PerBPOM No. 13 Tahun 2019** | Batas Maksimal Cemaran Mikroba dalam Pangan Olahan | Pengecekan ALT, Coliform, E.coli, Salmonella, S.aureus, Kapang/Khamir, B.cereus | | |
| | **PerBPOM No. 9 Tahun 2022** | Persyaratan Cemaran Logam Berat dalam Pangan Olahan | Pengecekan Timbal (Pb), Kadmium (Cd), Merkuri (Hg), Arsen (As) | | |
| | **PerBPOM No. 22 Tahun 2021** | Cara Produksi Pangan Olahan yang Baik (CPPOB) | Checklist sanitasi, higiene, penyimpanan, dan transportasi | | |
| ### Kategori Produk yang Didukung | |
| | Kategori | Contoh Produk | | |
| |---|---| | |
| | `SUPLEMEN` | Suplemen kesehatan, multivitamin, herbal kapsul | | |
| | `DAIRY` | Susu UHT, yoghurt, keju olahan | | |
| | `DAGING_OLAHAN` | Sosis, nugget, kornet, bakso kemasan | | |
| | `BUAH_SAYUR` | Jus buah kemasan, sayur beku, manisan buah | | |
| --- | |
| ## π Cara Menggunakan | |
| ### Opsi 1: Langsung Coba Online (Tanpa Install) | |
| Buka demo yang sudah di-deploy di Hugging Face Spaces: | |
| π **[https://huggingface.co/spaces/Expanic/PRESUNI_BPOM](https://huggingface.co/spaces/Expanic/PRESUNI_BPOM)** | |
| --- | |
| ### Opsi 2: Jalankan Sendiri di Lokal | |
| #### Prasyarat | |
| - Python 3.9 atau lebih baru | |
| - API Key Google Gemini (gratis) | |
| #### Step 1: Clone Repository | |
| ```bash | |
| git clone https://github.com/Expanics/PRESUNIV_BPOM.git | |
| cd PRESUNIV_BPOM | |
| ``` | |
| #### Step 2: Buat Virtual Environment & Install Dependencies | |
| ```bash | |
| python -m venv venv | |
| source venv/bin/activate # Mac / Linux | |
| # venv\Scripts\activate # Windows | |
| pip install -r requirements.txt | |
| ``` | |
| #### Step 3: Dapatkan API Key dari Google AI Studio | |
| 1. Buka **[Google AI Studio](https://aistudio.google.com/apikey)** | |
| 2. Klik **"Create API Key"** | |
| 3. Copy API Key yang dihasilkan (format: `AIzaSy...`) | |
| #### Step 4: Buat File `.env` | |
| Buat file `.env` di root project: | |
| ```bash | |
| echo "GEMINI_API_KEY=PASTE_API_KEY_KAMU_DISINI" > .env | |
| ``` | |
| Contoh isi `.env`: | |
| ```env | |
| GEMINI_API_KEY=AIzaSyC1234567890abcdefghijklmnop | |
| ``` | |
| > β οΈ **Jangan commit file `.env` ke GitHub!** File ini berisi API key pribadi kamu. | |
| #### Step 5: (Opsional) Update Database Regulasi | |
| Jika kamu menambahkan PDF regulasi BPOM baru ke folder `data/regulations/`, jalankan: | |
| ```bash | |
| python src/ingest.py | |
| ``` | |
| #### Step 6: Jalankan Aplikasi | |
| ```bash | |
| python src/app.py | |
| ``` | |
| Buka browser di **[http://127.0.0.1:7860](http://127.0.0.1:7860)** π | |
| --- | |
| ## π§ͺ Cara Mencoba / Test Case | |
| Tersedia **3 skenario pengujian** di file [`TEST_CASES.md`](./TEST_CASES.md) yang bisa langsung di-copy-paste ke dalam aplikasi: | |
| | No | Skenario | Deskripsi | Hasil yang Diharapkan | | |
| |----|----------|-----------|----------------------| | |
| | 1 | **Full Approve** β | Semua parameter lolos | Semua PASS, narasi positif | | |
| | 2 | **Partial Violations** β οΈ | Coliform, Kapang, Timbal, Arsen melebihi batas | 4 parameter FAIL, sisanya PASS | | |
| | 3 | **Full Fail** β | Semua cemaran gagal + klaim obat ilegal | Semua FAIL + peringatan klaim terlarang | | |
| ### Cara Coba: | |
| 1. Buka aplikasi β Tab **"1. π₯ Input Dokumen"** | |
| 2. Buka file [`TEST_CASES.md`](./TEST_CASES.md), copy salah satu blok teks | |
| 3. Paste ke area **"Atau Masukkan Teks Manual"** | |
| 4. Klik **"π Analisis Dokumen"** | |
| 5. Cek hasilnya di Tab **"2. π Review Hasil AI"** | |
| 6. Klik **"β Setuju & Buat Laporan Final"** untuk generate laporan PDF | |
| --- | |
| ## ποΈ Struktur Project | |
| ``` | |
| PRESUNIV_BPOM/ | |
| βββ app.py # Entry point (untuk Hugging Face Spaces) | |
| βββ requirements.txt # Daftar library Python | |
| βββ .env # API Key Gemini (JANGAN di-commit) | |
| βββ blueprint.md # Dokumentasi teknis lengkap | |
| βββ TEST_CASES.md # Contoh data input untuk pengujian | |
| β | |
| βββ src/ # Source code utama | |
| β βββ app.py # UI Gradio & state management | |
| β βββ extractor.py # Ekstraktor teks β JSON (Regex + OCR) | |
| β βββ classifier.py # Klasifikasi kategori produk | |
| β βββ rule_engine.py # Core: pengecekan PASS/FAIL deterministik | |
| β βββ rag_query.py # Semantic search ke ChromaDB | |
| β βββ llm_narrator.py # Narasi penjelasan AI (Gemini) | |
| β βββ report_generator.py # Generator laporan PDF & Markdown | |
| β βββ ingest.py # Ingest regulasi PDF ke vector DB | |
| β | |
| βββ rules/ # Ambang batas BPOM (JSON) | |
| β βββ microba_rules.json # PerBPOM No. 13/2019 β Cemaran Mikroba | |
| β βββ logam_berat_rules.json # PerBPOM No. 9/2022 β Logam Berat | |
| β βββ cppob_rules.json # PerBPOM No. 22/2021 β CPPOB | |
| β | |
| βββ data/regulations/ # PDF peraturan BPOM asli (dari JDIH) | |
| β βββ SUPLEMEN/ | |
| β βββ DAIRY/ | |
| β βββ DAGING_OLAHAN/ | |
| β βββ BUAH_SAYUR/ | |
| β | |
| βββ chroma_db/ # Vector database (auto-generated) | |
| βββ prompts/ # Template prompt untuk LLM | |
| ``` | |
| --- | |
| ## βοΈ Tech Stack | |
| | Komponen | Teknologi | | |
| |---|---| | |
| | **UI / Frontend** | Gradio | | |
| | **Generative AI** | Google Gemini 1.5 Flash | | |
| | **Vector Database** | ChromaDB (Persistent) | | |
| | **Embedding** | `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` | | |
| | **Ekstraksi PDF** | pdfplumber + pytesseract (OCR fallback) | | |
| | **Ekstraksi DOCX** | python-docx | | |
| | **Laporan PDF** | FPDF2 | | |
| --- | |
| ## π Keamanan & Privasi Data | |
| - **Proses Rule-Based** berjalan 100% lokal β data TIDAK dikirim ke server manapun | |
| - **Proses AI (narasi)** mengirim ringkasan data ke Google Gemini API | |
| - Untuk kebutuhan enterprise/rahasia: ganti Gemini dengan LLM open-source lokal (misal Llama 3) | |
| --- | |
| ## π Dokumentasi Lengkap | |
| Untuk memahami arsitektur, schema data, workflow tiap modul, dan cara menambahkan kategori produk baru, baca dokumentasi teknis lengkap di: | |
| π [**blueprint.md**](./blueprint.md) | |
| --- | |
| ## π Lisensi | |
| Project ini dibuat untuk keperluan akademis Universitas Presiden (*President University*). | |
| --- | |
| <div align="center"> | |
| **Dibuat dengan β€οΈ untuk keamanan pangan Indonesia** | |
| *Seluruh aturan bersumber dari [JDIH BPOM](https://jdih.pom.go.id/) β Badan Pengawas Obat dan Makanan Republik Indonesia* | |
| </div> | |