Files
AbelBirdNest-Stock/docs/project-spec/walet-backend-architecture.md

6.2 KiB

Arsitektur Backend Sistem Inventory Walet

1. Tujuan

Dokumen ini menjelaskan rancangan arsitektur backend untuk sistem inventory sarang burung walet berbasis lot, sorting, partial allocation, costing, dan traceability.

2. Prinsip Arsitektur

  • modular per domain bisnis
  • transaction-safe untuk operasi stok
  • audit trail wajib untuk semua mutasi lot
  • source of truth ada pada lot dan movement ledger
  • costing dihitung dari allocation aktual
  • siap dikembangkan bertahap dari MVP ke skala lebih besar

3. Modul Backend Utama

A. Auth & Access Control

Tanggung jawab:

  • login
  • session/jwt
  • role permission
  • route guard
  • audit identity

B. Master Data Module

Tanggung jawab:

  • supplier
  • customer
  • item types
  • item grades
  • warehouses
  • locations
  • units
  • adjustment reasons

C. Purchasing Module

Tanggung jawab:

  • purchase header/lines
  • purchase workflow
  • histori harga beli

D. Receiving Module

Tanggung jawab:

  • receipt header/lines
  • qty accepted/rejected
  • create lot awal
  • generate label metadata

E. Inventory Lot Module

Tanggung jawab:

  • detail lot
  • stock summary
  • lot status
  • hold/release
  • transfer
  • location update

F. Sorting & Regrade Module

Tanggung jawab:

  • sorting session
  • child lot creation
  • shrinkage recording
  • regrade logic

G. Sales Module

Tanggung jawab:

  • sales header/lines
  • sales workflow
  • picking confirmation
  • finalize sales

H. Allocation Engine Module

Tanggung jawab:

  • manual allocation validation
  • FIFO suggestion
  • future FEFO/hybrid strategy
  • costing by allocation

I. Inventory Movement Ledger Module

Tanggung jawab:

  • record all inventory movements
  • balance validation
  • immutable movement history

J. Adjustment & Return Module

Tanggung jawab:

  • stock adjustment
  • shrinkage
  • purchase returns
  • sales returns
  • damage/reject flows

K. Traceability Module

Tanggung jawab:

  • backward trace
  • forward trace
  • lot lineage
  • trace report builder

L. Reporting Module

Tanggung jawab:

  • stock summary report
  • sales report
  • purchase report
  • margin report
  • shrinkage report
  • supplier quality report

M. Barcode / QR Module

Tanggung jawab:

  • label generation
  • reprint tracking
  • lookup by scanned value

4. Struktur Layer yang Disarankan

src/
  modules/
  common/
  infrastructure/
  database/
  jobs/

Per module internal

modules/
  purchases/
    controllers/
    services/
    repositories/
    dtos/
    entities/
    validators/

5. Service Boundaries Penting

PurchaseService

  • createPurchase
  • updatePurchase
  • submitPurchase
  • cancelPurchase

ReceiptService

  • createReceipt
  • finalizeReceipt
  • generateLotsFromReceipt

LotService

  • getLotDetail
  • holdLot
  • releaseLot
  • transferLot
  • getStockSummary

SortingService

  • createSortingSession
  • validateSortingBalance
  • createChildLots

RegradeService

  • regradeLot
  • splitLotForRegrade

SalesService

  • createSales
  • updateSales
  • finalizeSales
  • confirmPicking

AllocationService

  • autoAllocateFIFO
  • validateManualAllocation
  • calculateAllocationCost

MovementService

  • recordReceiptMovement
  • recordSortingMovement
  • recordSalesMovement
  • recordAdjustmentMovement
  • recordTransferMovement

TraceService

  • traceBySales
  • traceByLot
  • buildLotLineage

6. Transaksi Database yang Wajib Atomic

Operasi berikut wajib berada dalam database transaction:

  • finalize receipt + create lots + create movement
  • sorting submit + child lot creation + source lot reduction + movement insert
  • regrade + lot split + movement insert
  • sales allocation submit + costing update
  • picking confirm + lot quantity reduction + movement insert
  • stock adjustment + balance update + movement insert
  • returns + lot mutation + movement insert

Kalau tidak atomic, stok akan gampang kacau.

7. Source of Truth Rules

  • inventory_lots menyimpan posisi qty aktif saat ini
  • inventory_movements menyimpan histori mutasi yang tidak boleh hilang
  • sales_allocations menyimpan asal costing penjualan
  • sorting_results dan parent_lot relation menyimpan lineage hasil sortasi

8. Validasi Domain Penting

Receipt

  • qty accepted + qty rejected <= qty received

Sorting

  • total result + shrinkage <= input qty

Allocation

  • total allocation = qty sales line
  • lot status harus ACTIVE
  • available qty harus cukup

Picking

  • qty picked tidak boleh melebihi qty allocated tanpa override rule

Adjustment

  • qty_after tidak boleh negatif

Regrade

  • qty regrade tidak boleh melebihi available qty lot sumber

9. Event / Hook Internal yang Disarankan

Walau MVP belum perlu event bus besar, internal hooks bagus untuk:

  • afterReceiptFinalized
  • afterSortingCompleted
  • afterSalesAllocated
  • afterPickingConfirmed
  • afterAdjustmentCreated

Hook bisa dipakai untuk:

  • recalculation summary
  • audit log tambahan
  • notification
  • async report cache refresh

10. Caching Strategy

  • stock summary boleh dicache ringan
  • lot detail sebaiknya fresh atau cache sangat pendek
  • reports boleh async/precomputed bila sudah besar
  • traceability query perlu index bagus, jangan terlalu mengandalkan cache dulu

11. Database Index Priorities

Index penting:

  • inventory_lots(item_type_id, item_grade_id, warehouse_id)
  • inventory_lots(status)
  • sales_allocations(sales_line_id)
  • sales_allocations(inventory_lot_id)
  • inventory_movements(inventory_lot_id, movement_date)
  • purchases(supplier_id, purchase_date)
  • sales(customer_id, sales_date)

12. Background Jobs yang Bisa Ditambahkan

  • nightly stock summary refresh
  • report materialization
  • aging recalculation
  • QR label batch generation
  • alert stok menipis

13. Security & Audit

  • semua endpoint protected
  • role permission check di service layer, bukan UI saja
  • audit log simpan user, waktu, aksi, reference
  • label reprint dan stock adjustment harus ekstra jelas auditnya

14. Rekomendasi Stack Backend

Pilihan aman:

  • Node.js + NestJS / Express terstruktur
  • PostgreSQL
  • Prisma / TypeORM / Knex sesuai preferensi
  • Redis opsional untuk cache dan queue

Kalau mau lebih enterprise, NestJS cocok karena modular dan rapi.

15. Kesimpulan

Backend sistem walet ini harus dibangun dengan fokus utama pada integritas transaksi stok. Modul paling kritis adalah inventory lot, allocation engine, movement ledger, sorting/regrade, dan traceability. Kalau lima bagian ini kuat, sisanya relatif mengikuti.