Inward Online Payment API - hmislk/hmis GitHub Wiki
Inward Online Payment API
Overview
The Inward Online Payment API (/api/apiInward) enables external patient-facing websites or mobile applications to:
- List inpatient admissions with outstanding balances
- Look up admissions by patient or guardian phone number
- Validate an admission before payment
- Record online payments against inpatient bills
The website is responsible for OTP verification externally. Once a phone number is verified, it can be passed to this API to retrieve matching admissions.
Authentication
All endpoints require an API key passed in the Finance HTTP header.
Finance: <your-api-key>
API keys are managed in the HMIS Admin panel under API Key Management. Keys must be:
- Active (not retired)
- Activated
- Not expired
If authentication fails, all endpoints return:
{"error": "1", "error_description": "Unauthorized"}
Endpoints
1. List Admissions with Outstanding Balance
GET /api/apiInward/admissions
Returns up to 20 admissions that are either:
- Not yet finalized/discharged (still admitted), OR
- Finalized and discharged but with a remaining balance due
Headers:
| Header | Required | Description |
|---|---|---|
| Finance | Yes | API key |
Response (success):
{
"admission": [
{
"patient_encounter_id": 12345,
"bht_no": "BHT-2024-001",
"patient_mrn": "P001234",
"patient_name": "John Smith",
"patient_home_phone": "0112345678",
"patient_mobile": "0771234567",
"patient_nic": "123456789V",
"net_total": 50000.0,
"paid_amount": 20000.0,
"balance": 30000.0
}
],
"error": "0",
"error_description": ""
}
Response (no data):
{"admission": "", "error": "1", "error_description": "No Data."}
2. Find Admissions by Phone Number
GET /api/apiInward/admissions/byPhone/{phone}
Searches for admissions where the phone number matches any of:
- Patient mobile number
- Patient home phone number
- Guardian mobile number
- Guardian home phone number
Use this after OTP verification to retrieve admissions for the verified phone.
Path Parameters:
| Parameter | Description |
|---|---|
| phone | Verified phone number (e.g., 0771234567) |
Headers:
| Header | Required | Description |
|---|---|---|
| Finance | Yes | API key |
Response (success):
{
"admission": [
{
"patient_encounter_id": 12345,
"bht_no": "BHT-2024-001",
"patient_mrn": "P001234",
"patient_name": "John Smith",
"net_total": 50000.0,
"paid_amount": 20000.0,
"balance": 30000.0
}
],
"error": "0",
"error_description": ""
}
Response (no match):
{"admission": "", "error": "1", "error_description": "No Data."}
3. Validate Admission
GET /api/apiInward/validateAdmission/{bht_no}/{phone}
Checks whether a BHT number is valid for payment and that the given phone number is associated with the patient or guardian. Used to confirm the patient before showing the payment screen.
Path Parameters:
| Parameter | Description |
|---|---|
| bht_no | BHT (Bed Head Ticket) number |
| phone | Patient or guardian phone number |
Headers:
| Header | Required | Description |
|---|---|---|
| Finance | Yes | API key |
Response (valid):
{"error": "0", "error_description": "Valid"}
Response (not valid):
{"error": "1", "error_description": "Not Valid"}
4. List Banks
GET /api/apiInward/banks
Returns all active bank institutions registered in HMIS. Used to populate the bank selector on the payment form.
Headers:
| Header | Required | Description |
|---|---|---|
| Finance | Yes | API key |
Response (success):
{
"bank": [
{"bank_id": 119179, "bank_name": "Commercial Bank"},
{"bank_id": 62127, "bank_name": "Bank Of Ceylon"}
],
"error": "0",
"error_description": ""
}
5. Submit Payment (POST)
POST /api/apiInward/payment
Content-Type: application/json
Records an online payment against a patient admission. Creates both the inward payment bill and a payment table record.
Headers:
| Header | Required | Description |
|---|---|---|
| Finance | Yes | API key |
| Content-Type | Yes | application/json |
Request Body:
{
"bht_no": "BHT-2024-001",
"bank_id": 119179,
"reference_no": "TXN20240101001",
"amount": 15000.0,
"payment_date": "2024-01-01 10:30:00"
}
| Field | Type | Required | Description |
|---|---|---|---|
| bht_no | string | Yes | Patient BHT number |
| bank_id | long | Yes | Bank institution ID (from /banks) |
| reference_no | string | Yes | Online transaction reference number |
| amount | double | Yes | Payment amount (must be > 0) |
| payment_date | string | No | Date in yyyy-MM-dd HH:mm:ss format; defaults to current time |
Response (success):
{
"bill": {
"bill_no": "INWPAY-2024-0001",
"bht_no": "BHT-2024-001",
"amount": 15000.0,
"reference_no": "TXN20240101001"
},
"error": "0",
"error_description": ""
}
Error responses:
{"bill": "", "error": "1", "error_description": "Admission not found."}
{"bill": "", "error": "1", "error_description": "Bank not found."}
{"bill": "", "error": "1", "error_description": "Amount must be greater than zero."}
{"bill": "", "error": "1", "error_description": "Payment Not Done."}
6. Legacy GET Payment (Deprecated)
GET /api/apiInward/payment/{bht_no}/{bank_id}/{credit_card_ref}/{amount}
Kept for backward compatibility only. Use the POST endpoint for new integrations. This endpoint does not record to the payment table.
Error Codes
error value |
Meaning |
|---|---|
"0" |
Success |
"1" |
Error (see error_description) |
Common error_description values:
"Unauthorized"— missing or invalid API key"No Data."— query returned no results"Admission not found."— BHT number not found"Bank not found."— bank_id not found"Amount must be greater than zero."— invalid amount"Payment Not Done."— bill creation failed"Invalid Argument."— unexpected exception (check server logs)
Integration Notes
Recommended Workflow
- Patient visits the hospital website and enters their phone number.
- Website sends OTP to the phone and verifies it.
- After verification, call
GET /admissions/byPhone/{phone}to list the patient's admissions. - Patient selects the admission and amount to pay.
- Call
GET /validateAdmission/{bht_no}/{phone}to confirm the admission is valid before proceeding. - Call
GET /banksto populate the bank dropdown. - Patient completes online payment on the bank gateway.
- After successful gateway response, call
POST /paymentwith the transaction details.
Phone Number Matching
The byPhone and validateAdmission endpoints match against four phone fields:
patient.person.mobilepatient.person.phone(home)guardian.mobileguardian.phone
This ensures guardians paying on behalf of patients can also look up the admission.
Payment Recording
The POST /payment endpoint correctly records payment to both:
- The
billtable (inward payment bill, typeInwardPaymentBill) - The
paymenttable (viaPaymentService.createPaymentwithOnlineSettlementmethod)
This allows reconciliation in the HMIS cashier and financial reports.