Skip to content

Commit b7c7c6f

Browse files
committed
Implement FHIR Types in Java
1 parent d91867b commit b7c7c6f

File tree

170 files changed

+11106
-4075
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

170 files changed

+11106
-4075
lines changed

.github/scripts/check-bloom-filter.sh

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,9 @@ BASE="http://localhost:8080/fhir"
77
HASH="$1"
88
PATIENT_COUNT="$2"
99

10-
test "patient count" "$(curl -s "$BASE/__admin/cql/bloom-filters" | jq -r ".[] | select(.hash == \"$HASH\") | .patientCount")" "$PATIENT_COUNT"
10+
BLOOM_FILTERS="$(curl -s "$BASE/__admin/cql/bloom-filters")"
11+
12+
echo "All Bloom filters:"
13+
echo "$BLOOM_FILTERS" | jq -r '.[]'
14+
15+
test "patient count" "$(echo "$BLOOM_FILTERS" | jq -r ".[] | select(.hash == \"$HASH\") | .patientCount")" "$PATIENT_COUNT"

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,7 @@ jobs:
652652
run: .github/scripts/evaluate-measure.sh q36-parameter 86
653653

654654
- name: Check Bloom Filter
655-
run: .github/scripts/check-bloom-filter.sh fbb79d85457069c8e1926c949690deecd60d751942d5b0cd0b61c08e6029224c 86
655+
run: .github/scripts/check-bloom-filter.sh 017a0f079c2a76a731db3cdf68637afc8e4fac34409b032b5ac93958923e0501 86
656656

657657
- name: Evaluate CQL Query 36 - Subject List
658658
run: .github/scripts/evaluate-measure-subject-list.sh q36-parameter 86
@@ -664,7 +664,7 @@ jobs:
664664
run: .github/scripts/evaluate-measure.sh q37-overlaps 24
665665

666666
- name: Check Bloom Filter
667-
run: .github/scripts/check-bloom-filter.sh 9fe779d821d7647831331b490939aa0cdf314d76c9b2a9518ffaf559353db043 24
667+
run: .github/scripts/check-bloom-filter.sh e7d79fd90bce0a8c5abad06027e3b6d57b448076ff41fa36827e5e3b65ca10c2 24
668668

669669
- name: Evaluate CQL Query 37 - Blazectl
670670
run: .github/scripts/evaluate-measure-blazectl.sh q37-overlaps 24

