Skip to content

Commit 3851d32

Browse files
authored
Update documentation for HL7 support (#114)
* gh-102 HL7 docs * Update docfx.json to support net6.0 properly * Build solution before buildign docs * Use windows to build docs * Updat4e NuGetDefense to continue on error * Allow retries for HL7 test feature Signed-off-by: Victor Chang <[email protected]>
1 parent 2bda3cb commit 3851d32

File tree

13 files changed

+133
-52
lines changed

13 files changed

+133
-52
lines changed

.github/workflows/ci.yml

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ jobs:
110110
working-directory: ./src
111111

112112
- name: NuGetDefense Scanning
113+
continue-on-error: true
113114
run: |
114115
sed -i "s/OSSINDEXAPI_TOKEN/$OSSINDEXAPI_TOKEN/g" NuGetDefense.json
115116
sed -i "s/OSSINDEXAPI_USERNAME/$OSSINDEXAPI_USERNAME/g" NuGetDefense.json
@@ -382,7 +383,7 @@ jobs:
382383
run: echo "::set-output name=${{ matrix.os }}-TAG::${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}"
383384

384385
docs:
385-
runs-on: ubuntu-latest
386+
runs-on: windows-latest
386387
needs: [calc-version]
387388
env:
388389
SEMVER: ${{ needs.calc-version.outputs.semVer }}
@@ -403,27 +404,34 @@ jobs:
403404
restore-keys: |
404405
${{ runner.os }}-nuget
405406
407+
- name: Setup DocFX
408+
uses: crazy-max/ghaction-chocolatey@v1
409+
with:
410+
args: install docfx
411+
406412
- name: Restore dependencies
407413
run: dotnet restore
408414
working-directory: ./src
409415

416+
- name: Build Solution
417+
run: dotnet build -c ${{ env.BUILD_CONFIG }} --nologo ${{ env.SOLUTION }}
418+
working-directory: ./src
419+
410420
- name: Update docs version
411421
run: |
412422
sed -i -e "s,v0.0.0,v$SEMVER,g" ./docs/docfx.json
413423
sed -i -e "s,v0.0.0,v$SEMVER,g" ./docs/index.md
414424
415-
- uses: nikeee/[email protected]
416-
name: Build Docs
417-
with:
418-
args: docs/docfx.json
425+
- name: Build Docs
426+
working-directory: docs
427+
run: docfx docfx.json
428+
continue-on-error: false
419429

420430
- name: Package docs
421431
run: |
422-
mkdir ~/release
423-
pushd docs/_site
424-
zip -r ~/release/mig-docs-${{ env.SEMVER }}.zip *
425-
popd
426-
ls -lR ~/release
432+
mkdir ~\release
433+
Compress-Archive -Path docs\_site\* -DestinationPath ~\release\mig-docs-${{ env.SEMVER }}.zip
434+
Get-ChildItem ~\release -Recurse
427435
428436
- name: Upload docs
429437
uses: actions/[email protected]

docs/changelog.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@
2020
## 0.3.0
2121
[Github Milestone 0.3.0](https://github.com/Project-MONAI/monai-deploy-informatics-gateway/milestone/3)
2222

23+
- Adds HL7 (MLLP) service to enable triggering of workflow requests using HL7 messages.
2324
- Breaking changes with how Informatics Gateway handles incoming data and uploading to the storage service.
2425
All incoming data are now immediately queued for upload to the storage service instead of saving to the local disk.
2526
Therefore, if Informatics Gateway restarts or crashes during upload, any queued or incomplete uploads are lost.
2627
In addition, during the Informatics Gateway startup, the payload assembly service removes any payloads containing
2728
any pending files. Files that were successfully uploaded to the temporary location (`storage>temporary`) in the
28-
bucket (`storage>temporaryBucketName`) are then moved to the payload bucket (`storage>bucketName`) before sending a workflow request.
29+
bucket (`storage>temporaryBucketName`) are then moved to the payload bucket (`storage>bucketName`) before sending a workflow request.
2930

3031
## 0.2.0
3132

docs/compliance/hl7.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<!--
2+
~ Copyright 2022 MONAI Consortium
3+
~
4+
~ Licensed under the Apache License, Version 2.0 (the "License");
5+
~ you may not use this file except in compliance with the License.
6+
~ You may obtain a copy of the License at
7+
~
8+
~ http://www.apache.org/licenses/LICENSE-2.0
9+
~
10+
~ Unless required by applicable law or agreed to in writing, software
11+
~ distributed under the License is distributed on an "AS IS" BASIS,
12+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
~ See the License for the specific language governing permissions and
14+
~ limitations under the License.
15+
-->
16+
17+
# HL7 (Health Level 7)
18+
19+
The following reference describes the connectivity capabilities of MONAI Deploy SDK out of the box.
20+
Users implementing the MONAI Deploy SDK must update their HL7 Conformance Statement according
21+
to the actual capabilities of their application.
22+
23+
## HL7 MLLP Listener
24+
25+
The HL7 listener adheres to the Minimal Lower Layer Protocol (MLLP) which accepts Health Level 7
26+
messages via TCP/IP connections at port 2575 (default). The Informatics Gateway provides basic syntax validation
27+
based on [HL7-dotnetcore](https://github.com/Efferent-Health/HL7-dotnetcore) toolkit. All validated messages are stored
28+
regardless of the message types.
29+
30+
### Communication
31+
32+
The Informatics Gateway allows concurrent connections for the HL7 listener and allows multiple messages to be transmitted
33+
in a single connection or in a single command. Messages received are immediately assembled into a payload for the
34+
[MONAI Deploy Workflow Manager](https://github.com/Project-MONAI/monai-deploy-workflow-manager) to consume.
35+
36+
### Configurations
37+
38+
The HL7 listener can be configured in the `appsettings.json` file. Refer to [Configuration](../setup/schema.md) for additional details.
39+
40+
### Acknowledgement Mode
41+
42+
The listener supports the acknowledgment mode dictated in the MSH.15 field. If no value is specified, the listener defaults to the configuration option `sendAck`.
43+
44+
### Supported Character Sets
45+
46+
The HL7 listener supports Unicode UTF8 or any 8-bit character sets.

docs/compliance/toc.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@
1515
-->
1616

1717
# [DICOM](dicom.md)
18+
# [HL7](hl7.md)
1819
# [Open Source Licenses](open-source-licenses.md)

docs/docfx.json

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,34 @@
11
{
2-
"metadata": [{
3-
"src": [{
4-
"files": [
5-
"Api/Monai.Deploy.InformaticsGateway.Api.csproj",
6-
"Client/Monai.Deploy.InformaticsGateway.Client.csproj",
7-
"Client.Common/Monai.Deploy.InformaticsGateway.Client.Common.csproj",
8-
"Common/Monai.Deploy.InformaticsGateway.Common.csproj",
9-
"Configuration/Monai.Deploy.InformaticsGateway.Configuration.csproj",
10-
"DicomWebClient/Monai.Deploy.InformaticsGateway.DicomWeb.Client.csproj"
2+
"metadata": [
3+
{
4+
"src": [
5+
{
6+
"files": [
7+
"Api/bin/Release/net6.0/Monai.Deploy.InformaticsGateway.Api.dll",
8+
"Client/bin/Release/net6.0/Monai.Deploy.InformaticsGateway.Client.dll",
9+
"Client.Common/bin/Release/net6.0/Monai.Deploy.InformaticsGateway.Client.Common.dll",
10+
"Common/bin/Release/net6.0/Monai.Deploy.InformaticsGateway.Common.dll",
11+
"Configuration/bin/Release/net6.0/Monai.Deploy.InformaticsGateway.Configuration.dll",
12+
"DicomWebClient/bin/Release/net6.0/Monai.Deploy.InformaticsGateway.DicomWeb.Client.dll"
13+
],
14+
"exclude": [
15+
"**/obj/**",
16+
"**Test/**",
17+
"_site/**"
18+
],
19+
"src": "../src"
20+
}
1121
],
12-
"exclude": [
13-
"**/bin/**",
14-
"**/obj/**",
15-
"Test/**",
16-
"_site/**"
17-
],
18-
"src": "../src"
19-
}],
20-
"dest": "obj/api/dotnet",
21-
"filter": "filterConfig.yml"
22-
}],
22+
"dest": "obj/api/dotnet",
23+
"filter": "filterConfig.yml",
24+
"properties": {
25+
"TargetFramework": "net6.0"
26+
}
27+
}
28+
],
2329
"build": {
24-
"content": [{
30+
"content": [
31+
{
2532
"files": [
2633
"**/*.yml"
2734
],
@@ -36,15 +43,17 @@
3643
]
3744
}
3845
],
39-
"resource": [{
40-
"files": [
41-
"images/**"
42-
],
43-
"exclude": [
44-
"obj/**",
45-
"_site/**"
46-
]
47-
}],
46+
"resource": [
47+
{
48+
"files": [
49+
"images/**"
50+
],
51+
"exclude": [
52+
"obj/**",
53+
"_site/**"
54+
]
55+
}
56+
],
4857
"globalMetadata": {
4958
"_appTitle": "MONAI Deploy Informatics Gateway v0.0.0",
5059
"_enableSearch": true,

docs/index.md

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,21 @@ After inference completes, MIG receives notifications for exporting the results
2929

3030
## Services
3131

32-
MIG contains the following standard protocols to communicate with medical devices:
32+
MIG contains the following standard protocols for communicating with medical devices:
3333

3434
* **DICOM SCP**: C-ECHO, C-STORE
3535
* **DICOM SCU**: C-STORE
36+
* **HL7 Server**: A HL7 MLLP listener.
3637
* **ACR DSI API**: [The American College of Radiology’s Data Science Institute API](https://www.acrdsi.org/-/media/DSI/Files/ACR-DSI-Model-API.pdf)
3738
* **DICOMweb client**: QIDO-RS, WADO-RS, STOW-RS
3839
* **FHIR client**: GET
3940

4041
[!Note]
41-
The DICOMweb client and FHIR client are called using the ACR DSI API.
42+
The ACR DSI API uses the DICOMweb client and FHIR client.
4243

4344
### DICOM SCP
4445

45-
The *DICOM SCP Service* accepts standard DICOM C-ECHO and C-STORE commands, which receive DICOM instances for processing. The received instances are stored immediately to the configured temporary storage location (`InformaticsGateway>storage>temporary`) and then uploaded to the shared storage for the [MONAI Deploy Workflow Manager](https://github.com/Project-MONAI/monai-deploy-workflow-manager) to consume. All DICOM instances are stored on disk as-is using the original transfer syntax described in
46-
the [DICOM Interface](./compliance/dicom.md#dicom-scp) section. The MONAI Deploy application developer must handle any encoding/decoding of the DICOM files within the applications. Please refer to the [MONAI Deploy App SDK](https://github.com/Project-MONAI/monai-deploy-app-sdk) for further information.
46+
The *DICOM SCP Service* accepts standard DICOM C-ECHO and C-STORE commands, which receive DICOM instances for processing. In addition, the Informatics Gateway groups received DICOM instances by the study or series based on the configuration. Once DICOM instances are grouped, they are assembled into a payload for the [MONAI Deploy Workflow Manager](https://github.com/Project-MONAI/monai-deploy-workflow-manager) to consume.
4747

4848
### DICOM SCU
4949

@@ -55,18 +55,22 @@ The *DICOM SCU Service* enables users to export application-generated DICOM resu
5555
5656
### DICOMWeb STOW-RS
5757

58-
The *DICOMWeb STOW-RS Service* allows users to trigger a new workflow request by uploading a DICOM dataset.
58+
The *DICOMWeb STOW-RS Service* allows users to trigger a new workflow request by uploading a DICOM dataset. The entire DICOM dataset is assembled into a payload for the [MONAI Deploy Workflow Manager](https://github.com/Project-MONAI/monai-deploy-workflow-manager) to consume.
5959
It provides options to trigger a workflow with or without specifying a workflow ID/name. See the
6060
[DICOMWeb STOW-RS](./api/rest/dicomweb-stow.md) section for more information.
6161

62+
### HL7 MLLP Server
63+
64+
The *HL7 MLLP Server* accepts Health Level 7 messages via the MLLP (Minimal Lower Layer Protocol). The received messages are validated and assembled into a payload for the [MONAI Deploy Workflow Manager](https://github.com/Project-MONAI/monai-deploy-workflow-manager) to consume.
65+
6266
### ACR DSI API
6367

6468
The ACR DSI API allows users to trigger inference requests via RESTful calls, utilizing DICOMweb and FHIR to
6569
retrieve data specified in the request. Upon data retrieval, the Informatics Gateway uploads the data to the
6670
shared storage and generates an `md.workflow.request` event, which notifies the
6771
[MONAI Deploy Workflow Manager](https://github.com/Project-MONAI/monai-deploy-workflow-manager) for processing.
6872

69-
#### DICOMweb Export
73+
### DICOMweb Export
7074

7175
A DICOMweb export agent can export any user-generated DICOM content to configured DICOM destinations. The agent
7276
subscribes to the `md.export.request.monaidicomweb` events generated by the [MONAI Deploy Workflow Manager](https://github.com/Project-MONAI/monai-deploy-workflow-manager)

docs/setup/schema.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ The `InformaticsGateway` configuration section contains the following sub-sectio
4646
| dicomWeb | DICOMweb service configuration options | [DicomWebConfiguration](xref:Monai.Deploy.InformaticsGateway.Configuration.DicomWebConfiguration) |
4747
| export | Export service configuration options | [DataExportConfiguration](xref:Monai.Deploy.InformaticsGateway.Configuration.DataExportConfiguration) |
4848
| fhir | FHIR service configuration options | [FhirConfiguration](xref:Monai.Deploy.InformaticsGateway.Configuration.FhirConfiguration) |
49+
| hl7 | HL7 listener configuration options | [Hl7Configuration](xref:Monai.Deploy.InformaticsGateway.Configuration.Hl7Configuration) |
4950
| storage | Storage configuration options, including storage service and disk usage monitoring | [StorageConfiguration](xref:Monai.Deploy.InformaticsGateway.Configuration.StorageConfiguration) |
5051
| messaging | Message broker configuration options | [MessageBrokerConfiguration](xref:Monai.Deploy.InformaticsGateway.Configuration.MessageBrokerConfiguration) |
5152
| Cli | The configuration used by the CLI | - |
@@ -73,15 +74,15 @@ The `InformaticsGateway` configuration section contains the following sub-sectio
7374
}
7475
},
7576
"messaging": {
76-
"publisherServiceAssemblyName":"Monai.Deploy.Messaging.RabbitMQ.RabbitMQMessagePublisherService, Monai.Deploy.Messaging.RabbitMQ",
77+
"publisherServiceAssemblyName": "Monai.Deploy.Messaging.RabbitMQ.RabbitMQMessagePublisherService, Monai.Deploy.Messaging.RabbitMQ",
7778
"publisherSettings": {
7879
"endpoint": "localhost",
7980
"username": "username",
8081
"password": "password",
8182
"virtualHost": "monaideploy",
8283
"exchange": "monaideploy"
8384
},
84-
"subscriberServiceAssemblyName":"Monai.Deploy.Messaging.RabbitMQ.RabbitMQMessageSubscriberService, Monai.Deploy.Messaging.RabbitMQ",
85+
"subscriberServiceAssemblyName": "Monai.Deploy.Messaging.RabbitMQ.RabbitMQMessageSubscriberService, Monai.Deploy.Messaging.RabbitMQ",
8586
"subscriberSettings": {
8687
"endpoint": "localhost",
8788
"username": "username",
@@ -95,16 +96,27 @@ The `InformaticsGateway` configuration section contains the following sub-sectio
9596
}
9697
},
9798
"storage": {
98-
"temporary": "/payloads",
99+
"bufferRootPath": "./temp",
100+
"tempStorageRootPath": "/incoming",
99101
"bucketName": "monaideploy",
102+
"storageRootPath": "/payloads",
103+
"temporaryBucketName": "monaideploy",
100104
"serviceAssemblyName": "Monai.Deploy.Storage.MinIO.MinIoStorageService, Monai.Deploy.Storage.MinIO",
101105
"settings": {
102106
"endpoint": "localhost:9000",
103107
"accessKey": "admin",
104108
"accessToken": "password",
105109
"securedConnection": false,
106-
"region": "local"
110+
"region": "local",
111+
"executableLocation": "/bin/mc",
112+
"serviceName": "MinIO"
107113
}
114+
},
115+
"hl7": {
116+
"port": 2575,
117+
"maximumNumberOfConnections": 10,
118+
"clientTimeout": 60000,
119+
"sendAck": true
108120
}
109121
},
110122
"Logging": {

tests/Integration.Test/Features/HealthLevel7.feature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Feature: Health Level 7
3232
| 2.6 |
3333
| 2.8 |
3434

35-
@messaging_workflow_request @messaging
35+
@messaging_workflow_request @messaging @retry(10)
3636
Scenario Outline: Ability to receive and store multiple messages in a single batch
3737
Given HL7 messages in version <version>
3838
When the message are sent to Informatics Gateway in one batch

0 commit comments

Comments
 (0)