Skip to main content

Versi 1

FieldIsi
Dokumen IDVBS-PJL-001
DeskripsiPencatatan invoice penjualan: daftar dan ringkasan penjualan, pembuatan penjualan biasa maupun dari Sales Order, serta pengelolaan status draft/final invoice
Nomor Revisi1
Tanggal2026-10-04
KeteranganDokumentasi baseline dari dokumentasi fitur demo dan kode FE

1. Ringkasan​

a. In scope​

  • User melihat daftar invoice penjualan beserta tanggal, customer, jatuh tempo, PPN, total, status tagihan, sisa tagihan, keterangan, dan status invoice
  • User melihat ringkasan penjualan belum dibayar, penjualan jatuh tempo, dan penjualan terbayar 30 hari terakhir
  • User memfilter daftar berdasarkan tanggal invoice, jatuh tempo, customer, barang, cabang, status selesai / belum selesai, status lunas, dan kategori penjualan kasir / grosir
  • User membuat penjualan biasa (customer, cabang, lokasi, sales, cluster, tempo, PPN, barang, biaya lain, metode pembayaran) sebagai draft atau final
  • User membuat penjualan dari Sales Order yang sudah final dan belum selesai
  • User mengubah invoice penjualan yang masih draft
  • User melihat detail dan mencetak invoice penjualan
  • User mengembalikan invoice final ke draft (unlock), menghapus invoice draft, dan memposting ulang invoice

b. Catatan​

c. Kesimpulan​

  • [FE] -
  • [BE] -

2. Functional Requirement​

KodeDeskripsi
FR-01Sistem menampilkan daftar invoice penjualan (kasir dan grosir) dengan kolom tanggal, nomor invoice, customer, jatuh tempo, PPN, total penjualan, tagihan, sisa tagihan, keterangan, dan status
FR-02Sistem menampilkan ringkasan penjualan belum dibayar, jatuh tempo, dan terbayar 30 hari terakhir bagi user yang memiliki hak ringkasan
FR-03User dapat mencari nomor invoice dan memfilter daftar berdasarkan tanggal invoice, jatuh tempo, customer, barang, cabang, status, lunas, dan kategori kasir / grosir
FR-04User dapat membuat penjualan biasa lengkap dengan rincian barang, biaya lain, dan metode pembayaran, lalu menyimpan sebagai draft atau final
FR-05User dapat membuat penjualan berdasarkan Sales Order yang final dan berstatus belum selesai
FR-06User dapat mengubah invoice penjualan yang masih draft
FR-07User dapat melihat detail invoice dan mencetak nota sesuai hak cetak draft / cetak ulang
FR-08User dengan hak draft dapat mengembalikan invoice final menjadi draft
FR-09User dapat menghapus invoice penjualan yang masih draft
FR-10User dapat memposting ulang jurnal dan stok sebuah invoice penjualan final

3. Use Case List​

KodeDeskripsi
UC-01Melihat daftar dan ringkasan penjualan
UC-02Memfilter daftar penjualan
UC-03Membuat penjualan biasa
UC-04Membuat penjualan dari Sales Order
UC-05Mengubah invoice penjualan draft
UC-06Melihat detail dan mencetak invoice penjualan
UC-07Membuka kembali (unlock) invoice ke draft
UC-08Menghapus invoice penjualan draft
UC-09Memposting ulang invoice penjualan

4. Use Case Scenario​

UC-01 : Melihat daftar dan ringkasan penjualan​

