# CHECKOUT_CHANGE_FIELD_REQUIRED

## Issue

Di struk FE, setelah field `Paid` harus tampil `Change` (kembalian).
Saat ini beberapa response checkout/receipt belum selalu mengirim nilai `change`, sehingga FE kadang harus hitung fallback dari `paid_amount - grand_total`.

## Required Backend Update

Pastikan endpoint checkout dan endpoint receipt detail mengirim field `change` secara konsisten.

## Endpoints

- `POST /api/v1/pos/checkout`
- `GET /api/v1/pos/sales/:id/receipt`

## Required Response Fields (minimum)

```json
{
  "sale_id": "uuid-or-id",
  "bill_no": "BJ20260309xxxxxx",
  "subtotal": 349000,
  "discount": 0,
  "grand_total": 349000,
  "paid_amount": 540000,
  "change": 191000,
  "payment_method": "qris",
  "cash": 0,
  "card": 0,
  "qris": 540000
}
```

Notes:
- `change` wajib numerik, default `0`.
- Jangan kirim `null` pada nilai nominal.
- FE tetap punya fallback hitung `max(0, paid_amount - grand_total)` untuk keamanan, tapi source of truth tetap dari BE.

## Validation Rules

1. `paid_amount >= 0`
2. `grand_total >= 0`
3. `change = max(0, paid_amount - grand_total)` (kecuali ada rule bisnis khusus)
4. Breakdown nominal payment (`cash/card/qris`) konsisten dengan `paid_amount`.

## Acceptance Criteria

1. Struk FE selalu menampilkan baris `Change` dengan nilai benar.
2. Nilai `change` konsisten antara checkout response dan receipt reprint.
3. Tidak ada transaksi dengan `change` kosong/null di payload API.

