# Split Bill Aja — Dokumentasi Lengkap (llms-full.txt) ## Deskripsi Ringkas Split Bill Aja adalah aplikasi web modern (*Single Page Application*) yang dibangun untuk membantu masyarakat Indonesia membagi tagihan makan bersama (patungan / split bill) secara adil, akurat, dan proporsional. Dilengkapi teknologi pengenalan karakter visual (OCR) lokal berbasis Tesseract.js di browser client. - URL Aplikasi: https://splitbillaja.web.id - Bahasa Antarmuka: Bahasa Indonesia - Teknologi: React 19, TypeScript, Vite, Vanilla CSS, Framer Motion, Tesseract.js - Lisensi: Gratis untuk umum (*Free to use*) --- ## Prinsip Matematika & Rumus Perhitungan Patungan ### 1. Pembagian Menu Bersama (Shared Item Allocation) Ketika sebuah menu dipesan atau dikonsumsi oleh lebih dari satu orang (misal 1 pizza dimakan oleh 3 orang): - Porsi per orang untuk menu k: Share(k, i) = Harga(k) / Jumlah_Pemesan(k) - Subtotal Makanan Dasar untuk Orang i: Subtotal(i) = SUM(Share(k, i)) untuk semua menu yang ditugaskan ke Orang i. - Total Subtotal Seluruh Menu: Total_Subtotal = SUM(Subtotal(i)) untuk semua peserta. ### 2. Alokasi Pajak Proporsional (Proportional Tax Allocation) Di Indonesia, restoran dan kafe umumnya mengenakan Pajak Restoran (PB1) sebesar 10% atau PPN sebesar 11%. Membagi rata total pajak adalah tidak adil bagi orang yang hanya memesan minuman murah dibanding orang yang memesan steak mahal. Maka Split Bill Aja menerapkan rumus proporsional: - Rasio Porsi Orang i: Rasio(i) = Subtotal(i) / Total_Subtotal - Pajak yang Ditanggung Orang i: Pajak(i) = Rasio(i) * Total_Pajak ### 3. Alokasi Service Charge & Biaya Kemasan Proporsional Sama seperti pajak, biaya layanan (*service charge*) atau biaya kemasan (*packaging fee*) dialokasikan sesuai proporsi pesanan: - Biaya Layanan Orang i: Layanan(i) = Rasio(i) * Total_Layanan ### 4. Alokasi Diskon & Potongan Voucher Proporsional Diskon (misal voucher 30% atau potongan kupon Rp 20.000) dinikmati secara adil sesuai nilai belanja masing-masing: - Diskon yang Diterima Orang i: Diskon(i) = Rasio(i) * Total_Diskon ### 5. Total Akhir Sebelum Pembulatan - Total_Kotor(i) = Subtotal(i) - Diskon(i) + Layanan(i) + Pajak(i) ### 6. Aturan Pembulatan (Rounding Rules) Pengguna dapat memilih metode pembulatan untuk mempermudah transfer bank atau pembayaran tunai: - `none`: Tanpa pembulatan (presisi hingga satuan rupiah terkecil). - `500`: Dibulatkan ke kelipatan Rp 500 terdekat. - `1000`: Dibulatkan ke kelipatan Rp 1.000 terdekat. - `5000`: Dibulatkan ke kelipatan Rp 5.000 terdekat. Jika pembulatan individual menghasilkan selisih akumulasi kecil terhadap total tagihan asli, selisih disesuaikan secara transparan (*rounding adjustment*). --- ## Privasi dan Keamanan Klien (100% Client-Side) - Seluruh komputasi OCR (Optical Character Recognition) berjalan di memori browser pengguna via WebAssembly (Wasm) Tesseract.js. - Tidak ada file gambar struk, rincian transaksi, nama orang, maupun nomor rekening yang dikirimkan atau disimpan ke server cloud eksternal. - Data disimpan di `localStorage` peramban lokal perangkat pengguna. --- ## Arsitektur Fitur 1. **Pemindai Struk OCR Multi-Format**: - Struk kasir ritel minimarket (Indomaret, Alfamart): memfilter baris "HARGA JUAL", "TUNAI/TUNAT", "ANDA HEMAT", "DPP", "PPN". - Struk fisik dot-matrix 2-baris (Solaria, Surya Elektronik): mengaitkan baris rumus kuantiti kasir ke nama menu di baris atas. - Screenshot aplikasi pesan-antar makanan (GoFood, GrabFood, ShopeeFood, Chagee): mengekstrak menu, varian modifier, kuantiti, voucher, dan pajak. 2. **Kalkulator Patungan Cepat**: - Metode Bagi Rata (Equal Split) - Metode Rincian Menu (Itemized Split) - Metode Alokasi Kustom (Custom Amount) 3. **Generator Format Salin WhatsApp**: - Format teks ramah pesan singkat dengan rincian perorangan, total tagihan, dan instruksi transfer/QRIS.