Mini Sesi 6 — SOP Operasional & Audit untuk Retail/Grocery + POS

Sesi ini menyatukan seluruh praktik terbaik menjadi SOP siap pakai untuk perubahan harga, stok opname & penyesuaian, refund/void, promo & loyalty, serta kontrol kasir & penutupan shift. Dilengkapi template CSV/JSON, query SQL audit, matriks RACI, risk register mini, kebijakan retensi data, dan checklist audit berkala agar operasional cepat namun tetap dapat diaudit.

SOP yang baik harus singkat, jelas, dapat diuji, dan punya indikator keberhasilan. Dokumen ini merangkum alur, tanggung jawab, bukti (evidence), serta metrik pengendalian untuk area POS yang paling rawan: harga, stok, refund/void, promo, dan kas. Seluruh contoh artefak di bawah bisa diimpor ke spreadsheet/BI atau sistem Anda.

1. Tata Kelola & Kontrol Internal

  • Segregation of Duties (SoD): peminta ≠ penyetuju ≠ eksekutor ≠ reviewer.
  • Evidence: setiap perubahan berdampak finansial wajib punya log + lampiran (CSV/JSON, notulen, screenshot, atau tanda tangan digital).
  • Cut-off: tetapkan jam cut-off harian (harga, stok, kas) untuk konsistensi laporan.
  • Sampling audit: gunakan risk-based sampling (nilai tinggi, kasir/sku outlier).

2. SOP Perubahan Harga (Price Change)

2.1. Alur Singkat

1) Inisiasi: Pricing Manager mengusulkan perubahan (alasan, kategori, target margin).
2) Penelaahan: Finance & Store Ops cek dampak margin & label rak.
3) Persetujuan: Head Retail setujui, beri tanggal efektif & prioritas.
4) Eksekusi: Import pricebook/promo ke backend; sinkron POS sebelum buka.
5) Verifikasi: Uji 5 SKU acak di kasir; foto label rak & capture POS screen.
6) Arsip: Simpan CSV, bukti uji, & ringkasan dampak margin di drive audit.

2.2. Template CSV — Log Perubahan Harga

change_id,effective_from,effective_to,sku,old_price,new_price,location,priority,reason,requested_by,approved_by,executed_by,verification_status
PC-2025-11-25,2025-12-01,,GRY-SNCK-INDO-CHIT-68G-0012,4900,4500,STORE-001,90,"Promo awal bulan",mgr_pricing,head_retail,ops_backend,PASSED

2.3. SQL Audit — Harga Berubah Tanpa Otorisasi

-- price_changes(change_id, sku, new_price, effective_from, approved_by)
-- pricebook_current(sku, price, source_change_id)
SELECT pb.sku, pb.price, pb.source_change_id
FROM pricebook_current pb
LEFT JOIN price_changes pc ON pc.change_id = pb.source_change_id
WHERE pc.approved_by IS NULL OR pc.approved_by = '';

2.4. Kebijakan

  • Setiap perubahan harga normal wajib bertanggal efektif & dapat ditelusuri (traceable).
  • Label rak diganti sebelum toko buka; mismatch ditangani dengan honor lowest policy (opsional, sesuai kebijakan perusahaan).

3. SOP Stock Opname & Penyesuaian

3.1. Tahap Opname

Pra-Opname: beku transaksi / tetapkan cut-off; cetak daftar hitung; segel area.
Hitung: dua tim, silang; tanda tangan petugas & supervisor.
Rekonsiliasi: telusuri selisih > ambang; foto bukti; investigasi shrink root cause.
Penyesuaian: jurnal adjustment (kode sebab); persetujuan manajer.
Rilis: buka kembali transaksi; laporan shrink% & tindakan perbaikan.

3.2. Template CSV — Hasil Opname

count_batch,date,location,sku,system_qty,physical_qty,uom,counter,supervisor,delta_reason,evidence_link
STK-2025-W48,2025-11-30,STORE-001,GRY-DRNK-UHT-INDO-250-0007,240,238,PCS,team_a,spv_1,"selisih rak bawah",https://drive.link/bukti

3.3. SQL Audit — Shrink Outlier

-- stock_count & stock_balance_view seperti sesi sebelumnya
SELECT c.location, c.sku,
       b.system_qty, c.physical_qty,
       (c.physical_qty - b.system_qty) AS diff_qty,
       100.0*(c.physical_qty - b.system_qty)/NULLIF(b.system_qty,0) AS diff_pct
