Port #4444 to master (#4465)

* Port #4444 to master

* Add operation

* Add developer credit
This commit is contained in:
James Agnew 2023-01-25 14:37:16 -05:00 committed by GitHub
parent d46f6d635e
commit 69f64269cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 24 additions and 18 deletions

View File

@ -275,7 +275,7 @@ public class IpsGeneratorSvcImpl implements IIpsGeneratorSvc {
for (IBaseResource next : theResourcesToInclude.getResources()) { for (IBaseResource next : theResourcesToInclude.getResources()) {
IBaseExtension<?, ?> narrativeLink = ((IBaseHasExtensions) next).addExtension(); IBaseExtension<?, ?> narrativeLink = ((IBaseHasExtensions) next).addExtension();
narrativeLink.setUrl("http://hl7.org/fhir/StructureDefinition/NarrativeLink"); narrativeLink.setUrl("http://hl7.org/fhir/StructureDefinition/narrativeLink");
String narrativeLinkValue = theCompositionBuilder.getComposition().getIdElement().getValue() String narrativeLinkValue = theCompositionBuilder.getComposition().getIdElement().getValue()
+ "#" + "#"
+ myFhirContext.getResourceType(next) + myFhirContext.getResourceType(next)
@ -462,7 +462,7 @@ public class IpsGeneratorSvcImpl implements IIpsGeneratorSvc {
List<Resource> linkedResources = new ArrayList<Resource>(); List<Resource> linkedResources = new ArrayList<Resource>();
HashMap<String, String> valueUrls = new HashMap<String, String>(); HashMap<String, String> valueUrls = new HashMap<String, String>();
String url = "http://hl7.org/fhir/StructureDefinition/NarrativeLink"; String url = "http://hl7.org/fhir/StructureDefinition/narrativeLink";
String valueUrlBase = composition.getId() + "#"; String valueUrlBase = composition.getId() + "#";
for (PatientSummary.IPSSection section : sectionPrimaries.keySet()) { for (PatientSummary.IPSSection section : sectionPrimaries.keySet()) {

View File

@ -19,7 +19,7 @@ Date: Consent.dateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getScope()},attr='display')">Scope</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getScope()},attr='display')">Scope</td>
<td th:text="*{getStatus().getCode()}">Status</td> <td th:text="*{getStatus().getCode()}">Status</td>

View File

@ -24,7 +24,7 @@ Onset: AllergyIntolerance.onsetDateTime
</thead> </thead>
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Allergen</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Allergen</td>
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getClinicalStatus()},attr='code')">Status</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getClinicalStatus()},attr='code')">Status</td>

View File

@ -31,7 +31,7 @@ Date: DiagnosticReport.effectiveDateTime
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:if='*{getResourceType().name() == "Observation"}'> <th:block th:if='*{getResourceType().name() == "Observation"}'>
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td>
<td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td> <td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td>
@ -60,7 +60,7 @@ Date: DiagnosticReport.effectiveDateTime
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:if='*{getResourceType().name() == "DiagnosticReport"}'> <th:block th:if='*{getResourceType().name() == "DiagnosticReport"}'>
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Device</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Device</td>
<td th:insert="IpsUtilityFragments :: renderEffective (effective=*{getEffective()})">Date</td> <td th:insert="IpsUtilityFragments :: renderEffective (effective=*{getEffective()})">Date</td>

View File

@ -21,7 +21,7 @@ Date: ClinicalImpression.effectiveDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Assessment</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Assessment</td>
<td th:text="*{getStatus().getCode()}">Status</td> <td th:text="*{getStatus().getCode()}">Status</td>

View File

@ -17,7 +17,7 @@ Date: Procedure.performedDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Procedure</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Procedure</td>
<td th:insert="IpsUtilityFragments :: concat (list=*{getNote()},attr='text')">Comments</td> <td th:insert="IpsUtilityFragments :: concat (list=*{getNote()},attr='text')">Comments</td>

View File

@ -25,7 +25,7 @@ Date: Immunization.occurrenceDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:if='*{getResourceType().name() == "Immunization"}'> <th:block th:if='*{getResourceType().name() == "Immunization"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getVaccineCode()},attr='display')">Immunization</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getVaccineCode()},attr='display')">Immunization</td>
<td th:text="*{getStatusElement().value}">Status</td> <td th:text="*{getStatusElement().value}">Status</td>

View File

@ -19,7 +19,7 @@ Date Recorded: DeviceUseStatement.recordedOn
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:if='*{getResourceType().name() == "DeviceUseStatement"}'> <th:block th:if='*{getResourceType().name() == "DeviceUseStatement"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: renderDevice (deviceRef=*{getDevice()})">Device</td> <td th:insert="IpsUtilityFragments :: renderDevice (deviceRef=*{getDevice()})">Device</td>
<td th:text="*{getStatusElement().value}">Status</td> <td th:text="*{getStatusElement().value}">Status</td>

View File

@ -32,7 +32,7 @@ Date: MedicationStatement.effectiveDateTime
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:if='*{getResourceType().name() == "MedicationRequest"}'> <th:block th:if='*{getResourceType().name() == "MedicationRequest"}'>
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: renderMedication (medicationType=*{getMedication()})">Medication</td> <td th:insert="IpsUtilityFragments :: renderMedication (medicationType=*{getMedication()})">Medication</td>
<td th:text="*{getStatus().getDisplay()}">Status</td> <td th:text="*{getStatus().getDisplay()}">Status</td>
@ -62,7 +62,7 @@ Date: MedicationStatement.effectiveDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:if='*{getResourceType().name() == "MedicationStatement"}'> <th:block th:if='*{getResourceType().name() == "MedicationStatement"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: renderMedication (medicationType=*{getMedication()})">Medication</td> <td th:insert="IpsUtilityFragments :: renderMedication (medicationType=*{getMedication()})">Medication</td>
<td th:text="*{getStatus().getDisplay()}">Status</td> <td th:text="*{getStatus().getDisplay()}">Status</td>

View File

@ -19,7 +19,7 @@ Onset Date: Condition.onsetDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Medical Problem</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Medical Problem</td>
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getClinicalStatus()},attr='code')">Status</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getClinicalStatus()},attr='code')">Status</td>

