Updating billing details of an active consultation service order (Java)
In this use case, the user updates the details of an active consultation like the patient’s billing details, or add a test report, or change the appointment slot (if the consultation has not started) etc. Sometimes the healthcare service provider also updates an active consultation order.
Code snippets
BPP receives protocol update
/*
Example Request JSON:
{
"context": {
"domain": "nic2004:85121",
"country": "IND",
"city": "std:080",
"action": "update",
"core_version": "0.9.2",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"transaction_id": "1239890342",
"message_id": "123793824",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"update_target": "billing",
"order": {
"id": "order_1",
"state": "Active",
"items": [
{
"id": "dr_veena_slot_1",
"quantity": {
"count": 1
}
}
],
"billing": {
"name": "Jane Doe",
"address": {
"door": "21A",
"name": "ABC Apartments",
"locality": "HSR Layout",
"city": "Bengaluru",
"state": "Karnataka",
"country": "India",
"area_code": "560102"
},
"email": "[email protected]",
"phone": "+919876523210"
},
"fulfillment": {
"type": "IN-PERSON",
"end": {
"location": {
"id": "good-health-koramangala",
"gps": "12.9349377,77.6055586"
},
"time": {
"range": {
"start": "2021-08-11T04:30:00.000Z",
"end": "2021-08-11T05:30:00.000Z"
}
},
"contact": {
"phone": "+919876543210",
"email": "[email protected]"
}
},
"agent": {
"name": "Dr. Veena H",
"dob": "1989-08-12",
"gender": "Female",
"tags": {
"doctor_registration_no": "12345"
},
"phone": "+919876543210",
"email": "[email protected]"
},
"customer": {
"person": {
"name": "Remya C",
"dob": "1989-08-12",
"gender": "Female"
},
"contact": {
"phone": "+919898987676",
"email": "[email protected]"
}
}
},
"quote": {
"price": {
"currency": "INR",
"value": "1100"
},
"breakup": [
{
"title": "Consultation Charges",
"price": {
"currency": "INR",
"value": "1000"
}
},
{
"title": "Service Charge",
"price": {
"currency": "INR",
"value": "100"
}
}
],
"ttl": "P1H"
},
"payment": {
"uri": "https://api.bpp.com/pay?amt=$amount&txn_id=ksh87yriuro34iyr3p4&mode=upi&vpa=bpp@upi",
"tl_method": "http/get",
"params": {
"transaction_id": "ksh87yriuro34iyr3p4",
"amount": "1100",
"mode": "upi",
"vpa": "bpp@upi"
},
"type": "ON-FULFILLMENT",
"status": "NOT-PAID"
}
}
}
}
*/
// BPP Update Endpoint
@PostMapping("/bpp/update")
public ResponseEntity update(
@RequestHeader HttpHeaders headers,
@RequestBody UpdateRequest request) {
var response = bppApplicationService.update(request, headers);
return ResponseEntity.ok(response);
}
BPP processes the update
public Response update(UpdateRequest request, HttpHeaders headers) {
var onUpdateRequest = new OnUpdateRequest();
// Validate the headers
var isHeadersValid = validateHeaders(headers);
// Construct and return error
if (!isHeadersValid) return null;
// Update the given order
var updateOrder = request.getMessage().getOrder();
// Execute business logic here
// Generate the response
onUpdateRequest = generateUpdatedOrderResponse(updateOrder);
//invoke on_update api
return invokeOnUpdate(onUpdateRequest, headers);
}
}
BPP generates response
/*
Example Response JSON:
{
"context": {
"domain": "nic2004:85121",
"country": "IND",
"city": "std:080",
"action": "on_update",
"core_version": "0.9.2",
"bap_id": "https://mock_bap.com/",
"bap_uri": "https://mock_bap.com/beckn/",
"transaction_id": "1239890342",
"message_id": "123793824",
"timestamp": "2021-03-23T10:00:40.065Z"
},
"message": {
"order": {
"id": "order_1",
"state": "Active",
"items": [
{
"id": "dr_veena_slot_1",
"quantity": {
"count": 1
}
}
],
"billing": {
"name": "Jane Doe",
"address": {
"door": "21A",
"name": "ABC Apartments",
"locality": "HSR Layout",
"city": "Bengaluru",
"state": "Karnataka",
"country": "India",
"area_code": "560102"
},
"email": "[email protected]",
"phone": "+919876523210"
},
"fulfillment": {
"type": "IN-PERSON",
"end": {
"location": {
"id": "good-health-koramangala",
"gps": "12.9349377,77.6055586"
},
"time": {
"range": {
"start": "2021-08-11T04:30:00.000Z",
"end": "2021-08-11T05:30:00.000Z"
}
},
"contact": {
"phone": "+919876543210",
"email": "[email protected]"
}
},
"agent": {
"name": "Dr. Veena H",
"dob": "1989-08-12",
"gender": "Female",
"tags": {
"doctor_registration_no": "12345"
},
"phone": "+919876543210",
"email": "[email protected]"
},
"customer": {
"person": {
"name": "Remya C",
"dob": "1989-08-12",
"gender": "Female"
},
"contact": {
"phone": "+919898987676",
"email": "[email protected]"
}
}
},
"quote": {
"price": {
"currency": "INR",
"value": "1200"
},
"breakup": [
{
"title": "Consultation Charges",
"price": {
"currency": "INR",
"value": "1000"
}
},
{
"title": "Service Charge",
"price": {
"currency": "INR",
"value": "100"
}
},
{
"title": "Reschedule charge",
"price": {
"currency": "INR",
"value": "100"
}
}
],
"ttl": "P1H"
},
"payment": {
"uri": "https://api.bpp.com/pay?amt=$amount&txn_id=ksh87yriuro34iyr3p4&mode=upi&vpa=bpp@upi",
"tl_method": "http/get",
"params": {
"transaction_id": "ksh87yriuro34iyr3p4",
"amount": "1200",
"mode": "upi",
"vpa": "bpp@upi"
},
"type": "ON-FULFILLMENT",
"status": "NOT-PAID"
}
}
}
}
*/
public OnUpdateRequest generateUpdatedOrderResponse(UpdatedOrderDetails updatedDetails) {
var updatedResult = UpdateResponseBuilder.builder.result(updateingDetails).build();
// Convert response into protocol object similar to example above
return updatedResult;
}
BPP calls protocol on_update
public Response invokeOnUpdate(OnUpdateRequest updateResponse, HttpHeaders headers) {
if(updateResponse.getError() == null) {
// Call BAP on_update api with the order response
// Call to look up function which returns the the public key and BAP Endpoint to be called
var url = lookUp(headers);
var response = apiClient.post(url[0] + Context.ActionEnum.on_update,
constructResponseHeaders(),
updateResponse,
OnUpdateRequest.class);
return Response.of("ACK", null);
} else {
return Response.of("NACK", null);
}
}