Lewati ke konten utama

Alur memo

Halaman memo dan inbox di frontend terhubung ke endpoint bisnis pada backend. Memo yang dikirim memiliki status on progress dan lock=true. Penerima aktif ditentukan oleh memo.to, yang dicocokkan dengan username pengguna yang login.

Buat memo → Tambah detail/lampiran → Inbox persetujuan
├─ Approve → Pembayaran bank → Selesai
├─ Revise → Perbaikan memo
└─ Reject → Ditolak

1. Pembuatan memo​

Halaman apps/web/src/pages/MemosPage.tsx dan apps/web/src/pages/MemoDetailPage.tsx menampilkan daftar serta detail memo pada frontend React. Backend Go menyediakan POST /api/memo dan PUT /api/memo/:id. Detail, akun, dan pembayaran terkait diproses bersama perubahan memo pada repository inti. Backend menetapkan status awal on progress dan lock=true, termasuk ketika client lama mengirim Draft. Memo terkunci tidak dapat diedit. Setelah keputusan Revise, pengirim dapat mengedit dan mengirim ulang; pengiriman ulang kembali menjadi on progress dan terkunci.

2. Lampiran dan OCR​

Lampiran diunggah ke POST /api/memo/attachment sebagai multipart dengan field file dan opsional memo_no. Backend menyimpan file, lalu membaca pengaturan is_ocr perusahaan pengguna. Jika OCR aktif dan client tersedia, backend mengirim job ke layanan OCR. Hasil job dapat dipoll melalui GET /api/ocr/jobs/:job_id.

Pengaitan hasil OCR

Repository relasi job–lampiran sudah tersedia, tetapi handler unggah belum memanggilnya. Karena itu callback dan status OCR berdasarkan ID lampiran belum dapat diandalkan untuk alur penuh. Detail ada di status implementasi.

3. Inbox persetujuan​

Tab Approval mengambil daftar melalui POST /api/memo/inbox dengan body {}. Backend memilih memo dengan memo.to sama dengan username dalam sesi; parameter to dari client tidak dapat mengganti pengguna inbox.

Pada web, halaman dipisahkan sebagai berikut:

HalamanRouteFungsi
Buat/memos/newMembuat dan mengirim memo
Daftar approval/memos/approvalMemo yang ditujukan kepada pengguna
Baca/memos/:idDetail, lampiran, biaya, rekening, dan riwayat tanpa form edit
Approval/memos/approval/:idKeputusan Approve, Revise, atau Reject
Edit revisi/memos/:id/editForm untuk pengirim saat memo tidak terkunci

PWA memiliki halaman baca /memos/:id dan halaman approval /approvals/:id.

Respons detail mempertahankan status dan to yang tersimpan. next_to, next_status, dan approve_list menjelaskan langkah berikutnya tanpa mengganti status memo saat ini.

Keputusan memakai POST /api/memo/inbox/approve dengan {id,to}, /revise dengan {id,notes}, atau /reject dengan {id}. Backend memverifikasi penerima aktif dan status di dalam transaksi dengan penguncian baris. Approve hanya menerima penerima dari jalur yang dihitung backend; status keputusan ditentukan backend. Revise mengosongkan penerima, menetapkan revise, dan membuka lock. Reject mengosongkan penerima, menetapkan reject, dan mempertahankan lock. Riwayat keputusan direkam sebagai log memo, dan daftar diperbarui setelah keputusan berhasil.

4. Pembayaran dan pelaporan​

Memo yang telah mencapai status sesuai dapat masuk ke proses create-bank-payment dan approve-bank-payment. Jalur prepayment memiliki aturan tambahan untuk penyelesaian dan pengembalian dana. Endpoint laporan mengelompokkan memo menurut kategori, perusahaan, dan total.

Lokasi kode​

AreaLokasi
Halaman daftar/detailapps/web/src/pages/MemosPage.tsx, apps/web/src/pages/MemoDetailPage.tsx
API client dan hooksapps/web/lib/api/memo.ts, apps/web/lib/api/memoInbox.ts, apps/web/lib/api/memoAttachments.ts
Route Goapps/api/internal/server/server.go
Logika memoapps/api/internal/server/memo_core.go
Lampiranapps/api/internal/server/memo_attachment.go
Repository job OCRapps/api/internal/server/ocr_attachment_jobs.go

Untuk detail payload, respons, dan autentikasi, lihat referensi API dan Swagger yang disediakan server Go.