Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
52d55dc
First Bulk Update
kevino7 Feb 15, 2025
eb0673a
Update README.md
kevino7 Feb 25, 2025
28a678f
Updates to incorporate most of Vol 3 content
kevino7 Mar 10, 2025
d4b9ac0
Expanding Examples and Additional IG Cleanup
kevino7 Mar 17, 2025
c3782cf
Ooops.
kevino7 Mar 17, 2025
8ee5c7d
Attachment invariant is applied in DiagnosticReport.presentedForm.
kinsonho Mar 29, 2025
628a58a
ImagingSelection profile is used in Observation.
kinsonho Mar 29, 2025
971d5e3
Ignore the generated _updatePublisher.* files.
kinsonho Mar 29, 2025
6bd1777
Removed TODO
kinsonho Mar 29, 2025
8be5379
Latest updatePublisher changes.
kinsonho Mar 29, 2025
c109921
Added Volume 1 to 3 menu
kinsonho Mar 30, 2025
bbe8d87
Correct caseSensitive warning
kinsonho Mar 30, 2025
472c8e7
Ignore _build.* generated by _updatePublisher
kinsonho Mar 30, 2025
879e2d6
Resolve coding errors.
kinsonho Mar 30, 2025
08dea7b
Added experimental flag to valueset.
kinsonho Mar 30, 2025
fdb7cd2
Clean up known warnings.
kinsonho Mar 30, 2025
41bed72
Corrected slicing definition.
kinsonho Mar 30, 2025
f7e2aba
Add descriptions to GET examples; add TODO note
kevino7 May 11, 2025
ea2b777
Merge branch 'TIDocMigration' of https://github.com/IHE/RAD.IDR into …
kevino7 May 11, 2025
55ab7e7
RAD Transaction cleanup
kevino7 Sep 13, 2025
e685901
Error cleanup
kevino7 Sep 14, 2025
8ae675b
Fixing build
kevino7 Jan 24, 2026
adbfc2c
Making build happy
kevino7 May 8, 2026
b43ba7b
Kinson Consult
kevino7 Jun 8, 2026
e92d429
Pre-Phase II
kevino7 Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,8 @@
/_gencontinuous.sh
/_genonce.bat
/_genonce.sh
/_updatePublisher.bat
/_updatePublisher.sh
.DS_Store
/_build.bat
/_build.sh
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Status
This is the supplement template for IHE-Profiles using the IG publisher. repository is under-construction. Please try using it. If you have questions, contact John Moehrke.
This is the IHE Imaging Diagnostic Report (IDR) Profile in FHIR IG format.

