Pendahuluan

Selamat datang di dokumentasi API Sterilabel versi 1. API ini memungkinkan Anda untuk berinteraksi secara programatik dengan data sterilisasi, inventaris, dan proses yang ada di dalam aplikasi.

API ini didesain mengikuti prinsip REST dan mengembalikan respons dalam format JSON. Semua endpoint berada di bawah base URL berikut:

https://api.lifira.com/v1

Otentikasi

Setiap permintaan ke API harus menyertakan Kunci API yang valid di dalam HTTP Header `X-API-Key`. Kegagalan menyediakan kunci yang benar akan menghasilkan respons `401 Unauthorized`.

Kunci API dapat memiliki izin `read_only` atau `read_write`. Endpoint yang melakukan perubahan data (POST) akan menghasilkan `403 Forbidden` jika kunci yang digunakan bersifat `read_only`.

Alur Kerja Umum

Berikut adalah contoh alur kerja lengkap dari persiapan hingga pencetakan label menggunakan API:

  1. Buat Muatan: Panggil POST /loads untuk membuat "keranjang" sterilisasi baru. Anda akan mendapatkan `load_id` sebagai respons.
  2. Tambah Item: Untuk setiap instrumen atau set, panggil POST /loads/{id}/items menggunakan `load_id` dari langkah sebelumnya.
  3. Proses Muatan: Setelah semua item ditambahkan, panggil POST /loads/{id}/process. Ini akan membuat siklus sterilisasi dan mengubah status muatan menjadi 'selesai'.
  4. Generate Label: Panggil POST /loads/{id}/generate-labels untuk membuat semua catatan label di database. Responsnya akan berisi daftar UID dari semua label baru.
  5. Cetak Label: Untuk setiap UID yang diterima, panggil GET /labels/{uid}/print untuk mendapatkan HTML label yang siap dicetak oleh sistem Anda.

Labels

Mendapatkan Detail Label

GET/labels/{uid}

Mengambil informasi detail dari sebuah label berdasarkan ID unik (UID).

Menandai Label Telah Digunakan

POST/labels/{uid}/mark-used

Mengubah status sebuah label dari 'aktif' menjadi 'telah digunakan'.

Mendapatkan Hasil Cetak Label

GET/labels/{uid}/print

Mengembalikan konten HTML dari label yang siap dicetak dan menaikkan `print_count`.

Inventaris

Mendapatkan Daftar Instrumen

GET/instruments

Mengambil daftar instrumen dengan paginasi.

Mendapatkan Detail Instrumen

GET/instruments/{id}

Mengambil detail satu instrumen spesifik berdasarkan ID-nya.

Mendapatkan Daftar Set

GET/sets

Mengambil daftar set instrumen dengan paginasi.

Mendapatkan Detail Set

GET/sets/{id}

Mengambil detail satu set, termasuk daftar instrumen di dalamnya.

Proses Sterilisasi

Mendapatkan Daftar Muatan

GET/loads

Mengambil daftar muatan sterilisasi dengan paginasi.

Membuat Muatan Baru

POST/loads

Membuat entri muatan baru dengan status 'persiapan'.

Menambahkan Item ke Muatan

POST/loads/{id}/items

Menambahkan instrumen atau set ke dalam muatan yang statusnya 'persiapan'.

Memproses Muatan

POST/loads/{id}/process

Membuat siklus baru dan menyelesaikan muatan.

Membuat Semua Label dari Muatan

POST/loads/{id}/generate-labels

Membuat semua entri label untuk muatan yang sudah 'selesai'.

Mendapatkan Daftar Siklus

GET/cycles

Mengambil daftar riwayat siklus sterilisasi dengan paginasi.

Pengguna

Mendapatkan Daftar Pengguna

GET/users

Mengembalikan daftar semua pengguna di sistem.

Mendapatkan Detail Pengguna

GET/users/{id}

Mengembalikan detail seorang pengguna berdasarkan ID.

Laporan & Master Data

Mendapatkan Laporan KPI

GET/reports

Mengembalikan data Key Performance Indicator (KPI) utama.

Mendapatkan Master Data

GET/master/{type}

Mengembalikan daftar data master yang aktif. Ganti {type} dengan `departments`, `machines`, atau `instrument-types`.

Request (cURL)

curl -X GET \
"https://api.lifira.com/v1/labels/CONTOH123" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789"

Response (200 OK)

{
  "status": "success",
  "data": { "label_unique_id": "CONTOH123", ... }
}

Request (cURL)

curl -X POST \
"https://api.lifira.com/v1/labels/CONTOH123/mark-used" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789" \
-d '{ "note": "Digunakan oleh Dr. Budi" }'

Response (200 OK)

{
  "status": "success",
  "data": { "message": "Status item berhasil diperbarui..." }
}

Request (cURL)

curl -X GET \
"https://api.lifira.com/v1/labels/CONTOH123/print" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789"

Response (200 OK)

{
  "status": "success",
  "data": { "html_content": "<!DOCTYPE html>..." }
}

Request (cURL)

curl -X POST \
"https://api.lifira.com/v1/loads" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789" \
-d '{ "machine_id": 1 }'

Response (201 Created)

{
  "status": "success",
  "data": { "load_id": 151, "status": "persiapan", ... }
}

Request (cURL)

curl -X POST \
"https://api.lifira.com/v1/loads/151/items" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789" \
-d '{ "item_id": 5, "item_type": "set" }'

Response (201 Created)

{
  "status": "success",
  "data": { "message": "Item berhasil ditambahkan..." }
}

Request (cURL)

curl -X POST \
"https://api.lifira.com/v1/loads/151/process" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789" \
-d '{ "operator_user_id": 2 }'

Response (200 OK)

{
  "status": "success",
  "data": { "cycle_id": 78, "status": "completed", ... }
}

Request (cURL)

curl -X POST \
"https://api.lifira.com/v1/loads/151/generate-labels" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789" \
-d '{ "user_id": 2 }'

Response (201 Created)

{
  "status": "success",
  "data": { "label_uids": [ "AEF1345B", ... ] }
}

Request (cURL)

curl -X GET \
"https://api.lifira.com/v1/users" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789"

Response (200 OK)

{
  "status": "success",
  "data": [ { "user_id": 1, "username": "admin", ... } ]
}

Request (cURL)

curl -X GET \
"https://api.lifira.com/v1/reports" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789"

Response (200 OK)

{
  "status": "success",
  "data": { "kpi_cycle_success_rate_percent": 98.5, ... }
}

Request (cURL)

curl -X GET \
"https://api.lifira.com/v1/master/machines" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789"

Response (200 OK)

{
  "status": "success",
  "data": [ { "machine_id": 1, "machine_name": "Autoklaf A", ... } ]
}

Request (cURL)

curl -X GET \
"https://api.lifira.com/v1/instruments?limit=2" \
-H "X-API-Key: ABC-123-DEF-456-GHI-789"

Response (200 OK)

{
  "status": "success",
  "data": [
    { "instrument_id": 12, "instrument_name": "Gunting M...", ... },
    { "instrument_id": 15, "instrument_name": "Klem Arteri", ... }
  ]
}