#![allow(unused_imports)]
use crate::r4::types;
use ::serde::{Deserialize, Serialize};
use fhir_derive_macros::{Builder, Validate};
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate, Builder)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledge {
pub id: Option<types::String>,
pub meta: Option<types::Meta>,
pub implicit_rules: Option<types::Uri>,
#[serde(rename = "_implicitRules")]
pub implicit_rules_ext: Option<types::Element>,
pub language: Option<types::Code>,
#[serde(rename = "_language")]
pub language_ext: Option<types::Element>,
pub text: Option<types::Narrative>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub contained: Vec<::serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub code: Option<types::CodeableConcept>,
pub status: Option<crate::coded::Coded<crate::r4::codes::MedicationknowledgeStatus>>,
#[serde(rename = "_status")]
pub status_ext: Option<types::Element>,
pub manufacturer: Option<types::Reference>,
pub dose_form: Option<types::CodeableConcept>,
pub amount: Option<types::Quantity>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub synonym: Vec<types::String>,
#[serde(rename = "_synonym")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub synonym_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub related_medication_knowledge: Vec<MedicationKnowledgeRelatedMedicationKnowledge>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub associated_medication: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub product_type: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub monograph: Vec<MedicationKnowledgeMonograph>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub ingredient: Vec<MedicationKnowledgeIngredient>,
pub preparation_instruction: Option<types::Markdown>,
#[serde(rename = "_preparationInstruction")]
pub preparation_instruction_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub intended_route: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub cost: Vec<MedicationKnowledgeCost>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub monitoring_program: Vec<MedicationKnowledgeMonitoringProgram>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub administration_guidelines: Vec<MedicationKnowledgeAdministrationGuidelines>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub medicine_classification: Vec<MedicationKnowledgeMedicineClassification>,
pub packaging: Option<MedicationKnowledgePackaging>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub drug_characteristic: Vec<MedicationKnowledgeDrugCharacteristic>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub contraindication: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub regulatory: Vec<MedicationKnowledgeRegulatory>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub kinetics: Vec<MedicationKnowledgeKinetics>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeAdministrationGuidelines {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub dosage: Vec<MedicationKnowledgeAdministrationGuidelinesDosage>,
#[serde(flatten)]
pub indication: Option<MedicationKnowledgeAdministrationGuidelinesIndication>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub patient_characteristics: Vec<MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeAdministrationGuidelinesDosage {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: types::CodeableConcept,
pub dosage: ::vec1::Vec1<types::Dosage>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
#[serde(flatten)]
pub characteristic: Option<MedicationKnowledgeAdministrationGuidelinesPatientCharacteristicsCharacteristic>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub value: Vec<types::String>,
#[serde(rename = "_value")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub value_ext: Vec<Option<types::Element>>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeCost {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: types::CodeableConcept,
pub source: Option<types::String>,
#[serde(rename = "_source")]
pub source_ext: Option<types::Element>,
pub cost: types::Money,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeDrugCharacteristic {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: Option<types::CodeableConcept>,
#[serde(flatten)]
pub value: Option<MedicationKnowledgeDrugCharacteristicValue>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeIngredient {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
#[serde(flatten)]
pub item: Option<MedicationKnowledgeIngredientItem>,
pub is_active: Option<types::Boolean>,
#[serde(rename = "_isActive")]
pub is_active_ext: Option<types::Element>,
pub strength: Option<types::Ratio>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeKinetics {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub area_under_curve: Vec<types::Quantity>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub lethal_dose_50: Vec<types::Quantity>,
pub half_life_period: Option<types::Duration>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeMedicineClassification {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: types::CodeableConcept,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub classification: Vec<types::CodeableConcept>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeMonitoringProgram {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: Option<types::CodeableConcept>,
pub name: Option<types::String>,
#[serde(rename = "_name")]
pub name_ext: Option<types::Element>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeMonograph {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: Option<types::CodeableConcept>,
pub source: Option<types::Reference>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgePackaging {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: Option<types::CodeableConcept>,
pub quantity: Option<types::Quantity>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeRegulatory {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub regulatory_authority: types::Reference,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub substitution: Vec<MedicationKnowledgeRegulatorySubstitution>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub schedule: Vec<MedicationKnowledgeRegulatorySchedule>,
pub max_dispense: Option<MedicationKnowledgeRegulatoryMaxDispense>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeRegulatoryMaxDispense {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub quantity: types::Quantity,
pub period: Option<types::Duration>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeRegulatorySchedule {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub schedule: types::CodeableConcept,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeRegulatorySubstitution {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: types::CodeableConcept,
pub allowed: types::Boolean,
#[serde(rename = "_allowed")]
pub allowed_ext: Option<types::Element>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct MedicationKnowledgeRelatedMedicationKnowledge {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub r#type: types::CodeableConcept,
pub reference: ::vec1::Vec1<types::Reference>,
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r4")]
#[allow(clippy::large_enum_variant)]
pub enum MedicationKnowledgeAdministrationGuidelinesIndication {
#[fhir("indicationCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("indicationReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r4")]
#[allow(clippy::large_enum_variant)]
pub enum MedicationKnowledgeAdministrationGuidelinesPatientCharacteristicsCharacteristic {
#[fhir("characteristicCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("characteristicQuantity")]
Quantity(Box<types::Quantity>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r4")]
#[allow(clippy::large_enum_variant)]
pub enum MedicationKnowledgeDrugCharacteristicValue {
#[fhir("valueCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("valueString")]
String(crate::r4::choice::Primitive<types::String>),
#[fhir("valueQuantity")]
Quantity(Box<types::Quantity>),
#[fhir("valueBase64Binary")]
Base64Binary(crate::r4::choice::Primitive<types::Base64Binary>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r4")]
#[allow(clippy::large_enum_variant)]
pub enum MedicationKnowledgeIngredientItem {
#[fhir("itemCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("itemReference")]
Reference(Box<types::Reference>),
}
#[cfg(test)]
mod tests {
use super::*;
type T = MedicationKnowledge;
#[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);
}
}