---
title: "Manual Lensiro"
summary: "Panduan lengkap aplikasi Lensiro — sistem operasi bisnis optik: kasir, resep, inventory, faset & QC, multi-cabang, dan laporan."
source: https://lensiro.com/dokumentasi
updated: 2026-08-23
pages: 78
---

# Manual Lensiro

> Panduan resmi aplikasi Lensiro, ditulis untuk pemilik dan karyawan toko optik.

Versi web: https://lensiro.com/dokumentasi · diperbarui 23 Agustus 2026

## Daftar Isi

- [Bab 01 — Manual Lensiro](#bab-01--manual-lensiro)
  - [Tentang Lensiro](#tentang-lensiro)
  - [Dashboard & Reminder](#dashboard--reminder)
- [Bab 02 — Master](#bab-02--master)
  - [Supplier](#supplier)
  - [Cabang](#cabang)
  - [Kategori Barang](#kategori-barang)
  - [Sub Kategori Barang](#sub-kategori-barang)
  - [Brand Barang](#brand-barang)
  - [Sub Brand Barang](#sub-brand-barang)
  - [Ukuran](#ukuran)
  - [Warna](#warna)
  - [Sub Warna](#sub-warna)
  - [Asuransi](#asuransi)
  - [Bank](#bank)
  - [Tipe Harga Barang](#tipe-harga-barang)
- [Bab 03 — Pelanggan](#bab-03--pelanggan)
  - [Data Pelanggan](#data-pelanggan)
  - [Pengaturan Point Pelanggan](#pengaturan-point-pelanggan)
- [Bab 04 — Pembelian](#bab-04--pembelian)
  - [Order Pembelian](#order-pembelian)
  - [Retur Pembelian](#retur-pembelian)
- [Bab 05 — Gudang](#bab-05--gudang)
  - [Stok](#stok)
  - [Barang](#barang)
  - [Mutasi Stok](#mutasi-stok)
  - [Penghapusan Persediaan](#penghapusan-persediaan)
  - [Opname Stok](#opname-stok)
  - [Harga Pokok (HPP Editor)](#harga-pokok-hpp-editor)
  - [Permintaan Stok](#permintaan-stok)
  - [Alert Stok](#alert-stok)
- [Bab 06 — Penjualan](#bab-06--penjualan)
  - [Penjualan](#penjualan)
  - [Komisi](#komisi)
  - [Analisa](#analisa)
  - [Audit Penjualan](#audit-penjualan)
- [Bab 07 — Admin](#bab-07--admin)
  - [User](#user)
  - [Role](#role)
  - [Manajemen](#manajemen)
- [Bab 08 — Lain-lain](#bab-08--lain-lain)
  - [Kas Kecil](#kas-kecil)
  - [Transfer Kas](#transfer-kas)
- [Bab 09 — Laporan](#bab-09--laporan)
  - [Laporan Pemasukan dan Pengeluaran](#laporan-pemasukan-dan-pengeluaran)
  - [Laporan Stok Opname](#laporan-stok-opname)
  - [Laporan Penghapusan Persediaan](#laporan-penghapusan-persediaan)
  - [Laporan Penjualan](#laporan-penjualan)
  - [Laporan Penjualan Barang](#laporan-penjualan-barang)
  - [Laporan Komisi Penjualan](#laporan-komisi-penjualan)
  - [Laporan Penjualan Belum Diambil](#laporan-penjualan-belum-diambil)
  - [Laporan Pembelian](#laporan-pembelian)
  - [Laporan Hutang Pembelian](#laporan-hutang-pembelian)
  - [Laporan Pembelian Retur](#laporan-pembelian-retur)
  - [Laporan Stok](#laporan-stok)
  - [Laporan Perubahan Stok](#laporan-perubahan-stok)
  - [Laporan Kas Kecil](#laporan-kas-kecil)
  - [Laporan Transfer Antar Cabang](#laporan-transfer-antar-cabang)
- [Bab 10 — Pengaturan](#bab-10--pengaturan)
  - [Akun](#akun)
  - [Inventaris](#inventaris)
  - [Faktur](#faktur)
  - [Penjualan](#penjualan-1)
  - [Keamanan](#keamanan)
- [Bab 11 — Aslen — Asisten AI](#bab-11--aslen--asisten-ai)
- [Bab 12 — Lensiro Fit](#bab-12--lensiro-fit)
- [Bab 13 — Developer API](#bab-13--developer-api)
  - [Mulai Cepat](#mulai-cepat)
  - [Autentikasi & Batas Pemakaian](#autentikasi--batas-pemakaian)
  - [Konvensi Respons & Paginasi](#konvensi-respons--paginasi)
  - [Referensi Endpoint](#referensi-endpoint)
  - [API Penjualan (Sales)](#api-penjualan-sales)
  - [API Pelanggan (Members)](#api-pelanggan-members)
  - [API Gudang (Warehouse)](#api-gudang-warehouse)
  - [Panduan Integrasi & Contoh Kode](#panduan-integrasi--contoh-kode)
  - [Kode Error & Pemecahan Masalah](#kode-error--pemecahan-masalah)
  - [Glosarium & Daftar Enum](#glosarium--daftar-enum)
  - [Batasan, Versi & Rencana](#batasan-versi--rencana)


## Bab 01 — Manual Lensiro

> Halaman sampul dan pengantar Manual Lensiro — aplikasi kasir (POS) untuk toko optik. Berisi gambaran isi bab pembuka dan daftar halamannya.

![LOGOO.jpg](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F3%2F540a3084-515e-4906-ace2-b859ec38550a-LOGOO.jpg)
*Logo Lensiro*

### Pengertian

**Lensiro** adalah aplikasi kasir dan manajemen toko optik: penjualan kacamata, data pelanggan, stok lensa dan frame, pembelian, sampai laporan keuangan dikelola dalam satu sistem. Manual ini adalah panduan penggunaannya, ditujukan untuk pemilik maupun karyawan toko (kasir, admin, gudang).

Bab **Cover** ini adalah bagian pembuka. Isinya pengenalan singkat tentang aplikasi dan tampilan **Dashboard** yang pertama kali dibuka setiap kali masuk sistem. Bab-bab berikutnya membahas tiap area kerja secara terpisah — Master, Pelanggan, Pembelian, Gudang, Penjualan, Admin, Laporan, dan Pengaturan.

### Isi Bab Ini

- **Lensiro** — pengenalan aplikasi: untuk apa dipakai, dan area kerja apa saja yang dicakup.
- **Dashboard & Reminder** — layar utama: ringkasan penjualan hari ini, tren, performa cabang, serta pengingat follow-up pelanggan dan barang mutasi antar cabang.

### Lampiran

- [LOGOO.jpg](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F3%2F540a3084-515e-4906-ace2-b859ec38550a-LOGOO.jpg) — image/jpeg, 1191 KB

### Tentang Lensiro

> Pengenalan aplikasi Lensiro — apa itu, untuk siapa, dan area kerja apa saja yang bisa dikelola. Dibaca lebih dulu sebelum masuk ke bab-bab fitur.

#### Pengertian

**Lensiro** adalah aplikasi kasir (POS) dan manajemen operasional untuk toko optik. Semua kegiatan toko — penjualan kacamata, data pelanggan, stok lensa dan frame, pembelian ke supplier, sampai laporan keuangan — dikelola dalam satu sistem yang saling terhubung, sehingga data tidak perlu dicatat ulang di banyak tempat.

Aplikasi ini dipakai oleh pemilik maupun karyawan toko. Setiap orang masuk dengan akun sendiri, dan menu yang bisa dibuka mengikuti peran masing-masing (misalnya kasir, admin, atau pemilik).

#### Fitur Utama

Ruang lingkup yang bisa dikelola di Lensiro:

- **Data produk** — pencatatan lensa, frame, dan aksesori, lengkap dengan kategori, merek, warna, dan harga.
- **Data pelanggan** — identitas, riwayat pembelian, riwayat pemeriksaan mata, level keanggotaan, dan poin member.
- **Pembelian** — pemesanan barang ke supplier dan penerimaan stok.
- **Gudang & stok** — stok per cabang, harga pokok, serta mutasi (perpindahan) barang antar cabang.
- **Penjualan** — pembuatan order, pencetakan nota/invoice, dan tindak lanjut after service.
- **Pengguna** — pengaturan akun dan hak akses berdasarkan peran.
- **Laporan** — rekap penjualan, keuangan, dan stok untuk memantau kondisi bisnis.

#### Catatan & Tips

- Manual ini disusun per bab mengikuti area kerja aplikasi. Tidak perlu dibaca berurutan — langsung buka bab yang sesuai dengan tugas Anda.
- UI dan nama menu di aplikasi bisa berbeda tipis dengan tangkapan layar lama; jika berbeda, ikuti tampilan aplikasi yang sedang berjalan.


### Dashboard & Reminder

> Layar utama Lensiro — ringkasan penjualan hari ini, tren, performa cabang, plus pengingat follow-up after service dan barang mutasi antar cabang. Halaman pertama yang terbuka saat masuk sistem.

#### Pengertian

**Dashboard** adalah layar utama Lensiro. Isinya ringkasan aktivitas toko hari ini — order, penjualan, pengeluaran, dan pesanan tertunda — beserta tren dan perbandingan antar cabang. Data diperbarui otomatis setiap 60 detik, jadi angka yang tampil selalu terbaru.

Selain ringkasan, dashboard juga memegang dua pengingat penting: **barang mutasi** yang dikirim antar cabang dan belum diterima, serta **follow-up after service** untuk pelanggan yang sudah waktunya dihubungi.

#### Fitur Utama

Halaman ini terbagi menjadi beberapa tab di bagian atas:

- **Dashboard** — ringkasan dan tren penjualan.
- **Reminder** — daftar restock barang (Alert Stok), follow-up after service, dan barang mutasi masuk. Lencana pada tab menampilkan jumlah barang yang Habis/Menipis, atau tanda merah bila ada hal lain yang perlu ditindaklanjuti.
- **Keuangan** — ringkasan laba rugi, arus kas, dan piutang. Tab ini hanya muncul untuk pengguna yang punya hak akses keuangan.

Di kanan atas ada pemilih **cabang**. Pengguna yang hanya berwenang atas satu cabang otomatis melihat cabangnya sendiri; pengguna dengan akses lintas cabang bisa memilih **Semua Cabang** atau satu cabang tertentu.

#### Tab Dashboard — Ringkasan Aktivitas

Menampilkan kondisi operasional toko secara ringkas agar performa bisnis bisa dibaca cepat tanpa membuka laporan terpisah.

##### Ringkasan Hari Ini

Empat kartu utama di bagian atas. Tiap kartu menampilkan angka hari ini, grafik tren mini, perubahan dibanding kemarin (naik/turun dalam persen), dan subtotal bulan berjalan.

| Kartu | Isi |
| --- | --- |
| **Order Hari Ini** | Jumlah order yang dibuat hari ini, plus total order bulan ini. |
| **Penjualan Hari Ini** | Nilai rupiah penjualan hari ini, plus total bulan ini. |
| **Pengeluaran Hari Ini** | Total kas keluar hari ini, plus total bulan ini. |
| **Pesanan Tertunda** | Jumlah pesanan yang masih menunggu proses. |


![Screenshot 2026-07-02 at 13.52.12.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F44f2993b-1d51-45bf-b0df-5e782d4b8e0b-Screenshot_2026-07-02_at_13.52.12.png)
*Tampilan: Dashboard Utama Lensiro*

##### Tren Penjualan & Performa Produk

Grafik tren penjualan **28 hari terakhir**, dipecah menurut kategori produk (Accessories, Frame, Lens). Bila punya akses, tautan **Lihat Detail** membuka analisa penjualan lengkap.

##### Performa Cabang

Peringkat cabang berdasarkan penjualan hari ini. Bagian ini hanya tampil untuk pengguna dengan akses lintas cabang.

##### Ringkasan Pelanggan & Anomali

Dua panel berdampingan: **Ringkasan Pelanggan** (anggota aktif, anggota baru, penukaran poin, total poin diberikan) dan **Anomali** — peringatan otomatis seperti cabang yang penjualannya turun drastis atau antrean pesanan yang menumpuk.

#### Tab Reminder — Restock, Follow-up & Mutasi

![Tangkapan Layar 2026-07-02 pukul 14.04.55.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F422180e7-9adc-411f-8bc2-ac9587372bb4-Tangkapan_Layar_2026-07-02_pukul_14.04.55.png)
*Tampilan: Tab Reminder*

##### Restock Barang (Alert Stok)

Daftar kerja barang yang perlu dipesan ulang atau ditransfer, berdasarkan aturan **Alert Stok** (batas minimum/maksimum stok). Barang dikelompokkan per supplier, jumlah pesan bisa diatur, lalu satu tombol membuat Permintaan Stok — barang berlebih menampilkan saran transfer antar cabang. Penjelasan lengkap ada di halaman manual **Alert Stok** (bab Gudang); aturannya dikelola lewat menu **Gudang → Stok → Alert Stok**.

Bagian ini tampil untuk pengguna yang punya izin restock.

##### Follow-up After Service (Kanban)

Pelanggan yang perlu di-follow-up dikelompokkan menjadi beberapa lane berdasarkan usia transaksi. Baris ringkasan di atas bisa diklik untuk memfokuskan satu lane saja.

| Lane | Rentang usia |
| --- | --- |
| **Baru** | 1–3 bulan |
| **Perlu** | 4–6 bulan |
| **Urgen** | 7–12 bulan |
| **Kritis** | 13–24 bulan |
| **Hilang** | lebih dari 24 bulan |

Tiap kartu pelanggan memuat nama, usia transaksi (bulan), tanggal, cabang, dan nomor telepon. Tekan tombol **Selesai** pada kartu untuk membuka form after service.

![Tangkapan Layar 2026-07-03 pukul 13.36.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F08ce2bb2-58f9-48fc-933f-90c5b38a9a05-Tangkapan_Layar_2026-07-03_pukul_13.36.18.png)
*Tampilan: Daftar Reminder After Service*

Bila ada pelanggan yang berulang tahun hari ini, muncul kartu **Ulang Tahun Hari Ini** di sisi kanan, lengkap dengan tombol kirim ucapan lewat WhatsApp.

##### Barang Mutasi Masuk

Daftar barang yang dikirim dari gudang pusat atau cabang lain dan **belum diterima** di cabang ini. Bisa disaring: **Semua**, **Terkirim**, atau **Menunggu**.

| Kolom | Keterangan |
| --- | --- |
| **Asal → Tujuan** | Cabang pengirim dan cabang penerima. |
| **Catatan** | Memo mutasi (jika ada). |
| **Tanggal** | Tanggal mutasi dibuat. |
| **Pengirim** | Nama pengguna yang mengirim (atau "belum dikirim"). |
| **Jumlah item** | Banyaknya item dalam mutasi. |
| **Status** | **Terkirim** (sudah dikirim, menunggu diterima) atau **Menunggu**. |

Untuk mutasi berstatus **Terkirim**, tekan **Konfirmasi** untuk mencatat bahwa barang sudah diterima di cabang. Setelah dikonfirmasi, stok cabang penerima ikut diperbarui.

![Tangkapan Layar 2026-07-03 pukul 12.40.52.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Ff81aefc5-76fe-4c2e-8350-22439cff56c0-Tangkapan_Layar_2026-07-03_pukul_12.40.52.png)
*Tampilan: Barang Mutasi Masuk*

#### After Service — Tindak Lanjut Pelanggan

After service adalah proses menghubungi pelanggan setelah mereka menerima kacamata, untuk memastikan kenyamanan pemakaian dan mencatat bila ada keluhan atau permintaan penyesuaian.

> **Rekomendasi:** lakukan follow-up 3–7 hari setelah pelanggan menerima produk. Tanyakan kenyamanan pemakaian dan apakah ada kendala.

##### Form After Service

Dari tab **Reminder**, tekan **Selesai** pada kartu pelanggan untuk membuka form. Form berisi tiga isian:

![02 - Dashboard-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F5fd1316c-2977-4d9e-9040-182c434f448c-02_-_Dashboard-4.png)
*Tampilan: Form After Service*

**Channel Komunikasi** — media yang dipakai saat menghubungi pelanggan.

![02 - Dashboard.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Fb5a3b393-72d3-4889-9034-71eee9c53f7d-02_-_Dashboard.png)
*Tampilan: Pilihan Channel Komunikasi*

| Channel | Kegunaan |
| --- | --- |
| **WhatsApp** | Follow-up cepat dan paling sering dipakai. |
| **Call** | Komunikasi langsung untuk kasus teknis. |
| **SMS** | Alternatif bila nomor tidak memakai WhatsApp. |

**Respon Pelanggan** — hasil follow-up.

![02 - Dashboard-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Fc65a6e05-16b6-442f-8435-1166545d2f23-02_-_Dashboard-1.png)
*Tampilan: Pilihan Respon Pelanggan*

| Respon | Arti |
| --- | --- |
| **Nyaman** | Pelanggan nyaman, tidak ada masalah. |
| **Tidak ada Respon** | Pelanggan tidak membalas follow-up. |
| **Refraksi** | Pelanggan perlu cek mata ulang. |
| **Setelan** | Pelanggan butuh setel ulang frame. |
| **Komplain** | Ada masalah pada kacamata atau lensa. |
| **Pending** | Pelanggan belum mencoba atau perlu follow-up lanjutan. |

**Keterangan Feedback** — kolom catatan detail hasil percakapan, misalnya "Nyaman, tanpa keluhan."

Tekan **Simpan Feedback** untuk menyimpan. Bila after service pernah diisi, tombolnya berubah menjadi **Ubah Feedback**. Riwayat feedback tersimpan menempel pada penjualan terkait, dan bisa dibuka lewat tautan **Detail Penjualan** di form.

##### Ringkasan Alur After Service

| Tahap | Deskripsi |
| --- | --- |
| 1. Pelanggan masuk Reminder | Muncul otomatis beberapa waktu setelah transaksi, di tab Reminder. |
| 2. Hubungi pelanggan | Lewat WhatsApp, telepon, atau SMS — dipilih di Channel Komunikasi. |
| 3. Tanyakan kenyamanan | Singkat, sopan, jelas. |
| 4. Catat respon | Pilih Respon Pelanggan sesuai jawaban. |
| 5. Isi Keterangan Feedback | Tulis detail percakapan. |
| 6. Simpan | Tekan **Simpan Feedback**. |

##### Contoh Percakapan Follow-up

**Pelanggan nyaman**

Staf: "Halo kak, saya dari Lensiro Optical. Mau menanyakan bagaimana kenyamanan kacamata baru yang kemarin diambil?"
Pelanggan: "Iya kak, nyaman dipakai."
Catatan sistem — Respon: **Nyaman**. Feedback: pelanggan nyaman, tidak ada keluhan.

**Perlu setelan ulang**

Pelanggan: "Bagian hidungnya agak longgar."
Staf: "Baik kak, bisa datang kapan saja untuk kami setel ulang secara gratis ya."
Catatan sistem — Respon: **Setelan**. Feedback: nosepad longgar, pelanggan akan datang untuk setelan.

**Tidak ada respon**

Staf menghubungi via WhatsApp namun tidak dibalas.
Catatan sistem — Respon: **Tidak ada Respon**.

**Komplain**

Pelanggan: "Kalau dipakai agak lama jadi pusing."
Staf: "Baik kak, mohon maaf. Agar lebih akurat, kakak bisa datang untuk pengecekan ulang refraksi dan setelan frame."
Catatan sistem — Respon: **Komplain**. Feedback: pelanggan pusing, disarankan cek refraksi dan setelan.

**Pending**

Pelanggan: "Belum sempat pakai kak, nanti saya coba dulu."
Catatan sistem — Respon: **Pending**. Feedback: belum mencoba, follow-up ulang dijadwalkan.

#### Catatan & Tips

- Angka dashboard diperbarui otomatis setiap 60 detik; tidak perlu me-refresh halaman.
- Lencana merah pada tab **Reminder** menandakan ada follow-up atau mutasi yang perlu ditindaklanjuti.
- Konfirmasi barang mutasi segera setelah barang fisik diterima, agar stok antar cabang tetap sinkron.
- Tab **Keuangan** dan pilihan **cabang** mengikuti hak akses; jika tidak muncul, akun Anda belum diberi izin tersebut.

#### Lampiran

- [dashboard.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F8209da78-e69b-4650-bcb9-925106955409-dashboard.png) — image/png, 226 KB
- [02 - Dashboard-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Ff5b82913-5f14-4799-984a-e360caeb185e-02_-_Dashboard-2.png) — image/png, 174 KB
- [dashboard df.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F082faefb-7297-431a-885d-06a6ca8306d4-dashboard_df.png) — image/png, 73 KB
- [dashboard. mutasi.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Faff498be-7dd2-49a9-97a6-6c7317165e88-dashboard._mutasi.png) — image/png, 74 KB
- [02 - Dashboard-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F5fd1316c-2977-4d9e-9040-182c434f448c-02_-_Dashboard-4.png) — image/png, 114 KB
- [02 - Dashboard.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Fb5a3b393-72d3-4889-9034-71eee9c53f7d-02_-_Dashboard.png) — image/png, 113 KB
- [02 - Dashboard-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Fc65a6e05-16b6-442f-8435-1166545d2f23-02_-_Dashboard-1.png) — image/png, 112 KB
- [Screenshot 2026-07-02 at 13.52.12.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F44f2993b-1d51-45bf-b0df-5e782d4b8e0b-Screenshot_2026-07-02_at_13.52.12.png) — image/png, 242 KB
- [Tangkapan Layar 2026-07-02 pukul 14.04.55.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F422180e7-9adc-411f-8bc2-ac9587372bb4-Tangkapan_Layar_2026-07-02_pukul_14.04.55.png) — image/png, 293 KB
- [Tangkapan Layar 2026-07-03 pukul 12.40.52.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2Ff81aefc5-76fe-4c2e-8350-22439cff56c0-Tangkapan_Layar_2026-07-03_pukul_12.40.52.png) — image/png, 89 KB
- [Tangkapan Layar 2026-07-03 pukul 13.36.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F3b0752b7-e607-4aa7-a57b-8ac18e1095da-Tangkapan_Layar_2026-07-03_pukul_13.36.18.png) — image/png, 172 KB
- [Tangkapan Layar 2026-07-03 pukul 13.36.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F5%2F08ce2bb2-58f9-48fc-933f-90c5b38a9a05-Tangkapan_Layar_2026-07-03_pukul_13.36.18.png) — image/png, 172 KB

## Bab 02 — Master

> Pengantar modul Master — kumpulan data utama (supplier, cabang, kategori, brand, dan lainnya) yang menjadi acuan seluruh transaksi Lensiro. Baca di awal sebelum mengisi data master satu per satu.

### Pengertian

**Master** adalah kumpulan data utama yang menjadi dasar seluruh proses di aplikasi Lensiro. Setiap transaksi penjualan, pembelian, stok, dan laporan mengacu pada data yang tersimpan di modul ini.

Karena semua modul lain menariknya sebagai acuan, data master perlu diisi lebih dulu dan dijaga tetap rapi. Nama supplier, kategori, brand, dan harga yang seragam membuat pencatatan konsisten di semua cabang dan laporan menjadi akurat.

### Fitur Utama

Modul Master berisi beberapa menu, masing-masing mengelola satu jenis data:

- **Supplier** — pemasok barang seperti lensa, frame, dan aksesori.
- **Cabang** — daftar toko dan gudang.
- **Kategori Barang** — pengelompokan barang secara umum (Lensa, Frame, Aksesori, Jasa).
- **Sub Kategori Barang** — pemecahan kategori menjadi kelompok yang lebih detail.
- **Brand Barang** — merek produk.
- **Sub Brand Barang** — varian atau seri di bawah satu merek.
- **Warna** dan **Sub Warna** — pilihan warna barang.
- **Bank**, **Jaminan**, dan **Tipe Harga Barang** — data pendukung transaksi.
- **Resep** — data resep untuk penjualan kacamata.

Data master hanya bisa **diubah** atau **dinonaktifkan**, tidak bisa dihapus permanen. Ini menjaga riwayat transaksi lama tetap utuh meskipun sebuah supplier atau brand sudah tidak dipakai lagi.

### Langkah Penggunaan

Sebelum mengelola data master, masuk dulu ke aplikasi Lensiro melalui alamat toko Anda (mis. https://app.lensiro.com). Setelah berlangganan, Anda akan mendapat tautan sendiri.

1. Buka peramban (Google Chrome, Safari, atau Edge).
2. Masukkan alamat aplikasi.
3. Isi **Username** dan **Password** yang diberikan administrator.
4. Klik tombol **Mulai Akses!** untuk masuk.

![00 - Master-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F6%2F5c507694-15a5-48e3-915b-9a541ad3ed59-00_-_Master-2.png)
*Tampilan: Halaman Login*

Setelah berhasil masuk, Anda diarahkan ke halaman utama dan dapat membuka menu **Master** untuk mengelola Supplier, Cabang, Kategori, Brand, dan lainnya.

![00 - Master-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F6%2F32e50f64-435d-45d4-9c6e-b3425c711c2f-00_-_Master-3.png)
*Tampilan: Halaman utama modul Master*

### Catatan & Tips

- Isi data master di awal sebelum mulai mencatat transaksi, agar pilihan supplier, kategori, dan brand sudah tersedia.
- Gunakan penamaan yang konsisten di semua menu supaya laporan mudah dibaca dan tidak ada data ganda.
- Untuk toko multi-cabang, struktur data master yang sama dipakai di semua cabang sehingga laporan antar cabang bisa digabung atau dibandingkan.

### Lampiran

- [00 - Master-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F6%2F5c507694-15a5-48e3-915b-9a541ad3ed59-00_-_Master-2.png) — image/png, 93 KB
- [00 - Master-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F6%2F32e50f64-435d-45d4-9c6e-b3425c711c2f-00_-_Master-3.png) — image/png, 274 KB

### Supplier

> Mencatat dan mengelola daftar pemasok barang (lensa, frame, aksesori). Dibutuhkan sebelum melakukan pembelian, karena supplier dipakai di modul Pembelian, Gudang, dan Laporan Hutang.

#### Pengertian

Menu **Supplier** dipakai untuk mencatat pemasok barang seperti lensa, frame, atau aksesori. Data supplier yang lengkap mempermudah proses pembelian, pelacakan histori, serta penyusunan laporan stok dan hutang dagang.

Halaman Supplier menampilkan daftar supplier di sisi kiri dan detail supplier terpilih di sisi kanan. Dari sini Anda bisa menambah, mengubah, menonaktifkan, sampai mengimpor banyak supplier sekaligus.

#### Fitur Utama

- **Tambah / Ubah Supplier** — form untuk mengisi data pemasok.
- **Nonaktifkan / Aktifkan** — menyembunyikan atau memunculkan kembali supplier tanpa menghapus datanya.
- **Import CSV** — menambah banyak supplier sekaligus dari file.
- **Analisis Supplier** — melihat ringkasan performa pembelian per supplier.

#### Langkah Penggunaan

##### Menambah supplier baru

1. Buka menu **Master → Supplier**. Daftar supplier yang sudah ada akan tampil.
2. Klik tombol **Tambah Supplier** di kanan atas halaman.
3. Sistem menampilkan **form input Supplier**. Isi kolom yang tersedia.


![Tangkapan Layar 2026-07-02 pukul 14.18.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F8bc4be41-e5b4-44b7-8d68-d333a28fce4d-Tangkapan_Layar_2026-07-02_pukul_14.18.15.png)
*Tampilan: Form input Supplier*

| Kolom | Keterangan |
|:--|:--|
| **Nama** (wajib) | Nama supplier. |
| **Alamat** | Alamat lengkap supplier. |
| **Nomor Telephone** | Nomor telepon supplier. |
| **Nomor Fax** | Nomor faks (jika ada). |
| **Email** | Alamat email supplier. |
| **Website** | Situs web supplier. |
| **Keterangan** | Catatan tambahan (opsional). |

4. Klik **Tambah Supplier** untuk menyimpan. Bila berhasil, sistem menampilkan notifikasi konfirmasi dan supplier baru muncul di daftar.

##### Mengubah data supplier

1. Pada daftar, klik supplier yang ingin diperbarui untuk membuka detailnya.
2. Klik tombol **Edit**. Form **Ubah Supplier** muncul dengan data lama.
3. Ubah data yang diperlukan, lalu klik **Simpan Perubahan**.


![Tangkapan Layar 2026-07-02 pukul 14.28.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F6cd898ac-ee08-4644-aaf0-a367c5cccbb5-Tangkapan_Layar_2026-07-02_pukul_14.28.26.png)
*Tampilan: Form Ubah Supplier*

> **Catatan:** Perubahan langsung dipakai di seluruh modul yang terhubung, seperti Pembelian, Gudang, dan Laporan Hutang.

##### Menonaktifkan supplier

Jika sebuah supplier tidak lagi bekerja sama, datanya tidak dihapus melainkan dinonaktifkan supaya histori pembelian tetap aman.

1. Pilih supplier pada daftar untuk membuka detailnya.
2. Klik tombol **Nonaktifkan**, lalu konfirmasi.
3. Status supplier berubah menjadi **Non Aktif** dan tidak lagi muncul saat membuat transaksi pembelian baru.


![Tangkapan Layar 2026-07-02 pukul 14.32.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F574676b0-cb12-4e6c-b483-9b07849837d7-Tangkapan_Layar_2026-07-02_pukul_14.32.20.png)
*Tampilan: Daftar supplier dengan status Aktif dan Non Aktif*

Untuk memunculkan kembali supplier nonaktif, centang **Tampilkan Non Aktif** di daftar, pilih supplier tersebut, lalu klik **Aktifkan**.

> **Catatan:** Supplier tidak bisa dihapus permanen, hanya dinonaktifkan, demi menjaga keutuhan histori pembelian.

#### Import Data Supplier dari File CSV

Fitur **Import Supplier** dipakai untuk menambahkan banyak supplier sekaligus dari file CSV, tanpa mengetik satu per satu.

1. Di menu **Master → Supplier**, klik tombol **Import Supplier** di kanan atas.

![Tangkapan Layar 2026-07-02 pukul 14.35.58.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F099965bd-a9f1-4491-9121-5e3a1d4d0886-Tangkapan_Layar_2026-07-02_pukul_14.35.58.png)
*Tampilan: Tombol Import Supplier*

![01 - Supplier-14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2Fac1de556-01cc-4e8c-b271-2b4199a33b9a-01_-_Supplier-14.png)
*Tampilan: Jendela Import Supplier*

2. Klik **Download Template CSV**, lalu buka file itu dengan Excel, Google Sheets, atau aplikasi sejenis. Template Supplier hanya berisi satu kolom: **nama**.
3. Isi data supplier, lalu simpan file dalam format **CSV (.csv)**.
4. Kembali ke jendela import, klik area unggah atau seret file ke dalamnya, lalu pilih file yang sudah diisi.

![01 - Supplier-16.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2Fff60f441-8b06-41f2-9a41-5c30765976f3-01_-_Supplier-16.png)
*Tampilan: Area unggah file CSV*

5. Sistem memproses seluruh data. Baris yang berhasil ditambahkan ke daftar; baris yang formatnya salah ditandai agar bisa diperbaiki.

> **Catatan:**
> - Jangan biarkan ada baris kosong di file.
> - Maksimum 5000 baris per file.
> - Untuk mengubah satu-dua supplier, gunakan tombol **Edit** yang lebih cepat.

Cara import yang sama juga berlaku di menu Master lain yang punya tombol **Import**, seperti Cabang, Kategori Barang, Sub Kategori Barang, Brand Barang, Sub Brand Barang, dan Warna: unduh template, isi data, simpan sebagai CSV, lalu unggah kembali.

#### Catatan & Tips

- Semua data di menu Master hanya dapat **diubah** atau **dinonaktifkan**, tidak dapat dihapus permanen. Cara mengubah dan menonaktifkannya sama seperti pada menu Supplier.
- Isi nomor kontak dan alamat selengkap mungkin agar mempermudah komunikasi saat pembelian.

#### Lampiran

- [01 - Supplier-9.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F24a915e3-61c2-43fd-b6dc-9c9a21a2b17a-01_-_Supplier-9.png) — image/png, 119 KB
- [01 - Supplier-10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F7282748b-5aa5-4e8c-8c73-a7ed6b333ff8-01_-_Supplier-10.png) — image/png, 126 KB
- [01 - Supplier-11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F0cb0c7ec-3346-4e91-9834-a87e8d73b3e3-01_-_Supplier-11.png) — image/png, 135 KB
- [01 - Supplier-13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F9ecb0b21-bcb4-4238-9027-6fb64c470318-01_-_Supplier-13.png) — image/png, 9 KB
- [01 - Supplier-14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2Fac1de556-01cc-4e8c-b271-2b4199a33b9a-01_-_Supplier-14.png) — image/png, 98 KB
- [01 - Supplier-16.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2Fff60f441-8b06-41f2-9a41-5c30765976f3-01_-_Supplier-16.png) — image/png, 29 KB
- [スクリーンショット 2026-06-29 19.05.19.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F35eaee25-6c88-48a4-a810-912078ff9c07-__________2026-06-29_19.05.19.png) — image/png, 40 KB
- [Tangkapan Layar 2026-07-02 pukul 14.18.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F96ea2ab1-5f30-4d90-9665-1bf93175c715-Tangkapan_Layar_2026-07-02_pukul_14.18.15.png) — image/png, 112 KB
- [Tangkapan Layar 2026-07-02 pukul 14.23.08.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2Ffb3a10bf-a1e5-4fe0-a572-931788da6121-Tangkapan_Layar_2026-07-02_pukul_14.23.08.png) — image/png, 87 KB
- [Tangkapan Layar 2026-07-02 pukul 14.18.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F8bc4be41-e5b4-44b7-8d68-d333a28fce4d-Tangkapan_Layar_2026-07-02_pukul_14.18.15.png) — image/png, 112 KB
- [Tangkapan Layar 2026-07-02 pukul 14.28.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F6cd898ac-ee08-4644-aaf0-a367c5cccbb5-Tangkapan_Layar_2026-07-02_pukul_14.28.26.png) — image/png, 88 KB
- [Tangkapan Layar 2026-07-02 pukul 14.32.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F574676b0-cb12-4e6c-b483-9b07849837d7-Tangkapan_Layar_2026-07-02_pukul_14.32.20.png) — image/png, 264 KB
- [Tangkapan Layar 2026-07-02 pukul 14.35.58.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F7%2F099965bd-a9f1-4491-9121-5e3a1d4d0886-Tangkapan_Layar_2026-07-02_pukul_14.35.58.png) — image/png, 13 KB

### Cabang

> Mengatur data cabang (toko) dan gudang. Dibutuhkan toko yang punya lebih dari satu lokasi agar transaksi, stok, dan laporan bisa dipisah per lokasi namun tetap dalam satu sistem.

#### Pengertian

Menu **Cabang** dipakai untuk mendaftarkan lokasi usaha, baik toko maupun gudang. Fungsi ini penting bagi toko optik yang punya lebih dari satu lokasi.

Dengan data cabang, transaksi, stok, dan laporan bisa dipisah berdasarkan lokasi tetapi tetap terhubung dalam satu sistem pusat. Setiap pengguna juga bisa diatur agar hanya melihat data di cabangnya sendiri.

#### Fitur Utama

- **Tambah / Ubah Cabang** — mendaftarkan toko atau gudang baru.
- **Jenis lokasi** — pilih **Cabang** (toko) atau **Gudang**. Gudang membuat stok bisa dipantau terpisah dari cabang toko.
- **Import CSV** — menambah banyak cabang sekaligus dari file (cara sama seperti di menu Supplier).

#### Langkah Penggunaan

1. Buka menu **Master → Cabang**. Daftar cabang yang sudah ada akan tampil.
2. Klik tombol **Tambah Cabang** di kanan atas halaman.

![03 - Cabang tambah.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F8%2F9cf5a00f-2e56-4c00-9efa-b972861970f1-03_-_Cabang_tambah.png)
*Tampilan: Tombol Tambah Cabang*

3. Form isian cabang akan muncul. Lengkapi kolom yang tersedia.

![Tangkapan Layar 2026-07-02 pukul 14.40.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F8%2Fe47d3765-71a9-4513-83d6-42959aad0f0a-Tangkapan_Layar_2026-07-02_pukul_14.40.09.png)
*Tampilan: Form Tambah Cabang*

| Kolom | Keterangan |
|:--|:--|
| **Kode** (wajib) | Kode unik untuk identifikasi cabang, misalnya `LMJ01`. |
| **Nama** (wajib) | Nama cabang, misalnya "Lensiro Cabang Surabaya" atau "Gudang Pusat". |
| **Jenis** | Pilih **Cabang** (toko) atau **Gudang**. |
| **Alamat** | Alamat lengkap cabang atau gudang. |
| **Nomor Telephone** | Nomor kontak cabang. |

4. Setelah semua kolom diisi, klik **Tambah Cabang** untuk menyimpan. Bila berhasil, cabang baru muncul di daftar.

Untuk mengubah data, pilih cabang pada daftar lalu klik **Edit**; form **Ubah Cabang** akan muncul, dan simpan dengan **Simpan Perubahan**.

#### Catatan & Tips

- Pastikan **Kode** cabang unik dan tidak sama dengan cabang lain.
- Data cabang dipakai di modul Pelanggan, Gudang, Penjualan, dan Laporan.
- Jika punya gudang terpisah, pilih **Jenis = Gudang** agar stoknya terpantau terpisah dari cabang toko.

#### Lampiran

- [03 - Cabang tambah.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F8%2F9cf5a00f-2e56-4c00-9efa-b972861970f1-03_-_Cabang_tambah.png) — image/png, 3 KB
- [02 - Cabang-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F8%2F34f46cf4-fb25-45c0-a04c-301a713e8e3f-02_-_Cabang-3.png) — image/png, 109 KB
- [Tangkapan Layar 2026-07-02 pukul 14.40.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F8%2Fe47d3765-71a9-4513-83d6-42959aad0f0a-Tangkapan_Layar_2026-07-02_pukul_14.40.09.png) — image/png, 68 KB

### Kategori Barang

> Mengelompokkan barang dan jasa secara umum (Lensa, Frame, Aksesori, Jasa). Dipakai saat menambah barang di Master Barang dan untuk memfilter laporan penjualan dan stok.

#### Pengertian

Menu **Kategori Barang** dipakai untuk mengelompokkan barang dan jasa yang terdaftar di Master Barang. Kategori memudahkan pengelolaan dan pencarian barang, terutama saat jumlah produk sudah banyak.

Contoh kategori: Lensa, Frame, Aksesori/Sparepart, dan Jasa Perbaikan. Pengelompokan ini juga membantu penyusunan laporan penjualan dan stok per kategori.

#### Fitur Utama

- **Tambah / Ubah Kategori** — membuat dan memperbarui kategori barang.
- **Import CSV** — menambah banyak kategori sekaligus dari file (cara sama seperti di menu Supplier).
- Kategori yang tidak lagi dipakai bisa dinonaktifkan tanpa dihapus.

#### Langkah Penggunaan

1. Buka menu **Master → Kategori Barang**. Daftar kategori yang sudah ada akan tampil.

![Tangkapan Layar 2026-07-02 pukul 15.31.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2Fc9fc4b19-0e89-4dca-a5dc-4b3c14ae451a-Tangkapan_Layar_2026-07-02_pukul_15.31.09.png)
*Tampilan: Daftar Kategori Barang*

2. Klik tombol **Tambah Kategori Barang** di kanan atas halaman.

![Tangkapan Layar 2026-07-03 pukul 09.39.13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2F1ba72fcf-48d1-4b52-aa8a-7bb2b68a0529-Tangkapan_Layar_2026-07-03_pukul_09.39.13.png)
*Tampilan: Tombol Tambah Kategori Barang*

3. Setelah form muncul, lengkapi kolom yang tersedia.

![Tangkapan Layar 2026-07-02 pukul 15.33.51.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2Faf8378c0-e9c9-486f-8eb8-4ab48c79cdbb-Tangkapan_Layar_2026-07-02_pukul_15.33.51.png)
*Tampilan: Form Kategori Barang*

| Kolom | Keterangan |
|:--|:--|
| **Kode** (wajib) | Kode unik untuk kategori, misalnya `FRM`. |
| **Nama** (wajib) | Nama kategori barang atau jasa, misalnya "Frame", "Lensa", atau "Jasa Servis". |
| **Memo** (opsional) | Catatan tambahan, seperti deskripsi singkat isi kategori. |

4. Klik **Tambah Kategori** untuk menyimpan. Bila berhasil, kategori baru muncul di daftar.

Untuk mengubah data, pilih kategori pada daftar, klik **Edit**, ubah data, lalu klik **Simpan Perubahan**.

#### Catatan & Tips

- Gunakan **kode** yang unik untuk setiap kategori agar tidak tertukar.
- Kategori yang sudah dibuat otomatis muncul saat menambah atau mengedit barang di Master Barang.
- Gunakan **Memo** untuk deskripsi singkat yang membantu pengguna lain memahami isi kategori.

#### Lampiran

- [03 - Kategori Barang.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2F3e059def-4bdd-43b8-9c2d-d1440c3453f5-03_-_Kategori_Barang.png) — image/png, 78 KB
- [04 - Kategori Barang tombol.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2F124090a9-8834-4538-a201-798c4908ac0d-04_-_Kategori_Barang_tombol.png) — image/png, 4 KB
- [03 - Kategori Barang-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2Fcc8f5b16-137d-47d5-879e-87805639739e-03_-_Kategori_Barang-3.png) — image/png, 105 KB
- [Tangkapan Layar 2026-07-02 pukul 15.31.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2Fc9fc4b19-0e89-4dca-a5dc-4b3c14ae451a-Tangkapan_Layar_2026-07-02_pukul_15.31.09.png) — image/png, 290 KB
- [Tangkapan Layar 2026-07-02 pukul 15.33.51.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2Faf8378c0-e9c9-486f-8eb8-4ab48c79cdbb-Tangkapan_Layar_2026-07-02_pukul_15.33.51.png) — image/png, 52 KB
- [Tangkapan Layar 2026-07-03 pukul 09.39.13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F9%2F1ba72fcf-48d1-4b52-aa8a-7bb2b68a0529-Tangkapan_Layar_2026-07-03_pukul_09.39.13.png) — image/png, 12 KB

### Sub Kategori Barang

> Memecah sebuah Kategori Barang menjadi kelompok yang lebih detail (mis. Frame → Frame Metal). Dipakai saat menambah barang dan untuk memfilter data lebih spesifik di laporan.

#### Pengertian

**Sub Kategori Barang** adalah pengelompokan yang lebih spesifik di bawah sebuah **Kategori Barang**. Fitur ini memecah kategori utama menjadi kelompok yang lebih detail, sehingga pengelolaan stok, pencarian produk, dan laporan lebih terstruktur.

Contoh:

- **Kategori:** Frame → **Sub Kategori:** Frame Plastik, Frame Metal
- **Kategori:** Lensa → **Sub Kategori:** Lensa Single Vision, Lensa Progresif

#### Fitur Utama

- **Tambah / Ubah Sub Kategori** — membuat varian di bawah kategori induk.
- **Import CSV** — menambah banyak sub kategori sekaligus dari file (cara sama seperti di menu Supplier).

#### Langkah Penggunaan

1. Buka menu **Master → Sub Kategori Barang**. Daftar sub kategori yang sudah ada akan tampil.

![Tangkapan Layar 2026-07-02 pukul 15.40.59.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2Fddffd595-b190-403f-b71d-16fa838880bc-Tangkapan_Layar_2026-07-02_pukul_15.40.59.png)
*Tampilan: Daftar Sub Kategori Barang*

2. Klik tombol **Tambah Sub Kategori Barang** di kanan atas halaman.

![Tangkapan Layar 2026-07-02 pukul 15.43.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2F5c885421-1958-4772-ac5a-9b857648a4d6-Tangkapan_Layar_2026-07-02_pukul_15.43.22.png)
*Tampilan: Tombol Tambah Sub Kategori Barang*

3. Setelah form muncul, lengkapi kolom yang tersedia.

![Tangkapan Layar 2026-07-02 pukul 15.48.28.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2F395c8528-88bc-44d6-b935-c03773743c10-Tangkapan_Layar_2026-07-02_pukul_15.48.28.png)
*Tampilan: Form Sub Kategori Barang*

| Kolom | Keterangan |
|:--|:--|
| **Kategori Barang** (wajib) | Pilih kategori utama yang menjadi induk dari sub kategori ini. |
| **Nama** (wajib) | Nama sub kategori, misalnya "Frame Metal" atau "Lensa Progresif". |
| **Memo** (opsional) | Catatan tambahan seperti deskripsi produk yang termasuk sub kategori tersebut. |

4. Klik **Tambah Sub Kategori** untuk menyimpan. Bila berhasil, sub kategori baru muncul di daftar.

Untuk mengubah data, pilih sub kategori pada daftar, klik **Edit**, ubah data, lalu klik **Simpan Perubahan**.

#### Catatan & Tips

- Pastikan **kategori utama** sudah dibuat lebih dulu sebelum menambah sub kategori.
- Gunakan penamaan yang konsisten agar mudah dicari.
- Sub kategori yang dibuat otomatis muncul saat menambah barang di Master Barang.

#### Lampiran

- [04 - Sub Kategori Barang.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2Fd5235fa9-3fcd-411f-90de-c410eecacc34-04_-_Sub_Kategori_Barang.png) — image/png, 179 KB
- [05 - Sub Kategori Barang tombol.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2F237482a8-b33b-4c01-9430-01ee116a07bb-05_-_Sub_Kategori_Barang_tombol.png) — image/png, 4 KB
- [04 - Sub Kategori Barang-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2Ff2eb5847-7fd4-4214-8149-87aceb8076ca-04_-_Sub_Kategori_Barang-3.png) — image/png, 116 KB
- [Tangkapan Layar 2026-07-02 pukul 15.40.59.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2Fddffd595-b190-403f-b71d-16fa838880bc-Tangkapan_Layar_2026-07-02_pukul_15.40.59.png) — image/png, 335 KB
- [Tangkapan Layar 2026-07-02 pukul 15.43.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2F5c885421-1958-4772-ac5a-9b857648a4d6-Tangkapan_Layar_2026-07-02_pukul_15.43.22.png) — image/png, 10 KB
- [Tangkapan Layar 2026-07-02 pukul 15.48.28.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F10%2F395c8528-88bc-44d6-b935-c03773743c10-Tangkapan_Layar_2026-07-02_pukul_15.48.28.png) — image/png, 61 KB

### Brand Barang

> Mendaftarkan merek produk dan mengelompokkannya per kategori. Dipakai saat menambah barang dan untuk laporan penjualan per merek. Bonus/komisi merek diatur lewat fitur Setel Harga Komisi di menu Sub Brand.

#### Pengertian

Menu **Brand Barang** dipakai untuk mendaftarkan merek produk. Pengelompokan per merek mempermudah pencarian barang, pengelolaan stok, dan pembuatan laporan penjualan per merek.

Contoh brand: Essilor, Hoya, Zeiss. Dengan data brand, toko bisa menganalisis merek mana yang paling laku atau memberi margin tertinggi.

#### Fitur Utama

- **Tambah / Ubah Brand** — mendaftarkan dan memperbarui merek.
- **Bonus Penjualan** — setiap brand menampilkan nilai komisi penjualannya di daftar. Nilai ini diatur lewat fitur **Setel Harga Komisi** di menu **Sub Brand Barang**, bukan di form brand.
- **Import CSV** — menambah banyak brand sekaligus dari file (cara sama seperti di menu Supplier).

#### Langkah Penggunaan

1. Buka menu **Master → Brand Barang**. Daftar brand yang sudah ada akan tampil.

![Tangkapan Layar 2026-07-02 pukul 15.57.50.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2F64edb326-eaec-48d6-806b-a1f8f41e7888-Tangkapan_Layar_2026-07-02_pukul_15.57.50.png)
*Tampilan: Daftar Brand Barang*

2. Klik tombol **Tambah Brand Barang** di kanan atas halaman.

![Tangkapan Layar 2026-07-02 pukul 15.58.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2Ff92b4201-a55d-4a1b-bfcc-792d22cf55e3-Tangkapan_Layar_2026-07-02_pukul_15.58.33.png)
*Tampilan: Tombol Tambah Brand Barang*

3. Setelah form muncul, lengkapi kolom yang tersedia.

![Tangkapan Layar 2026-07-02 pukul 16.00.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2F98c73c33-2150-4034-91e5-18cc69a07be3-Tangkapan_Layar_2026-07-02_pukul_16.00.20.png)
*Tampilan: Form Brand Barang*

| Kolom | Keterangan |
|:--|:--|
| **Kategori Barang** (wajib) | Pilih kategori yang menaungi brand ini. |
| **Nama** (wajib) | Nama merek, misalnya "Ray-Ban", "Essilor", atau "Hoya". |
| **Memo** (opsional) | Catatan tambahan mengenai brand. |

4. Klik **Tambah Brand** untuk menyimpan. Bila berhasil, brand baru muncul di daftar.

Untuk mengubah data, pilih brand pada daftar, klik **Edit**, ubah data, lalu klik **Simpan Perubahan**.

#### Catatan & Tips

- Tulis nama brand secara konsisten dan sesuai ejaan resmi agar mudah dicari.
- Setiap brand bisa dipakai kembali saat menambah barang di Master Barang.
- Untuk mengatur komisi per merek, gunakan fitur **Setel Harga Komisi** di menu **Sub Brand Barang**.

#### Lampiran

- [05 - Brand Barangd.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2Fe16393b4-de95-43c3-8220-e0fedf060032-05_-_Brand_Barangd.png) — image/png, 120 KB
- [06 - Brand Barang add.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2F25282ec8-292e-47f4-84d9-e3a43aa856b1-06_-_Brand_Barang_add.png) — image/png, 4 KB
- [05 - Brand Barang-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2Fe6824a57-c2d8-48e5-b001-d487e72d32f6-05_-_Brand_Barang-1.png) — image/png, 113 KB
- [Tangkapan Layar 2026-07-02 pukul 15.57.50.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2F64edb326-eaec-48d6-806b-a1f8f41e7888-Tangkapan_Layar_2026-07-02_pukul_15.57.50.png) — image/png, 290 KB
- [Tangkapan Layar 2026-07-02 pukul 15.58.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2Ff92b4201-a55d-4a1b-bfcc-792d22cf55e3-Tangkapan_Layar_2026-07-02_pukul_15.58.33.png) — image/png, 8 KB
- [Tangkapan Layar 2026-07-02 pukul 16.00.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F11%2F98c73c33-2150-4034-91e5-18cc69a07be3-Tangkapan_Layar_2026-07-02_pukul_16.00.20.png) — image/png, 56 KB

### Sub Brand Barang

> Mendaftarkan varian atau seri di bawah satu merek induk (mis. Essilor → Crizal, Varilux). Juga tempat mengatur komisi penjualan sampai level sub brand lewat fitur Setel Harga Komisi.

#### Pengertian

**Sub Brand Barang** adalah merek turunan atau varian khusus di bawah satu merek utama. Fitur ini memperinci seri atau varian produk dalam satu merek, sehingga pencarian, pengelolaan stok, dan laporan penjualan bisa lebih detail per varian.

Contoh:

- **Brand:** Essilor → **Sub Brand:** Crizal, Varilux, Eyezen
- **Brand:** Hoya → **Sub Brand:** BlueControl, Hi-Vision, Nulux

#### Fitur Utama

- **Tambah / Ubah Sub Brand** — membuat varian di bawah brand induk.
- **Setel Harga Komisi** — mengatur nilai komisi sampai level sub brand.
- **Import CSV** — menambah banyak sub brand sekaligus dari file (cara sama seperti di menu Supplier).

#### Langkah Penggunaan

##### Menambah sub brand

1. Buka menu **Master → Sub Brand Barang**. Daftar sub brand yang sudah ada akan tampil.

![Tangkapan Layar 2026-07-02 pukul 16.07.42.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2Fafe11951-b9e4-473d-9da2-a4305cd06ecc-Tangkapan_Layar_2026-07-02_pukul_16.07.42.png)
*Tampilan: Daftar Sub Brand Barang*

2. Klik tombol **Tambah Sub Brand Barang** di kanan atas halaman.

![Tangkapan Layar 2026-07-02 pukul 16.08.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F25ee55ad-1d39-4f11-a325-2771f2d722bf-Tangkapan_Layar_2026-07-02_pukul_16.08.56.png)
*Tampilan: Tombol Tambah Sub Brand Barang*

3. Setelah form muncul, lengkapi kolom yang tersedia.

![Tangkapan Layar 2026-07-02 pukul 16.11.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F21b646c1-10b4-43ce-a195-accb245f86b1-Tangkapan_Layar_2026-07-02_pukul_16.11.20.png)
*Tampilan: Form Sub Brand Barang*

| Kolom | Keterangan |
|:--|:--|
| **Brand Barang** (wajib) | Pilih brand induk yang sudah dibuat, misalnya "Essilor" atau "Hoya". |
| **Nama** (wajib) | Nama sub brand atau varian, misalnya "Eyezen" atau "Crizal". |
| **Memo** (opsional) | Keterangan tambahan, misalnya "Lensa Bluecut Premium". |

4. Klik **Tambah Sub Brand** untuk menyimpan. Bila berhasil, sub brand baru muncul di daftar.

Untuk mengubah data, pilih sub brand pada daftar, klik **Edit**, ubah data, lalu klik **Simpan Perubahan**.

#### Setel Harga Komisi

Fitur **Setel Harga Komisi** dipakai untuk menentukan atau mengubah komisi sampai level sub brand, sehingga komisi bisa berbeda antar varian dalam satu brand.

1. Di menu **Master → Sub Brand Barang**, klik tombol **Setel Harga Komisi**.

![Tangkapan Layar 2026-07-02 pukul 16.12.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F6db12ec9-d437-4365-9987-46ad819a9f45-Tangkapan_Layar_2026-07-02_pukul_16.12.33.png)
*Tampilan: Tombol Setel Harga Komisi*

2. Isi form pengaturan komisi.

![Tangkapan Layar 2026-07-02 pukul 16.13.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2Fc55b19e9-3746-4a84-ac02-1f4ac906e0a9-Tangkapan_Layar_2026-07-02_pukul_16.13.56.png)
*Tampilan: Form Setel Harga Komisi*

| Kolom | Keterangan |
|:--|:--|
| **Brand** | Pilih brand induk. |
| **Sub Brands** | (Opsional) pilih satu atau beberapa sub brand. Jika kosong, perubahan berlaku pada brand. |
| **Target Update** | Pilih **Hanya data komisi dengan jumlah "0"** atau **Semua data komisi**. |
| **Harga** | Nominal komisi dalam rupiah. |

3. Bagian bawah menampilkan tabel pratinjau berisi harga **sebelum** dan **sesudah** diubah, untuk memastikan data sudah benar.
4. Klik **Lakukan Perubahan**. Sistem memperbarui komisi sesuai filter yang dipilih.

Selain lewat form ini, komisi juga bisa diperbarui secara massal melalui tab import CSV di jendela yang sama.

#### Catatan & Tips

- Prioritas komisi: nilai di **Sub Brand** menimpa (override) komisi **Brand**.
- Jika komisi Sub Brand bernilai **0**, sistem memakai komisi **Brand**.
- Jika komisi Brand dan Sub Brand sama-sama **0**, komisi dianggap 0.
- Pastikan brand induk sudah dibuat sebelum menambah sub brand.

#### Lampiran

- [06 - Sub Brand Barangd.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F3538ec04-7abd-4c06-a0c5-3a03fe3a9fed-06_-_Sub_Brand_Barangd.png) — image/png, 157 KB
- [07 - Sub Brand Barang add.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F1b58deca-c7d4-4abf-925b-687b37a0d48d-07_-_Sub_Brand_Barang_add.png) — image/png, 3 KB
- [06 - Sub Brand Barang-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2Fb1c4a0cc-309f-4d01-a347-568c78b18c32-06_-_Sub_Brand_Barang-3.png) — image/png, 109 KB
- [06 - Sub Brand Barang-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2Fd95bec7a-6d20-465c-94ae-4f066c6f59ae-06_-_Sub_Brand_Barang-2.png) — image/png, 7 KB
- [06 - Sub Brand Barang-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2Ff2dbf40d-df82-4e56-97c0-31c1bbe7d581-06_-_Sub_Brand_Barang-4.png) — image/png, 126 KB
- [Tangkapan Layar 2026-07-02 pukul 16.07.42.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2Fafe11951-b9e4-473d-9da2-a4305cd06ecc-Tangkapan_Layar_2026-07-02_pukul_16.07.42.png) — image/png, 319 KB
- [Tangkapan Layar 2026-07-02 pukul 16.08.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F25ee55ad-1d39-4f11-a325-2771f2d722bf-Tangkapan_Layar_2026-07-02_pukul_16.08.56.png) — image/png, 10 KB
- [Tangkapan Layar 2026-07-02 pukul 16.11.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F21b646c1-10b4-43ce-a195-accb245f86b1-Tangkapan_Layar_2026-07-02_pukul_16.11.20.png) — image/png, 59 KB
- [Tangkapan Layar 2026-07-02 pukul 16.12.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2F6db12ec9-d437-4365-9987-46ad819a9f45-Tangkapan_Layar_2026-07-02_pukul_16.12.33.png) — image/png, 12 KB
- [Tangkapan Layar 2026-07-02 pukul 16.13.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F12%2Fc55b19e9-3746-4a84-ac02-1f4ac906e0a9-Tangkapan_Layar_2026-07-02_pukul_16.13.56.png) — image/png, 117 KB

### Ukuran

> Daftar nilai ukuran resep lensa (SPH, CYL, ADD) bertanda plus atau minus. Dibutuhkan saat mendata barang lensa agar pilihan ukuran muncul otomatis di transaksi.

#### Pengertian

**Ukuran** dipakai untuk membuat daftar nilai ukuran lensa, baik yang bertanda plus (+) maupun minus (−). Nilai ini kemudian dipakai saat mendata barang lensa — misalnya ukuran spheris (SPH), silinder (CYL), dan addisi (ADD).

Dengan daftar ukuran yang lengkap, sistem bisa menampilkan pilihan ukuran yang spesifik saat menambah **Barang (Item)**, sehingga data lensa lebih rapi dan konsisten di seluruh transaksi.

#### Fitur Utama

- Menyimpan daftar nilai ukuran lensa (plus dan minus) di satu tempat.
- Ukuran yang sudah dibuat otomatis tersedia saat mendata barang yang memakai ukuran resep.
- Data ukuran bisa diubah atau dinonaktifkan — tidak dihapus permanen — supaya riwayat tetap utuh.

#### Langkah Penggunaan

##### 1. Buka menu Ukuran

Dari menu **Master → Ukuran**. Akan tampil daftar ukuran yang sudah pernah dibuat.

![Tangkapan Layar 2026-07-02 pukul 16.39.14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2Fd6c07987-caa0-4184-8503-b6d5bb7e1ca2-Tangkapan_Layar_2026-07-02_pukul_16.39.14.png)
*Tampilan: Daftar Ukuran*

##### 2. Tambah ukuran baru

Klik tombol **Tambah Ukuran** di kanan atas halaman. Form input ukuran akan muncul.

![Tangkapan Layar 2026-07-02 pukul 16.46.19.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2F37c801d9-8e2d-4298-a859-d95ba5327c6e-Tangkapan_Layar_2026-07-02_pukul_16.46.19.png)

##### 3. Isi form ukuran

![Tangkapan Layar 2026-07-02 pukul 16.45.44.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2Fcf44e654-2019-46de-bd3f-9069fd7ea9b3-Tangkapan_Layar_2026-07-02_pukul_16.45.44.png)
*Tampilan: Form Ukuran*

| Kolom | Keterangan |
|:--|:--|
| **Nama** | Nilai ukuran, misalnya `-1.00` atau `+1.50`. Wajib diisi. |
| **Keterangan** | Catatan tambahan bila perlu, misalnya "untuk lensa minus". Opsional. |

##### 4. Simpan

Klik **Tambah Ukuran** untuk menyimpan. Sistem menampilkan notifikasi bahwa data berhasil ditambahkan.

#### Catatan & Tips

- Gunakan format penulisan yang konsisten (selalu pakai tanda `+` atau `−`) agar mudah dibedakan.
- Hindari nama ukuran yang sama (duplikat) supaya tidak membingungkan saat memilih di transaksi.
- Ukuran yang tidak dipakai lagi cukup dinonaktifkan, bukan dihapus.

#### Lampiran

- [07 - Ukuranfd.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2Fc0081815-4114-4874-a8b9-5b55c2d099d9-07_-_Ukuranfd.png) — image/png, 160 KB
- [08 - Ukuran add.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2Fc4855f16-b676-48f7-b1ab-456efba74bc8-08_-_Ukuran_add.png) — image/png, 4 KB
- [07 - Ukuran-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2F4d8d09c0-fd00-40a8-88c3-b2b0af49dd16-07_-_Ukuran-1.png) — image/png, 90 KB
- [Tangkapan Layar 2026-07-02 pukul 16.37.36.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2F902611cb-5816-4333-8c44-7229fd6784dc-Tangkapan_Layar_2026-07-02_pukul_16.37.36.png) — image/png, 319 KB
- [Tangkapan Layar 2026-07-02 pukul 16.39.14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2Fd6c07987-caa0-4184-8503-b6d5bb7e1ca2-Tangkapan_Layar_2026-07-02_pukul_16.39.14.png) — image/png, 249 KB
- [Tangkapan Layar 2026-07-02 pukul 16.46.19.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2F37c801d9-8e2d-4298-a859-d95ba5327c6e-Tangkapan_Layar_2026-07-02_pukul_16.46.19.png) — image/png, 9 KB
- [Tangkapan Layar 2026-07-02 pukul 16.45.44.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F13%2Fcf44e654-2019-46de-bd3f-9069fd7ea9b3-Tangkapan_Layar_2026-07-02_pukul_16.45.44.png) — image/png, 36 KB

### Warna

> Daftar warna utama produk (frame, lensa, softlens) yang dipakai saat mendata barang. Membantu pengelompokan stok dan laporan berdasarkan varian warna.

#### Pengertian

**Warna** dipakai untuk mendata warna utama produk — misalnya Hitam, Silver, atau Coklat. Warna ini mencakup semua jenis produk seperti frame, lensa, dan softlens.

Dengan daftar warna yang terstandar, produk lebih mudah dikelompokkan, dicari, dan dilaporkan berdasarkan varian warnanya.

#### Fitur Utama

- Menyimpan daftar warna utama di satu tempat.
- Warna yang sudah dibuat otomatis tersedia saat menambah atau mengubah **Barang (Item)**.
- Data warna bisa diubah atau dinonaktifkan — tidak dihapus permanen — supaya riwayat tetap utuh.

#### Langkah Penggunaan

##### 1. Buka menu Warna

Dari menu **Master → Warna**. Akan tampil daftar warna yang sudah pernah dibuat.

![Tangkapan Layar 2026-07-02 pukul 16.51.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2F4028c46a-ad29-40f3-bf99-c91be5b29fff-Tangkapan_Layar_2026-07-02_pukul_16.51.56.png)
*Tampilan: Daftar Warna*

##### 2. Tambah warna baru

Klik tombol **Tambah Warna** di kanan atas halaman. Form input warna akan muncul.

![Tangkapan Layar 2026-07-02 pukul 16.53.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2F78fab64b-730c-4539-8e1f-ebdf5d0e2e82-Tangkapan_Layar_2026-07-02_pukul_16.53.09.png)


##### 3. Isi form warna

![Tangkapan Layar 2026-07-02 pukul 16.53.49.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2Faeed207a-7e98-41f0-b0a8-1c18f703d5ce-Tangkapan_Layar_2026-07-02_pukul_16.53.49.png)
*Tampilan: Form Warna*

| Kolom | Keterangan |
|:--|:--|
| **Nama** | Nama warna produk, misalnya "Hitam", "Silver", atau "Coklat". Wajib diisi. |
| **Keterangan** | Catatan tambahan bila perlu, misalnya "Frame doff" atau "Lensa Bluecut". Opsional. |

##### 4. Simpan

Klik **Tambah Warna** untuk menyimpan. Sistem menampilkan notifikasi bahwa data berhasil ditambahkan.

#### Catatan & Tips

- Gunakan nama warna yang konsisten dan mudah dikenali, misalnya "Hitam", "Abu-Abu", atau "Coklat Muda".
- Untuk varian warna yang lebih detail (misalnya Hitam Doff vs Hitam Glossy), gunakan menu **Sub Warna**.
- Warna yang tidak dipakai lagi cukup dinonaktifkan, bukan dihapus.

#### Lampiran

- [08 - Warnadf.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2F438b96b5-0672-474f-87b6-159e84a57067-08_-_Warnadf.png) — image/png, 134 KB
- [09 - Warna add.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2F2bc6e67e-8ee9-4e5e-8339-52a493e6bb18-09_-_Warna_add.png) — image/png, 2 KB
- [08 - Warna-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2F1d4651ed-395b-47d5-9afd-1c24328bfe61-08_-_Warna-1.png) — image/png, 91 KB
- [Tangkapan Layar 2026-07-02 pukul 16.51.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2F4028c46a-ad29-40f3-bf99-c91be5b29fff-Tangkapan_Layar_2026-07-02_pukul_16.51.56.png) — image/png, 261 KB
- [Tangkapan Layar 2026-07-02 pukul 16.53.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2F78fab64b-730c-4539-8e1f-ebdf5d0e2e82-Tangkapan_Layar_2026-07-02_pukul_16.53.09.png) — image/png, 10 KB
- [Tangkapan Layar 2026-07-02 pukul 16.53.49.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F14%2Faeed207a-7e98-41f0-b0a8-1c18f703d5ce-Tangkapan_Layar_2026-07-02_pukul_16.53.49.png) — image/png, 60 KB

### Sub Warna

> Varian warna yang lebih spesifik di bawah satu warna utama (mis. Hitam Doff, Hitam Glossy). Dipakai saat mendata barang agar variasi produk lebih detail.

#### Pengertian

**Sub Warna** dipakai untuk mengelompokkan varian warna yang lebih spesifik di bawah satu warna utama. Contohnya: di bawah warna "Hitam" bisa ada Hitam Doff dan Hitam Glossy.

Dengan Sub Warna, data produk bisa dikelola lebih detail, baik untuk keperluan stok, transaksi, maupun laporan varian barang.

#### Fitur Utama

- Menyimpan varian turunan di bawah warna utama.
- Setiap sub warna terhubung ke satu warna utama (lihat menu **Warna**).
- Sub warna yang sudah dibuat otomatis tersedia saat menambah **Barang (Item)**.
- Data bisa diubah atau dinonaktifkan — tidak dihapus permanen — supaya riwayat tetap utuh.

#### Langkah Penggunaan

##### 1. Buka menu Sub Warna

Dari menu **Master → Sub Warna**. Akan tampil daftar sub warna yang sudah tersedia.

![Tangkapan Layar 2026-07-03 pukul 09.06.34.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F16ba0623-ff6b-42a4-bb85-a90599f992fc-Tangkapan_Layar_2026-07-03_pukul_09.06.34.png)
*Tampilan: Daftar Sub Warna*

##### 2. Tambah sub warna baru

Klik tombol **Tambah Sub Warna** di kanan atas halaman. Form input sub warna akan muncul.

![Tangkapan Layar 2026-07-03 pukul 09.09.51.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F3b82f6f5-c122-44a0-9190-03d7b0317d7f-Tangkapan_Layar_2026-07-03_pukul_09.09.51.png)


##### 3. Isi form sub warna

![Tangkapan Layar 2026-07-03 pukul 09.10.28.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F8671ef20-efb1-49a8-af19-08312502c4c3-Tangkapan_Layar_2026-07-03_pukul_09.10.28.png)
*Tampilan: Form Sub Warna*

| Kolom | Keterangan |
|:--|:--|
| **Warna** | Pilih warna utama yang sudah dibuat sebelumnya, misalnya "Hitam" atau "Coklat". Wajib dipilih. |
| **Nama** | Nama varian spesifik, misalnya "Hitam Doff" atau "Coklat Muda". Wajib diisi. |
| **Keterangan** | Catatan tambahan bila perlu. Opsional. |

##### 4. Simpan

Klik **Tambah Sub Warna** untuk menyimpan. Sistem menampilkan notifikasi bahwa data berhasil ditambahkan.

#### Catatan & Tips

- Pastikan warna utama sudah tersedia di menu **Warna** sebelum menambah sub warna.
- Gunakan penamaan yang konsisten dan jelas agar mudah dicari dan dilaporkan.
- Sub warna yang tidak dipakai lagi cukup dinonaktifkan, bukan dihapus.

#### Lampiran

- [09 - Sub Warnafd.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F22449d9a-4a70-427a-98c4-384d42ed9d2a-09_-_Sub_Warnafd.png) — image/png, 103 KB
- [10 - Sub Warna add.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F9f007e81-5f4a-449b-9c86-795607913985-10_-_Sub_Warna_add.png) — image/png, 5 KB
- [09 - Sub Warna-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2Fafbc4f6c-d8b3-478d-85f2-79f71acc4d8c-09_-_Sub_Warna-1.png) — image/png, 105 KB
- [Tangkapan Layar 2026-07-03 pukul 09.06.34.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F16ba0623-ff6b-42a4-bb85-a90599f992fc-Tangkapan_Layar_2026-07-03_pukul_09.06.34.png) — image/png, 209 KB
- [Tangkapan Layar 2026-07-03 pukul 09.09.51.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F3b82f6f5-c122-44a0-9190-03d7b0317d7f-Tangkapan_Layar_2026-07-03_pukul_09.09.51.png) — image/png, 10 KB
- [Tangkapan Layar 2026-07-03 pukul 09.10.28.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F15%2F8671ef20-efb1-49a8-af19-08312502c4c3-Tangkapan_Layar_2026-07-03_pukul_09.10.28.png) — image/png, 73 KB

### Asuransi

> Daftar perusahaan asuransi beserta plafon pertanggungannya, untuk pelanggan yang membayar dengan asuransi. Dipakai saat mencatat transaksi berbasis asuransi.

#### Pengertian

**Asuransi** dipakai untuk mendata perusahaan asuransi yang bekerja sama dengan toko, beserta batas biaya yang ditanggung (plafon). Data ini dipakai saat pelanggan membayar menggunakan layanan asuransi optik.

Dengan data asuransi yang tercatat, toko lebih mudah memisahkan transaksi tunai dari transaksi klaim asuransi, serta membuat laporan yang melibatkan pihak asuransi.

#### Fitur Utama

- Menyimpan daftar perusahaan asuransi dan plafon pertanggungannya.
- Data asuransi tersedia saat transaksi bagi pelanggan yang memakai metode pembayaran asuransi.
- Data bisa diubah atau dinonaktifkan — tidak dihapus permanen — supaya riwayat tetap utuh.

#### Langkah Penggunaan

##### 1. Buka menu Asuransi

Dari menu **Master → Asuransi**. Akan tampil daftar perusahaan asuransi yang sudah ditambahkan.

![Tangkapan Layar 2026-07-03 pukul 09.15.32.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F0cd4fbb9-b59d-4ab8-b8ed-4d975faf615c-Tangkapan_Layar_2026-07-03_pukul_09.15.32.png)
*Tampilan: Daftar Asuransi*

##### 2. Tambah asuransi baru

Klik tombol **Tambah Asuransi** di kanan atas halaman. Form input asuransi akan muncul.

![Tangkapan Layar 2026-07-03 pukul 09.15.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F083d6d34-95a3-4b9e-ae17-eef7b89f6688-Tangkapan_Layar_2026-07-03_pukul_09.15.56.png)


##### 3. Isi form asuransi

![Tangkapan Layar 2026-07-03 pukul 09.16.25.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F3aca4858-db8c-4f08-87b3-9270da060c6a-Tangkapan_Layar_2026-07-03_pukul_09.16.25.png)
*Tampilan: Form Asuransi*

| Kolom | Keterangan |
|:--|:--|
| **Nama** | Nama perusahaan asuransi, misalnya "BPJS Kesehatan" atau "AXA Mandiri". Wajib diisi. |
| **Plafon (Jumlah)** | Nilai maksimal biaya yang ditanggung pihak asuransi, dalam rupiah. Wajib diisi. |

##### 4. Simpan

Klik **Tambah Asuransi** untuk menyimpan. Sistem menampilkan notifikasi bahwa data berhasil ditambahkan.

#### Catatan & Tips

- Tulis nama asuransi sesuai nama resmi perusahaan agar mudah ditemukan saat transaksi.
- Isi plafon dengan angka saja (tanpa titik atau "Rp") — sistem akan menghitungnya sebagai nilai rupiah.
- Data asuransi yang tidak dipakai lagi cukup dinonaktifkan, bukan dihapus.

#### Lampiran

- [10 - Asuransif.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2Fd43ccbd0-c719-4e43-bd6e-9a5b07cdcd74-10_-_Asuransif.png) — image/png, 100 KB
- [11 - Asuransi add.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F106f8cb4-3342-472b-b7e0-df2ae95a920b-11_-_Asuransi_add.png) — image/png, 3 KB
- [10 - Asuransi-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F969f0b5e-e0a5-4dce-b43a-1d02a230f8cd-10_-_Asuransi-1.png) — image/png, 95 KB
- [Tangkapan Layar 2026-07-03 pukul 09.15.32.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F0cd4fbb9-b59d-4ab8-b8ed-4d975faf615c-Tangkapan_Layar_2026-07-03_pukul_09.15.32.png) — image/png, 286 KB
- [Tangkapan Layar 2026-07-03 pukul 09.15.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F083d6d34-95a3-4b9e-ae17-eef7b89f6688-Tangkapan_Layar_2026-07-03_pukul_09.15.56.png) — image/png, 9 KB
- [Tangkapan Layar 2026-07-03 pukul 09.16.25.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F16%2F3aca4858-db8c-4f08-87b3-9270da060c6a-Tangkapan_Layar_2026-07-03_pukul_09.16.25.png) — image/png, 43 KB

### Bank

> Daftar nama bank yang dipakai untuk pembayaran transfer dan pencatatan keuangan. Dipakai di modul Penjualan, Pembelian, dan pembayaran hutang/piutang.

#### Pengertian

**Bank** dipakai untuk mendata nama-nama bank yang digunakan dalam transaksi toko — misalnya untuk pembayaran transfer atau mencatat rekening tujuan. Data ini muncul saat memilih metode pembayaran non-tunai.

Dengan daftar bank yang terstandar, pencatatan dan pelaporan keuangan jadi lebih rapi dan konsisten.

#### Fitur Utama

- Menyimpan daftar nama bank di satu tempat.
- Data bank tersedia di modul **Penjualan**, **Pembelian**, dan pembayaran hutang/piutang.
- Data bisa diubah atau dinonaktifkan — tidak dihapus permanen — supaya riwayat tetap utuh.

#### Langkah Penggunaan

##### 1. Buka menu Bank

Dari menu **Master → Bank**. Akan tampil daftar bank yang sudah ditambahkan.

![Tangkapan Layar 2026-07-03 pukul 09.27.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2F98ed5fbe-956c-4f0d-8137-feb255688f5a-Tangkapan_Layar_2026-07-03_pukul_09.27.18.png)
*Tampilan: Daftar Bank*

##### 2. Tambah bank baru

Klik tombol **Tambah Bank** di kanan atas halaman. Form input bank akan muncul.

![Tangkapan Layar 2026-07-03 pukul 09.42.23.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2F009651fb-4a5c-4892-822b-50722f64984a-Tangkapan_Layar_2026-07-03_pukul_09.42.23.png)


##### 3. Isi form bank

![Tangkapan Layar 2026-07-03 pukul 09.28.29.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2Fc232c9b4-c9f5-4241-8b80-ee0cdb748908-Tangkapan_Layar_2026-07-03_pukul_09.28.29.png)
*Tampilan: Form Bank*

| Kolom | Keterangan |
|:--|:--|
| **Nama** | Nama bank, misalnya "BCA", "BRI", "BNI", atau "Bank Central Asia". Wajib diisi. |
| **Keterangan** | Catatan tambahan bila perlu, misalnya "Rekening utama toko". Opsional. |

##### 4. Simpan

Klik **Tambah Bank** untuk menyimpan. Sistem menampilkan notifikasi bahwa data berhasil ditambahkan.

#### Catatan & Tips

- Tulis nama bank dengan benar dan konsisten agar mudah dicari saat transaksi.
- Data bank yang tidak dipakai lagi cukup dinonaktifkan, bukan dihapus.

#### Lampiran

- [11 - Bank.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2F719832bf-0fa2-4528-b622-ad48c1ac2b9d-11_-_Bank.png) — image/png, 107 KB
- [12 - Bank add.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2F21e6fd46-d554-49c9-aa11-5407e678d073-12_-_Bank_add.png) — image/png, 2 KB
- [11 - Bank-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2Fb20316ee-086c-4481-8de4-2dd535350175-11_-_Bank-2.png) — image/png, 89 KB
- [Tangkapan Layar 2026-07-03 pukul 09.27.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2F98ed5fbe-956c-4f0d-8137-feb255688f5a-Tangkapan_Layar_2026-07-03_pukul_09.27.18.png) — image/png, 281 KB
- [Tangkapan Layar 2026-07-03 pukul 09.28.29.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2Fc232c9b4-c9f5-4241-8b80-ee0cdb748908-Tangkapan_Layar_2026-07-03_pukul_09.28.29.png) — image/png, 45 KB
- [Tangkapan Layar 2026-07-03 pukul 09.42.23.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F17%2F009651fb-4a5c-4892-822b-50722f64984a-Tangkapan_Layar_2026-07-03_pukul_09.42.23.png) — image/png, 10 KB

### Tipe Harga Barang

> Daftar tipe harga (mis. Harga Jual, Harga Member) yang dipakai untuk membedakan variasi harga per produk. Termasuk pengaturan tipe harga default untuk pembelian internal dan eksternal.

#### Pengertian

**Tipe Harga Barang** dipakai untuk mengelompokkan variasi harga sebuah produk — misalnya "Harga Jual", "Harga Member", atau "Harga Distributor". Dengan begitu, satu barang bisa punya beberapa tipe harga sekaligus.

Halaman ini juga mengatur **tipe harga default untuk pembelian**, yang membedakan pembelian dari supplier (eksternal) dan transaksi antar-cabang (internal).

#### Fitur Utama

- Menyimpan daftar tipe harga barang di satu tempat.
- Kolom **Status** menandai tipe harga aktif atau **Non Aktif**.
- Pengaturan tipe harga default untuk pembelian **Eksternal** dan **Internal**.
- Tipe harga bisa diubah atau dinonaktifkan — tidak dihapus permanen — supaya riwayat tetap utuh.

#### Langkah Penggunaan

##### 1. Buka menu Tipe Harga Barang

Dari menu **Master → Tipe Harga Barang**. Akan tampil daftar tipe harga beserta kolom **Status** dan tombol aksi di kolom **Aksi**.

Untuk melihat tipe harga yang sudah tidak aktif, centang opsi **Tampilkan Tipe Harga Non Aktif** di bawah tabel.

##### 2. Tambah tipe harga baru

Klik tombol **Tambah Item Price Type** di kanan atas halaman, lalu isi form yang muncul.

![Tangkapan Layar 2026-07-03 pukul 09.34.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F18%2F87239231-3004-48fb-ba6d-fbff2b9eb1b1-Tangkapan_Layar_2026-07-03_pukul_09.34.26.png)
*Tampilan: Daftar Tipe Harga Barang*

![Tangkapan Layar 2026-07-03 pukul 09.36.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F18%2F227fc7f3-5568-4342-a99f-5fa80f227895-Tangkapan_Layar_2026-07-03_pukul_09.36.20.png)
*Tampilan: Form Tipe Harga Barang*

| Kolom | Keterangan |
|:--|:--|
| **Nama** | Nama tipe harga, misalnya "Harga Jual" atau "Harga Member". Wajib diisi. |
| **Keterangan** | Catatan tambahan bila perlu, misalnya "Untuk pelanggan VIP". Opsional. |

Klik **Tambah Item Price Type** untuk menyimpan. Sistem menampilkan notifikasi bahwa data berhasil ditambahkan.

##### 3. Atur tipe harga default pembelian

Pada bagian **Tipe Harga Pembelian Default**, atur dua pilihan berikut:

- **Tipe Harga Pembelian Eksternal Default** — dipakai untuk pembelian dari supplier atau pihak luar.
- **Tipe Harga Pembelian Internal Default** — dipakai untuk transaksi antar-cabang atau internal.

Setelah memilih, klik **Simpan Default** agar sistem menerapkannya pada transaksi pembelian berikutnya.

##### 4. Ubah atau nonaktifkan tipe harga

- Untuk mengubah nama atau keterangan, klik tombol **Edit** di kolom **Aksi**.
- Untuk menonaktifkan, ubah status menjadi **Non Aktif** agar tidak muncul di transaksi, tetapi tetap tersimpan di data historis.

#### Catatan & Tips

- Gunakan nama tipe harga yang konsisten dan jelas agar mudah dibedakan di laporan dan transaksi.
- Tipe harga yang tidak dipakai lagi cukup dinonaktifkan, bukan dihapus.

#### Lampiran

- [12 - Tipe Harga Barang-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F18%2Fd18b66a2-714f-4d1e-a97c-cd10f2c96e8f-12_-_Tipe_Harga_Barang-4.png) — image/png, 153 KB
- [12 - Tipe Harga Barang-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F18%2F958a2f54-e926-49ee-a458-0faabdc9e3f6-12_-_Tipe_Harga_Barang-3.png) — image/png, 101 KB
- [Tangkapan Layar 2026-07-03 pukul 09.34.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F18%2F87239231-3004-48fb-ba6d-fbff2b9eb1b1-Tangkapan_Layar_2026-07-03_pukul_09.34.26.png) — image/png, 174 KB
- [Tangkapan Layar 2026-07-03 pukul 09.36.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F18%2F227fc7f3-5568-4342-a99f-5fa80f227895-Tangkapan_Layar_2026-07-03_pukul_09.36.20.png) — image/png, 55 KB

## Bab 03 — Pelanggan


### Data Pelanggan

> Cara mencatat dan mengelola data pelanggan (member) di Lensiro — mulai dari menambah pelanggan, mengisi detail seperti refraksi dan poin, sampai mengatur level keanggotaan.

#### Pengertian
Modul Pelanggan menyimpan data setiap pembeli yang bertransaksi di toko. Data ini dipakai untuk mengenali pembeli pada tiap transaksi Penjualan sekaligus menyimpan riwayatnya.

Dari satu data pelanggan, toko bisa:

- Mencatat transaksi penjualan atas nama pelanggan tertentu.
- Melihat riwayat pembelian pelanggan.
- Menyimpan hasil pemeriksaan mata (refraksi) dan rekam medis.
- Menghitung poin loyalitas berdasarkan transaksi.
- Menyimpan kontak (nama, telepon, alamat, email) untuk komunikasi dan pencarian cepat.

Modul ini dibuka dari menu **Pelanggan**. Di dalamnya ada beberapa tab: **Daftar** (daftar pelanggan), dan — bila diaktifkan — **Kampanye** serta **WA Inbox** untuk komunikasi.


![Screenshot 2026-07-02 at 13.55.37.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F0318c4b8-290e-4a2e-9e49-573ae6f0aa93-Screenshot_2026-07-02_at_13.55.37.png)
*Tampilan: Menu Pelanggan*

#### Fitur Utama
- **Tambah & ubah pelanggan** lewat form bertab.
- **Detail pelanggan** dengan tab Informasi Dasar, Refraksi, Penjualan, Rekam Medis, Point, dan WhatsApp.
- **Master Level** untuk mengelompokkan pelanggan (mis. Reguler, VIP, VVIP).
- **Poin loyalitas** yang tercatat otomatis dari transaksi, plus penyesuaian poin manual.

#### Langkah Penggunaan

##### Membuka Form Tambah Pelanggan
Form pelanggan bisa dibuka lewat dua cara.

**Cara 1 — dari menu Pelanggan:**
1. Buka menu **Pelanggan**, lalu tab **Daftar**.
2. Klik tombol **Tambah Pelanggan** di kanan atas halaman.

![02 - tombol tambah pelanggan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F9c56df3f-9576-4f72-9b7c-40583d2b750c-02_-_tombol_tambah_pelanggan.png)
*Tampilan: Tombol Tambah Pelanggan*

**Cara 2 — dari form Penjualan:**
1. Buka transaksi penjualan (Penjualan Langsung atau Penjualan Order).
2. Pada kolom **Pilih Pelanggan**, klik tombol **Buat**.

![01 - Data Pelanggan tombol.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F40f45d87-94d7-4bb2-97d9-510f6aff9617-01_-_Data_Pelanggan_tombol.png)
*Tampilan: Tombol Buat pelanggan pada form Penjualan*

Kedua cara membuka form yang sama, sehingga isiannya identik.

##### Mengisi Data Pelanggan
Form terbagi menjadi tiga bagian: **Identitas**, **Kontak & Cabang**, dan **Catatan**. Kolom bertanda bintang wajib diisi.

![Tangkapan Layar 2026-07-07 pukul 09.10.25.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F5a702bbb-513d-4ca9-b92a-888c5ce46e98-Tangkapan_Layar_2026-07-07_pukul_09.10.25.png)
*Tampilan: Form Input Pelanggan*

| Kolom | Keterangan |
|-------|------------|
| Nama lengkap (wajib) | Nama lengkap pelanggan. |
| No. identitas (KTP) | Nomor KTP atau identitas lain (opsional). |
| Jenis kelamin | Pilih Laki-Laki atau Perempuan. |
| Tanggal lahir | Untuk keperluan promo ulang tahun; tidak boleh melebihi hari ini. |
| No. telepon (wajib) | Nomor aktif / WhatsApp; hanya boleh berisi angka. Dipakai untuk pencarian cepat. |
| Email | Alamat email (opsional). Satu email tidak bisa dipakai dua akun. |
| Cabang asal (wajib) | Cabang tempat pelanggan didaftarkan. |
| Level keanggotaan | Level pelanggan (mis. Reguler, VIP), jika Master Level sudah dibuat. |
| Alamat | Alamat lengkap pelanggan. |
| Catatan (Memo) | Catatan tambahan: preferensi, alergi, catatan servis, dll. |

Centang **Kirim email (cek validasi email)** bila ingin mengirim email sambutan sekaligus memverifikasi alamat email.

> **Tips:** Isi Nama dan No. telepon dengan benar — keduanya jadi kunci pencarian pelanggan saat transaksi berlangsung.

##### Menyimpan Data
Setelah semua kolom diisi, klik tombol **Tambah pelanggan** di bawah form (saat mengubah data, tombolnya menjadi **Simpan perubahan**). Sistem menampilkan notifikasi bila data berhasil disimpan.

#### Detail Data Pelanggan
Setiap pelanggan punya halaman detail berisi beberapa tab yang saling terhubung, sehingga kasir, optician, maupun admin bisa melihat riwayat pelanggan secara menyeluruh. Tab yang muncul menyesuaikan hak akses pengguna:

1. **Informasi Dasar** — identitas & kontak
2. **Refraksi** — resep & riwayat pemeriksaan mata
3. **Penjualan** — order & pembelian
4. **Rekam Medis** — hasil pemeriksaan
5. **Point** — poin loyalitas
6. **WhatsApp** — inbox & template pesan

##### Tab Informasi Dasar
Berisi data utama yang diisi saat pendaftaran (cabang, nama, no. identitas, level, alamat, telepon, email, jenis kelamin, tanggal lahir, dan memo). Data dapat diperbarui kapan saja lewat form yang sama, lalu klik **Simpan perubahan**.

##### Tab Refraksi
Tab ini mencatat hasil pemeriksaan mata pelanggan. Setiap entri tersimpan sebagai riwayat yang dikelompokkan per tanggal, sehingga perubahan kondisi mata bisa dipantau dari waktu ke waktu.

![Tangkapan Layar 2026-07-07 pukul 09.13.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2Fa3597803-d960-4d91-b9a2-4cbd8576b2e1-Tangkapan_Layar_2026-07-07_pukul_09.13.11.png)
*Tampilan: Form Refraksi*

Isi kolom pada panel **Tambah refraksi**:

| Kolom | Keterangan |
|-------|------------|
| Tipe | Sumber ukuran: **Lensa Lama**, **Auto Ref**, atau **Hasil Refraksi**. |
| Sisi | Pilih **Kanan** atau **Kiri** (tiap sisi diinput terpisah). |
| SPH | Nilai sferis (rabun jauh/dekat). |
| CYL | Nilai silinder untuk astigmatisme. |
| AXIS | Sudut silinder dalam derajat. |
| ADD | Tambahan lensa baca untuk bifokal/progresif. |
| PD / MPD | Jarak antar pupil (milimeter). |
| VISUS | Tingkat ketajaman penglihatan. |

Setelah diisi, simpan entri tersebut; datanya masuk ke riwayat refraksi di sisi kanan layar. Entri yang salah dapat dihapus lewat ikon **Hapus** pada baris terkait.

##### Tab Point
Menampilkan total poin pelanggan beserta riwayatnya. Selain poin yang tercatat otomatis dari transaksi, pengguna bisa menambah atau menyesuaikan poin secara manual lewat panel **Tambah / sesuaikan poin** (isi jumlah dan keterangan, lalu klik **Tambah poin**).

![Tangkapan Layar 2026-07-07 pukul 09.15.35.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2Fd45e1e6b-de9c-4932-ab5c-5cebd7b7e076-Tangkapan_Layar_2026-07-07_pukul_09.15.35.png)
*Tampilan: Info Poin Pelanggan*

Riwayat poin memuat kolom Sumber, Jumlah, Tanggal, dan Keterangan. Besaran poin per transaksi mengikuti Pengaturan Poin (lihat halaman Pengaturan Point Pelanggan).

##### Tab Penjualan
Menampilkan seluruh transaksi pelanggan — nomor invoice, tanggal, item yang dibeli, dan totalnya. Invoice bisa dibuka langsung dari sini tanpa perlu masuk ke menu laporan terpisah.

![Tangkapan Layar 2026-07-07 pukul 09.19.10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F4324f35c-8b25-4888-86fd-49801ef4af9e-Tangkapan_Layar_2026-07-07_pukul_09.19.10.png)
*Tampilan: Riwayat Pembelian Pelanggan*

#### Master Level

##### Pengertian
Master Level mengelola tingkatan pelanggan seperti Reguler, VIP, atau VVIP. Level dipakai sistem untuk memberi pengali poin (multiplier) yang berbeda per level pada Pengaturan Poin, dan memudahkan pengelompokan pelanggan.

##### Membuka Master Level
Klik tombol **Master Level** di halaman **Daftar** pelanggan.

![Tangkapan Layar 2026-07-07 pukul 09.22.19.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F0fcd31f9-6f1f-46de-8f7b-25746898204b-Tangkapan_Layar_2026-07-07_pukul_09.22.19.png)
*Tampilan: Tombol Master Level pada halaman Pelanggan*

Sistem menampilkan pop-up **Kelola Member Level** untuk menambah, mengedit, atau menghapus level.

![Tangkapan Layar 2026-07-07 pukul 09.23.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F9db32b70-6c94-424b-bc19-2910d07124b7-Tangkapan_Layar_2026-07-07_pukul_09.23.15.png)
*Tampilan: Pop-up Kelola Member Level*

##### Menambah, Mengedit, dan Menghapus Level
- **Tambah:** ketik nama level pada bagian **Tambah Level Baru** (contoh: Gold, Platinum), lalu klik **Tambah**. Level baru muncul di daftar **Level yang Tersedia**.
- **Edit:** klik ikon pensil pada level, ubah namanya, lalu klik **Simpan**.
- **Hapus:** klik ikon tempat sampah, lalu konfirmasi.

> **Catatan:** Level yang masih dipakai pelanggan tidak bisa dihapus. Sistem menolak dengan pesan "Level tidak dapat dihapus, karena masih ada pelanggan yang memiliki level ini". Pindahkan dulu pelanggan ke level lain sebelum menghapus.

#### Catatan & Tips
- Data Refraksi, Point, dan Penjualan langsung tercatat di sistem pusat dan bisa diakses pengguna sesuai hak aksesnya.
- Riwayat pelanggan berguna untuk pelayanan lanjutan (pembuatan lensa baru), pengingat kontrol mata, dan promo berdasarkan riwayat transaksi.
- Gunakan level untuk membedakan strategi harga dan loyalitas — misalnya Reguler tanpa bonus, VIP dan VVIP dengan multiplier poin lebih tinggi.

#### Lampiran

- [01 - Data Pelanggan-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F9eab6250-003b-4147-b96b-77b7b2cfca3f-01_-_Data_Pelanggan-8.png) — image/png, 221 KB
- [02 - tombol tambah pelanggan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F9c56df3f-9576-4f72-9b7c-40583d2b750c-02_-_tombol_tambah_pelanggan.png) — image/png, 3 KB
- [01 - Data Pelanggan tombol.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F40f45d87-94d7-4bb2-97d9-510f6aff9617-01_-_Data_Pelanggan_tombol.png) — image/png, 37 KB
- [01 - Data Pelanggan-9.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F9ddedd14-baff-4a89-8355-7793c0170366-01_-_Data_Pelanggan-9.png) — image/png, 225 KB
- [01 - Data Pelanggan-10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2Fc222ac2e-a843-4002-a127-5344765d514c-01_-_Data_Pelanggan-10.png) — image/png, 196 KB
- [01 - Data Pelanggan-11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F733d796b-d2f3-4830-84cb-403376c38476-01_-_Data_Pelanggan-11.png) — image/png, 218 KB
- [01 - Data Pelanggan-12.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F86cc2a07-90eb-4c41-8619-d29be0a213e8-01_-_Data_Pelanggan-12.png) — image/png, 175 KB
- [01 - Data Pelanggan-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2Fb8385638-f4a4-440c-9e77-89a9e26996ef-01_-_Data_Pelanggan-3.png) — image/png, 18 KB
- [01 - Data Pelanggan-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F8422a455-10b3-4419-baf7-66b35a8028dd-01_-_Data_Pelanggan-4.png) — image/png, 37 KB
- [Screenshot 2026-07-02 at 13.55.37.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F0318c4b8-290e-4a2e-9e49-573ae6f0aa93-Screenshot_2026-07-02_at_13.55.37.png) — image/png, 215 KB
- [Tangkapan Layar 2026-07-07 pukul 09.10.25.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F5a702bbb-513d-4ca9-b92a-888c5ce46e98-Tangkapan_Layar_2026-07-07_pukul_09.10.25.png) — image/png, 193 KB
- [Tangkapan Layar 2026-07-07 pukul 09.13.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2Fa3597803-d960-4d91-b9a2-4cbd8576b2e1-Tangkapan_Layar_2026-07-07_pukul_09.13.11.png) — image/png, 207 KB
- [Tangkapan Layar 2026-07-07 pukul 09.15.35.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2Fd45e1e6b-de9c-4932-ab5c-5cebd7b7e076-Tangkapan_Layar_2026-07-07_pukul_09.15.35.png) — image/png, 268 KB
- [Tangkapan Layar 2026-07-07 pukul 09.19.10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F4324f35c-8b25-4888-86fd-49801ef4af9e-Tangkapan_Layar_2026-07-07_pukul_09.19.10.png) — image/png, 230 KB
- [Tangkapan Layar 2026-07-07 pukul 09.22.19.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F0fcd31f9-6f1f-46de-8f7b-25746898204b-Tangkapan_Layar_2026-07-07_pukul_09.22.19.png) — image/png, 32 KB
- [Tangkapan Layar 2026-07-07 pukul 09.23.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F20%2F9db32b70-6c94-424b-bc19-2910d07124b7-Tangkapan_Layar_2026-07-07_pukul_09.23.15.png) — image/png, 68 KB

### Pengaturan Point Pelanggan

> Cara mengatur perhitungan poin loyalitas pelanggan — menentukan Base Rate per cabang dan Multiplier per level member — agar poin diberikan otomatis di setiap transaksi.

#### Pengertian
**Pengaturan Poin Member** mengatur cara sistem menghitung poin loyalitas dari setiap transaksi penjualan. Poin diberikan otomatis saat transaksi, dengan besaran yang bergantung pada:

- Cabang tempat transaksi dilakukan (lewat **Base Rate**).
- Level pelanggan, mis. Reguler atau VIP (lewat **Multiplier**).
- Nilai pembayaran transaksi.

Dengan begitu tiap cabang bisa menerapkan kebijakan poin yang berbeda sesuai strategi bisnisnya.

#### Fitur Utama
- Mengatur **Base Rate** (persentase poin dasar) per cabang.
- Mengatur **Multiplier** (pengali poin) per kombinasi cabang dan level member.
- Perhitungan poin yang konsisten di seluruh transaksi.
- Dukungan program reward, promo, dan retensi pelanggan secara terpusat.

#### Langkah Penggunaan

##### Membuka Pengaturan Poin
Buka menu **Pelanggan**, lalu di halaman **Daftar** klik tombol **Pengaturan Poin**. Sistem membuka jendela **Pengaturan Poin Member**.

![Tangkapan Layar 2026-07-07 pukul 09.26.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F8bc1db92-16ce-4a04-acd7-43abfd28788d-Tangkapan_Layar_2026-07-07_pukul_09.26.20.png)
*Tampilan: Menu Pengaturan Poin Member*

##### Memahami Tabel Pengaturan
Pengaturan disusun dalam tabel: satu baris per cabang, dengan kolom Base Rate dan satu kolom Multiplier untuk tiap level member yang sudah dibuat di Master Level.

![Tangkapan Layar 2026-07-07 pukul 09.27.38.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F658552c5-e69f-42ae-b1e1-75a080bb88ed-Tangkapan_Layar_2026-07-07_pukul_09.27.38.png)
*Tampilan: Tabel Pengaturan Poin per Cabang dan Level Member*

| Kolom | Keterangan |
|-------|------------|
| Cabang | Nama dan kode cabang. |
| Base Rate (%) | Persentase poin dasar per transaksi di cabang tersebut. |
| (Nama level) Multiplier | Satu kolom per level member — pengali poin untuk level itu. |

> **Catatan:** Bila belum ada level member, kolom multiplier tidak muncul dan poin hanya dihitung dari Base Rate. Tambahkan level di halaman Daftar Pelanggan (tombol Master Level) untuk mengaktifkan multiplier.

##### Rumus Perhitungan Poin
Sistem menghitung poin dengan rumus:

`Poin = (Base Rate / 100) × Multiplier × Jumlah Pembayaran`

| Komponen | Penjelasan |
|----------|------------|
| Base Rate (%) | Persentase poin dasar dari nilai transaksi, ditetapkan per cabang. |
| Multiplier | Pengali poin berdasarkan level member. |
| Jumlah Pembayaran | Total pembayaran transaksi pelanggan. |

**Base Rate** berlaku untuk semua level di cabang tersebut. Contoh: Base Rate `1` berarti 1% dari nilai transaksi, `0,1` berarti 0,1%.

**Multiplier** menambah poin sesuai level. Level dasar (mis. Reguler) biasanya bernilai `1` (tanpa bonus). Multiplier `1,5` menambah poin 50%, `2` menjadikannya dua kali lipat.

##### Mengubah dan Menyimpan Pengaturan
1. Ubah nilai **Base Rate** dan/atau **Multiplier** langsung di sel tabel.
2. Sel yang berubah ditandai warna biru (**Diubah — belum disimpan**); sel yang belum diubah tetap putih (**Tidak berubah**).
3. Periksa kembali nilainya, lalu klik **Simpan Perubahan**.

![Tangkapan Layar 2026-07-07 pukul 09.29.05.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F5558ef6b-5f43-4d28-a6aa-0168d0b84a07-Tangkapan_Layar_2026-07-07_pukul_09.29.05.png)
*Tampilan: Tombol Simpan Perubahan*

> **Perubahan tidak berlaku sebelum tombol Simpan Perubahan ditekan.**

#### Contoh Perhitungan
Studi kasus untuk transaksi pelanggan VIP:

- Base Rate: `1,0%`
- Multiplier VIP: `1,5`
- Total Pembayaran: `Rp 1.000.000`

Poin = (1,0 / 100) × 1,5 × 1.000.000 = **15.000 poin**.

Bila cabang belum punya level member, perhitungannya tanpa multiplier: (1,0 / 100) × 1.000.000 = **10.000 poin**.

#### Dampak ke Data Pelanggan
Poin yang dihasilkan dari pengaturan ini tercatat otomatis di:

- Tab **Point** pada detail pelanggan.
- Riwayat poin dan transaksi pelanggan.

![Tangkapan Layar 2026-07-07 pukul 09.31.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F4cca10da-47a1-438b-898d-d324059d0a5d-Tangkapan_Layar_2026-07-07_pukul_09.31.11.png)
*Tampilan: Poin Pelanggan pada Detail Data Pelanggan*

#### Catatan & Tips
- Perubahan pengaturan hanya berlaku untuk transaksi setelah disimpan; transaksi yang sudah selesai tidak terpengaruh.
- Gunakan Base Rate kecil (mis. ≤1%) agar poin tidak menggerus margin.
- Manfaatkan Multiplier level tinggi sebagai insentif loyalitas.
- Sebaiknya perubahan dilakukan oleh Admin atau Supervisor dan mengikuti kebijakan manajemen pusat.
- Dokumentasikan setiap perubahan kebijakan poin dan hindari perubahan terlalu sering tanpa evaluasi.

#### Lampiran

- [02 - Pengaturan Point Pelanggan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2Fffe9d53c-35c8-40bb-82d1-963349171720-02_-_Pengaturan_Point_Pelanggan.png) — image/png, 172 KB
- [02 - Pengaturan Point Pelanggan-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F15f8c4f9-2a09-46d5-88b0-2bfe778bc972-02_-_Pengaturan_Point_Pelanggan-1.png) — image/png, 95 KB
- [02 - Pengaturan Point Pelanggan-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F36aea5cb-effa-4a3d-8a1e-dd5a88a712a3-02_-_Pengaturan_Point_Pelanggan-2.png) — image/png, 26 KB
- [02 - Pengaturan Point Pelanggan-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F55b2a9b9-9e3e-40bb-8fa3-8f7816f8d019-02_-_Pengaturan_Point_Pelanggan-3.png) — image/png, 91 KB
- [Tangkapan Layar 2026-07-07 pukul 09.26.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F8bc1db92-16ce-4a04-acd7-43abfd28788d-Tangkapan_Layar_2026-07-07_pukul_09.26.20.png) — image/png, 167 KB
- [Tangkapan Layar 2026-07-07 pukul 09.27.38.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F658552c5-e69f-42ae-b1e1-75a080bb88ed-Tangkapan_Layar_2026-07-07_pukul_09.27.38.png) — image/png, 121 KB
- [Tangkapan Layar 2026-07-07 pukul 09.29.05.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F5558ef6b-5f43-4d28-a6aa-0168d0b84a07-Tangkapan_Layar_2026-07-07_pukul_09.29.05.png) — image/png, 28 KB
- [Tangkapan Layar 2026-07-07 pukul 09.31.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F21%2F4cca10da-47a1-438b-898d-d324059d0a5d-Tangkapan_Layar_2026-07-07_pukul_09.31.11.png) — image/png, 195 KB

## Bab 04 — Pembelian


### Order Pembelian

> Cara membuat order pembelian ke supplier atau antar cabang, memantau status barang dan pembayaran, mencatat pembayaran, dan menerima barang sampai stok bertambah di gudang.

#### Pengertian

Order Pembelian dipakai untuk mencatat pembelian barang dari supplier atau perpindahan barang antar cabang. Satu order menyimpan daftar barang, harga beli, status pesanan, pembayaran, dan penerimaan barang dalam satu tempat.

Ada dua tipe order yang bisa dipilih lewat toggle **Tipe Pembelian** di atas daftar:

- **Eksternal (Supplier)** — beli barang dari pemasok luar.
- **Internal (Antar Cabang)** — ambil barang dari cabang lain.

Saat barang diterima, stok cabang otomatis bertambah, jadi tidak perlu input ulang ke Gudang.

#### Fitur Utama

- Daftar order dengan filter status barang, status bayar, cabang, supplier, kategori barang, nomor faktur, ID, dan keterangan.
- Dua indikator status pada tiap order: **Status Barang** dan **Status Bayar**.
- Pencatatan pembayaran bertahap (cicil) dengan metode Cash, Debit, atau Credit.
- Penerimaan barang bertahap — bisa terima sebagian dulu, sisanya menyusul.
- Jatuh tempo pembayaran yang bisa terisi otomatis dari termin supplier.

#### Langkah Penggunaan

##### 1. Buka daftar order

Klik menu **Pembelian → Order** pada sidebar. Halaman menampilkan seluruh order beserta status barang dan status bayarnya.

![Tangkapan Layar 2026-07-07 pukul 09.33.01.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fcde81880-0feb-4d3a-994b-ce1c2c6a3367-Tangkapan_Layar_2026-07-07_pukul_09.33.01.png)
*Tampilan: Daftar Order Pembelian*

##### 2. Tambah order baru

Klik tombol **Tambah Pembelian Order** di kanan atas. Sistem membuka form order pembelian.

![Tangkapan Layar 2026-07-07 pukul 09.34.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fa3573ef8-3411-4940-9ee0-7f228744a045-Tangkapan_Layar_2026-07-07_pukul_09.34.57.png)
*Tampilan: Form Order Pembelian (Informasi Dasar dan Pemilihan Barang)*

###### Informasi Dasar

Isi data utama order:

| Kolom | Keterangan |
| --- | --- |
| **Cabang** | Cabang tujuan penerima barang (wajib) |
| **Supplier** / **Supplier Cabang** | Pemasok untuk tipe Eksternal, atau cabang asal untuk tipe Antar Cabang (wajib) |
| **Tipe Harga** | Jenis harga yang dipakai untuk mengisi harga beli barang (opsional) |
| **Diskon** | Potongan nilai order (opsional) |
| **Tanggal Order** | Tanggal pemesanan |
| **Jatuh Tempo** | Batas pembayaran; terisi otomatis dari termin supplier bila ada (opsional) |
| **Keterangan** | Catatan tambahan (opsional) |

![sstp1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F34eca648-06aa-4690-ad2c-bc52e191167a-sstp1.png)
*Tampilan: Informasi Dasar*

Kotak **Ringkasan Order** di bawah menampilkan total barang, jenis barang, subtotal, diskon, dan total akhir.

###### Pemilihan Barang

Bagian kanan dipakai untuk menambahkan barang:

- Ketik nama barang di kolom **Cari Barang Existing**.
- Jika barang belum ada, gunakan **Buat Barang Baru** untuk menambah barang langsung dari sini.

![Tangkapan Layar 2026-07-07 pukul 10.12.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F618e62ae-5719-408b-8ecc-5aa001bd4882-Tangkapan_Layar_2026-07-07_pukul_10.12.22.png)
*Tampilan: Pencarian dan pemilihan barang*

##### 3. Periksa daftar barang terpilih

Barang yang dipilih muncul di tabel **Daftar Barang Terpilih**.

![01 - Order Pembelian terpilih.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Ff8afe01d-3e19-4d1f-9a50-9aadba9ddb3b-01_-_Order_Pembelian_terpilih.png)
*Tampilan: Daftar Barang Terpilih*

Kolomnya:

- **Barang** — nama barang
- **Harga Beli** — harga per unit dari supplier
- **Jumlah** — jumlah yang dipesan
- **Harga Jual** — harga jual referensi
- **Keterangan** — catatan per barang
- **Aksi** — hapus barang dari daftar

Setelah semua benar, klik **Buat Pembelian Order** di kanan bawah untuk menyimpan.

##### 4. Pantau status order

Order baru muncul di daftar dengan **Status Barang** Pending dan **Status Bayar** Belum Dibayar.

![Tangkapan Layar 2026-07-07 pukul 10.15.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F50185eb2-6802-4f5e-a44b-5f50ee30e75e-Tangkapan_Layar_2026-07-07_pukul_10.15.11.png)
*Tampilan: Kolom Status Barang dan Status Bayar*

- **Status Barang**: Pending → Telah Pesan → Diterima Sebagian → Diterima. (Untuk Antar Cabang ada tahap Terkirim.)
- **Status Bayar**: Belum Dibayar → Dibayar Sebagian → Sudah Dibayar.

##### 5. Ubah status barang

Klik tombol pada kolom **Status Barang** untuk membuka jendela **Manage Purchase Order**.

![Tangkapan Layar 2026-07-07 pukul 10.20.34.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F07b72a4c-24a5-42f9-953d-8714167a292e-Tangkapan_Layar_2026-07-07_pukul_10.20.34.png)
*Tampilan: Jendela Manage Purchase Order — tab Status*

Pilih **Telah Pesan** setelah order dikonfirmasi ke supplier, lalu klik **Update Status**. Status **Diterima Sebagian** dan **Diterima** tidak dipilih manual — keduanya diatur otomatis berdasarkan penerimaan barang.

> **Catatan:** Status tidak bisa diubah lagi setelah ada penerimaan barang. Untuk mengubahnya, hapus dulu semua penerimaan di tab Penerimaan.

##### 6. Catat pembayaran

Klik tombol pada kolom **Status Bayar** untuk membuka detail pembayaran.

![Tangkapan Layar 2026-07-07 pukul 10.22.35.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fa2add407-a6e7-4a4f-a17e-52f7ea4464e1-Tangkapan_Layar_2026-07-07_pukul_10.22.35.png)
*Tampilan: Jendela pembayaran order*

Isi datanya:

- **Metode Pembayaran** — Cash, Debit, atau Credit (Debit/Credit meminta info bank)
- **Pembayar** — karyawan yang melakukan pembayaran
- **Tanggal Pembayaran**
- **Jumlah Pembayaran** — tidak boleh melebihi sisa tagihan

Klik **Tambah Pembayaran** untuk menyimpan. Pembayaran bisa dicicil beberapa kali sampai lunas.

##### 7. Terima barang

Buka lagi jendela **Manage Purchase Order** dari kolom **Status Barang**, lalu pindah ke tab **Penerimaan** dan klik **+ Terima Barang Baru**. (Status barang harus minimal **Telah Pesan** agar penerimaan bisa dibuat.)

![Tangkapan Layar 2026-07-07 pukul 10.27.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F397dd23f-0911-418b-bc29-c7edc633d122-Tangkapan_Layar_2026-07-07_pukul_10.27.15.png)
*Tampilan: Form Terima Barang Baru*

Isi kolomnya:

- **Penerima** dan **Tanggal Terima**
- **No. Faktur** dari supplier
- **Jumlah barang diterima** pada kolom **Terima** (bisa sebagian)

Klik **Terima Barang** untuk menyelesaikan. Stok cabang otomatis bertambah, dan status barang menjadi **Diterima Sebagian** atau **Diterima** sesuai jumlah yang sudah masuk.

#### Catatan & Tips

- Pembayaran dan penerimaan barang adalah dua proses terpisah — tidak harus dibayar dulu sebelum menerima barang.
- Gunakan tombol **Set Semua ke Max** di form penerimaan untuk mengisi seluruh sisa barang sekaligus.
- Riwayat penerimaan tersimpan di tab **Penerimaan** dan bisa diedit atau dihapus bila ada kesalahan.

#### Lampiran

- [01 - Order Pembelian-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F49f92955-bce1-42e3-9713-a6bf42a257cd-01_-_Order_Pembelian-1.png) — image/png, 291 KB
- [01 - Order Pembelian.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fc93593a9-da04-4715-ba96-34343028080b-01_-_Order_Pembelian.png) — image/png, 1685 KB
- [01 - Order Pembelian daraas.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F1b550e2b-ffee-43be-b5e6-440a33efce1f-01_-_Order_Pembelian_daraas.png) — image/png, 75 KB
- [01 - Order Pembelian barnagf.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F05a684ab-3916-44be-bda1-b663d9acec09-01_-_Order_Pembelian_barnagf.png) — image/png, 149 KB
- [01 - Order Pembelian terpilih.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Ff8afe01d-3e19-4d1f-9a50-9aadba9ddb3b-01_-_Order_Pembelian_terpilih.png) — image/png, 105 KB
- [01 - Order Pembelian orderr.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F42dad7ef-8e52-43d5-8b7d-885cfb162920-01_-_Order_Pembelian_orderr.png) — image/png, 112 KB
- [01 - Order Pembelian-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F2b203292-3b05-440e-a533-5c03d9339e7d-01_-_Order_Pembelian-2.png) — image/png, 143 KB
- [01 - Order Pembelian-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fdd7ee306-5e15-49c1-a478-6ea3533b0d15-01_-_Order_Pembelian-3.png) — image/png, 112 KB
- [01 - Order Pembelian-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Faaa998c7-869c-403c-8fff-2e3560717cfd-01_-_Order_Pembelian-4.png) — image/png, 146 KB
- [Tangkapan Layar 2026-07-07 pukul 09.33.01.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fcde81880-0feb-4d3a-994b-ce1c2c6a3367-Tangkapan_Layar_2026-07-07_pukul_09.33.01.png) — image/png, 383 KB
- [Tangkapan Layar 2026-07-07 pukul 09.34.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fa3573ef8-3411-4940-9ee0-7f228744a045-Tangkapan_Layar_2026-07-07_pukul_09.34.57.png) — image/png, 231 KB
- [sstp.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F139bc8b0-ebeb-44b9-a011-1349da6abe1e-sstp.png) — image/png, 720 KB
- [sstp1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F34eca648-06aa-4690-ad2c-bc52e191167a-sstp1.png) — image/png, 97 KB
- [Tangkapan Layar 2026-07-07 pukul 10.12.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F618e62ae-5719-408b-8ecc-5aa001bd4882-Tangkapan_Layar_2026-07-07_pukul_10.12.22.png) — image/png, 89 KB
- [Tangkapan Layar 2026-07-07 pukul 10.15.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F50185eb2-6802-4f5e-a44b-5f50ee30e75e-Tangkapan_Layar_2026-07-07_pukul_10.15.11.png) — image/png, 117 KB
- [Tangkapan Layar 2026-07-07 pukul 10.20.34.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F07b72a4c-24a5-42f9-953d-8714167a292e-Tangkapan_Layar_2026-07-07_pukul_10.20.34.png) — image/png, 96 KB
- [Tangkapan Layar 2026-07-07 pukul 10.22.35.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2Fa2add407-a6e7-4a4f-a17e-52f7ea4464e1-Tangkapan_Layar_2026-07-07_pukul_10.22.35.png) — image/png, 96 KB
- [Tangkapan Layar 2026-07-07 pukul 10.27.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F23%2F397dd23f-0911-418b-bc29-c7edc633d122-Tangkapan_Layar_2026-07-07_pukul_10.27.15.png) — image/png, 120 KB

### Retur Pembelian

> Cara mencatat pengembalian barang ke supplier berdasarkan faktur penerimaan, memilih barang dan jumlah yang diretur, sehingga stok gudang berkurang otomatis.

#### Pengertian

Retur Pembelian dipakai untuk mencatat pengembalian barang ke supplier atas barang yang sebelumnya sudah diterima. Retur biasanya terjadi karena barang rusak atau cacat, tidak sesuai pesanan, atau diterima berlebih.

Setiap retur mengacu pada satu faktur penerimaan barang. Saat retur dibuat, stok gudang berkurang otomatis dan retur tercatat di laporan pembelian tanpa perlu penyesuaian manual.

#### Fitur Utama

- Daftar retur dengan filter cabang, supplier, nomor faktur, ID, dan memo.
- Pembuatan retur langsung dari faktur pembelian yang sudah diterima.
- Jumlah retur dibatasi agar tidak melebihi jumlah barang yang diterima.
- Ringkasan otomatis: jumlah jenis barang, jumlah barang retur, dan total nilai retur.

#### Langkah Penggunaan

##### 1. Buka daftar retur

Masuk ke menu **Pembelian → Retur**. Halaman menampilkan daftar retur yang sudah dibuat dengan kolom:

- **No. Faktur**
- **Cabang**
- **Supplier**
- **Total Retur**
- **Memo**
- **Aksi** — Lihat Detail, Edit, Hapus

![Tangkapan Layar 2026-07-07 pukul 10.28.36.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F98f524e3-13ce-4d41-965e-f7f69224322e-Tangkapan_Layar_2026-07-07_pukul_10.28.36.png)
*Tampilan: Daftar Retur Pembelian*

##### 2. Tambah retur baru

Klik tombol **Tambah** di kanan atas untuk membuka form retur.

![02 - Retur Pembelian form.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F8fc005f5-8e1c-48b5-aea3-70e30bd98b2e-02_-_Retur_Pembelian_form.png)
*Tampilan: Form Tambah Retur Pembelian*

Pilih **Faktur Pembelian** dari kolom pencarian — cukup ketik nama supplier atau nomor faktur, lalu pilih transaksi penerimaan yang sesuai. Cabang dan supplier akan terisi otomatis mengikuti faktur tersebut. Tambahkan **Keterangan** bila perlu (misalnya alasan retur).

##### 3. Pilih barang yang diretur

Setelah faktur dipilih, sistem menampilkan barang dari transaksi tersebut. Pilih barang yang ingin dikembalikan dan isi **Jumlah Retur** pada tabel.

![02 - Retur Pembelian fd.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F0a5ddc71-e8d6-4b85-9afe-897f6fb7f511-02_-_Retur_Pembelian_fd.png)
*Tampilan: Daftar barang retur*

Tabel menampilkan **Barang**, **Jumlah** (yang dibeli), **Jumlah Retur**, dan — bila diizinkan — **Harga Satuan** serta **Total** per barang. Kotak ringkasan di kiri menghitung jumlah jenis barang retur, jumlah barang retur, dan total nilai retur.

> **Catatan:** Jumlah retur otomatis dibatasi agar tidak melebihi jumlah barang yang diterima pada faktur tersebut.

##### 4. Simpan retur

Periksa kembali data retur.

![02 - Retur Pembelian-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F5fe8ba03-8f7e-476a-ad78-97837192ba55-02_-_Retur_Pembelian-2.png)
*Tampilan: Konfirmasi retur*

Klik **Buat Retur Pembelian** untuk menyimpan transaksi.

#### Catatan & Tips

- Retur hanya bisa dibuat dari barang yang sudah diterima (punya faktur penerimaan) — bukan dari order yang belum masuk.
- Barang yang diretur otomatis mengurangi stok gudang.
- Retur tercatat di laporan pembelian sehingga nilai pembelian bersih ikut menyesuaikan.
- Harga satuan retur bisa disesuaikan; sistem menampilkan harga asli dari transaksi pembelian sebagai acuan.

#### Lampiran

- [02 - Retur Pembelian-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2Fb965eba7-d985-473a-8b62-954ce08b2ff6-02_-_Retur_Pembelian-1.png) — image/png, 90 KB
- [02 - Retur Pembelian form.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F8fc005f5-8e1c-48b5-aea3-70e30bd98b2e-02_-_Retur_Pembelian_form.png) — image/png, 150 KB
- [02 - Retur Pembelian fd.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F0a5ddc71-e8d6-4b85-9afe-897f6fb7f511-02_-_Retur_Pembelian_fd.png) — image/png, 102 KB
- [02 - Retur Pembelian-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F5fe8ba03-8f7e-476a-ad78-97837192ba55-02_-_Retur_Pembelian-2.png) — image/png, 54 KB
- [Tangkapan Layar 2026-07-07 pukul 10.28.36.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F24%2F98f524e3-13ce-4d41-965e-f7f69224322e-Tangkapan_Layar_2026-07-07_pukul_10.28.36.png) — image/png, 153 KB

## Bab 05 — Gudang


### Stok

> Halaman untuk memantau jumlah stok setiap barang per cabang secara real-time, menelusuri riwayat pergerakannya, menjalankan operasi stok, dan mencetak barcode. Dibutuhkan setiap kali ingin mengecek ketersediaan barang atau memeriksa nilai persediaan.

#### Pengertian

Menu **Gudang → Stok** menampilkan jumlah persediaan setiap barang di masing-masing cabang. Angka stok tidak diisi manual — sistem memperbaruinya otomatis setiap kali ada pembelian, penjualan, retur, mutasi, penghapusan, atau stok opname.

Dari halaman ini Anda juga bisa menelusuri riwayat pergerakan stok sebuah barang, membuka detail barang, menjalankan operasi stok (pembelian atau opname), serta mencetak barcode untuk label fisik.

#### Fitur Utama

- Menampilkan daftar barang beserta jumlah stok per cabang, harga beli, harga jual, dan tanggal kedaluwarsa.
- Total kuantitas stok ditampilkan di bagian atas daftar (**Total Kuantitas Stock**).
- Filter pencarian: cabang, **Jenis Stok**, kategori & sub kategori, brand & sub brand, warna & sub warna, ukuran SPH/CYL/ADD, nama barang, serta rentang harga beli dan harga jual.
- Riwayat pergerakan stok per barang, lengkap dengan harga pokok dan nilai kumulatif.
- Operasi stok pada barang yang dipilih: **Pembelian**, **Stok Opname**, dan **Tampilkan Barcode**.
- Status **Alert Stok** per baris (Habis / Menipis / Berlebih / Aman) beserta kolom **Min/Max**, filter **Status Alert**, dan tombol **Perlu Perhatian** untuk langsung menyaring barang yang butuh tindakan. Batasnya dikelola lewat tombol **Alert Stok** — lihat halaman manual **Alert Stok** di bab Gudang.

#### Langkah Penggunaan

##### Melihat data stok

Buka menu **Gudang → Stok**, lalu atur filter di bagian atas untuk menampilkan data yang diinginkan.




![Tangkapan Layar 2026-07-02 pukul 15.39.13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F4bb329a6-7ef8-4282-94be-86b58260828b-Tangkapan_Layar_2026-07-02_pukul_15.39.13.png)


*Tampilan: Menu Gudang*

Pilih **Cabang**, lalu tentukan **Jenis Stok**:

- **Tampilkan Barang yang Tersedia di Stock** — hanya barang dengan stok lebih dari 0 (pilihan default).
- **Tampilkan Barang yang Perlu Dipesan** — barang dengan stok 0 atau minus, yang perlu dibeli ulang.
- **Tampilkan Semua Barang** — seluruh barang tanpa memandang jumlah stok.

Lengkapi filter lain bila perlu (kategori, brand, warna, ukuran, nama, atau rentang harga), lalu tampilkan hasilnya. Daftar stok muncul dengan kolom **ID**, **Nama**, **Harga Beli**, **Harga Jual**, **Cabang**, **Stock**, dan **Tanggal Kadaluarsa**.

![01 - Stock-7.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F59e99d7a-49aa-47fe-b768-c9c6c2009993-01_-_Stock-7.png)
*Tampilan: Daftar Stok Barang*

> **Catatan:** Kolom **Harga Beli** dan **Harga Jual** hanya tampil bagi pengguna yang punya izin melihat harga tersebut.

##### Melihat detail barang

Klik **nama barang** pada tabel untuk membuka jendela detail barang, berisi kode, nama, kategori & sub kategori, brand & sub brand, warna & sub warna, ukuran SPH/CYL/ADD, harga, dan keterangan.


![Tangkapan Layar 2026-07-02 pukul 15.57.30.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F3c7dbb3e-b4ba-4ebd-875e-81c07633c153-Tangkapan_Layar_2026-07-02_pukul_15.57.30.png)

*Tampilan: Detail Barang*

##### Melihat riwayat pergerakan stok

Klik tanda panah (**>**) di kolom pertama untuk membuka riwayat transaksi yang memengaruhi jumlah barang tersebut. Setiap baris menampilkan jenis transaksi (Terima Pembelian, Penjualan, Stock Opname, Penghapusan Persediaan, mutasi masuk/keluar), jumlah (+ atau −), harga pokok, dan nilai kumulatif persediaan.



![Tangkapan Layar 2026-07-02 pukul 16.06.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F732445e5-792c-4249-972a-c3bba9054c8b-Tangkapan_Layar_2026-07-02_pukul_16.06.00.png)


*Tampilan: Riwayat Pergerakan Stok*

> Warna **hijau (+)** = stok bertambah (pembelian, mutasi masuk, opname lebih).
> Warna **merah (−)** = stok berkurang (penjualan, mutasi keluar, retur, opname kurang).

Bila ada barang yang sudah terjual tetapi belum dipenuhi, sistem menandainya sebagai **Buffer Stock** — jumlah ini masih tercatat sebagai stok tetapi belum benar-benar tersedia untuk dijual.

##### Harga pokok & nilai persediaan (metode FIFO)

Lensiro menghitung nilai stok dengan metode **FIFO (First In, First Out)** — barang yang pertama masuk dianggap terjual lebih dulu. Dengan begitu nilai persediaan dan Harga Pokok Penjualan (HPP) mengikuti urutan harga beli yang sebenarnya.

Contoh pergerakan pembelian sebuah barang:

| No | Transaksi | Jumlah | Harga Pokok/Unit | Total Nilai | Nilai Kumulatif | Sisa Stok |
|---|---|---|---|---|---|---|
| 1–4 | Pembelian | 5 (×4) | 1.100.000 | +5.500.000 | 22.000.000 | 20 |
| 5 | Pembelian | 10 | 1.200.000 | +12.000.000 | 34.000.000 | 30 |
| 6 | Pembelian | 1 | 1.300.000 | +1.300.000 | 35.300.000 | 31 |

Jika 24 unit terjual, FIFO mengambil dari batch termurah lebih dulu: 20 unit @ 1.100.000 + 4 unit @ 1.200.000 = **Rp 26.800.000** (inilah HPP-nya). Sisa stok = 7 unit (6 @ 1.200.000 + 1 @ 1.300.000) senilai **Rp 8.500.000**.

- **Harga Pokok** = biaya modal per unit, dipakai menghitung HPP.
- **Nilai Kumulatif** = total nilai aset stok yang masih ada di gudang.
- Nilai persediaan sesudah penjualan = nilai sebelum − HPP = 35.300.000 − 26.800.000 = 8.500.000.

##### Menjalankan operasi stok

1. Centang satu atau beberapa barang di daftar stok.
2. Klik **Lakukan Operasi**.
3. Pilih salah satu:
   - **Pembelian** — membuka form order pembelian untuk menambah stok dari supplier.
   - **Stok Opname** — membuka tugas opname untuk mencocokkan stok fisik dengan sistem (barang harus dari cabang yang sama).
   - **Tampilkan Barcode** — menampilkan barcode barang terpilih untuk dicetak.


![Tangkapan Layar 2026-07-02 pukul 16.08.07.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F9297f236-bbb1-4af7-a3fd-f36c28c75633-Tangkapan_Layar_2026-07-02_pukul_16.08.07.png)

*Tampilan: Menu Lakukan Operasi*

##### Mencetak barcode

Setelah memilih **Tampilkan Barcode** dari menu operasi, sistem menampilkan label yang berisi **nama barang**, **barcode** (kode barang), dan **harga jual**. Klik **Cetak** untuk mencetaknya.


![Tangkapan Layar 2026-07-02 pukul 16.09.29.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F7c2006eb-2687-48ac-b655-81d31786c8b8-Tangkapan_Layar_2026-07-02_pukul_16.09.29.png)

*Tampilan: Cetak Barcode Barang*

> Barcode mempercepat input di menu **Penjualan**, **Pembelian**, dan **Opname Stok** menggunakan scanner.

#### Catatan & Tips

- Stok bersifat otomatis dan real-time; tidak bisa diubah langsung dari halaman ini.
- Untuk menambah stok gunakan **Pembelian** atau **Mutasi Stok**; untuk mengurangi gunakan **Penjualan**, **Mutasi Stok** keluar, **Retur Pembelian**, atau **Penghapusan Persediaan**.
- Menu **Lakukan Operasi** hanya muncul setelah ada barang yang dicentang.
- Operasi **Stok Opname** hanya bisa untuk barang dari satu cabang yang sama.

#### Lampiran

- [01 - Stock-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2Ffef2c05d-f407-4e7e-8999-1558e794e47b-01_-_Stock-1.png) — image/png, 30 KB
- [01 - Stock-7.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F59e99d7a-49aa-47fe-b768-c9c6c2009993-01_-_Stock-7.png) — image/png, 408 KB
- [01 - Stock-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F84b09105-6e5e-40d3-bad9-080a46b08d7e-01_-_Stock-8.png) — image/png, 146 KB
- [01 - Stock riawayat.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2Fdaef43cb-e07a-4e5c-b0d8-cce7ab5920ac-01_-_Stock_riawayat.png) — image/png, 246 KB
- [01 - Stock-9.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2Fcdf119f3-ec78-4614-9c9f-f66fe3fca147-01_-_Stock-9.png) — image/png, 137 KB
- [01 - Stock barcode.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F332a3f18-ef32-4b77-8fc2-29120259d0d9-01_-_Stock_barcode.png) — image/png, 60 KB
- [Tangkapan Layar 2026-07-02 pukul 15.39.13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2Fd4a31bfd-7140-4ca3-8d62-f8987ae8c20b-Tangkapan_Layar_2026-07-02_pukul_15.39.13.png) — image/png, 28 KB
- [Tangkapan Layar 2026-07-02 pukul 15.46.23.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F97b3d782-d7f7-4c70-a417-1b0cd2086d17-Tangkapan_Layar_2026-07-02_pukul_15.46.23.png) — image/png, 192 KB
- [Tangkapan Layar 2026-07-02 pukul 15.39.13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F4bb329a6-7ef8-4282-94be-86b58260828b-Tangkapan_Layar_2026-07-02_pukul_15.39.13.png) — image/png, 28 KB
- [Tangkapan Layar 2026-07-02 pukul 15.57.30.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F3c7dbb3e-b4ba-4ebd-875e-81c07633c153-Tangkapan_Layar_2026-07-02_pukul_15.57.30.png) — image/png, 135 KB
- [Tangkapan Layar 2026-07-02 pukul 16.02.31.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F67775947-fd1d-40fb-9c31-e236c9261ca5-Tangkapan_Layar_2026-07-02_pukul_16.02.31.png) — image/png, 675 KB
- [Tangkapan Layar 2026-07-02 pukul 16.06.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F732445e5-792c-4249-972a-c3bba9054c8b-Tangkapan_Layar_2026-07-02_pukul_16.06.00.png) — image/png, 669 KB
- [Tangkapan Layar 2026-07-02 pukul 16.08.07.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F9297f236-bbb1-4af7-a3fd-f36c28c75633-Tangkapan_Layar_2026-07-02_pukul_16.08.07.png) — image/png, 357 KB
- [Tangkapan Layar 2026-07-02 pukul 16.09.29.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F26%2F7c2006eb-2687-48ac-b655-81d31786c8b8-Tangkapan_Layar_2026-07-02_pukul_16.09.29.png) — image/png, 97 KB

### Barang

> Master data setiap barang yang dijual — kode, kategori, brand, warna, ukuran optik, serta harga beli dan jual. Dipakai untuk menambah barang (satuan, massal, atau impor CSV), mengubah harga secara massal, dan mengatur status aktif barang.

#### Pengertian

Menu **Gudang → Barang** adalah tempat mengelola master data seluruh barang: kode, nama, kategori, brand, warna, ukuran optik (SPH, CYL, ADD), harga beli, dan harga jual. Data barang di sini terhubung langsung dengan modul **Penjualan**, **Pembelian**, dan **Stok**.

Berbeda dengan menu **Stok** yang menampilkan jumlah persediaan, menu **Barang** fokus pada identitas dan atribut produk — termasuk menambah barang baru dan mengatur harganya.

#### Fitur Utama

- Menampilkan daftar barang dengan kode, nama, harga beli, harga jual, status aktif, dan tanggal kedaluwarsa.
- Filter berdasarkan kategori & sub kategori, brand & sub brand, warna & sub warna, ukuran SPH/CYL/ADD, status aktif, dan riwayat transaksi.
- Tiga cara menambah barang: **Item Satuan**, **Item Massal**, dan **Import CSV**.
- Tombol **Set Harga** untuk memperbarui harga secara massal.
- Riwayat pergerakan stok per barang.
- Operasi massal: aktifkan, nonaktifkan, tampilkan barcode, dan hapus barang.

#### Langkah Penggunaan

##### Melihat & menyaring barang

1. Buka menu **Gudang → Barang**.
2. Gunakan filter (kategori, brand, warna, ukuran, status aktif, riwayat transaksi) sesuai kebutuhan.
3. Daftar barang tampil dalam tabel berisi kode, nama, harga beli & harga jual, status, kedaluwarsa, serta brand dan kategori.


![Tangkapan Layar 2026-07-02 pukul 17.10.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F79d9e7da-17de-41fd-804d-068cd73d8a03-Tangkapan_Layar_2026-07-02_pukul_17.10.11.png)

*Tampilan: Daftar Barang*

##### Menambahkan barang (Item Satuan)

1. Klik **Tambah Barang** di kanan atas — form terbuka pada tab **Item Satuan**.
2. Isi kategori, sub kategori, brand & sub brand, warna, ukuran optik (SPH, CYL, ADD), harga beli, dan harga jual.
3. Klik **Simpan** untuk menyimpan barang.


![Tangkapan Layar 2026-07-03 pukul 08.31.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F15699de5-2485-4bb4-bd5e-e0d305108fdc-Tangkapan_Layar_2026-07-03_pukul_08.31.11.png)

*Tampilan: Form Tambah Barang*

##### Membuat banyak barang sekaligus (Item Massal)

Tab **Item Massal** membuat banyak barang otomatis dari kombinasi nilai resep optik (SPH, CYL, dan ADD). Cocok untuk lensa, yang satu jenisnya bisa punya puluhan hingga ratusan variasi ukuran.

1. Klik **Tambah Barang**, lalu pilih tab **Item Massal**.
2. Isi **Informasi Dasar** (kategori, sub kategori, brand, warna).
3. Pilih nilai **SPH**, **CYL**, dan **ADD** yang diinginkan. Sistem menampilkan jumlah kombinasi dan contoh item yang akan dibuat.
4. Klik **Create Bulk Items** untuk membuat semua kombinasi sekaligus.


![Tangkapan Layar 2026-07-03 pukul 08.33.41.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F5e7c4806-4515-467f-84fe-5092be3edfb4-Tangkapan_Layar_2026-07-03_pukul_08.33.41.png)

*Tampilan: Form Item Massal berdasarkan kombinasi SPH, CYL, dan ADD*

Contohnya, untuk produk **Essilor Eyezen Bluecut** dengan rentang SPH +0.25 s/d −6.00, CYL 0.00/−0.25/−0.50/−0.75, dan ADD +0.75/+1.25, sistem membuat seluruh kombinasi lengkap dengan kode otomatis seperti `LNS-EYEZEN-(-2.25/-0.50/+1.25)`.

> **Catatan:** Maksimal 30.000 item dapat dibuat sekaligus. Kombinasi yang besar (ratusan item) butuh waktu proses lebih lama — gunakan dengan hati-hati.

##### Impor barang dari file CSV

Tab **Import CSV** menambahkan banyak barang sekaligus dari file. Cocok untuk input stok awal atau update massal.

1. Klik **Tambah Barang**, lalu pilih tab **Import CSV**.


![Tangkapan Layar 2026-07-02 pukul 17.26.45.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F20f74361-e911-40f7-b9e6-2647be4f1248-Tangkapan_Layar_2026-07-02_pukul_17.26.45.png)

*Tampilan: Import Barang via CSV*

2. Klik **Download Template CSV**, lalu buka file dengan Excel atau Google Sheets. Kolomnya:

| Kolom | Wajib | Keterangan |
|---|---|---|
| Category Name | Ya | Kategori barang (harus sudah ada di master data) |
| Branch Name | Ya | Nama cabang (harus sudah ada di master data) |
| Brand Name | Ya | Merek barang (dibuat otomatis jika belum ada) |
| Sub Category Name | Tidak | Sub kategori barang |
| Sub Brand Name | Tidak | Sub brand / seri barang |
| SPH, CYL, ADD | Tidak | Nilai resep untuk lensa (kosongkan bila tak perlu) |
| Color | Tidak | Warna utama |
| Sub Color | Tidak | Warna tambahan / tone |
| Sell Price | Ya | Harga jual (angka saja, tanpa "Rp" atau koma) |
| Supplier Price | Tidak | Harga beli dari supplier |
| Expired Date | Tidak | Format `YYYY-MM-DD`, contoh `2025-12-31` |
| Qty | Tidak | Jumlah stok awal barang |
| Memo | Tidak | Catatan tambahan |

![02 - Barang-10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F87677048-c47a-4e00-b29d-00c3109066e4-02_-_Barang-10.png)
*Tampilan: Contoh isi template CSV*

3. Isi data. Aturan penting: tanggal wajib format `YYYY-MM-DD`; harga ditulis angka saja (`300000`, bukan `Rp 300.000`); kolom yang tak perlu dikosongkan; jangan ada baris ganda atau kosong di tengah data. Simpan kembali sebagai **CSV**.

4. Kembali ke jendela import, lalu unggah file lewat area **Upload File CSV** atau drag-and-drop.

![02 - Barang-11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Ff829f1ec-243b-44f9-bec0-990ae54c6587-02_-_Barang-11.png)
*Tampilan: Area unggah file CSV*

Sistem membaca seluruh baris dan menambahkan barang ke daftar. Sub kategori, sub brand, warna, dan sub warna yang belum ada akan dibuat otomatis. Jika ada baris bermasalah (misal kategori tidak ditemukan), sistem menampilkan pesan error untuk diperbaiki.

> **Catatan:** Konsep import CSV ini sama seperti di menu Master lain (Cabang, Kategori, Brand, dll.): unduh template → isi data → simpan sebagai CSV → unggah kembali.

##### Melihat riwayat pergerakan barang

1. Pada daftar barang, klik tanda panah (**>**) di samping kode barang.
2. Sistem menampilkan riwayat keluar–masuk barang secara kronologis (pembelian, penjualan, retur, mutasi).



![Tangkapan Layar 2026-07-03 pukul 08.38.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F3c892c0a-afed-482c-b26b-d777e5048b19-Tangkapan_Layar_2026-07-03_pukul_08.38.09.png)


*Tampilan: Riwayat Pergerakan Barang*

> **Hijau (+)** = barang masuk (pembelian, retur penjualan, mutasi masuk). **Merah (−)** = barang keluar (penjualan, retur pembelian, mutasi keluar).

##### Operasi massal pada barang

1. Centang satu atau beberapa barang.
2. Klik **Lakukan Operasi**, lalu pilih:

| Opsi | Fungsi |
|---|---|
| **Aktifkan** | Mengaktifkan barang agar bisa dipakai pada transaksi. |
| **Nonaktifkan** | Menonaktifkan barang agar tidak muncul di daftar pemilihan transaksi. |
| **Tampilkan Barcode** | Menampilkan dan mencetak barcode barang terpilih. |
| **Hapus** | Menghapus barang yang belum pernah punya transaksi. |

![02 - Barang operasi.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Fad14be08-3ca6-4a4e-a75f-f162c9fb2c22-02_-_Barang_operasi.png)
*Tampilan: Menu Lakukan Operasi*

> **Catatan:** Barang yang sudah pernah bertransaksi tidak bisa dihapus. Bila tak ingin dipakai lagi, ubah statusnya menjadi **Nonaktif**.

##### Memperbarui harga secara massal (Set Harga)

1. Pilih barang yang ingin diubah, lalu klik **Set Harga**.
2. Pilih tipe harga yang akan diperbarui — **Harga Jual**, **Harga Beli**, atau tipe harga lain yang dikonfigurasi di Master.
3. Masukkan harga baru. Tabel di bawah menampilkan barang yang akan diperbarui beserta harga sebelum dan sesudah.
4. Klik untuk menyimpan; harga langsung diperbarui di seluruh modul terkait.

![02 - Barang-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Fddc3b8b5-517c-4ff9-8bdf-0b4719333a55-02_-_Barang-8.png)
*Tampilan: Setel Harga Barang*

#### Catatan & Tips

- Data barang terhubung langsung dengan modul **Penjualan**, **Pembelian**, dan **Stok**.
- Barang nonaktif tidak muncul di daftar pemilihan transaksi.
- Gunakan struktur kategori dan brand yang konsisten agar laporan mudah dibaca.
- Untuk perubahan kecil pada satu barang, lebih baik gunakan **Edit Barang** daripada import CSV.

#### Lampiran

- [02 - Barang-5.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Fabe13929-e342-404d-9681-13d7e9809be7-02_-_Barang-5.png) — image/png, 251 KB
- [02 - Barang-6.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F3b1f8629-167d-44f6-b6d4-10de2ba016dc-02_-_Barang-6.png) — image/png, 162 KB
- [02 - Barang-7.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F2d1e72b1-9222-46d5-b2b6-f88bc7412e60-02_-_Barang-7.png) — image/png, 263 KB
- [02 - Barang-9.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F9405b2a8-789b-490e-811c-54cf62c9dbbd-02_-_Barang-9.png) — image/png, 99 KB
- [02 - Barang-10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F87677048-c47a-4e00-b29d-00c3109066e4-02_-_Barang-10.png) — image/png, 139 KB
- [02 - Barang-11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Ff829f1ec-243b-44f9-bec0-990ae54c6587-02_-_Barang-11.png) — image/png, 22 KB
- [02 - Barang riwayat-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F78809268-9175-4b82-bb85-5ce5d45964a3-02_-_Barang_riwayat-1.png) — image/png, 284 KB
- [02 - Barang operasi.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Fad14be08-3ca6-4a4e-a75f-f162c9fb2c22-02_-_Barang_operasi.png) — image/png, 95 KB
- [02 - Barang-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Fddc3b8b5-517c-4ff9-8bdf-0b4719333a55-02_-_Barang-8.png) — image/png, 157 KB
- [Tangkapan Layar 2026-07-02 pukul 17.10.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F79d9e7da-17de-41fd-804d-068cd73d8a03-Tangkapan_Layar_2026-07-02_pukul_17.10.11.png) — image/png, 253 KB
- [Tangkapan Layar 2026-07-02 pukul 17.26.45.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F20f74361-e911-40f7-b9e6-2647be4f1248-Tangkapan_Layar_2026-07-02_pukul_17.26.45.png) — image/png, 151 KB
- [Tangkapan Layar 2026-07-02 pukul 17.30.50.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2Fdd92246d-b1c7-415a-9ae6-c47102c7b7ea-Tangkapan_Layar_2026-07-02_pukul_17.30.50.png) — image/png, 676 KB
- [Tangkapan Layar 2026-07-03 pukul 08.31.11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F15699de5-2485-4bb4-bd5e-e0d305108fdc-Tangkapan_Layar_2026-07-03_pukul_08.31.11.png) — image/png, 111 KB
- [Tangkapan Layar 2026-07-03 pukul 08.33.41.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F5e7c4806-4515-467f-84fe-5092be3edfb4-Tangkapan_Layar_2026-07-03_pukul_08.33.41.png) — image/png, 110 KB
- [Tangkapan Layar 2026-07-03 pukul 08.38.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F27%2F3c892c0a-afed-482c-b26b-d777e5048b19-Tangkapan_Layar_2026-07-03_pukul_08.38.09.png) — image/png, 687 KB

### Mutasi Stok

> Mencatat perpindahan barang antar cabang atau gudang. Dipakai saat mengirim stok ke cabang lain; stok baru berpindah setelah cabang tujuan mengonfirmasi penerimaan.

#### Pengertian

Menu **Gudang → Mutasi Stok** mencatat setiap perpindahan barang antar cabang atau gudang. Setiap mutasi tercatat lengkap dengan cabang asal, cabang tujuan, pengirim, penerima, dan status pengiriman, sehingga distribusi barang tetap terkontrol dan akurasi stok terjaga.

#### Fitur Utama

- Mencatat transaksi perpindahan stok antar cabang/gudang.
- Status pengiriman: **Pending** (belum dikirim), **Terkirim** (sudah dikirim, belum diterima), dan **Selesai** (sudah diterima).
- Menampilkan pengirim dan penerima barang.
- Filter berdasarkan **Dari Cabang**, **Ke Cabang**, pengirim, penerima, status, dan keterangan.
- Cetak **Surat Jalan** sebagai bukti fisik pengiriman.

#### Langkah Penggunaan

##### Melihat daftar mutasi

1. Buka menu **Gudang → Mutasi Stok**.
2. Gunakan filter **Dari Cabang** (asal) dan **Ke Cabang** (tujuan), lalu tampilkan datanya.
3. Daftar mutasi tampil dengan kolom ID, tanggal kirim, cabang asal & tujuan, pengirim, penerima, status, dan keterangan.


![Tangkapan Layar 2026-07-03 pukul 08.42.14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2F280643a8-c825-47d9-89d1-dde2fe817e79-Tangkapan_Layar_2026-07-03_pukul_08.42.14.png)

*Tampilan: Daftar Mutasi Stok*

##### Menambah mutasi

1. Klik **Tambah Mutasi** di kanan atas.
2. Isi **Dari Cabang** dan **Ke Cabang**, **Pengirim**, **Tanggal Kirim**, lalu pilih **Barang** dan **Jumlah** yang dikirim (stok pengirim ditampilkan sebagai acuan). Tambahkan keterangan bila perlu.
3. Klik **Lakukan Mutasi** untuk mencatat transaksi.


![Tangkapan Layar 2026-07-03 pukul 08.44.13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2F59850951-31f3-4fe7-adae-0a47422ff206-Tangkapan_Layar_2026-07-03_pukul_08.44.13.png)

*Tampilan: Form Tambah Mutasi*

##### Mengonfirmasi penerimaan

Setelah barang sampai di cabang tujuan, buka mutasi tersebut lalu konfirmasi penerimaannya (klik label status untuk membuka form terima). Setelah dikonfirmasi, status berubah dari **Terkirim** menjadi **Selesai**, dan stok baru berpindah: berkurang di cabang asal, bertambah di cabang tujuan.

##### Menu aksi

Setiap baris mutasi punya menu aksi (**⋮**) di kolom paling kanan:

| Tombol | Fungsi |
|---|---|
| **Lihat Detail** | Menampilkan detail lengkap mutasi: daftar barang, jumlah, dan status penerimaan. |
| **Surat Jalan** | Mencetak dokumen surat jalan sebagai bukti pengiriman antar cabang. |
| **Hapus** | Menghapus data mutasi (hanya bagi pengguna yang punya izin hapus). |


![Tangkapan Layar 2026-07-03 pukul 08.45.42.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2Fc34fc49b-5f35-45a8-b7cd-9c17f65a17d6-Tangkapan_Layar_2026-07-03_pukul_08.45.42.png)

*Tampilan: Menu Aksi Mutasi Stok*

#### Catatan & Tips

- Perpindahan stok baru berlaku setelah mutasi berstatus **Selesai**; sebelum itu barang masih tercatat di cabang asal.
- Setiap mutasi yang dikirim perlu dikonfirmasi penerimaannya agar stok kedua cabang sinkron.
- Semua data mutasi otomatis terhubung dengan laporan stok dan inventori.

#### Lampiran

- [03 - Stock Mutasi-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2Fcb922e51-cc4f-462e-918d-06e3d2077dc6-03_-_Stock_Mutasi-2.png) — image/png, 176 KB
- [03 - Stock Mutasi-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2F4452db5f-9a31-4310-9195-a38cf78cd548-03_-_Stock_Mutasi-3.png) — image/png, 134 KB
- [03 - Stock Mutasi-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2F77fef460-dd90-4757-909b-4eed9a70ecfa-03_-_Stock_Mutasi-4.png) — image/png, 186 KB
- [Tangkapan Layar 2026-07-03 pukul 08.42.14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2F280643a8-c825-47d9-89d1-dde2fe817e79-Tangkapan_Layar_2026-07-03_pukul_08.42.14.png) — image/png, 443 KB
- [Tangkapan Layar 2026-07-03 pukul 08.44.13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2F59850951-31f3-4fe7-adae-0a47422ff206-Tangkapan_Layar_2026-07-03_pukul_08.44.13.png) — image/png, 150 KB
- [Tangkapan Layar 2026-07-03 pukul 08.45.42.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F28%2Fc34fc49b-5f35-45a8-b7cd-9c17f65a17d6-Tangkapan_Layar_2026-07-03_pukul_08.45.42.png) — image/png, 464 KB

### Penghapusan Persediaan

> Mengeluarkan barang dari stok karena rusak, hilang, usang, atau kedaluwarsa. Dipakai agar catatan persediaan tetap sesuai kondisi fisik dan laporan keuangan tetap valid.

#### Pengertian

Menu **Gudang → Penghapusan Persediaan** dipakai untuk mengeluarkan barang dari stok karena kondisi tertentu — rusak, hilang, usang, atau kedaluwarsa. Setiap penghapusan tercatat resmi sebagai riwayat, sehingga data inventori tetap sesuai kondisi fisik di lapangan dan laporan keuangan tetap akurat.

#### Fitur Utama

- Mengurangi stok barang yang tidak lagi layak jual atau dipakai.
- Memperbarui jumlah persediaan otomatis setelah disimpan.
- Menyimpan catatan historis penghapusan untuk audit.
- Filter daftar penghapusan berdasarkan cabang, barang, pelaku, ID write-off, keterangan, dan rentang tanggal.

#### Langkah Penggunaan

##### Melihat daftar penghapusan

1. Buka menu **Gudang → Penghapusan Persediaan**.
2. Gunakan filter (cabang, barang, pelaku) — dan bila perlu filter lanjutan (ID write-off, keterangan, rentang tanggal), lalu tampilkan datanya.
3. Daftar tampil dengan kolom ID, tanggal, nama barang, cabang, jumlah, pelaku, dan keterangan.


![Tangkapan Layar 2026-07-03 pukul 08.47.31.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F29%2Ffc0a588e-d74a-42be-b830-341d51fe0fd3-Tangkapan_Layar_2026-07-03_pukul_08.47.31.png)

*Tampilan: Daftar Penghapusan Persediaan*

##### Menambah penghapusan

1. Klik **Tambah Penghapusan Persediaan** di kanan atas.
2. Isi data sesuai kondisi:
   - **Barang** — item yang akan dihapus dari stok.
   - **Cabang** — lokasi stok berada.
   - **Karyawan** — pengguna yang bertanggung jawab.
   - **Tanggal Penyesuaian** — tanggal penghapusan.
   - **Jumlah Penghapusan** — jumlah barang yang dihapus.
   - **Keterangan** — alasan penghapusan (misal "barang rusak", "kedaluwarsa").
3. Klik **Simpan**.

![05 - Penghapusan Persediaans.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F29%2F4ebd11d3-edbb-4162-b162-00c06872259b-05_-_Penghapusan_Persediaans.png)
*Tampilan: Form Tambah Penghapusan Persediaan*

> **Catatan:** Form menampilkan **Stok Saat Ini** dan **Stok Setelah Penyesuaian** sebagai acuan. Pastikan jumlah penghapusan tidak melebihi stok yang tersedia. Setelah disimpan, total stok di cabang terkait langsung diperbarui.

#### Catatan & Tips

- Gunakan fitur ini hanya untuk barang yang benar-benar tidak bisa dijual atau dipakai kembali.
- Semua penghapusan otomatis tersimpan di riwayat stok dan laporan inventori, sehingga menjaga integritas data stok dan akuntansi.

#### Lampiran

- [04 - Penghapusan Persediaan-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F29%2F48f0b155-b0bb-4a74-8b00-7399746c93db-04_-_Penghapusan_Persediaan-1.png) — image/png, 199 KB
- [05 - Penghapusan Persediaans.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F29%2F4ebd11d3-edbb-4162-b162-00c06872259b-05_-_Penghapusan_Persediaans.png) — image/png, 50 KB
- [Tangkapan Layar 2026-07-03 pukul 08.47.31.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F29%2Ffc0a588e-d74a-42be-b830-341d51fe0fd3-Tangkapan_Layar_2026-07-03_pukul_08.47.31.png) — image/png, 356 KB

### Opname Stok

> Mencocokkan stok fisik di gudang dengan catatan sistem lalu menyesuaikan selisihnya. Bisa per produk, secara massal per cabang, atau lewat file Excel/CSV. Dipakai untuk menjaga akurasi persediaan secara berkala.

#### Pengertian

Menu **Gudang → Opname Stok** dipakai untuk mencocokkan jumlah barang fisik di gudang dengan catatan stok di sistem, lalu menyesuaikan selisih yang ditemukan. Proses ini menjaga akurasi persediaan, mencegah kerugian akibat kehilangan atau kerusakan, dan menjadi dasar laporan keuangan yang akurat.

Halaman ini punya dua tab: **Opname Stok** (penyesuaian per produk) dan **Tugas Opname Stok** (pengecekan massal per cabang).

#### Fitur Utama

- Penyesuaian stok **per produk** untuk barang tertentu.
- Pengecekan **massal** seluruh barang di satu cabang lewat menu **Tugas Opname Stok**.
- Ekspor–impor data lewat file Excel/CSV untuk pengecekan jumlah besar.
- Menyimpan riwayat pemeriksaan beserta pelaku yang bertanggung jawab.

#### Langkah Penggunaan

##### Opname per produk

1. Buka menu **Gudang → Opname Stok**.
2. Gunakan filter (cabang, nama barang, pelaku, rentang tanggal, keterangan/ID) untuk melihat hasil opname yang sudah tercatat. Daftar tampil dengan kolom ID, nama barang, cabang, jumlah, pelaku, keterangan, dan aksi.

![Tangkapan Layar 2026-07-03 pukul 08.52.47.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F09b51fd7-925c-40ed-a850-c07778c493b5-Tangkapan_Layar_2026-07-03_pukul_08.52.47.png)
*Tampilan: Opname Stok Per Produk*

3. Untuk menambah, klik **Tambah Stock Opname** di kanan atas, lalu isi:
   - **Barang** dan **Cabang**.
   - **Karyawan** (pelaku pemeriksa).
   - **Jumlah** — diisi dengan **selisih** stok fisik dan stok sistem (contoh: `-1` bila stok fisik kurang satu, atau angka positif bila lebih). Untuk selisih penambahan, sistem juga meminta **Harga Pokok**.
   - **Keterangan** (misal: stok awal, hasil audit, koreksi manual).
4. Klik **Simpan**. Sistem langsung menyesuaikan stok.


![Tangkapan Layar 2026-07-06 pukul 18.04.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F104c3403-f7b2-40ca-8e98-0ccd6e2b819f-Tangkapan_Layar_2026-07-06_pukul_18.04.22.png)

*Tampilan: Form Tambah Stock Opname*

##### Opname massal (Tugas Opname Stok)

Untuk memeriksa seluruh stok di suatu cabang sekaligus:

1. Buka tab **Tugas Opname Stok**, lalu pilih **Cabang** dan filter kategori/brand/warna bila perlu. Centang **Tampilkan barang tanpa stok** bila ingin memasukkan barang yang stoknya nol.
2. Klik **Mulai Tugas Opname Stok**. Sistem menampilkan daftar seluruh barang di cabang tersebut untuk diperiksa. Isi **Jumlah Aktual** hasil hitung fisik.
3. Setelah selesai, klik **Lakukan Opname** untuk mengunci hasil dan menyesuaikan stok.


![Tangkapan Layar 2026-07-03 pukul 08.58.06.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2Fd247c88e-daba-45e9-a79d-3af41f97e69c-Tangkapan_Layar_2026-07-03_pukul_08.58.06.png)

*Tampilan: Tugas Opname Stok*

##### Opname lewat file Excel/CSV

Untuk jumlah barang yang banyak, opname bisa dilakukan lewat file:

1. Pada **Tugas Opname Stok**, pilih cabang dan atur filter kategori/brand/warna atau tampilkan semua barang.

![Tangkapan Layar 2026-07-06 pukul 18.12.27.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2Fd693dadf-fb80-44db-874f-94f76b789f4d-Tangkapan_Layar_2026-07-06_pukul_18.12.27.png)
*Tampilan: Filter Tugas Opname Stok*

2. Klik **Export untuk Edit**. Centang **Tampilkan barang tanpa stok** bila ingin menyertakan barang berstok nol. Sistem mengunduh file (Excel/CSV) berisi daftar barang beserta stok sistem saat ini.

![Tangkapan Layar 2026-07-06 pukul 18.14.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F3dd88ae6-1a04-4933-b16e-9d2950fee26d-Tangkapan_Layar_2026-07-06_pukul_18.14.20.png)
*Tampilan: Ekspor data untuk diedit*

3. Buka file dengan Excel atau Google Sheets. Hanya ubah kolom **jumlahaktual** sesuai hitung fisik di toko. Kolom **jumlahsistem** hanya referensi. Jangan ubah kolom kode/nama/kategori/brand agar tidak error saat impor. Simpan kembali.

4. Kembali ke halaman, klik **Import File**, pilih file yang sudah disiapkan, lalu klik **Proses File**.

![05 - Stock Opname-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F7ece583e-e00d-4b6c-bc02-4127c936922b-05_-_Stock_Opname-3.png)
*Tampilan: Impor file opname*

5. Sistem mencocokkan setiap baris berdasarkan ID atau kode; bila tidak ketemu, dicocokkan lewat kombinasi data (nama, brand, warna). Baris bermasalah ditandai untuk diperiksa. Bila sudah sesuai, klik **Import** untuk memasukkan data.

6. Terakhir, klik **Lakukan Opname** untuk mengunci hasil. Sistem menghitung selisih **stok sistem vs stok fisik**, menyesuaikan stok, dan mencatat transaksi penyesuaian otomatis.

![05 - Stock Opname-5.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F4263023e-2de1-404f-8d0f-23e958c0a096-05_-_Stock_Opname-5.png)
*Tampilan: Menyelesaikan opname*

#### Catatan & Tips

- Hasil opname baru diterapkan ke sistem setelah **Lakukan Opname** atau **Simpan**.
- Lakukan opname secara rutin (misal bulanan atau kuartalan) untuk menekan selisih stok.
- Simpan salinan file ekspor sebagai arsip, dan gunakan filter kategori (Frame, Lens, Contact Lens) untuk mempercepat pengecekan.
- Setiap penyesuaian tercatat di riwayat stok sehingga bisa ditelusuri kapan pun.

#### Lampiran

- [05 - Stock Opname prdo.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F019d62c0-adbc-437a-afda-b0878672aa96-05_-_Stock_Opname_prdo.png) — image/png, 228 KB
- [04 - Stock Opname2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2Fe1655943-ce52-426b-b7b3-b8ddd479266d-04_-_Stock_Opname2.png) — image/png, 49 KB
- [05 - Stock Opname.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F04acf1f3-ac1f-4d1e-9333-169b8a67813b-05_-_Stock_Opname.png) — image/png, 246 KB
- [05 - Stock Opname-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F89a810c1-0aeb-4b70-8209-3eea12dafd49-05_-_Stock_Opname-1.png) — image/png, 176 KB
- [05 - Stock Opname-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2Fe51de93c-073d-4764-96e3-bb1131c0cbb0-05_-_Stock_Opname-2.png) — image/png, 24 KB
- [05 - Stock Opname-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F7ece583e-e00d-4b6c-bc02-4127c936922b-05_-_Stock_Opname-3.png) — image/png, 137 KB
- [05 - Stock Opname-5.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F4263023e-2de1-404f-8d0f-23e958c0a096-05_-_Stock_Opname-5.png) — image/png, 7 KB
- [Tangkapan Layar 2026-07-03 pukul 08.52.47.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F09b51fd7-925c-40ed-a850-c07778c493b5-Tangkapan_Layar_2026-07-03_pukul_08.52.47.png) — image/png, 296 KB
- [Tangkapan Layar 2026-07-03 pukul 08.58.06.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2Fd247c88e-daba-45e9-a79d-3af41f97e69c-Tangkapan_Layar_2026-07-03_pukul_08.58.06.png) — image/png, 135 KB
- [Tangkapan Layar 2026-07-06 pukul 18.04.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F104c3403-f7b2-40ca-8e98-0ccd6e2b819f-Tangkapan_Layar_2026-07-06_pukul_18.04.22.png) — image/png, 80 KB
- [Tangkapan Layar 2026-07-06 pukul 18.12.27.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2Fd693dadf-fb80-44db-874f-94f76b789f4d-Tangkapan_Layar_2026-07-06_pukul_18.12.27.png) — image/png, 158 KB
- [Tangkapan Layar 2026-07-06 pukul 18.14.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F30%2F3dd88ae6-1a04-4933-b16e-9d2950fee26d-Tangkapan_Layar_2026-07-06_pukul_18.14.20.png) — image/png, 25 KB

### Harga Pokok (HPP Editor)

> Menyesuaikan dan menghitung ulang Harga Pokok Penjualan (HPP) barang. Dipakai untuk memperbaiki harga pokok yang nol/kosong/tidak wajar — satu per satu atau massal — dan menghitung ulang seluruh HPP dengan metode FIFO.

#### Pengertian

Menu **Gudang → Harga Pokok** (HPP Editor) dipakai untuk menyesuaikan dan menghitung ulang **Harga Pokok Penjualan (HPP)**. HPP menentukan margin laba, laba rugi, dan nilai stok akhir di laporan keuangan, sehingga perlu dijaga agar akurat.

Ada dua tab:

- **Penyesuaian Stok** — koreksi harga pokok pada transaksi tertentu, manual atau massal.
- **Hitung Ulang Semua** — menghitung ulang seluruh harga pokok berdasarkan urutan stok masuk (metode FIFO).

#### Fitur Utama

- Menyaring transaksi dengan harga pokok bermasalah (nol, kosong, atau rendah).
- Mengoreksi harga pokok satu per satu atau untuk banyak item sekaligus.
- Tujuh metode update harga massal.
- Menghitung ulang seluruh HPP otomatis dengan metode FIFO.

#### Langkah Penggunaan

##### Penyesuaian stok

1. Buka menu **Gudang → Harga Pokok → Penyesuaian Stok**.
2. Gunakan filter: cabang/gudang, **Kondisi Harga Pokok** (Harga Nol, Harga Kosong, Harga Rendah), periode tanggal, dan ID job/opname bila perlu.
3. Klik **Ambil Data** untuk menampilkan transaksi yang harga pokoknya bermasalah. Tabel berisi kolom ID, tanggal, cabang, barang, qty penyesuaian, memo, pelaku opname, dan harga pokok.

![Tangkapan Layar 2026-07-06 pukul 18.22.16.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F4bca5cc5-db96-45ab-ac63-adf3e0071e4c-Tangkapan_Layar_2026-07-06_pukul_18.22.16.png)
*Tampilan: Panel Penyesuaian Stok*

##### Koreksi manual

1. Klik nilai **Harga Pokok** yang ingin diperbaiki.
2. Masukkan nilai baru sesuai harga pembelian yang benar, lalu simpan.
3. Sistem langsung memperbarui HPP untuk item tersebut.

> **Catatan:** Baris yang ditandai merah berarti harga pokoknya bermasalah. Perubahan hanya bisa dilakukan pengguna yang berhak.

##### Update massal

1. Centang beberapa baris yang ingin diubah. Panel tindakan muncul di bagian bawah tabel dengan pilihan **Batal Pilih** dan **Update Massal**.
2. Klik **Update Massal** untuk membuka jendela pengaturan harga.

![06 - HPP Editors.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F1a8bb723-3237-4b54-b8c5-bdaee82923f6-06_-_HPP_Editors.png)
*Tampilan: Panel Update Massal*

3. Pilih metode update harga:

| Metode | Keterangan |
|---|---|
| **Harga Beli** | Menetapkan harga pokok berdasarkan harga beli supplier. |
| **Harga Jual** | Memakai harga jual item sebagai acuan. |
| **Harga Custom** | Memasukkan harga khusus di luar harga standar. |
| **Persentase** | Menaikkan/menurunkan harga dalam persen (pakai minus untuk mengurangi). |
| **Tambah Nilai** | Menambahkan nominal tertentu ke harga lama. |
| **Kurangi Nilai** | Mengurangi nominal tertentu dari harga lama. |
| **Nilai Tetap** | Mengatur semua harga pokok ke satu angka spesifik. |

![06 - HPP Editor-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F7f835b4a-e727-4cc7-85bb-17878039dd61-06_-_HPP_Editor-2.png)
*Tampilan: Jendela Update Harga*

4. Masukkan nilai di kolom **Nilai Baru (Rp)**. Periksa kolom **Preview Perubahan** (Harga Lama, Harga Baru, Selisih, Perubahan %).
5. Klik **Update … Item** untuk menyimpan semua perubahan sekaligus.

> **Catatan:** Semua item terpilih diperbarui dengan metode yang sama. Periksa preview sebelum konfirmasi.

##### Hitung ulang semua (FIFO)

1. Pindah ke tab **Hitung Ulang Semua**.
2. Klik **Mulai Perhitungan FIFO**.
3. Sistem menghitung ulang seluruh HPP berdasarkan urutan stok masuk — barang yang pertama masuk dianggap terjual lebih dulu.


![Tangkapan Layar 2026-07-06 pukul 14.05.05.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F9983366f-2669-4e11-a0e3-272b43cfabcf-Tangkapan_Layar_2026-07-06_pukul_14.05.05.png)

*Tampilan: Perhitungan Ulang FIFO*

> **Penting:** Jangan tutup halaman selama proses berjalan. Pastikan harga bermasalah sudah dikoreksi lebih dulu, karena nilai lama akan ditimpa. Gunakan hanya oleh pengguna berhak.

#### Catatan & Tips

- Gunakan **Penyesuaian Stok** untuk koreksi sebagian, **Update Massal** untuk banyak item, dan **Hitung Ulang FIFO** untuk pembaruan menyeluruh.
- Disarankan menjalankan hitung ulang di akhir periode akuntansi.

#### Lampiran

- [06 - HPP Editor.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F05e2d273-6beb-4d32-bf08-5d8a00378332-06_-_HPP_Editor.png) — image/png, 185 KB
- [06 - HPP Editors.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F1a8bb723-3237-4b54-b8c5-bdaee82923f6-06_-_HPP_Editors.png) — image/png, 99 KB
- [06 - HPP Editor-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F7f835b4a-e727-4cc7-85bb-17878039dd61-06_-_HPP_Editor-2.png) — image/png, 482 KB
- [06 - HPP Editor-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F797fef9c-a478-4dba-9b4a-deacf091e66a-06_-_HPP_Editor-3.png) — image/png, 383 KB
- [Tangkapan Layar 2026-07-06 pukul 14.05.05.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F9983366f-2669-4e11-a0e3-272b43cfabcf-Tangkapan_Layar_2026-07-06_pukul_14.05.05.png) — image/png, 210 KB
- [Tangkapan Layar 2026-07-06 pukul 18.22.16.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F31%2F4bca5cc5-db96-45ab-ac63-adf3e0071e4c-Tangkapan_Layar_2026-07-06_pukul_18.22.16.png) — image/png, 195 KB

### Permintaan Stok

> Mengajukan kebutuhan barang dari satu cabang ke cabang/gudang lain, lalu memenuhinya lewat pembelian atau mutasi stok. Bisa satu barang, banyak barang sekaligus (grup), atau otomatis dari halaman Penjualan saat stok kosong.

#### Pengertian

Menu **Gudang → Permintaan Stok** dipakai untuk mengajukan kebutuhan barang dari satu cabang ke cabang atau gudang lain. Permintaan yang sudah disetujui bisa dipenuhi lewat **pembelian** dari supplier atau **mutasi** dari cabang lain, dengan seluruh prosesnya terdokumentasi.

Halaman ini punya dua bentuk: **Permintaan Stok** (umumnya satu barang per permintaan) dan **Permintaan Stok Grup** (banyak barang dalam satu permintaan dengan satu approval).

#### Fitur Utama

- Mengajukan permintaan barang antar cabang.
- Status approval: **Menunggu Approve** dan **Approved**.
- Status pemenuhan (operasi): **Belum Dioperasikan**, **Pending**, **Selesai**, dan **Tidak Dilakukan**.
- Filter berdasarkan pengaju, **Diminta dari** (cabang sumber), **Diminta oleh** (cabang tujuan), dan status approval.
- Pemenuhan lewat **Pembelian** atau **Stok Mutasi**.
- Bisa dibuat otomatis dari halaman **Penjualan** saat stok barang kosong.

#### Langkah Penggunaan

##### Melihat daftar permintaan

1. Buka menu **Gudang → Permintaan Stok**.
2. Gunakan filter (pengaju, cabang sumber & tujuan, status approval), lalu tampilkan datanya. Daftar tampil dengan kolom ID, tanggal, pengaju, barang, jumlah, dan status.




![Tangkapan Layar 2026-07-06 pukul 15.00.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F115a0b0d-5528-42a8-8ba3-2ac9238ee050-Tangkapan_Layar_2026-07-06_pukul_15.00.56.png)

*Tampilan: Daftar Permintaan Stok*

##### Menambah permintaan

1. Klik **Buat Permintaan Stok** di kanan atas.
2. Isi form:
   - **Diminta dari** — cabang sumber stok.
   - **Diminta oleh** — cabang yang meminta.
   - **Barang** dan **Jumlah Diminta**.
   - Catatan bila perlu.
3. Klik **Tambah Permintaan** untuk menyimpan. Status awalnya **Menunggu Approve**.


![Tangkapan Layar 2026-07-06 pukul 14.11.04.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fdbd1c6c5-3aba-4899-aa7d-7292df537cfe-Tangkapan_Layar_2026-07-06_pukul_14.11.04.png)

*Tampilan: Form Tambah Permintaan Stok*

##### Membuat permintaan dari halaman Penjualan

Selain dari menu ini, permintaan stok bisa dibuat langsung dari halaman **Penjualan** saat ada barang yang stoknya kosong.

1. Saat membuat penjualan, bila sistem mendeteksi item yang stoknya habis, muncul opsi **Buat Permintaan Stok untuk stok yang kosong**.
2. Centang opsi tersebut sebelum menekan **Buat Penjualan**.
3. Setelah transaksi disimpan, entri baru otomatis muncul di menu **Permintaan Stok** (nama barang kosong, cabang asal & tujuan, jumlah, status awal).


![Tangkapan Layar 2026-07-06 pukul 14.24.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F1a8ebcaf-583c-4cc0-a3e1-5426254a6da1-Tangkapan_Layar_2026-07-06_pukul_14.24.57.png)

*Tampilan: Opsi buat permintaan stok pada halaman Penjualan*

##### Memenuhi permintaan (Lakukan Operasi)

1. Centang satu atau beberapa permintaan yang sudah disetujui.
2. Klik **Lakukan Operasi**, lalu pilih:
   - **Pembelian** — bila stok dipenuhi dengan membeli dari supplier. Alurnya mengikuti modul **Pembelian**.
   - **Stok Mutasi** — bila stok dipenuhi dengan mengirim dari cabang/gudang lain. Alurnya mengikuti modul **Mutasi Stok**.


![Tangkapan Layar 2026-07-06 pukul 14.27.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F33668739-9a52-4d7b-b6f5-18cb86ffb2ac-Tangkapan_Layar_2026-07-06_pukul_14.27.26.png)

*Tampilan: Menu Lakukan Operasi*

##### Melihat detail dan status permintaan

Pada kolom **Aksi**, klik tombol **⋮**, lalu pilih **Lihat Detail** untuk membuka informasi lengkap: ID dan tanggal, pengaju (dan pelanggan bila terkait penjualan), cabang asal & tujuan, daftar barang dan jumlah, status approval, status pemenuhan, serta catatan.


![Tangkapan Layar 2026-07-06 pukul 14.31.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F46520d15-9331-4fa1-a536-524d86c864cf-Tangkapan_Layar_2026-07-06_pukul_14.31.00.png)

*Tampilan: Menu Aksi Lihat Detail*

Detail juga menampilkan diagram alur permintaan secara visual.


![Tangkapan Layar 2026-07-06 pukul 14.35.06.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F78b10101-d284-4f64-9ccf-028e74cb5af5-Tangkapan_Layar_2026-07-06_pukul_14.35.06.png)

*Tampilan: Status Permintaan Stok dan Memo Approval*

Keterangan warna pada diagram:

- **Ungu (Cabang Asal & Tujuan)** — cabang pengirim dan penerima stok.
- **Kuning (Stok Mutasi)** — pengiriman antar cabang sedang berlangsung.
- **Hijau (Permintaan Selesai)** — permintaan sudah dipenuhi.
- **Abu-abu (Tidak Dilakukan)** — opsi proses itu tidak digunakan.

Di sisi kanan tersedia **Memo Approval** dan **Memo Pelaku**, serta tombol **Approve** untuk menyetujui sekaligus menyimpan catatan.

#### Permintaan Stok Grup

**Permintaan Stok Grup** mengajukan beberapa barang sekaligus dalam satu permintaan dengan satu alur approval dan operasi. Cocok untuk restock rutin, pengadaan musiman, atau distribusi awal cabang baru.

| Permintaan Stok | Permintaan Stok Grup |
|---|---|
| Umumnya 1 barang per permintaan | Banyak barang dalam 1 permintaan |
| Cocok untuk kebutuhan mendesak | Cocok untuk restock rutin |
| Bisa dibuat otomatis dari penjualan | Dibuat manual oleh admin/supervisor |
| Approval per item | Approval satu kali untuk seluruh item |

##### Melihat & menambah permintaan grup

1. Buka **Permintaan Stok**, lalu pindah ke tampilan **Permintaan Stok Grup**. Daftar tampil dengan kolom ID, tanggal, pengaju, diminta oleh, diminta dari, jumlah item, status approval, dan status operasi.


![Tangkapan Layar 2026-07-06 pukul 14.55.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fa7f74b98-a165-4f5d-836c-cd62074eb8dd-Tangkapan_Layar_2026-07-06_pukul_14.55.09.png)

*Tampilan: Daftar Permintaan Stok Grup*

2. Klik **Tambah Permintaan Grup**, lalu isi:

| Kolom | Keterangan |
|---|---|
| **Diminta dari** | Cabang sumber stok |
| **Diminta oleh** | Cabang peminta stok |
| **Pengaju** | Otomatis terisi sesuai user login |
| **Catatan** | Opsional |


![Tangkapan Layar 2026-07-06 pukul 15.03.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F15387ee1-b465-412e-b4a0-c8ade2449a16-Tangkapan_Layar_2026-07-06_pukul_15.03.00.png)

*Tampilan: Form Tambah Permintaan Stok Grup*

3. Pada bagian **Barang**, pilih item dan tentukan **jumlah** masing-masing; barang masuk ke tabel daftar. Ulangi untuk barang lain. Sistem menghitung **Total Jenis Barang** dan **Total Barang** otomatis.


![Tangkapan Layar 2026-07-06 pukul 15.06.25.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fa7cec388-d62b-44b3-87ec-d3be5d279d2f-Tangkapan_Layar_2026-07-06_pukul_15.06.25.png)

*Tampilan: Daftar Barang dalam Permintaan Grup*

4. Klik **Tambah Permintaan Grup** untuk menyimpan. Status awalnya **Menunggu Approve**, dan seluruh barang diproses bersamaan.

##### Memenuhi permintaan grup

Centang satu atau beberapa permintaan grup yang **Belum Dioperasikan**, lalu klik **Lakukan Operasi** dan pilih **Pembelian** atau **Stok Mutasi**.


![Tangkapan Layar 2026-07-06 pukul 15.10.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fb1769c2e-a7d5-46ef-a726-6108458f1e46-Tangkapan_Layar_2026-07-06_pukul_15.10.33.png)

*Tampilan: Lakukan Operasi pada Permintaan Stok Grup*

**Opsi Pembelian** — dipakai bila stok dibeli dari supplier. Sistem menampilkan form **Lakukan Order Pembelian** dengan data barang terisi otomatis dari permintaan (cabang, supplier, diskon, keterangan, daftar barang, jumlah diminta, harga beli). Klik **Buat Pembelian Order** untuk menyimpannya; pembelian terkait dengan permintaan grup, dan permintaan dianggap terpenuhi setelah stok masuk.


![Tangkapan Layar 2026-07-06 pukul 15.12.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F05ee394d-0dbc-4b40-8159-0d32615daac4-Tangkapan_Layar_2026-07-06_pukul_15.12.15.png)

*Tampilan: Form Order Pembelian dari Permintaan Grup*

**Opsi Stok Mutasi** — dipakai bila stok dipindahkan dari cabang/gudang lain. Sistem menampilkan form **Lakukan Stok Mutasi** dengan data terisi otomatis (pengirim, tanggal kirim, keterangan, cabang sumber & tujuan, daftar barang, jumlah). Klik **Lakukan Mutasi Barang**; stok berkurang di cabang asal, bertambah di cabang tujuan, dan status permintaan menjadi **Selesai**.


![Tangkapan Layar 2026-07-06 pukul 15.15.16.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F5eb84493-a3e5-4150-ba55-f4d68c53adff-Tangkapan_Layar_2026-07-06_pukul_15.15.16.png)

*Tampilan: Form Stok Mutasi dari Permintaan Grup*

> **Catatan:** Saat memenuhi lewat mutasi, jumlah yang dikirim bisa dipecah lewat **Pecah Permintaan Stok** — sebagian dikirim sekarang, sisanya dikirim kemudian.

#### Hasil di menu Mutasi Stok

Permintaan yang dipenuhi lewat **Stok Mutasi** otomatis tercatat di menu **Gudang → Mutasi Stok** — tidak perlu input ulang. Kolom **Keterangan** menampilkan asal proses, misalnya *"Permintaan Stok dari Cabang Lensiro Optical – Yogyakarta"*, sehingga mudah ditelusuri. Setelah mutasi diterima, stok berkurang di cabang asal dan bertambah di cabang tujuan, dan permintaan menjadi **Selesai**.

![07 - Permintaan Stock-7.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F6e0f33fa-acd2-4b2a-8aa6-23b754835c45-07_-_Permintaan_Stock-7.png)
*Tampilan: Daftar Mutasi Stok hasil pemenuhan Permintaan Stok*

> Permintaan yang dipenuhi lewat **Pembelian** tidak muncul di Mutasi Stok, melainkan tercatat di modul **Pembelian**.

#### Catatan & Tips

- **Status Approval** menunjukkan persetujuan permintaan; **Status Operasi/Pemenuhan** menunjukkan proses pemenuhan stok. Keduanya berdiri sendiri tetapi saling berkaitan.
- Satu permintaan grup hanya bisa diproses satu jenis operasi — tidak bisa menggabung pembelian dan mutasi. Seluruh item dalam grup diproses bersamaan.
- Gunakan **Stok Mutasi** untuk distribusi internal, dan **Pembelian** bila stok tidak tersedia di cabang lain.
- Tambahkan keterangan pada setiap permintaan agar mudah diaudit, dan hindari memproses permintaan yang belum disetujui.

#### Lampiran

- [07 - Permintaan Stock.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F7d6fb38c-8e2b-4dda-a97c-2ce53682f41d-07_-_Permintaan_Stock.png) — image/png, 273 KB
- [07 - Permintaan Stock-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fcd79560d-7be0-44c2-bf55-f5618ebe6b46-07_-_Permintaan_Stock-1.png) — image/png, 126 KB
- [07 - Permintaan Stock penjualan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F2cfa455f-fb86-4d0c-9c6e-0ae66cc30b26-07_-_Permintaan_Stock_penjualan.png) — image/png, 85 KB
- [07 - Permintaan Stock aksi.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F81395104-8cad-42d4-903c-3c5dc6379a1d-07_-_Permintaan_Stock_aksi.png) — image/png, 71 KB
- [07 - Permintaan Stock detail.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F403536dd-0692-4ebf-bc8e-7239aba7e502-07_-_Permintaan_Stock_detail.png) — image/png, 637 KB
- [07 - Permintaan Stock s.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F1e3edc4b-3ff4-435c-8731-6c9b37e06ebb-07_-_Permintaan_Stock_s.png) — image/png, 630 KB
- [07 - Permintaan Stock-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F94cd578c-ce9f-4fb6-8790-077f21974c1f-07_-_Permintaan_Stock-2.png) — image/png, 188 KB
- [07 - Permintaan Stock-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F5119eaf4-6e10-4eac-8103-f3179eee65bf-07_-_Permintaan_Stock-3.png) — image/png, 91 KB
- [07 - Permintaan Stock-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F44c8800c-0d63-4863-a98d-7cf4fe00bc1a-07_-_Permintaan_Stock-4.png) — image/png, 58 KB
- [07 - Permintaan Stock-5.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fad418f13-f83e-4f73-8bd8-d459e3fa60be-07_-_Permintaan_Stock-5.png) — image/png, 91 KB
- [07 - Permintaan Stock-6.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F7cf2ff79-8495-4fd9-b6b8-da21b2b75254-07_-_Permintaan_Stock-6.png) — image/png, 12 KB
- [07 - Permintaan Stock-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fc6e72c8b-e84b-4dc4-910f-8e48917ab548-07_-_Permintaan_Stock-8.png) — image/png, 140 KB
- [07 - Permintaan Stock-7.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F6e0f33fa-acd2-4b2a-8aa6-23b754835c45-07_-_Permintaan_Stock-7.png) — image/png, 168 KB
- [Tangkapan Layar 2026-07-06 pukul 14.08.41.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fa68dd052-a129-4c75-8bc8-536412e340b1-Tangkapan_Layar_2026-07-06_pukul_14.08.41.png) — image/png, 299 KB
- [Tangkapan Layar 2026-07-06 pukul 14.11.04.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fdbd1c6c5-3aba-4899-aa7d-7292df537cfe-Tangkapan_Layar_2026-07-06_pukul_14.11.04.png) — image/png, 74 KB
- [Tangkapan Layar 2026-07-06 pukul 14.24.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F1a8ebcaf-583c-4cc0-a3e1-5426254a6da1-Tangkapan_Layar_2026-07-06_pukul_14.24.57.png) — image/png, 92 KB
- [Tangkapan Layar 2026-07-06 pukul 14.27.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F33668739-9a52-4d7b-b6f5-18cb86ffb2ac-Tangkapan_Layar_2026-07-06_pukul_14.27.26.png) — image/png, 156 KB
- [Tangkapan Layar 2026-07-06 pukul 14.31.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F46520d15-9331-4fa1-a536-524d86c864cf-Tangkapan_Layar_2026-07-06_pukul_14.31.00.png) — image/png, 139 KB
- [Tangkapan Layar 2026-07-06 pukul 14.35.06.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F78b10101-d284-4f64-9ccf-028e74cb5af5-Tangkapan_Layar_2026-07-06_pukul_14.35.06.png) — image/png, 177 KB
- [Tangkapan Layar 2026-07-06 pukul 14.55.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F2c304ab7-fcf5-4a91-8202-c0806770e376-Tangkapan_Layar_2026-07-06_pukul_14.55.09.png) — image/png, 204 KB
- [Tangkapan Layar 2026-07-06 pukul 14.55.09.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fa7f74b98-a165-4f5d-836c-cd62074eb8dd-Tangkapan_Layar_2026-07-06_pukul_14.55.09.png) — image/png, 204 KB
- [Tangkapan Layar 2026-07-06 pukul 15.00.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F115a0b0d-5528-42a8-8ba3-2ac9238ee050-Tangkapan_Layar_2026-07-06_pukul_15.00.56.png) — image/png, 376 KB
- [Tangkapan Layar 2026-07-06 pukul 15.03.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F15387ee1-b465-412e-b4a0-c8ade2449a16-Tangkapan_Layar_2026-07-06_pukul_15.03.00.png) — image/png, 111 KB
- [Tangkapan Layar 2026-07-06 pukul 15.06.25.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fa7cec388-d62b-44b3-87ec-d3be5d279d2f-Tangkapan_Layar_2026-07-06_pukul_15.06.25.png) — image/png, 87 KB
- [Tangkapan Layar 2026-07-06 pukul 15.10.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2Fb1769c2e-a7d5-46ef-a726-6108458f1e46-Tangkapan_Layar_2026-07-06_pukul_15.10.33.png) — image/png, 170 KB
- [Tangkapan Layar 2026-07-06 pukul 15.12.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F05ee394d-0dbc-4b40-8159-0d32615daac4-Tangkapan_Layar_2026-07-06_pukul_15.12.15.png) — image/png, 14 KB
- [Tangkapan Layar 2026-07-06 pukul 15.15.16.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F32%2F5eb84493-a3e5-4150-ba55-f4d68c53adff-Tangkapan_Layar_2026-07-06_pukul_15.15.16.png) — image/png, 170 KB

### Alert Stok

> Aturan stok minimum/maksimum per barang, brand, kategori, atau cabang — dengan status Habis/Menipis/Berlebih, daftar restock di tab Reminder, dan tombol satu klik untuk memesan atau transfer.

### Alert Stok

#### Pengertian

**Alert Stok** memberi tahu Anda barang mana yang perlu ditindaklanjuti — yang habis, menipis, atau justru menumpuk berlebihan — berdasarkan batas minimum/maksimum yang Anda tentukan sendiri.

Prinsipnya: **yang aman tidak diberi tanda**. Warna dan lencana hanya muncul ketika ada sesuatu yang butuh keputusan manusia, sehingga daftar stok tidak penuh peringatan yang tidak penting.

Alert Stok terdiri dari tiga bagian:

1. **Aturan** (Gudang → Stok → **Alert Stok**) — di sinilah batas min/max ditentukan.
2. **Status di daftar stok** (Gudang → Stok) — lencana status dan filter di halaman stok.
3. **Daftar restock** (Dashboard → tab **Reminder**) — daftar kerja barang yang perlu dipesan atau ditransfer.

#### Status Alert

| Status | Arti |
| --- | --- |
| **Habis** | Stok di rak 0 atau minus (untuk barang yang memang bergerak atau punya aturan sendiri). |
| **Menipis** | Stok + barang yang sedang dipesan + barang dalam perjalanan masih **di bawah minimum**. |
| **Berlebih** | Stok di rak **di atas maksimum**. |
| **Aman** | Ada aturan yang berlaku dan jumlahnya sehat. |
| *(tanpa lencana)* | Tidak ada aturan yang mengenai barang ini. |

Dua hal yang membuat status ini pintar:

- **Menipis memperhitungkan barang yang sedang datang.** Barang yang sudah dipesan ke supplier atau sedang mutasi antar cabang ikut dihitung, supaya Anda tidak memesan barang yang sebenarnya sudah dalam perjalanan.
- **Estimasi hari.** Barang yang menipis menampilkan perkiraan seperti "sisa 3 · cukup ±6 hari" — dihitung dari kecepatan penjualan 90 hari terakhir, sehingga Anda tahu mana yang benar-benar mendesak.

#### Membuat Aturan

Buka **Gudang → Stok**, lalu tekan tombol **Alert Stok** untuk masuk ke halaman aturan. Tekan **Tambah** dan ikuti empat langkah:

1. **Cakupan** — seberapa luas aturan berlaku: seluruh toko (Global), per Kategori, Sub Kategori, Brand, Sub Brand, atau satu Barang tertentu.
2. **Cabang** — berlaku di semua cabang, atau cabang tertentu saja (bisa memilih beberapa cabang sekaligus — sistem membuat satu aturan per cabang).
3. **Target & batas** — pilih targetnya, lalu isi **minimum** dan/atau **maksimum**. Boleh mengisi salah satu saja.
4. **Pratinjau** — sebelum disimpan, sistem menunjukkan berapa barang yang terpengaruh dan berapa yang langsung berstatus Menipis.

Cara aturan dipilih ketika ada beberapa yang mengenai barang yang sama:

- **Aturan yang lebih spesifik menang** — aturan per Barang mengalahkan aturan Brand, aturan Brand mengalahkan Kategori, dan seterusnya sampai Global.
- **Aturan per cabang mengalahkan aturan semua-cabang** pada tingkat yang sama.
- Minimum dan maksimum dicari **terpisah** — minimum bisa datang dari aturan barang, maksimumnya dari aturan kategori.
- Setiap angka Min/Max di daftar stok bisa diklik untuk melihat **aturan mana yang menjadi sumbernya**.

Gunakan **Cek Barang** (simulator) di halaman aturan untuk mengetik satu barang dan melihat aturan mana yang mengenainya beserta batas akhirnya — berguna untuk memastikan aturan bekerja sesuai niat.

> **Tips:** Mengisi minimum **0** pada aturan satu barang artinya "jangan pernah beri alert untuk barang ini" (Diabaikan). Frame yang dipajang di etalase ikut terhitung sebagai stok — bila ingin "1 display + 1 cadangan", jadikan minimumnya 2 dan tulis niatnya di memo aturan.

#### Status & Filter di Daftar Stok

Di **Gudang → Stok**, setiap baris menampilkan lencana **Status** dan kolom **Min/Max**. Di bagian atas tersedia:

- **Perlu Perhatian** — tombol berisi jumlah barang bermasalah; satu klik langsung menyaring daftar ke barang Habis + Menipis + Berlebih.
- Filter **Status Alert** — saring berdasarkan status tertentu (Habis, Menipis, Berlebih, Aman, atau Tanpa Alert).
- **Buat Alert Stok dari filter ini** — membuat aturan baru langsung dari kombinasi filter yang sedang aktif.

#### Daftar Restock di Reminder

Barang yang perlu ditindaklanjuti terkumpul di **Dashboard → tab Reminder** sebagai daftar kerja:

- Tab ringkasan **Habis + Menipis**, **Berlebih**, dan **Diabaikan**.
- Barang dikelompokkan **per supplier**, dengan usulan jumlah pesan yang bisa diubah sebelum dikirim.
- Satu tombol membuat **Permintaan Stok** untuk barang-barang yang dipilih.
- Barang **Berlebih** menampilkan saran **transfer antar cabang** — memindahkan stok ke cabang yang membutuhkan alih-alih membeli baru.
- Barang yang memang tidak ingin dipantau bisa **diabaikan** dari daftar.

Lencana pada tab Reminder menampilkan jumlah barang Habis + Menipis, jadi kebutuhan restock terlihat sejak membuka dashboard.

#### Hak Akses

Kemampuan melihat status alert, mengelola aturan, dan memakai daftar restock mengikuti izin role masing-masing pengguna (izin alert stok dan restock). Aturan untuk "semua cabang" membutuhkan izin tersendiri.


## Bab 06 — Penjualan


### Penjualan

> Mencatat transaksi penjualan optik dari awal sampai selesai — mulai dari Penjualan Langsung di kasir maupun Penjualan Order (frame + lensa), pembayaran, fasset, QC, sampai pengambilan dan cetak nota.

#### Pengertian

Menu **Penjualan** dipakai untuk mencatat semua transaksi jual barang ke pelanggan. Ada dua cara mencatat penjualan:

| Jenis | Keterangan |
| :-- | :-- |
| **Penjualan Langsung** | Barang jadi yang langsung dibayar dan dibawa pelanggan saat itu juga (mis. frame, softlens, aksesori). Cocok untuk transaksi cepat di kasir. |
| **Penjualan Order** | Transaksi yang butuh proses pengerjaan dulu — pemotongan lensa (fasset) dan pemasangan ke frame — sebelum barang bisa diserahkan. |

Setiap transaksi terhubung ke stok dan pembukuan, jadi progres tiap order bisa dipantau dari dibuat sampai diambil pelanggan.

#### Fitur Utama

- Dua entri transaksi: **Tambah Penjualan Langsung** dan **Tambah Penjualan Order**, keduanya ada di tab **Daftar**.
- Daftar penjualan bisa dilihat dalam tampilan **kanban** (per status) atau **tabel**, dengan filter cabang, sales, pelanggan, tanggal, status pembayaran, dan status ambil.
- Alur order lengkap: pembayaran (DP/lunas), fasset, quality control (QC), lalu pengambilan barang.
- Cetak/kirim nota transaksi ke pelanggan.

#### Langkah Penggunaan

##### Penjualan Langsung

Dipakai untuk barang jadi yang dibayar dan dibawa langsung.

1. Buka **Penjualan → Daftar**, klik tombol **Tambah Penjualan Langsung**.
2. Isi **Cabang**, **Sales** (atau **Sales & Kasir** bila diaktifkan), dan **Tanggal Transaksi**.
3. Tambahkan **Barang** dari daftar stok, isi **Diskon** dan **Keterangan** bila perlu.
4. Pilih atau buat **Pelanggan**.
5. Isi **Pembayaran** langsung di form yang sama (bisa lebih dari satu metode).
6. Simpan transaksi.


![Tangkapan Layar 2026-07-03 pukul 13.50.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fa3d3a33d-fc3e-42c1-b9ad-e3f8a38c0b49-Tangkapan_Layar_2026-07-03_pukul_13.50.22.png)
*Tampilan: Form Penjualan*

![pl1.svg](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F5569c307-0534-416c-bce8-6d033204e1a9-pl1.svg)
*Tampilan: Form Penjualan Langsung*

##### Penjualan Order

Dipakai untuk pesanan yang perlu pengerjaan lensa dulu.

1. Buka **Penjualan → Daftar**, klik tombol **Tambah Penjualan Order**.
2. Isi **Pelanggan**, **Cabang (Harus)**, **Sales (Harus)**, dan **Tanggal Transaksi**.
3. Tambahkan **Barang** (mis. frame dan lensa). Diskon bisa diisi dalam **Rp** atau **%**.
4. Isi **Nama Dokter** dan **Keterangan** bila ada.
5. Bila stok kosong, centang **Buat Permintaan Stok** untuk minta stok ke cabang lain.
6. Buka **Data Resep pada Nota** untuk mengisi resep optik (SPH, CYL, AXIS, ADD, dan PD untuk mata kanan/kiri). Resep bisa diisi otomatis dari data pemeriksaan pelanggan.
7. Klik **Buat Penjualan**.

![ss2.svg](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F885c5af7-5ff8-46a8-8f10-8bece4e334cd-ss2.svg)
*Tampilan: Form Penjualan Order*

> **Catatan:** Tombol **Komplimen** dipakai untuk memberi barang bonus ke pembeli (mis. case, lap lensa) tanpa menambah tagihan.

Setelah order dibuat, sistem membuka halaman edit dengan tahapan: **Info Dasar → Pembayaran → Fasset & QC → Ringkasan**.

##### Pembayaran (DP / Lunas)

1. Buka transaksi order yang sudah dibuat, masuk ke tahap **Pembayaran**.
2. Klik **Tambah Pembayaran**.
3. Pilih metode: **Cash**, **Debit**, **Credit**, **QRIS**, **Asuransi**, atau **Poin**.
4. Isi jumlah yang dibayar lalu simpan.

![Tangkapan Layar 2026-07-03 pukul 15.20.01.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F6d8e741d-e19a-4bc6-a99a-ea19b157f647-Tangkapan_Layar_2026-07-03_pukul_15.20.01.png)
*Tampilan: Form Pembayaran Penjualan Order*

> **Catatan:** Selama pembayaran belum penuh, status transaksi tetap **Belum Lunas**. Setelah total terbayar penuh, status berubah menjadi **Lunas**.

##### Fasset (Pemotongan Lensa)

1. Pada transaksi terkait, klik **Tambah Fasset**.
2. Pilih **Pelaku Fasset** (teknisi).
3. Tentukan **Status Pekerjaan**: **Dikerjakan**, **Berhasil**, atau **Gagal**.
4. Centang item yang dikerjakan (frame dan lensa), isi **Catatan** bila perlu.
5. Simpan.

![Tangkapan Layar 2026-07-03 pukul 15.41.48.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Ffbdd2f85-c1ce-4486-b679-fc8d172af216-Tangkapan_Layar_2026-07-03_pukul_15.41.48.png)
*Tampilan: Form Tambah Fasset*

Setelah disimpan, pekerjaan muncul di **Riwayat Fasset** berisi nama teknisi, tanggal, status, catatan, dan estimasi komisi.

![Tangkapan Layar 2026-07-03 pukul 15.42.39.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F6b892850-7c88-4d98-9d30-9ea5b3e8ae83-Tangkapan_Layar_2026-07-03_pukul_15.42.39.png)
*Tampilan: Riwayat Fasset setelah proses selesai*

> **Catatan:** Komisi fasset dihitung otomatis ketika status fasset diset **Berhasil**. Jika **Gagal**, komisi tidak diberikan.

##### Quality Control (QC)

Setelah fasset selesai, bagian QC memeriksa hasil kerja lewat checklist 14 poin — antara lain kebersihan dan keutuhan lensa, coating, keutuhan frame, hasil setelan, serta ketepatan resep kanan/kiri, MDPR, MDPL, PV SH, axis, dan ADD.

1. Pada baris fasset, klik **Tambah QA**.
2. Pilih **Pelaksana Quality Control**.
3. Centang tiap poin yang lolos. Poin yang tidak dicentang wajib diberi catatan alasannya.
4. Klik **Tambah QC**. Tombol simpan baru aktif setelah seluruh 14 poin diisi.

![Tangkapan Layar 2026-07-03 pukul 15.44.10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fd1cfe79f-51ce-4b94-ad7e-26a12a875605-Tangkapan_Layar_2026-07-03_pukul_15.44.10.png)
*Tampilan: Form Quality Control (QC) Fasset*

##### Pelunasan dan Pengambilan Barang

1. Bila masih ada sisa tagihan, lakukan **Tambah Pembayaran** sampai status **Lunas**.
2. Pada tahap pengambilan, pilih **Cara Pengambilan** (**Diambil** atau **Diantar**).
3. Nomor faktur terisi otomatis; atur **Tgl. Faktur** bila perlu.
4. Klik **Simpan Pengambilan**.

![Tangkapan Layar 2026-07-06 pukul 14.36.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fa1c5c0dc-5a75-4822-b6d9-eff2436550dd-Tangkapan_Layar_2026-07-06_pukul_14.36.00.png)
*Tampilan: Form Pengambilan Barang*

> **Catatan:** Pengambilan hanya bisa disimpan setelah transaksi **Lunas** dan stok mencukupi.

##### Cetak Nota Penjualan

1. Buka transaksi, klik **Tampilkan Order Penjualan** atau **Cetak Nota**.
2. Nota tampil sesuai format yang diatur akun toko (portrait, landscape, atau thermal) dan siap dicetak.

![Tangkapan Layar 2026-07-06 pukul 14.39.02.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fd2e4ef84-d976-4934-8f8d-e074ef4ed47d-Tangkapan_Layar_2026-07-06_pukul_14.39.02.png)
*Tampilan: Cetak Nota Penjualan*

#### Catatan & Tips

Daftar penjualan dalam tampilan kanban dikelompokkan per status:

| Kolom | Arti |
| :-- | :-- |
| **Diproses** | Order baru, belum lunas dan belum diambil. |
| **Lunas** | Pembayaran sudah penuh, tapi barang belum diambil. |
| **Diambil** | Barang sudah diserahkan ke pelanggan. |
| **Dibatalkan** | Transaksi yang dibatalkan. |

![Tangkapan Layar 2026-07-06 pukul 16.05.35.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fe8308731-cfe3-4b6f-aa4b-f2e9e18ac425-Tangkapan_Layar_2026-07-06_pukul_16.05.35.png)
*Tampilan: Kanban penjualan*

Ringkasan alur Penjualan Order dari awal sampai selesai:

| Tahap | Aktivitas |
| :-- | :-- |
| 1. Buat Order | Isi data pelanggan, cabang, sales, dan barang |
| 2. Pembayaran | DP atau pelunasan |
| 3. Fasset | Pemotongan dan pemasangan lensa |
| 4. QC | Pemeriksaan kualitas hasil kerja |
| 5. Pengambilan | Serah terima barang ke pelanggan |
| 6. Cetak Nota | Bukti transaksi untuk pelanggan |

#### Lampiran

- [01 - Penjualan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fa69f4ea9-d1f7-43c3-bd2e-740bb1fc98a1-01_-_Penjualan.png) — image/png, 270 KB
- [01 - Penjualan-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F87f4d5e1-07bb-4c16-b48a-7c837b0b8130-01_-_Penjualan-4.png) — image/png, 425 KB
- [01 - Penjualan-5.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fb9fe57ae-57be-4e9b-a284-515337216b41-01_-_Penjualan-5.png) — image/png, 501 KB
- [00 - Penjualanfsf.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fd1bda57e-eafc-4ec8-b9ac-594a7d44a3ad-00_-_Penjualanfsf.png) — image/png, 22 KB
- [01 - Penjualan-6.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F59a2161b-c32c-4a42-a0f8-0d49bfc17a33-01_-_Penjualan-6.png) — image/png, 134 KB
- [01 - Penjualan-7.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F23f3147f-6948-45e1-a2f0-c024c1353cad-01_-_Penjualan-7.png) — image/png, 62 KB
- [01 - Penjualan-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fcf4bc7d0-c7b0-461b-a8dd-0ec5934b14cd-01_-_Penjualan-8.png) — image/png, 307 KB
- [00 - Penjualan luans.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F9b146d92-fddb-41fe-9380-eaa1d5bb8b4b-00_-_Penjualan_luans.png) — image/png, 39 KB
- [00 - Penjualan nota.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fc26e31a7-fdb2-4772-9034-1bc3d9d6ca70-00_-_Penjualan_nota.png) — image/png, 11 KB
- [01 - Penjualan-9.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F5a565d8d-3e5e-42c9-8ffa-bfaf1c401191-01_-_Penjualan-9.png) — image/png, 308 KB
- [Tangkapan Layar 2026-07-03 pukul 13.50.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fa3d3a33d-fc3e-42c1-b9ad-e3f8a38c0b49-Tangkapan_Layar_2026-07-03_pukul_13.50.22.png) — image/png, 334 KB
- [Tangkapan Layar 2026-07-03 pukul 14.01.42.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F6edb8d14-f8b5-4cfb-9f6f-39de255ad4ac-Tangkapan_Layar_2026-07-03_pukul_14.01.42.png) — image/png, 123 KB
- [ss2.svg](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F885c5af7-5ff8-46a8-8f10-8bece4e334cd-ss2.svg) — image/svg+xml, 484 KB
- [Tangkapan Layar 2026-07-03 pukul 15.20.01.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F6d8e741d-e19a-4bc6-a99a-ea19b157f647-Tangkapan_Layar_2026-07-03_pukul_15.20.01.png) — image/png, 35 KB
- [Tangkapan Layar 2026-07-03 pukul 15.41.48.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Ffbdd2f85-c1ce-4486-b679-fc8d172af216-Tangkapan_Layar_2026-07-03_pukul_15.41.48.png) — image/png, 106 KB
- [Tangkapan Layar 2026-07-03 pukul 15.42.39.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F6b892850-7c88-4d98-9d30-9ea5b3e8ae83-Tangkapan_Layar_2026-07-03_pukul_15.42.39.png) — image/png, 53 KB
- [Tangkapan Layar 2026-07-03 pukul 15.44.10.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fd1cfe79f-51ce-4b94-ad7e-26a12a875605-Tangkapan_Layar_2026-07-03_pukul_15.44.10.png) — image/png, 158 KB
- [pl1.svg](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2F5569c307-0534-416c-bce8-6d033204e1a9-pl1.svg) — image/svg+xml, 360 KB
- [Tangkapan Layar 2026-07-06 pukul 14.36.00.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fa1c5c0dc-5a75-4822-b6d9-eff2436550dd-Tangkapan_Layar_2026-07-06_pukul_14.36.00.png) — image/png, 80 KB
- [Tangkapan Layar 2026-07-06 pukul 14.39.02.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fd2e4ef84-d976-4934-8f8d-e074ef4ed47d-Tangkapan_Layar_2026-07-06_pukul_14.39.02.png) — image/png, 32 KB
- [Tangkapan Layar 2026-07-06 pukul 16.05.35.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F34%2Fe8308731-cfe3-4b6f-aa4b-f2e9e18ac425-Tangkapan_Layar_2026-07-06_pukul_16.05.35.png) — image/png, 412 KB

### Komisi

> Menghitung dan menampilkan komisi karyawan dari penjualan (untuk sales) dan dari pekerjaan fasset (untuk teknisi). Dipakai untuk evaluasi performa dan perhitungan bonus.

#### Pengertian

Tab **Komisi** (di **Penjualan → Komisi**) menghitung imbalan karyawan secara otomatis. Ada dua tipe komisi, yang dipilih lewat sakelar **Tipe Komisi** di bagian atas halaman:

| Tipe Komisi | Untuk siapa |
| :-- | :-- |
| **Komisi Penjualan** | Sales, berdasarkan barang yang terjual. |
| **Komisi Fasset** | Teknisi, berdasarkan pekerjaan fasset yang berhasil. |

Nilai komisi dihitung sistem, jadi tidak perlu dihitung manual per transaksi. Data ini bisa dipakai untuk evaluasi performa dan perhitungan bonus bulanan.

#### Fitur Utama

- Sakelar **Tipe Komisi** untuk berpindah antara **Komisi Penjualan** dan **Komisi Fasset**.
- Filter per **Periode**, **Status Pembayaran** (Dibayar / Belum Dibayar), **Cabang**, **Sales**, dan pencarian nama barang/pelanggan.
- Pengaturan rate komisi sales per brand/sub-brand dan pengaturan komisi fasset default.
- **Update Massal** untuk mengubah komisi banyak brand/sub-brand sekaligus.
- Tambah komisi manual untuk kasus di luar perhitungan otomatis.

#### Komisi Penjualan

Komisi untuk sales berdasarkan barang yang mereka jual. Sistem membaca brand/sub-brand tiap barang, mengambil rate komisinya, lalu mencatat nominal komisi per item.

##### Melihat Komisi Penjualan

1. Buka **Penjualan → Komisi**, pilih **Tipe Komisi: Komisi Penjualan**.
2. Atur filter **Periode / Cabang / Sales** untuk mempersempit data.
3. Tabel komisi menampilkan kolom berikut:

![Tangkapan Layar 2026-07-06 pukul 17.27.07.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F282d2098-8bc1-4b0a-809b-af4cb0509f85-Tangkapan_Layar_2026-07-06_pukul_17.27.07.png)
*Tampilan: Daftar Komisi Penjualan*

| Kolom | Keterangan |
| :-- | :-- |
| Cabang | Cabang toko |
| Tanggal | Tanggal transaksi |
| No. Transaksi | Nomor order/penjualan |
| Pelanggan | Pembeli |
| Barang | Barang yang dijual |
| Sales | Sales yang melayani |
| Komisi | Nilai komisi |
| Status | Sudah/belum dibayar (masuk gaji) |

##### Pengaturan Rate Komisi

Halaman ini menentukan aturan dasar perhitungan komisi sales. Buka lewat tombol **Pengaturan Rate** pada halaman Komisi.

![Tangkapan Layar 2026-07-06 pukul 17.28.40.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F9b84aba5-df63-47c6-81b7-819345adc133-Tangkapan_Layar_2026-07-06_pukul_17.28.40.png)
*Tampilan: Tombol Pengaturan Rate*

Di halaman ini ada dua bagian:

1. **Waktu Perhitungan Komisi** — pilih kapan komisi dihitung:
   - **Saat Transaksi** — komisi dihitung begitu penjualan dibuat.
   - **Saat Pengambilan** — komisi dihitung ketika pelanggan mengambil barang.
2. **Rate Komisi Brand & Sub-Brand** — tabel berisi kategori, brand/sub-brand, rata-rata harga jual, dan nilai komisi sales.

![Tangkapan Layar 2026-07-06 pukul 17.30.47.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F89bc607f-8706-4822-8ee0-0b900f1ab6ad-Tangkapan_Layar_2026-07-06_pukul_17.30.47.png)
*Tampilan: Pengaturan Rate Komisi Penjualan*

Klik **Simpan Pengaturan** untuk menyimpan pilihan waktu perhitungan.

> **Catatan:** Komisi dihitung dari **Sub-Brand** barang. Bila komisi sub-brand bernilai Rp 0, sistem memakai komisi **Brand** induknya.

##### Update Massal Komisi

Dipakai untuk mengubah komisi banyak brand/sub-brand sekaligus, misalnya saat penyesuaian komisi global. Buka lewat tombol **Update Massal**.

![Tangkapan Layar 2026-07-06 pukul 17.33.49.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2Fd78429ac-9fda-4697-a5ad-f67d448d58aa-Tangkapan_Layar_2026-07-06_pukul_17.33.49.png)
*Tampilan: Update Massal Komisi*

Atur target dan metodenya:

| Filter Target | Fungsi |
| :-- | :-- |
| Kategori | Batasi ke kategori tertentu |
| Brand | Batasi ke brand tertentu |
| Sub-Brand | Batasi ke sub-brand tertentu |

| Scope Target | Fungsi |
| :-- | :-- |
| Semua | Ubah semua item |
| Hanya Rp 0 | Ubah hanya komisi yang masih Rp 0 |
| Hanya > Rp 0 | Ubah hanya komisi yang sudah ada nilainya |

| Metode Update | Fungsi |
| :-- | :-- |
| Nilai Tetap | Set komisi ke angka tertentu |
| Tambah Nilai | Menambah komisi dengan angka tertentu |
| Kurangi Nilai | Mengurangi komisi dengan angka tertentu |
| Ubah % | Naik/turun berdasarkan persen |
| % dari Harga | Komisi = persentase dari rata-rata harga jual brand |

Sebelum konfirmasi, tabel **Preview Perubahan** menampilkan komisi lama, komisi baru, dan selisihnya. Klik tombol **Update ... Item** untuk menerapkan.

##### Edit Komisi per Baris

Untuk mengoreksi satu item tanpa mengubah yang lain, edit langsung di tabel rate.

1. Klik ikon **pensil (Edit)** pada baris yang ingin diubah.

![02 - Komisi-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F99c0d160-d588-447b-9dd4-363a9bf086a6-02_-_Komisi-8.png)
*Tampilan: Edit komisi per baris*

2. Nilai komisi berubah jadi kolom input; ketik nominal baru.
3. Klik ikon **simpan** untuk menyimpan, atau **X** untuk membatalkan.

##### Menambah Komisi Manual (Sales)

Dipakai untuk menambah komisi di luar perhitungan otomatis. Komisi manual tetap tercatat dan digabung dengan komisi sistem.

1. Klik tombol **Tambah Komisi**.

![Tangkapan Layar 2026-07-06 pukul 17.40.23.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F7434e673-562d-48af-9ea1-3d183a8c2e12-Tangkapan_Layar_2026-07-06_pukul_17.40.23.png)
*Tampilan: Tambah Komisi Penjualan*

2. Isi **Penjualan** (transaksi sumber), **Sales** penerima, dan **Jumlah Komisi**.
3. Simpan.

#### Komisi Fasset

Komisi untuk teknisi berdasarkan pekerjaan fasset. Komisi dihitung otomatis ketika status fasset diset **Berhasil**; bila **Gagal**, komisi tidak diberikan. Nilainya masih bisa disesuaikan manual saat membuat atau mengedit fasset.

##### Melihat Komisi Fasset

1. Buka **Penjualan → Komisi**, pilih **Tipe Komisi: Komisi Fasset**.
2. Atur filter **Periode / Cabang / Sales**.
3. Tabel menampilkan kolom berikut:

![02 - Komisi-11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F87919f71-bd85-4ded-83e5-9d90a4f0f5ea-02_-_Komisi-11.png)
*Tampilan: Daftar Komisi Fasset*

| Kolom | Keterangan |
| :-- | :-- |
| Cabang | Lokasi lab/toko |
| Tanggal | Tanggal transaksi |
| No. Transaksi | Nomor order/penjualan |
| Pelanggan | Pembeli |
| Pekerja Fasset | Teknisi yang mengerjakan |
| Komisi | Nilai komisi fasset |
| Status | Sudah/belum dibayar |

##### Pengaturan Komisi Fasset

Menentukan nilai komisi default untuk pekerjaan fasset. Buka lewat tombol **Pengaturan Komisi Fasset**.

![02 - Komisi-12.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2Fec1fc405-0862-4535-b171-06c26398b98b-02_-_Komisi-12.png)
*Tampilan: Pengaturan Komisi Fasset*

Pilih cara perhitungan default:

| Mode | Keterangan |
| :-- | :-- |
| **Jumlah Tetap** | Nominal tetap per pekerjaan (mis. Rp 50.000) |
| **Persentase** | Persentase dari total nilai barang yang dikerjakan (mis. 5%) |

Isi nilainya lalu klik **Simpan Pengaturan**.

##### Menambah Komisi Manual Fasset

Dipakai untuk memberi komisi tambahan ke teknisi di luar perhitungan otomatis.

1. Klik tombol **Tambah Komisi Fasset**.

![02 - Komisi-13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F9d033719-0e1e-426b-af08-6293d697b21a-02_-_Komisi-13.png)
*Tampilan: Tambah Komisi Fasset*

2. Isi transaksi sumber, teknisi penerima, dan jumlah komisi.
3. Simpan.

#### Catatan & Tips

- Komisi fasset baru muncul setelah status fasset **Berhasil**.
- Rate komisi sales diatur per brand/sub-brand, sedangkan komisi fasset diatur sebagai default (tetap atau persentase) — keduanya di halaman pengaturan yang berbeda.
- Status **Dibayar** pada kolom Status menandakan komisi sudah masuk ke perhitungan gaji karyawan.

#### Lampiran

- [02 - Komisi-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F19f235cb-6161-4b99-b0fc-2aa0c5250faa-02_-_Komisi-4.png) — image/png, 221 KB
- [02 - Komisi-5.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F52ca2217-e528-44f4-8475-4b3d9489fd59-02_-_Komisi-5.png) — image/png, 11 KB
- [02 - Komisi-6.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F89da1794-fa6d-465c-9c55-51b795a8b592-02_-_Komisi-6.png) — image/png, 79 KB
- [02 - Komisi-7.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F1c387317-2d22-4314-b6c9-4053fd18a1ac-02_-_Komisi-7.png) — image/png, 276 KB
- [02 - Komisi-8.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F99c0d160-d588-447b-9dd4-363a9bf086a6-02_-_Komisi-8.png) — image/png, 32 KB
- [02 - Komisi-9.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F019033ff-bed9-41da-be44-ad6fd9c435e3-02_-_Komisi-9.png) — image/png, 87 KB
- [02 - Komisi-11.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F87919f71-bd85-4ded-83e5-9d90a4f0f5ea-02_-_Komisi-11.png) — image/png, 225 KB
- [02 - Komisi-12.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2Fec1fc405-0862-4535-b171-06c26398b98b-02_-_Komisi-12.png) — image/png, 180 KB
- [02 - Komisi-13.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F9d033719-0e1e-426b-af08-6293d697b21a-02_-_Komisi-13.png) — image/png, 67 KB
- [Tangkapan Layar 2026-07-06 pukul 17.27.07.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F282d2098-8bc1-4b0a-809b-af4cb0509f85-Tangkapan_Layar_2026-07-06_pukul_17.27.07.png) — image/png, 366 KB
- [Tangkapan Layar 2026-07-06 pukul 17.28.40.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F9b84aba5-df63-47c6-81b7-819345adc133-Tangkapan_Layar_2026-07-06_pukul_17.28.40.png) — image/png, 17 KB
- [Tangkapan Layar 2026-07-06 pukul 17.30.47.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F89bc607f-8706-4822-8ee0-0b900f1ab6ad-Tangkapan_Layar_2026-07-06_pukul_17.30.47.png) — image/png, 87 KB
- [Tangkapan Layar 2026-07-06 pukul 17.33.49.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2Fd78429ac-9fda-4697-a5ad-f67d448d58aa-Tangkapan_Layar_2026-07-06_pukul_17.33.49.png) — image/png, 210 KB
- [Tangkapan Layar 2026-07-06 pukul 17.40.23.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F35%2F7434e673-562d-48af-9ea1-3d183a8c2e12-Tangkapan_Layar_2026-07-06_pukul_17.40.23.png) — image/png, 61 KB

### Analisa

> Dashboard penjualan yang merangkum performa toko — ringkasan keuangan, tren, metode pembayaran, produk terlaris, perbandingan cabang, performa staf, hasil QC, dan after service. Dipakai pemilik/manajer untuk mengevaluasi bisnis.

#### Pengertian

Tab **Analisa** (**Penjualan → Analisa**) menampilkan data penjualan dalam bentuk **dashboard**. Dashboard membantu pemilik dan manajer untuk:

- Menganalisis kinerja cabang dan staf.
- Melihat tren penjualan dari waktu ke waktu.
- Mengetahui produk terlaris dan kontribusi tiap cabang.
- Mengevaluasi kualitas hasil kerja (QC/fasset) dan umpan balik pelanggan.

#### Fitur Utama

| Bagian | Isi |
| :-- | :-- |
| **Ringkasan (KPI)** | Penjualan kotor, laba kotor, jumlah transaksi, dan nilai transaksi rata-rata. |
| **Tren Penjualan** | Grafik perkembangan nilai penjualan per waktu. |
| **Diskon & Pengembalian** | Ringkasan total diskon dan retur barang. |
| **Metode Pembayaran** | Komposisi transaksi per metode bayar. |
| **Produk Terlaris** | Barang dengan penjualan tertinggi per sub-brand. |
| **Perbandingan Cabang** | Performa penjualan antar cabang (untuk yang punya akses lintas cabang). |
| **Performa Staf** | Kontribusi, jumlah transaksi, dan komisi tiap staf. |
| **Fasset & QA** | Ringkasan hasil quality control fasset. |
| **After Service** | Umpan balik pelanggan pasca transaksi. |

#### Langkah Penggunaan

1. Buka **Penjualan → Analisa**.
2. Pilih **Rentang Tanggal** yang ingin dilihat.
3. Gunakan filter **Cabang** untuk melihat toko tertentu atau **Semua Cabang**.
4. Dashboard menampilkan seluruh data secara otomatis.

![Tangkapan Layar 2026-07-06 pukul 17.44.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fef8a7a3c-eb9c-492f-a929-5448fc545bb0-Tangkapan_Layar_2026-07-06_pukul_17.44.56.png)
*Tampilan: Dashboard Penjualan*

#### Bagian-Bagian Analisa

##### Tren Penjualan

Grafik perubahan nilai penjualan dari waktu ke waktu — sumbu tanggal di bawah, nilai penjualan di kiri.

![Tangkapan Layar 2026-07-06 pukul 17.46.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F2f06ec8a-0881-4a2f-930f-b9613974cd47-Tangkapan_Layar_2026-07-06_pukul_17.46.22.png)
*Tampilan: Grafik Tren Penjualan*

##### Diskon & Pengembalian

Ringkasan total diskon dan retur barang selama periode terpilih.

![Tangkapan Layar 2026-07-06 pukul 17.47.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F6313b53f-b02d-435f-8f0a-3c781c304423-Tangkapan_Layar_2026-07-06_pukul_17.47.33.png)
*Tampilan: Ringkasan Diskon & Pengembalian*

##### Metode Pembayaran

Diagram donat yang memperlihatkan komposisi transaksi berdasarkan metode pembayaran (Cash, Debit, Credit, QRIS, Asuransi, dan Poin), lengkap dengan total di tengah.

![Tangkapan Layar 2026-07-06 pukul 17.48.06.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F6868fee5-3322-44ac-8486-49cc1227a841-Tangkapan_Layar_2026-07-06_pukul_17.48.06.png)
*Tampilan: Diagram Metode Pembayaran*

##### Produk Terlaris

Daftar barang dengan penjualan tertinggi, dikelompokkan per **sub-brand**.

![Tangkapan Layar 2026-07-06 pukul 17.48.38.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fe3697da1-a255-468d-a054-922dc4d9046e-Tangkapan_Layar_2026-07-06_pukul_17.48.38.png)
*Tampilan: Produk Terlaris*

| Kolom | Keterangan |
| :-- | :-- |
| Brand | Brand barang |
| Sub Brand | Sub-brand barang |
| Pendapatan | Total pendapatan dari sub-brand |
| Unit Terjual | Jumlah unit terjual |
| % dari Total | Kontribusi terhadap total penjualan |

##### Perbandingan Cabang

Membandingkan performa penjualan antar cabang. Bagian ini hanya muncul bagi pengguna yang punya akses lintas cabang.

![Tangkapan Layar 2026-07-06 pukul 17.49.02.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F343e32b2-814c-43aa-a465-ee7cedd85dff-Tangkapan_Layar_2026-07-06_pukul_17.49.02.png)
*Tampilan: Perbandingan Penjualan Antar Cabang*

##### Performa Staf

Kinerja penjualan tiap staf dalam periode terpilih.

![Tangkapan Layar 2026-07-06 pukul 17.49.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fdbf1cbdf-5388-4ec4-99b6-390426365225-Tangkapan_Layar_2026-07-06_pukul_17.49.22.png)
*Tampilan: Performa Staf Penjualan*

| Kolom | Keterangan |
| :-- | :-- |
| Nama Staf | Nama staf |
| Total Penjualan | Nilai penjualan staf |
| Kontribusi | Porsi terhadap total penjualan |
| Jumlah Transaksi | Banyak transaksi ditangani |
| Item Terjual | Jumlah item terjual |
| Komisi | Total komisi staf |

##### Fasset & QA

Ringkasan hasil quality control fasset — status QC dan jenis kesalahan yang sering muncul.

![Tangkapan Layar 2026-07-06 pukul 17.53.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fb46fa4e1-b29c-486a-adef-2e6ef1c5fefb-Tangkapan_Layar_2026-07-06_pukul_17.53.56.png)
*Tampilan: Fasset & Quality Assurance*

##### After Service

Hasil tindak lanjut purna jual: jenis respons pelanggan, saluran komunikasi, dan ringkasan kepuasan.

![Tangkapan Layar 2026-07-06 pukul 17.54.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F0356a771-915e-452a-8db0-2e14c7b5ad21-Tangkapan_Layar_2026-07-06_pukul_17.54.15.png)
*Tampilan: After Service & Feedback Pelanggan*

#### Catatan & Tips

Dashboard ini membantu manajemen memahami performa penjualan dari berbagai sisi — hasil keuangan, kinerja staf, dan kualitas produk — sehingga bisa melacak tren pembelian, mengatur strategi stok dan promosi, serta menjaga mutu pelayanan.

#### Lampiran

- [03 - Analisa penjualan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F38943703-302e-46d3-b90b-a235ebf70ef5-03_-_Analisa_penjualan.png) — image/png, 263 KB
- [03 - Analisa tren penjualan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F5051a591-f6a3-4f82-ac99-1671fcdd9d8b-03_-_Analisa_tren_penjualan.png) — image/png, 60 KB
- [03 - Analisa ringkasan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F5f00377f-7277-40ef-9ad0-2f400e59d193-03_-_Analisa_ringkasan.png) — image/png, 31 KB
- [03 - Analisa pembayarans.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F702c5213-52bb-489a-bd29-2cfd64420b36-03_-_Analisa_pembayarans.png) — image/png, 22 KB
- [03 - Analisa produk terlaris.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F38fb36a4-bcba-4b58-a9c5-b6fbc81bdd9f-03_-_Analisa_produk_terlaris.png) — image/png, 30 KB
- [03 - Analisa cabang.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F8e30ea54-cffb-4275-8c9e-47397a9144d2-03_-_Analisa_cabang.png) — image/png, 53 KB
- [03 - Analisa staf.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F43df59bb-fc93-4d95-a263-2907dd694500-03_-_Analisa_staf.png) — image/png, 48 KB
- [03 - Analisa fasset.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fbd240dca-eba8-4d7f-87cd-91dafe7c4ef6-03_-_Analisa_fasset.png) — image/png, 55 KB
- [03 - Analisa after.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F5de5389a-774b-44ff-9f5f-7476a746de99-03_-_Analisa_after.png) — image/png, 141 KB
- [Tangkapan Layar 2026-07-06 pukul 17.44.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fef8a7a3c-eb9c-492f-a929-5448fc545bb0-Tangkapan_Layar_2026-07-06_pukul_17.44.56.png) — image/png, 405 KB
- [Tangkapan Layar 2026-07-06 pukul 17.46.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F2f06ec8a-0881-4a2f-930f-b9613974cd47-Tangkapan_Layar_2026-07-06_pukul_17.46.22.png) — image/png, 139 KB
- [Tangkapan Layar 2026-07-06 pukul 17.47.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F6313b53f-b02d-435f-8f0a-3c781c304423-Tangkapan_Layar_2026-07-06_pukul_17.47.33.png) — image/png, 60 KB
- [Tangkapan Layar 2026-07-06 pukul 17.48.06.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F6868fee5-3322-44ac-8486-49cc1227a841-Tangkapan_Layar_2026-07-06_pukul_17.48.06.png) — image/png, 42 KB
- [Tangkapan Layar 2026-07-06 pukul 17.48.38.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fe3697da1-a255-468d-a054-922dc4d9046e-Tangkapan_Layar_2026-07-06_pukul_17.48.38.png) — image/png, 66 KB
- [Tangkapan Layar 2026-07-06 pukul 17.49.02.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F343e32b2-814c-43aa-a465-ee7cedd85dff-Tangkapan_Layar_2026-07-06_pukul_17.49.02.png) — image/png, 129 KB
- [Tangkapan Layar 2026-07-06 pukul 17.49.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fdbf1cbdf-5388-4ec4-99b6-390426365225-Tangkapan_Layar_2026-07-06_pukul_17.49.22.png) — image/png, 117 KB
- [Tangkapan Layar 2026-07-06 pukul 17.53.56.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2Fb46fa4e1-b29c-486a-adef-2e6ef1c5fefb-Tangkapan_Layar_2026-07-06_pukul_17.53.56.png) — image/png, 107 KB
- [Tangkapan Layar 2026-07-06 pukul 17.54.15.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F36%2F0356a771-915e-452a-8db0-2e14c7b5ad21-Tangkapan_Layar_2026-07-06_pukul_17.54.15.png) — image/png, 243 KB

### Audit Penjualan

> Riwayat aktivitas pengguna pada modul penjualan — siapa mengerjakan apa, di transaksi mana, dan kapan. Bersifat read-only, dipakai untuk pengawasan dan penelusuran perubahan data.

#### Pengertian

Tab **Audit** (**Penjualan → Audit**) mencatat semua aktivitas pengguna di modul penjualan, dari pembuatan transaksi sampai diproses dan diselesaikan. Untuk setiap aktivitas, sistem menyimpan:

- siapa pengguna yang melakukannya,
- aktivitas apa yang dilakukan,
- pada transaksi mana,
- serta waktu kejadiannya.

Fitur ini berfungsi sebagai **jejak audit (audit trail)** untuk mengawasi aktivitas kasir dan admin, menelusuri perubahan data transaksi, dan mendukung validasi laporan keuangan serta stok. Audit bersifat **read-only** — data aktivitas yang tercatat tidak bisa diubah pengguna.

#### Fitur Utama

- Riwayat aktivitas seluruh tahap penjualan dalam satu tabel.
- Filter berdasarkan **Jenis Aksi**, **Pengguna**, dan **Rentang Waktu**.
- Setiap baris bisa dibuka (expand) untuk melihat detail perubahan data — nilai sebelum dan sesudah, termasuk rincian barang.

![Tangkapan Layar 2026-07-06 pukul 17.56.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F37%2F9981fb37-6bc1-4252-a620-b588b69a96a4-Tangkapan_Layar_2026-07-06_pukul_17.56.18.png)
*Tampilan: Menu Audit Penjualan*

#### Informasi yang Ditampilkan

| Kolom | Keterangan |
| :-- | :-- |
| **Jenis Aksi** | Jenis perubahan: Data Baru, Ubah Data, atau Hapus |
| **User** | Pengguna yang melakukan aktivitas |
| **Jenis Aktivitas** | Tahap penjualan (mis. Penjualan, sale-payment, sale-facet) |
| **ID Aktivitas** | ID transaksi atau aktivitas terkait |
| **Tanggal** | Waktu aktivitas dilakukan |

Kolom **Perubahan** di baris paling kanan bisa diklik untuk membuka detail nilai sebelum/sesudah.

##### Jenis Aksi

- **Data Baru** — pengguna membuat data baru, seperti membuat transaksi, menambah pembayaran, membuat fasset, atau menyimpan QC/pengambilan. Ini bagian normal dari alur penjualan.
- **Ubah Data** — pengguna mengubah data yang sudah ada, seperti mengubah item/jumlah barang, diskon, data pelanggan, atau mengoreksi transaksi.
- **Hapus** — pengguna menghapus data.

##### Jenis Aktivitas

Audit mencakup aktivitas dari seluruh tahap penjualan:

| Aktivitas | Keterangan |
| :-- | :-- |
| **Penjualan** | Pembuatan transaksi penjualan (langsung atau order) |
| **sale-payment** | Pencatatan pembayaran (DP atau pelunasan) |
| **sale-facet** | Pekerjaan fasset (pemotongan/pemasangan lensa) |
| **sale-quality-assurance** | Pemeriksaan quality control |
| **sale-fulfillment** | Penyelesaian dan penyerahan barang |
| **sale-after-service** | Tindak lanjut purna jual |

#### Langkah Penggunaan

1. Buka **Penjualan → Audit**.
2. Gunakan filter **Jenis Aksi**, **Pengguna**, dan **Rentang Waktu** untuk mempersempit data.
3. Klik ikon panah di kolom **Jenis Aksi** untuk membuka detail perubahan sebuah baris.

![Tangkapan Layar 2026-07-06 pukul 18.00.01.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F37%2Fc770c27a-d440-4631-90d4-4dab803610d5-Tangkapan_Layar_2026-07-06_pukul_18.00.01.png)
*Tampilan: Detail audit aktivitas penjualan*

Detail menampilkan nama field beserta nilai sebelum dan sesudah, plus rincian barang (ID item, jumlah, dan harga pokok).

#### Catatan & Tips

- Audit dipakai sebagai alat monitoring aktivitas pengguna dan bahan evaluasi proses penjualan.
- Audit menjadi dasar penelusuran bila terjadi kesalahan input.
- Tinjau audit secara rutin agar penyimpangan cepat terdeteksi.

#### Lampiran

- [04 - Audit Penjualan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F37%2F6475eec0-b293-4df0-b468-bf6045f42c0a-04_-_Audit_Penjualan.png) — image/png, 384 KB
- [04 - Audit Penjualan-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F37%2Fcc2404ae-90e9-4010-a527-d0a9969148f2-04_-_Audit_Penjualan-1.png) — image/png, 151 KB
- [Tangkapan Layar 2026-07-06 pukul 17.56.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F37%2F9981fb37-6bc1-4252-a620-b588b69a96a4-Tangkapan_Layar_2026-07-06_pukul_17.56.18.png) — image/png, 188 KB
- [Tangkapan Layar 2026-07-06 pukul 18.00.01.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F37%2Fc770c27a-d440-4631-90d4-4dab803610d5-Tangkapan_Layar_2026-07-06_pukul_18.00.01.png) — image/png, 181 KB

## Bab 07 — Admin


### User

> Daftar semua pengguna sistem beserta cabang, peran, dan statusnya. Dipakai admin untuk membuat akun baru, mengubah data pengguna, atau menonaktifkan akun yang sudah tidak dipakai.

#### Pengertian

Menu **Users** menampilkan daftar seluruh pengguna yang terdaftar di sistem Lensiro. Setiap pengguna punya akun sendiri dengan peran (role) yang membatasi menu apa saja yang bisa dibuka, dan terikat pada satu cabang tempat ia bertugas.

Akun tidak bisa dihapus permanen — hanya dinonaktifkan — supaya riwayat transaksi, laporan, dan log aktivitas yang terkait dengan pengguna tersebut tetap utuh.


![Tangkapan Layar 2026-07-06 pukul 15.31.23.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2Ffde919d6-2dc2-4370-adb1-f193a79d5b40-Tangkapan_Layar_2026-07-06_pukul_15.31.23.png)

*Tampilan: Daftar User dan hak akses*

#### Fitur Utama

- **Daftar pengguna.** Tabel menampilkan kolom **ID**, **Nama**, **Username**, **Cabang**, **Role**, dan **Status** (Aktif / Non Aktif) untuk setiap pengguna.
- **Pencarian dan filter.** Cari berdasarkan **Nama** atau **Username**, serta saring daftar menurut **Status**, **Role**, dan **Cabang**.
- **Tambah pengguna baru.** Tombol **Tambah User** membuka formulir untuk membuat akun.
- **Ubah atau nonaktifkan akun.** Lewat kolom **Aksi** pada tiap baris, data pengguna dapat diperbarui. Akun yang sudah tidak aktif dinonaktifkan; akun yang nonaktif bisa dihidupkan lagi lewat tombol **Aktifkan**.

#### Langkah Penggunaan

Menambah pengguna baru:

1. Tekan tombol **Tambah User**.
2. Isi data pada formulir:
   - **Nama** — nama lengkap pengguna.
   - **Username** — dipakai untuk login (bukan email).
   - **Password** dan **Konfirmasi Password** — minimal 8 karakter dan keduanya harus sama.
   - **Cabang** — cabang tempat pengguna bertugas.
   - **Role** — peran yang menentukan menu apa saja yang bisa diakses (mis. Admin, Sales, Kasir, Gudang).
3. Bila diperlukan, lengkapi lampiran dokumen (**Upload KTP**, **Upload KK**, **Upload Ijazah**) dan data rekening bank pengguna.
4. Tekan **Tambah User** untuk menyimpan.


![Tangkapan Layar 2026-07-06 pukul 15.33.03.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2F9ccfcae1-f556-4594-b6e9-5ea3a68a402d-Tangkapan_Layar_2026-07-06_pukul_15.33.03.png)

*Tampilan: Formulir tambah user*

Untuk menonaktifkan atau mengubah akun, gunakan tombol pada kolom **Aksi** di baris pengguna yang bersangkutan. Saat menonaktifkan, tanggal dan alasan resign dapat diisi lewat kolom **Tgl Resign** dan **Alasan Resign**.


![Tangkapan Layar 2026-07-06 pukul 15.34.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2F63d30b06-3b89-403b-b77b-0e0bd5538021-Tangkapan_Layar_2026-07-06_pukul_15.34.57.png)


#### Catatan & Tips

> **Catatan:** Akun tidak dapat dihapus permanen, hanya dapat dinonaktifkan agar tidak bisa login. Ini menjaga integritas data historis yang terkait dengan pengguna.

- Pengguna yang sudah nonaktif tetap muncul di daftar dengan status **Non Aktif** dan bisa diaktifkan kembali lewat tombol **Aktifkan**.
- Password wajib minimal 8 karakter, dan kolom **Konfirmasi Password** harus sama persis dengan **Password**.

#### Lampiran

- [01 - Users-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2F15c93355-7c8a-4316-bb18-787c0edfcbc5-01_-_Users-2.png) — image/png, 181 KB
- [01 - Users-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2F308a2820-dd77-4ce5-b57c-28700f2851c0-01_-_Users-3.png) — image/png, 99 KB
- [01 - Users-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2F00a04683-548c-4ccb-baa9-b0d758c57395-01_-_Users-4.png) — image/png, 109 KB
- [Tangkapan Layar 2026-07-06 pukul 15.31.23.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2Ffde919d6-2dc2-4370-adb1-f193a79d5b40-Tangkapan_Layar_2026-07-06_pukul_15.31.23.png) — image/png, 309 KB
- [Tangkapan Layar 2026-07-06 pukul 15.33.03.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2F9ccfcae1-f556-4594-b6e9-5ea3a68a402d-Tangkapan_Layar_2026-07-06_pukul_15.33.03.png) — image/png, 66 KB
- [Tangkapan Layar 2026-07-06 pukul 15.34.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F39%2F63d30b06-3b89-403b-b77b-0e0bd5538021-Tangkapan_Layar_2026-07-06_pukul_15.34.57.png) — image/png, 69 KB

### Role

> Daftar peran pengguna dan pengaturan izin aksesnya. Dipakai admin untuk membuat role dan menentukan menu mana saja yang boleh dibuka oleh tiap peran.

#### Pengertian

Menu **Role** mengatur hak akses tiap peran pengguna di sistem Lensiro. Sebuah role — misalnya Admin, Manager, Kasir, atau Staff — menentukan menu apa saja yang bisa dibuka oleh pengguna yang memakai peran itu. Menu yang tidak diizinkan akan disembunyikan otomatis dari akun tersebut.


![Tangkapan Layar 2026-07-06 pukul 15.37.04.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F40%2Fde8b06e7-7779-4b21-acfa-5a53a6dc8d87-Tangkapan_Layar_2026-07-06_pukul_15.37.04.png)

*Tampilan: Daftar Role*

#### Fitur Utama

- **Daftar role.** Tabel menampilkan kolom **ID**, **Nama**, **Jumlah User** (berapa pengguna memakai role itu), dan **Jumlah Izin** (berapa izin yang aktif).
- **Tambah role baru.** Buat peran baru cukup dengan mengisi **Nama** role.
- **Edit izin role.** Buka **Edit Izin Role** untuk mengatur izin peran. Izin dikelompokkan per modul — Master, Pembelian, Penjualan, Gudang, Laporan, Admin, dan lainnya — dan dipilih lewat kotak centang.
- **Ubah atau hapus role.** Nama role dapat diperbarui, dan role dapat dihapus lewat kolom **Aksi**.


![Tangkapan Layar 2026-07-06 pukul 15.40.45.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F40%2F6273d77d-6c02-4852-bf45-a9745d70722d-Tangkapan_Layar_2026-07-06_pukul_15.40.45.png)

*Tampilan: Editor izin role*

#### Langkah Penggunaan

1. Pada daftar role, pilih peran yang ingin diatur, lalu buka **Edit Izin Role** lewat kolom **Aksi**.
2. Centang izin per modul sesuai kebutuhan peran tersebut. Mencentang modul induk mengaktifkan izin di bawahnya.
3. Simpan perubahan.

#### Catatan & Tips

> **Contoh:** *Manager* dapat diberi akses penuh ke menu laporan dan manajemen shift, sementara *Kasir* cukup diberi akses ke menu penjualan dan laporan harian. Menu di luar izin itu tidak akan tampil di akun mereka.

- Kolom **Jumlah User** membantu memastikan sebuah role masih dipakai sebelum diubah atau dihapus.

#### Lampiran

- [02 - Role-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F40%2Fb7e8ca37-14ec-478e-b90e-eb4556eb4a53-02_-_Role-1.png) — image/png, 116 KB
- [02 - Role-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F40%2F29ebee15-2b49-4ffb-8b6e-4dc26e34644c-02_-_Role-2.png) — image/png, 149 KB
- [Tangkapan Layar 2026-07-06 pukul 15.37.04.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F40%2Fde8b06e7-7779-4b21-acfa-5a53a6dc8d87-Tangkapan_Layar_2026-07-06_pukul_15.37.04.png) — image/png, 286 KB
- [Tangkapan Layar 2026-07-06 pukul 15.40.45.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F40%2F6273d77d-6c02-4852-bf45-a9745d70722d-Tangkapan_Layar_2026-07-06_pukul_15.40.45.png) — image/png, 126 KB

### Manajemen

> Pengaturan jadwal kerja (shift) dan gaji karyawan per cabang. Dipakai admin untuk menyusun shift lewat kalender dan mencatat rincian gaji tiap karyawan.

#### Pengertian

Menu **Manajemen** dipakai untuk mengatur **jadwal kerja (shift)** dan **gaji karyawan**. Daftar karyawan cabang tampil di satu sisi, dan detail shift maupun gaji karyawan yang dipilih tampil di sisi lain.


![Tangkapan Layar 2026-07-06 pukul 15.47.30.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2F727a5bc2-2c57-42ab-a948-5870572381e8-Tangkapan_Layar_2026-07-06_pukul_15.47.30.png)

*Tampilan: Kalender shift karyawan*


![Tangkapan Layar 2026-07-06 pukul 15.50.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2F999906e7-259f-425d-a064-212a79bdd486-Tangkapan_Layar_2026-07-06_pukul_15.50.20.png)

*Tampilan: Gaji karyawan*

#### Fitur Utama

- **Penjadwalan shift.** Kalender per cabang berisi kotak tanggal. Klik satu tanggal untuk mengelola shift pada hari itu.
- **Rincian gaji.** Untuk karyawan yang dipilih, gaji dihitung dari komponen **Tunjangan Tetap**, **Tunjangan Tidak Tetap**, **Potongan Tetap**, dan **Potongan Tidak Tetap**, dengan gaji bersih yang terhitung otomatis.

#### Langkah Penggunaan

Menambah shift:

1. Klik tanggal yang diinginkan pada kalender untuk membuka formulir shift hari itu.
2. Pada bagian **Buat Shift Baru**, pilih **Karyawan**, lalu isi jam **Mulai** dan **Selesai**.
3. Tekan **Tambah Shift**. Shift yang tersimpan muncul di **Daftar Shift** hari itu, dan bisa dihapus dari daftar tersebut.


![Tangkapan Layar 2026-07-06 pukul 15.54.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2Fdfb6e65a-e834-4c03-a9a7-e1feeeb93160-Tangkapan_Layar_2026-07-06_pukul_15.54.20.png)

*Tampilan: Form tambah shift*

Mengatur gaji:

1. Pilih karyawan dari daftar untuk membuka detail gajinya.
2. Pilih bulan, lalu isi komponen gaji pada **Tunjangan Tetap**, **Tunjangan Tidak Tetap**, **Potongan Tetap**, dan **Potongan Tidak Tetap** (mis. Gaji Pokok, Transport, Asuransi). Gaji bersih terhitung otomatis.

#### Catatan & Tips

> **Catatan:** Akses ke data shift dan gaji ditentukan oleh izin role. Pengguna tanpa izin manajemen gaji hanya dapat melihat jadwal, tanpa mengubah data gaji, dan sebagian pengguna hanya dapat melihat data dirinya sendiri.

#### Lampiran

- [03 - Manajemen-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2F78b48cd3-5744-444b-b6d7-f9af2386c7a4-03_-_Manajemen-1.png) — image/png, 185 KB
- [03 - Manajemen-2.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2F6745a824-42aa-4d12-a72a-fa1510c65bd2-03_-_Manajemen-2.png) — image/png, 211 KB
- [03 - Manajemen-3.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2Fdc8fedb0-8fab-44d8-8997-43695f24f364-03_-_Manajemen-3.png) — image/png, 127 KB
- [Tangkapan Layar 2026-07-06 pukul 15.47.30.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2F727a5bc2-2c57-42ab-a948-5870572381e8-Tangkapan_Layar_2026-07-06_pukul_15.47.30.png) — image/png, 138 KB
- [Tangkapan Layar 2026-07-06 pukul 15.50.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2F999906e7-259f-425d-a064-212a79bdd486-Tangkapan_Layar_2026-07-06_pukul_15.50.20.png) — image/png, 161 KB
- [Tangkapan Layar 2026-07-06 pukul 15.54.20.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F41%2Fdfb6e65a-e834-4c03-a9a7-e1feeeb93160-Tangkapan_Layar_2026-07-06_pukul_15.54.20.png) — image/png, 116 KB

## Bab 08 — Lain-lain


### Kas Kecil

> Mencatat kas masuk dan kas keluar operasional harian tiap cabang, lengkap dengan lampiran, filter, dan ringkasan total. Dipakai kasir/admin untuk pengeluaran rutin bernilai kecil.

#### Pengertian

Kas Kecil dipakai untuk mencatat transaksi tunai bernilai kecil yang bersifat operasional harian — misalnya pembelian perlengkapan kantor, ongkos kirim, atau biaya perawatan ringan. Setiap catatan langsung memengaruhi saldo akun kas di cabang, sehingga posisi kas selalu terlihat rapi dan mudah diaudit.

#### Fitur Utama

- Mencatat **Kas Masuk** dan **Kas Keluar** dalam satu daftar per cabang.
- Menampilkan **Riwayat Transaksi** berisi jenis, tanggal, jumlah, keterangan, akun, pengguna, dan cabang.
- Ringkasan otomatis: **Total Transaksi Masuk**, **Total Transaksi Keluar**, dan **Total Transaksi**.
- Filter: rentang tanggal, kata kunci keterangan, pengguna, dan akun.
- Lampiran opsional (foto struk, PDF, dokumen) untuk tiap transaksi.

#### Langkah Penggunaan

##### Melihat riwayat kas kecil

1. Masuk ke menu **Lain-lain → Kas Kecil**.
2. Pilih **Cabang** di bagian atas. Jika hak aksesmu terbatas, hanya cabang sendiri yang tersedia.
3. Buka kotak **Pencarian** untuk menyaring data: **Rentang Tanggal**, **Keterangan**, **Pengguna**, atau **Akun**. Daftar akan diperbarui otomatis begitu filter diubah — tidak ada tombol tampilkan terpisah.

Tabel **Riwayat Transaksi** menampilkan jenis (Kas Masuk / Kas Keluar), tanggal, jumlah, keterangan, alur akun, pengguna, dan cabang.


![Tangkapan Layar 2026-07-06 pukul 15.56.52.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F43%2F59ae8c5f-dd66-4983-a3ac-8ce302d9ab09-Tangkapan_Layar_2026-07-06_pukul_15.56.52.png)

*Tampilan: Riwayat transaksi Kas Kecil beserta ringkasan total.*

##### Menambah kas masuk atau kas keluar

1. Klik **Tambah Kas Masuk** (hijau) atau **Tambah Kas Keluar** (merah) di bagian atas.
2. Lengkapi form:
   - **Jenis Transaksi** — Kas Masuk atau Kas Keluar.
   - **Cabang** dan **Pengguna**.
   - **Sumber Dana** dan **Tujuan Dana** — salah satu sisi otomatis terkunci ke akun kas utama; sisi lainnya kamu pilih.
   - **Tanggal** dan **Jumlah**.
   - **Keterangan** (wajib) untuk menjelaskan tujuan penggunaan.
   - **Lampiran** (opsional) — unggah file atau tempel tangkapan layar dengan Ctrl+V / Cmd+V.
3. Klik **Simpan**. Transaksi langsung masuk ke daftar riwayat dan saldo akun ikut diperbarui.


![Tangkapan Layar 2026-07-06 pukul 15.58.05.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F43%2F6266a0e4-ed89-4f3f-aa24-304adfd9d82a-Tangkapan_Layar_2026-07-06_pukul_15.58.05.png)

*Tampilan: Form tambah Kas Masuk / Kas Keluar.*

#### Catatan & Tips

- Setiap transaksi bisa diedit atau dihapus lewat menu titik-tiga pada barisnya, dan lampiran bisa diunduh dari sana. Aksi ini hanya muncul bagi pengguna yang punya hak akses terkait.
- Tombol **Pengaturan** dipakai untuk menentukan akun mana yang berperan sebagai kas utama serta akun sumber/tujuan yang boleh dipilih. Butuh hak akses khusus.
- Melihat cabang lain atau memakai mode lanjutan (memilih kedua akun secara bebas) juga bergantung pada hak akses masing-masing pengguna.

#### Lampiran

- [01 - Kas Kecil-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F43%2F7bb5533a-97da-4ff5-9534-09db483fe41d-01_-_Kas_Kecil-1.png) — image/png, 167 KB
- [01 - Kas Kecilss.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F43%2Fcc115ef7-d23a-4add-a075-c288e6fafd3a-01_-_Kas_Kecilss.png) — image/png, 59 KB
- [Tangkapan Layar 2026-07-06 pukul 15.56.52.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F43%2F59ae8c5f-dd66-4983-a3ac-8ce302d9ab09-Tangkapan_Layar_2026-07-06_pukul_15.56.52.png) — image/png, 457 KB
- [Tangkapan Layar 2026-07-06 pukul 15.58.05.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F43%2F6266a0e4-ed89-4f3f-aa24-304adfd9d82a-Tangkapan_Layar_2026-07-06_pukul_15.58.05.png) — image/png, 110 KB

### Transfer Kas

> Memindahkan dana antar cabang atau antar akun dalam satu cabang, dengan jurnal otomatis dan saldo yang selalu seimbang. Dipakai saat menyetor, memindahkan, atau menyeimbangkan kas.

#### Pengertian

Transfer Kas dipakai untuk memindahkan dana **antar cabang** atau **antar akun kas/bank dalam satu cabang**. Setiap transfer terekam otomatis lengkap dengan jurnalnya, sehingga saldo tiap cabang dan akun tetap akurat dan mudah diaudit.

Ada dua jenis transfer:

- **Transfer Antar Cabang** — dana berpindah dari satu cabang ke cabang lain, dijembatani oleh akun kliring.
- **Transfer Sesama Cabang** — dana berpindah antar akun di dalam cabang yang sama (misalnya dari kas tangan ke kas bank).

#### Fitur Utama

- Mencatat transfer antar cabang maupun sesama cabang.
- Menjaga saldo tetap seimbang karena jurnal dibuat otomatis di kedua sisi.
- Ringkasan **Total Transfer Bersih** per cabang dan kartu **Transfer Terakhir**.
- Rekap **Total Transfer Keluar** dan **Total Transfer Masuk**.
- Riwayat lengkap: tanggal, jenis, jumlah, cabang & akun pengirim/penerima, keterangan, dan pembuat.

#### Langkah Penggunaan

##### Melihat daftar transfer

1. Masuk ke menu **Lain-lain → Transfer Kas**.
2. Pilih **Cabang** yang ingin dilihat. Sistem menampilkan **Total Transfer Bersih** (selisih dana masuk dan keluar untuk cabang itu) serta **Transfer Terakhir**.
3. Tabel **Riwayat Transfer** memuat ID, tanggal, jenis transfer, jumlah, cabang pengirim & penerima, akun sumber & tujuan, keterangan, dan pembuat.


![Tangkapan Layar 2026-07-06 pukul 15.59.51.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2Ffeb8707e-4b15-494c-bc8d-6fd1836dc5f2-Tangkapan_Layar_2026-07-06_pukul_15.59.51.png)

*Tampilan: Riwayat Transfer Kas dengan ringkasan total.*

##### Menambah transfer baru

1. Klik **Tambah Transfer** di bagian atas.
2. Pilih **Jenis Transfer**: **Transfer Antar Cabang** atau **Transfer Sesama Cabang**.
3. Isi form:
   - **Tanggal Transfer** dan **Jumlah Transfer**.
   - **Cabang Pengirim** dan **Akun Sumber Dana** (akun ini akan dikurangi).
   - Untuk antar cabang: **Cabang Penerima**; untuk sesama cabang, penerima otomatis mengikuti cabang yang sama.
   - **Akun Tujuan Dana** (akun ini akan ditambah).
   - **Keterangan Transfer** dan **Lampiran** (opsional, bisa ditempel dengan Ctrl+V / Cmd+V).
4. Periksa **Ringkasan Transfer** yang muncul, lalu klik **Simpan Transfer**. Saldo tiap cabang dan akun langsung diperbarui.


![Tangkapan Layar 2026-07-06 pukul 16.01.14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2F76c8b186-52ad-4f73-b366-69532960012a-Tangkapan_Layar_2026-07-06_pukul_16.01.14.png)

*Tampilan: Form tambah Transfer Kas.*

#### Pengaturan Transfer

Buka lewat tombol **Pengaturan** di kanan atas. Isinya dua tab:

| Jenis | Yang diatur |
|-------|-------------|
| **Transfer Antar Cabang** | Menentukan **Akun Jembatan** (kliring) untuk mencatat perpindahan dana antar cabang, serta menandai akun mana yang boleh dipilih sebagai **Akun Pengirim** dan **Akun Penerima**. |
| **Transfer Sesama Cabang** | Tidak butuh pengaturan khusus — akun sumber dan tujuan dipilih langsung saat membuat transfer. |




![Tangkapan Layar 2026-07-06 pukul 16.02.58.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2Fd4145e9a-e354-4d18-84f1-c5125d8e487a-Tangkapan_Layar_2026-07-06_pukul_16.02.58.png)

*Tampilan: Halaman pengaturan akun transfer antar cabang dan sesama cabang.*

#### Contoh Jurnal Otomatis

Untuk transfer antar cabang sebesar Rp 5.000.000:

**Cabang Pengirim**

| Akun | Posisi | Nilai |
|------|--------|-------|
| Kliring Kas Antar Cabang | Debit | Rp 5.000.000 |
| Kas Tangan | Kredit | Rp 5.000.000 |

**Cabang Penerima**

| Akun | Posisi | Nilai |
|------|--------|-------|
| Kas Bank | Debit | Rp 5.000.000 |
| Kliring Kas Antar Cabang | Kredit | Rp 5.000.000 |

Dana keluar dari kas tangan cabang pengirim dan diterima di kas bank cabang penerima melalui akun kliring. Kedua jurnal selalu seimbang dan konsisten antar cabang.


![Tangkapan Layar 2026-07-06 pukul 16.05.19.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2Ffeaf89cc-e9a0-44a7-ab3f-06b2e0e947e6-Tangkapan_Layar_2026-07-06_pukul_16.05.19.png)

*Tampilan: Contoh alur jurnal otomatis transfer antar cabang.*

#### Catatan & Tips

- Pastikan **Akun Jembatan** sudah diset sebelum melakukan transfer antar cabang; tanpa akun ini transfer tidak bisa disimpan.
- Untuk transfer antar cabang, cabang pengirim dan penerima tidak boleh sama.
- **Jenis transfer tidak dapat diubah** saat mengedit data — hanya rincian lain yang bisa disunting.
- Menghapus atau mengedit transfer, serta membuat transfer antar cabang, bergantung pada hak akses pengguna.
- Data transfer tercatat permanen dan otomatis masuk ke laporan kas & bank.

#### Lampiran

- [02 - Transfer Kas-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2Fcd47c37b-2db4-43c7-b44c-7355bbd77336-02_-_Transfer_Kas-1.png) — image/png, 140 KB
- [02 - Transfer Kass.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2F38d07bd5-f386-4932-991f-783f22a34e5e-02_-_Transfer_Kass.png) — image/png, 54 KB
- [02 - Transfer Kas-4.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2F24b070f8-61ea-4657-b9ef-ca18db5fb8eb-02_-_Transfer_Kas-4.png) — image/png, 543 KB
- [02 - Transfer Kas-5.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2F7953adfd-c4d1-4b4b-ba50-e237626013a4-02_-_Transfer_Kas-5.png) — image/png, 76 KB
- [Tangkapan Layar 2026-07-06 pukul 15.59.51.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2Ffeb8707e-4b15-494c-bc8d-6fd1836dc5f2-Tangkapan_Layar_2026-07-06_pukul_15.59.51.png) — image/png, 150 KB
- [Tangkapan Layar 2026-07-06 pukul 16.01.14.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2F76c8b186-52ad-4f73-b366-69532960012a-Tangkapan_Layar_2026-07-06_pukul_16.01.14.png) — image/png, 118 KB
- [Tangkapan Layar 2026-07-06 pukul 16.02.58.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2Fd4145e9a-e354-4d18-84f1-c5125d8e487a-Tangkapan_Layar_2026-07-06_pukul_16.02.58.png) — image/png, 83 KB
- [Tangkapan Layar 2026-07-06 pukul 16.05.19.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F44%2Ffeaf89cc-e9a0-44a7-ab3f-06b2e0e947e6-Tangkapan_Layar_2026-07-06_pukul_16.05.19.png) — image/png, 45 KB

## Bab 09 — Laporan


### Laporan Pemasukan dan Pengeluaran

> Merekap seluruh arus kas masuk dan keluar toko — penjualan, pembelian, dan kas kecil — per periode, cabang, jam kerja, atau pelaku. Dipakai untuk memantau kondisi keuangan dan saldo kas harian.

#### Pengertian

Laporan **Pemasukan dan Pengeluaran** menampilkan seluruh arus kas masuk (pemasukan) dan kas keluar (pengeluaran) yang tercatat di sistem — mulai dari penjualan, pembelian, hingga kas kecil. Dari sini pemilik atau admin bisa melihat kondisi keuangan toko dan saldo kas untuk periode tertentu.

#### Fitur Utama

- Rekap total pemasukan, pengeluaran, dan saldo per periode: **Harian**, **Bulanan**, **Tahunan**, atau **Kumulatif**.
- Filter berdasarkan jam kerja (mis. shift pagi atau sore), cabang, tipe pembayaran, bank, jenis transaksi, dan pelaku.
- Rincian pemasukan dipecah per metode: Cash, Debit, Kredit, QRIS, dan Asuransi, plus refund penjualan.
- Ekspor ke **CSV** atau **Excel**, serta cetak langsung lewat tombol **Cetak** (tersedia bila akun punya izin ekspor laporan).

#### Langkah Penggunaan

1. Buka menu **Laporan → Pemasukan dan Pengeluaran**.
2. Pada panel **Filter Laporan**, pilih **Tipe Laporan**:
   - **Harian** → transaksi pada rentang tanggal tertentu (bisa disaring per **Jam**).
   - **Bulanan** → rekap satu bulan (pilih **Bulan** dan **Tahun**).
   - **Tahunan** → rekap satu tahun (pilih **Tahun**).
   - **Kumulatif** → seluruh data dari awal hingga sekarang.
3. Tambahkan filter lain sesuai kebutuhan:
   - **Cabang** → lokasi toko (butuh izin lintas cabang untuk memilih cabang lain).
   - **Tipe Pembayaran** → Cash, Debit, Kredit, QRIS, atau Asuransi.
   - **Bank** → menyaring pemasukan non-tunai per bank.
   - **Tipe Pemasukan / Pengeluaran** → Penjualan, Penjualan Antar Cabang, Pembelian, Kas Kecil Masuk, atau Kas Kecil Keluar.
   - **Pelaku** → user yang mencatat transaksi.
4. Laporan diperbarui otomatis setiap filter diubah. Di tampilan HP, buka **Filter Laporan**, atur filter, lalu tekan **Terapkan**.


![Screenshot 2026-07-02 at 14.01.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F46%2F89a1d8f9-73ba-4f08-bb40-176f19be7de0-Screenshot_2026-07-02_at_14.01.26.png)
*Tampilan: Laporan Pemasukan dan Pengeluaran*

Bagian ringkasan di atas tabel menampilkan Total Pemasukan, Total Pengeluaran, Total Saldo, rincian pemasukan per metode (Debit, Kredit, QRIS, Asuransi, Cash), Total Refund Penjualan, Total Pengeluaran Cash, dan Total Sisa Cash. Tabel di bawahnya berisi kolom **Tanggal**, **Pelaku**, **Keterangan**, **Tipe**, **Pemasukan**, **Pengeluaran**, dan **Saldo** (kolom **Cabang** muncul bila lebih dari satu cabang dipilih).

#### Catatan & Tips

- Klik keterangan sebuah baris penjualan atau pembelian untuk membuka detail transaksinya langsung dari laporan.
- Gunakan filter **Jam** untuk memisahkan transaksi per shift saat menutup kas harian.

#### Lampiran

- [01 - Pemasukan dan Pengeluaran-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F46%2F440ce8fc-4013-4a67-b665-77d300d5288b-01_-_Pemasukan_dan_Pengeluaran-1.png) — image/png, 489 KB
- [Screenshot 2026-07-02 at 14.01.26.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F46%2F89a1d8f9-73ba-4f08-bb40-176f19be7de0-Screenshot_2026-07-02_at_14.01.26.png) — image/png, 443 KB

### Laporan Stok Opname

> Menampilkan hasil penyesuaian stok (stok opname) — penambahan, pengurangan, dan nilai rupiahnya — per cabang dan barang. Dipakai untuk rekonsiliasi stok fisik dengan data sistem.

#### Pengertian

Laporan **Stok Opname** menampilkan hasil dari seluruh penyesuaian stok yang sudah dilakukan di sistem. Dari laporan ini terlihat perubahan jumlah stok, nilai penyesuaian, serta selisih antara data fisik dan data sistem pada periode tertentu.

#### Fitur Utama

- Rincian hasil opname per cabang dan per barang, lengkap dengan pelaku dan tanggal pelaksanaan.
- Total penambahan dan pengurangan kuantitas beserta nilai rupiahnya.
- Nilai bersih penyesuaian (**Net Adjustment Value**) untuk melihat dampak opname ke nilai persediaan.
- Filter mendalam berdasarkan cabang, kategori, brand, ukuran lensa, dan warna.
- Ekspor ke **CSV** atau **Excel**, serta cetak lewat tombol **Cetak**.

#### Langkah Penggunaan

1. Buka menu **Laporan → Stok Opname**.
2. Tentukan **Tanggal** periode opname yang ingin ditampilkan.
3. Gunakan **Filter Laporan** untuk mempersempit hasil:
   - **Cabang** → lokasi toko atau gudang.
   - **Kategori Barang** dan **Sub Kategori Barang**.
   - **Brand Barang** dan **Sub Brand Barang**.
   - **Ukuran Spherical** dan **Ukuran Cylinder** (untuk lensa).
   - **Warna** dan **Sub Warna**.
4. Klik **Buat Laporan** untuk menampilkan hasil opname.

Ringkasan di atas tabel menampilkan **Total Penambahan Kuantitas**, **Total Pengurangan Kuantitas**, **Total Nilai Penambahan**, **Total Nilai Pengurangan**, dan **Net Adjustment Value**.


![Screenshot 2026-07-02 at 14.04.39.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F47%2Fb86c71b1-e1e7-443d-b5ac-fc063b779e8d-Screenshot_2026-07-02_at_14.04.39.png)
*Tampilan: Laporan Stok Opname*

Tabel detail berisi kolom **Tanggal**, **Cabang**, **Barang**, **Kuantitas**, **Nilai**, **User**, dan **Keterangan**.

#### Catatan & Tips

- Gunakan laporan ini untuk merekonsiliasi hitungan fisik gudang dengan angka di sistem setelah setiap sesi opname.
- Nilai rupiah penyesuaian membantu memperkirakan dampak selisih stok terhadap nilai persediaan.

#### Lampiran

- [02 - Stok Opname.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F47%2Fb28a6484-0b91-492e-b235-a225fcd7d458-02_-_Stok_Opname.png) — image/png, 180 KB
- [Screenshot 2026-07-02 at 14.04.39.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F47%2Fb86c71b1-e1e7-443d-b5ac-fc063b779e8d-Screenshot_2026-07-02_at_14.04.39.png) — image/png, 292 KB

### Laporan Penghapusan Persediaan

> Mencatat seluruh penghapusan (write-off) stok barang — kuantitas, nilai kerugian, cabang, dan pelakunya — per periode. Dipakai untuk audit stok dan pengendalian inventori.

#### Pengertian

Laporan **Penghapusan Persediaan** menampilkan daftar barang yang dihapus dari stok melalui proses penghapusan (write-off) di modul gudang. Laporan ini merinci barang yang dihapus, nilai kerugiannya, tanggal, cabang, dan user yang melakukannya.

#### Fitur Utama

- Daftar penghapusan stok per periode beserta jumlah dan nilai rupiahnya.
- Total kuantitas dan total nilai barang yang dihapus untuk keperluan audit.
- Filter berdasarkan cabang, kategori, brand, ukuran lensa, dan warna.
- Ekspor ke **CSV** atau **Excel**, serta cetak lewat tombol **Cetak**.

#### Langkah Penggunaan

1. Buka menu **Laporan → Penghapusan Persediaan**.
2. Tentukan **Tanggal** rentang waktu laporan yang ingin ditampilkan.
3. Gunakan **Filter Laporan** untuk mempersempit hasil:
   - **Cabang** → lokasi toko atau gudang.
   - **Kategori Barang** dan **Sub Kategori Barang**.
   - **Brand Barang** dan **Sub Brand Barang**.
   - **Ukuran Spherical** dan **Ukuran Cylinder** (untuk lensa).
   - **Warna** dan **Sub Warna**.
4. Klik **Buat Laporan** untuk menampilkan data.

Ringkasan di atas tabel menampilkan **Total Kuantitas Dihapus** dan **Total Nilai Dihapus**.


![Screenshot 2026-07-02 at 14.06.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F48%2Ffa08d511-c593-4ff4-b2cb-da81e7e20dfe-Screenshot_2026-07-02_at_14.06.57.png)
*Tampilan: Laporan Penghapusan Persediaan per Periode*

Tabel detail berisi kolom **Tanggal**, **Cabang**, **Barang**, **Kuantitas**, **Nilai**, **User**, dan **Keterangan**.

#### Catatan & Tips

- Gunakan laporan ini setelah melakukan penghapusan stok di modul gudang untuk memastikan setiap penghapusan tercatat resmi.
- Hasilnya bisa disandingkan dengan **Laporan Stok Opname** untuk menjaga konsistensi data persediaan.

#### Lampiran

- [03 - Penghapusan Persediaan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F48%2F63feb3da-2dcf-4b57-8567-3107f880a036-03_-_Penghapusan_Persediaan.png) — image/png, 196 KB
- [Screenshot 2026-07-02 at 14.06.57.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F48%2Ffa08d511-c593-4ff4-b2cb-da81e7e20dfe-Screenshot_2026-07-02_at_14.06.57.png) — image/png, 173 KB

### Laporan Penjualan

> Merekap performa penjualan — jumlah transaksi, pelanggan, subtotal, diskon, dan total bersih — per periode dengan grafik tren. Dipakai manajer untuk evaluasi omzet per cabang.

#### Pengertian

Laporan **Penjualan** menampilkan rekap seluruh transaksi penjualan di sistem. Dari sini pemilik atau manajer bisa memantau performa penjualan per cabang, pelanggan, maupun pelaku, untuk periode harian, bulanan, tahunan, atau kumulatif.

#### Fitur Utama

- Rekap jumlah transaksi, jumlah pelanggan, subtotal, diskon, dan total bersih per periode.
- Grafik tren penjualan (line chart) pada mode Bulanan, Tahunan, dan Kumulatif.
- Filter berdasarkan cabang, pelanggan, pelaku, dan barang dari supplier tertentu.
- Pilihan dasar perhitungan tanggal: **Penjualan Selesai** (tanggal invoice) atau **Order Penjualan** (tanggal order).
- Ekspor ke **CSV** atau **Excel** untuk analisis lanjutan.

#### Langkah Penggunaan

1. Buka menu **Laporan → Penjualan**.
2. Pada **Filter Laporan**, pilih **Tipe Laporan**: **Harian**, **Bulanan**, **Tahunan**, atau **Kumulatif**, lalu tentukan tanggal/bulan/tahun periodenya.
3. Tambahkan filter lain sesuai kebutuhan:
   - **Jenis Penjualan** → Semua, Langsung, atau Order.
   - **Cabang**, **Pelanggan**, dan **Pelaku** (kasir/sales).
   - **Barang dari Supplier** → menyaring berdasarkan asal supplier.
   - **Agregasi Berdasarkan**:
     - **Penjualan Selesai** → penjualan yang sudah diambil/diselesaikan, dihitung dari tanggal invoice.
     - **Order Penjualan** → semua penjualan dihitung dari tanggal order, termasuk yang belum selesai.
4. Laporan diperbarui otomatis mengikuti filter. Di tampilan HP, buka **Filter Laporan**, atur, lalu tekan **Terapkan**.

Ringkasan menampilkan **Jumlah Transaksi**, **Jumlah Pelanggan**, **Sub Total** (sebelum diskon), **Total Diskon**, dan **Total** (setelah diskon). Pada mode Bulanan, Tahunan, dan Kumulatif, tampil pula grafik tren omzet.


![Screenshot 2026-07-02 at 14.08.40.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F49%2F79b59754-f14e-4911-9494-28bf33126599-Screenshot_2026-07-02_at_14.08.40.png)
*Tampilan: Laporan Penjualan Tahunan dengan grafik tren*

#### Catatan & Tips

- Gunakan **Laporan Bulanan** atau **Tahunan** untuk membandingkan tren omzet antar periode.
- Kolom **HPP** hanya tampil bagi akun yang punya izin melihat harga pokok.

#### Lampiran

- [04 - Penjualan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F49%2F925c89bc-0862-4971-8e68-54493ddc1eeb-04_-_Penjualan.png) — image/png, 468 KB
- [Screenshot 2026-07-02 at 14.08.40.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F49%2F79b59754-f14e-4911-9494-28bf33126599-Screenshot_2026-07-02_at_14.08.40.png) — image/png, 464 KB

### Laporan Penjualan Barang

> Merinci penjualan per barang — jumlah terjual, kategori, brand, harga jual, dan sales yang menangani. Dipakai untuk analisis produk terlaris dan dasar perhitungan komisi.

#### Pengertian

Laporan **Penjualan Barang** menampilkan rincian penjualan setiap barang secara detail: jumlah terjual, kategori, brand, harga jual, pelanggan, dan sales yang menangani transaksi. Berguna untuk menganalisis performa produk dan mengenali barang terlaris.

#### Fitur Utama

- Daftar barang yang terjual dalam periode tertentu, lengkap dengan harga jual, jumlah, pelanggan, dan sales.
- Filter mendalam berdasarkan cabang, sales, pelanggan, kategori, brand, ukuran lensa, dan warna.
- Cocok untuk analisis produk terlaris, evaluasi stok, dan perhitungan komisi per sales.
- Ekspor ke **CSV** atau **Excel**, serta cetak lewat tombol **Cetak**.

#### Langkah Penggunaan

1. Buka menu **Laporan → Penjualan Barang**.
2. Tentukan **Tanggal** periode penjualan yang ingin ditampilkan.
3. Gunakan **Filter Laporan** untuk menyesuaikan hasil:
   - **Cabang**, **Sales**, dan **Pelanggan**.
   - **Kategori Barang** dan **Sub Kategori Barang**.
   - **Brand Barang** dan **Sub Brand Barang**.
   - **Ukuran Spherical**, **Ukuran Cylinder**, dan **Ukuran Additional** (untuk lensa).
   - **Warna** dan **Sub Warna**.
4. Klik **Buat Laporan** untuk menampilkan barang terjual.

Ringkasan di atas tabel menampilkan **Jumlah Data**, **Total Penjualan (Rp)**, dan **Item Total**.


![Screenshot 2026-07-02 at 14.10.52.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F50%2F3888da09-4c59-4acc-8cc7-6f4973a77a07-Screenshot_2026-07-02_at_14.10.52.png)
*Tampilan: Laporan Penjualan Barang per Periode*

Tabel detail berisi kolom **Cabang**, **Tanggal**, **Pelanggan**, **Barang**, **Jumlah**, **Kategori**, **Brand**, **Harga Jual**, dan **Sales**.

#### Catatan & Tips

- Bandingkan hasil antar cabang untuk menentukan strategi stok dan produk mana yang perlu ditambah.
- Laporan ini bisa dipakai sebagai dasar perhitungan komisi penjualan per sales.

#### Lampiran

- [05 - Penjualan Barang.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F50%2Fcb21c422-d3df-428e-921f-be6219dc2980-05_-_Penjualan_Barang.png) — image/png, 149 KB
- [Screenshot 2026-07-02 at 14.10.52.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F50%2F3888da09-4c59-4acc-8cc7-6f4973a77a07-Screenshot_2026-07-02_at_14.10.52.png) — image/png, 224 KB

### Laporan Komisi Penjualan

> Merinci komisi yang diterima tiap sales atau pekerja dari penjualan dan pembuatan kacamata (Fasset), lengkap dengan status sudah/belum dibayar. Dipakai admin untuk rekonsiliasi insentif.

#### Pengertian

Laporan **Komisi Penjualan** menampilkan rincian komisi yang diterima setiap sales atau pekerja, baik dari transaksi penjualan maupun dari pekerjaan pembuatan kacamata (Fasset). Laporan ini memudahkan bagian administrasi dan keuangan memantau komisi yang sudah maupun belum dibayar per cabang dan karyawan.

#### Fitur Utama

- Daftar komisi per periode beserta status pembayarannya (sudah/belum dibayar).
- Filter berdasarkan tipe komisi, cabang, sales/pekerja, dan status pembayaran.
- Ringkasan total dibayar, total belum dibayar, dan jumlah komisi.
- Ekspor hasil ke **CSV**, serta cetak lewat tombol **Cetak**.

#### Langkah Penggunaan

1. Buka menu **Laporan → Komisi Penjualan**.
2. Tentukan **Tanggal** periode komisi yang ingin ditampilkan.
3. Gunakan **Filter Laporan** untuk mempersempit hasil:
   - **Tipe Komisi**:
     - **Semua Komisi** → seluruh jenis komisi.
     - **Komisi Penjualan** → komisi dari transaksi penjualan produk.
     - **Komisi Fasset** → komisi dari pekerjaan Fasset (pembuatan kacamata).
   - **Cabang** → lokasi transaksi.
   - **Sales/Pekerja** → penerima komisi.
   - **Status Pembayaran** → Semua, Dibayar, atau Belum Dibayar.
4. Klik **Buat Laporan** untuk menampilkan hasil.

Ringkasan di atas tabel menampilkan **Total Dibayar**, **Total Belum Dibayar**, dan **Jumlah Komisi**.

| Kolom | Keterangan |
|-------|------------|
| **Cabang** | Cabang tempat transaksi dilakukan |
| **Tanggal** | Tanggal transaksi atau pekerjaan Fasset |
| **No. Transaksi** | Nomor referensi transaksi penjualan |
| **Pelanggan** | Nama pelanggan terkait |
| **Tipe** | Penjualan atau Fasset |
| **Barang** | Produk atau layanan yang menghasilkan komisi |
| **Sales/Pekerja** | Nama penerima komisi |
| **Komisi** | Nominal komisi yang diterima |
| **Status** | Sudah Dibayar (beserta bulan gaji) atau Belum Dibayar |


![Screenshot 2026-07-02 at 14.13.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F51%2F0c7f6cba-8b5b-4142-8f7e-8cf9aafbcb89-Screenshot_2026-07-02_at_14.13.33.png)
*Tampilan: Laporan Komisi Penjualan*

#### Catatan & Tips

- Nominal komisi dihitung otomatis dari pengaturan bonus penjualan pada brand/sub-brand (**Master → Brand** atau **Master → Sub Brand**), sedangkan komisi Fasset mengikuti pengaturan Fasset. Setiap transaksi atau pekerjaan yang selesai langsung tercatat komisinya di laporan ini.
- Gunakan filter **Belum Dibayar** untuk memantau komisi yang masih tertunda.
- Data ini bisa jadi dasar perhitungan gaji, bonus, atau insentif bulanan.

> **Catatan:** Tipe komisi yang bisa dilihat mengikuti izin akun — misalnya akun tanpa izin komisi Fasset tidak akan melihat opsi tersebut.

#### Lampiran

- [06 - Komisi Penjualan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F51%2F50d433cd-c6cd-47b0-926b-ad8ea83a2a60-06_-_Komisi_Penjualan.png) — image/png, 192 KB
- [Screenshot 2026-07-02 at 14.13.33.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F51%2F0c7f6cba-8b5b-4142-8f7e-8cf9aafbcb89-Screenshot_2026-07-02_at_14.13.33.png) — image/png, 132 KB

### Laporan Penjualan Belum Diambil

> Menampilkan transaksi penjualan yang belum selesai — barang belum diambil atau pembayaran belum lunas — beserta sisa pembayarannya. Dipakai kasir untuk follow-up pesanan tertunda.

#### Pengertian

Laporan **Penjualan Belum Diambil** menampilkan transaksi penjualan yang belum selesai, entah karena barang belum diambil pelanggan atau pembayaran masih menyisakan saldo (belum lunas). Laporan ini membantu kasir dan bagian penjualan memantau pesanan yang perlu ditindaklanjuti.

#### Fitur Utama

- Daftar semua transaksi yang belum diambil atau belum lunas.
- Perhitungan total sisa pembayaran pelanggan.
- Membantu cross-check barang fisik yang masih di toko/gudang dan follow-up pelanggan.
- Ekspor ke **CSV** atau **Excel**, serta cetak lewat tombol **Cetak**.

#### Langkah Penggunaan

1. Buka menu **Laporan → Penjualan Belum Diambil**.
2. Tentukan **Tanggal** periode transaksi yang ingin diperiksa.
3. Pilih **Cabang** untuk menampilkan data per lokasi toko.
4. Klik **Buat Laporan** untuk menampilkan daftar transaksi yang belum diambil.

Ringkasan di atas tabel menampilkan **Jumlah Data**, **Total Penjualan**, dan **Total Sisa Pembayaran**.

| Kolom | Keterangan |
|-------|------------|
| **ID** | Nomor transaksi penjualan |
| **Cabang** | Cabang tempat transaksi dilakukan |
| **Tanggal** | Tanggal transaksi |
| **Pelanggan** | Nama pelanggan terkait |
| **Total** | Nilai total transaksi |
| **Terbayar** | Jumlah yang sudah dibayar |
| **Sisa Pembayaran** | Nilai yang belum dilunasi |

![07 - Penjualan Belum Diambil.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F52%2Ffaf18c71-b6b2-4310-9630-6432edb30714-07_-_Penjualan_Belum_Diambil.png)
*Tampilan: Laporan Penjualan Belum Diambil*

#### Catatan & Tips

- Gunakan laporan ini setiap akhir hari untuk memastikan tidak ada pesanan yang tertinggal.
- Cocok dipakai kasir, sales counter, dan admin gudang untuk cross-check barang fisik dan mengingatkan pelanggan.

#### Lampiran

- [07 - Penjualan Belum Diambil.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F52%2Ffaf18c71-b6b2-4310-9630-6432edb30714-07_-_Penjualan_Belum_Diambil.png) — image/png, 126 KB

### Laporan Pembelian

> Menampilkan seluruh transaksi pembelian barang per periode, lengkap dengan nilai, status penerimaan, dan status pembayaran ke supplier. Dipakai bagian pembelian dan keuangan untuk memantau dan merekonsiliasi pembelian.

#### Pengertian

Laporan Pembelian menampilkan seluruh transaksi pembelian barang dalam periode tertentu. Dari sini toko bisa memantau total nilai pembelian, status pembayaran ke supplier, dan jumlah barang yang sudah diterima di tiap cabang.

Laporan ini dipakai bagian pembelian dan keuangan untuk memastikan setiap transaksi tercatat benar dan mudah dicocokkan saat rekonsiliasi.

#### Fitur Utama

- Menampilkan daftar order pembelian per periode, dengan baris yang bisa dibuka untuk melihat rincian item, pembayaran, dan penerimaan barang.
- Menyaring laporan berdasarkan cabang, supplier, kategori barang, supplier cabang, tipe pembelian, status item, dan status pembayaran.
- Menampilkan ringkasan otomatis: total nilai pembelian, total dibayar, jumlah order, dan jumlah item.
- Mengekspor hasil ke CSV dan mencetak laporan (perlu izin ekspor).

> **Catatan:** Kolom nilai (Total Nilai dan Total Dibayar) hanya muncul untuk pengguna yang punya izin melihat harga. Tanpa izin itu, laporan tetap tampil tetapi tanpa angka rupiah.

#### Langkah Penggunaan

1. Masuk ke menu **Laporan → Pembelian**.
2. Tentukan **Tanggal** periode transaksi (secara bawaan 30 hari terakhir).
3. Atur **Filter Laporan** seperlunya:
   - **Cabang** — pembelian di cabang tertentu (memilih cabang lain butuh izin).
   - **Supplier** — pemasok tertentu.
   - **Kategori** — kategori barang yang dibeli.
   - **Supplier Cabang** — cabang pemasok, bila relevan.
   - **Tipe Pembelian** — **Eksternal (Supplier)** atau **Internal (Antar Cabang)**.
   - **Status Item** — Pending, Telah Pesan, Terkirim, Diterima Sebagian, atau Diterima.
   - **Status Pembayaran** — Belum Dibayar, Dibayar Sebagian, atau Sudah Dibayar.
4. Klik **Buat Laporan** untuk menampilkan hasilnya.

#### Hasil Laporan

Tabel hasil menampilkan kolom berikut:

| Kolom | Keterangan |
|-------|------------|
| **Cabang** | Cabang tempat barang diterima |
| **Tipe** | Eksternal (Supplier) atau Internal (Antar Cabang) |
| **Supplier** | Nama pemasok barang |
| **Tanggal Order** | Tanggal order pembelian dibuat |
| **Total Nilai** | Nilai total order (perlu izin harga) |
| **Total Dibayar** | Jumlah yang sudah dibayarkan ke supplier (perlu izin harga) |
| **Jml Item** | Jumlah barang yang dipesan |
| **Status Item** | Status penerimaan barang |
| **Keterangan** | Catatan tambahan order |

Klik tanda panah di kolom pertama untuk membuka rincian sebuah order: daftar item beserta harga, riwayat pembayaran, dan riwayat penerimaan barang (faktur dan jumlah diterima).

Di atas tabel ada ringkasan: **Total Nilai Pembelian**, **Total Dibayar**, **Jumlah Order**, dan **Jumlah Item** untuk periode yang dipilih.

![08 - Pembelian.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F53%2F8a5457b8-9bed-46df-b0bc-077ba3a6670a-08_-_Pembelian.png)

*Tampilan: Laporan Pembelian di Lensiro*

#### Catatan & Tips

- Pakai filter **Status Pembayaran = Belum Dibayar** untuk memantau tagihan supplier yang masih tertunda.
- Cocok untuk rekonsiliasi keuangan bulanan dengan supplier.
- Gunakan hasil ekspor CSV untuk dicocokkan dengan Laporan Hutang Pembelian.

#### Lampiran

- [08 - Pembelian.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F53%2F8a5457b8-9bed-46df-b0bc-077ba3a6670a-08_-_Pembelian.png) — image/png, 163 KB

### Laporan Hutang Pembelian

> Menampilkan sisa kewajiban pembayaran ke supplier, dikelompokkan per supplier lengkap dengan umur hutang dan tanggal jatuh tempo. Dipakai bagian keuangan untuk menjadwalkan pembayaran dan menghindari keterlambatan.

#### Pengertian

Laporan Hutang Pembelian menampilkan sisa kewajiban pembayaran kepada supplier dari order pembelian yang belum lunas. Data dikelompokkan per supplier, sehingga mudah melihat siapa yang masih harus dibayar dan seberapa besar.

Laporan ini membantu bagian keuangan menjadwalkan pembayaran, memantau hutang yang lewat jatuh tempo, dan menjaga keseimbangan arus kas.

#### Fitur Utama

- Mengelompokkan hutang per supplier, dengan baris yang bisa dibuka untuk melihat rincian tiap order (tanggal order, tanggal terima, jatuh tempo, nomor faktur, umur hutang, dan hari lewat tempo).
- Menghitung total nilai, total terbayar, sisa hutang, dan persentase pelunasan tiap supplier.
- Menampilkan analisis umur hutang: nilai yang belum jatuh tempo dan yang sudah lewat jatuh tempo.
- Menyaring laporan berdasarkan cabang dan supplier.
- Mengekspor hasil ke CSV dan mencetak laporan (perlu izin ekspor).

#### Langkah Penggunaan

1. Masuk ke menu **Laporan → Hutang Pembelian**.
2. Tentukan **Periode** laporan (secara bawaan 30 hari terakhir).
3. Atur filter seperlunya:
   - **Cabang** — cabang tempat transaksi dilakukan (memilih cabang lain butuh izin).
   - **Supplier** — hutang ke pemasok tertentu (opsional).
4. Klik **Buat Laporan** untuk menampilkan daftar hutang.

#### Hasil Laporan

Setiap baris mewakili satu supplier:

| Kolom | Keterangan |
|-------|------------|
| **Supplier** | Nama pemasok |
| **Jumlah Order** | Banyaknya order yang masih terkait hutang |
| **Total Nilai** | Total nilai seluruh order supplier tersebut |
| **Total Terbayar** | Jumlah yang sudah dibayarkan |
| **Sisa Hutang** | Nilai yang masih belum dilunasi |
| **Progress** | Persentase pelunasan (0–100%) |
| **Paling Telat** | Tanggal jatuh tempo tertua yang sudah lewat, beserta jumlah hari telat |

Buka sebuah baris untuk melihat rincian per order: ID order, tanggal order, tanggal terima, jatuh tempo, nomor faktur, status item, status bayar, total, terbayar, sisa, umur hutang, dan hari lewat tempo. Klik ID atau nomor faktur untuk membuka detail order.

Di atas tabel ada ringkasan otomatis: **Total Hutang**, **Total Terbayar**, **Lewat Jatuh Tempo**, **Jumlah Order**, **Jumlah Supplier**, dan **Rata-rata Umur Hutang**. Ada pula dua kotak analisis umur hutang: **Belum Jatuh Tempo** dan **Telat (Lewat Jatuh Tempo)**.

![09 - Hutang Pembelian.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F54%2F4951fefd-d380-4133-bbb1-61259e672b61-09_-_Hutang_Pembelian.png)

*Tampilan: Laporan Hutang Pembelian di Lensiro*

#### Catatan & Tips

- Pakai kolom **Paling Telat** dan kotak **Telat (Lewat Jatuh Tempo)** untuk memprioritaskan pembayaran yang paling mendesak.
- Bandingkan dengan Laporan Pembelian untuk memastikan nilai hutang cocok.
- Cocok dipakai divisi akuntansi dan keuangan saat menjadwalkan pembayaran supplier secara berkala.

#### Lampiran

- [09 - Hutang Pembelian.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F54%2F4951fefd-d380-4133-bbb1-61259e672b61-09_-_Hutang_Pembelian.png) — image/png, 118 KB

### Laporan Pembelian Retur

> Menampilkan seluruh pengembalian barang ke supplier dalam periode tertentu, beserta jumlah item dan nilai retur. Dipakai bagian pembelian dan gudang untuk mengontrol barang yang dikembalikan.

#### Pengertian

Laporan Pembelian Retur menampilkan seluruh pengembalian barang ke supplier — karena kerusakan, salah kirim, cacat produksi, atau alasan lain — dalam periode tertentu.

Laporan ini membantu bagian pembelian dan gudang mengontrol barang yang dikembalikan dan memantau nilainya agar proses retur tercatat rapi.

#### Fitur Utama

- Menampilkan daftar transaksi retur pembelian per periode, dengan baris yang bisa dibuka untuk melihat rincian item yang diretur.
- Menampilkan jumlah retur, jumlah item yang diretur, dan total nilai retur.
- Menyaring data berdasarkan cabang dan supplier.
- Mengekspor hasil ke CSV dan mencetak laporan (perlu izin ekspor).

> **Catatan:** Kolom Total Nilai hanya muncul untuk pengguna yang punya izin melihat harga. Nilai retur dihitung dari harga pokok (cost price) barang.

#### Langkah Penggunaan

1. Masuk ke menu **Laporan → Pembelian Retur**.
2. Tentukan **Tanggal** laporan (secara bawaan 30 hari terakhir).
3. Pilih **Cabang** (opsional; memilih cabang lain butuh izin).
4. Pilih **Supplier** (opsional).
5. Klik **Buat Laporan**.

#### Hasil Laporan

Tabel hasil menampilkan kolom:

| Kolom | Keterangan |
|-------|------------|
| **Cabang** | Cabang tempat retur terjadi |
| **Supplier** | Supplier yang barangnya diretur |
| **Tanggal Buat** | Tanggal retur dibuat |
| **Jumlah** | Total kuantitas barang yang diretur |
| **Total Nilai** | Total nilai retur (perlu izin harga) |
| **Keterangan** | Catatan tambahan, bila ada |

Buka sebuah baris untuk melihat rincian item yang diretur. Di atas tabel ada ringkasan: **Jumlah Retur**, **Jumlah Item Retur**, dan **Total Nilai Retur**.

![10 - Pembelian Retur.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F55%2Ffb97a4ba-8a8c-4dd9-90f4-cad73ad9e8bc-10_-_Pembelian_Retur.png)

*Tampilan: Laporan Pembelian Retur*

#### Catatan & Tips

- Pakai laporan ini untuk memastikan setiap barang cacat atau salah kirim benar-benar tercatat kembali ke supplier.
- Cocokkan dengan Laporan Pembelian untuk memverifikasi nilai bersih pembelian setelah retur.

#### Lampiran

- [10 - Pembelian Retur.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F55%2Ffb97a4ba-8a8c-4dd9-90f4-cad73ad9e8bc-10_-_Pembelian_Retur.png) — image/png, 163 KB

### Laporan Stok

> Menampilkan jumlah dan nilai stok barang per cabang, bisa disaring hingga kategori, brand, warna, dan ukuran optik. Dipakai untuk mengecek ketersediaan barang dan mencetak barcode.

#### Pengertian

Laporan Stok menampilkan jumlah stok barang beserta nilainya dalam rupiah, per cabang. Laporan bisa dilihat menyeluruh atau disaring sampai ke kategori, brand, warna, dan ukuran optik tertentu.

Tujuannya memudahkan pengecekan ketersediaan barang dan kontrol inventaris di semua cabang.

#### Fitur Utama

- Menampilkan total stok dan total nilai stok (Total Stock Worth, dihitung dari harga jual dikali jumlah stok).
- Memilih **Jenis Stok** yang ditampilkan: semua barang, hanya barang yang tersedia (stok positif), atau barang yang perlu dipesan (stok minus).
- Menyaring data berdasarkan cabang, kategori, sub kategori, brand, sub brand, ukuran Spherical, ukuran Cylinder, dan warna.
- Mencetak barcode barang langsung dari laporan.
- Mengekspor hasil ke CSV dan mencetak laporan (perlu izin ekspor).

#### Langkah Penggunaan

1. Masuk ke menu **Laporan → Stok**.
2. Tentukan **Tanggal** (secara bawaan 30 hari terakhir).
3. Pilih **Jenis Stok** yang ingin ditampilkan:
   - **Tampilkan Semua Barang**
   - **Tampilkan Barang yang Tersedia di Stock** (stok lebih dari 0)
   - **Tampilkan Barang yang Perlu Dipesan** (stok kurang dari 0)
4. Atur filter tambahan seperlunya: cabang, kategori barang, sub kategori, brand, sub brand, ukuran Spherical, ukuran Cylinder, dan warna.
5. Klik **Buat Laporan** untuk menampilkan hasil.

#### Hasil Laporan

Di atas tabel ada ringkasan:

| Informasi | Keterangan |
|-----------|------------|
| **Total Stock** | Jumlah total stok dari barang yang ditampilkan |
| **Total Stock Worth** | Total nilai rupiah stok (harga jual × jumlah stok) |

Tabel menampilkan kolom: **Cabang**, **Barang**, **Brand**, **Sub Brand**, **Warna**, **SPH**, **Stok**, **Harga Jual**, dan **Keterangan**.

![11 - Stok.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F56%2Fe48a3940-39f9-4190-aded-b1b4c31aa740-11_-_Stok.png)

*Tampilan: Laporan Stok*

#### Catatan & Tips

- Pilih **Barang yang Perlu Dipesan** untuk cepat melihat barang yang stoknya minus dan perlu segera diorder.
- Gunakan tombol cetak barcode di laporan untuk mencetak label barang tanpa membuka menu lain.
- Untuk data besar, laporan dimuat bertahap; tunggu sampai proses pemuatan selesai sebelum mengekspor atau mencetak.

#### Lampiran

- [11 - Stok.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F56%2Fe48a3940-39f9-4190-aded-b1b4c31aa740-11_-_Stok.png) — image/png, 168 KB

### Laporan Perubahan Stok

> Menampilkan seluruh pergerakan stok masuk dan keluar dalam periode tertentu, beserta sisa stok per barang. Dipakai untuk memantau pola pergerakan stok dan menelusuri penyebab perubahannya.

#### Pengertian

Laporan Perubahan Stok menampilkan seluruh aktivitas perubahan stok dalam periode tertentu — baik penambahan (stok masuk) maupun pengurangan (stok keluar) — yang muncul dari proses seperti pembelian, penjualan, retur, atau mutasi antar cabang.

Laporan ini berguna untuk mengetahui seberapa besar stok bergerak dalam rentang waktu tertentu dan menelusuri penyebab tiap perubahan.

#### Fitur Utama

- Menampilkan jumlah total transaksi perubahan stok dan jumlah barang yang terpengaruh.
- Menghitung total penambahan, total pengurangan, perubahan bersih, dan rata-rata perubahan per hari.
- Menyaring data berdasarkan cabang, kategori, sub kategori, brand, sub brand, ukuran Spherical, ukuran Cylinder, warna, sub warna, dan nama barang.
- Mengekspor hasil ke CSV dan mencetak laporan (perlu izin ekspor).

#### Langkah Penggunaan

1. Masuk ke menu **Laporan → Perubahan Stok**.
2. Pilih rentang **Tanggal** laporan (secara bawaan 30 hari terakhir).
3. Pilih **Cabang** (wajib, satu cabang; memilih cabang lain butuh izin).
4. Atur filter tambahan seperlunya: kategori, sub kategori, brand, sub brand, ukuran Spherical, ukuran Cylinder, warna, sub warna, dan nama barang.
5. Klik **Buat Laporan**.

#### Hasil Laporan

Di atas tabel ada ringkasan:

| Informasi | Keterangan |
|-----------|------------|
| **Total Transaksi** | Jumlah transaksi perubahan stok |
| **Jumlah Barang** | Jumlah barang berbeda yang berubah |
| **Perubahan Bersih** | Selisih total penambahan dan pengurangan |
| **Total Penambahan** | Total stok masuk |
| **Total Pengurangan** | Total stok keluar |
| **Rata-rata Perubahan/Hari** | Rata-rata pergerakan stok per hari |

Tabel menampilkan kolom: **Cabang**, **Tanggal**, **Barang**, **Jenis** (jenis perubahan), **Kuantitas**, **Sisa** (stok terkini barang di cabang), dan **Keterangan**.

![12 - Perubahan Stok.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F57%2F58dcab94-7c54-4fd9-b13a-90ecd666acc1-12_-_Perubahan_Stok.png)

*Tampilan: Laporan Perubahan Stok*

#### Catatan & Tips

- Kolom **Kuantitas** bernilai positif untuk stok masuk dan negatif untuk stok keluar.
- Pakai filter **Nama** barang untuk menelusuri seluruh riwayat pergerakan satu barang tertentu.

#### Lampiran

- [12 - Perubahan Stok.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F57%2F58dcab94-7c54-4fd9-b13a-90ecd666acc1-12_-_Perubahan_Stok.png) — image/png, 194 KB

### Laporan Kas Kecil

> Menampilkan transaksi kas masuk dan kas keluar dari akun kas kecil dalam periode tertentu. Dipakai bagian keuangan untuk memantau pergerakan kas operasional harian.

#### Pengertian

Laporan Kas Kecil menampilkan transaksi kas masuk dan kas keluar yang melewati akun-akun kas kecil di Lensiro.

Laporan ini membantu bagian keuangan memantau pergerakan kas operasional dalam periode tertentu — siapa yang melakukan transaksi, dari akun mana ke akun mana, dan berapa dana yang dipakai.

#### Fitur Utama

- Menampilkan total kas masuk, total kas keluar, jumlah transaksi, dan saldo kas dalam periode.
- Memilih **Tipe Laporan**: Harian, Bulanan, Tahunan, atau Kumulatif — yang otomatis menyesuaikan rentang tanggal.
- Menyaring laporan berdasarkan cabang, dari akun, ke akun, user, dan tipe transaksi (kas masuk atau kas keluar).
- Mengekspor hasil ke CSV dan mencetak laporan (perlu izin ekspor).

> **Catatan:** Laporan diperbarui otomatis saat filter diubah — tidak ada tombol **Buat Laporan** di halaman ini.

#### Langkah Penggunaan

1. Masuk ke menu **Laporan → Kas Kecil**.
2. Pilih **Tipe Laporan** (Harian, Bulanan, Tahunan, atau Kumulatif), lalu atur tanggal, bulan, atau tahun sesuai pilihan itu.
3. Atur filter seperlunya:
   - **Cabang** (memilih cabang lain butuh izin)
   - **Dari Akun** dan **Ke Akun** (pilihan akun mengikuti izin masing-masing pengguna)
   - **User** yang melakukan transaksi
   - **Tipe Transaksi** — Kas Masuk atau Kas Keluar
4. Hasil tampil otomatis di bagian kanan.

#### Hasil Laporan

Ringkasan di bagian atas menampilkan:

| Informasi | Keterangan |
|-----------|------------|
| **Total Kas Masuk** | Total dana yang diterima ke akun kas kecil |
| **Total Kas Keluar** | Total dana yang dikeluarkan dari akun kas kecil |
| **Jumlah Transaksi** | Banyaknya transaksi dalam periode |
| **Saldo Kas** | Selisih kas masuk dikurangi kas keluar |

Tabel menampilkan kolom: **Cabang**, **Tanggal**, **Tipe** (Kas Masuk / Kas Keluar), **Jumlah**, **Dari Akun**, **Ke Akun**, **User**, dan **Keterangan**.

![13 - Kas Kecil.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F58%2Ff2f24e10-8fc5-4354-84cf-dd32dfe56d8e-13_-_Kas_Kecil.png)

*Tampilan: Laporan Kas Kecil*

#### Catatan & Tips

- Pakai **Tipe Laporan Bulanan** untuk tutup buku kas kecil tiap bulan.
- Filter **User** membantu menelusuri siapa yang paling sering menangani kas operasional.

#### Lampiran

- [13 - Kas Kecil.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F58%2Ff2f24e10-8fc5-4354-84cf-dd32dfe56d8e-13_-_Kas_Kecil.png) — image/png, 144 KB

### Laporan Transfer Antar Cabang

> Menampilkan perpindahan dana antar cabang dalam periode tertentu, lengkap dengan cabang dan akun pengirim serta penerima. Dipakai bagian keuangan untuk memastikan setiap transfer terdokumentasi.

#### Pengertian

Laporan Transfer Antar Cabang menampilkan perpindahan dana antar cabang di Lensiro. Transfer semacam ini biasanya dilakukan untuk kebutuhan operasional cabang, pengisian kas kecil, atau distribusi dana.

Dengan laporan ini, bagian keuangan dapat memastikan setiap perpindahan dana terdokumentasi jelas: dari cabang dan akun mana, ke cabang dan akun mana, serta siapa yang melakukannya.

#### Fitur Utama

- Menampilkan total nilai transfer dan jumlah transaksi dalam periode.
- Menyaring laporan berdasarkan cabang, akun pengirim, akun penerima, dan user.
- Mengekspor hasil ke CSV dan mencetak laporan (perlu izin ekspor).

> **Catatan:** Laporan diperbarui otomatis saat filter diubah — tidak ada tombol **Buat Laporan** di halaman ini.

#### Langkah Penggunaan

1. Masuk ke menu **Laporan → Transfer Antar Cabang**.
2. Tentukan rentang **Tanggal** laporan (secara bawaan 30 hari terakhir).
3. Atur filter seperlunya:
   - **Cabang** (memilih cabang lain butuh izin)
   - **Akun Pengirim** — akun sumber dana
   - **Akun Penerima** — akun tujuan dana
   - **User** yang melakukan transaksi
4. Hasil tampil otomatis di bagian kanan.

#### Hasil Laporan

Ringkasan di bagian atas menampilkan **Total Nilai Transfer** dan **Jumlah Transaksi**.

Tabel menampilkan kolom:

| Kolom | Keterangan |
|-------|------------|
| **Tanggal** | Tanggal transaksi transfer |
| **Jumlah** | Nilai transfer |
| **Cabang Pengirim** | Cabang asal dana |
| **Cabang Penerima** | Cabang tujuan dana |
| **Akun Pengirim** | Akun sumber dana |
| **Akun Penerima** | Akun penerima dana |
| **User** | Pengguna yang membuat transaksi |
| **Keterangan** | Catatan tambahan |

![14 - Transfer Antar Cabang.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F59%2F2c891bb3-e9b5-4a77-8d78-9b2b28f4b4a7-14_-_Transfer_Antar_Cabang.png)

*Tampilan: Laporan Transfer Antar Cabang*

#### Catatan & Tips

- Meski kolom menampilkan cabang pengirim dan penerima, filter cabang di halaman ini adalah satu daftar cabang — transfer yang melibatkan cabang terpilih akan ikut tampil.
- Ekspor CSV berisi kolom tambahan **Akun Jembatan** yang mencatat akun perantara transfer.

#### Lampiran

- [14 - Transfer Antar Cabang.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F59%2F2c891bb3-e9b5-4a77-8d78-9b2b28f4b4a7-14_-_Transfer_Antar_Cabang.png) — image/png, 152 KB

## Bab 10 — Pengaturan


### Akun

> Tab Akun pada halaman Pengaturan untuk mengatur nama optik dan aturan wajib member saat penjualan. Dibuka saat pertama menyiapkan toko atau saat mengubah identitas dasar akun.

#### Pengertian

Tab **Akun** (menu **Pengaturan → Akun**) mengatur identitas toko optik dan aturan dasar yang berlaku pada transaksi penjualan. Halaman ini hanya bisa dibuka oleh pengguna yang punya hak akses ke menu Pengaturan.


![Screenshot 2026-07-06 at 10.30.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F61%2Fcc4ac1d0-5d28-4d4e-826c-898e179ee875-Screenshot_2026-07-06_at_10.30.18.png)
![Screenshot 2026-07-06 at 10.30.58.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F61%2Fe4a46f09-ce85-4eeb-b21b-624554ec2009-Screenshot_2026-07-06_at_10.30.58.png)
*Tampilan: Halaman Pengaturan Akun*

#### Fitur Utama

##### Nama Optik

Nama resmi toko yang menjadi identitas utama akun. Nama ini muncul di profil akun dan di faktur penjualan. Contoh isian: **Harisha Optical** atau **Optik Lensiro**.

##### Wajib Member pada Penjualan

Mengatur apakah setiap transaksi penjualan harus dikaitkan dengan data member (pelanggan). Ada dua pilihan:

- **Wajib** — setiap transaksi baru harus memilih member terlebih dahulu.
- **Opsional** — transaksi tetap bisa dibuat tanpa memilih member.

Aktifkan **Wajib** bila toko menjalankan program poin member, supaya setiap pembelian tercatat ke nama pelanggan yang benar.

#### Langkah Penggunaan

1. Buka menu **Pengaturan → Akun**.
2. Isi atau ubah **Nama Optik**.
3. Pilih **Wajib** atau **Opsional** pada **Wajib Member pada Penjualan**.
4. Klik **Perbarui** untuk menyimpan. Sistem menampilkan notifikasi bila data berhasil disimpan.

#### Catatan & Tips

- Nama optik yang salah akan ikut tercetak di faktur, jadi periksa ejaannya sebelum menyimpan.

#### Lampiran

- [01 - Akun-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F61%2F90987425-3f23-451d-90d6-32e8b2b791f3-01_-_Akun-1.png) — image/png, 16 KB
- [01 - Akun.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F61%2Fdcf2c763-db33-4ae3-9557-92f8c4bfa69a-01_-_Akun.png) — image/png, 83 KB
- [Screenshot 2026-07-06 at 10.30.18.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F61%2Fcc4ac1d0-5d28-4d4e-826c-898e179ee875-Screenshot_2026-07-06_at_10.30.18.png) — image/png, 16 KB
- [Screenshot 2026-07-06 at 10.30.58.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F61%2Fe4a46f09-ce85-4eeb-b21b-624554ec2009-Screenshot_2026-07-06_at_10.30.58.png) — image/png, 111 KB

### Inventaris

> Tab Inventaris pada halaman Pengaturan untuk mengatur format kode dan nama barang, ukuran barcode, serta menjalankan perbaikan data massal seperti hitung ulang harga pokok. Dibuka saat menyeragamkan penamaan barang atau setelah impor data besar.

#### Pengertian

Tab **Inventaris** (menu **Pengaturan → Inventaris**) mengatur format penamaan, kode, dan barcode barang, serta menyediakan beberapa tombol perbaikan data massal. Tujuannya menjaga kode dan nama barang tetap konsisten di seluruh cabang, dan memastikan harga pokok barang (HPP) akurat.


![Screenshot 2026-07-06 at 10.32.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F62%2Fb9a4aa68-9adc-44e1-99a7-9c1075da0d65-Screenshot_2026-07-06_at_10.32.22.png)
*Tampilan: Halaman Pengaturan Inventaris*

#### Fitur Utama

##### Format Kode

Menentukan pola kode barang. Pilihan:

- **Hanya ID** — kode berupa nomor ID barang saja.
- **Kode Kategori + ID** — ID diberi awalan kode kategori, misalnya `LEN-0150`.

##### Format Nama Item

Menentukan cara penulisan nama barang di daftar inventaris dan laporan. Tiga pilihan:

| Format | Contoh |
|--------|--------|
| Lengkap | Lensa - Kodak (SPH-1.50/CYL-0.50/ADD000) |
| Singkat | Lensa - Kodak (S-1.50/C-0.50/A000) |
| Singkat Tanpa Kode | Kodak (S-1.50/C-0.50/A000) |

##### Perbarui Nama Item

Tombol **Perbarui Nama Item** menghasilkan ulang nama seluruh barang inventaris agar mengikuti Format Nama Item yang baru dipilih. Gunakan:

- Setelah mengubah format nama item.
- Setelah impor data barang dalam jumlah besar.
- Saat ingin menyeragamkan penulisan nama semua barang.

##### Sinkronkan Brand/Kategori Item

Tombol **Sinkronkan Brand/Kategori Item** memperbaiki barang yang datanya tidak cocok antara Brand/Kategori dengan Sub Brand/Sub Kategori. Gunakan setelah memindahkan Sub Brand ke Brand lain, memindahkan Sub Kategori ke Kategori lain, atau saat menemukan data barang yang tidak konsisten.

##### Ukuran Barcode Item

Mengatur ukuran barcode saat dicetak dari menu Barang dan menu Pembelian. Pilihan: **Kecil (± 30 px)**, **Sedang (± 40 px)**, dan **Besar (Default)**. Setiap kali aplikasi dibuka, ukuran otomatis kembali ke Besar (Default).

##### Hitung Harga Pokok Barang

Tombol **Hitung Harga Pokok** menghitung ulang harga pokok rata-rata semua barang berdasarkan riwayat pembelian. Gunakan:

- Setelah impor data barang dalam jumlah besar.
- Saat menemukan laporan nilai persediaan yang tidak akurat.
- Secara berkala (mis. bulanan) untuk menjaga akurasi biaya barang.

#### Langkah Penggunaan

1. Buka menu **Pengaturan → Inventaris**.
2. Pilih **Format Kode**, **Format Nama Item**, dan **Ukuran Barcode Item** sesuai kebutuhan.
3. Klik **Perbarui** di bawah halaman untuk menyimpan pengaturan.
4. Bila perlu, jalankan tombol perbaikan data (**Perbarui Nama Item**, **Sinkronkan Brand/Kategori Item**, atau **Hitung Harga Pokok**).

#### Catatan & Tips

- Tombol perbaikan data massal berjalan atas seluruh inventaris, jadi jalankan di waktu yang tenang, bukan saat toko ramai.
- Halaman ini hanya bisa dibuka oleh pengguna yang punya hak akses ke menu Pengaturan.

#### Lampiran

- [02 - Inventaris.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F62%2Fae515f8e-aff4-45af-ba1c-dd585d248d10-02_-_Inventaris.png) — image/png, 202 KB
- [Screenshot 2026-07-06 at 10.32.22.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F62%2Fb9a4aa68-9adc-44e1-99a7-9c1075da0d65-Screenshot_2026-07-06_at_10.32.22.png) — image/png, 272 KB

### Faktur

> Tab Faktur pada halaman Pengaturan untuk mengatur logo, format cetak, QR code member portal, memo, dan tampilan default daftar penjualan. Dibuka saat menyiapkan tampilan faktur atau aturan komisi/kompensasi.

#### Pengertian

Tab **Faktur** (menu **Pengaturan → Faktur**) mengatur tampilan dan perilaku faktur penjualan yang dihasilkan sistem: logo, format cetak, QR code member portal, memo, sampai kategori barang yang dikecualikan dari kompensasi.


![Screenshot 2026-07-06 at 10.33.30.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F63%2F94f9ddf0-c379-45fe-b92c-485facf26e14-Screenshot_2026-07-06_at_10.33.30.png)
*Tampilan: Halaman Pengaturan Faktur*

#### Fitur Utama

##### Logo Faktur

Unggah gambar logo yang muncul di faktur penjualan. Disarankan format `.png` atau `.jpg` dengan latar transparan agar hasil cetak rapi.

##### Logo Portal Member

Unggah logo yang muncul di Portal Member. Format yang diterima: JPG, PNG, atau SVG.

##### Proses Penjualan Lunas

Tombol **Proses Penjualan Lunas** membuat pengambilan (fulfillment) otomatis untuk semua penjualan yang sudah lunas tetapi belum diproses. Gunakan setelah mengimpor data penjualan dari sistem lain, atau untuk memperbarui laporan penjualan dan stok agar akurat.

##### QR Code Member Portal

Menampilkan atau menyembunyikan QR code member portal di faktur. Pilihan: **Tampilkan** atau **Sembunyikan**.

##### URL Member Portal

Alamat yang dituju QR code. Kolom ini terisi otomatis oleh sistem dan tidak bisa diubah.

##### Tampilan Default Daftar Penjualan

Menentukan tampilan awal halaman daftar penjualan. Pilihan:

- **Card View** — data ditampilkan sebagai kartu.
- **Table View** — data ditampilkan sebagai tabel ringkas.

##### Varian Faktur Penjualan

Menentukan tata letak cetak faktur. Pilihan: **Landscape**, **Portrait**, dan **Thermal** (ukuran kecil untuk printer kasir mini).

##### Memo Faktur

Menampilkan informasi tambahan di bagian bawah faktur. Bila diatur ke **Tampilkan**, isi kolom **Teks konten**, **Telp/Whatsapp**, dan **Email**. Pilih **Sembunyikan** untuk tidak menampilkannya.

##### Kategori Barang yang Dikecualikan dari Kompensasi

Barang kompensasi adalah barang yang diberikan gratis kepada pelanggan sebagai pengganti, hadiah, atau situasi khusus lainnya. Centang kategori yang tidak boleh diberikan sebagai barang kompensasi. Di bawahnya, opsi **Tampilkan Stok 0 di Komplimen** mengatur apakah barang berstok nol tetap muncul di daftar komplimen.

#### Langkah Penggunaan

1. Buka menu **Pengaturan → Faktur**.
2. Unggah **Logo Faktur** dan **Logo Portal Member** bila perlu.
3. Atur **QR Code Member Portal**, **Tampilan Default Daftar Penjualan**, **Varian Faktur Penjualan**, dan **Memo Faktur**.
4. Centang kategori pada **Kategori Barang yang Dikecualikan dari Kompensasi** jika diperlukan.
5. Klik **Perbarui** untuk menyimpan.

#### Catatan & Tips

- Halaman ini hanya bisa dibuka oleh pengguna yang punya hak akses ke menu Pengaturan.
- **Proses Penjualan Lunas** memengaruhi banyak transaksi sekaligus; jalankan hanya bila memang perlu, mis. setelah migrasi data.

#### Lampiran

- [03 - Faktur.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F63%2F292dd9bf-b56e-46e9-ab0e-868a1e4cbb47-03_-_Faktur.png) — image/png, 218 KB
- [Screenshot 2026-07-06 at 10.33.30.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F63%2F94f9ddf0-c379-45fe-b92c-485facf26e14-Screenshot_2026-07-06_at_10.33.30.png) — image/png, 209 KB

### Penjualan

> Tab Penjualan pada halaman Pengaturan untuk mengatur otomatis-kasir dan nomor urut awal faktur POS/Order per cabang. Dibuka saat menyiapkan penomoran cabang atau setelah migrasi data.

#### Pengertian

Tab **Penjualan** (menu **Pengaturan → Penjualan**) mengatur perilaku sistem saat transaksi dan penomoran awal faktur untuk setiap cabang. Pengaturan ini menjaga penomoran transaksi tetap teratur, unik, dan tidak bertabrakan antar cabang.

![04 - Penjualan-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F64%2F6d241c92-9fc2-4b0b-a00d-57735ef0c8fe-04_-_Penjualan-1.png)
*Tampilan: Halaman Pengaturan Penjualan*

#### Fitur Utama

##### Otomatis Set Sales sebagai Kasir

Mengatur apakah Sales Person otomatis menjadi Kasir (penerima uang) untuk setiap pembayaran. Pilihan:

- **Aktif** — Kasir otomatis sama dengan Sales Person. Cocok untuk toko kecil agar proses lebih cepat.
- **Nonaktif** — Kasir dapat dipilih terpisah dari Sales Person. Cocok untuk toko besar dengan beberapa petugas.

##### Nomor Urut Penjualan per Cabang

Mengatur nomor urut awal untuk penjualan **POS** dan **Order** di setiap cabang. Tiap cabang punya kolom **Nomor Awal POS** dan **Nomor Awal Order** sendiri.

> **Perhatian:** Mengubah nomor urut akan memengaruhi nomor faktur penjualan berikutnya. Pastikan tidak ada konflik dengan nomor yang sudah dipakai.

##### Reset Nomor Urut Penjualan

Tombol **Reset Nomor Urut** menerapkan ulang seluruh nomor urut sesuai isian di atas. Sistem meminta konfirmasi lebih dulu karena tindakan ini mengubah nomor faktur untuk semua penjualan yang sudah ada. Gunakan hanya bila benar-benar perlu, misalnya setelah migrasi data.

#### Langkah Penggunaan

1. Buka menu **Pengaturan → Penjualan**.
2. Pilih **Aktif** atau **Nonaktif** pada **Otomatis Set Sales sebagai Kasir**.
3. Isi **Nomor Awal POS** dan **Nomor Awal Order** untuk tiap cabang.
4. Klik **Perbarui** untuk menyimpan.
5. Bila ingin menerapkan ulang nomor pada data lama, klik **Reset Nomor Urut** lalu setujui konfirmasinya.

#### Catatan & Tips

- Halaman ini hanya bisa dibuka oleh pengguna yang punya hak akses ke menu Pengaturan.
- **Reset Nomor Urut** memengaruhi seluruh faktur dan riwayat penjualan; pastikan tidak ada nomor yang bertabrakan sebelum menjalankannya.

#### Lampiran

- [04 - Penjualan-1.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F64%2F6d241c92-9fc2-4b0b-a00d-57735ef0c8fe-04_-_Penjualan-1.png) — image/png, 337 KB

### Keamanan

> Tab Keamanan pada halaman Pengaturan untuk mengatur Auto Logout dan metode pengiriman notifikasi & kode OTP. Dibuka saat mengamankan komputer bersama atau memilih media OTP portal pelanggan.

#### Pengertian

Tab **Keamanan** (menu **Pengaturan → Keamanan**) mengatur fitur keamanan akun: penguncian otomatis saat perangkat menganggur (Auto Logout) dan media pengiriman kode OTP untuk Portal Pelanggan. Berguna terutama pada komputer yang dipakai bersama, seperti komputer kasir atau gudang.


![Screenshot 2026-07-06 at 10.34.39.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F65%2F2dc6190b-1134-4f9d-901f-8e91db0f3303-Screenshot_2026-07-06_at_10.34.39.png)
*Tampilan: Halaman Pengaturan Keamanan*

#### Fitur Utama

##### Fitur Auto Logout

Mengeluarkan pengguna dari sistem secara otomatis bila tidak ada aktivitas (klik mouse atau input keyboard) selama jangka waktu tertentu. Ini mencegah penyalahgunaan akun dan mengurangi risiko lupa logout di perangkat bersama. Pilihan:

- **Aktifkan** — masukkan durasi diam (dalam menit); logout terjadi setelah tidak ada aktivitas selama durasi itu.
- **Dinonaktifkan** — fitur tidak berjalan.

##### Metode Pengiriman Notifikasi & Kode OTP

Menentukan media pengiriman notifikasi dan kode OTP untuk akses ke Portal Pelanggan. Pilihan: **Whatsapp** atau **Email**. Tarif pengiriman OTP menyesuaikan media yang dipilih.

#### Langkah Penggunaan

Mengaktifkan Auto Logout:

1. Buka menu **Pengaturan → Keamanan**.
2. Pilih **Aktifkan**.
3. Masukkan durasi (dalam menit).
4. Klik **Perbarui** untuk menyimpan.

Menonaktifkan Auto Logout:

1. Buka menu **Pengaturan → Keamanan**.
2. Pilih **Dinonaktifkan**.
3. Klik **Perbarui**.

#### Catatan & Tips

- Untuk mengaktifkan Auto Logout, durasi wajib diisi dengan angka lebih dari 0; jika kosong sistem akan menolak dan mengisi ulang ke 1 menit.
- Perubahan baru berlaku setelah tombol **Perbarui** ditekan dan berlaku untuk seluruh pengguna.
- Data yang belum disimpan bisa hilang jika Auto Logout terjadi, jadi simpan pekerjaan sebelum meninggalkan komputer.

#### Lampiran

- [05 - Keamanan.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F65%2F47aed29d-15fd-415e-9696-bb8062da940c-05_-_Keamanan.png) — image/png, 93 KB
- [Screenshot 2026-07-06 at 10.34.39.png](https://lentera.lensiro.com/api/docs/media?key=knowledge%2F65%2F2dc6190b-1134-4f9d-901f-8e91db0f3303-Screenshot_2026-07-06_at_10.34.39.png) — image/png, 73 KB

## Bab 11 — Aslen — Asisten AI

> Aslen (ASisten LENsiro) menjawab pertanyaan tentang toko Anda dengan data asli — angka, grafik, dan peta — langsung di dalam Lensiro. Tersedia untuk pengguna dengan hak akses asisten (owner/superadmin).

## Aslen — Asisten AI

### Pengertian

**Aslen** (ASisten LENsiro) adalah asisten AI yang tertanam di dalam Lensiro. Tanyakan apa saja tentang toko Anda — omzet, stok, pelanggan, sampai "kenapa data ini berubah" — dan Aslen menyelidiki datanya sendiri lalu menjawab dengan angka, tabel, grafik, atau peta.

Berbeda dengan chatbot biasa, Aslen **tidak menjawab dari ingatan**. Setiap angka diambil langsung dari database toko Anda pada saat itu juga, sehingga jawabannya mengikuti data terbaru.

### Di mana menemukan Aslen

- **Dashboard** — kartu Aslen di halaman utama untuk mulai bertanya cepat.
- **Panel asisten** — dapat dibuka dari halaman mana pun lewat ikon maskot Aslen, tanpa meninggalkan pekerjaan yang sedang dibuka.
- **Halaman Asisten** — ruang percakapan penuh dengan riwayat chat. Percakapan tersimpan otomatis setelah Aslen menjawab, jadi bisa dilanjutkan kapan saja.

### Yang bisa ditanyakan

| Jenis pertanyaan | Contoh |
| --- | --- |
| Angka & tren penjualan | "Berapa omzet minggu ini dibanding minggu lalu?" |
| Stok & barang | "Frame brand apa yang paling laku 3 bulan terakhir? Stoknya masih berapa?" |
| Pelanggan | "Siapa saja member yang belanja di atas 5 juta tahun ini?" |
| Penelusuran perubahan data | "Kenapa harga barang ini berubah? Siapa yang mengubahnya?" — Aslen membaca jejak audit (siapa, kapan, nilai lama & baru). |
| Fitur & menu Lensiro | "Di mana cara mengatur komisi penjualan?" — Aslen menunjukkan menu dan langkahnya. |
| Info pasar (internet) | "Berapa harga pasaran lensa X di pasaran?" |
| Kompetitor sekitar | "Toko optik apa saja yang ada di dekat cabang saya?" — dijawab dengan peta. |

### Fitur Utama

- Jawaban selalu berdasarkan **query nyata** ke database toko — bukan perkiraan.
- Menampilkan **grafik** untuk pertanyaan tren dan perbandingan, serta **peta** untuk pertanyaan lokasi.
- **Ekspor CSV** — minta Aslen menyiapkan data sebagai file CSV, lalu unduh dari percakapan.
- Membaca **jejak audit** untuk menjelaskan riwayat perubahan sebuah data.
- Memahami fitur dan menu Lensiro, sehingga bisa sekaligus menjadi pemandu penggunaan aplikasi.
- Riwayat percakapan tersimpan otomatis dan bisa dibuka kembali.

### Keamanan & Akses

- Aslen hanya bisa **membaca** data — tidak ada satu pun kemampuan untuk mengubah, menambah, atau menghapus data toko.
- Akses dibatasi lewat kebijakan role khusus asisten, dan biasanya hanya diberikan kepada **owner / superadmin** — karena Aslen dapat membaca seluruh data toko, termasuk angka penjualan dan data pelanggan.
- Pembatasan ini diberlakukan di sisi server pada setiap jalur akses, bukan sekadar menyembunyikan tombol.

> **Catatan:** Seperti semua AI, Aslen bisa keliru menafsirkan pertanyaan. Untuk keputusan penting (keuangan, penggajian, pajak), jadikan jawaban Aslen sebagai titik awal dan verifikasi lewat menu **Laporan** resmi.


## Bab 12 — Lensiro Fit

> Fitting kacamata berbasis AI di dalam toko: pindai wajah pelanggan, dapatkan ukuran PD dan bentuk wajah, lalu rekomendasi frame dari stok cabang — diakhiri serah terima ke staf.

## Lensiro Fit

### Pengertian

**Lensiro Fit** adalah pengalaman fitting kacamata berbasis AI yang berjalan di tablet atau layar di dalam toko. Pelanggan memindai wajahnya sendiri, melihat hasil pengukuran seperti yang dilakukan seorang optisi, lalu mendapat rekomendasi frame **dari stok cabang itu sendiri** — bukan katalog umum.

Fit dirancang sebagai pembuka percakapan, bukan pengganti staf: alur selalu berakhir di layar **Ringkasan** yang diserahkan ke staf untuk konsultasi dan transaksi.

Setiap cabang punya alamat Fit sendiri: `https://{domain-lensiro-anda}/fit/{kode-cabang}`. Saat tidak dipakai, layar menampilkan tampilan sambutan (attract screen) yang mengundang pelanggan untuk mencoba.

### Alur Penggunaan

Alur terdiri dari empat langkah di layar:

#### 1. Pindai Wajah

Pelanggan berdiri menghadap kamera dan mengikuti panduan posisi di layar. Sistem mengambil beberapa sampel pengukuran untuk hasil yang stabil.

#### 2. Hasil Analisa

Layar menampilkan hasil pengukuran wajah:

| Ukuran | Keterangan |
| --- | --- |
| **PD (Pupillary Distance)** | Jarak antar pupil dalam milimeter — ukuran kunci pemasangan lensa. |
| **Lebar & tinggi wajah** | Dipakai untuk mencocokkan ukuran frame. |
| **Lebar jembatan hidung** | Menentukan kenyamanan dudukan frame. |
| **Bentuk wajah** | Oval, Bulat, Kotak, Hati, atau Lonjong — dasar rekomendasi model frame. |

Untuk akurasi PD yang lebih tinggi, tersedia mode kalibrasi dengan **kartu ukuran standar** (KTP/kartu ATM) yang ditempelkan ke dahi sebagai acuan skala.

#### 3. Pilih Frame

Fit menampilkan frame dari **stok cabang** yang paling cocok dengan ukuran dan bentuk wajah pelanggan. Pelanggan bisa menelusuri rekomendasi dan menandai frame yang menarik.

#### 4. Ringkasan

Layar ringkasan menampilkan hasil ukur dan frame pilihan — inilah titik serah terima: pelanggan membawa (atau menunjukkan) layar ini ke staf, dan percakapan berlanjut secara manusiawi: cek resep, coba frame fisik, lalu transaksi di kasir seperti biasa.

### Fitur Utama

- Pengukuran PD, dimensi wajah, dan deteksi bentuk wajah langsung dari kamera.
- Rekomendasi frame diambil dari stok cabang yang sebenarnya — yang direkomendasikan pasti ada barangnya.
- Mode kalibrasi kartu untuk akurasi PD lebih tinggi.
- Sesi fitting tersimpan, sehingga toko bisa melihat seberapa sering Fit dipakai dan sampai langkah mana pelanggan berhenti.
- Tampilan sambutan otomatis saat layar tidak digunakan.

> **Catatan:** Hasil pengukuran Fit adalah **estimasi** untuk mempercepat konsultasi — pemeriksaan akhir (refraksi dan pengukuran presisi) tetap dilakukan oleh staf atau optisi sebelum pemesanan lensa.

### Aktivasi

Lensiro Fit diaktifkan per toko. Hubungi tim Lensiro untuk mengaktifkan Fit di toko Anda, termasuk penyiapan perangkat (tablet/layar + kamera) dan pemilihan cabang.


## Bab 13 — Developer API

> API read-only resmi Lensiro: tarik data penjualan, pelanggan, dan gudang ke sistem Anda sendiri — dashboard keuangan, Google Sheets, CRM, atau agent AI.

Lensiro menyediakan **REST API read-only**: alamat web khusus yang mengeluarkan data toko Anda dalam format JSON, supaya bisa ditarik ke sistem lain secara otomatis — tanpa web scraping, tanpa export manual, dan tanpa ikut rusak setiap kali tampilan Lensiro diperbarui.

### Untuk siapa halaman ini

Untuk **developer atau tim IT** yang diminta menyambungkan Lensiro ke sistem lain. Anda tidak perlu tahu isi dapur Lensiro — cukup bisa memanggil URL dan membaca JSON. Semua contoh di bab ini bisa disalin apa adanya.

Kalau Anda pemilik toko dan hanya ingin tahu **apa yang mungkin**, cukup baca halaman ini lalu teruskan tautannya ke tim teknis Anda.

### Yang bisa dibangun

| Kebutuhan | Endpoint yang dipakai |
|---|---|
| Rekap omzet harian otomatis ke Google Sheets | `/sales` |
| Dashboard keuangan / arus kas per metode bayar | `/sales/payments` |
| Monitoring pekerjaan faset (Fasset) | `/sales/facets` |
| Sinkronisasi pelanggan ke CRM atau alat WhatsApp blast | `/members` |
| Kartu stok & nilai persediaan di sistem akuntansi | `/warehouse/stocks`, `/warehouse/stock-movements` |
| Agent AI yang bisa ditanyai "omzet cabang X minggu lalu berapa?" | semuanya |

### Tiga hal yang perlu diketahui sebelum mulai

**1. API ini hanya membaca (GET).** Tidak ada endpoint untuk membuat, mengubah, atau menghapus data. Sistem Anda tidak akan pernah bisa merusak data Lensiro lewat API ini. Metode selain `GET` dijawab `405`.

**2. Base URL-nya milik Anda sendiri.** Setiap klien Lensiro punya server sendiri, jadi tidak ada satu alamat API global. Base URL Anda adalah **alamat yang Anda pakai untuk login**, ditambah `/api/v1`:

```
https://app-anda.lensiro.com/api/v1
```

Di seluruh dokumentasi ini alamat tersebut ditulis sebagai `{BASE}`.

**3. Butuh API key.** Semua request wajib membawa API key. Key dibuat sendiri oleh admin toko dari menu **Pengaturan → API Key** di dalam aplikasi. Caranya ada di halaman **Autentikasi & Batas Pemakaian**.

### Contoh 30 detik

```bash
curl -H "Authorization: Bearer lsk_live_xxxx" \
  "https://app-anda.lensiro.com/api/v1/ping"
```

```json
{ "ok": true, "key_name": "Integrasi Google Sheets" }
```

Kalau balasan itu yang muncul, koneksi dan key Anda sudah benar — tinggal lanjut ke halaman **Mulai Cepat**.

### Cara membaca bab ini

Urutan yang disarankan: **Mulai Cepat** → **Autentikasi & Batas Pemakaian** → **Konvensi Respons & Paginasi**. Setelah itu buka halaman domain data yang Anda butuhkan (Penjualan / Pelanggan / Gudang), dan pakai **Referensi Endpoint** sebagai contekan sehari-hari.

> **Ringkasan format:** JSON, semua nama field `snake_case`, semua tanggal ISO 8601 **UTC**, semua nilai uang berupa angka Rupiah bulat tanpa desimal.


### Mulai Cepat

> Lima langkah dari nol sampai data penjualan pertama masuk ke sistem Anda, lengkap dengan perintah yang bisa disalin.

Ikuti lima langkah ini berurutan. Total sekitar lima menit, dengan asumsi Anda sudah punya akses admin ke Lensiro.

#### Langkah 1 — Buat API key

Di aplikasi Lensiro, buka **Pengaturan → API Key**, lalu klik **Buat API Key**.

- Isi **Nama** dengan tujuan integrasinya, misalnya `Integrasi Google Sheets`. Nama ini yang muncul kembali di respons `/ping`.
- **Kedaluwarsa** boleh dikosongkan kalau key tidak perlu masa berlaku.
- Setelah disimpan, key ditampilkan **satu kali saja** dalam bentuk `lsk_live_...`. Salin sekarang dan simpan di tempat aman. Kalau hilang, key lama harus dicabut dan diganti key baru.

#### Langkah 2 — Siapkan dua variabel

Semua contoh di dokumentasi ini memakai dua nilai berikut:

```bash
export BASE="https://app-anda.lensiro.com/api/v1"
export KEY="lsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
```

Ganti `app-anda.lensiro.com` dengan alamat yang Anda pakai untuk login ke Lensiro.

#### Langkah 3 — Cek koneksi

```bash
curl -H "Authorization: Bearer $KEY" "$BASE/ping"
```

```json
{ "ok": true, "key_name": "Integrasi Google Sheets" }
```

Kalau yang keluar justru `{"error":{"code":"missing_api_key"}}` atau `invalid_api_key`, lihat halaman **Kode Error & Pemecahan Masalah**.

#### Langkah 4 — Kenali cabang Anda

```bash
curl -H "Authorization: Bearer $KEY" "$BASE/branches"
```

```json
{
  "data": [
    { "id": 1, "code": "PST", "name": "Cabang Pusat" },
    { "id": 2, "code": "BDG", "name": "Cabang Bandung" }
  ]
}
```

Simpan pemetaan ini. Semua data lain menyebut cabang lewat `branch_id`, dan Anda tidak perlu menuliskannya secara hardcode.

#### Langkah 5 — Tarik penjualan pertama

Ambil lima transaksi saja supaya keluarannya kecil dan mudah dibaca:

```bash
curl -H "Authorization: Bearer $KEY" "$BASE/sales?limit=5"
```

Balasannya berbentuk:

```json
{
  "data": [ { "id": 18234, "sales_order_number": "SO-PST-1042", "...": "..." } ],
  "pagination": {
    "next_cursor": "eyJ1IjoiMjAyNi0wOC0xM1QwNTozMDoxMi4wMDBaIiwiaSI6MTgyMzR9",
    "has_more": true
  }
}
```

Selesai — Anda sudah menarik data pertama.

#### Langkah berikutnya

- Data keluar urut dari yang **paling lama berubah**. Untuk menarik semuanya, ikuti `next_cursor` sampai `has_more` bernilai `false`. Caranya di **Konvensi Respons & Paginasi**.
- Untuk **integrasi berkala** (misalnya tiap jam ke Google Sheets), jangan tarik ulang semuanya. Pakai pola `updated_since` di halaman **Panduan Integrasi & Contoh Kode**.

#### Checklist sebelum dianggap siap produksi

- Key disimpan sebagai *environment variable* atau di secret manager — bukan di dalam kode atau di sel spreadsheet.
- Loop paginasi berhenti berdasarkan `has_more`, bukan berdasarkan tebakan jumlah halaman.
- Penyimpanan Anda melakukan **upsert berdasarkan `id`**, bukan *insert* saja.
- Polling memakai `include_deleted=true` supaya penghapusan ikut terbawa.
- Respons `429` ditangani dengan menunggu sesuai header `Retry-After`.
- Tanggal dari API dianggap UTC dan dikonversi ke WIB (+7) sebelum dipakai untuk rekap harian.


### Autentikasi & Batas Pemakaian

> Cara membuat dan memakai API key (Bearer lsk_live_...), arti setiap error 401, batas 60 request/menit per key, dan praktik keamanan.

#### Membuat API key

API key dibuat sendiri dari dalam aplikasi, di menu **Pengaturan → API Key** (butuh izin `setting:api-key`).

1. Klik **Buat API Key**.
2. Isi **Nama** — deskripsi integrasinya, misalnya `Integrasi Google Sheets` atau `Dashboard Keuangan Internal`.
3. Isi masa **kedaluwarsa** dalam hari, atau kosongkan kalau key berlaku selamanya.
4. Key ditampilkan **sekali saja** setelah dibuat. Salin dan simpan segera.

Daftar key menampilkan kolom **Nama**, **Dibuat Oleh**, **Dibuat**, **Terakhir Dipakai**, **Kedaluwarsa**, dan **Status** — berguna untuk mengecek apakah sebuah integrasi masih hidup. Kolom **Terakhir Dipakai** diperbarui paling cepat sekali per menit, jadi wajar kalau tidak berubah di setiap request.

Lensiro **tidak menyimpan** key dalam bentuk aslinya — hanya hash SHA-256 dan 4 karakter terakhir untuk ditampilkan. Artinya tim Lensiro pun tidak bisa memberitahu key lama Anda. Kalau hilang: cabut, lalu buat baru.

#### Format dan cara pakai

Key berbentuk `lsk_live_` diikuti 43 karakter acak:

```
lsk_live_7Kq2mZx9Rb4TnV1cWp8yLd6EhG3sJuA5oF0iQrXtN2M
```

Kirim di setiap request lewat header `Authorization`:

```bash
curl -H "Authorization: Bearer lsk_live_xxxxxxxx" \
  "https://app-anda.lensiro.com/api/v1/sales"
```

Tidak ada cara lain — key **tidak** bisa dikirim lewat query string atau cookie.

#### Apa yang bisa diakses sebuah key

- **Semua data yang diekspos API ini, di semua cabang.** Belum ada scope maupun pembatasan per cabang di v1.
- **Hanya baca.** Key tidak bisa mengubah apa pun.

Karena satu key berarti akses baca penuh, perlakukan key seperti password admin. Kalau Anda perlu memberi akses ke pihak ketiga yang hanya boleh melihat sebagian data, tunggu dukungan *scoped key* (lihat **Batasan, Versi & Rencana**) — jangan berikan key penuh.

#### Error autentikasi

| HTTP | `error.code` | Arti | Yang harus dilakukan |
|---|---|---|---|
| 401 | `missing_api_key` | Header `Authorization: Bearer ...` tidak ada atau salah bentuk | Periksa penulisan header, termasuk spasi setelah `Bearer` |
| 401 | `invalid_api_key` | Key tidak dikenal, atau tidak diawali `lsk_` | Pastikan key tersalin utuh, tanpa spasi atau baris baru |
| 401 | `revoked_api_key` | Key sudah dicabut lewat menu API Key | Buat key baru |
| 401 | `expired_api_key` | Key sudah melewati tanggal kedaluwarsa | Buat key baru |

Bentuk body error selalu sama:

```json
{ "error": { "code": "invalid_api_key", "message": "The API key is not valid." } }
```

#### Batas pemakaian (rate limit)

Ada dua lapis batas, keduanya memakai jendela geser 60 detik:

| Batas | Nilai | Dihitung per |
|---|---|---|
| Per API key | **60 request / menit** | key |
| Per alamat IP | **120 request / menit** | IP pemanggil |

Batas per IP diperiksa **sebelum** key divalidasi, jadi request dengan key salah pun ikut terhitung.

Saat terlampaui, API membalas:

```
HTTP/1.1 429 Too Many Requests
Retry-After: 37
```

```json
{ "error": { "code": "rate_limited", "message": "Rate limit exceeded (60 requests/minute)." } }
```

**Cara menanganinya:** tunggu sebanyak detik yang tertulis di `Retry-After`, lalu ulangi request yang sama. Jangan mencoba ulang dalam loop ketat.

Sebagai gambaran, menarik data tiap jam dari empat endpoint hanya memakai beberapa request per jam. Batas ini baru terasa saat backfill besar — di kasus itu, beri jeda sekitar satu detik antar halaman.

#### Praktik keamanan

- **Jangan pernah** menaruh key di frontend, aplikasi mobile, repositori publik, atau spreadsheet yang dibagikan. Semua yang berjalan di browser bisa dibaca pengguna.
- Simpan key sebagai *environment variable* atau di secret manager. Di Google Apps Script, pakai **Script Properties**, bukan konstanta di dalam kode.
- **Satu integrasi, satu key.** Kalau nanti perlu dicabut, integrasi lain tidak ikut mati.
- Cabut key yang sudah tidak dipakai. Kolom **Terakhir Dipakai** membantu menemukannya.
- Rotasi berkala: buat key baru → pindahkan integrasi → pastikan berjalan → cabut key lama. Karena kedua key valid bersamaan, tidak ada waktu mati.
- Kalau key diduga bocor, **cabut sekarang** lalu buat baru. Pencabutan langsung berlaku.


### Konvensi Respons & Paginasi

> Aturan yang berlaku di semua endpoint: bentuk envelope, snake_case, tanggal UTC, paginasi cursor, sinkronisasi updated_since, dan penanda data terhapus.

Aturan di halaman ini berlaku untuk **semua** endpoint. Kalau Anda hanya sempat membaca satu halaman teknis, baca yang ini.

#### Format dasar

- Semua nama field `snake_case` — `sales_order_number`, bukan `salesOrderNumber`.
- Semua tanggal/waktu **ISO 8601 UTC**, contoh `2026-08-13T03:42:08.000Z`. Selalu berakhiran `Z`.
- Semua nilai uang berupa **angka Rupiah bulat** (integer), tanpa desimal dan tanpa pemisah ribuan. `1350000` berarti Rp 1.350.000.
- Field yang kosong bernilai `null`, bukan string kosong.
- Semua respons JSON, dengan `Content-Type: application/json`.

#### Tiga bentuk respons

| Bentuk | Dipakai oleh | Struktur |
|---|---|---|
| **List berpaginasi** | `/sales`, `/sales/payments`, `/sales/facets`, `/sales/{id}/facets`, `/members`, `/members/{id}/sales`, `/members/{id}/point-logs`, `/warehouse/items`, `/warehouse/stocks`, `/warehouse/stock-movements` | `{ "data": [...], "pagination": {...} }` |
| **Objek tunggal** | `/sales/{id}`, `/members/{id}`, `/warehouse/items/{id}` | `{ "data": { ... } }` |
| **List pendek tanpa paginasi** | `/branches`, `/sales/{id}/items`, `/sales/{id}/payments`, `/warehouse/items/{id}/stocks` | `{ "data": [...] }` |

Satu pengecualian: `/ping` membalas `{ "ok": true, "key_name": "..." }` tanpa pembungkus `data`.

Contoh list berpaginasi:

```json
{
  "data": [ { "id": 18234, "...": "..." } ],
  "pagination": {
    "next_cursor": "eyJ1IjoiMjAyNi0wOC0xM1QwNTozMDoxMi4wMDBaIiwiaSI6MTgyMzR9",
    "has_more": true
  }
}
```

#### Paginasi dengan cursor

- `limit` — jumlah baris per halaman. Default **100**, maksimal **500**, harus bilangan bulat minimal 1.
- `cursor` — penanda posisi, diambil dari `pagination.next_cursor` halaman sebelumnya.

Polanya:

```
halaman 1: GET /sales?limit=200
  → has_more = true, next_cursor = "AAA"
halaman 2: GET /sales?limit=200&cursor=AAA
  → has_more = true, next_cursor = "BBB"
halaman 3: GET /sales?limit=200&cursor=BBB
  → has_more = false, next_cursor = null   ← berhenti di sini
```

Aturan penting:

- **Bawa serta semua filter di setiap halaman.** Cursor hanya menyimpan posisi, bukan filter. Kalau halaman 1 memakai `updated_since`, halaman 2 harus memakainya juga.
- **Cursor bersifat opaque** — jangan diurai atau dibuat sendiri, cukup diteruskan kembali. Isinya bisa berubah sewaktu-waktu.
- **Tidak ada paginasi offset** (`page=` / `offset=`). Cursor aman terhadap data yang bertambah di tengah proses tarik.
- Cursor tidak punya masa kedaluwarsa, tapi tidak dimaksudkan disimpan lama. Untuk melanjutkan di lain waktu, simpan `updated_at` terbesar dan mulai lagi dengan `updated_since`.

##### Urutan data

| Endpoint | Urutan |
|---|---|
| Sebagian besar list | `updated_at` menaik, lalu `id` menaik |
| `/warehouse/stocks` | `item_id` menaik, lalu `branch_id` menaik |
| `/warehouse/stock-movements` | `occurred_at` menaik, lalu `type`, lalu id sumber |

Karena `updated_at` hanya bergerak maju, baris yang berubah di tengah proses paginasi akan **pindah ke belakang** — jadi Anda mungkin menerimanya dua kali, tapi tidak akan pernah terlewat. Selama penyimpanan Anda melakukan upsert, ini tidak jadi masalah.

#### Sinkronisasi inkremental: `updated_since`

Hampir semua list mendukung `updated_since=<ISO datetime>`: hanya kirim baris yang berubah sejak waktu tersebut.

1. Simpan nilai `updated_at` **terbesar** yang pernah Anda terima.
2. Pada polling berikutnya, kirim nilai itu sebagai `updated_since`.
3. **Upsert** hasilnya berdasarkan `id` — jangan *insert* saja.

```
GET /sales?updated_since=2026-08-13T05:30:12.000Z&include_deleted=true&limit=200
```

Catatan penting:

- Filternya **inklusif** (`>=`). Baris tepat di batas waktu akan terkirim ulang setiap polling. Ini disengaja supaya tidak ada yang terlewat — upsert membuatnya tidak berbahaya.
- Pola ini otomatis menangkap **perubahan pada transaksi lama**: pembayaran yang menyusul, faktur yang terbit belakangan, atau pembatalan. Filter berdasarkan tanggal transaksi saja akan melewatkan semua itu.
- Endpoint yang **tidak** mendukung `updated_since`: `/warehouse/stocks` dan `/warehouse/stock-movements`. Alasannya dijelaskan di halaman **API Gudang**.

#### Data terhapus (tombstone)

- Setiap objek yang bisa dihapus punya field `deleted_at` — `null` untuk data aktif.
- Secara default data terhapus **tidak** ikut. Tambahkan `include_deleted=true` untuk menerimanya.
- Penghapusan tetap mengubah `updated_at`, jadi kombinasi `updated_since` + `include_deleted=true` mengantarkan penghapusan lewat loop polling biasa.

> **Kalau Anda menyimpan salinan data, selalu poll dengan `include_deleted=true`.** Tanpa itu, transaksi yang dihapus berhenti terkirim tanpa pemberitahuan, dan salinan Anda diam-diam jadi lebih besar dari kenyataan. Baris dengan `deleted_at` terisi artinya: hapus, atau tandai batal, di sisi Anda.

#### Transaksi yang dibatalkan

Berbeda dengan penghapusan: transaksi batal **tetap ada** dan ikut terkirim secara default (`include_canceled=true`), dengan `status: "CANCELED"` dan alasan di `canceled_reason`. Ini disengaja supaya pembatalan terlihat oleh sistem Anda. Kirim `include_canceled=false` kalau Anda hanya mau transaksi yang masih berlaku.

#### Zona waktu

Semua tanggal keluar dalam UTC. WIB = UTC + 7 jam. Jadi "1 Agustus 2026 waktu Indonesia bagian barat" berarti:

```
transaction_date_from=2026-07-31T17:00:00Z
transaction_date_to=2026-08-01T16:59:59Z
```

Ini penyebab paling sering angka rekap Anda meleset dibanding laporan di aplikasi, yang memakai waktu lokal. Untuk WITA geser 8 jam, WIT 9 jam.

#### Tipe dan validasi parameter

| Jenis | Contoh | Aturan | Error kalau salah |
|---|---|---|---|
| Bilangan bulat | `branch_id`, `item_id`, `category_id`, `brand_id` | bulat, minimal 0 | `400 invalid_parameter` |
| `limit` | `limit=200` | bulat, 1–500 | `400 invalid_limit` |
| Tanggal | `updated_since`, `paid_from` | ISO 8601, sebaiknya berakhiran `Z` | `400 invalid_date` |
| Boolean | `include_deleted` | aktif **hanya** bila persis `true` | — (nilai lain dianggap `false`) |
| `include_canceled` | `include_canceled=false` | nonaktif **hanya** bila persis `false` | — (default `true`) |
| Enum | `type`, `status` | harus salah satu nilai yang diizinkan | `400 invalid_parameter` |
| `cursor` | dari `next_cursor` | opaque | `400 invalid_cursor` |
| `{id}` di path | `/sales/18234` | bulat, minimal 1 | `400 invalid_id` |

Parameter yang tidak dikenal **diabaikan diam-diam** — salah ketik nama parameter tidak menimbulkan error, tapi juga tidak menyaring apa pun. Periksa lagi kalau hasil filter terasa aneh.

#### Janji kompatibilitas

Selama masih **v1**:

- Field baru **bisa muncul kapan saja tanpa pemberitahuan.** Parser Anda harus mengabaikan field yang tidak dikenal.
- Field yang sudah ada **tidak akan** diganti nama, dihapus, atau berubah tipe.
- Perubahan yang merusak kompatibilitas akan terbit sebagai `/api/v2`, dan `/api/v1` tetap jalan.

#### Ringkasan kode status

| HTTP | Arti |
|---|---|
| 200 | Berhasil |
| 400 | Parameter tidak valid |
| 401 | Masalah API key |
| 404 | Objek tidak ditemukan atau sudah dihapus |
| 405 | Metode selain `GET` |
| 429 | Melebihi batas pemakaian |
| 500 | Kesalahan server — coba ulang dengan jeda bertingkat |

Rincian setiap `error.code` ada di halaman **Kode Error & Pemecahan Masalah**.


### Referensi Endpoint

> Contekan satu halaman: seluruh endpoint v1, parameter yang diterima masing-masing, bentuk respons, dan dukungan paginasi.

Semua endpoint hanya menerima `GET` dan diawali `{BASE}` = `https://app-anda.lensiro.com/api/v1`.

#### Peta endpoint

```
/api/v1
├── ping                       cek key & koneksi
├── branches                   daftar cabang
├── sales                      transaksi (item + pembayaran menyatu)
│   ├── {id}
│   │   ├── items              item satu transaksi
│   │   ├── payments           pembayaran satu transaksi
│   │   └── facets             pekerjaan faset satu transaksi
│   ├── payments               ledger pembayaran lintas transaksi
│   └── facets                 pekerjaan faset lintas transaksi
├── members                    pelanggan
│   └── {id}
│       ├── sales              riwayat belanja pelanggan
│       └── point-logs         mutasi poin pelanggan
└── warehouse
    ├── items                  katalog barang
    │   └── {id}
    │       └── stocks         stok satu barang di semua cabang
    ├── stocks                 stok per barang per cabang (snapshot)
    └── stock-movements        riwayat barang masuk/keluar
```

#### Tabel ringkas

| Endpoint | Isi | Paginasi | `updated_since` | `include_deleted` |
|---|---|---|---|---|
| `GET /ping` | status key | – | – | – |
| `GET /branches` | semua cabang aktif | – | – | – |
| `GET /sales` | transaksi penjualan | ya | ya | ya |
| `GET /sales/{id}` | satu transaksi | – | – | – |
| `GET /sales/{id}/items` | item transaksi | – | – | – |
| `GET /sales/{id}/payments` | pembayaran transaksi | – | – | – |
| `GET /sales/{id}/facets` | faset transaksi | ya | ya | ya |
| `GET /sales/payments` | ledger pembayaran | ya | ya | ya |
| `GET /sales/facets` | pekerjaan faset | ya | ya | ya |
| `GET /members` | pelanggan | ya | ya | ya |
| `GET /members/{id}` | satu pelanggan | – | – | – |
| `GET /members/{id}/sales` | belanja pelanggan | ya | ya | ya |
| `GET /members/{id}/point-logs` | mutasi poin | ya | ya | ya |
| `GET /warehouse/items` | katalog barang | ya | ya | ya |
| `GET /warehouse/items/{id}` | satu barang | – | – | – |
| `GET /warehouse/items/{id}/stocks` | stok barang per cabang | – | – | – |
| `GET /warehouse/stocks` | snapshot stok | ya | tidak | tidak |
| `GET /warehouse/stock-movements` | pergerakan stok | ya | tidak | tidak |

`limit` dan `cursor` berlaku di semua endpoint yang berpaginasi.

#### Parameter per endpoint

##### `/sales` dan `/members/{id}/sales`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `updated_since` | ISO datetime | perubahan sejak waktu ini (inklusif) |
| `transaction_date_from` | ISO datetime | tanggal order minimal |
| `transaction_date_to` | ISO datetime | tanggal order maksimal |
| `branch_id` | int | batasi ke satu cabang |
| `include_canceled` | bool | default `true`; isi `false` untuk menyembunyikan transaksi batal |
| `include_deleted` | bool | default `false` |
| `cursor`, `limit` | | paginasi |

##### `/sales/payments`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `updated_since` | ISO datetime | perubahan sejak waktu ini |
| `paid_from` / `paid_to` | ISO datetime | filter pada `paid_at` |
| `branch_id` | int | cabang transaksi induk |
| `type` | enum | `CASH`, `DEBIT`, `CREDIT`, `QRIS`, `ASSURANCE`, `POINT`, `REFUND` |
| `include_deleted` | bool | default `false` |
| `cursor`, `limit` | | paginasi |

##### `/sales/facets` dan `/sales/{id}/facets`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `updated_since` | ISO datetime | perubahan sejak waktu ini |
| `order_date_from` / `order_date_to` | ISO datetime | filter pada tanggal transaksi induk |
| `branch_id` | int | cabang transaksi induk |
| `status` | enum | `WORKING`, `SUCCESS`, `FAILED` |
| `include_deleted` | bool | default `false` |
| `cursor`, `limit` | | paginasi |

##### `/members`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `updated_since` | ISO datetime | perubahan sejak waktu ini |
| `branch_id` | int | cabang tempat pelanggan terdaftar |
| `include_deleted` | bool | default `false` |
| `cursor`, `limit` | | paginasi |

##### `/members/{id}/point-logs`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `updated_since` | ISO datetime | perubahan sejak waktu ini |
| `include_deleted` | bool | default `false` |
| `cursor`, `limit` | | paginasi |

##### `/warehouse/items`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `updated_since` | ISO datetime | perubahan sejak waktu ini |
| `category_id` | int | kategori barang |
| `brand_id` | int | merek barang |
| `include_deleted` | bool | default `false` |
| `cursor`, `limit` | | paginasi |

##### `/warehouse/stocks`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `branch_id` | int | satu cabang |
| `item_id` | int | satu barang |
| `category_id` | int | kategori barang |
| `brand_id` | int | merek barang |
| `cursor`, `limit` | | paginasi |

##### `/warehouse/stock-movements`

| Parameter | Tipe | Keterangan |
|---|---|---|
| `occurred_from` / `occurred_to` | ISO datetime | filter pada `occurred_at` |
| `branch_id` | int | cabang |
| `item_id` | int | barang |
| `type` | enum | lihat halaman **API Gudang** |
| `cursor`, `limit` | | paginasi |

#### Endpoint umum

##### `GET /ping`

Memvalidasi key tanpa menyentuh data. Cocok sebagai health check.

```json
{ "ok": true, "key_name": "Integrasi Google Sheets" }
```

##### `GET /branches`

Seluruh cabang aktif, urut `id`. Tidak berpaginasi dan tidak punya parameter.

```json
{
  "data": [
    { "id": 1, "code": "PST", "name": "Cabang Pusat" },
    { "id": 2, "code": "BDG", "name": "Cabang Bandung" }
  ]
}
```

Objek `branch` dengan tiga field yang sama muncul tertanam di hampir semua data lain.


### API Penjualan (Sales)

> Endpoint /sales beserta item dan pembayaran yang menyatu, cara membaca blok amounts, ledger pemasukan /sales/payments, dan pekerjaan faset /sales/facets.

Ini domain yang paling sering dipakai. Satu objek `sale` = satu transaksi penjualan, **sudah lengkap dengan item dan pembayarannya** — Anda tidak perlu request tambahan per transaksi.

#### `GET /sales`

Parameter lengkap ada di **Referensi Endpoint**. Yang paling sering dipakai:

```bash
# semua perubahan sejak polling terakhir, termasuk penghapusan
curl -H "Authorization: Bearer $KEY" \
  "$BASE/sales?updated_since=2026-08-13T05:30:12.000Z&include_deleted=true&limit=200"

# backfill satu bulan untuk satu cabang
curl -H "Authorization: Bearer $KEY" \
  "$BASE/sales?transaction_date_from=2026-07-31T17:00:00Z&transaction_date_to=2026-08-31T16:59:59Z&branch_id=2"
```

##### Contoh objek

```json
{
  "id": 18234,
  "branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
  "sales_order_number": "SO-PST-1042",
  "invoice_number": "INV-PST-987",
  "is_point_of_sale": false,
  "transaction_date": "2026-08-13T02:11:40.000Z",
  "invoice_date": "2026-08-13T05:30:12.000Z",
  "status": "COMPLETED",
  "canceled_reason": null,
  "customer": { "id": 511, "name": "Budi Santoso" },
  "salesperson": { "id": 7, "name": "Dewi" },
  "memo": null,
  "amounts": {
    "sub_total": 1500000,
    "item_discount_total": 50000,
    "sale_discount": 100000,
    "total": 1350000,
    "insurance_total": 300000,
    "net_total": 1050000,
    "paid_total": 1050000,
    "outstanding": 0
  },
  "items": [
    {
      "id": 90101,
      "item_id": 3321,
      "name": "Frame CONTOH X-01 Black",
      "brand": "CONTOH",
      "category": "Frame",
      "quantity": 1,
      "unit_price": 1500000,
      "discount": 50000,
      "line_total": 1450000
    }
  ],
  "payments": [
    {
      "id": 44210,
      "type": "ASSURANCE",
      "amount": 300000,
      "paid_at": "2026-08-13T02:11:40.000Z",
      "bank": null,
      "insurance": { "id": 3, "name": "BPJS Kesehatan", "card_number": "00012345" }
    },
    {
      "id": 44211,
      "type": "QRIS",
      "amount": 1050000,
      "paid_at": "2026-08-13T05:30:12.000Z",
      "bank": { "id": 1, "name": "BCA" },
      "insurance": null
    }
  ],
  "created_at": "2026-08-13T02:11:40.000Z",
  "updated_at": "2026-08-13T05:30:12.000Z",
  "deleted_at": null
}
```

##### Field header transaksi

| Field | Tipe | Arti |
|---|---|---|
| `id` | int | Kunci utama. **Pakai ini untuk upsert.** |
| `branch` | objek | Cabang tempat transaksi dibuat |
| `sales_order_number` | string | Format `SO-{kode cabang}-{urutan}`; menjadi `POS-...` untuk transaksi kasir langsung |
| `invoice_number` | string / null | Format `INV-{kode cabang}-{urutan}`; `null` selama belum difakturkan |
| `is_point_of_sale` | bool | `true` untuk transaksi kasir langsung (tanpa pesanan) |
| `transaction_date` | datetime | Tanggal order — dasar rekap penjualan |
| `invoice_date` | datetime / null | Tanggal faktur terbit |
| `status` | enum | `OPEN`, `COMPLETED`, atau `CANCELED` |
| `canceled_reason` | string / null | Alasan pembatalan |
| `customer` | objek / null | Pelanggan; `null` untuk transaksi tanpa member |
| `salesperson` | objek | Pengguna Lensiro yang membuat transaksi |
| `memo` | string / null | Catatan bebas dari kasir |
| `created_at` / `updated_at` | datetime | Waktu dibuat / terakhir diubah |
| `deleted_at` | datetime / null | Terisi berarti transaksi sudah dihapus |

Arti `status`:

| Nilai | Arti |
|---|---|
| `OPEN` | Sudah dibuat, belum difakturkan — pesanan masih berjalan |
| `COMPLETED` | Sudah difakturkan, `invoice_number` terisi |
| `CANCELED` | Dibatalkan; alasannya di `canceled_reason` |

##### Field item

| Field | Arti |
|---|---|
| `id` | Id baris item, bukan id barang |
| `item_id` | Id barang di katalog — sambungkan ke `/warehouse/items` |
| `name`, `brand`, `category` | Nama, merek, dan kategori barang |
| `quantity` | Jumlah |
| `unit_price` | Harga satuan |
| `discount` | Diskon **untuk seluruh baris**, bukan per unit |
| `line_total` | `unit_price × quantity − discount` |

##### Field pembayaran

| Field | Arti |
|---|---|
| `type` | `CASH`, `DEBIT`, `CREDIT`, `QRIS`, `ASSURANCE`, `POINT`, `REFUND` |
| `amount` | Nominal. **`REFUND` bernilai negatif**, jadi penjumlahan biasa sudah benar |
| `paid_at` | Waktu pembayaran diterima |
| `bank` | Bank untuk transaksi kartu/transfer, kalau ada |
| `insurance` | Penjamin untuk tipe `ASSURANCE`, berikut `card_number` |

#### Membaca blok `amounts`

Semua angka sudah dihitung server memakai rumus yang sama persis dengan tampilan di aplikasi, jadi Anda tidak perlu menghitung ulang.

| Field | Rumus |
|---|---|
| `sub_total` | Jumlah `unit_price × quantity` seluruh item — sebelum diskon apa pun |
| `item_discount_total` | Jumlah `discount` seluruh item |
| `sale_discount` | Diskon tingkat transaksi, bukan per item |
| `total` | `sub_total − item_discount_total − sale_discount` |
| `insurance_total` | Jumlah pembayaran bertipe `ASSURANCE` — **inilah "potongan BPJS/asuransi"** |
| `net_total` | `total − insurance_total` — yang harus dibayar pelanggan sendiri |
| `paid_total` | Jumlah seluruh pembayaran dikurangi `insurance_total` |
| `outstanding` | `net_total − paid_total` — sisa tagihan |

Contoh angka dari objek di atas:

```
sub_total            1.500.000   (1 frame x Rp 1.500.000)
item_discount_total     50.000
sale_discount          100.000
                    -----------
total                1.350.000
insurance_total        300.000   (BPJS menanggung sebagian)
                    -----------
net_total            1.050.000   <- tagihan ke pelanggan
paid_total           1.050.000   (QRIS)
                    -----------
outstanding                  0   <- lunas
```

> **Untuk laporan omzet, pakai `net_total`** (pendapatan yang benar-benar ditagihkan ke pelanggan) atau `total` (nilai penjualan sebelum klaim asuransi) — pilih salah satu dan konsisten. `outstanding` lebih besar dari nol berarti piutang.

#### Sub-resource satu transaksi

| Endpoint | Isi |
|---|---|
| `GET /sales/{id}` | Satu transaksi, bentuk persis sama dengan elemen list |
| `GET /sales/{id}/items` | Hanya array `items`, dibungkus `{ "data": [...] }` |
| `GET /sales/{id}/payments` | Hanya array `payments`, dibungkus `{ "data": [...] }` |
| `GET /sales/{id}/facets` | Pekerjaan faset transaksi itu, berpaginasi |

Semuanya membalas `404 not_found` kalau transaksi tidak ada atau sudah dihapus.

> Endpoint per-id ditujukan untuk **pencarian satu-satu**, misalnya menampilkan detail di layar Anda. Untuk tarik data massal, selalu pakai list `/sales` — item dan pembayaran sudah ikut di dalamnya, jadi menelusuri per id hanya memboroskan kuota rate limit.

#### `GET /sales/payments` — ledger pemasukan

Satu baris per **pembayaran**, bukan per transaksi. Ini padanan langsung Laporan Pemasukan di aplikasi, dan bentuk yang paling nyaman untuk rekap arus kas: cukup jumlahkan per `type` per hari di sisi Anda.

```bash
curl -H "Authorization: Bearer $KEY" \
  "$BASE/sales/payments?paid_from=2026-08-01T17:00:00Z&type=QRIS"
```

```json
{
  "id": 44211,
  "sale_id": 18234,
  "sales_order_number": "SO-PST-1042",
  "invoice_number": "INV-PST-987",
  "branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
  "type": "QRIS",
  "amount": 1050000,
  "paid_at": "2026-08-13T05:30:12.000Z",
  "cashier": { "id": 7, "name": "Dewi" },
  "bank": { "id": 1, "name": "BCA" },
  "insurance": null,
  "created_at": "2026-08-13T05:30:12.000Z",
  "updated_at": "2026-08-13T05:30:12.000Z",
  "deleted_at": null
}
```

Bedanya dengan `payments` yang tertanam di objek sale: di sini setiap baris membawa konteks transaksinya (nomor SO, faktur, cabang) dan kasir yang menerima, serta bisa langsung difilter per tanggal bayar dan per metode.

> **Uang masuk bukan omzet.** Satu transaksi bisa dibayar dicicil lintas hari, dan tanggal bayar bisa jauh berbeda dari tanggal order. Untuk laporan penjualan pakai `/sales`; untuk laporan kas pakai `/sales/payments`. Ingat juga bahwa pembayaran `ASSURANCE` bukan uang tunai yang masuk hari itu, dan `POINT` bukan uang sama sekali — pisahkan keduanya kalau Anda merekap kas.

#### `GET /sales/facets` — pekerjaan faset (Fasset)

Cerminan laporan Fasset: pekerjaan pemasangan dan pemotongan lensa ke frame.

```bash
curl -H "Authorization: Bearer $KEY" "$BASE/sales/facets?status=FAILED"
```

```json
{
  "id": 5521,
  "sale_id": 18234,
  "sales_order_number": "SO-PST-1042",
  "invoice_number": "INV-PST-987",
  "branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
  "status": "SUCCESS",
  "order_date": "2026-08-13T02:11:40.000Z",
  "worked_at": "2026-08-13T04:02:00.000Z",
  "customer_name": "Budi Santoso",
  "worker_name": "Agus",
  "memo": null,
  "created_at": "2026-08-13T04:02:00.000Z",
  "updated_at": "2026-08-13T06:00:00.000Z",
  "deleted_at": null
}
```

| Field | Arti |
|---|---|
| `status` | `WORKING` (dikerjakan), `SUCCESS` (berhasil), `FAILED` (gagal atau pecah) |
| `order_date` | Tanggal transaksi induk |
| `worked_at` | Tanggal pekerjaan dicatat |
| `worker_name` | Pengguna Lensiro yang mengerjakan |
| `memo` | Catatan; untuk `FAILED` biasanya berisi penyebab kegagalan |

Nilai komisi pekerjaan sengaja tidak diekspos karena termasuk data penggajian internal.

#### Hal-hal yang sering menjebak

- **Nomor SO bukan kunci penyimpanan.** Untuk upsert pakai `id`; nomor SO dan faktur untuk ditampilkan ke manusia.
- `invoice_number` dan `invoice_date` bernilai `null` sampai transaksi difakturkan. Kalau rekap Anda memerlukan nomor faktur, saring `status = "COMPLETED"`.
- **Transaksi bisa berubah setelah pertama Anda lihat**: pembayaran menyusul, faktur terbit belakangan, item diperbaiki, atau transaksi dibatalkan. Selalu upsert.
- Diskon per item adalah nilai **seluruh baris**, bukan per unit.
- Data HPP / harga modal dan resep kacamata sengaja tidak ada di v1 — lihat **Batasan, Versi & Rencana**.


### API Pelanggan (Members)

> Endpoint /members: profil pelanggan, level member, saldo dan mutasi poin, serta riwayat belanja per pelanggan.

> **Data pelanggan berisi informasi pribadi** — nama, alamat, nomor telepon, nomor identitas, tanggal lahir. Perlakukan sesuai kebijakan privasi toko Anda: simpan hanya yang perlu, batasi siapa yang bisa membacanya, dan jangan teruskan ke pihak ketiga tanpa dasar yang jelas.

#### `GET /members`

```bash
curl -H "Authorization: Bearer $KEY" \
  "$BASE/members?updated_since=2026-08-01T00:00:00Z&include_deleted=true"
```

```json
{
  "id": 511,
  "branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
  "name": "Budi Santoso",
  "identity_number": "3173xxxxxxxxxxxx",
  "telephone_number": "0812xxxxxxx",
  "address": "Jl. Merdeka 1",
  "birthday": "17-08-1990",
  "gender": "MALE",
  "email": "budi@example.com",
  "member_level": { "id": 1, "name": "Gold" },
  "point_balance": 1200,
  "memo": null,
  "created_at": "2025-01-10T03:00:00.000Z",
  "updated_at": "2026-08-13T05:30:12.000Z",
  "deleted_at": null
}
```

| Field | Tipe | Catatan |
|---|---|---|
| `id` | int | Kunci upsert |
| `branch` | objek / null | Cabang tempat pelanggan didaftarkan |
| `name` | string | Nama pelanggan |
| `identity_number` | string / null | Nomor KTP atau identitas lain, apa adanya |
| `telephone_number` | string / null | Nomor telepon, apa adanya — belum dinormalkan |
| `address` | string / null | Alamat |
| `birthday` | string / null | **String `DD-MM-YYYY`**, bukan tanggal ISO |
| `gender` | enum / null | `MALE`, `FEMALE`, atau `null` |
| `email` | string / null | Surel |
| `member_level` | objek / null | Level keanggotaan, misalnya Gold |
| `point_balance` | int | Saldo poin saat request dijalankan |
| `memo` | string / null | Catatan bebas |

Dua field yang sering bikin bingung:

- **`birthday` adalah teks, bukan tanggal.** Di database memang tersimpan sebagai string `DD-MM-YYYY`, dan API meneruskannya apa adanya alih-alih berpura-pura itu tanggal. Kalau Anda butuh pengingat ulang tahun, urai sendiri formatnya dan siapkan penanganan untuk nilai yang tidak lengkap.
- **`telephone_number` belum dinormalkan.** Bisa berbentuk `0812...`, `+62812...`, atau mengandung spasi dan tanda hubung, tergantung cara staf mengetiknya. Normalkan di sisi Anda sebelum dipakai untuk WhatsApp blast.

##### Peringatan penting soal saldo poin

`point_balance` dihitung ulang setiap request dari penjumlahan mutasi poin — tidak ada kolom saldo di database.

Konsekuensinya: **perubahan poin tidak mengubah `updated_at` pelanggan.** Polling `updated_since` tidak akan mengirim ulang pelanggan yang hanya berubah poinnya. Kalau Anda melacak poin, pilih salah satu:

- poll `/members/{id}/point-logs` untuk pelanggan yang Anda pantau, atau
- lakukan *full refresh* `/members` secara berkala, misalnya mingguan, atau
- jangan simpan saldo poin sama sekali — ambil langsung saat dibutuhkan.

#### `GET /members/{id}`

Satu pelanggan, bentuk sama persis. `404 not_found` kalau tidak ada atau sudah dihapus.

#### `GET /members/{id}/sales`

Riwayat belanja pelanggan tersebut. Bentuk objek, parameter, dan paginasinya **sama persis** dengan `/sales` — ini memang `/sales` yang sudah disaring ke satu pelanggan.

Berguna untuk halaman profil pelanggan di CRM Anda. Untuk analitik massal, lebih hemat menarik `/sales` sekali lalu mengelompokkan sendiri berdasarkan `customer.id`.

#### `GET /members/{id}/point-logs`

Riwayat mutasi poin. Saldo pelanggan sama dengan jumlah seluruh baris ini.

```json
{
  "id": 8801,
  "amount": 150,
  "is_manual": false,
  "memo": null,
  "sale_payment_id": 44211,
  "branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
  "created_at": "2026-08-13T05:30:12.000Z",
  "updated_at": "2026-08-13T05:30:12.000Z",
  "deleted_at": null
}
```

| Field | Arti |
|---|---|
| `amount` | Positif berarti poin bertambah, negatif berarti poin dipakai atau dikurangi |
| `is_manual` | `true` bila disesuaikan manual oleh staf, `false` bila otomatis dari transaksi |
| `sale_payment_id` | Pembayaran yang memicu mutasi; `null` untuk penyesuaian manual |
| `memo` | Alasan penyesuaian manual |

#### Yang tidak tersedia di v1

Riwayat pemeriksaan mata, resep kacamata, dan rekam medis pelanggan **tidak** diekspos — itu data kesehatan, kelas paling sensitif dalam sistem, dan menunggu dukungan *scoped key*. Begitu juga riwayat pesan WhatsApp atau email dan umpan balik pelanggan. Detailnya di **Batasan, Versi & Rencana**.


### API Gudang (Warehouse)

> Endpoint /warehouse: katalog barang, stok per cabang sebagai snapshot, dan riwayat barang masuk/keluar beserta cara merekonsiliasinya.

Domain gudang punya satu keanehan yang perlu dipahami lebih dulu: **Lensiro tidak menyimpan angka stok sebagai kolom.** Stok selalu dihitung ulang dari seluruh riwayat pergerakan barang. Itu membuat angkanya selalu konsisten dengan riwayat, tapi juga membuat stok tidak bisa disinkronkan secara inkremental seperti data lain.

#### `GET /warehouse/items` — katalog barang

```bash
curl -H "Authorization: Bearer $KEY" "$BASE/warehouse/items?category_id=1&limit=200"
```

```json
{
  "id": 3321,
  "code": "FR3321",
  "custom_code": "8991234567890",
  "display_code": "8991234567890",
  "name": "Frame CONTOH X-01 Black",
  "category": { "id": 1, "code": "FR", "name": "Frame" },
  "sub_category": { "id": 4, "name": "Full Rim" },
  "brand": { "id": 9, "name": "CONTOH" },
  "sub_brand": { "id": 21, "name": "X Series" },
  "color": { "id": 2, "name": "Black" },
  "sub_color": null,
  "prescription": { "spherical": "-2.00", "cylinder": "-0.50", "addition": null },
  "unit": "pcs",
  "sell_price": 1000000,
  "expired_date": null,
  "memo": null,
  "created_at": "2025-03-01T00:00:00.000Z",
  "updated_at": "2026-08-01T00:00:00.000Z",
  "deleted_at": null
}
```

| Field | Catatan |
|---|---|
| `id` | **Kunci upsert.** Satu-satunya pengenal yang tidak pernah berubah |
| `code` | Kode internal Lensiro. **Bisa berubah** kalau kategori barang diganti |
| `custom_code` | Barcode toko atau kode dari sistem lama; `null` kalau tidak diisi |
| `display_code` | `custom_code` bila ada, kalau tidak `code` — inilah yang tercetak di label barcode |
| `category` sampai `sub_color` | Klasifikasi barang; masing-masing bisa `null` |
| `prescription` | Ukuran lensa (`spherical`, `cylinder`, `addition`) sebagai teks; semuanya `null` untuk barang non-lensa |
| `unit` | `"pcs"` atau `null` |
| `sell_price` | Harga jual standar, Rupiah bulat |
| `expired_date` | Tanggal kedaluwarsa untuk barang yang punya, misalnya cairan lensa kontak |

> **Selalu upsert berdasarkan `id`.** Kalau Anda memakai `code` sebagai kunci, katalog Anda akan pecah begitu ada barang yang pindah kategori. Harga modal atau HPP sengaja tidak diekspos di v1.

Detail satu barang: `GET /warehouse/items/{id}`.

#### `GET /warehouse/items/{id}/stocks`

Stok satu barang di seluruh cabang. Tidak berpaginasi (jumlah barisnya sebanyak cabang) dan dibungkus `{ "data": [...] }`. Bentuk barisnya sama dengan `/warehouse/stocks` di bawah.

#### `GET /warehouse/stocks` — snapshot stok

Stok terkini per pasangan **(barang, cabang)**.

```bash
curl -H "Authorization: Bearer $KEY" "$BASE/warehouse/stocks?branch_id=2&limit=500"
```

```json
{
  "item_id": 3321,
  "item_code": "FR3321",
  "item_name": "Frame CONTOH X-01 Black",
  "branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
  "on_hand": 4,
  "as_of": "2026-08-16T02:00:00.000Z"
}
```

Yang perlu diketahui:

- **Ini snapshot, bukan data yang bisa disinkronkan inkremental.** Tidak ada `updated_since` dan tidak ada `deleted_at` — bukan karena terlewat, tapi karena angka stok tidak punya "waktu terakhir berubah" yang bisa dipercaya. Menyediakan `updated_since` di sini akan jadi janji palsu.
- **Cara pakainya: tarik ulang seluruh snapshot secara berkala**, lalu timpa tabel stok Anda. Jangan mencoba men-*diff* atau menambahkan selisih.
- `as_of` adalah waktu server saat snapshot dihitung. Simpan nilai ini supaya Anda tahu seberapa baru angkanya.
- Barang nonaktif, yang sudah dihapus dari katalog, tidak muncul.
- Barang yang tidak punya catatan stok sama sekali di sebuah cabang tidak menghasilkan baris — anggap tidak ada baris sama dengan nol.
- `on_hand` bisa **negatif** kalau ada kesalahan pencatatan di lapangan, misalnya barang terjual sebelum penerimaan dicatat. Jangan asumsikan selalu nol atau lebih.

#### `GET /warehouse/stock-movements` — barang masuk & keluar

Ledger pergerakan stok, satu baris per kejadian. Ini cerminan laporan Perubahan Stok, dan sumber angka yang menjelaskan **kenapa** stok bergerak.

```bash
curl -H "Authorization: Bearer $KEY" \
  "$BASE/warehouse/stock-movements?occurred_from=2026-08-01T17:00:00Z&item_id=3321"
```

```json
{
  "id": "sale:90101",
  "type": "SALE",
  "quantity_change": -1,
  "item": { "id": 3321, "code": "FR3321", "name": "Frame CONTOH X-01 Black" },
  "branch": { "id": 2, "code": "PST", "name": "Cabang Pusat" },
  "reference": {
    "sale_id": 18234,
    "sales_order_number": "SO-PST-1042",
    "invoice_number": "INV-PST-987"
  },
  "memo": null,
  "occurred_at": "2026-08-13T02:11:40.000Z"
}
```

- `quantity_change` **bertanda**: positif berarti stok bertambah, negatif berarti stok berkurang.
- `id` berbentuk `"{jenis}:{nomor}"`, misalnya `sale:90101` atau `purchase-receive:8812`. Bentuknya string, bukan angka — pakai apa adanya sebagai kunci upsert.

##### Jenis pergerakan

| `type` | Tanda | Arti | Isi `reference` |
|---|---|---|---|
| `PURCHASE_RECEIVE` | + | Penerimaan barang dari pembelian | `purchase_receive_id` |
| `TRANSFER_IN` | + | Mutasi masuk dari cabang lain, setelah diterima | `stock_mutation_id` |
| `ADJUSTMENT` | +/− | Penyesuaian stok opname atau penghapusan | `adjustment_job_id`, `adjustment_type` |
| `SALE` | − | Barang terjual | `sale_id`, `sales_order_number`, `invoice_number` |
| `COMP_ITEM` | − | Barang bonus atau komplimen dalam transaksi | `sale_id`, `sales_order_number`, `invoice_number` |
| `PURCHASE_RETURN` | − | Retur barang ke supplier | `purchase_return_id` |
| `PURCHASE_SENT` | − | Barang dikirim untuk pesanan pembelian | `purchase_order_id` |
| `TRANSFER_OUT` | − | Mutasi keluar ke cabang lain | `stock_mutation_id` |
| `FIT_BUFFER` | − | Barang dipesan lewat Lensiro Fit | `fit_order_id` |

Nilai-nilai itu juga yang diterima parameter `type`. Untuk `ADJUSTMENT`, `adjustment_type` bernilai `OPNAME` atau `WRITE_OFF`.

##### Catatan sinkronisasi

Endpoint ini sengaja **tidak** punya `updated_since`, karena pergerakan stok bukan data yang hanya bertambah:

- **`TRANSFER_OUT` muncul saat barang dikirim; `TRANSFER_IN` baru muncul setelah cabang tujuan mengonfirmasi penerimaan.** Jadi selama barang di perjalanan, stok berkurang di cabang asal tanpa bertambah di cabang tujuan — itu perilaku yang benar, bukan bug.
- Waktu `occurred_at` untuk `TRANSFER_IN` memakai waktu perubahan terakhir dokumen mutasi, karena waktu penerimaan tidak disimpan terpisah. Nilainya bisa bergeser kalau dokumen mutasi diedit.
- Penyesuaian opname bisa diubah setelah dibuat.

**Pola yang disarankan:** tarik ulang **jendela 7 hari terakhir** secara berkala, misalnya tiap jam, lalu upsert berdasarkan `id`. Untuk backfill awal, tarik per rentang bulanan dengan `occurred_from` dan `occurred_to`.

##### Rekonsiliasi

Jumlah `quantity_change` seluruh pergerakan untuk satu pasangan (barang, cabang) sama dengan `on_hand` di `/warehouse/stocks` — keduanya dihitung dari sumber yang sama. Kalau angka Anda tidak cocok, penyebab yang paling mungkin:

1. Rentang `occurred_from` / `occurred_to` memotong sebagian riwayat. Jumlah pergerakan sebagian tidak akan pernah sama dengan stok total.
2. Paginasi berhenti sebelum `has_more` bernilai `false`.
3. Snapshot ditarik pada waktu berbeda dengan pergerakan; bandingkan `as_of` dengan `occurred_at` terakhir.

> **Untuk angka stok yang dipakai mengambil keputusan, `/warehouse/stocks` adalah sumber kebenarannya.** Pakai `/warehouse/stock-movements` untuk menjelaskan pergerakan dan menyusun kartu stok, bukan untuk menghitung saldo sendiri.


### Panduan Integrasi & Contoh Kode

> Resep polling yang benar (backfill, updated_since, upsert, tombstone) plus contoh kode siap pakai untuk Google Apps Script, Python, dan Node.js.

Halaman ini adalah cara **yang didukung** untuk menarik data Lensiro secara berkala. Kalau integrasi Anda mengikuti pola di bawah, ia tetap benar meski transaksi diedit, dibatalkan, atau dihapus.

#### Pola dasar: empat langkah

```
1. VALIDASI   -> /ping dan /branches, sekali di awal
2. BACKFILL   -> tarik riwayat per rentang bulanan, satu kali saja
3. POLLING    -> tarik perubahan dengan updated_since, berkala
4. UPSERT     -> simpan berdasarkan id; hapus baris yang punya deleted_at
```

#### 1. Validasi

```bash
curl -H "Authorization: Bearer $KEY" "$BASE/ping"
curl -H "Authorization: Bearer $KEY" "$BASE/branches"
```

Simpan pemetaan cabang dari `/branches` supaya `branch_id` di data lain bisa diterjemahkan tanpa hardcode.

#### 2. Backfill awal, sekali saja

Tarik riwayat per bulan supaya setiap request ringan dan mudah diulang kalau gagal di tengah jalan:

```
GET /sales?transaction_date_from=2026-01-01T00:00:00Z
         &transaction_date_to=2026-01-31T23:59:59Z
         &include_deleted=true
         &limit=200
-> ikuti next_cursor sampai has_more = false
-> lanjut ke bulan berikutnya
```

Beri jeda sekitar satu detik antar halaman supaya tidak menyenggol batas 60 request per menit.

#### 3. Polling berkala, misalnya tiap jam

```
last = nilai updated_at terbesar yang tersimpan
       (kalau belum ada, pakai waktu selesai backfill)

GET /sales?updated_since={last}&include_deleted=true&limit=200
-> ikuti next_cursor sampai has_more = false
-> untuk setiap baris:
     kalau deleted_at terisi -> hapus atau tandai batal di sistem Anda
     kalau tidak             -> UPSERT berdasarkan id
-> simpan updated_at terbesar yang baru
```

Pola yang sama berlaku untuk `/sales/payments`, `/sales/facets`, `/members`, dan `/warehouse/items`.

**Kenapa harus upsert, bukan insert?** Karena transaksi bisa berubah setelah pertama kali Anda lihat — pembayaran menyusul, faktur terbit belakangan, item diperbaiki, atau transaksi dibatalkan. `updated_since` akan mengirim transaksi itu lagi, dan salinan Anda harus menimpanya, bukan menduplikasinya.

**Simpan `updated_at` terbesar hanya setelah seluruh halaman selesai ditarik.** Kalau disimpan di tengah jalan lalu proses gagal, polling berikutnya akan melompati data yang belum sempat masuk.

#### 4. Yang tidak mengikuti pola ini

| Data | Pola yang benar |
|---|---|
| `/warehouse/stocks` | Snapshot — tarik ulang seluruhnya secara berkala, timpa tabel Anda |
| `/warehouse/stock-movements` | Tarik ulang jendela 7 hari terakhir, upsert berdasarkan `id` |
| Saldo poin pelanggan | Tidak mengubah `updated_at` member — poll `/members/{id}/point-logs` atau full refresh berkala |

#### Resep siap pakai

| Kebutuhan | Cara |
|---|---|
| Omzet harian per cabang | `/sales`, kelompokkan `net_total` per tanggal (setelah konversi ke WIB) dan `branch.id`; buang `status = "CANCELED"` |
| Arus kas per metode bayar | `/sales/payments`, kelompokkan `amount` per `paid_at` dan `type`; pisahkan `ASSURANCE` dan `POINT` karena bukan uang tunai |
| Piutang berjalan | `/sales`, saring `amounts.outstanding` lebih besar dari nol dan `status` bukan `CANCELED` |
| Klaim BPJS atau asuransi | `/sales/payments?type=ASSURANCE`, atau `amounts.insurance_total` di objek sale |
| Barang terlaris | `/sales`, kelompokkan `items[].quantity` per `item_id` |
| Nilai persediaan | `/warehouse/stocks` dikalikan `sell_price` dari `/warehouse/items` (HPP tidak tersedia di v1) |
| Kartu stok satu barang | `/warehouse/stock-movements?item_id=...`, urut `occurred_at` |
| Sinkron pelanggan ke CRM | `/members` dengan `updated_since`; normalkan `telephone_number` di sisi Anda |

#### Contoh: Google Apps Script ke Google Sheets

Simpan key lewat **Project Settings → Script Properties** dengan nama `LENSIRO_KEY`, jangan ditulis langsung di kode.

```javascript
const BASE = 'https://app-anda.lensiro.com/api/v1';

function tarikPenjualan() {
  const props = PropertiesService.getScriptProperties();
  const key = props.getProperty('LENSIRO_KEY');
  const since = props.getProperty('last_updated_at') || '2026-01-01T00:00:00Z';
  const sheet = SpreadsheetApp.getActive().getSheetByName('Penjualan');

  let cursor = null;
  let maxUpdated = since;
  const rows = [];

  do {
    let url = BASE + '/sales?include_deleted=true&limit=200'
            + '&updated_since=' + encodeURIComponent(since);
    if (cursor) url += '&cursor=' + encodeURIComponent(cursor);

    const res = UrlFetchApp.fetch(url, {
      headers: { Authorization: 'Bearer ' + key },
      muteHttpExceptions: true,
    });

    if (res.getResponseCode() === 429) {
      Utilities.sleep(1000 * (Number(res.getHeaders()['Retry-After']) || 5));
      continue;
    }
    if (res.getResponseCode() !== 200) {
      throw new Error(res.getContentText());
    }

    const body = JSON.parse(res.getContentText());
    body.data.forEach(function (s) {
      if (s.updated_at > maxUpdated) maxUpdated = s.updated_at;
      rows.push([
        s.id,
        s.sales_order_number,
        s.invoice_number,
        s.transaction_date,
        s.branch.name,
        s.status,
        s.amounts.net_total,
        s.amounts.paid_total,
        s.deleted_at ? 'DIHAPUS' : '',
      ]);
    });

    cursor = body.pagination.next_cursor;
  } while (cursor);

  if (rows.length) {
    sheet.getRange(sheet.getLastRow() + 1, 1, rows.length, rows[0].length)
         .setValues(rows);
  }
  props.setProperty('last_updated_at', maxUpdated);
}
```

> Contoh di atas **menambahkan baris**, belum meng-upsert. Untuk pemakaian sungguhan, cari dulu baris dengan `id` yang sama lalu timpa — kalau tidak, transaksi yang berubah akan muncul dua kali di sheet Anda.

Jadwalkan lewat **Triggers → Add Trigger → Time-driven → Hour timer**.

#### Contoh: Python

```python
import os
import time
import requests

BASE = "https://app-anda.lensiro.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['LENSIRO_API_KEY']}"}


def tarik(path, **params):
    """Generator yang menghasilkan seluruh baris dari sebuah endpoint list."""
    cursor = None
    while True:
        query = {**params, "limit": 200}
        if cursor:
            query["cursor"] = cursor

        res = requests.get(BASE + path, headers=HEADERS, params=query, timeout=30)

        if res.status_code == 429:
            time.sleep(int(res.headers.get("Retry-After", 5)))
            continue
        res.raise_for_status()

        body = res.json()
        yield from body["data"]

        if not body["pagination"]["has_more"]:
            return
        cursor = body["pagination"]["next_cursor"]


terbaru = "2026-08-01T00:00:00Z"
for sale in tarik("/sales", updated_since=terbaru, include_deleted="true"):
    if sale["deleted_at"]:
        hapus(sale["id"])          # ganti dengan penyimpanan Anda
    else:
        upsert(sale)               # ganti dengan penyimpanan Anda
    terbaru = max(terbaru, sale["updated_at"])

simpan_checkpoint(terbaru)
```

#### Contoh: Node.js

```javascript
const BASE = 'https://app-anda.lensiro.com/api/v1';
const KEY = process.env.LENSIRO_API_KEY;

async function* tarik(path, params = {}) {
  let cursor = null;
  for (;;) {
    const query = new URLSearchParams({ ...params, limit: '200' });
    if (cursor) query.set('cursor', cursor);

    const res = await fetch(BASE + path + '?' + query, {
      headers: { Authorization: 'Bearer ' + KEY },
    });

    if (res.status === 429) {
      const wait = Number(res.headers.get('Retry-After') || 5);
      await new Promise((r) => setTimeout(r, wait * 1000));
      continue;
    }
    if (!res.ok) throw new Error(await res.text());

    const body = await res.json();
    yield* body.data;

    if (!body.pagination.has_more) return;
    cursor = body.pagination.next_cursor;
  }
}

for await (const sale of tarik('/sales', { updated_since: '2026-08-01T00:00:00Z' })) {
  console.log(sale.id, sale.sales_order_number, sale.amounts.net_total);
}
```

#### Memakai API ini dengan agent AI

API ini cocok dijadikan alat (*tool*) untuk agent AI internal — misalnya asisten yang bisa ditanyai "omzet cabang Bandung minggu lalu berapa?". Beberapa saran:

- Berikan halaman **Referensi Endpoint** sebagai konteks; strukturnya memang dibuat ringkas untuk dibaca mesin.
- Batasi agent hanya ke endpoint list dengan `limit` kecil, supaya satu pertanyaan tidak menghabiskan kuota rate limit.
- Ingatkan agent bahwa semua tanggal UTC dan harus dikonversi ke WIB sebelum dijawab ke pengguna.
- Karena key memberi akses baca penuh, jangan tempelkan key ke agent yang bisa diakses pelanggan.

#### Checklist produksi

- Key disimpan sebagai secret, dan khusus untuk integrasi ini saja.
- Loop paginasi berhenti berdasarkan `has_more`.
- Semua filter dibawa ulang di setiap halaman berikutnya.
- Penyimpanan melakukan upsert berdasarkan `id`, termasuk `id` berbentuk string untuk pergerakan stok.
- `include_deleted=true` dipakai, dan `deleted_at` ditindaklanjuti.
- `429` ditangani dengan `Retry-After`; `500` dicoba ulang dengan jeda bertingkat.
- Checkpoint `updated_at` hanya disimpan setelah seluruh halaman selesai.
- Tanggal dikonversi dari UTC ke WIB sebelum dikelompokkan per hari.
- Field JSON yang tidak dikenal diabaikan, bukan menyebabkan error.


### Kode Error & Pemecahan Masalah

> Daftar lengkap kode error beserta penyebabnya, kebijakan percobaan ulang, dan jawaban untuk masalah yang paling sering muncul.

#### Bentuk error

Semua error memakai bentuk yang sama:

```json
{ "error": { "code": "invalid_limit", "message": "limit must be an integer between 1 and 500." } }
```

Gunakan `error.code` untuk logika program. `error.message` ditujukan untuk manusia dan kata-katanya bisa berubah.

#### Daftar lengkap kode error

| HTTP | `code` | Penyebab | Cara memperbaiki |
|---|---|---|---|
| 400 | `invalid_limit` | `limit` bukan bilangan bulat 1–500 | Pakai nilai 1–500 |
| 400 | `invalid_date` | Parameter tanggal tidak bisa dibaca | Pakai ISO 8601, contoh `2026-08-13T00:00:00Z` |
| 400 | `invalid_parameter` | Angka negatif atau pecahan, atau nilai enum di luar daftar | Cek tipe dan daftar nilai di **Referensi Endpoint** |
| 400 | `invalid_cursor` | `cursor` rusak atau bukan berasal dari respons API | Jangan ubah cursor; kalau ragu, mulai lagi tanpa cursor |
| 400 | `invalid_id` | `{id}` di path bukan bilangan bulat minimal 1 | Periksa URL yang dibentuk program Anda |
| 401 | `missing_api_key` | Header `Authorization` tidak ada atau salah bentuk | Kirim `Authorization: Bearer lsk_live_...` |
| 401 | `invalid_api_key` | Key tidak dikenal atau tidak diawali `lsk_` | Pastikan key tersalin utuh |
| 401 | `revoked_api_key` | Key sudah dicabut | Buat key baru di **Pengaturan → API Key** |
| 401 | `expired_api_key` | Key sudah kedaluwarsa | Buat key baru |
| 404 | `not_found` | Objek tidak ada, atau sudah dihapus | Endpoint per-id tidak melayani data terhapus |
| 429 | `rate_limited` | Melebihi 60 request per menit per key, atau 120 per menit per IP | Tunggu sesuai `Retry-After` |
| 500 | `internal_error` | Kesalahan di sisi server | Coba ulang dengan jeda bertingkat; kalau terus terjadi, hubungi tim Lensiro dengan URL dan waktunya |

Metode selain `GET` dijawab `405` tanpa body error.

#### Kebijakan percobaan ulang

| Status | Boleh diulang? | Cara |
|---|---|---|
| 400, 401, 404 | Tidak | Perbaiki request atau key dulu — mengulang akan gagal lagi |
| 429 | Ya | Tunggu sebanyak detik di `Retry-After`, lalu ulangi request yang sama |
| 500 | Ya | Jeda bertingkat: 1 detik, 2, 4, 8, maksimal lima kali |
| Timeout jaringan | Ya | Aman — semua endpoint hanya membaca, jadi mengulang tidak mengubah apa pun |

#### Pemecahan masalah

##### Semua request dijawab 401 padahal key baru dibuat

Urut dari yang paling sering: ada spasi atau baris baru ikut tersalin; kata `Bearer` hilang atau tanpa spasi; key ditaruh di query string, yang tidak didukung; atau key sudah dicabut. Cek dengan `/ping` lebih dulu — kalau `/ping` berhasil tapi endpoint lain gagal, masalahnya bukan di key.

##### `data` kosong padahal datanya jelas ada

1. **Zona waktu.** Filter tanggal memakai UTC. "Hari ini" di WIB dimulai pukul `17:00Z` hari sebelumnya. Ini penyebab nomor satu.
2. **Salah ketik nama parameter.** Parameter yang tidak dikenal diabaikan diam-diam, jadi `branch=2` (bukan `branch_id=2`) tidak menimbulkan error tapi juga tidak menyaring apa pun.
3. **Filter saling meniadakan**, misalnya `transaction_date_from` lebih besar daripada `transaction_date_to`.
4. **`updated_since` terlalu baru** karena checkpoint Anda sudah maju lebih dulu.

##### Angka rekap saya beda dengan laporan di aplikasi

Periksa berurutan:

1. **Zona waktu** — laporan aplikasi memakai waktu lokal, API memakai UTC.
2. **Transaksi batal** ikut terkirim secara default. Buang `status = "CANCELED"` kalau laporan pembanding tidak menghitungnya.
3. **Kolom yang dibandingkan** — `total` (sebelum klaim asuransi) tidak sama dengan `net_total` (setelah klaim asuransi).
4. **Uang masuk vs omzet** — `/sales/payments` dikelompokkan per tanggal bayar, `/sales` per tanggal order. Untuk transaksi yang dicicil, keduanya memang berbeda.
5. **Paginasi berhenti terlalu cepat** — pastikan loop berjalan sampai `has_more` bernilai `false`.

##### Ada transaksi yang masuk dua kali ke sistem saya

Sistem Anda melakukan *insert*, bukan *upsert*. Ini memang harus ditangani: `updated_since` bersifat inklusif dan sengaja mengirim ulang baris di batas waktu, ditambah baris yang berubah saat paginasi berjalan. Kuncinya `id` — untuk pergerakan stok, `id` yang berbentuk string.

##### Transaksi yang dihapus tidak pernah hilang dari sistem saya

Anda belum memakai `include_deleted=true`. Tanpa itu, data terhapus berhenti terkirim tanpa penanda apa pun, dan salinan Anda tidak pernah tahu.

##### Stok di API tidak cocok dengan aplikasi

Cek `as_of` di respons — kalau snapshot Anda sudah lama, tarik ulang. Kalau masih beda, lihat bagian **Rekonsiliasi** di halaman **API Gudang**; penyebab yang paling sering adalah rentang tanggal pergerakan yang memotong sebagian riwayat.

##### Barang sudah dikirim antar cabang tapi `TRANSFER_IN` belum muncul

Memang begitu perilakunya: `TRANSFER_IN` baru tercatat setelah cabang tujuan mengonfirmasi penerimaan di aplikasi. Selama barang di perjalanan, stok berkurang di cabang asal dan belum bertambah di cabang tujuan.

##### Saldo poin pelanggan tidak pernah diperbarui

Perubahan poin tidak mengubah `updated_at` pelanggan, jadi polling `updated_since` tidak akan mengirimnya ulang. Poll `/members/{id}/point-logs`, atau lakukan full refresh `/members` secara berkala.

##### Backfill kena `429` terus

Tarik per rentang bulanan, satu halaman pada satu waktu, dan beri jeda sekitar satu detik antar request. Menaikkan `limit` ke 500 mengurangi jumlah request, tapi untuk `/sales` payload-nya jadi besar karena item dan pembayaran ikut menyatu — 100 sampai 200 biasanya paling seimbang.

##### Responsnya lambat

Perkecil `limit`, dan persempit filter dengan `branch_id` atau rentang tanggal. `/warehouse/stocks` dan `/warehouse/stock-movements` paling berat karena dihitung ulang dari seluruh riwayat — jadwalkan di luar jam sibuk toko.

#### Melaporkan masalah

Kalau masalahnya tampak berasal dari sisi Lensiro, kirimkan ke tim Lensiro: **URL lengkap** yang dipanggil (tanpa API key), **waktu kejadian** beserta zona waktunya, **kode status dan body error** yang diterima, serta nama key yang dipakai. Dengan itu kejadiannya bisa ditelusuri di log server.


### Glosarium & Daftar Enum

> Padanan istilah Indonesia ke nama field API, plus daftar lengkap nilai enum yang bisa muncul di respons.

#### Kenapa API-nya berbahasa Inggris

Aplikasi Lensiro berbahasa Indonesia, tapi seluruh path dan nama field API memakai bahasa Inggris — konvensi lazim untuk API, dan membuatnya bisa dipakai pustaka pihak ketiga tanpa penyesuaian. Tabel di bawah adalah jembatannya.

#### Padanan istilah

| Istilah di aplikasi | Di API | Keterangan |
|---|---|---|
| Penjualan / Transaksi | `sale`, `/sales` | Satu transaksi penjualan |
| Nomor SO | `sales_order_number` | `SO-{cabang}-{urutan}`, atau `POS-...` untuk kasir langsung |
| Faktur / Invoice | `invoice_number`, `invoice_date` | Terisi setelah difakturkan |
| Pelanggan / Member | `member`, `/members` | Di objek sale muncul sebagai `customer` |
| Kasir | `cashier` | Penerima pembayaran |
| Sales / Penjual | `salesperson` | Pembuat transaksi |
| Cabang | `branch`, `branch_id` | |
| Gudang | `warehouse`, `/warehouse` | |
| Barang | `item`, `/warehouse/items` | |
| Stok | `stock`, `on_hand` | |
| Perubahan Stok | `stock-movements` | Barang masuk dan keluar |
| Mutasi antar cabang | `TRANSFER_OUT` / `TRANSFER_IN` | |
| Opname | `ADJUSTMENT` dengan `adjustment_type: "OPNAME"` | |
| Faset / Fasset | `facet`, `/sales/facets` | Pekerjaan pemasangan lensa |
| Asuransi / BPJS | `ASSURANCE`, `insurance_total` | Dicatat sebagai jenis pembayaran |
| Poin | `point_balance`, `point-logs` | |
| Diskon | `discount`, `sale_discount`, `item_discount_total` | |
| Sisa tagihan / Piutang | `outstanding` | |
| Harga jual | `sell_price` | |
| Kode barang | `code`, `custom_code`, `display_code` | |
| Memo / Catatan | `memo` | |

#### Daftar enum

##### `status` pada sale

| Nilai | Arti |
|---|---|
| `OPEN` | Sudah dibuat, belum difakturkan |
| `COMPLETED` | Sudah difakturkan |
| `CANCELED` | Dibatalkan |

##### `type` pada pembayaran

| Nilai | Arti |
|---|---|
| `CASH` | Tunai |
| `DEBIT` | Kartu debit |
| `CREDIT` | Kartu kredit |
| `QRIS` | QRIS |
| `ASSURANCE` | Tanggungan asuransi atau BPJS — bukan uang tunai masuk |
| `POINT` | Ditukar dengan poin — bukan uang |
| `REFUND` | Pengembalian dana; **nilainya negatif** |

##### `status` pada faset

| Nilai | Arti |
|---|---|
| `WORKING` | Sedang dikerjakan |
| `SUCCESS` | Selesai |
| `FAILED` | Gagal, misalnya lensa pecah; penyebabnya biasanya ada di `memo` |

##### `type` pada pergerakan stok

| Nilai | Tanda | Arti |
|---|---|---|
| `PURCHASE_RECEIVE` | + | Penerimaan pembelian |
| `TRANSFER_IN` | + | Mutasi masuk, setelah diterima |
| `ADJUSTMENT` | +/− | Opname atau penghapusan persediaan |
| `SALE` | − | Terjual |
| `COMP_ITEM` | − | Barang bonus atau komplimen |
| `PURCHASE_RETURN` | − | Retur ke supplier |
| `PURCHASE_SENT` | − | Barang dikirim untuk pesanan pembelian |
| `TRANSFER_OUT` | − | Mutasi keluar |
| `FIT_BUFFER` | − | Dipesan lewat Lensiro Fit |

##### `adjustment_type`

| Nilai | Arti |
|---|---|
| `OPNAME` | Penyesuaian hasil stok opname |
| `WRITE_OFF` | Penghapusan persediaan, misalnya rusak atau hilang |

##### `gender` pada pelanggan

`MALE`, `FEMALE`, atau `null`.

#### Objek kecil yang berulang

Bentuk-bentuk ini muncul di banyak tempat dengan struktur yang selalu sama:

```json
"branch":    { "id": 2, "code": "PST", "name": "Cabang Pusat" }
"customer":  { "id": 511, "name": "Budi Santoso" }
"bank":      { "id": 1, "name": "BCA" }
"insurance": { "id": 3, "name": "BPJS Kesehatan", "card_number": "00012345" }
"item":      { "id": 3321, "code": "FR3321", "name": "Frame CONTOH X-01 Black" }
```

Semuanya bisa bernilai `null` kalau relasinya memang kosong.


### Batasan, Versi & Rencana

> Apa yang sengaja tidak ada di API v1 dan alasannya, janji kompatibilitas versi, serta daftar rencana pengembangan berikutnya.

#### Yang sengaja tidak ada di v1

Bukan karena terlewat — masing-masing punya alasan.

| Tidak tersedia | Alasan |
|---|---|
| **Endpoint tulis** (buat, ubah, hapus) | Perlu rancangan tersendiri: kunci idempotensi, validasi setara aplikasi, dan pencatatan audit. Menempelkannya ke rancangan baca hanya akan menghasilkan API yang rapuh |
| **HPP, harga modal, harga supplier** | Data margin. Di dalam aplikasi pun dilindungi izin terpisah, jadi tidak pantas terbuka lewat key yang berakses penuh |
| **Resep kacamata dan rekam medis pelanggan** | Data kesehatan, kelas paling sensitif dalam sistem. Menunggu dukungan *scoped key* |
| **Pembelian, kas kecil, biaya** | Sisi pengeluaran belum diekspos. Ini item nomor satu di daftar rencana |
| **Data dokter dan komisi** | Data penggajian dan kemitraan internal |
| **Harga per cabang atau per supplier** | Ada di rencana |
| **Gambar barang, atribut Lensiro Fit** | Belum ada permintaan |
| **Riwayat pesan WhatsApp atau email pelanggan** | Data komunikasi pribadi |
| **Webhook atau notifikasi dorong** | v1 murni polling. Webhook butuh infrastruktur pengiriman ulang dan penanganan gagal kirim |
| **Scope dan pembatasan cabang pada key** | Satu key berarti akses baca penuh. Karena setiap klien punya server sendiri, pemegang key adalah pemilik datanya |

> **Kalau Anda perlu memberi akses ke pihak ketiga** yang tidak boleh melihat semua data, tunggu dukungan scoped key. Jangan memberikan key penuh Anda.

#### Batas teknis

| Batas | Nilai |
|---|---|
| Request per menit per key | 60 |
| Request per menit per IP | 120 |
| Baris per halaman | default 100, maksimal 500 |
| Baris `/warehouse/items/{id}/stocks` | sampai 1000, tanpa paginasi |
| Metode HTTP | `GET` saja |

#### Janji kompatibilitas

Selama masih di `/api/v1`:

- Field baru **bisa muncul kapan saja tanpa pemberitahuan.** Klien Anda harus mengabaikan field yang tidak dikenal.
- Field yang sudah ada **tidak akan** diganti nama, dihapus, atau berubah tipe.
- Nilai enum baru bisa muncul, misalnya jenis pergerakan stok baru. Tangani nilai yang tidak dikenal dengan aman, jangan sampai error.
- Perubahan yang merusak kompatibilitas akan terbit sebagai `/api/v2`, dan `/api/v1` tetap berjalan.

Yang **tidak** dijanjikan: urutan field di dalam JSON, isi cursor, dan kata-kata di `error.message`.

#### Rencana pengembangan

Urutannya mengikuti permintaan yang masuk; tidak ada tanggal yang dijanjikan.

| Rencana | Isi |
|---|---|
| `GET /purchases` | Pembelian, penerimaan, dan pembayaran ke supplier — melengkapi sisi pengeluaran laporan keuangan |
| `GET /petty-cash` | Kas kecil masuk dan keluar |
| `GET /warehouse/item-prices` | Daftar harga per cabang atau per supplier |
| Status alert stok | Penanda minimum dan maksimum pada `/warehouse/stocks` |
| Scoped key | Key dengan akses terbatas per domain data dan per cabang — prasyarat untuk membuka data pelanggan yang sensitif ke pihak ketiga |
| Webhook | Notifikasi dorong saat transaksi dibuat atau diubah, supaya tidak perlu polling |
| Endpoint tulis | Misalnya pembuatan pelanggan dari CRM eksternal |

#### Mengusulkan kebutuhan baru

Kalau integrasi Anda butuh data yang belum ada, sampaikan ke tim Lensiro dengan tiga hal: **data apa** yang dibutuhkan, **untuk keperluan apa**, dan **seberapa sering** akan ditarik. Menambah satu resource baru relatif ringan karena seluruh fondasinya — autentikasi, envelope, paginasi, sinkronisasi — sudah bisa dipakai ulang; yang menentukan urutan pengerjaan adalah kejelasan kebutuhannya.


---

Dokumentasi Lensiro · https://lensiro.com/dokumentasi
