Appearance
Implementation Plan
Timeline (2 Minggu)
Hari: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
├─ Rekening Korporat ─┤
├──── Brankas Onboarding ────────┤
├────────────── Development ────────────────┤
├─ Test ─┤
├─ Buffer ─┤
├─ Go Live ─┤Critical Path
Minggu 1
| Hari | Business | Development |
|---|---|---|
| 1 | Daftar rekening korporat (BCA/Mandiri), daftar Brankas | Setup project, scaffold backend |
| 2 | Submit dokumen ke bank | Setup DB schema, API routes skeleton |
| 3 | Follow up bank | Implement recipient CRUD, Google Forms webhook |
| 4 | Bank processing | Implement Brankas sandbox integration |
| 5 | Bank processing | Dashboard UI (table + tombol transfer) |
| 6 | Bank processing | Webhook handler, status tracking |
| 7 | Rekening aktif | End-to-end test dengan sandbox |
Minggu 2
| Hari | Business | Development |
|---|---|---|
| 8 | Link rekening ke Brankas | Production config, security hardening |
| 9 | Brankas KYC complete | Final testing |
| 10 | Brankas production live | Bug fixes, polish |
| 11 | Uang masuk rekening | Final verification |
| 12 | Ready to disburse | Buffer day |
| 13 | Disbursement starts | Monitor |
| 14 |
Dokumen yang Dibutuhkan
Untuk Bank (Rekening Korporat)
- Akta Pendirian + Perubahan (terbaru)
- SK Kemenkumham
- NPWP perusahaan
- KTP + NPWP direksi
- NIB (Nomor Induk Berusaha)
- Surat keterangan domisili
Untuk Brankas
- Dokumen legal perusahaan (sama seperti bank)
- KTP direksi
- NPWP perusahaan
- Surat kuasa (jika diperlukan)
Arsitektur
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Google Forms│────▶│ Apps Script │────▶│ Your API │
└─────────────┘ └─────────────┘ └──────┬──────┘
│
┌─────────┴─────────┐
│ │
┌────▼────┐ ┌─────▼────┐
│PostgreSQL│ │ Dashboard │
└────┬────┘ └─────┬────┘
│ │
│ ┌──────▼──────┐
│ │ User │
│ │ (klik tombol)│
│ └──────┬──────┘
│ │
└─────────┬─────────┘
│
┌─────▼─────┐
│ Brankas │
│ Disburse │
└─────┬─────┘
│
┌─────▼─────┐
│ Rekening │
│ Korporat │
└───────────┘Tech Stack
| Layer | Pilihan | Alasan |
|---|---|---|
| Backend | Hono.js atau Express | Ringan, cepat setup |
| Database | PostgreSQL (Railway/Supabase) | Reliable, gratis tier cukup |
| Deploy | Railway atau Render | Simple, auto-deploy dari Git |
| Dashboard | Next.js atau vanilla React | Familiar, cepat |
| Auth | NextAuth atau Clerk | Jangan public tanpa auth |
Database Schema (Minimal)
sql
CREATE TABLE recipients (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
bank_code TEXT NOT NULL,
account_number TEXT NOT NULL,
account_name TEXT NOT NULL,
amount BIGINT NOT NULL, -- dalam rupiah, tanpa desimal
status TEXT NOT NULL DEFAULT 'pending', -- pending, processing, completed, failed
external_id TEXT UNIQUE, -- untuk idempotency Brankas
disbursement_id TEXT, -- ID dari Brankas
failure_reason TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
processed_at TIMESTAMPTZ
);
CREATE INDEX idx_recipients_status ON recipients(status);
CREATE INDEX idx_recipients_external_id ON recipients(external_id);API Endpoints
Internal
| Method | Path | Description |
|---|---|---|
| POST | /api/recipients | Create recipient (dari Google Forms) |
| GET | /api/recipients | List all recipients |
| GET | /api/recipients/:id | Get recipient detail |
| POST | /api/disburse/:id | Trigger disbursement untuk 1 recipient |
| POST | /api/disburse/batch | Trigger disbursement batch |
Webhooks
| Method | Path | Description |
|---|---|---|
| POST | /api/webhooks/brankas | Terima status update dari Brankas |
Security Checklist
- [ ] API key Brankas di environment variable, jangan di client-side
- [ ] Endpoint disburse wajib autentikasi
- [ ] Rate limiting pada endpoint disburse
- [ ] Idempotency key untuk setiap transaksi
- [ ] Validate bank account sebelum disburse (gunakan Brankas account inquiry)
- [ ] Audit log untuk setiap action
- [ ] HTTPS only
- [ ] Webhook signature verification
Backup Plan
Kalau Hari 10 API belum live:
- Uang tetap masuk ke rekening korporat yang sudah aktif
- Disbursement manual via KlikBCA Bisnis / Mandiri Online batch upload CSV
- Tracking system tetap jalan — input manual ke dashboard atau import CSV dari bank
- Brankas API di-switch begitu live
Monitoring
Setelah go live:
- Log setiap API call ke Brankas
- Monitor webhook delivery
- Dashboard untuk lihat status real-time
- Alert kalau ada failure rate tinggi
Reconciliation
- Simpan response log dari Brankas
- Bulanan cek saldo rekening vs total
completeddi DB - Download statement dari Brankas untuk matching