# BMT-Abdee SHU Export Contract
## Sprint 5.2 — Integration Reference

### Overview
FDE akan pull data dari BMT-Abdee via RestApiConnector.
BMT-Abdee harus menyediakan 3 endpoint berikut.

### Authentication
Header wajib pada setiap request dari FDE:
```
X-SHU-API-Key: {api_key}
```
API key dikonfigurasi di FDE Admin Panel (business_units.api_key_encrypted).

---

### Endpoint 1 — Activities Export
```
GET /shu-export/activities
    ?period_start=2026-01-01
    &period_end=2026-12-31
    &sync_type=preview|final
```

Response format (JSON):
```json
{
  "meta": {
    "unit_code": "BMT",
    "schema_version": "1.0",
    "connector_version": "1.0",
    "period_start": "2026-01-01",
    "period_end": "2026-12-31",
    "exported_at": "2026-12-31T23:59:00+07:00",
    "record_count": 150
  },
  "activities": [
    {
      "external_member_id": "BMT-2021-001",
      "total_transaction_value": 50000000,
      "total_profit_generated": 3500000,
      "transaction_count": 2
    }
  ]
}
```

Field mapping dari database BMT-Abdee:
- external_member_id → members.kode_anggota
- total_transaction_value → SUM(pinjaman.pokok) milik anggota dalam periode
- total_profit_generated → SUM(margin yang diterima koperasi) dalam periode
- transaction_count → COUNT(pinjaman aktif) milik anggota

---

### Endpoint 2 — Savings Export
```
GET /shu-export/savings
    ?reference_date=2026-12-31
```

Response format (JSON):
```json
{
  "meta": {
    "unit_code": "BMT",
    "schema_version": "1.0",
    "connector_version": "1.0",
    "reference_date": "2026-12-31",
    "exported_at": "2026-12-31T23:59:00+07:00",
    "record_count": 312
  },
  "savings": [
    {
      "external_member_id": "BMT-2021-001",
      "simpanan_pokok": 500000,
      "simpanan_wajib": 2400000,
      "simpanan_sukarela": 5000000
    }
  ]
}
```

Field mapping dari database BMT-Abdee:
- external_member_id → members.kode_anggota
- simpanan_pokok → koperasi_simpanan WHERE jenis=POKOK AND member=X
- simpanan_wajib → koperasi_simpanan WHERE jenis=WAJIB AND member=X
- simpanan_sukarela → koperasi_simpanan WHERE jenis=SUKARELA AND member=X

---

### Endpoint 3 — Health Check
```
GET /shu-export/ping
```

Response:
```json
{"status": "ok", "unit_code": "BMT"}
```

---

### Error Response Format
```json
{
  "error": true,
  "message": "Deskripsi error",
  "code": 401
}
```

HTTP status codes: 200 OK, 401 Unauthorized, 500 Internal Server Error.
