18

Arsitektur Teknis Unit TPS3R & Bank Sampah

Updated: Sep 2026Oleh: SystemModul Pengolahan Sampah & TPS3R Desa

šŸ—ļø Arsitektur Teknis: Unit Pengolahan Sampah & TPS3R Desa

Dokumen ini menjelaskan arsitektur perangkat lunak, skema basis data PostgreSQL, API server actions, serta protokol komunikasi perangkat keras timbangan digital untuk modul Unit Pengolahan Sampah & TPS3R (UNT-TPS3R).


1. Skema Database Relasional (ERD)#

Modul TPS3R mengelola perbankan sampah warga, inventaris gudang bahan baku daur ulang, dan siklus biokonversi maggot BSF:

text
ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│ waste_customers │1 *│ waste_deposit_transactions │
│───────────────────────│─────────│───────────────────────────────│
│ id (UUID, PK) │ │ id (UUID, PK) │
│ citizen_nik (VARCHAR) │ │ customer_id (FK) │
│ full_name (VARCHAR) │ │ invoice_number (VARCHAR, UQ) │
│ rt_rw (VARCHAR) │ │ transaction_date (TIMESTAMP) │
│ phone_number (VARCHAR)│ │ total_amount_idr (DECIMAL) │
│ current_balance (NUM) │ │ payment_status (ENUM) │
│ created_at (TIMESTAMP)│ │ operator_id (UUID, FK) │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
 │ 1
 │ *
ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”“ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│ waste_categories │1 *│ waste_deposit_details (Lines)│
│───────────────────────│─────────│───────────────────────────────│
│ id (UUID, PK) │ │ id (UUID, PK) │
│ category_name (VAR) │ │ transaction_id (FK) │
│ waste_type (ENUM) │ │ category_id (FK) │
│ buying_price_per_kg │ │ gross_weight_kg (DECIMAL) │
│ selling_price_per_kg │ │ tare_weight_kg (DECIMAL) │
│ coa_inventory_account │ │ net_weight_kg (DECIMAL) │
│ is_active (BOOLEAN) │ │ subtotal_idr (DECIMAL) │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│ waste_retribution_bills │ │ maggot_biopond_cycles │
│───────────────────────────────│ │───────────────────────────────│
│ id (UUID, PK) │ │ id (UUID, PK) │
│ citizen_nik / customer_id │ │ biopond_number (INT) │
│ period_month_year (VARCHAR) │ │ start_date (DATE) │
│ tier (RESIDENTIAL/COMMERCIAL) │ │ baby_maggot_input_gram (NUM) │
│ bill_amount_idr (DECIMAL) │ │ organic_waste_fed_kg (DECIMAL)│
│ paid_status (PAID/UNPAID) │ │ harvest_date (DATE) │
│ paid_via (CASH/QRIS/SAVINGS) │ │ fresh_maggot_yield_kg (DEC) │
│ paid_at (TIMESTAMP) │ │ kasgot_yield_kg (DECIMAL) │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

2. API & Backend Services (Next.js Server Actions)#

Operasional modul didukung oleh kumpulan Server Actions pada lib/actions/waste-management.ts:

  1. processWasteDeposit(customerId, items[], scaleDeviceId):
  • Menerima payload penimbangan sampah terpilah (kategori, berat kotor, tara wadah, berat bersih).
  • Menghitung subtotal per komoditas dan total rupiah yang menjadi hak nasabah.
  • Mengkredit pos kewajiban tabungan warga 2-201.25 Tabungan Titipan Bank Sampah Warga.
  • Mendebit persediaan gudang 1-105.25 Persediaan Anorganik Daur Ulang.
  • Memutakhirkan saldo current_balance pada tabel waste_customers.
  • Memicu pengiriman notifikasi WhatsApp slip penimbangan instan via gateway.
  1. withdrawWasteSavings(customerId, withdrawalAmount, method):
  • Memvalidasi kecukupan saldo tabungan nasabah.
  • Mendebit 2-201.25 Tabungan Titipan Bank Sampah Warga dan mengkredit 1-101.25 Kas Tunai (jika tarik tunai) atau mentransfer ke dompet digital sembako BUMDes.
  1. generateMonthlyRetributionBills(targetMonthYear):
  • Dijalankan via CRON pada tanggal 1 setiap bulan.
  • Menerbitkan tagihan retribusi kebersihan untuk seluruh kepala keluarga dan pelaku usaha desa.
  • Menyediakan endpoint pembayaran otomatis debet saldo tabungan bagi nasabah yang mengaktifkan fitur Auto-Debet Sampah.
  1. recordBiopondHarvest(biopondId, freshMaggotKg, kasgotKg):
  • Mencatat konversi sampah organik basah menjadi produk bernilai jual.
  • Mendebit 1-204.25 Aset Biologis - Koloni Maggot BSF dan 1-106.25 Persediaan Pupuk Kompos & Kasgot.

3. Integrasi Hardware & Front-End Components#

  • WasteDepositCashier.tsx (Client Component): Layar loket bank sampah responsif tablet/desktop. Mengimplementasikan Web Bluetooth API untuk melakukan pairing dengan timbangan digital platform CAS/Sonic seri Bluetooth. Nilai berat pada layar timbangan langsung mengisi kolom gross_weight_kg tanpa intervensi ketik manual.
  • WasteCustomerPassbook.tsx (Client Component): Tampilan buku tabungan digital nasabah dengan riwayat setoran, penarikan, grafik akumulasi tonase sampah yang diselamatkan, dan tombol cetak mutasi rekening.
  • CircularFlowDiagram.tsx (Visual Component): Diagram interaktif yang memetakan tonase sampah masuk dari rumah tangga dan resto, terdistribusi ke jalur biokonversi BSF dan bal press daur ulang.

Apakah panduan ini membantu Anda?