add helpers for getting extension values from a resource
This commit is contained in:
parent
29aef2e2f6
commit
95e68d49df
|
@ -597,6 +597,77 @@
|
||||||
"/"
|
"/"
|
||||||
:body bundle))
|
:body bundle))
|
||||||
|
|
||||||
|
(defmulti get-extension-value
|
||||||
|
"returns the value of a FHIR resource extension. the 'extension' argument should be
|
||||||
|
a single extension element that includes a url key identifying the extension.
|
||||||
|
returns nil if the extension value could not be found or the extension type
|
||||||
|
is not recognized.
|
||||||
|
|
||||||
|
reference:
|
||||||
|
extensions: http://hl7.org/implement/standards/fhir/extensibility.html
|
||||||
|
extension elements: http://hl7.org/implement/standards/fhir/extensibility.html#extension"
|
||||||
|
(fn [extension]
|
||||||
|
(->> (keys extension)
|
||||||
|
(remove #(= :url %))
|
||||||
|
(first))))
|
||||||
|
|
||||||
|
; TODO: this is currently *NOT* a complete list of all possible extension types!
|
||||||
|
; need to fill this out more ....
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueInteger [extension]
|
||||||
|
(:valueInteger extension))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueDecimal [extension]
|
||||||
|
(:valueDecimal extension))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueDateTime [extension]
|
||||||
|
(parse-timestamp (:valueDateTime extension)))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueDate [extension]
|
||||||
|
(parse-date (:valueDate extension)))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueInstant [extension]
|
||||||
|
(parse-timestamp (:valueInstant extension)))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueString [extension]
|
||||||
|
(:valueString extension))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueUri [extension]
|
||||||
|
(:valueUri extension))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueBoolean [extension]
|
||||||
|
(boolean (:valueBoolean extension)))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueCode [extension]
|
||||||
|
(:valueCode extension))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueCoding [extension]
|
||||||
|
(get-in extension [:valueCoding :code]))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :valueResource [extension]
|
||||||
|
(get-in extension [:valueResource :reference]))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :extension [extension]
|
||||||
|
(get-extension-value (:extension extension)))
|
||||||
|
|
||||||
|
(defmethod get-extension-value :default [_]
|
||||||
|
; TODO: maybe better to throw an exception? if it's not recognized that probably is
|
||||||
|
; a bad thing and indicates a problem with the data format ... ?
|
||||||
|
nil)
|
||||||
|
|
||||||
|
(defn get-extension
|
||||||
|
"given a set of one or more extension elements, returns the value for the extension
|
||||||
|
matching the extension URL given, or nil if not found.
|
||||||
|
|
||||||
|
reference:
|
||||||
|
extensions: http://hl7.org/implement/standards/fhir/extensibility.html
|
||||||
|
extension elements: http://hl7.org/implement/standards/fhir/extensibility.html#extension"
|
||||||
|
[extension-values extension-url]
|
||||||
|
(->> extension-values
|
||||||
|
(filter #(= extension-url (:url %)))
|
||||||
|
(first)
|
||||||
|
(get-extension-value)))
|
||||||
|
|
||||||
;(def server-url "http://fhir.healthintersections.com.au/open")
|
;(def server-url "http://fhir.healthintersections.com.au/open")
|
||||||
;(def server-url "http://spark.furore.com/fhir")
|
;(def server-url "http://spark.furore.com/fhir")
|
||||||
;(def server-url "http://fhirtest.uhn.ca/base")
|
;(def server-url "http://fhirtest.uhn.ca/base")
|
||||||
|
|
Reference in a new issue