AktorUser brand dengan hak lihat penjualan
DeskripsiUser melihat daftar invoice penjualan dan ringkasan piutang penjualan
PrekondisiUser sudah login
Brand aktif dipilih
Alur utama1. User membuka menu Penjualan.
2. Sistem menampilkan ringkasan penjualan belum dibayar, jatuh tempo, dan terbayar 30 hari terakhir.
3. Sistem menampilkan daftar invoice penjualan secara bertahap (infinite scroll).
4. User menggulir untuk memuat halaman berikutnya.
Alur negatif- Jika belum ada data, muncul tampilan "Invoice Penjualan Kosong".
- Jika gagal memuat ringkasan, nilai ringkasan ditampilkan 0.
Bisnis rule- Ringkasan hanya tampil untuk user dengan hak #summary-penjualan.
- Tanpa hak lihat semua user, daftar dibatasi invoice buatan user itu sendiri (user_id_create).
- User non admin brand hanya melihat invoice di cabang yang diizinkan.
- Kolom tagihan dan sisa tagihan hanya terisi untuk invoice final; status Done = final, Draft = belum final.
PostkondisiDaftar dan ringkasan penjualan tampil
TriggerUser membuka menu Penjualan
Kode FRFR-01
FR-02

UC-02 : Memfilter daftar penjualan​

AktorUser brand dengan hak lihat penjualan
DeskripsiUser mempersempit daftar invoice penjualan dengan pencarian dan filter
PrekondisiHalaman daftar penjualan terbuka
Alur utama1. User mengetik nomor invoice atau membuka panel Filter.
2. User memilih periode tanggal invoice, periode jatuh tempo, customer, barang, cabang, status, lunas, dan/atau kategori penjualan.
3. Sistem memuat ulang daftar sesuai filter.
4. Filter aktif ditampilkan di atas tabel.
Alur negatif- Jika tidak ada data yang cocok, muncul tampilan daftar kosong.
- Tombol Reset mengosongkan seluruh filter.
Bisnis rule- Kategori penjualan: kasir (invoice dari Penjualan Kasir) atau grosir (invoice dari form penjualan).
- Status: selesai = final, belum selesai = draft.
- Pilihan barang hanya barang yang dapat dijual.
PostkondisiDaftar tampil sesuai filter
TriggerUser mengubah pencarian atau filter
Kode FRFR-03

UC-03 : Membuat penjualan biasa​

AktorUser dengan hak tambah penjualan
DeskripsiUser membuat invoice penjualan baru tanpa Sales Order
PrekondisiUser memiliki hak #penjualan basic
Kuota invoice paket belum habis
Alur utama1. User klik Buat Invoice lalu pilih Penjualan.
2. User mengisi tanggal, customer, cabang, lokasi, sales, cluster, tempo pembayaran, PPN keluaran, nomor faktur pajak, mode PPN, status barang dikirim dan tanggal kirim, serta keterangan.
3. User menambah baris barang (barang, satuan, qty, harga, diskon).
4. User menambah biaya lain-lain (opsional).
5. User mengisi metode pembayaran.
6. User klik Simpan Draft atau Simpan Final, lalu mengonfirmasi untuk final.
7. Sistem membuat invoice penjualan dan kembali ke daftar.
Alur negatif- Jika form belum valid, muncul "Tolong lengkapi form dengan benar!".
- Jika cabang kosong, muncul "Tolong lengkapi gudang form dengan benar!".
- Jika final tanpa customer dan tanpa hak customer kosong, muncul "Customer harus diisi".
- Jika total 0 tanpa hak jual total 0, muncul "Total penjualan tidak boleh 0".
- Jika tempo 0 dan final tanpa metode pembayaran, muncul "Untuk penjualan tempo 0, metode pembayaran harus diisi".
- Jika customer melewati batas jumlah nota / piutang, muncul peringatan "Customer Tersebut telah mencapai batas ...".
- Jika tempo 0 dan pembayaran melebihi total, muncul "Pembayaran tidak boleh melebihi Nilai Total Pembayaran".
- Jika tempo lebih dari 0 tanpa customer, muncul "Tempo harus 0 untuk penjualan tanpa customer".
- Jika kuota paket habis, muncul "Data Penjualan anda melebihi limit ...".
Bisnis rule- Penjualan tempo 0 wajib metode pembayaran saat final; tempo lebih dari 0 menghasilkan piutang.
- Pemakaian titipan DP dengan tempo 0 otomatis mengubah tempo menjadi 1.
- Batas nota / piutang customer dapat dilewati hanya dengan hak #overrule-limit-piutangnota.
- Barang grup otomatis menambah baris komponennya.
- Mode multi cabang mewajibkan cabang per baris.
PostkondisiInvoice penjualan tersimpan sebagai draft atau final
TriggerUser klik Simpan Draft / Simpan Final
Kode FRFR-04