FROM stock_count c
JOIN stock_balance_view b USING(location, sku)
WHERE ABS(100.0*(c.physical_qty - b.system_qty)/NULLIF(b.system_qty,0)) > 5
ORDER BY ABS(diff_pct) DESC;

3.4. Kode Alasan Adjustment

EXP = Expired/FEFO
BRK = Breakage/Rusak
WST = Waste/Sampah
MSC = Miscellaneous (jelaskan)

4. SOP Refund, Return & Void

4.1. Keputusan Singkat

Refund/Return: barang & uang kembali (set stok + jurnal refund).
Exchange: barang diganti (stok bertambah/berkurang sesuai selisih).
Void: batalkan sebelum pembayaran (jejak audit tetap wajib).
Otorisasi: kasir tidak boleh refund/void tanpa PIN supervisor.

4.2. Template CSV — Register Refund/Void

event_id,event_time,cashier_id,store_id,type,order_id,ref_order_id,sku,qty,amount,reason,approved_by,attachments
EVT-2025-11-23-010,2025-11-23T14:22,USR-CA01,STORE-001,REFUND,SO-2025-11-23-010,SO-2025-11-23-004,GRY-SNCK-INDO-CHIT-68G-0012,1,4900,"Salah ukuran",USR-SPV1,gs://drive/bukti.jpg
EVT-2025-11-23-011,2025-11-23T15:02,USR-CA02,STORE-001,VOID,SO-2025-11-23-012,,,0,0,"Scan ganda",USR-SPV1,

4.3. SQL Audit — Kasir dengan Void Berlebih

SELECT cashier_id, COUNT(*) AS voids_today
FROM events
WHERE event_time::date = CURRENT_DATE AND type = 'VOID'
GROUP BY cashier_id
ORDER BY voids_today DESC;

5. SOP Promo & Loyalty

5.1. Alur Eksekusi

1) Brief tujuan & KPI (lift, basket, ROI).
2) Draft rules (conditions/benefits), prioritas, stacking.
3) UAT sandbox: 5 skenario + konflik.
4) Publikasi: sinkron POS; label rak; pelatihan kasir.
5) Monitoring harian: redeem rate, margin, customer complaint.
6) Post-mortem: hitung lift & ROI; arsip CSV/JSON & evaluasi.

5.2. JSON — Berita Acara Aktivasi Promo

{
  "promo_id": "RUL-0003",
  "name": "Mix&Match 3 Chips",
  "approved_by": "head_retail",
  "effective": {"from": "2025-12-10T00:00:00+07:00", "to": "2025-12-24T23:59:59+07:00"},
  "priority": 80,
  "stackable": true,
  "uat_evidence": ["gs://drive/uat_case1.png","gs://drive/uat_case2.png"],
  "go_live_check": ["price_check_pos","label_rak","kasir_briefing"],
  "kpi": {"target_lift_pct": 12, "max_margin_erosion_pct": 2.5}
}

5.3. SQL Audit — Promo Stacking di Luar Kebijakan

-- sales_discounts(order_id, rule_id, discount_value, stack_flag)
SELECT order_id, COUNT(*) AS n_rules, SUM(discount_value) AS total_disc
FROM sales_discounts
GROUP BY order_id
HAVING MAX(stack_flag) = false AND COUNT(*) > 1;

6. SOP Kontrol Kasir & Penutupan Shift

6.1. Alur

Open Shift: input kas awal; cek perangkat (printer, scanner).
Operasi: X report tengah hari; pantau void/diskon outlier.
Close Shift (Z): hitung kas fisik; rekonsiliasi tender; setoran bank; arsipkan Z report.

6.2. Rumus Selisih Kas

# over_short = cash_physical_end - (cash_start + cash_sales - cash_payouts - cash_refunds)

6.3. Kebijakan Ambang (Threshold)

Ambang selisih kas (per shift): ±0.3% dari penjualan tunai atau Rp 25.000 (ambil yang lebih besar).
Di atas ambang = investigasi wajib + pembinaan sesuai aturan perusahaan.

6.4. CSV — Rekap Z Report Harian