Instructions [are found here](https://github.com/IHE/supplement-template/wiki/Getting-Started)
As of 2025 Feb, resolution of the 2024 Public Comments has been completed and the resulting Volume 1 content has been migrated into the TIDocMigration branch.
The intention is to complete migration including the FSH content in March.

For questions about the content, contact Kevin O'Donnell or Kinson Ho.

This repository is based on the [FHIR IG template for IHE Profiles](https://github.com/IHE/supplement-template/wiki/Getting-Started)
10 changes: 10 additions & 0 deletions Requirements-fromNarrative.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"resourceType" : "Requirements",
"id" : "fromNarrative",
"url" : "https://profiles.ihe.net/RAD/IDR/Requirements/fromNarrative",
"name" : "FromNarrative",
"title" : "Narrative Conformance Statements",
"status" : "active",
"experimental" : false,
"description" : "Conformance statements found throughout the narrative of the IG consolidated into this computable resource for traceability purposes"
}
16 changes: 15 additions & 1 deletion _updatePublisher.bat
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ SET input_cache_path=%CD%\input-cache\
SET skipPrompts=false

SET scriptdlroot=https://raw.githubusercontent.com/HL7/ig-publisher-scripts/main
SET build_bat_url=%scriptdlroot%/_build.bat
SET build_sh_url=%scriptdlroot%/_build.sh
SET update_bat_url=%scriptdlroot%/_updatePublisher.bat
SET gen_bat_url=%scriptdlroot%/_genonce.bat
SET gencont_bat_url=%scriptdlroot%/_gencontinuous.bat
Expand All @@ -20,7 +22,8 @@ IF "%~1"=="/f" SET skipPrompts=y

ECHO.
ECHO Checking internet connection...
PING tx.fhir.org -4 -n 1 -w 1000 | FINDSTR TTL && GOTO isonline
powershell -Command "try { $r=[System.Net.WebRequest]::Create('https://tx.fhir.org/r4/metadata'); $r.Timeout=4000; $r.GetResponse().Close(); exit 0 } catch { exit 1 }"
IF %ERRORLEVEL% EQU 0 GOTO isonline
ECHO We're offline, nothing to do...
GOTO end

Expand Down Expand Up @@ -69,6 +72,7 @@ IF DEFINED FORCE (
IF "%skipPrompts%"=="y" (
SET create=Y
) ELSE (
ECHO Will place publisher jar here: %input_cache_path%%publisher_jar%
SET /p create="Ok? (Y/N) "
)
IF /I "%create%"=="Y" (
Expand Down Expand Up @@ -211,6 +215,16 @@ goto end
start copy /y "_updatePublisher.new.bat" "_updatePublisher.bat" ^&^& del "_updatePublisher.new.bat" ^&^& exit


:dl_script_7
ECHO Updating _build.bat
call POWERSHELL -command if ('System.Net.WebClient' -as [type]) {(new-object System.Net.WebClient).DownloadFile(\"%build_bat_url%\",\"_build.new.bat\") } else { Invoke-WebRequest -Uri "%update_bat_url%" -Outfile "_build.new.bat" }
if %ERRORLEVEL% == 0 goto upd_script_6
echo "Errors encountered during download: %errorlevel%"
goto end
:upd_script_6
start copy /y "_build.new.bat" "_build.bat" ^&^& del "_build.new.bat" ^&^& exit


:end


Expand Down
14 changes: 13 additions & 1 deletion _updatePublisher.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ gencont_bat_url=$scriptdlroot/_gencontinuous.bat
gencont_sh_url=$scriptdlroot/_gencontinuous.sh
gen_sh_url=$scriptdlroot/_genonce.sh
update_sh_url=$scriptdlroot/_updatePublisher.sh
build_sh_url=$scriptdlroot/_build.sh
build_bat_url=$scriptdlroot/_build.bat

skipPrompts=false
FORCE=false
Expand Down Expand Up @@ -103,6 +105,16 @@ if [[ $skipPrompts != true ]]; then
if [[ $skipPrompts == true ]] || [[ $response =~ ^[yY].*$ ]]; then
echo "Downloading most recent scripts "

curl -L $build_bat_url -o /tmp/_build.new
cp /tmp/_build.new _build.bat
rm /tmp/_build.new


curl -L $build_sh_url -o /tmp/_build.new
cp /tmp/_build.new _build.sh
chmod +x _build.sh
rm /tmp/_build.new

curl -L $update_bat_url -o /tmp/_updatePublisher.new
cp /tmp/_updatePublisher.new _updatePublisher.bat
rm /tmp/_updatePublisher.new
Expand All @@ -129,4 +141,4 @@ if [[ $skipPrompts == true ]] || [[ $response =~ ^[yY].*$ ]]; then
cp /tmp/_updatePublisher.new _updatePublisher.sh
chmod +x _updatePublisher.sh
rm /tmp/_updatePublisher.new
fi
fi
8 changes: 5 additions & 3 deletions input/fsh/Aliases.fsh
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Alias: SCT = http://snomed.info/sct
Alias: UCUM = http://unitsofmeasure.org
Alias: LOINC = http://loinc.org
Alias: CPT = http://terminology.hl7.org/5.0.0/CodeSystem-CPT.html
Alias: ICD10 = http://hl7.org/fhir/sid/icd-10
Alias: CPT = http://www.ama-assn.org/go/cpt
Alias: ICD10 = http://hl7.org/fhir/sid/icd-10-cm

Alias: HL7V2 = http://terminology.hl7.org/CodeSystem/v2-0203
Alias: FHIRObservation = http://terminology.hl7.org/CodeSystem/observation-category
Expand All @@ -16,8 +16,10 @@ Alias: FHIREndpointStatus = http://hl7.org/fhir/endpoint-status
Alias: FHIRDiagnosticReportStatus = http://hl7.org/fhir/diagnostic-report-status
Alias: FHIRDiagnosticService = http://terminology.hl7.org/CodeSystem/v2-0074
Alias: FHIRNarrativeStatus = https://hl7.org/fhir/R5/codesystem-narrative-status.html
Alias: FHIRConditionVerificationstatus = http://terminology.hl7.org/5.1.0/CodeSystem-condition-ver-status.html
Alias: FHIRProvenanceSignatureType = http://uri.etsi.org/01903/v1.2.2
Alias: FHIRConditionClinical = http://terminology.hl7.org/CodeSystem/condition-clinical
Alias: FHIRConditionVerStatus = http://terminology.hl7.org/CodeSystem/condition-ver-status
Alias: FHIRConditionCategory = http://terminology.hl7.org/CodeSystem/condition-category

Alias: DICOM = http://dicom.nema.org/resources/ontology/DCM
Alias: DICOMUID = urn:dicom:uid
Expand Down
2 changes: 1 addition & 1 deletion input/fsh/Attachment.fsh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Invariant
Invariant: IDRAttachmentInvariant
Description: "Either data or url SHALL be present"
Description: "Either data or url SHALL be present for any attachment (e.g. in DiagnosticReport)."
Expression: "data.exists() or url.exists()"
Severity: #error
61 changes: 52 additions & 9 deletions input/fsh/Communication.fsh
Original file line number Diff line number Diff line change
@@ -1,29 +1,72 @@
Profile: IDRCommunication
Parent: Communication
Id: idr-communication
Title: "Communications for Imaging Diagnostic Reports"
Description: "Communications for Imaging Diagnostic Reports."
Title: "IDR Report Communication"
Description: "Communication of impressions, critical results and/or actionable findings in Imaging Diagnostic Reports."

* text MS
* text 1..1 MS
* text ^definition = """
A summary sentence describing the communication, as currently appears in report narratives.
"""

* basedOn ^comment = """
This is often absent unless there was a specific request for the communication that can be referenced. See communication.reason for communications triggered by specific impression findings.
"""

* partOf 1..1 MS
* partOf only Reference(ImagingDiagnosticReport)
* partOf ^comment = "The current diagnostic report, which provides the context of the communication"

* status ^comment = """
Should be COMPLETED in many cases. When documenting attempted communications, the status might have another value.

Communication resources where the .status is not COMPLETED may trigger subsequent follow-up workflows, but the management of such follow-up is not reflected in the diagnostic report.

In some reporting workflows, such communications may be included in an Addendum to the report (e.g. when the report is distributed prior to the communication being successfully completed).
"""

* medium MS
* medium ^comment = """
For imaging, the value will typically be PHONE, or in the case of leaving a voicemail message, DICTATE.
"""

* subject 1..1 MS
* subject only Reference(IDRPatient)
* subject only Reference(Patient)

* topic MS

* reason MS
* reason only CodeableReference(IDRImpressionCondition or IDRRecommendationServiceRequest)
* topic ^comment = """
May contain the code for "summary-report". Sites may wish to use a code for critical findings.
"""

* about MS
* about only Reference(IDRImpressionCondition or IDRRecommendationServiceRequest)
* about ^comment = """
May reference any or all of the specific impression Conditions or recommendation ServiceRequests discussed during the communication if such information is made available to the encoding system.
"""

* medium MS
* encounter ^comment = """
Should either reference the encounter for the imaging procedure, or be absent.
"""

* sent 1..1 MS

* received MS
* received ^comment = """
For phone communications, this value will typically be the same time as Communication.sent. In the case of leaving a message, this will likely be be absent since it won't be known and the resource is not expected to be updated.
"""

* sender MS
* sender ^comment = """
For imaging, the value should be the imaging clinician in most cases but may be their staff.
"""

* recipient MS
* recipient ^comment = """
For imaging, the value should be the patient or the referring clinician in most cases, but may be their staff.
"""

* sent 1..1 MS
* reason MS
* reason only CodeableReference(IDRImpressionCondition or IDRRecommendationServiceRequest)
* reason ^comment = """
May reference one or more of the specific impression Conditions or recommendation ServiceRequests that prompted the communication.
"""
108 changes: 73 additions & 35 deletions input/fsh/Condition.fsh
Original file line number Diff line number Diff line change
@@ -1,78 +1,116 @@
//TODOQ Can drop this first one? Or are we mandating the text for assembling History text
Profile: IDRPatientHistoryCondition
Parent: Condition
Id: idr-patient-history-condition
Title: "Past diagnosis of patient in Imaging Diagnostic Report"
Description: "A past diagnosis of a patient in an Imaging Diagnostic Report."
Title: "IDR Patient History Condition"
Description: "A past diagnosis of a patient in an imaging report."

* text MS


Profile: IDRImpressionCondition
Parent: Condition
Id: idr-impression-condition
Title: "Impression as Condition"
Description: "An impression as a condition in imaging report."
Title: "IDR Report Impression Condition"
Description: "A condition appearing in the impression of an imaging report."

* text MS

* category 1..1 MS
// JIRA FHIR-48358 and UP-635 are adding the "diagnostic-report-impression" code to R6. WIP 2025.08.01
// TODOQ If we want to fix it to "diagnostic-report-impression" is VS the right mechanism?
* category from IDRImpressionConditionCategoryVS (required)

* verificationStatus 1..1 MS
* verificationStatus ^comment = """
Typical values will be confirmed, differential, provisional, unconfirmed, and refuted.

\"confirmed\" would not be used unless the imaging report is the definitive source of such a diagnosis.

\"refuted\", per <https://www.hl7.org/fhir/R5/condition.html#9.2.4.5>, is used for subsequent disproof of a previously asserted condition so it would not be used unless the condition was previously asserted and the radiology report is negative and is definitive for such an assertion. Other negative assertions are handled as observations.
"""

* code 1..1 MS
* code ^comment = """
Codes may be drawn from SNOMED or similar coding system.
"""

* severity MS
* severity ^comment = """
Note 1. Severity does not map directly to patient risk. A mild stroke might present a greater risk than a severe ingrown toenail.
"""

* stage MS

* bodySite 1..1 MS

* participant 1..* MS
* stage ^comment = """
This typically depends on the condition having formal (often disease-specific) staging concepts. The imaging clinician might not always assess the stage.
"""

// JIRA FHIR-50859 for ImagingStudy positioningset up use of BodyStructure encoding not bodySite. Variability increases implementation and testing complexity
* bodySite 0..*
* bodySite ^comment = """
Should not be present. R6 specifies not to use bodySite when bodyStructure is present. This IG specifies usage of bodyStructure.
"""

* bodyStructure 0..1 MS
/* TOAddR6toR4
* extension contains AddR6toR4ConditionBodyStructure named bodyStructure 0..1 MS
*/
* bodyStructure ^comment = """
The BodyStructure.includedStructure.structure may contain codes drawn from SNOMED or similar coding system. BodyStructure.laterality shall record laterality if the bodyStructure is a paired structure.

Note: When a condition spans multiple structures, .includedStructure may include multiple items.
"""
// TODOQ TCQ should we include guidance on when to use fine grained/pre-coordinated structure codes vs the .qualifier element?

/* TOAddR6toR5 Note: In R4, not R5, back in R6. Need extension for implementers? */
* asserter 1..1 MS
* asserter ^comment = "In an imaging report, this is the imaging clinician."

* clinicalStatus ^comment = """
This element is required to be present by the Condition resource. In diagnostic reports, the clinicalStatus will frequently be \"unknown\", but the other defined values may be used when appropriate.
"""

* evidence MS

* extension contains IDRImpressionLaterality named laterality 0..1 MS
* evidence ^comment = """
May contain a reference to the DiagnosticReport and/or references to Observation resources in the Findings and/or Impression sections, or references to other information elsewhere that contributed to this impression item.
"""

* extension contains IDRImpressionLikelihood named likelihood 0..1 MS

* extension contains IDRImpressionOrder named order 1..1 MS

* extension contains IDRImpressionActionable named actionable 0..1 MS

* extension contains IDRImpressionIncidental named incidental 0..1 MS

Extension: IDRImpressionLaterality
Title: "IDR BodySite Laterality in Impression."
Id: idrImpressionLaterality
Description: "Laterality of impression"
Context: Condition
* value[x] only CodeableConcept

Extension: IDRImpressionLikelihood
Title: "IDR BodySite Likelihood in Impression."
Title: "IDR Impression Condition Likelihood."
Id: idrImpressionLikelihood
Description: "likelihood of impression"
Description: "likelihood of condition assertion"
Context: Condition
* value[x] only CodeableConcept

Extension: IDRImpressionOrder
Title: "Impression Order."
Id: IDRImpressionOrder
Description: "Order in impression"
Context: Condition
* value[x] only positiveInt
/* TODO
- Condition.likelihood shall record the likelihood of the
condition, if expressed by the imaging clinician. (See Open Issue
about adoption of a coding system)

Note: "Consistent with" in the narrative form of an impression typically
implies strong imaging support for an existing (tentative) diagnosis in
place beforehand. Most other impressions represent conditions put
forward by the imaging clinician. If the Condition resource for the
existing diagnosis is known, consider referencing that instance and
adding information to Condition.evidence.
*/

Extension: IDRImpressionActionable
Title: "Actionable indication in Impression."
Title: "IDR Actionable Condition"
Id: idrImpressionActionable
Description: "Actionable indication in impression."
Context: Condition
* value[x] only CodeableConcept

Extension: IDRImpressionIncidental
Title: "Incidental indication of Impression."
Id: idrImpressionIncidental
Description: "Incidental indication of impression."
/* TOAddR6toR4
Extension: AddR6toR4ConditionBodyStructure
Title: "(AddR6toR4) Condition.bodyStructure"
Id: idrConditionBodyStructure
Description: "Body Structure where the condition occurs."
Context: Condition
* value[x] only boolean
* value[x] only Reference(BodyStructure)
*/
Loading