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
//! BiologicallyDerivedProduct
//!
//! URL: http://hl7.org/fhir/StructureDefinition/BiologicallyDerivedProduct
//!
//! Version: 5.0.0
//!
//! BiologicallyDerivedProduct Resource: A biological material originating from a biological entity intended to be transplanted or infused into another (possibly the same) biological entity.
//!
//! 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;
/// BiologicallyDerivedProduct
///
/// A biological material originating from a biological entity intended to be
/// transplanted or infused into another (possibly the same) biological entity.
/// This resource captures products such as organs, tissues, fluids, cells, and
/// biological agents, along with their provenance, collection, storage, and
/// instance-specific properties. It supports traceability of the material from
/// its biological source event through processing and distribution.
///
/// In clinical and administrative workflows, `BiologicallyDerivedProduct` is
/// typically used by blood banks, tissue banks, organ procurement organizations,
/// and cellular therapy laboratories to record and track individual product
/// instances as they move from collection through processing, storage, and
/// eventual transplantation or infusion. Each instance may reference a parent
/// product (for example, an aliquot derived from a larger donation), carry a
/// biological source event identifier that links related products back to a
/// single donation or pooling event, and record the processing facilities
/// responsible for labeling and distribution. The resource is commonly
/// referenced by other resources that order or perform the transplant or
/// infusion procedure.
///
/// # Related resources
///
/// - [`Patient`](crate::r5::resources::patient::Patient) — often the source or
/// recipient referenced via the `collection.source` or `request` elements.
/// - [`CodeableConcept`](crate::r5::types::CodeableConcept) — used for
/// `product_code` and property `type` codes.
/// - `Procedure` and `ServiceRequest` — commonly reference this resource to
/// describe the collection or the transplant/infusion request.
///
/// # Examples
///
/// ```
/// use fhir::r5::resources::biologically_derived_product::BiologicallyDerivedProduct;
///
/// let value = BiologicallyDerivedProduct::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: BiologicallyDerivedProduct = ::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 BiologicallyDerivedProduct {
/// 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>>,
/// Broad classification of the product: organ | tissue | fluid | cells | biologicalAgent
pub product_category: Option<types::Coding>,
/// A code that identifies the specific kind of this biologically derived product, such as a whole organ or a specific tissue or cell type
pub product_code: Option<types::CodeableConcept>,
/// The parent biologically-derived product, when this instance is an aliquot or derivative of another product
pub parent: Option<Vec<types::Reference>>,
/// Request to obtain and/or infuse this product
pub request: Option<Vec<types::Reference>>,
/// Instance identifier
pub identifier: Option<Vec<types::Identifier>>,
/// An identifier that supports traceability to the event during which material
/// in this product from one or more biological entities was obtained or pooled
pub biological_source_event: Option<types::Identifier>,
/// Processing facilities responsible for the labeling and distribution of this
/// biologically derived product
pub processing_facility: Option<Vec<types::Reference>>,
/// A unique identifier for an aliquot of a product
pub division: Option<types::String>,
/// available | unavailable
pub product_status: Option<types::Coding>,
/// Date, and where relevant time, of expiration
pub expiration_date: Option<types::DateTime>,
/// How and by whom this product was collected, and from what source
pub collection: Option<BiologicallyDerivedProductCollection>,
/// Product storage temperature requirements
pub storage_temp_requirements: Option<types::Range>,
/// A property that is specific to this BiologicallyDerviedProduct instance
pub property: Option<Vec<BiologicallyDerivedProductProperty>>,
}
/// BiologicallyDerivedProductCollection
///
/// How this product was collected, including who performed the collection, the
/// source patient or organization, and the time it took place.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct BiologicallyDerivedProductCollection {
/// 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>>,
/// Individual performing collection
pub collector: Option<types::Reference>,
/// The patient who underwent the medical procedure to collect the product or
/// the organization that facilitated the collection
pub source: Option<types::Reference>,
/// Time of product collection
pub collected_date_time: Option<types::DateTime>,
/// Time of product collection
pub collected_period: Option<types::Period>,
}
/// BiologicallyDerivedProductProperty
///
/// A property that is specific to this BiologicallyDerivedProduct instance,
/// expressed as a typed code paired with one of several possible value types.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct BiologicallyDerivedProductProperty {
/// 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>>,
/// Code that specifies the property
pub r#type: types::CodeableConcept,
/// Property values
pub value_boolean: Option<types::Boolean>,
/// Property values
pub value_integer: Option<types::Integer>,
/// Property values
pub value_codeable_concept: Option<types::CodeableConcept>,
/// Property values
pub value_period: Option<types::Period>,
/// Property values
pub value_quantity: Option<types::Quantity>,
/// Property values
pub value_range: Option<types::Range>,
/// Property values
pub value_ratio: Option<types::Ratio>,
/// Property values
pub value_string: Option<types::String>,
/// Property values
pub value_attachment: Option<types::Attachment>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = BiologicallyDerivedProduct;
#[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);
}
}