modules/admin-api/test/blaze/admin_api_test.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@
729729
{:system #fhir/uri "https://samply.github.io/blaze/fhir/CodeSystem/JobType"
730730
:code #fhir/code "re-index"
731731
:display #fhir/string "(Re)Index a Search Parameter"}]}
732-
:authoredOn #fhir/dateTime "2024-04-13T10:05:20.927Z"
732+
:authoredOn #fhir/dateTime #system/date-time "2024-04-13T10:05:20.927Z"
733733
:input
734734
[{:fhir/type :fhir.Task/input
735735
:type #fhir/CodeableConcept
@@ -750,7 +750,7 @@
750750
{:system #fhir/uri "https://samply.github.io/blaze/fhir/CodeSystem/JobType"
751751
:code #fhir/code "compact"
752752
:display #fhir/string "Compact a Database Column Family"}]}
753-
:authoredOn #fhir/dateTime "2024-04-13T10:05:20.927Z"
753+
:authoredOn #fhir/dateTime #system/date-time "2024-04-13T10:05:20.927Z"
754754
:input
755755
[{:fhir/type :fhir.Task/input
756756
:type #fhir/CodeableConcept

modules/cql/src/blaze/elm/compiler/external_data.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
(reify-expr core/Expression
6262
(-eval [_ {:keys [db]} resource _]
6363
(prom/inc! retrieve-total)
64-
(let [{{:keys [reference]} :subject} resource]
64+
(let [{{{reference :value} :reference} :subject} resource]
6565
(when reference
6666
(when-let [[type id] (fsr/split-literal-ref reference)]
6767
(when (and (= "Patient" type) (string? id))

modules/cql/src/blaze/elm/compiler/reusing_logic.clj

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
[blaze.elm.interval :as interval]
1414
[blaze.elm.protocols :as p]
1515
[blaze.elm.quantity :as quantity]
16+
[blaze.fhir.spec :as fhir-spec]
1617
[blaze.fhir.spec.type :as type])
1718
(:import
18-
[blaze.fhir.spec.type Period]
19-
[java.util Map]))
19+
[blaze.fhir.spec.type Period Quantity]))
2020

2121
(set! *warn-on-reflection* true)
2222

@@ -84,10 +84,10 @@
8484
(-to-quantity [x]))
8585

8686
(extend-protocol ToQuantity
87-
Map
88-
(-to-quantity [m]
89-
(when-let [value (:value m)]
90-
(quantity/quantity value (or (-> m :code type/value) "1"))))
87+
Quantity
88+
(-to-quantity [fhir-quantity]
89+
(when-let [decimal (-> fhir-quantity :value :value)]
90+
(quantity/quantity decimal (or (-> fhir-quantity :code :value) "1"))))
9191

9292
Object
9393
(-to-quantity [x]
@@ -129,6 +129,21 @@
129129
(-form [_]
130130
`(~'call "ToCode" ~(core/-form operand)))))
131131

132+
(defn- to-decimal-function-expr [operand]
133+
(reify-expr core/Expression
134+
(-attach-cache [_ cache]
135+
(core/attach-cache-helper to-decimal-function-expr cache operand))
136+
(-resolve-refs [_ expression-defs]
137+
(to-decimal-function-expr (core/-resolve-refs operand expression-defs)))
138+
(-resolve-params [_ parameters]
139+
(core/resolve-params-helper to-decimal-function-expr parameters operand))
140+
(-optimize [_ db]
141+
(core/optimize-helper to-decimal-function-expr db operand))
142+
(-eval [_ context resource scope]
143+
(:value (core/-eval operand context resource scope)))
144+
(-form [_]
145+
`(~'call "ToDecimal" ~(core/-form operand)))))
146+
132147
(defn- to-date-function-expr [operand]
133148
(reify-expr core/Expression
134149
(-attach-cache [_ cache]
@@ -170,7 +185,11 @@
170185
(-optimize [_ db]
171186
(core/optimize-helper to-string-function-expr db operand))
172187
(-eval [_ context resource scope]
173-
(some-> (type/value (core/-eval operand context resource scope)) str))
188+
(let [value (core/-eval operand context resource scope)]
189+
(cond
190+
(or (string? value) (nil? value)) value
191+
(fhir-spec/primitive-val? value) (type/value value)
192+
:else (str value))))
174193
(-form [_]
175194
`(~'call "ToString" ~(core/-form operand)))))
176195

@@ -250,7 +269,7 @@
250269
(to-code-function-expr (first operands))
251270

252271
"ToDecimal"
253-
(first operands)
272+
(to-decimal-function-expr (first operands))
254273

255274
"ToInterval"
256275
(to-interval-function-expr (first operands))

modules/cql/test/blaze/elm/compiler/queries_test.clj

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@
371371
[{:type "With"
372372
:expression #elm/retrieve{:type "Encounter"}
373373
:alias "E"
374-
:suchThat #elm/equal [#elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]
374+
:suchThat #elm/equal [#elm/function-ref ["ToString" #elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]]
375375
#elm/concatenate [#elm/string "Encounter/" #elm/scope-property ["E" "id"]]]}]}]
376376

377377
(let [expr (c/compile {:node node :eval-context "Patient"} elm)]
@@ -390,7 +390,7 @@
390390
(exists
391391
(fn [E]
392392
(equal
393-
(:reference (:encounter O))
393+
(call "ToString" (:reference (:encounter O)))
394394
(concatenate "Encounter/" (:id E))))
395395
(retrieve "Encounter"))))
396396
distinct)
@@ -414,7 +414,7 @@
414414
(exists
415415
(fn [E]
416416
(equal
417-
(:reference (:encounter O))
417+
(call "ToString" (:reference (:encounter O)))
418418
(concatenate "Encounter/" (:id E))))
419419
(retrieve "Encounter"))))
420420
(retrieve "Observation")))))))
@@ -426,7 +426,7 @@
426426
[{:type "With"
427427
:expression #elm/retrieve{:type "Encounter"}
428428
:alias "E"
429-
:suchThat #elm/equal [#elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]
429+
:suchThat #elm/equal [#elm/function-ref ["ToString" #elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]]
430430
#elm/concatenate [#elm/string "Encounter/" #elm/scope-property ["E" "id"]]]}]
431431
:return {:expression #elm/scope-property ["O" "id"]}}]
432432

@@ -445,7 +445,7 @@
445445
(exists
446446
(fn [E]
447447
(equal
448-
(:reference (:encounter O))
448+
(call "ToString" (:reference (:encounter O)))
449449
(concatenate "Encounter/" (:id E))))
450450
(retrieve "Encounter"))))
451451
(comp
@@ -472,7 +472,7 @@
472472
(exists
473473
(fn [E]
474474
(equal
475-
(:reference (:encounter O))
475+
(call "ToString" (:reference (:encounter O)))
476476
(concatenate "Encounter/" (:id E))))
477477
(retrieve "Encounter"))))
478478
(map
@@ -486,7 +486,7 @@
486486
[{:type "With"
487487
:expression #elm/retrieve{:type "Encounter"}
488488
:alias "E"
489-
:suchThat #elm/equal [#elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]
489+
:suchThat #elm/equal [#elm/function-ref ["ToString" #elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]]
490490
#elm/concatenate [#elm/string "Encounter/" #elm/scope-property ["E" "id"]]]}]
491491
:return {:distinct false :expression #elm/scope-property ["O" "id"]}}
492492
expr (c/compile {:node node :eval-context "Patient"} elm)]
@@ -505,7 +505,7 @@
505505
(exists
506506
(fn [E]
507507
(equal
508-
(:reference (:encounter O))
508+
(call "ToString" (:reference (:encounter O)))
509509
(concatenate "Encounter/" (:id E))))
510510
(retrieve "Encounter"))))
511511
(map
@@ -519,7 +519,7 @@
519519
[{:type "With"
520520
:expression #elm/retrieve{:type "Encounter"}
521521
:alias "E"
522-
:suchThat #elm/equal [#elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]
522+
:suchThat #elm/equal [#elm/function-ref ["ToString" #elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]]
523523
#elm/concatenate [#elm/string "Encounter/" #elm/scope-property ["E" "id"]]]}]
524524
:where #elm/equal [#elm/string "1" #elm/scope-property ["O" "id"]]}]
525525

@@ -538,7 +538,7 @@
538538
(exists
539539
(fn [E]
540540
(equal
541-
(:reference (:encounter O))
541+
(call "ToString" (:reference (:encounter O)))
542542
(concatenate "Encounter/" (:id E))))
543543
(retrieve "Encounter"))))
544544
distinct)
@@ -562,7 +562,7 @@
562562
(exists
563563
(fn [E]
564564
(equal
565-
(:reference (:encounter O))
565+
(call "ToString" (:reference (:encounter O)))
566566
(concatenate "Encounter/" (:id E))))
567567
(retrieve "Encounter")))))
568568
(retrieve "Observation"))))))))
@@ -574,12 +574,12 @@
574574
[{:type "With"
575575
:expression #elm/retrieve{:type "Encounter"}
576576
:alias "E"
577-
:suchThat #elm/equal [#elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]
577+
:suchThat #elm/equal [#elm/function-ref ["ToString" #elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]]
578578
#elm/concatenate [#elm/string "Encounter/" #elm/scope-property ["E" "id"]]]}
579579
{:type "With"
580580
:expression #elm/retrieve{:type "Specimen"}
581581
:alias "S"
582-
:suchThat #elm/equal [#elm/source-property [#elm/scope-property ["O" "specimen"] "reference"]
582+
:suchThat #elm/equal [#elm/function-ref ["ToString" #elm/source-property [#elm/scope-property ["O" "specimen"] "reference"]]
583583
#elm/concatenate [#elm/string "Specimen/" #elm/scope-property ["S" "id"]]]}]}]
584584

585585
(let [expr (c/compile {:node node :eval-context "Patient"} elm)]
@@ -598,15 +598,15 @@
598598
(exists
599599
(fn [E]
600600
(equal
601-
(:reference (:encounter O))
601+
(call "ToString" (:reference (:encounter O)))
602602
(concatenate "Encounter/" (:id E))))
603603
(retrieve "Encounter"))))
604604
(filter
605605
(fn [O]
606606
(exists
607607
(fn [S]
608608
(equal
609-
(:reference (:specimen O))
609+
(call "ToString" (:reference (:specimen O)))
610610
(concatenate "Specimen/" (:id S))))
611611
(retrieve "Specimen"))))
612612
distinct)
@@ -631,15 +631,15 @@
631631
(exists
632632
(fn [E]
633633
(equal
634-
(:reference (:encounter O))
634+
(call "ToString" (:reference (:encounter O)))
635635
(concatenate "Encounter/" (:id E))))
636636
(retrieve "Encounter"))))
637637
(filter
638638
(fn [O]
639639
(exists
640640
(fn [S]
641641
(equal
642-
(:reference (:specimen O))
642+
(call "ToString" (:reference (:specimen O)))
643643
(concatenate "Specimen/" (:id S))))
644644
(retrieve "Specimen")))))
645645
(retrieve "Observation")))))))))))
@@ -661,7 +661,7 @@
661661
[{:type "Without"
662662
:expression #elm/retrieve{:type "Encounter"}
663663
:alias "E"
664-
:suchThat #elm/equal [#elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]
664+
:suchThat #elm/equal [#elm/function-ref ["ToString" #elm/source-property [#elm/scope-property ["O" "encounter"] "reference"]]
665665
#elm/concatenate [#elm/string "Encounter/" #elm/scope-property ["E" "id"]]]}]}
666666
expr (c/compile {:node node :eval-context "Patient"} elm)
667667
db (d/db node)
@@ -682,7 +682,7 @@
682682
(not-exists
683683
(fn [E]
684684
(equal
685-
(:reference (:encounter O))
685+
(call "ToString" (:reference (:encounter O)))
686686
(concatenate "Encounter/" (:id E))))
687687
(retrieve "Encounter"))))
688688
distinct)
@@ -694,10 +694,10 @@
694694
[[[:put {:fhir/type :fhir/Patient :id "0"}]
695695
[:put {:fhir/type :fhir/Encounter :id "0"
696696
:subject #fhir/Reference{:reference #fhir/string "Patient/0"}
697-
:period #fhir/Period{:start #fhir/dateTime "2025-05-15"}}]
697+
:period #fhir/Period{:start #fhir/dateTime #system/date-time "2025-05-15"}}]
698698
[:put {:fhir/type :fhir/Encounter :id "1"
699699
:subject #fhir/Reference{:reference #fhir/string "Patient/0"}
700-
:period #fhir/Period{:start #fhir/dateTime "2025-05-16"}}]]]
700+
:period #fhir/Period{:start #fhir/dateTime #system/date-time "2025-05-16"}}]]]
701701

702702
(let [elm {:type "Query"
703703
:source

0 commit comments

Comments
 (0)