store_id,shift_id,cashier_id,open_time,close_time,cash_start,cash_sales,card_sales,qr_sales,voucher_sales,cash_payouts,cash_refunds,cash_physical_end,over_short,bank_deposit,reviewer
STORE-001,SF-2025-11-23-1,USR-CA01,2025-11-23T08:00,2025-11-23T16:00,500000,5200000,4600000,1500000,230000,120000,0,5705000,55000,5650000,aud_ops

7. Audit Trail, Retensi Data, & Kepatuhan

7.1. Skema Event Minimal

{
  "event_id":"EVT-...","time":"2025-11-23T16:05:00+07:00",
  "actor":{"user_id":"USR-CA01","role":"cashier"},
  "type":"PRICE_OVERRIDE|MANUAL_DISCOUNT|VOID|REFUND|LOGIN|PROMO_APPLY|PAYMENT_CHANGE",
  "context":{"order_id":"SO-...", "sku":"...", "amount":500, "reason":"..."},
  "ip":"10.10.10.5","device":"POS-01","signature":"sha256:..."
}

7.2. Retensi Data (Rekomendasi)

  • Transaksi & Z report: lima tahun (atau mengikuti regulasi pajak setempat).
  • Event audit trail: dua tahun minimum.
  • Data pelanggan: sesuai kebijakan privasi; minimisasi & enkripsi saat istirahat (at-rest).

8. Matriks RACI (Tanggung Jawab)

ProsesOwner (R)Approver (A)Support (C)Reviewer (I)
Perubahan HargaMgr PricingHead RetailFinance, Store OpsInternal Audit
Opname & AdjustmentStore OpsHead OpsIT/InventoryFinance
Refund/VoidSupervisor KasirStore ManagerCustomer ServiceInternal Audit
Promo & LoyaltyMarketingHead RetailPricing, ITFinance
Penutupan ShiftKasirSupervisorStore OpsFinance

9. Risk Register Mini (Likelihood × Impact)

RisikoDampakLikelihoodKontrol UtamaIndikator Dini
Harga salahMargin turun, komplainSedangPricebook bertanggal efektif; uji POSDiskon manual melonjak
Shrink tinggiKerugian persediaanSedangFEFO, cycle count mingguanSelisih opname > ambang
Void/Refund disalahgunakanKehilangan pendapatanRendah–SedangPIN supervisor; audit eventVoid rate kasir outlier
Fraud promoErosi marginRendahLimit redeem; non-stackable kritisRedeem rate anomali
Selisih kasTemuan auditSedangThreshold & pembinaanOver/short berulang

10. Checklist Audit Bulanan & Triwulanan

10.1. Bulanan

□ Sampling price change vs label rak
□ Evaluasi shrink% per kategori & supplier
□ Review top 10 kasir: void/refund/diskon manual
□ Rekonsiliasi tender EDC/QR vs POS
□ Uji restore data & backup laporan

10.2. Triwulanan

□ Uji SoD & akses user (aktif/non-aktif)
□ Audit promo: lift, ROI, breakage
□ Stress test opname (surprise count)
□ Refresh SOP & pelatihan singkat
□ Peninjauan retensi & kebijakan privasi

11. Template Form & Dokumen

11.1. Form Persetujuan Perubahan Harga (ringkas)

Judul: Persetujuan Perubahan Harga
Alasan: ....................................................
SKU/Produk: ................................................
Harga Lama → Baru: Rp .... → Rp ....
Lokasi & Tanggal Efektif: ..................................
Dampak Margin (estimasi): .................................%
Lampiran: CSV pricebook, label rak, bukti uji POS
Pemohon (R): ............  Tanggal: ......
Penyetuju (A): ..........  Tanggal: ......
Reviewer (I): ...........  Tanggal: ......

11.2. Form Insiden Selisih Kas (ringkas)

Shift/Store: .................... Kasir: ...............
Over/Short: Rp ..........  Ambang: Rp ..........
Penyebab Sementara: .......................................
Tindakan Korektif: ........................................
Supervisor: .............  Tanggal: .......................

Kesimpulan

Dengan SOP yang tegas, RACI yang jelas, log dan retensi data yang disiplin, serta audit berbasis metrik, operasional retail dapat bergerak cepat tanpa kehilangan kendali. Terapkan artefak CSV/JSON/SQL di atas sebagai bukti dan tulang punggung kontrol — maka laporan akurat, margin terlindungi, dan audit menjadi proses rutin yang tertib, bukan “pemadaman kebakaran”.

Sumber/Referensi


Share the Post:

Related Posts