PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
sr_iod_validator.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
18#ifndef PACS_SERVICES_VALIDATION_SR_IOD_VALIDATOR_HPP
19#define PACS_SERVICES_VALIDATION_SR_IOD_VALIDATOR_HPP
20
23#include "kcenon/pacs/services/validation/us_iod_validator.h" // For validation_result types
24
25#include <optional>
26#include <string>
27#include <vector>
28
30
31// =============================================================================
32// SR Validation Options
33// =============================================================================
34
40 bool check_type1 = true;
41
43 bool check_type2 = true;
44
46 bool check_conditional = true;
47
50
53
56
59
62
65
68
71
73 bool strict_mode = false;
74};
75
76// =============================================================================
77// SR IOD Validator
78// =============================================================================
79
118public:
122 sr_iod_validator() = default;
123
128 explicit sr_iod_validator(const sr_validation_options& options);
129
138 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
139
146 [[nodiscard]] validation_result
147 validate_basic_text_sr(const core::dicom_dataset& dataset) const;
148
155 [[nodiscard]] validation_result
156 validate_enhanced_sr(const core::dicom_dataset& dataset) const;
157
164 [[nodiscard]] validation_result
166
173 [[nodiscard]] validation_result
175
184 [[nodiscard]] validation_result
185 validate_content_tree(const core::dicom_dataset& dataset) const;
186
195 [[nodiscard]] validation_result
196 validate_references(const core::dicom_dataset& dataset) const;
197
206 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
207
211 [[nodiscard]] const sr_validation_options& options() const noexcept;
212
216 void set_options(const sr_validation_options& options);
217
218private:
219 // Module validation methods
221 const core::dicom_dataset& dataset,
222 std::vector<validation_finding>& findings) const;
223
225 const core::dicom_dataset& dataset,
226 std::vector<validation_finding>& findings) const;
227
229 const core::dicom_dataset& dataset,
230 std::vector<validation_finding>& findings) const;
231
233 const core::dicom_dataset& dataset,
234 std::vector<validation_finding>& findings) const;
235
237 const core::dicom_dataset& dataset,
238 std::vector<validation_finding>& findings) const;
239
241 const core::dicom_dataset& dataset,
242 std::vector<validation_finding>& findings) const;
243
245 const core::dicom_dataset& dataset,
246 std::vector<validation_finding>& findings) const;
247
249 const core::dicom_dataset& dataset,
250 std::vector<validation_finding>& findings) const;
251
252 // Content tree validation
254 const core::dicom_dataset& dataset,
255 std::vector<validation_finding>& findings) const;
256
258 const core::dicom_dataset& item,
259 size_t depth,
260 std::string_view parent_value_type,
261 std::vector<validation_finding>& findings) const;
262
264 const core::dicom_dataset& coded_entry,
265 std::string_view context,
266 std::vector<validation_finding>& findings) const;
267
268 // Value type specific validation
270 const core::dicom_dataset& item,
271 std::vector<validation_finding>& findings) const;
272
274 const core::dicom_dataset& item,
275 std::vector<validation_finding>& findings) const;
276
278 const core::dicom_dataset& item,
279 std::vector<validation_finding>& findings) const;
280
282 const core::dicom_dataset& item,
283 std::vector<validation_finding>& findings) const;
284
286 const core::dicom_dataset& item,
287 std::vector<validation_finding>& findings) const;
288
290 const core::dicom_dataset& item,
291 std::vector<validation_finding>& findings) const;
292
293 // Attribute validation helpers
295 const core::dicom_dataset& dataset,
296 core::dicom_tag tag,
297 std::string_view name,
298 std::vector<validation_finding>& findings) const;
299
301 const core::dicom_dataset& dataset,
302 core::dicom_tag tag,
303 std::string_view name,
304 std::vector<validation_finding>& findings) const;
305
306 void check_modality(
307 const core::dicom_dataset& dataset,
308 std::vector<validation_finding>& findings) const;
309
311 const core::dicom_dataset& dataset,
312 std::vector<validation_finding>& findings) const;
313
315 const core::dicom_dataset& dataset,
316 std::vector<validation_finding>& findings) const;
317
319};
320
321// =============================================================================
322// Convenience Functions
323// =============================================================================
324
331[[nodiscard]] validation_result validate_sr_iod(const core::dicom_dataset& dataset);
332
339[[nodiscard]] bool is_valid_sr_dataset(const core::dicom_dataset& dataset);
340
347[[nodiscard]] bool is_sr_complete(const core::dicom_dataset& dataset);
348
355[[nodiscard]] bool is_sr_verified(const core::dicom_dataset& dataset);
356
363[[nodiscard]] size_t get_content_item_count(const core::dicom_dataset& dataset);
364
371[[nodiscard]] std::string get_sr_document_title(const core::dicom_dataset& dataset);
372
373} // namespace kcenon::pacs::services::validation
374
375#endif // PACS_SERVICES_VALIDATION_SR_IOD_VALIDATOR_HPP
void validate_image_content_item(const core::dicom_dataset &item, std::vector< validation_finding > &findings) const
sr_iod_validator()=default
Construct validator with default options.
const sr_validation_options & options() const noexcept
Get the validation options.
void check_verification_flag(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_num_content_item(const core::dicom_dataset &item, std::vector< validation_finding > &findings) const
validation_result validate(const core::dicom_dataset &dataset) const
Validate a DICOM dataset against SR IOD.
void validate_coded_entry(const core::dicom_dataset &coded_entry, std::string_view context, std::vector< validation_finding > &findings) const
validation_result validate_key_object_selection(const core::dicom_dataset &dataset) const
Validate a Key Object Selection document.
void validate_text_content_item(const core::dicom_dataset &item, std::vector< validation_finding > &findings) const
void set_options(const sr_validation_options &options)
Set validation options.
void validate_evidence_sequences(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void check_type2_attribute(const core::dicom_dataset &dataset, core::dicom_tag tag, std::string_view name, std::vector< validation_finding > &findings) const
void validate_scoord_content_item(const core::dicom_dataset &item, std::vector< validation_finding > &findings) const
bool quick_check(const core::dicom_dataset &dataset) const
Quick check if dataset has minimum required attributes.
void check_modality(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate_content_tree(const core::dicom_dataset &dataset) const
Validate content tree structure.
void validate_patient_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_content_item(const core::dicom_dataset &item, size_t depth, std::string_view parent_value_type, std::vector< validation_finding > &findings) const
void validate_code_content_item(const core::dicom_dataset &item, std::vector< validation_finding > &findings) const
void validate_scoord3d_content_item(const core::dicom_dataset &item, std::vector< validation_finding > &findings) const
void validate_sop_common_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate_basic_text_sr(const core::dicom_dataset &dataset) const
Validate a Basic Text SR dataset.
void validate_content_sequence(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void check_completion_flag(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_sr_document_general_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate_comprehensive_sr(const core::dicom_dataset &dataset) const
Validate a Comprehensive SR dataset.
void validate_sr_document_content_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
void validate_general_study_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate_references(const core::dicom_dataset &dataset) const
Validate referenced instances.
void validate_sr_document_series_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
validation_result validate_enhanced_sr(const core::dicom_dataset &dataset) const
Validate an Enhanced SR dataset.
void check_type1_attribute(const core::dicom_dataset &dataset, core::dicom_tag tag, std::string_view name, std::vector< validation_finding > &findings) const
void validate_general_equipment_module(const core::dicom_dataset &dataset, std::vector< validation_finding > &findings) const
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
size_t get_content_item_count(const core::dicom_dataset &dataset)
Get content item count from dataset.
bool is_sr_complete(const core::dicom_dataset &dataset)
Check if SR document is complete.
validation_result validate_sr_iod(const core::dicom_dataset &dataset)
Validate an SR dataset with default options.
bool is_sr_verified(const core::dicom_dataset &dataset)
Check if SR document is verified.
std::string get_sr_document_title(const core::dicom_dataset &dataset)
Get SR document title from Concept Name Code Sequence.
bool is_valid_sr_dataset(const core::dicom_dataset &dataset)
Quick check if a dataset is a valid SR document.
bool validate_key_object_selection
Allow Key Object Selection document specific validation.
bool check_conditional
Check Type 1C/2C (conditionally required) attributes.
bool validate_coded_entries
Validate coded entries (concept name codes, etc.)
bool validate_template_id
Validate template identification if present.
bool strict_mode
Strict mode - treat warnings as errors.
bool validate_value_types
Validate content item value types.
bool check_type1
Check Type 1 (required) attributes.
bool validate_references
Validate referenced SOP instances.
bool validate_content_sequence
Validate Content Sequence structure.
bool validate_document_status
Validate completion and verification flags.
bool check_type2
Check Type 2 (required, can be empty) attributes.
bool validate_relationships
Validate relationship types between content items.
std::string_view name
Ultrasound Image IOD Validator.