Technical Overview, FHIR RESTful API
The Canadian FHIR Pharmacy Claims standard is an update to the existing CPHA standard that has been in place for over 25 years in Canada.
The new PCS FHIR standard is built upon the HL7 FHIR R4.0.1. FHIR is an international standard for exchanging health care record and is being widely adopted across Canada for emerging healthcare standards. For interest, A Canadian registry of FHIR projects may be found HERE
FHIR provides a collection of well-defined interfaces for interoperating between two applications. Transactions are performed directly on the server using an HTTP request/response. The FHIR RESTful APIs are described in full within the base FHIR specification, found HERE.
For processing Pharmacy claims, a "messaging" interface will be used. The Operations are invoked by performing an HTTP POST to the operation's end-point. Each implementer will publish their end-point [base] to their implementation partners. The response will be a standard HTTP response indicating whether this was successful. If successful, an HTTP 200 and message bundle will be returned containing the payload details. An HTTP status code of 4xx or 5xx indicates an error, and an OperationOutcome will include details. This follows the FHIR Messaging Framework
Invoking Operations via Messages
The following Operations will be used for this implementation:
| Functionality | Operation | Definition | Response |
|---|---|---|---|
| Submit Claims | [base]Claim/$submit |
Bundle with Message Header, focus=Claim or ProffClaim or Reversal Request Parameters | Bundle, Message Header response, event type=51 or 52, focus= ClaimResponse Profile |
| Submit Claim Reversal | [base]Claim/$reversal |
Bundle with Message Header, focus=ReversalParameterIN Profile | Bundle, Message Header response, event type=61, focus= ReversalParametersOUT Profile |
| Request for Daily Totals | [base]/$daily-totals | Bundle with Message Header, event.type = 30 and focus= profile-parameters-daily-totals-details-IN. | Bundle, Message Header response, event type=80, Profile URL, focus= profile-parameters-daily-totals-OUT Totals by Date |
| Request for Adjudication Details | [base]/$daily-details | Bundle with Message Header, event.type = 31, focus= profile-parameters-daily-totals-details-IN | Bundle, Message Header response, event type=81, Profile URL, focus= Parameters:Out |
To invoke an operation using a message:
The requester sends a message (a bundle with type = message, and a message header resource)
- The message header has an event.system of urn:ietf:rfc:3986.
- The event.code is the URL from the operation definition OperationDefinition.url.
- The MessageHeader.focus refers to a Parameters resource
- The parameters resource is populated appropriately as specified by the nominated operation definition.
- The recipient executes the operation as specified, and then:
The receiver sends a message (a bundle with type = message, and a message header resource)
- The message header has the same event as the original message
- The MessageHeader contains a response that refers to the original request message, and a code for the outcome, with details if the operation failed
- The MessageHeader.focus refers to a Parameters resource
- The parameters resource is populated appropriately as specified for the response by the nominated operation definition
- If the operation definition specifies a single return, then this is returned as the target of the MesssageHeader.focus directly