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
//! AdverseEvent
//!
//! URL: http://hl7.org/fhir/StructureDefinition/AdverseEvent
//!
//! Version: 5.0.0
//!
//! AdverseEvent Resource: An event that may be related to unintended effects on a patient or research participant.
//!
//! 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;
/// An event (i.e. any change to current patient status) that may be related to
/// unintended effects on a patient or research participant. The unintended
/// effects may require additional monitoring, treatment, hospitalization, or
/// may result in death. The AdverseEvent resource also extends to potential or
/// avoided events that could have had such effects, and is used in both
/// clinical care and research safety domains.
///
/// AdverseEvent supports both direct patient safety reporting (for example,
/// medication mishaps, procedure complications, or hospital-acquired
/// infections) and clinical research pharmacovigilance, where investigators
/// must record whether an event actually occurred or was only a potential
/// occurrence (see `actuality`). It captures when the event happened, who was
/// involved, the suspected causal agents, contributing factors, and any
/// preventive or mitigating actions taken, making it a central resource for
/// safety surveillance and quality-improvement workflows.
///
/// # See also
///
/// - [`Patient`](crate::r5::resources::patient::Patient) — the `subject` of
/// an adverse event is commonly a patient or research participant.
/// - [`CodeableConcept`](crate::r5::types::CodeableConcept) — used
/// throughout this resource for coded values such as `category`, `code`,
/// `seriousness`, and `outcome`.
/// - `Encounter` and `ResearchStudy` — referenced via `encounter` and
/// `study` to relate the event to a care episode or research context.
///
/// # Examples
///
/// ```
/// use fhir::r5::resources::adverse_event::AdverseEvent;
///
/// let value = AdverseEvent::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: AdverseEvent = ::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 AdverseEvent {
/// 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>,
/// Language of the resource content
pub language: Option<types::Code>,
/// Text summary of the resource, for human interpretation
pub text: Option<types::Narrative>,
/// Contained, inline Resources
pub contained: Option<Vec<::serde_json::Value>>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored
pub modifier_extension: Option<Vec<types::Extension>>,
/// Business identifier for the event
pub identifier: Option<Vec<types::Identifier>>,
/// The lifecycle status of the record itself: in-progress | completed |
/// entered-in-error | unknown
pub status: types::Code,
/// Whether the adverse event actually occurred (actual) or was only a
/// possible or averted occurrence (potential)
pub actuality: types::Code,
/// wrong-patient | procedure-mishap | medication-mishap | device |
/// unsafe-physical-environment | hospital-aquired-infection | wrong-body-site
pub category: Option<Vec<types::CodeableConcept>>,
/// Event or incident that occurred or was averted
pub code: Option<types::CodeableConcept>,
/// The patient or research participant impacted by the event; see also
/// [`Patient`](crate::r5::resources::patient::Patient)
pub subject: types::Reference,
/// The Encounter associated with the start of the AdverseEvent
pub encounter: Option<types::Reference>,
/// When the event occurred
pub occurrence_date_time: Option<types::DateTime>,
/// When the event occurred
pub occurrence_period: Option<types::Period>,
/// When the event occurred
pub occurrence_timing: Option<types::Timing>,
/// When the event was detected
pub detected: Option<types::DateTime>,
/// When the event was recorded
pub recorded_date: Option<types::DateTime>,
/// Effect on the subject due to this event
pub resulting_effect: Option<Vec<types::Reference>>,
/// Location where adverse event occurred
pub location: Option<types::Reference>,
/// Seriousness or gravity of the event
pub seriousness: Option<types::CodeableConcept>,
/// Type of outcome from the adverse event
pub outcome: Option<Vec<types::CodeableConcept>>,
/// Who recorded the adverse event
pub recorder: Option<types::Reference>,
/// Who was involved in the adverse event or the potential adverse event
/// and what they did
pub participant: Option<Vec<AdverseEventParticipant>>,
/// Research study that the subject is enrolled in
pub study: Option<Vec<types::Reference>>,
/// Considered likely or probable or anticipated in the research study
pub expected_in_research_study: Option<types::Boolean>,
/// The suspected agent causing the adverse event
pub suspect_entity: Option<Vec<AdverseEventSuspectEntity>>,
/// Contributing factors suspected to have increased the probability or
/// severity of the adverse event
pub contributing_factor: Option<Vec<AdverseEventContributingFactor>>,
/// Preventive actions that contributed to avoiding the adverse event
pub preventive_action: Option<Vec<AdverseEventPreventiveAction>>,
/// Ameliorating actions taken after the adverse event occured in order to
/// reduce the extent of harm
pub mitigating_action: Option<Vec<AdverseEventMitigatingAction>>,
/// Supporting information relevant to the event
pub supporting_info: Option<Vec<AdverseEventSupportingInfo>>,
/// Comment on adverse event
pub note: Option<Vec<types::Annotation>>,
}
/// Who was involved in the adverse event or the potential adverse event and
/// what they did.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct AdverseEventParticipant {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// Type of involvement
pub function: Option<types::CodeableConcept>,
/// Who was involved in the adverse event or the potential adverse event
pub actor: types::Reference,
}
/// The suspected agent causing the adverse event.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct AdverseEventSuspectEntity {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// Refers to the specific entity that caused the adverse event
pub instance_codeable_concept: Option<types::CodeableConcept>,
/// Refers to the specific entity that caused the adverse event
pub instance_reference: Option<types::Reference>,
/// Information on the possible cause of the event
pub causality: Option<AdverseEventSuspectEntityCausality>,
}
/// Information on the possible cause of the event.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct AdverseEventSuspectEntityCausality {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// Method of evaluating the relatedness of the suspected entity to the event
pub assessment_method: Option<types::CodeableConcept>,
/// Result of the assessment regarding the relatedness of the suspected
/// entity to the event
pub entity_relatedness: Option<types::CodeableConcept>,
/// Author of the information on the possible cause of the event
pub author: Option<types::Reference>,
}
/// Contributing factors suspected to have increased the probability or severity
/// of the adverse event.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct AdverseEventContributingFactor {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// Item suspected to have increased the probability or severity of the
/// adverse event
pub item_reference: Option<types::Reference>,
/// Item suspected to have increased the probability or severity of the
/// adverse event
pub item_codeable_concept: Option<types::CodeableConcept>,
}
/// Preventive actions that contributed to avoiding the adverse event.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct AdverseEventPreventiveAction {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// Action that contributed to avoiding the adverse event
pub item_reference: Option<types::Reference>,
/// Action that contributed to avoiding the adverse event
pub item_codeable_concept: Option<types::CodeableConcept>,
}
/// Ameliorating actions taken after the adverse event occured in order to
/// reduce the extent of harm.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct AdverseEventMitigatingAction {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// Ameliorating action taken after the adverse event occured in order to
/// reduce the extent of harm
pub item_reference: Option<types::Reference>,
/// Ameliorating action taken after the adverse event occured in order to
/// reduce the extent of harm
pub item_codeable_concept: Option<types::CodeableConcept>,
}
/// Supporting information relevant to the event.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct AdverseEventSupportingInfo {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// Subject medical history or document relevant to this adverse event
pub item_reference: Option<types::Reference>,
/// Subject medical history or document relevant to this adverse event
pub item_codeable_concept: Option<types::CodeableConcept>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = AdverseEvent;
#[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);
}
}