Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Multiple PACS Destinations #4

Open
zgypa opened this issue Jan 22, 2025 · 1 comment
Open

Implement Multiple PACS Destinations #4

zgypa opened this issue Jan 22, 2025 · 1 comment

Comments

@zgypa
Copy link
Member

zgypa commented Jan 22, 2025

Implement a way to allow the generated DICOM IODs to go to multiple destinations.

  • Add all PACS details to config file.
  • Add another configuration to map the PACS destination to the requesting clients. This could be done via the authentication mechanism.

Probably would require implementing authentication first.

The config file could be a JSON, which can initially be maintained manually, and eventually (other ticket) have a GUI.

Multiple destination are required to send images both to the PACS and to the PMS, in case where the PMS is not able to query and retrieve the images automatically from the PACS.

@zgypa
Copy link
Member Author

zgypa commented Jan 22, 2025

Example schema. This is a good start, however might be a better idea in the user mapping to have the modality as a value, not as a key.

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "pacsCredentials": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "pacsID": {
            "type": "string",
            "description": "Unique identifier for the PACS"
          },
          "hostname": {
            "type": "string",
            "description": "Hostname or IP of the PACS"
          },
          "port": {
            "type": "integer",
            "description": "Port number for the PACS connection"
          },
          "connectionType": {
            "type": "string",
            "enum": ["WADO", "DIMSE"],
            "description": "Type of connection (WADO or DIMSE)"
          },
          "username": {
            "type": "string",
            "description": "Username for PACS authentication"
          },
          "password": {
            "type": "string",
            "description": "Password for PACS authentication"
          },
          "availableModalities": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Types of modalities available at the PACS"
            }
          }
        },
        "required": ["pacsID", "hostname", "port", "connectionType", "username", "password", "availableModalities"]
      }
    },
    "userPacsMap": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "modalities": {
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "PACS IDs to which the modality is mapped"
              }
            },
            "description": "Mapping of modalities to arrays of PACS IDs"
          }
        },
        "description": "Detailed mapping of user IDs to modalities and corresponding PACS IDs they can send studies to"
      }
    }
  },
  "required": ["pacsCredentials", "userPacsMap"]
}

Example:

{
  "pacsCredentials": [
    {
      "pacsID": "PACS001",
      "hostname": "pacs.example.com",
      "port": 104,
      "connectionType": "DIMSE",
      "username": "user1",
      "password": "password1",
      "availableModalities": ["CT", "MR"]
    },
    {
      "pacsID": "PACS002",
      "hostname": "pacs2.example.com",
      "port": 8080,
      "connectionType": "WADO",
      "username": "user2",
      "password": "password2",
      "availableModalities": ["DX", "US"]
    },
    {
      "pacsID": "PACS003",
      "hostname": "pacs3.example.com",
      "port": 11112,
      "connectionType": "DIMSE",
      "username": "user3",
      "password": "password3",
      "availableModalities": ["NM", "PT"]
    }
  ],
  "userPacsMap": {
    "doctor1": {
      "modalities": {
        "CT": ["PACS001"],
        "MR": ["PACS001", "PACS003"],
        "PT": ["PACS003"]
      }
    },
    "nurse1": {
      "modalities": {
        "DX": ["PACS002"]
      }
    },
    "admin": {
      "modalities": {
        "CT": ["PACS001", "PACS003"],
        "MR": ["PACS001"],
        "DX": ["PACS002"],
        "US": ["PACS002"],
        "NM": ["PACS003"],
        "PT": ["PACS001", "PACS003"]
      }
    }
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant