PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
us_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
20#ifndef PACS_SERVICES_VALIDATION_US_IOD_VALIDATOR_HPP
21#define PACS_SERVICES_VALIDATION_US_IOD_VALIDATOR_HPP
22
25
26#include <optional>
27#include <string>
28#include <vector>
29
31
32// =============================================================================
33// Validation Result Types
34// =============================================================================
35
40 error,
41 warning,
42 info
43};
44
54
59 bool is_valid;
60 std::vector<validation_finding> findings;
61
65 [[nodiscard]] bool has_errors() const noexcept;
66
70 [[nodiscard]] bool has_warnings() const noexcept;
71
75 [[nodiscard]] size_t error_count() const noexcept;
76
80 [[nodiscard]] size_t warning_count() const noexcept;
81
85 [[nodiscard]] std::string summary() const;
86};
87
88// =============================================================================
89// Validation Options
90// =============================================================================
91
97 bool check_type1 = true;
98
100 bool check_type2 = true;
101
103 bool check_conditional = true;
104
106 bool validate_pixel_data = true;
107
109 bool validate_regions = true;
110
112 bool allow_retired = true;
113
115 bool strict_mode = false;
116};
117
118// =============================================================================
119// US IOD Validator
120// =============================================================================
121
158public:
162 us_iod_validator() = default;
163
168 explicit us_iod_validator(const us_validation_options& options);
169
176 [[nodiscard]] validation_result validate(const core::dicom_dataset& dataset) const;
177
186 [[nodiscard]] validation_result
187 validate_multiframe(const core::dicom_dataset& dataset) const;
188
197 [[nodiscard]] bool quick_check(const core::dicom_dataset& dataset) const;
198
202 [[nodiscard]] const us_validation_options& options() const noexcept;
203
207 void set_options(const us_validation_options& options);
208
209private:
210 // Module validation methods
211 void validate_patient_module(
212 const core::dicom_dataset& dataset,
213 std::vector<validation_finding>& findings) const;
214
215 void validate_general_study_module(
216 const core::dicom_dataset& dataset,
217 std::vector<validation_finding>& findings) const;
218
219 void validate_general_series_module(
220 const core::dicom_dataset& dataset,
221 std::vector<validation_finding>& findings) const;
222
223 void validate_us_image_module(
224 const core::dicom_dataset& dataset,
225 std::vector<validation_finding>& findings) const;
226
227 void validate_image_pixel_module(
228 const core::dicom_dataset& dataset,
229 std::vector<validation_finding>& findings) const;
230
231 void validate_multiframe_module(
232 const core::dicom_dataset& dataset,
233 std::vector<validation_finding>& findings) const;
234
235 void validate_sop_common_module(
236 const core::dicom_dataset& dataset,
237 std::vector<validation_finding>& findings) const;
238
239 // Attribute validation helpers
240 void check_type1_attribute(
241 const core::dicom_dataset& dataset,
242 core::dicom_tag tag,
243 std::string_view name,
244 std::vector<validation_finding>& findings) const;
245
246 void check_type2_attribute(
247 const core::dicom_dataset& dataset,
248 core::dicom_tag tag,
249 std::string_view name,
250 std::vector<validation_finding>& findings) const;
251
252 void check_modality(
253 const core::dicom_dataset& dataset,
254 std::vector<validation_finding>& findings) const;
255
256 void check_pixel_data_consistency(
257 const core::dicom_dataset& dataset,
258 std::vector<validation_finding>& findings) const;
259
261};
262
263// =============================================================================
264// Convenience Functions
265// =============================================================================
266
273[[nodiscard]] validation_result validate_us_iod(const core::dicom_dataset& dataset);
274
281[[nodiscard]] bool is_valid_us_dataset(const core::dicom_dataset& dataset);
282
283} // namespace kcenon::pacs::services::validation
284
285#endif // PACS_SERVICES_VALIDATION_US_IOD_VALIDATOR_HPP
us_iod_validator()=default
Construct validator with default options.
DICOM Dataset - ordered collection of Data Elements.
DICOM Tag representation (Group, Element pairs)
@ error
ERROR - Dose error/uncertainty.
validation_severity
Severity level of validation findings.
@ warning
Non-critical - IOD may have issues.
@ info
Informational - suggestion for improvement.
validation_severity severity
How serious is this finding.
std::string code
Machine-readable code (e.g., "US-001")
std::string message
Human-readable description.
core::dicom_tag tag
The tag involved (if applicable)
std::vector< validation_finding > findings
All findings during validation.
std::string summary() const
Get a formatted summary string.
size_t error_count() const noexcept
Get count of errors.
bool has_errors() const noexcept
Check if there are any errors.
size_t warning_count() const noexcept
Get count of warnings.
bool has_warnings() const noexcept
Check if there are any warnings.
std::string_view name