View File

@ -21,7 +21,7 @@ Planned End: CarePlan.period.end
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:text="*{getDescription()}">Activity</td> <td th:text="*{getDescription()}">Activity</td>
<td th:text="*{getIntent().toCode()}">Intent</td> <td th:text="*{getIntent().toCode()}">Intent</td>

View File

@ -19,7 +19,7 @@ Date: Observation.effectiveDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td>
<td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td> <td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td>

View File

@ -19,7 +19,7 @@ Onset Date: Condition.onsetDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Medical Problems</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Medical Problems</td>
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getClinicalStatus()},attr='code')">Status</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getClinicalStatus()},attr='code')">Status</td>

View File

@ -21,7 +21,7 @@ Date: Observation.effectiveDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td>
<td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td> <td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td>

View File

@ -23,7 +23,7 @@ Date: Observation.effectiveDateTime
<tbody> <tbody>
<th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}"> <th:block th:each="entry : ${resource.entry}" th:object="${entry.getResource()}">
<th:block th:unless='*{getResourceType().name() == "Composition"}'> <th:block th:unless='*{getResourceType().name() == "Composition"}'>
<th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/NarrativeLink').getValue().getValue()}"> <th:block th:with="extension=${entry.getResource().getExtensionByUrl('http://hl7.org/fhir/StructureDefinition/narrativeLink').getValue().getValue()}">
<tr th:id="${#strings.arraySplit(extension, '#')[1]}"> <tr th:id="${#strings.arraySplit(extension, '#')[1]}">
<td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td> <td th:insert="IpsUtilityFragments :: codeableConcept (cc=*{getCode()},attr='display')">Code</td>
<td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td> <td th:insert="IpsUtilityFragments :: renderValue (value=*{getValue()})">Result</td>

View File

@ -49,6 +49,7 @@ public class FhirTesterConfig {
.withSearchResultRowOperation(EXTOP_VALIDATE, id -> true) .withSearchResultRowOperation(EXTOP_VALIDATE, id -> true)
.withSearchResultRowOperation("$diff", id -> id.isVersionIdPartValidLong() && id.getVersionIdPartAsLong() > 1) .withSearchResultRowOperation("$diff", id -> id.isVersionIdPartValidLong() && id.getVersionIdPartAsLong() > 1)
.withSearchResultRowOperation("$everything", id -> "Patient".equals(id.getResourceType())) .withSearchResultRowOperation("$everything", id -> "Patient".equals(id.getResourceType()))
.withSearchResultRowOperation("$summary", id -> "Patient".equals(id.getResourceType()))
.addServer() .addServer()
.withId("home_r4b") .withId("home_r4b")

View File

@ -847,6 +847,11 @@
<developer> <developer>
<id>ivagulin</id> <id>ivagulin</id>
</developer> </developer>
<developer>
<id>jddamore</id>
<name>John D'Amore</name>
<organization>More Informatics</organization>
</developer>
</developers> </developers>
<licenses> <licenses>