KTN-07
| Field | Isi |
|---|---|
| Dokumen ID | KTN-07 |
| Deskripsi | Purchase Request untuk Kurnia Tani: permintaan pembelian dari cabang / department, persetujuan per barang, penguncian dokumen, dan pembuatan Purchase Order dari PR yang disetujui |
| Nomor Revisi | 1 |
| Tanggal | 2026-10-04 |
| Keterangan | Fitur baru Purchase Request (termasuk buat PO dari PR) |
1. Ringkasan
a. In scope
- User melihat daftar Purchase Request (tanggal, nomor invoice, lokasi, cabang, department, status Selesai / Perlu Approval).
- User memfilter daftar berdasarkan tanggal, lokasi, cabang, dan department.
- User membuat Purchase Request dengan cabang, lokasi, department, dan baris barang (barang, SKU, satuan, qty, keterangan).
- User menyimpan PR sebagai draft (perlu approval) atau final.
- User melihat detail Purchase Request.
- User mengunci, membuka kunci, dan menghapus Purchase Request sesuai status dokumen.
- Approver menyetujui atau menolak tiap barang PR beserta qty yang disetujui.
- User membuat Purchase Order atas PR yang memiliki barang disetujui.
b. Catatan
c. Kesimpulan
- [FE] Buat halaman daftar Purchase Request (filter, status, aksi)
- [FE] Buat halaman create Purchase Request
- [FE] Buat halaman detail Purchase Request beserta aksi approval, hapus, lock / unlock, dan buat PO dari PR
- [FE] Tambah opsi buat PO dari PR pada alur Purchase Order
- [FE] Aktifkan menu Purchase Request di navigasi brand
- [BE] Buat endpoint create Purchase Request
- [BE] Buat endpoint list dan detail invoice Purchase Request
- [BE] Buat endpoint lock, unlock, dan delete Purchase Request
- [BE] Buat endpoint update approval per barang Purchase Request
- [BE] Buat endpoint create Purchase Order dari Purchase Request
2. Functional Requirement
| Kode | Deskripsi |
|---|---|
| FR-01 | Sistem menampilkan daftar PR dengan department, cabang, lokasi, dan status |
| FR-02 | User dapat memfilter daftar PR |
| FR-03 | User dapat membuat PR dengan rincian barang |
| FR-04 | User dapat menyimpan PR sebagai draft atau final |
| FR-05 | User dapat melihat detail PR |
| FR-06 | User dapat mengunci PR agar tidak dapat diubah |
| FR-07 | User dapat membuka kunci PR yang terkunci |
| FR-08 | User dapat menghapus PR yang masih diizinkan dihapus |
| FR-09 | Approver dapat menyetujui / menolak barang PR dengan qty disetujui |
| FR-10 | User dapat membuat PO atas PR yang memiliki barang disetujui |
3. Use Case List
| Kode | Deskripsi |
|---|---|
| UC-01 | Melihat daftar purchase request |
| UC-02 | Memfilter daftar purchase request |
| UC-03 | Membuat purchase request |
| UC-04 | Melihat detail purchase request |
| UC-05 | Mengunci purchase request |
| UC-06 | Membuka kunci purchase request |
| UC-07 | Menghapus purchase request |
| UC-08 | Menyetujui atau menolak barang purchase request |
| UC-09 | Membuat purchase order atas purchase request |
4. Use Case Scenario
UC-01 : Melihat daftar purchase request
| Aktor | User dengan hak Purchase Request |
| Deskripsi | User melihat daftar PR |
| Prekondisi | User sudah login Brand aktif |
| Alur utama | 1. User membuka menu Purchase Request. 2. Sistem menampilkan daftar PR dengan department, cabang, lokasi, dan status. 3. User klik baris untuk membuka detail. |
| Alur negatif | - Jika daftar kosong tanpa filter, muncul "Daftar Invoice masih kosong". - Jika daftar kosong dengan filter, muncul "Invoice Tidak Ditemukan". - Jika user tanpa hak akses, menu / halaman tidak dapat dibuka. |
| Bisnis rule | - User tanpa hak melihat semua PR hanya melihat PR miliknya. - Kolom lokasi hanya tampil jika brand memiliki fitur lokasi. - Status: Selesai jika sudah final, Perlu Approval jika belum. |
| Postkondisi | Daftar PR tampil |
| Trigger | User membuka halaman Purchase Request |
| Kode FR | FR-01 |
UC-02 : Memfilter daftar purchase request
| Aktor | User dengan hak Purchase Request |
| Deskripsi | User mempersempit daftar PR |
| Prekondisi | User berada di halaman daftar |
| Alur utama | 1. User mencari nomor invoice. 2. User membuka Filter dan mengisi tanggal, lokasi, cabang, dan/atau department. 3. Sistem memuat ulang daftar. |
| Alur negatif | - Jika tidak ada data, muncul "Invoice Tidak Ditemukan". - Reset mengosongkan filter. |
| Bisnis rule | - Filter lokasi hanya tampil jika brand memiliki fitur lokasi. |
| Postkondisi | Daftar terfilter |
| Trigger | User mengubah filter |
| Kode FR | FR-02 |
UC-03 : Membuat purchase request
| Aktor | User dengan hak tambah Purchase Request |
| Deskripsi | User mengajukan permintaan pembelian barang |
| Prekondisi | User sudah login Brand aktif Barang terdaftar di master barang |
| Alur utama | 1. User klik Buat Invoice. 2. User mengisi tanggal, cabang, lokasi, dan department. 3. User menambah baris barang (barang, satuan, qty, keterangan). 4. User memilih Simpan Draft atau Simpan Final, lalu mengonfirmasi. 5. Sistem menyimpan PR dan menampilkan "Berhasil buat Purchase Request". |
| Alur negatif | - Jika form belum lengkap, muncul "Tolong lengkapi form dengan benar!". - Jika rincian belum lengkap, muncul "Tolong lengkapi rincian dengan benar!". - Jika cabang kosong, muncul peringatan lengkapi gudang / cabang. - Jika gagal menyimpan, PR tidak tersimpan dan muncul pesan error. |
| Bisnis rule | - Cabang per baris dipakai bila brand multi gudang. - Draft berstatus Perlu Approval; final berstatus Selesai sesuai aturan simpan yang dipilih. |
| Postkondisi | PR tersimpan |
| Trigger | User klik Simpan |
| Kode FR | FR-03 FR-04 |
UC-04 : Melihat detail purchase request
| Aktor | User dengan hak lihat Purchase Request |
| Deskripsi | User melihat informasi dan barang PR |
| Prekondisi | PR tersedia |
| Alur utama | 1. User klik PR di daftar atau memilih Lihat. 2. Sistem menampilkan informasi nota dan daftar barang dengan status approval. |
| Alur negatif | - Jika PR tidak ditemukan, detail tidak tampil dan muncul pesan error. |
| Bisnis rule | - Menu tindakan pada detail menyesuaikan status: Approval PR, Lock / Unlock, Hapus, Buat PO Atas PR. |
| Postkondisi | Detail PR tampil |
| Trigger | User membuka detail PR |
| Kode FR | FR-05 |
UC-05 : Mengunci purchase request
| Aktor | User dengan hak lock Purchase Request |
| Deskripsi | User mengunci PR agar tidak dapat diubah |
| Prekondisi | PR tersedia dan masih dapat dikunci |
| Alur utama | 1. User memilih Lock pada PR. 2. Sistem mengunci dokumen PR. 3. Sistem menampilkan konfirmasi berhasil. |
| Alur negatif | - Jika PR sudah terkunci, aksi lock ditolak. - Jika gagal mengunci, muncul pesan error dan status PR tidak berubah. |
| Bisnis rule | - PR terkunci tidak dapat diubah isinya. - Hapus hanya diizinkan sesuai aturan status (umumnya PR yang belum final / belum diproses lanjut). |
| Postkondisi | PR terkunci |
| Trigger | User klik Lock |
| Kode FR | FR-06 |
UC-06 : Membuka kunci purchase request
| Aktor | User dengan hak unlock Purchase Request |
| Deskripsi | User membuka kunci PR agar dapat diubah kembali |
| Prekondisi | PR dalam status terkunci |
| Alur utama | 1. User memilih Unlock pada PR. 2. Sistem membuka kunci dokumen PR. 3. Sistem menampilkan konfirmasi berhasil. |
| Alur negatif | - Jika PR tidak terkunci, aksi unlock ditolak. - Jika PR sudah diproses menjadi PO / tidak boleh dibuka, aksi ditolak. - Jika gagal unlock, muncul pesan error. |
| Bisnis rule | - Unlock mengembalikan PR ke kondisi dapat diubah sesuai aturan status. - Unlock tidak menghapus data approval yang sudah ada kecuali aturan bisnis memutuskan sebaliknya. |
| Postkondisi | Kunci PR terbuka |
| Trigger | User klik Unlock |
| Kode FR | FR-07 |
UC-07 : Menghapus purchase request
| Aktor | User dengan hak hapus Purchase Request |
| Deskripsi | User menghapus PR yang masih diizinkan dihapus |
| Prekondisi | PR tersedia dan status mengizinkan hapus |
| Alur utama | 1. User memilih Hapus pada PR. 2. Sistem menampilkan konfirmasi hapus. 3. User mengonfirmasi. 4. Sistem menghapus PR dan memperbarui daftar. |
| Alur negatif | - Jika user membatalkan konfirmasi, PR tidak dihapus. - Jika PR sudah final / terkunci / sudah punya PO, hapus ditolak. - Jika gagal menghapus, muncul pesan error. |
| Bisnis rule | - Hapus hanya untuk PR yang belum diproses lanjut menjadi PO. - Setelah terhapus, PR tidak lagi tampil di daftar. |
| Postkondisi | PR terhapus |
| Trigger | User klik Hapus |
| Kode FR | FR-08 |
UC-08 : Menyetujui atau menolak barang purchase request
| Aktor | Approver dengan hak approval Purchase Request |
| Deskripsi | Approver memutuskan tiap barang PR disetujui atau ditolak |
| Prekondisi | PR berstatus belum selesai dan belum final |
| Alur utama | 1. Approver memilih Approval PR. 2. Sistem menampilkan barang dengan qty requested. 3. Approver memilih Approve / Decline per barang atau sekaligus, dan mengisi qty approved. 4. Approver klik Simpan. 5. Sistem menyimpan approval dan menampilkan "Berhasil Buat Approval". |
| Alur negatif | - Jika qty approved melebihi qty requested, muncul "Qty tidak boleh lebih dari qty requested ...". - Jika qty approved 0 untuk barang disetujui, muncul "Qty harus lebih dari 0". - Jika masih ada barang pending, muncul "Masih ada barang yang belum di-approve atau di-decline". - Jika gagal, muncul "Gagal Buat Approval". |
| Bisnis rule | - Status approval barang: pending, approved, declined. - Barang declined memiliki qty approved 0. - Approve tanpa qty memakai qty requested. - Setelah approval selesai, PR menjadi Selesai (final). |
| Postkondisi | Status approval barang tersimpan |
| Trigger | Approver klik Simpan pada modal approval |
| Kode FR | FR-09 |
UC-09 : Membuat purchase order atas purchase request
| Aktor | User dengan hak buat Purchase Order |
| Deskripsi | User memproses PR yang disetujui menjadi PO |
| Prekondisi | PR final, status belum selesai, dan minimal satu barang approved |
| Alur utama | 1. User memilih Buat PO Atas PR dari daftar atau detail PR (atau opsi buat PO dari PR di halaman PO). 2. Sistem membuka form PO dengan PR terpilih. 3. Sistem mengisi cabang, lokasi, dan barang dari PR. 4. User memilih supplier, melengkapi harga, lalu menyimpan PO final. 5. Sistem membuat PO yang terhubung ke PR. |
| Alur negatif | - Jika PR tidak ditemukan, muncul "Invoice PR yang anda cari tidak ditemukan!". - Jika tidak ada barang approved, opsi buat PO tidak tersedia / proses ditolak. - Validasi PO lainnya mengikuti pembuatan PO. |
| Bisnis rule | - Hanya barang approved dengan qty approved > 0 yang masuk ke PO. - Baris yang sudah terikat PO tidak diikutkan lagi. - Setiap baris PO membawa id baris PR dan id invoice PR. - PO final dari PR memakai jalur create PO dengan PR. |
| Postkondisi | PO terbentuk dari PR |
| Trigger | User klik Buat PO Atas PR |
| Kode FR | FR-10 |
5. Data Flow Diagram
DFD-01 — Alur purchase request ke purchase order
6. Sequence Diagram
SD-01 — UC-01 : Melihat daftar purchase request
SD-02 — UC-02 : Memfilter daftar purchase request
SD-03 — UC-03 : Membuat purchase request
SD-04 — UC-04 : Melihat detail purchase request
SD-05 — UC-05 : Mengunci purchase request
SD-06 — UC-06 : Membuka kunci purchase request
SD-07 — UC-07 : Menghapus purchase request
SD-08 — UC-08 : Menyetujui atau menolak barang purchase request
SD-09 — UC-09 : Membuat purchase order atas purchase request
7. Table Schema
8. API Schema
| Endpoint | Status | Perubahan |
|---|---|---|
GET /invoice-purchase-request | new | List invoice PR + pagination + filter |
GET /invoice-purchase-request/:id | new | Detail invoice PR beserta baris barang |
POST /purchase-request | new | Create Purchase Request (header + rincian) |
PUT /invoice-purchase-request/:id | new | Update invoice PR |
POST /invoice-purchase-request/:id/lock | new | Mengunci PR |
POST /invoice-purchase-request/:id/unlock | new | Membuka kunci PR |
DELETE /invoice-purchase-request/:id | new | Menghapus invoice PR |
POST /purchase-request/update-approval | new | Approve / decline barang PR + qty approved |
POST /invoice-purchase-order/with-pr | new | Create Purchase Order dari Purchase Request |