fhirbolt_model/generated/r4b/resources/
substance_definition.rs

1// Generated on 2023-05-17 by fhirbolt-codegen v0.10.0
2#[doc = "Quantitative value for this moiety."]
3#[derive(Default, Debug, Clone, PartialEq)]
4pub enum SubstanceDefinitionMoietyAmount {
5    Quantity(Box<super::super::types::Quantity>),
6    String(super::super::types::String),
7    #[default]
8    Invalid,
9}
10#[doc = "A value for the property."]
11#[derive(Default, Debug, Clone, PartialEq)]
12pub enum SubstanceDefinitionPropertyValue {
13    CodeableConcept(Box<super::super::types::CodeableConcept>),
14    Quantity(Box<super::super::types::Quantity>),
15    Date(super::super::types::Date),
16    Boolean(super::super::types::Boolean),
17    Attachment(Box<super::super::types::Attachment>),
18    #[default]
19    Invalid,
20}
21#[doc = "A pointer to another substance, as a resource or just a representational code."]
22#[derive(Default, Debug, Clone, PartialEq)]
23pub enum SubstanceDefinitionRelationshipSubstanceDefinition {
24    Reference(Box<super::super::types::Reference>),
25    CodeableConcept(Box<super::super::types::CodeableConcept>),
26    #[default]
27    Invalid,
28}
29#[doc = "A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other."]
30#[derive(Default, Debug, Clone, PartialEq)]
31pub enum SubstanceDefinitionRelationshipAmount {
32    Quantity(Box<super::super::types::Quantity>),
33    Ratio(Box<super::super::types::Ratio>),
34    String(super::super::types::String),
35    #[default]
36    Invalid,
37}
38#[doc = "Moiety, for structural modifications."]
39#[derive(Debug, Clone, PartialEq)]
40pub struct SubstanceDefinitionMoiety {
41    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
42    pub r#id: Option<std::string::String>,
43    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
44    pub r#extension: Vec<super::super::types::Extension>,
45    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
46    pub r#modifier_extension: Vec<super::super::types::Extension>,
47    #[doc = "Role that the moiety is playing."]
48    pub r#role: Option<Box<super::super::types::CodeableConcept>>,
49    #[doc = "Identifier by which this moiety substance is known."]
50    pub r#identifier: Option<Box<super::super::types::Identifier>>,
51    #[doc = "Textual name for this moiety substance."]
52    pub r#name: Option<super::super::types::String>,
53    #[doc = "Stereochemistry type."]
54    pub r#stereochemistry: Option<Box<super::super::types::CodeableConcept>>,
55    #[doc = "Optical activity type."]
56    pub r#optical_activity: Option<Box<super::super::types::CodeableConcept>>,
57    #[doc = "Molecular formula for this moiety of this substance, typically using the Hill system."]
58    pub r#molecular_formula: Option<super::super::types::String>,
59    #[doc = "Quantitative value for this moiety."]
60    pub r#amount: Option<SubstanceDefinitionMoietyAmount>,
61    #[doc = "The measurement type of the quantitative value. In capturing the actual relative amounts of substances or molecular fragments it may be necessary to indicate whether the amount refers to, for example, a mole ratio or weight ratio."]
62    pub r#measurement_type: Option<Box<super::super::types::CodeableConcept>>,
63}
64#[allow(clippy::derivable_impls)]
65impl Default for SubstanceDefinitionMoiety {
66    fn default() -> Self {
67        Self {
68            r#id: Default::default(),
69            r#extension: Default::default(),
70            r#modifier_extension: Default::default(),
71            r#role: Default::default(),
72            r#identifier: Default::default(),
73            r#name: Default::default(),
74            r#stereochemistry: Default::default(),
75            r#optical_activity: Default::default(),
76            r#molecular_formula: Default::default(),
77            r#amount: Default::default(),
78            r#measurement_type: Default::default(),
79        }
80    }
81}
82#[doc = "General specifications for this substance."]
83#[derive(Debug, Clone, PartialEq)]
84pub struct SubstanceDefinitionProperty {
85    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
86    pub r#id: Option<std::string::String>,
87    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
88    pub r#extension: Vec<super::super::types::Extension>,
89    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
90    pub r#modifier_extension: Vec<super::super::types::Extension>,
91    #[doc = "A code expressing the type of property."]
92    pub r#type: Box<super::super::types::CodeableConcept>,
93    #[doc = "A value for the property."]
94    pub r#value: Option<SubstanceDefinitionPropertyValue>,
95}
96#[allow(clippy::derivable_impls)]
97impl Default for SubstanceDefinitionProperty {
98    fn default() -> Self {
99        Self {
100            r#id: Default::default(),
101            r#extension: Default::default(),
102            r#modifier_extension: Default::default(),
103            r#type: Box::new(super::super::types::CodeableConcept {
104                id: Some("$invalid".to_string()),
105                ..Default::default()
106            }),
107            r#value: Default::default(),
108        }
109    }
110}
111#[doc = "The molecular weight or weight range (for proteins, polymers or nucleic acids)."]
112#[derive(Debug, Clone, PartialEq)]
113pub struct SubstanceDefinitionMolecularWeight {
114    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
115    pub r#id: Option<std::string::String>,
116    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
117    pub r#extension: Vec<super::super::types::Extension>,
118    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
119    pub r#modifier_extension: Vec<super::super::types::Extension>,
120    #[doc = "The method by which the molecular weight was determined."]
121    pub r#method: Option<Box<super::super::types::CodeableConcept>>,
122    #[doc = "Type of molecular weight such as exact, average (also known as. number average), weight average."]
123    pub r#type: Option<Box<super::super::types::CodeableConcept>>,
124    #[doc = "Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field."]
125    pub r#amount: Box<super::super::types::Quantity>,
126}
127#[allow(clippy::derivable_impls)]
128impl Default for SubstanceDefinitionMolecularWeight {
129    fn default() -> Self {
130        Self {
131            r#id: Default::default(),
132            r#extension: Default::default(),
133            r#modifier_extension: Default::default(),
134            r#method: Default::default(),
135            r#type: Default::default(),
136            r#amount: Box::new(super::super::types::Quantity {
137                id: Some("$invalid".to_string()),
138                ..Default::default()
139            }),
140        }
141    }
142}
143#[doc = "A depiction of the structure or characterization of the substance."]
144#[derive(Debug, Clone, PartialEq)]
145pub struct SubstanceDefinitionStructureRepresentation {
146    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
147    pub r#id: Option<std::string::String>,
148    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
149    pub r#extension: Vec<super::super::types::Extension>,
150    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
151    pub r#modifier_extension: Vec<super::super::types::Extension>,
152    #[doc = "The kind of structural representation (e.g. full, partial)."]
153    pub r#type: Option<Box<super::super::types::CodeableConcept>>,
154    #[doc = "The structural representation or characterization as a text string in a standard format."]
155    pub r#representation: Option<super::super::types::String>,
156    #[doc = "The format of the representation e.g. InChI, SMILES, MOLFILE, CDX, SDF, PDB, mmCIF. The logical content type rather than the physical file format of a document."]
157    pub r#format: Option<Box<super::super::types::CodeableConcept>>,
158    #[doc = "An attached file with the structural representation or characterization e.g. a molecular structure graphic of the substance, a JCAMP or AnIML file."]
159    pub r#document: Option<Box<super::super::types::Reference>>,
160}
161#[allow(clippy::derivable_impls)]
162impl Default for SubstanceDefinitionStructureRepresentation {
163    fn default() -> Self {
164        Self {
165            r#id: Default::default(),
166            r#extension: Default::default(),
167            r#modifier_extension: Default::default(),
168            r#type: Default::default(),
169            r#representation: Default::default(),
170            r#format: Default::default(),
171            r#document: Default::default(),
172        }
173    }
174}
175#[doc = "Structural information."]
176#[derive(Debug, Clone, PartialEq)]
177pub struct SubstanceDefinitionStructure {
178    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
179    pub r#id: Option<std::string::String>,
180    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
181    pub r#extension: Vec<super::super::types::Extension>,
182    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
183    pub r#modifier_extension: Vec<super::super::types::Extension>,
184    #[doc = "Stereochemistry type."]
185    pub r#stereochemistry: Option<Box<super::super::types::CodeableConcept>>,
186    #[doc = "Optical activity type."]
187    pub r#optical_activity: Option<Box<super::super::types::CodeableConcept>>,
188    #[doc = "Molecular formula of this substance, typically using the Hill system."]
189    pub r#molecular_formula: Option<super::super::types::String>,
190    #[doc = "Specified per moiety according to the Hill system, i.e. first C, then H, then alphabetical, each moiety separated by a dot."]
191    pub r#molecular_formula_by_moiety: Option<super::super::types::String>,
192    #[doc = "The molecular weight or weight range (for proteins, polymers or nucleic acids)."]
193    pub r#molecular_weight: Option<SubstanceDefinitionMolecularWeight>,
194    #[doc = "The method used to elucidate the structure or characterization of the drug substance. Examples: X-ray, HPLC, NMR, Peptide mapping, Ligand binding assay."]
195    pub r#technique: Vec<super::super::types::CodeableConcept>,
196    #[doc = "The source of information about the structure."]
197    pub r#source_document: Vec<super::super::types::Reference>,
198    #[doc = "A depiction of the structure or characterization of the substance."]
199    pub r#representation: Vec<SubstanceDefinitionStructureRepresentation>,
200}
201#[allow(clippy::derivable_impls)]
202impl Default for SubstanceDefinitionStructure {
203    fn default() -> Self {
204        Self {
205            r#id: Default::default(),
206            r#extension: Default::default(),
207            r#modifier_extension: Default::default(),
208            r#stereochemistry: Default::default(),
209            r#optical_activity: Default::default(),
210            r#molecular_formula: Default::default(),
211            r#molecular_formula_by_moiety: Default::default(),
212            r#molecular_weight: Default::default(),
213            r#technique: Default::default(),
214            r#source_document: Default::default(),
215            r#representation: Default::default(),
216        }
217    }
218}
219#[doc = "Codes associated with the substance."]
220#[derive(Debug, Clone, PartialEq)]
221pub struct SubstanceDefinitionCode {
222    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
223    pub r#id: Option<std::string::String>,
224    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
225    pub r#extension: Vec<super::super::types::Extension>,
226    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
227    pub r#modifier_extension: Vec<super::super::types::Extension>,
228    #[doc = "The specific code."]
229    pub r#code: Option<Box<super::super::types::CodeableConcept>>,
230    #[doc = "Status of the code assignment, for example 'provisional', 'approved'."]
231    pub r#status: Option<Box<super::super::types::CodeableConcept>>,
232    #[doc = "The date at which the code status was changed as part of the terminology maintenance."]
233    pub r#status_date: Option<super::super::types::DateTime>,
234    #[doc = "Any comment can be provided in this field, if necessary."]
235    pub r#note: Vec<super::super::types::Annotation>,
236    #[doc = "Supporting literature."]
237    pub r#source: Vec<super::super::types::Reference>,
238}
239#[allow(clippy::derivable_impls)]
240impl Default for SubstanceDefinitionCode {
241    fn default() -> Self {
242        Self {
243            r#id: Default::default(),
244            r#extension: Default::default(),
245            r#modifier_extension: Default::default(),
246            r#code: Default::default(),
247            r#status: Default::default(),
248            r#status_date: Default::default(),
249            r#note: Default::default(),
250            r#source: Default::default(),
251        }
252    }
253}
254#[doc = "Details of the official nature of this name."]
255#[derive(Debug, Clone, PartialEq)]
256pub struct SubstanceDefinitionNameOfficial {
257    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
258    pub r#id: Option<std::string::String>,
259    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
260    pub r#extension: Vec<super::super::types::Extension>,
261    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
262    pub r#modifier_extension: Vec<super::super::types::Extension>,
263    #[doc = "Which authority uses this official name."]
264    pub r#authority: Option<Box<super::super::types::CodeableConcept>>,
265    #[doc = "The status of the official name, for example 'draft', 'active', 'retired'."]
266    pub r#status: Option<Box<super::super::types::CodeableConcept>>,
267    #[doc = "Date of the official name change."]
268    pub r#date: Option<super::super::types::DateTime>,
269}
270#[allow(clippy::derivable_impls)]
271impl Default for SubstanceDefinitionNameOfficial {
272    fn default() -> Self {
273        Self {
274            r#id: Default::default(),
275            r#extension: Default::default(),
276            r#modifier_extension: Default::default(),
277            r#authority: Default::default(),
278            r#status: Default::default(),
279            r#date: Default::default(),
280        }
281    }
282}
283#[doc = "Names applicable to this substance."]
284#[derive(Debug, Clone, PartialEq)]
285pub struct SubstanceDefinitionName {
286    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
287    pub r#id: Option<std::string::String>,
288    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
289    pub r#extension: Vec<super::super::types::Extension>,
290    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
291    pub r#modifier_extension: Vec<super::super::types::Extension>,
292    #[doc = "The actual name."]
293    pub r#name: super::super::types::String,
294    #[doc = "Name type, for example 'systematic',  'scientific, 'brand'."]
295    pub r#type: Option<Box<super::super::types::CodeableConcept>>,
296    #[doc = "The status of the name, for example 'current', 'proposed'."]
297    pub r#status: Option<Box<super::super::types::CodeableConcept>>,
298    #[doc = "If this is the preferred name for this substance."]
299    pub r#preferred: Option<super::super::types::Boolean>,
300    #[doc = "Human language that the name is written in."]
301    pub r#language: Vec<super::super::types::CodeableConcept>,
302    #[doc = "The use context of this name for example if there is a different name a drug active ingredient as opposed to a food colour additive."]
303    pub r#domain: Vec<super::super::types::CodeableConcept>,
304    #[doc = "The jurisdiction where this name applies."]
305    pub r#jurisdiction: Vec<super::super::types::CodeableConcept>,
306    #[doc = "A synonym of this particular name, by which the substance is also known."]
307    pub r#synonym: Vec<SubstanceDefinitionName>,
308    #[doc = "A translation for this name into another human language."]
309    pub r#translation: Vec<SubstanceDefinitionName>,
310    #[doc = "Details of the official nature of this name."]
311    pub r#official: Vec<SubstanceDefinitionNameOfficial>,
312    #[doc = "Supporting literature."]
313    pub r#source: Vec<super::super::types::Reference>,
314}
315#[allow(clippy::derivable_impls)]
316impl Default for SubstanceDefinitionName {
317    fn default() -> Self {
318        Self {
319            r#id: Default::default(),
320            r#extension: Default::default(),
321            r#modifier_extension: Default::default(),
322            r#name: super::super::types::String {
323                id: Some("$invalid".to_string()),
324                ..Default::default()
325            },
326            r#type: Default::default(),
327            r#status: Default::default(),
328            r#preferred: Default::default(),
329            r#language: Default::default(),
330            r#domain: Default::default(),
331            r#jurisdiction: Default::default(),
332            r#synonym: Default::default(),
333            r#translation: Default::default(),
334            r#official: Default::default(),
335            r#source: Default::default(),
336        }
337    }
338}
339#[doc = "A link between this substance and another, with details of the relationship."]
340#[derive(Debug, Clone, PartialEq)]
341pub struct SubstanceDefinitionRelationship {
342    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
343    pub r#id: Option<std::string::String>,
344    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
345    pub r#extension: Vec<super::super::types::Extension>,
346    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
347    pub r#modifier_extension: Vec<super::super::types::Extension>,
348    #[doc = "A pointer to another substance, as a resource or just a representational code."]
349    pub r#substance_definition: Option<SubstanceDefinitionRelationshipSubstanceDefinition>,
350    #[doc = "For example \"salt to parent\", \"active moiety\", \"starting material\", \"polymorph\", \"impurity of\"."]
351    pub r#type: Box<super::super::types::CodeableConcept>,
352    #[doc = "For example where an enzyme strongly bonds with a particular substance, this is a defining relationship for that enzyme, out of several possible substance relationships."]
353    pub r#is_defining: Option<super::super::types::Boolean>,
354    #[doc = "A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other."]
355    pub r#amount: Option<SubstanceDefinitionRelationshipAmount>,
356    #[doc = "For use when the numeric has an uncertain range."]
357    pub r#ratio_high_limit_amount: Option<Box<super::super::types::Ratio>>,
358    #[doc = "An operator for the amount, for example \"average\", \"approximately\", \"less than\"."]
359    pub r#comparator: Option<Box<super::super::types::CodeableConcept>>,
360    #[doc = "Supporting literature."]
361    pub r#source: Vec<super::super::types::Reference>,
362}
363#[allow(clippy::derivable_impls)]
364impl Default for SubstanceDefinitionRelationship {
365    fn default() -> Self {
366        Self {
367            r#id: Default::default(),
368            r#extension: Default::default(),
369            r#modifier_extension: Default::default(),
370            r#substance_definition: Default::default(),
371            r#type: Box::new(super::super::types::CodeableConcept {
372                id: Some("$invalid".to_string()),
373                ..Default::default()
374            }),
375            r#is_defining: Default::default(),
376            r#amount: Default::default(),
377            r#ratio_high_limit_amount: Default::default(),
378            r#comparator: Default::default(),
379            r#source: Default::default(),
380        }
381    }
382}
383#[doc = "Material or taxonomic/anatomical source for the substance."]
384#[derive(Debug, Clone, PartialEq)]
385pub struct SubstanceDefinitionSourceMaterial {
386    #[doc = "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces."]
387    pub r#id: Option<std::string::String>,
388    #[doc = "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
389    pub r#extension: Vec<super::super::types::Extension>,
390    #[doc = "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
391    pub r#modifier_extension: Vec<super::super::types::Extension>,
392    #[doc = "A classification that provides the origin of the raw material. Example: cat hair would be an Animal source type."]
393    pub r#type: Option<Box<super::super::types::CodeableConcept>>,
394    #[doc = "The genus of an organism, typically referring to the Latin epithet of the genus element of the plant/animal scientific name."]
395    pub r#genus: Option<Box<super::super::types::CodeableConcept>>,
396    #[doc = "The species of an organism, typically referring to the Latin epithet of the species of the plant/animal."]
397    pub r#species: Option<Box<super::super::types::CodeableConcept>>,
398    #[doc = "An anatomical origin of the source material within an organism."]
399    pub r#part: Option<Box<super::super::types::CodeableConcept>>,
400    #[doc = "The country or countries where the material is harvested."]
401    pub r#country_of_origin: Vec<super::super::types::CodeableConcept>,
402}
403#[allow(clippy::derivable_impls)]
404impl Default for SubstanceDefinitionSourceMaterial {
405    fn default() -> Self {
406        Self {
407            r#id: Default::default(),
408            r#extension: Default::default(),
409            r#modifier_extension: Default::default(),
410            r#type: Default::default(),
411            r#genus: Default::default(),
412            r#species: Default::default(),
413            r#part: Default::default(),
414            r#country_of_origin: Default::default(),
415        }
416    }
417}
418#[doc = "The detailed description of a substance, typically at a level beyond what is used for prescribing."]
419#[derive(Debug, Clone, PartialEq)]
420pub struct SubstanceDefinition {
421    #[doc = "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes."]
422    pub r#id: Option<super::super::types::Id>,
423    #[doc = "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource."]
424    pub r#meta: Option<Box<super::super::types::Meta>>,
425    #[doc = "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc."]
426    pub r#implicit_rules: Option<super::super::types::Uri>,
427    #[doc = "The base language in which the resource is written."]
428    pub r#language: Option<super::super::types::Code>,
429    #[doc = "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety."]
430    pub r#text: Option<Box<super::super::types::Narrative>>,
431    #[doc = "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope."]
432    pub r#contained: Vec<super::super::Resource>,
433    #[doc = "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance  applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension."]
434    pub r#extension: Vec<super::super::types::Extension>,
435    #[doc = "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself)."]
436    pub r#modifier_extension: Vec<super::super::types::Extension>,
437    #[doc = "Identifier by which this substance is known."]
438    pub r#identifier: Vec<super::super::types::Identifier>,
439    #[doc = "A business level version identifier of the substance."]
440    pub r#version: Option<super::super::types::String>,
441    #[doc = "Status of substance within the catalogue e.g. active, retired."]
442    pub r#status: Option<Box<super::super::types::CodeableConcept>>,
443    #[doc = "A high level categorization, e.g. polymer or nucleic acid, or food, chemical, biological, or a lower level such as the general types of polymer (linear or branch chain) or type of impurity (process related or contaminant)."]
444    pub r#classification: Vec<super::super::types::CodeableConcept>,
445    #[doc = "If the substance applies to human or veterinary use."]
446    pub r#domain: Option<Box<super::super::types::CodeableConcept>>,
447    #[doc = "The quality standard, established benchmark, to which substance complies (e.g. USP/NF, Ph. Eur, JP, BP, Company Standard)."]
448    pub r#grade: Vec<super::super::types::CodeableConcept>,
449    #[doc = "Textual description of the substance."]
450    pub r#description: Option<super::super::types::Markdown>,
451    #[doc = "Supporting literature."]
452    pub r#information_source: Vec<super::super::types::Reference>,
453    #[doc = "Textual comment about the substance's catalogue or registry record."]
454    pub r#note: Vec<super::super::types::Annotation>,
455    #[doc = "The entity that creates, makes, produces or fabricates the substance. This is a set of potential manufacturers but is not necessarily comprehensive."]
456    pub r#manufacturer: Vec<super::super::types::Reference>,
457    #[doc = "An entity that is the source for the substance. It may be different from the manufacturer. Supplier is synonymous to a distributor."]
458    pub r#supplier: Vec<super::super::types::Reference>,
459    #[doc = "Moiety, for structural modifications."]
460    pub r#moiety: Vec<SubstanceDefinitionMoiety>,
461    #[doc = "General specifications for this substance."]
462    pub r#property: Vec<SubstanceDefinitionProperty>,
463    #[doc = "The molecular weight or weight range (for proteins, polymers or nucleic acids)."]
464    pub r#molecular_weight: Vec<SubstanceDefinitionMolecularWeight>,
465    #[doc = "Structural information."]
466    pub r#structure: Option<SubstanceDefinitionStructure>,
467    #[doc = "Codes associated with the substance."]
468    pub r#code: Vec<SubstanceDefinitionCode>,
469    #[doc = "Names applicable to this substance."]
470    pub r#name: Vec<SubstanceDefinitionName>,
471    #[doc = "A link between this substance and another, with details of the relationship."]
472    pub r#relationship: Vec<SubstanceDefinitionRelationship>,
473    #[doc = "Material or taxonomic/anatomical source for the substance."]
474    pub r#source_material: Option<SubstanceDefinitionSourceMaterial>,
475}
476#[allow(clippy::derivable_impls)]
477impl Default for SubstanceDefinition {
478    fn default() -> Self {
479        Self {
480            r#id: Default::default(),
481            r#meta: Default::default(),
482            r#implicit_rules: Default::default(),
483            r#language: Default::default(),
484            r#text: Default::default(),
485            r#contained: Default::default(),
486            r#extension: Default::default(),
487            r#modifier_extension: Default::default(),
488            r#identifier: Default::default(),
489            r#version: Default::default(),
490            r#status: Default::default(),
491            r#classification: Default::default(),
492            r#domain: Default::default(),
493            r#grade: Default::default(),
494            r#description: Default::default(),
495            r#information_source: Default::default(),
496            r#note: Default::default(),
497            r#manufacturer: Default::default(),
498            r#supplier: Default::default(),
499            r#moiety: Default::default(),
500            r#property: Default::default(),
501            r#molecular_weight: Default::default(),
502            r#structure: Default::default(),
503            r#code: Default::default(),
504            r#name: Default::default(),
505            r#relationship: Default::default(),
506            r#source_material: Default::default(),
507        }
508    }
509}