UC-04 : Membuat penjualan dari Sales Order​

AktorUser dengan hak penjualan dari Sales Order
DeskripsiUser membuat invoice penjualan dengan dasar Sales Order
PrekondisiAda Sales Order final dengan status belum selesai
User memiliki hak #so-stok-cukup
Alur utama1. User klik Buat Invoice lalu pilih Penjualan dari Sales Order, atau memilih "Masukkan Penjualan atas SO ini" dari Sales Order.
2. User memilih customer dan cabang, lalu memilih Sales Order (atau SO terisi otomatis dari tautan).
3. Sistem mengisi cabang, customer, sales, keterangan, dan rincian barang dari SO.
4. User menyesuaikan qty, melengkapi pembayaran.
5. User menyimpan draft atau final.
6. Sistem membuat invoice penjualan yang terhubung ke SO.
Alur negatif- Jika form belum valid, muncul "Tolong lengkapi form dengan benar!".
- Jika metode pembayaran wajib tetapi kosong, muncul "Metode Pembayaran Harus Diisi".
- Validasi customer, total 0, batas nota / piutang, dan kelebihan pembayaran sama seperti penjualan biasa.
Bisnis rule- SO yang dapat dipilih hanya SO final dengan status belum selesai untuk customer dan cabang terpilih.
- Metode pembayaran baru dipilih di invoice penjualan, bukan di SO.
- Cabang dan baris barang (barang, SKU, satuan) wajib saat simpan.
PostkondisiInvoice penjualan tersimpan dan tercatat sebagai realisasi SO
TriggerUser klik Penjualan dari Sales Order
Kode FRFR-05

UC-05 : Mengubah invoice penjualan draft​

AktorUser dengan hak tambah penjualan
DeskripsiUser memperbarui invoice penjualan yang masih draft
PrekondisiInvoice berstatus draft
Alur utama1. User memilih Edit pada invoice draft.
2. Sistem memuat data invoice.
3. User mengubah data header, barang, biaya, atau pembayaran.
4. User menyimpan draft atau final.
5. Sistem memperbarui invoice.
Alur negatif- Jika user memiliki batasan hari ini dan tanggal invoice bukan hari ini, muncul "Anda tidak bisa merubah Invoice Penjualan yang tidak sama dengan hari ini!".
- Validasi form sama seperti pembuatan penjualan.
Bisnis rule- Menu Edit hanya tersedia untuk invoice draft.
- Batasan edit hari ini berlaku untuk hak #limit-create-today dan bukan admin brand.
PostkondisiInvoice penjualan terbarui
TriggerUser klik Edit lalu Simpan
Kode FRFR-06

UC-06 : Melihat detail dan mencetak invoice penjualan​

AktorUser dengan hak lihat / cetak penjualan
DeskripsiUser membuka detail invoice dan mencetak nota
PrekondisiInvoice tersedia
Alur utama1. User memilih Lihat pada invoice.
2. Sistem menampilkan informasi, rincian barang, biaya lain, dan rincian pembayaran.
3. User klik Cetak.
4. Sistem menandai invoice sudah dicetak lalu menampilkan pilihan layout cetak.
Alur negatif- Jika gagal mengambil data, muncul pesan error dari sistem.
Bisnis rule- Cetak draft hanya untuk hak #cetak-draft-penjualan.
- Cetak ulang invoice final mengikuti hak reprint dan riwayat cetak.
PostkondisiNota tercetak dan riwayat cetak tercatat
TriggerUser klik Lihat / Cetak
Kode FRFR-07

