Rest API Operations
The rest operations available to use with the CDA Module are fully documented in the CDA Exchange Endpoint section of the docs.
This document will serve as a higher level overview of the available operations.
After you construct a JavaScript template script to suit your CDA document needs, you will want to add it to the available templates in your CDA module instance.
POST/PUT/DELETE/GET
http://localhost:9000/cda/{module_id}/template/{template_id}
module_id
: This is the id of the cda module in your instance of Smile.
template_id
: This is the id of the cda template you intend to create, update, delete, or view
POST
/PUT
:
You have a script you are happy with and you are ready to upload it to your cda module.
In addition to the script
parameter, there are two optional parameters that we recommended you include.
params
: An array of strings indicating which parameters the script expects for its input map. What you include here has no bearing on the actual script but serves to help the eventual consumer of your script to know what to include with their request. Example: ["patient", "author"]
description
: A human readable description explaining the purpose of the script, how it works, and the purpose / format it expects for the params.Example request:
POST http://localhost:9000/cda/{module_id}/template/example
body:
{
"script" : "function generateCdaExchangeComposition(inputMap) {\n var composition = ResourceBuilder.build('Composition');\n composition.title = inputMap['title'];\n return composition;\n}",
"params" : ["title"],
"description" : "A very basic cda template script example"
}
Once posted, you can update any of these three fields with a PUT
request to the same URL, delete it with DELETE
, or view it with GET
In addition to being able to view a single template, you can view all templates in your CDA module with GET http://localhost:9000/cda/{module_id}/template
If your CDA script has natural new line characters, tabs, or double-quotes, then you can't just paste it into your JSON request body. You could use a tool or manually convert your script to escape special characters and then paste those into your request.
Alternatively, the CDA module has a route designed to work around this issue: PUT http://localhost:9000/cda/{module_id}/template/{template_id}/script
.
This route takes an input of type "application/javascript".
This route will add/replace the script in template_id
with the code you include as the body of your request.
In order to also populate the description and params fields, you would have to make a call to
PUT http://localhost:9000/cda/{module_id}/template/{template_id}
with description
and params
included in your json body. If using PUT
, you can make the calls in either order.
Once your template has been posted to your CDA module, you will likely want to use it! There is a single route for applying a template, and an additional route for creating CDA Documents from an existing Composition or Bundle.
POST http://localhost:9000/cda/{module_id}/template/{template_id}/apply
If your script requires no input params, then you can successfully call this route with an empty JSON object. In fact, the simple example above would still work, but the title would not get populated because its source would be undefined.
There are many available options when calling this route. For a full list of body parameters available, check out the Use / Apply CDA Template documentation.
POST http://localhost:9000/cda/{module_id}/{resource_type}/{resource_id}/apply
If you run the "Apply a template" route and persist the Composition and/or Bundle, then you can run this route next and achieve the same CDA result that you received from the initial request.
If you persisted the Composition and Bundle, then the response from the initial request would include something like the following:
{
"composition": "Composition/1852/_history/1",
"fhirDocument": "Bundle/1853/_history/1"
}
Running either of the following requests would then allow you to generate a CDA document:
POST http://localhost:9000/cda/{module_id}/Composition/1852/apply
POST http://localhost:9000/cda/{module_id}/Bundle/1853/apply
For full details on how to use this route, check out the Create CDA from Composition/Bundle documentation.
Smile CDR exposes a single custom operation for importing CDA documents.
POST http://localhost:8000/$import-cda
The payload of the operation is a FHIR Parameters resource.
{
"resourceType": "Parameters",
"parameter": [
{
"name": "document",
"valueString": "[The CDA document in XML format]"
}
]
}
If the document is successfully imported, the operation will return a 201 Created
response code.
Otherwise, a 4XX
or 5XX
error code will be returned depending on the type of problem encountered.
In either case, an OperationOutcome resource will be returned containing a list of issues describing any business rule violations encountered during transformation.
The received CCD is recorded on a FHIR DocumentReference resource, which is then persisted, and included in the audit trail. The location of this resource is included in the aforementioned OperationOutcome provided by the endpoint, regardless of whether the import operation was a success.