1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
//! ClinicalUseDefinition
//!
//! URL: http://hl7.org/fhir/StructureDefinition/ClinicalUseDefinition
//!
//! Version: 5.0.0
//!
//! ClinicalUseDefinition Resource: A single issue - either an indication, contraindication, interaction or an undesirable effect for a medicinal product, medication, device or procedure.
//!
//! FHIR: <https://build.fhir.org/>
//!
//! UML: <https://build.fhir.org/uml.html>
// Allow unused crate::r5::types as types;
#![allow(unused_imports)]
use crate::r5::types;
use ::serde::{Deserialize, Serialize};
use fhir_derive_macros::Validate;
/// ClinicalUseDefinition describes a single clinical issue relating to a
/// medicinal product, medication, device or procedure. The issue may be an
/// indication, a contraindication, an interaction, an undesirable effect, or a
/// warning. In FHIR R5 it is used chiefly within regulated medicine and product
/// information to capture structured, machine-readable clinical usage details.
///
/// Each instance records exactly one such issue via the `type` element, with
/// the corresponding detail carried in one of the `contraindication`,
/// `indication`, `interaction`, `undesirable_effect`, or `warning`
/// backbone elements. This granular, one-issue-per-resource model lets
/// publishers of drug and device knowledge bases (such as national
/// formularies or product labeling authorities) describe, cross-reference,
/// and version individual clinical facts independently, rather than bundling
/// them into a single monolithic document. Consuming systems, including
/// clinical decision support and e-prescribing tools, can then query for
/// specific issues relevant to a given subject or population.
///
/// Related resources: the `subject` element typically references a
/// `MedicinalProductDefinition`, `Medication`, `ActivityDefinition`,
/// `PlanDefinition`, `Device`, `DeviceDefinition`, or `Substance`, while
/// `population` typically references a `Group` describing the affected
/// patient population. See also [`CodeableConcept`](crate::r5::types::CodeableConcept)
/// and [`CodeableReference`](crate::r5::types::CodeableReference), which are
/// used extensively throughout the nested backbone elements to convey coded
/// or free-text clinical detail.
///
/// # Examples
///
/// ```
/// use fhir::r5::resources::clinical_use_definition::ClinicalUseDefinition;
///
/// let value = ClinicalUseDefinition::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: ClinicalUseDefinition = ::serde_json::from_value(json).unwrap();
/// assert_eq!(value, back);
/// ```
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinition {
/// Logical id of this artifact
pub id: Option<types::String>,
/// Metadata about the resource
pub meta: Option<types::Meta>,
/// A set of rules under which this content was created
pub implicit_rules: Option<types::Uri>,
/// Primitive extension sibling for [`implicit_rules`](Self::implicit_rules) (FHIR `_implicitRules`).
#[serde(rename = "_implicitRules")]
pub implicit_rules_ext: Option<types::Element>,
/// Language of the resource content
pub language: Option<types::Code>,
/// Primitive extension sibling for [`language`](Self::language) (FHIR `_language`).
#[serde(rename = "_language")]
pub language_ext: Option<types::Element>,
/// Text summary of the resource, for human interpretation
pub text: Option<types::Narrative>,
/// Contained, inline Resources
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub contained: Vec<::serde_json::Value>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// Business identifier for this issue
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub identifier: Vec<types::Identifier>,
/// The kind of issue this instance describes: indication | contraindication | interaction | undesirable-effect | warning; this determines which of the backbone elements below carries the detail
pub r#type: crate::r5::coded::Coded<crate::r5::codes::ClinicalUseDefinitionType>,
/// Primitive extension sibling for [`type`](Self::r#type) (FHIR `_type`).
#[serde(rename = "_type")]
pub type_ext: Option<types::Element>,
/// A categorisation of the issue, primarily for dividing warnings into subject heading areas
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub category: Vec<types::CodeableConcept>,
/// The medication, product, substance, device, procedure etc. for which this is an indication; typically a reference to a product or activity definition resource
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub subject: Vec<types::Reference>,
/// Whether this is a current issue or one that has been retired, withdrawn, or superseded etc
pub status: Option<types::CodeableConcept>,
/// Specifics for when this is a contraindication
pub contraindication: Option<ClinicalUseDefinitionContraindication>,
/// Specifics for when this is an indication
pub indication: Option<ClinicalUseDefinitionIndication>,
/// Specifics for when this is an interaction
pub interaction: Option<ClinicalUseDefinitionInteraction>,
/// The population group to which this applies
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub population: Vec<types::Reference>,
/// Logic used by the clinical use definition
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub library: Vec<types::Canonical>,
/// Primitive extension sibling for [`library`](Self::library) (FHIR `_library`).
#[serde(rename = "_library")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub library_ext: Vec<Option<types::Element>>,
/// A possible negative outcome from the use of this treatment
pub undesirable_effect: Option<ClinicalUseDefinitionUndesirableEffect>,
/// Critical environmental, health or physical risks or hazards
pub warning: Option<ClinicalUseDefinitionWarning>,
}
/// Specifics for when this is a contraindication.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinitionContraindication {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// The situation that is being documented as contraindicating against this item
pub disease_symptom_procedure: Option<types::CodeableReference>,
/// The status of the disease or symptom for the contraindication
pub disease_status: Option<types::CodeableReference>,
/// A comorbidity (concurrent condition) or coinfection
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comorbidity: Vec<types::CodeableReference>,
/// The indication which this is a contraidication for
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub indication: Vec<types::Reference>,
/// An expression that returns true or false, indicating whether the indication is applicable or not
pub applicability: Option<types::Expression>,
/// Information about use of the product in relation to other therapies described as part of the contraindication
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub other_therapy: Vec<ClinicalUseDefinitionContraindicationOtherTherapy>,
}
/// Information about use of the product in relation to other therapies described
/// as part of the contraindication.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinitionContraindicationOtherTherapy {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// The type of relationship between the product indication/contraindication and another therapy
pub relationship_type: types::CodeableConcept,
/// Reference to a specific medication, substance etc. as part of an indication or contraindication
pub treatment: types::CodeableReference,
}
/// Specifics for when this is an indication.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinitionIndication {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// The situation that is being documented as an indicaton for this item
pub disease_symptom_procedure: Option<types::CodeableReference>,
/// The status of the disease or symptom for the indication
pub disease_status: Option<types::CodeableReference>,
/// A comorbidity or coinfection as part of the indication
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub comorbidity: Vec<types::CodeableReference>,
/// The intended effect, aim or strategy to be achieved
pub intended_effect: Option<types::CodeableReference>,
/// The `ClinicalUseDefinition.indication.duration[x]` choice element (0..1); see [`ClinicalUseDefinitionIndicationDuration`].
#[serde(flatten)]
pub duration: Option<ClinicalUseDefinitionIndicationDuration>,
/// An unwanted side effect or negative outcome of the subject of this resource when being used for this indication
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub undesirable_effect: Vec<types::Reference>,
/// An expression that returns true or false, indicating whether the indication is applicable or not
pub applicability: Option<types::Expression>,
/// The use of the medicinal product in relation to other therapies described as part of the indication
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub other_therapy: Vec<ClinicalUseDefinitionContraindicationOtherTherapy>,
}
/// Specifics for when this is an interaction.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinitionInteraction {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// The specific medication, product, food etc. or laboratory test that interacts
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub interactant: Vec<ClinicalUseDefinitionInteractionInteractant>,
/// The type of the interaction e.g. drug-drug interaction, drug-lab test interaction
pub r#type: Option<types::CodeableConcept>,
/// The effect of the interaction, for example "reduced gastric absorption of primary medication"
pub effect: Option<types::CodeableReference>,
/// The incidence of the interaction, e.g. theoretical, observed
pub incidence: Option<types::CodeableConcept>,
/// Actions for managing the interaction
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub management: Vec<types::CodeableConcept>,
}
/// The specific medication, product, food etc. or laboratory test that
/// interacts.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinitionInteractionInteractant {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// The `ClinicalUseDefinition.interaction.interactant.item[x]` choice element (0..1); see [`ClinicalUseDefinitionInteractionInteractantItem`].
#[serde(flatten)]
pub item: Option<ClinicalUseDefinitionInteractionInteractantItem>,
}
/// A possible negative outcome from the use of this treatment.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinitionUndesirableEffect {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// The situation in which the undesirable effect may manifest
pub symptom_condition_effect: Option<types::CodeableReference>,
/// High level classification of the effect
pub classification: Option<types::CodeableConcept>,
/// How often the effect is seen
pub frequency_of_occurrence: Option<types::CodeableConcept>,
}
/// Critical environmental, health or physical risks or hazards. For example
/// 'Do not operate heavy machinery', 'May cause drowsiness'.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct ClinicalUseDefinitionWarning {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// A textual definition of this warning, with formatting
pub description: Option<types::Markdown>,
/// Primitive extension sibling for [`description`](Self::description) (FHIR `_description`).
#[serde(rename = "_description")]
pub description_ext: Option<types::Element>,
/// A coded or unformatted textual definition of this warning
pub code: Option<types::CodeableConcept>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = ClinicalUseDefinition;
#[test]
fn test_default() {
let _ = T::default();
}
#[test]
fn test_serde_round_trip() {
let value = T::default();
let json = ::serde_json::to_value(&value).expect("to_value");
let back: T = ::serde_json::from_value(json).expect("from_value");
assert_eq!(value, back);
}
}
/// The `ClinicalUseDefinition.indication.duration[x]` choice element (see spec/11-choice-types.md).
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[allow(clippy::large_enum_variant)]
pub enum ClinicalUseDefinitionIndicationDuration {
/// `durationRange` variant.
#[fhir("durationRange")]
Range(Box<types::Range>),
/// `durationString` variant.
#[fhir("durationString")]
String(crate::r5::choice::Primitive<types::String>),
}
/// The `ClinicalUseDefinition.interaction.interactant.item[x]` choice element (see spec/11-choice-types.md).
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[allow(clippy::large_enum_variant)]
pub enum ClinicalUseDefinitionInteractionInteractantItem {
/// `itemReference` variant.
#[fhir("itemReference")]
Reference(Box<types::Reference>),
/// `itemCodeableConcept` variant.
#[fhir("itemCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
}