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
//! Communication
//!
//! URL: http://hl7.org/fhir/StructureDefinition/Communication
//!
//! Version: 5.0.0
//!
//! Communication Resource: A clinical or business level record of information being transmitted or shared.
//!
//! 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;
/// A clinical or business level record of information being transmitted or
/// shared.
///
/// The Communication resource captures a discrete unit of information that was
/// conveyed between a sender and one or more recipients, such as an alert sent
/// to a responsible provider or a public health agency communication issued in
/// response to a reportable condition. It records the status, category,
/// medium, timing, and payload of the exchange, along with the parties
/// involved and the subject or encounter it concerns. In FHIR R5 it is
/// commonly used to document notifications, messages, and other information
/// transfers that are relevant to patient care or business workflow.
///
/// Unlike `CommunicationRequest`, which represents a request or order for a
/// communication to occur, `Communication` is a record that a communication
/// event has actually happened (or is happening), whether or not it was
/// triggered by an order. It is often used for auditing, tracking, and
/// reporting on information exchange, and it may reference the order that
/// prompted it via `based_on`.
///
/// # See also
///
/// - [`CodeableConcept`](crate::r5::types::CodeableConcept) — used for
/// category, medium, priority, and topic coding.
/// - [`Reference`](crate::r5::types::Reference) — used to link the subject,
/// encounter, sender, and recipients, which are commonly resources such as
/// `Patient`, `Practitioner`, or `Organization`.
/// - [`Annotation`](crate::r5::types::Annotation) — used for the `note`
/// field's free-text comments.
///
/// # Examples
///
/// ```
/// use fhir::r5::resources::communication::Communication;
///
/// let value = Communication::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: Communication = ::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 Communication {
/// 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>>,
/// Unique identifier
pub identifier: Option<Vec<types::Identifier>>,
/// Instantiates FHIR protocol or definition
pub instantiates_canonical: Option<Vec<types::Canonical>>,
/// Instantiates external protocol or definition
pub instantiates_uri: Option<Vec<types::Uri>>,
/// Request fulfilled by this communication
pub based_on: Option<Vec<types::Reference>>,
/// Part of referenced event (e.g. Communication, Procedure)
pub part_of: Option<Vec<types::Reference>>,
/// Reply to
pub in_response_to: Option<Vec<types::Reference>>,
/// The lifecycle status of this communication: preparation | in-progress
/// | not-done | on-hold | stopped | completed | entered-in-error | unknown.
pub status: types::Code,
/// Reason for current status
pub status_reason: Option<types::CodeableConcept>,
/// Message category
pub category: Option<Vec<types::CodeableConcept>>,
/// routine | urgent | asap | stat
pub priority: Option<types::Code>,
/// A channel of communication
pub medium: Option<Vec<types::CodeableConcept>>,
/// Focus of message, typically a reference to a `Patient` or `Group`
/// about whom the communication is concerned.
pub subject: Option<types::Reference>,
/// Description of the purpose/content
pub topic: Option<types::CodeableConcept>,
/// Resources that pertain to this communication
pub about: Option<Vec<types::Reference>>,
/// The Encounter during which this Communication was created
pub encounter: Option<types::Reference>,
/// When sent
pub sent: Option<types::DateTime>,
/// When received
pub received: Option<types::DateTime>,
/// Who the information is shared with, such as one or more patients,
/// practitioners, or other care team members.
pub recipient: Option<Vec<types::Reference>>,
/// Who shares the information, i.e. the originator of the communication.
pub sender: Option<types::Reference>,
/// Indication for message
pub reason: Option<Vec<types::CodeableReference>>,
/// Message payload
pub payload: Option<Vec<CommunicationPayload>>,
/// Comments made about the communication
pub note: Option<Vec<types::Annotation>>,
}
/// Message payload.
///
/// Text, attachment(s), or resource(s) that was communicated to the recipient
/// as part of the Communication.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct CommunicationPayload {
/// 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>>,
/// Message part content
pub content_attachment: Option<types::Attachment>,
/// Message part content
pub content_reference: Option<types::Reference>,
/// Message part content
pub content_codeable_concept: Option<types::CodeableConcept>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = Communication;
#[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);
}
}