Company (Perusahaan)
| Code | SET-COM |
| Module | Settings |
| Type | Tenant configuration (singleton) |
| Status | Implemented |
| Priority | P0 — MVP |
| Process | Setup tenant |
| API | [URL Postman] |
1. Overview
Perusahaan adalah profil resmi tenant: kode, nama, kontak, alamat, dan logo (versi mode terang dan mode gelap). Hanya ada satu profil per tenant. Data ini dipakai di seluruh aplikasi: logo di sidebar, pemilih toko, halaman login, serta kop dokumen PDF seperti Pesanan Pembelian.
Hasil yang diharapkan: identitas bisnis tenant tampil konsisten di semua layar dan dokumen, dan bisa diperbarui sendiri oleh admin.
2. Problem
- Dokumen yang dikirim ke supplier (misalnya PDF PO) butuh identitas perusahaan yang resmi dan seragam.
- Logo satu warna sering tidak terbaca di mode gelap atau terang.
- Perubahan alamat atau nomor telepon perusahaan harus langsung tercermin di dokumen baru.
3. Goals & Non-goals
Goals
- Admin bisa memperbarui profil perusahaan sendiri. Indikator: tidak ada permintaan manual ke tim teknis.
- Perubahan langsung terlihat di seluruh aplikasi. Indikator: sidebar dan PDF memakai data baru segera setelah simpan.
- Logo terbaca di kedua tema. Indikator: logo terpisah untuk mode terang dan gelap.
Non-goals
- Multi-perusahaan / multi-badan hukum dalam satu tenant
- Data legal (NPWP, NIB) dan rekening bank
- Riwayat versi profil (selain log aktivitas)
4. User Scenarios
| Role | Scenario |
|---|---|
| Owner | Mengisi profil perusahaan saat pertama kali memakai sistem |
| Owner | Mengunggah logo terang dan gelap agar tampil baik di kedua tema |
| Admin | Memperbarui nomor telepon perusahaan, lalu mencetak ulang PDF PO dengan data baru |
| Auditor | Memeriksa siapa yang mengubah alamat perusahaan |
5. User Flow
- Mode lihat — Menampilkan logo (terang dan gelap), kode, nama, telepon, email, situs web, dan alamat lengkap. Field kosong tampil sebagai ”-”.
- Mode ubah — Halaman
/settings/company/edit. - Isi field — Logo diunggah lewat pengunggah file (1 gambar per mode, maksimal 1 MB), bisa dari unggahan, pustaka file, tautan, atau kamera.
- Validasi — FE memvalidasi field wajib dan format email; BE memvalidasi ulang. Tombol Perbarui aktif hanya jika ada perubahan.
- Tersimpan — Toast sukses; cache data inisialisasi tenant diperbarui sehingga sidebar, halaman login, dan PDF langsung memakai data baru.
- Mode lihat — Menampilkan data terbaru.
Alternative paths
- Tinggalkan halaman tanpa simpan — muncul konfirmasi perubahan belum disimpan.
- Hapus logo — logo dikosongkan dan disimpan sebagai
null.
6. User Stories
Prioritas: P0 wajib untuk rilis, P1 penting, P2 kalau sempat.
US-01 — Melihat profil perusahaan (P0)
Sebagai admin, saya ingin melihat profil perusahaan, agar tahu data yang dipakai di dokumen.
| ID | Kriteria penerimaan |
|---|---|
| AC-01.1 | Pengguna dengan izin view melihat semua field profil beserta pratinjau logo terang dan gelap. |
| AC-01.2 | Field opsional yang kosong tampil sebagai ”-”. |
US-02 — Mengubah profil perusahaan (P0)
Sebagai owner, saya ingin memperbarui profil perusahaan, agar identitas di aplikasi dan dokumen selalu benar.
| ID | Kriteria penerimaan |
|---|---|
| AC-02.1 | Tombol Ubah Data hanya tampil untuk pengguna dengan izin update. |
| AC-02.2 | Kode, nama, telepon, dan alamat lengkap wajib diisi; email opsional tetapi harus berformat valid bila diisi. |
| AC-02.3 | Logo terang dan gelap masing-masing menerima satu file gambar. |
| AC-02.4 | Email dan situs web yang dikosongkan dikirim sebagai null. |
| AC-02.5 | Setelah berhasil, toast sukses tampil, cache tenant diperbarui, dan pengguna kembali ke mode lihat. |
| AC-02.6 | Error BE ditampilkan pada field terkait. |
US-03 — Riwayat perubahan (P2)
Sebagai owner, saya ingin melihat log aktivitas perusahaan, agar perubahan profil bisa ditelusuri.
| ID | Kriteria penerimaan |
|---|---|
| AC-03.1 | Tombol Log Aktivitas di mode lihat membuka panel log dengan filter event, pelaku, dan rentang tanggal. |
7. Document Structure
| Field | Required | Default | Notes |
|---|---|---|---|
| Logo mode terang | Tidak | — | 1 gambar, maks 1 MB; dikirim sebagai { id, source } |
| Logo mode gelap | Tidak | — | 1 gambar, maks 1 MB; dikirim sebagai { id, source } |
| Kode | Ya | — | Identifikasi unik perusahaan |
| Nama Perusahaan | Ya | — | Nama resmi / terdaftar |
| Nomor Telepon | Ya | — | Kontak utama |
| Tidak | — | Format email valid | |
| Situs Web | Tidak | — | Teks bebas |
| Alamat Lengkap | Ya | — | Alamat bisnis |
source file: upload, library, link, atau webcam.
8. Status Lifecycle
Tidak berlaku. Perusahaan adalah pengaturan singleton tanpa status.
9. Permissions & Actions
Permissions
| Action | Permission | Syarat tambahan |
|---|---|---|
| Lihat profil dan log aktivitas | settings:company:view:any | — |
| Ubah profil | settings:company:update:any | — |
FE menyembunyikan tombol Ubah Data dan mengalihkan URL edit ke unauthorized bila tidak berizin; BE tetap menolaknya.
10. Business Rules
Aturan bisnis adalah ketentuan yang berlaku di semua layar dan semua aksi, siapa pun yang melakukannya. FE memakainya sebagai validasi di form, BE memakainya sebagai sumber kebenaran; jika keduanya berbeda, perilaku BE yang dianggap benar dan FE menyesuaikan.
- BR-01 Satu profil perusahaan per tenant.
- BR-02 Kode, nama, nomor telepon, dan alamat lengkap wajib; email harus valid bila diisi.
- BR-03 Logo hanya menerima file gambar, satu file per mode, maksimal 1 MB.
- BR-04 Profil disajikan ke seluruh aplikasi lewat data inisialisasi tenant (
/public/init) yang di-cache hingga 1 hari; setiap simpan wajib memperbarui cache tersebut. - BR-05 Dokumen PDF yang dibuat setelah perubahan memakai profil terbaru; PDF yang sudah diunduh sebelumnya tidak berubah.
- BR-06 Setiap perubahan dicatat di log aktivitas.
11. Edge Cases
Edge case adalah kondisi yang jarang terjadi tetapi pasti muncul di operasional nyata. Perilaku yang diharapkan ditetapkan di sini agar tidak diputuskan sendiri-sendiri saat implementasi.
| ID | Case | Expected behavior |
|---|---|---|
| EC-01 | Hanya satu logo yang diunggah | Mode lain tidak menampilkan logo |
| EC-02 | File logo lebih dari 1 MB atau bukan gambar | Ditolak oleh pengunggah sebelum dikirim |
| EC-03 | File logo yang dipakai dihapus dari Pengelola File | Perilaku ditentukan BE; file tercatat “Digunakan Di” di Pengelola File |
| EC-04 | Dua admin mengubah profil bersamaan | Simpan terakhir yang berlaku |
| EC-05 | Situs web diisi tanpa http(s):// | Diterima apa adanya; tidak ada validasi format URL |
12. API Contract
| Action | Method | Endpoint | Ref |
|---|---|---|---|
| Detail perusahaan | GET | /api/company | US-01 |
| Ubah perusahaan | PUT | /api/company | US-02 |
| Log aktivitas | GET | /api/company/activity-logs/cursor | US-03 |
| Presign unggah file | POST | /api/files/upload/presign | AC-02.3 |
| Finalisasi unggah file | GET | /api/files/upload/finalize/:id | AC-02.3 |
| Data inisialisasi tenant | GET | /public/init | BR-04 |
13. Dependencies
PRD terkait
- File Manager — penyimpanan file logo.
- Appearance — berbagi data inisialisasi tenant.
- Purchase Order — kop PDF memakai profil perusahaan.
- Activity Logs — sumber log aktivitas.
Efek ke modul lain
- Logo tampil di sidebar, pemilih toko, sambutan pengguna, dan halaman auth.
- Kop dokumen PDF memakai profil perusahaan.