KlaimGuard API

Cek berkas klinis terhadap kaidah klaim BPJS per tahap clinical pathway. Hasilnya: apa yang kurang, apa yang tidak konsisten, dan contoh isian siap-salin untuk nakes.

API ReferenceUnduh OpenAPI

Status: draft kontrak v1. Kontrak ini dibekukan dulu sebelum gateway dibangun. Endpoint produksi api.healthguardinnovation.com/klaimguard/v1 belum aktif.

Tahap clinical pathway

stageTahapAlias endpointStatus
igd_asesmen_awalIGD — Asesmen Awal/igd/asesmen-awalLogika siap (R&D RS)
ranap_cpptRanap — CPPT / Early Warning/ranap/cpptLogika siap (R&D RS)
ranap_resumeRanap — Resume Pulang/ranap/resumeLogika siap (R&D RS)
rajal_soapRajal — SOAP Poli/rajal/soapLogika siap (R&D klinik)
—Hilir — Casemix (overview episode sebelum klaim INA-CBG)—Direncanakan

Semua tahap memakai satu endpoint POST /checks. Alias di atas hanya jalan pintas yang mengisi stage otomatis.

3 cara mengirim data

OpsiUntuk siapaIsi request
①FHIR R4 — SATUSEHAT defaultSIMRS yang sudah terintegrasi SATUSEHATstage + bundle
②SimpleSIMRS yang belum terintegrasi SATUSEHATstage + encounter + sections[] (label form Anda sendiri)
③Kustomisasi / on-premiseFormat khusus atau instalasi di server RSAdapter khusus dipasang HealthGuard pada API key Anda. Hubungi kami

Ketiganya diolah oleh mesin verifikasi yang sama. Isi klinis yang sama menghasilkan temuan yang sama.

Mulai dalam 4 langkah

  1. Dapatkan API key per faskes dari tim HealthGuard. Kirim di header X-API-Key.
  2. Pakai ulang mapping SATUSEHAT Anda. Kumpulkan resource satu kunjungan (Encounter, Observation, Condition, Procedure, dst.) ke dalam satu Bundle. SIMRS belum SATUSEHAT? Pakai opsi ② simple.
  3. Kirim POST /checks dengan stage yang sesuai. Tambahkan header Idempotency-Key agar aman saat diulang.
  4. Baca summary.status, lalu tampilkan findings[].rekomendasi dan contoh_isian ke dokter/perawat di layar SIMRS.

① FHIR R4 — SATUSEHAT (default)

KlaimGuard membaca resource dan code system yang sama dengan SATUSEHAT (HL7 FHIR R4 4.0.1). Wajib hanya satu Encounter. Resource lain dibaca bila ada; semakin lengkap, semakin tajam verifikasinya.

Yang diverifikasiResource SATUSEHATKode
Kunjungan & jenis layananEncounter — class, period, hospitalization.admitSource, identifierv3-ActCode EMER / IMP / AMB
Diagnosa utama & sekunderCondition (category encounter-diagnosis), urutan via Encounter.diagnosis.rankICD-10 http://hl7.org/fhir/sid/icd-10
TindakanProcedureICD-9-CM http://hl7.org/fhir/sid/icd-9-cm
Tanda vital (TD, nadi, RR, suhu, SpO2, BB, TB, GCS, nyeri, GDA)Observation category vital-signs; TD = panel 85354-9LOINC + UCUM
Hasil laboratoriumDiagnosticReport (LAB) + Observation category laboratoryLOINC / kode lokal
RadiologiDiagnosticReport category RAD — conclusion—
Resep / obatMedicationRequestKFA http://sys-ids.kemkes.go.id/kfa (opsional)
AlergiAllergyIntoleranceSNOMED CT (opsional)
Narasi klinis tanpa resource berkode (primary survey, pemeriksaan fisik, CPPT SOAP, resume, laporan operasi)QuestionnaireResponse — satu per bagian, questionnaire = …/Questionnaire/<section>, linkId = label field SIMRS—
Privasi: KlaimGuard tidak pernah membaca nama, NIK, KK, paspor, atau nomor HP dari Patient. Identifikasi pasien memakai nomor IHS SATUSEHAT atau nomor RM. Bagian ini boleh dikosongkan.

Contoh request (Bundle yang hanya berisi resource SATUSEHAT):

