Versi 1
| Field | Isi |
|---|---|
| Dokumen ID | VBS-PBL-006 |
| Deskripsi | Pemesanan barang ke supplier (Purchase Order) sebelum barang diterima, termasuk ringkasan pesanan, daftar, filter, penyelesaian PO, pesan ulang, dan kelanjutan menjadi pembelian atas PO |
| Nomor Revisi | 1 |
| Tanggal | 2026-10-04 |
| Keterangan | Dokumentasi baseline dari dokumentasi fitur demo dan kode FE |
1. Ringkasan
a. In scope
- User melihat ringkasan PO: pesanan belum diproses 30 hari terakhir dan pesanan selesai diproses 30 hari terakhir.
- User melihat daftar PO (tanggal, nomor invoice, supplier, status invoice: draft / belum selesai / selesai).
- User memfilter daftar berdasarkan tanggal invoice, supplier, gudang / kandang, dan status.
- User membuat PO baru dengan tanggal, supplier, lokasi, gudang / kandang, dan baris barang (qty, satuan, harga, diskon), baik manual maupun dari Purchase Request.
- User menyimpan PO sebagai draft atau final.
- User mengubah dan menghapus PO draft.
- User melanjutkan PO final yang belum selesai menjadi pembelian atas PO.
- User menyelesaikan PO (sisa qty dibatalkan) atau memesan ulang sisa barang ke PO baru lalu menutup PO lama.
- User mencetak PO.
b. Catatan
c. Kesimpulan
- [FE] -
- [BE] -
2. Functional Requirement
| Kode | Deskripsi |
|---|---|
| FR-01 | Sistem menampilkan ringkasan pesanan belum diproses dan selesai 30 hari terakhir bagi user berhak |
| FR-02 | Sistem menampilkan daftar PO dengan pagination |
| FR-03 | User dapat memfilter daftar PO |
| FR-04 | User dapat membuat PO tanpa PR maupun dari PR |
| FR-05 | User dapat menyimpan PO sebagai draft atau final |
| FR-06 | User dapat mengubah dan menghapus PO draft |
| FR-07 | User dapat membuat pembelian atas PO dari PO yang belum selesai |
| FR-08 | User dapat menyelesaikan PO dengan membatalkan sisa qty |
| FR-09 | User dapat memesan ulang sisa barang ke PO baru (backorder) dan menutup PO lama |
| FR-10 | User dapat mencetak PO final |
3. Use Case List
| Kode | Deskripsi |
|---|---|
| UC-01 | Melihat ringkasan dan daftar purchase order |
| UC-02 | Memfilter daftar purchase order |
| UC-03 | Membuat purchase order |
| UC-04 | Mengubah purchase order draft |
| UC-05 | Menghapus purchase order draft |
| UC-06 | Melanjutkan PO menjadi pembelian atas PO |
| UC-07 | Menyelesaikan purchase order |
| UC-08 | Memesan ulang sisa barang dan menutup PO |
| UC-09 | Mencetak purchase order |
4. Use Case Scenario
UC-01 : Melihat ringkasan dan daftar purchase order
| Aktor | User dengan hak #po |
| Deskripsi | User melihat ringkasan pesanan dan daftar PO |
| Prekondisi | User sudah login Brand aktif |
| Alur utama | 1. User membuka menu Purchase Order. 2. Sistem menampilkan kartu ringkasan pesanan belum diproses dan pesanan selesai 30 hari terakhir. 3. Sistem menampilkan daftar PO dengan status. |
| Alur negatif | - Jika daftar kosong tanpa filter, muncul "Daftar Invoice masih kosong". - Jika daftar kosong dengan filter, muncul "Invoice Tidak Ditemukan". - Jika ringkasan gagal, nominal ditampilkan 0. |
| Bisnis rule | - Ringkasan hanya tampil bagi user dengan hak #summary-pembelian.- Pesanan belum diproses dihitung dari PO final dengan qty sisa PO lebih dari 0. |
| Postkondisi | Ringkasan dan daftar tampil |
| Trigger | User membuka halaman Purchase Order |
| Kode FR | FR-01 FR-02 |
UC-02 : Memfilter daftar purchase order
| Aktor | User dengan hak #po |
| Deskripsi | User mempersempit daftar PO |
| Prekondisi | User berada di halaman daftar |
| Alur utama | 1. User mencari nomor invoice. 2. User membuka Filter dan mengisi tanggal invoice, supplier, gudang / kandang, dan/atau status. 3. Sistem memuat ulang daftar. |
| Alur negatif | - Jika tidak ada data, muncul "Invoice Tidak Ditemukan". |
| Bisnis rule | - Status: Selesai, Draft, Belum Selesai. - Draft berarti PO belum final. |
| Postkondisi | Daftar terfilter |
| Trigger | User mengubah filter |
| Kode FR | FR-03 |
UC-03 : Membuat purchase order
| Aktor | User dengan hak #po basic |
| Deskripsi | User memesan barang ke supplier |
| Prekondisi | Supplier dan barang terdaftar |
| Alur utama | 1. User klik Buat Invoice (atau proses dari Purchase Request). 2. User mengisi tanggal, supplier, lokasi, dan gudang / kandang. 3. User menambah barang (qty, satuan, harga, diskon). 4. User memilih Simpan Draft atau Simpan Final, lalu mengonfirmasi. 5. Sistem menyimpan PO dan menampilkan "Purchase Order berhasil dibuat". |
| Alur negatif | - Jika informasi belum lengkap, muncul "Lengkapi Form Informasi dengan benar!". - Jika rincian kosong, muncul "Isi terlebih dahulu Form Rincian Barang/Jasa dengan benar!". - Jika gudang kosong, muncul "Tolong lengkapi gudang form dengan benar!" / "Tolong lengkapi gudang rincian dengan benar!". - Jika final dengan qty 0 atau kurang, muncul "Anda tidak bisa simpan final karena masih ada qty yg kurang dari atau sama dengan 0". - Jika PR dari tautan tidak ditemukan, muncul "Invoice PR yang anda cari tidak ditemukan!". - Jika server gagal, muncul "Gagal membuat Purchase Order ...". |
| Bisnis rule | - PO baru berstatus belum selesai. - PO final dari PR memakai jalur dengan PR, selain itu jalur tanpa PR. - Baris dari PR membawa id baris PR dan invoice PR. - PPN mengikuti konfigurasi PKP brand. |
| Postkondisi | PO tersimpan sebagai draft atau final |
| Trigger | User klik Simpan |
| Kode FR | FR-04 FR-05 |
UC-04 : Mengubah purchase order draft
| Aktor | User dengan hak #po basic |
| Deskripsi | User memperbaiki PO draft |
| Prekondisi | PO berstatus draft |
| Alur utama | 1. User memilih Edit. 2. Sistem memuat detail PO. 3. User mengubah data dan menyimpan. |
| Alur negatif | - Validasi sama seperti pembuatan. |
| Bisnis rule | - Edit hanya untuk PO draft. |
| Postkondisi | PO diperbarui |
| Trigger | User klik Edit |
| Kode FR | FR-06 |
UC-05 : Menghapus purchase order draft
| Aktor | User dengan hak #po draft |
| Deskripsi | User menghapus PO draft |
| Prekondisi | PO berstatus draft |
| Alur utama | 1. User memilih Hapus. 2. User mengonfirmasi. 3. Sistem menghapus PO dan menampilkan "Berhasil Hapus Invoice". |
| Alur negatif | - Jika user batal, PO tidak dihapus. - Jika gagal, muncul pesan error. |
| Bisnis rule | - Data yang dihapus tidak dapat dikembalikan. |
| Postkondisi | PO terhapus |
| Trigger | User klik Hapus |
| Kode FR | FR-06 |
UC-06 : Melanjutkan PO menjadi pembelian atas PO
| Aktor | User dengan hak #pembelian basic |
| Deskripsi | User membuat invoice pembelian dari PO yang barangnya sudah diterima |
| Prekondisi | PO final dengan status belum selesai |
| Alur utama | 1. User memilih Masukkan Pembelian atas PO ini. 2. Sistem membuka form pembelian atas PO dengan PO terpilih. 3. Sistem mengisi supplier, gudang, lokasi, dan barang dari PO. 4. User melanjutkan alur pembelian atas PO. |
| Alur negatif | - Jika PO tidak ditemukan, muncul "Invoice PO yang anda cari tidak ditemukan!". |
| Bisnis rule | - Menu hanya muncul untuk PO final berstatus belum selesai. |
| Postkondisi | Form pembelian atas PO terisi |
| Trigger | User klik Masukkan Pembelian atas PO ini |
| Kode FR | FR-07 |
UC-07 : Menyelesaikan purchase order
| Aktor | User dengan hak #po basic |
| Deskripsi | User menutup PO dan membatalkan sisa qty yang belum terkirim |
| Prekondisi | PO final dengan status belum selesai |
| Alur utama | 1. User memilih Selesaikan PO. 2. User mengonfirmasi "Selesaikan Purchase Order?". 3. Sistem menandai PO selesai dan sisa qty sebagai dibatalkan. 4. Muncul "Purchase Order Berhasil Diselesaikan". |
| Alur negatif | - Jika gagal, muncul "Purhase Order Gagal Diselesaikan. Error: ...". |
| Bisnis rule | - Qty dibatalkan per baris = qty sisa PO. |
| Postkondisi | PO berstatus selesai |
| Trigger | User klik Selesaikan PO |
| Kode FR | FR-08 |
UC-08 : Memesan ulang sisa barang dan menutup PO
| Aktor | User dengan hak #po basic |
| Deskripsi | User memindahkan sisa barang PO ke PO baru (backorder) |
| Prekondisi | PO final dengan status belum selesai |
| Alur utama | 1. User memilih Pesan Ulang dan Tutup PO. 2. Sistem memuat detail PO dan menampilkan modal pesan ulang. 3. User memilih barang yang dipesan ulang. 4. Sistem membuka form PO baru berisi barang tersebut. 5. User menyimpan PO baru. 6. Sistem memperbarui PO lama dengan qty backorder dan nomor PO baru. |
| Alur negatif | - Jika detail PO gagal dimuat, muncul pesan error. - Jika pembaruan PO lama gagal, muncul "Gagal membuat Purchase Order ...". |
| Bisnis rule | - Qty backorder PO lama = qty yang dipesan ulang. - PO lama menyimpan nomor invoice PO baru sebagai referensi backorder. |
| Postkondisi | PO baru terbentuk, PO lama tertutup |
| Trigger | User klik Pesan Ulang dan Tutup PO |
| Kode FR | FR-09 |
UC-09 : Mencetak purchase order
| Aktor | User dengan hak #po reprint |
| Deskripsi | User mencetak dokumen PO |
| Prekondisi | PO final |
| Alur utama | 1. User memilih Print. 2. Sistem mencatat riwayat cetak dan memuat detail PO. 3. Sistem menampilkan modal cetak. |
| Alur negatif | - Jika gagal, muncul pesan error. |
| Bisnis rule | - Cetak ulang mengikuti riwayat cetak dan hak reprint. |
| Postkondisi | PO tercetak |
| Trigger | User klik Print |
| Kode FR | FR-10 |
5. Data Flow Diagram
DFD-01 — Alur purchase order
DFD-02 — Status purchase order
6. Sequence Diagram
SD-01 — UC-01 : Melihat ringkasan dan daftar purchase order
SD-02 — UC-02 : Memfilter daftar purchase order
SD-03 — UC-03 : Membuat purchase order
SD-04 — UC-04 : Mengubah purchase order draft
SD-05 — UC-05 : Menghapus purchase order draft
SD-06 — UC-06 : Melanjutkan PO menjadi pembelian atas PO
SD-07 — UC-07 : Menyelesaikan purchase order
SD-08 — UC-08 : Memesan ulang sisa barang dan menutup PO
SD-09 — UC-09 : Mencetak purchase order
7. Table Schema
8. API Schema
| Endpoint | Status | Perubahan |
|---|---|---|
POST /laporan-pembelian/po-report | existing | - |
GET /invoice-purchase-order | existing | - |
GET /invoice-purchase-order/:id | existing | - |
POST /invoice-purchase-order/with-pr | existing | - |
POST /invoice-purchase-order/no-pr | existing | - |
PUT /invoice-purchase-order/:id | existing | - |
PUT /invoice-purchase-order/invoice-only/:id | existing | - |
DELETE /invoice-purchase-order/:id | existing | - |
GET /invoice-purchase-request/:id | existing | - |