# Sales Report API Requirements (POS Bazzar)

Dokumen ini untuk kebutuhan halaman **Report Invoice & Return Sale** di FE setelah transaksi selesai.

Target perilaku:

- setelah checkout sukses, transaksi muncul di Sales Report
- list report bisa difilter tanggal, tipe invoice, dan search
- FE menampilkan branding Bazzar + tabel ringkas seperti desain referensi

## Endpoint yang Dibutuhkan

## 1) List Sales Report

`GET /api/v1/reports/sales`

Query:

- `start_date=YYYY-MM-DD`
- `end_date=YYYY-MM-DD`
- `type` (opsional: `cash|card|qris|multi|all`)
- `search` (opsional: invoice no / cashier)
- `page`, `limit` (opsional)

Response contoh:

```json
{
  "items": [
    {
      "sale_id": 91231,
      "bill_no": "BJ2626030800228002",
      "created_at": "2026-03-08T02:28:01+07:00",
      "cashier_name": "trialars",
      "staff_name": "-",
      "member_name": "-",
      "quantity": 2,
      "subtotal": 658000,
      "discount": 0,
      "cashback": 0,
      "total": 658000,
      "cash": 658000,
      "card": 0,
      "return_sale": 0
    }
  ],
  "summary": {
    "total_receipt": 2,
    "quantity": 3,
    "cash": 947000,
    "card": 0,
    "subtotal": 947000,
    "discount": 0,
    "cashback": 0,
    "total": 947000,
    "return_sale": 0
  },
  "meta": {
    "page": 1,
    "limit": 10,
    "total": 2
  }
}
```

## 2) Print/Reprint Receipt (disarankan)

`GET /api/v1/pos/sales/:id/receipt`

Tujuan:

- tombol `Print` di report bisa reprint transaksi lama
- data struk konsisten dari transaksi yang sudah tersimpan

## Validasi dan Rule BE

- simpan semua angka final saat checkout (`subtotal`, `discount`, `total`, `cash`, `card`, `change`)
- jangan hitung ulang dari sisi FE untuk report history
- `bill_no` harus unik dan terindeks
- filter tanggal harus pakai timezone Asia/Jakarta agar hasil sesuai operasional kasir

## File Kandidat Implementasi

- `internal/modules/reports/handler.go` (baru)
- `internal/modules/reports/service.go` (baru)
- `internal/modules/reports/repository.go` (baru)
- `internal/modules/pos/handler.go` (receipt endpoint bila belum ada)
- `internal/server/http.go` (register routes)

Routes:

- `GET /api/v1/reports/sales`
- `GET /api/v1/pos/sales/:id/receipt`