curl -X POST https://api.healthguardinnovation.com/klaimguard/v1/checks \
  -H "X-API-Key: $KLAIMGUARD_KEY" -H "Content-Type: application/fhir+json" \
  -H "Idempotency-Key: IGD-2026-000123" -d @bundle.json
{
  "stage": "igd_asesmen_awal",
  "bundle": {
    "resourceType": "Bundle",
    "type": "collection",
    "entry": [
      {
        "fullUrl": "urn:uuid:19aca3b2-1833-4137-b71f-1815f9fc511b",
        "resource": {
          "resourceType": "Patient"
        }
      },
      {
        "fullUrl": "urn:uuid:9e51db9f-0133-4451-b9d9-7f81a828b11e",
        "resource": {
          "resourceType": "Encounter",
          "status": "finished",
          "class": {
            "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
            "code": "EMER",
            "display": "emergency"
          },
          "identifier": [
            {
              "system": "https://docs.healthguardinnovation.com/fhir/sid/visit-id",
              "value": "DEMO-IGD-DATA-VALID-TINDAKAN-"
            }
          ],
          "subject": {
            "reference": "urn:uuid:19aca3b2-1833-4137-b71f-1815f9fc511b"
          },
          "hospitalization": {
            "admitSource": {
              "coding": [
                {
                  "system": "http://terminology.hl7.org/CodeSystem/admit-source",
                  "code": "emd"
                }
              ],
              "text": "IGD"
            }
          },
          "diagnosis": [
            {
              "condition": {
                "reference": "urn:uuid:fd9c0e0c-d906-4310-b86a-7348bc113236"
              },
              "rank": 1,
              "use": {
                "coding": [
                  {
                    "system": "http://terminology.hl7.org/CodeSystem/diagnosis-role",
                    "code": "AD"
                  }
                ]
              }
            }
          ]
        }
      },
      {
        "fullUrl": "urn:uuid:4879ae53-a092-4da9-b649-537e97a4208e",
        "resource": {
          "resourceType": "AllergyIntolerance",
          "clinicalStatus": {
            "coding": [
              {
                "system": "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical",
                "code": "active"
              }
            ]
          },
          "verificationStatus": {
            "coding": [
              {
                "system": "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification",
                "code": "confirmed"
              }
            ]
          },
          "code": {
            "text": "Tidak ada alergi obat maupun makanan",
            "coding": [
              {
                "system": "http://snomed.info/sct",
                "code": "716186003",
                "display": "No known allergy"
              }
            ]
          },
          "patient": {
            "reference": "urn:uuid:19aca3b2-1833-4137-b71f-1815f9fc511b"
          }
        }
      },
      {
        "fullUrl": "urn:uuid:d4dc3afe-a965-4437-baa8-a81cafe458d5",
        "resource": {
          "resourceType": "Observation",
          "status": "final",
          "category": [
            {
              "codin
  … (dipotong — lihat file lengkap)

Isi Bundle contoh ini: Patient×1, Encounter×1, AllergyIntolerance×1, Observation×12, Condition×1, Procedure×2. Kirim penjamin di tingkat request (default BPJS) karena SATUSEHAT Encounter tidak punya elemen penjamin. Untuk ranap_cppt, diagnosa klaim saat ini diambil dari Encounter.diagnosis dengan use billing.

② Simple

Kirim bagian-bagian form SIMRS apa adanya. Label field Anda dipakai langsung, tanpa mapping ke kode.

{
  "stage": "igd_asesmen_awal",
  "penjamin": "BPJS",
  "encounter": {
    "visit_id": "DEMO-IGD-BACKWARD-COMPAT-TANP",
    "class": "EMER",
    "origin": "IGD"
  },
  "sections": [
    {
      "key": "dataPasien",
      "label": "Data Pasien",
      "data": {
        "Cara Datang": "Sendiri",
        "Jenis Kebutuhan Pelayanan": "kuratif",
        "Sarana Transportasi": "Mobil",
        "Pengantar": "Keluarga",
        "Hubungan Pengantar": "-",
        "Jenis Prioritas / Triase": "Kuning",
        "Jam Kedatangan Ada": "2026-07-12T00:55:43.000Z",
        "Jam Diperiksa Dokter Ada": "2026-07-12T00:55:43.000Z",
        "Jenis Kasus": "ipd",
        "Diagnosa Rujukan": "-"
      }
    },
    {
      "key": "anamnesa",
      "label": "Anamnesa",
      "data": {
        "Keluhan Utama": "nyeri perut",
        "Riwayat Penyakit Sekarang": "pasien datang dengan keluhan nyeri perut terutama di ulu hati disertai mual muntah. sesak (-) nyeri dada (-) BAK dan BAB tidak ada keluhan. flatus (+)",
        "Riwayat Penyakit Dahulu": "-",
        "Riwayat Penggunaan Obat": "-",
        "Riwayat Alergi": "Tidak"
      }
    },
    {
      "key": "primarySurvey",
      "label": "Primary Survey (ABCDE)",
      "data": {
        "Airway": "jalan nafas: paten, Kesimpulan: Aman",
        "Breathing": "Pernapasan: spontan, regular, Gerakan Dada: simetris, Tipe pernapasan: normal, Kesimpulan: Aman",
        "Circulation": "Nadi: reguler, kuat, Kulit/mukosa: normal, Akral: hangat, kering, CRT: kurangDari2Detik, Kesimpulan: Aman",
        "Disability GCS": "e: 4, v: 5, m: 6",
        "Disability Pupil": "Pupil: Isokor, Lateralisasi: Tidak Ada, Kesimpulan: Aman",
        "Exposure": "Eksposur: dalamBatasNormal, Kesimpulan: Aman"
      }
    },
    {
      "key": "ttv",
      "label": "TTV & Keadaan Umum",
      "data": {
        "Keadaan Umum": "Sedang",
        "GCS - E": "4",
        "GCS - V": "5",
        "GCS - M": "6",
        "Tingkat Kesadaran": "1.Sadar Baik/Alert: 0",
        "Tekanan Darah (mmHg)": "140/80",
        "Suhu (°C)": "37",
        "Nadi (x/menit)": "100",
        "Pernafasan (x/menit)": "20",
        "SpO2 (%)": "98",
        "Berat Badan (kg)": "-",
        "Tinggi Badan (cm)": "-",
        "GDA (mg/dl)": "-",
        "Skala Nyeri (0-10)": "4-5"
      }
    },
    {
      "key": "pemeriksaanFisik",
      "label": "Pemeriksaan Fisik",
      "data": {
        "Kepala": "Normal",
        "Mata": "Normal",
        "Telinga": "Normal",
        "Hidung": "Normal",
        "Leher": "Normal",
        "Dada": "Normal simetris, S1S2 reg, ves/ves, wh-/-, rh-/-",
  
  … (dipotong — lihat file lengkap)

③ Kustomisasi / on-premise

Untuk format SIMRS khusus, integrasi langsung database, atau instalasi di server RS. HealthGuard memasang adapter khusus pada API key faskes Anda. Respons tetap sama persis, jadi layar SIMRS tidak perlu diubah. Hasilnya menandai meta.profile = "custom".

Bentuk respons (sama untuk semua tahap)

FieldArti
summary.statusStatus terburuk di dokumen: lengkap · belum_lengkap · perbaiki
summary.claim_readytrue hanya jika semua lengkap
findings[]Satu penilaian per bagian: rekomendasi, contoh_isian, penjelasan
claim_impactDampak ke klaim (under-coding / risiko upcoding / optimal). Tahap ranap.
diagnosis_suggestions, medication_review, document_syncKhusus ranap_cppt (Early Warning selama rawat)
coding_warnings[]Peringatan aturan klaim deterministik (masa berlaku rujukan, tindakan berulang). Tahap rajal.
notices[]Saran tambahan, mis. berkas yang perlu di-bridging agar saran koding lebih akurat
skipped + skip_reasonnon_bpjs · origin_not_supported · no_cppt_entries · missing_required_documents. Gratis, tanpa panggilan AI.

Blok yang tidak berlaku untuk suatu tahap bernilai null, tidak pernah hilang. Satu parser cukup untuk semua tahap.

{
  "check_id": "chk_e89f49da4c8d079e",
  "api_version": "v1",
  "stage": "ranap_cppt",
  "pathway": "igd_ranap",
  "encounter_ref": {
    "visit_id": "DEMO-EWS-ASAL-MASUK-POLI-EXPE",
    "patient_ref": null
  },
  "skipped": true,
  "skip_reason": "origin_not_supported",
  "skip_detail": "Alur masuk \"POLI\" belum didukung — modul ini hanya untuk alur IGD → rawat inap.",
  "summary": {
    "status": null,
    "claim_ready": null,
    "counts": {
      "lengkap": 0,
      "belum_lengkap": 0,
      "perbaiki": 0
    }
  },
  "notices": [],
  "findings": [],
  "claim_impact": null,
  "diagnosis_suggestions": null,
  "medication_review": null,
  "document_sync": null,
  "coding_warnings": [],
  "meta": {
    "latency_ms": null,
    "engine": "rules+llm",
    "model": null,
    "profile": "simple",
    "origin_normalized": "POLI"
  }
}

Kode error

HTTPKapanTindakan
400Payload tidak sesuai skema (details berisi lokasi field)Perbaiki mapping
401API key salah / dicabutHubungi HealthGuard
413Payload > 5 MBKirim ringkasan lab/radiologi
422JSON valid tapi tidak bisa dipakai (mis. Bundle tanpa Encounter)Perbaiki data
429Batas request per faskes terlampauiTunggu Retry-After
502Penyedia AI gagal setelah retryUlangi dengan Idempotency-Key yang sama

Privasi

Jangan pernah mengirim nama, NIK, atau nomor HP pasien. patient_ref = nomor RM atau ID internal; nilai berbentuk NIK (16 digit) ditolak. Data disimpan di server Indonesia. Tahap yang di-skip tidak memanggil AI.

Contoh lengkap & skema

Semua contoh di bawah adalah data sintetis dan lolos validasi skema serta validasi FHIR R4 (4.0.1).

Skema JSON: request.schema.json · response.schema.json · OpenAPI: yaml / json