Skip to content

Commit

Permalink
Fix codesystem concept extract
Browse files Browse the repository at this point in the history
Co-authored-by: @ghrpp <[email protected]>
  • Loading branch information
KGOH and ApricotLace committed Sep 29, 2021
1 parent 242cfaa commit 9bafce8
Showing 1 changed file with 45 additions and 12 deletions.
57 changes: 45 additions & 12 deletions src/zen/fhir/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -332,24 +332,57 @@
:zen.fhir/resource (dissoc res :zen.fhir/file :zen.fhir/package :zen.fhir/package-ns :zen.fhir/header)})))


(defn extract-concepts [codesystem]
(let [zen-fhir-keys (select-keys codesystem [:zen.fhir/file :zen.fhir/package :zen.fhir/package-ns :zen.fhir/header])
concept-part (-> {:resourceType "Concept"
:system (:url codesystem)
:valueset (some-> (:valueSet codesystem) vector)}
utils/strip-nils)]
(map (fn [concept]
(let [res (-> (merge concept-part concept)
(assoc :id (str (:id codesystem) "/" (:code concept))))]
(assoc (merge res zen-fhir-keys) :zen.fhir/resource res)))
(:concept codesystem))))
(defn build-designation [ds]
(reduce (fn [acc d]
(assoc-in acc [(or (get-in d [:use :code]) "display")
(or (:language d) "en")]
(:value d)))
{} ds))

(defn get-value [m]
(let [k (->> (keys m)
(filter #(str/starts-with? (name %) "value"))
(first))]
(get m k)))

(defn build-property [code-system-id ps]
(reduce (fn [acc p]
(assoc-in acc [code-system-id (:code p)] (get-value p)))
{} ps))


(defn reduce-concept [acc cid sys parents c]
(let [con (-> c
(select-keys [:code :display :definition])
(assoc :id (str cid "/" (:code c))
:system sys
:resourceType "Concept")
(cond-> (:designation c) (assoc :designation (build-designation (:designation c)))
(not (empty? parents)) (assoc :hierarchy parents)
(:property c) (assoc :property (build-property cid (:property c)))))
acc (conj acc con)]
(if-let [cs (:concept c)]
(reduce (fn [acc c']
(reduce-concept acc cid sys (conj parents (:code con)) c'))
acc cs)
acc)))

(defn codesystem->concepts [{:as codesystem, cid :id, sys :url, cs :concept}]
(let [zen-fhir-keys (select-keys codesystem [:zen.fhir/file :zen.fhir/package :zen.fhir/package-ns :zen.fhir/header])]
(->> cs
(reduce (fn [acc c] (reduce-concept acc cid sys [] c))
[])
(map (fn [concept]
(-> concept
(merge zen-fhir-keys)
(assoc :zen.fhir/resource concept)))))))


(defmethod process-on-load :CodeSystem
[res]
(merge
(dissoc res :concept)
{:fhir/concepts (into {} (map (juxt :id identity)) (extract-concepts res))}
{:fhir/concepts (into {} (map (juxt :id identity)) (codesystem->concepts res))}
{:zen.fhir/resource (dissoc res :concept :zen.fhir/file :zen.fhir/package :zen.fhir/package-ns :zen.fhir/header)}))


Expand Down

0 comments on commit 9bafce8

Please sign in to comment.