UC-07 : Membuka kembali (unlock) invoice ke draft​

AktorUser dengan hak draft penjualan
DeskripsiUser mengubah invoice final kembali menjadi draft agar dapat diedit
PrekondisiInvoice berstatus final
Alur utama1. User memilih "Ubah ke Simpan Draft".
2. Sistem mengubah invoice menjadi draft.
3. Sistem menampilkan "Berhasil Ubah ke Simpan Draft Invoice ...".
Alur negatif- Jika ditolak sistem (misal sudah ada pembayaran / periode terkunci), muncul pesan error dari sistem.
Bisnis rule- Hanya untuk user dengan hak #can-draft dan hak draft pada #penjualan.
PostkondisiInvoice berstatus draft
TriggerUser klik Ubah ke Simpan Draft
Kode FRFR-08

UC-08 : Menghapus invoice penjualan draft​

AktorUser dengan hak tambah penjualan
DeskripsiUser menghapus invoice penjualan yang belum final
PrekondisiInvoice berstatus draft
Alur utama1. User memilih Hapus pada invoice draft.
2. Sistem menghapus invoice.
3. Sistem menampilkan "Berhasil Hapus Invoice ..." dan menghapus baris dari daftar.
Alur negatif- Jika gagal, muncul pesan error dari sistem.
Bisnis rule- Menu Hapus hanya tersedia untuk invoice draft.
PostkondisiInvoice terhapus
TriggerUser klik Hapus
Kode FRFR-09

UC-09 : Memposting ulang invoice penjualan​

AktorUser dengan hak penjualan
DeskripsiUser meminta sistem menghitung ulang jurnal dan stok invoice final
PrekondisiInvoice berstatus final
Alur utama1. User memilih Posting Ulang.
2. Sistem memproses ulang integritas invoice.
3. Sistem menampilkan "Berhasil Memposting Ulang Penjualan dengan no invoice ...".
Alur negatif- Jika gagal, muncul pesan error dari sistem.
Bisnis rule- Posting ulang dikirim dengan penanda proses ulang integritas untuk invoice terpilih.
PostkondisiJurnal dan stok invoice diproses ulang
TriggerUser klik Posting Ulang
Kode FRFR-10

5. Data Flow Diagram​

DFD-01​

6. Sequence Diagram​

SD-01 — UC-01 : Melihat daftar dan ringkasan penjualan​

SD-02 — UC-02 : Memfilter daftar penjualan​

SD-03 — UC-03 : Membuat penjualan biasa​

SD-04 — UC-04 : Membuat penjualan dari Sales Order​

SD-05 — UC-05 : Mengubah invoice penjualan draft​

SD-06 — UC-06 : Melihat detail dan mencetak invoice penjualan​

SD-07 — UC-07 : Membuka kembali (unlock) invoice ke draft​

SD-08 — UC-08 : Menghapus invoice penjualan draft​

SD-09 — UC-09 : Memposting ulang invoice penjualan​

7. Table Schema​

8. API Schema​

EndpointStatusPerubahan
GET /invoice-penjualanexisting-
GET /invoice-penjualan/:idexisting-
PUT /invoice-penjualan/invoice-only/:idexisting-
PUT /invoice-penjualan/unlock/:idexisting-
DELETE /invoice-penjualan/:idexisting-
POST /penjualanexisting-
PUT /penjualan/:idexisting-
GET /invoice-soexisting-
GET /invoice-so/:idexisting-
POST /integrity/sync-satuan-bulkexisting-
GET /customerexisting-
POST /financial-report/invoice-piutang-reportexisting-
POST /financial-report/invoice-bayar-piutang-reportexisting-
POST /laporan-penjualan/sales-reportexisting-