PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
imaging_document_source.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
21#ifndef PACS_SERVICES_XDS_IMAGING_DOCUMENT_SOURCE_HPP
22#define PACS_SERVICES_XDS_IMAGING_DOCUMENT_SOURCE_HPP
23
25
26#include <cstdint>
27#include <memory>
28#include <optional>
29#include <string>
30#include <vector>
31
32namespace kcenon::pacs::security { class atna_service_auditor; }
33
35
36// =============================================================================
37// XDS Document Metadata
38// =============================================================================
39
48 std::string entry_uuid;
49
51 std::string unique_id;
52
54 std::string patient_id;
55
57 std::string source_patient_id;
58
60 std::string class_code;
61 std::string class_code_scheme;
62 std::string class_code_display;
63
65 std::string type_code;
66 std::string type_code_scheme;
67 std::string type_code_display;
68
70 std::string format_code;
71 std::string format_code_scheme;
72
74 std::string mime_type{"application/dicom"};
75
77 std::string creation_time;
78
80 std::string service_start_time;
81 std::string service_stop_time;
82
84 std::string facility_type_code;
86
90
92 std::string author_person;
93 std::string author_institution;
94
96 std::string title;
97
99 std::string language_code{"en-US"};
100
102 std::string availability_status{"Approved"};
103};
104
110 std::string unique_id;
111
113 std::string source_id;
114
116 std::string patient_id;
117
119 std::string content_type_code;
122
124 std::string submission_time;
125
127 std::string author_person;
129};
130
131// =============================================================================
132// KOS Document Reference
133// =============================================================================
134
140 std::string sop_class_uid;
141
143 std::string sop_instance_uid;
144
147
150};
151
157 bool success{false};
158
160 std::optional<core::dicom_dataset> kos_dataset;
161
163 std::string kos_instance_uid;
164
166 std::string error_message;
167
170};
171
172// =============================================================================
173// Publication Result
174// =============================================================================
175
181 bool success{false};
182
185
187 std::string error_message;
188
190 int http_status{0};
191};
192
193// =============================================================================
194// Imaging Document Source Configuration
195// =============================================================================
196
202 std::string registry_url;
203
205 std::string source_oid;
206
209
211 std::string facility_type_code{"Radiology"};
212 std::string facility_type_code_scheme{"2.16.840.1.113883.5.11"};
213
215 std::string practice_setting_code{"Radiology"};
216 std::string practice_setting_code_scheme{"2.16.840.1.113883.6.96"};
217
219 uint32_t timeout_ms{30000};
220
223};
224
225// =============================================================================
226// Imaging Document Source
227// =============================================================================
228
265public:
268
281 const std::string& study_instance_uid,
282 const std::vector<kos_instance_reference>& references,
283 const std::optional<core::dicom_dataset>& patient_demographics = std::nullopt) const;
284
296 const core::dicom_dataset& kos_dataset) const;
297
308 const std::string& patient_id) const;
309
326 const core::dicom_dataset& kos_dataset,
327 const xds_document_entry& entry,
328 bool is_imaging = true) const;
329
340 std::shared_ptr<kcenon::pacs::security::atna_service_auditor> auditor);
341
346 [[nodiscard]] const imaging_document_source_config& config() const noexcept;
347
353
354private:
356 std::shared_ptr<kcenon::pacs::security::atna_service_auditor> auditor_;
357
359 [[nodiscard]] std::string generate_uid() const;
360
363 core::dicom_dataset& kos_dataset,
364 const std::vector<kos_instance_reference>& references) const;
365};
366
367} // namespace kcenon::pacs::services::xds
368
369#endif // PACS_SERVICES_XDS_IMAGING_DOCUMENT_SOURCE_HPP
Represents a DICOM Dataset (ordered collection of Data Elements)
const imaging_document_source_config & config() const noexcept
Get current configuration.
publication_result publish_document(const core::dicom_dataset &kos_dataset, const xds_document_entry &entry, bool is_imaging=true) const
Publish a KOS document to the XDS registry/repository.
std::string generate_uid() const
Generate a new UID for KOS instances.
void build_evidence_sequence(core::dicom_dataset &kos_dataset, const std::vector< kos_instance_reference > &references) const
Build the Current Requested Procedure Evidence Sequence.
std::shared_ptr< kcenon::pacs::security::atna_service_auditor > auditor_
void set_config(const imaging_document_source_config &config)
Set configuration.
xds_submission_set build_submission_set(const std::string &patient_id) const
Build XDS submission set metadata.
kos_creation_result create_kos_document(const std::string &study_instance_uid, const std::vector< kos_instance_reference > &references, const std::optional< core::dicom_dataset > &patient_demographics=std::nullopt) const
Create a KOS document from a set of DICOM instance references.
xds_document_entry build_document_entry(const core::dicom_dataset &kos_dataset) const
Build XDS document entry metadata from a KOS dataset.
void set_audit_handler(std::shared_ptr< kcenon::pacs::security::atna_service_auditor > auditor)
Install an ATNA audit handler for XDS-I.b transactions.
DICOM Dataset - ordered collection of Data Elements.
Configuration for the Imaging Document Source actor.
std::string source_oid
Source system OID (used as sourceId in submissions)
std::string practice_setting_code
Default practice setting code.
std::string assigning_authority_oid
Assigning authority OID for patient IDs.
std::string registry_url
XDS Registry/Repository endpoint URL.
bool include_all_instances
Whether to include all instances or just key instances.
Result of a KOS document creation operation.
std::optional< core::dicom_dataset > kos_dataset
The created KOS dataset (if successful)
size_t reference_count
Number of referenced instances.
std::string kos_instance_uid
SOP Instance UID of the created KOS.
bool success
Whether the KOS was created successfully.
Reference to a DICOM instance within a KOS document.
std::string sop_instance_uid
Referenced SOP Instance UID.
std::string series_instance_uid
Referenced Series Instance UID.
Result of publishing a document to an XDS registry/repository.
std::string document_entry_uuid
Registry-assigned document entry UUID.
std::string error_message
Error message (if failed)
bool success
Whether the publication was successful.
Document entry metadata for XDS registry submission.
std::string creation_time
Creation time (DTM format: YYYYMMDDhhmmss)
std::string patient_id
Patient ID in CX format (ID^^^&OID&ISO)
std::string format_code_scheme
std::string type_code_display
std::string service_start_time
Service start/stop time.
std::string mime_type
MIME type of the document.
std::string class_code
Document class code (e.g., "Imaging Procedure")
std::string class_code_scheme
std::string facility_type_code_scheme
std::string type_code
Type code (e.g., "Key Object Selection")
std::string unique_id
Document unique ID (OID format)
std::string facility_type_code
Healthcare facility type.
std::string source_patient_id
Source patient ID (from the originating system)
std::string type_code_scheme
std::string class_code_display
std::string availability_status
Availability status.
std::string author_person
Author information.
std::string format_code
Format code (e.g., "1.2.840.10008.5.1.4.1.1.88.59")
std::string language_code
Language code (e.g., "en-US")
std::string author_institution
std::string entry_uuid
Unique identifier for this document entry.
std::string service_stop_time
std::string title
Title/description.
std::string practice_setting_code_scheme
std::string practice_setting_code
Practice setting code.
Submission set metadata for XDS registry.
std::string unique_id
Unique identifier for this submission set.
std::string source_id
Source ID (OID of the submitting system)
std::string submission_time
Submission time (DTM format)