#![allow(unused_imports)]
use crate::r3::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("r3")]
pub struct Contract {
pub id: Option<types::Id>,
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 identifier: Option<types::Identifier>,
pub status: Option<crate::coded::Coded<crate::r3::codes::ContractStatus>>,
#[serde(rename = "_status")]
pub status_ext: Option<types::Element>,
pub issued: Option<types::DateTime>,
#[serde(rename = "_issued")]
pub issued_ext: Option<types::Element>,
pub applies: Option<types::Period>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub subject: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub topic: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub authority: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub domain: Vec<types::Reference>,
pub r#type: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sub_type: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub action: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub action_reason: Vec<types::CodeableConcept>,
pub decision_type: Option<types::CodeableConcept>,
pub content_derivative: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub security_label: Vec<types::Coding>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub agent: Vec<ContractAgent>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub signer: Vec<ContractSigner>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub valued_item: Vec<ContractValuedItem>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub term: Vec<ContractTerm>,
#[serde(flatten)]
pub binding: Option<ContractBinding>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub friendly: Vec<ContractFriendly>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub legal: Vec<ContractLegal>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub rule: Vec<ContractRule>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractAgent {
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 actor: types::Reference,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub role: Vec<types::CodeableConcept>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractFriendly {
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 content: Option<ContractFriendlyContent>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractLegal {
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 content: Option<ContractLegalContent>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractRule {
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 content: Option<ContractRuleContent>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractSigner {
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::Coding,
pub party: types::Reference,
pub signature: ::vec1::Vec1<types::Signature>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractTerm {
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 identifier: Option<types::Identifier>,
pub issued: Option<types::DateTime>,
#[serde(rename = "_issued")]
pub issued_ext: Option<types::Element>,
pub applies: Option<types::Period>,
pub r#type: Option<types::CodeableConcept>,
pub sub_type: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub topic: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub action: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub action_reason: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub security_label: Vec<types::Coding>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub agent: Vec<ContractTermAgent>,
pub text: Option<types::String>,
#[serde(rename = "_text")]
pub text_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub valued_item: Vec<ContractTermValuedItem>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub group: Vec<ContractTerm>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractTermAgent {
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 actor: types::Reference,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub role: Vec<types::CodeableConcept>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractTermValuedItem {
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 entity: Option<ContractTermValuedItemEntity>,
pub identifier: Option<types::Identifier>,
pub effective_time: Option<types::DateTime>,
#[serde(rename = "_effectiveTime")]
pub effective_time_ext: Option<types::Element>,
pub quantity: Option<types::Quantity>,
pub unit_price: Option<types::Money>,
pub factor: Option<types::Decimal>,
#[serde(rename = "_factor")]
pub factor_ext: Option<types::Element>,
pub points: Option<types::Decimal>,
#[serde(rename = "_points")]
pub points_ext: Option<types::Element>,
pub net: Option<types::Money>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ContractValuedItem {
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 entity: Option<ContractValuedItemEntity>,
pub identifier: Option<types::Identifier>,
pub effective_time: Option<types::DateTime>,
#[serde(rename = "_effectiveTime")]
pub effective_time_ext: Option<types::Element>,
pub quantity: Option<types::Quantity>,
pub unit_price: Option<types::Money>,
pub factor: Option<types::Decimal>,
#[serde(rename = "_factor")]
pub factor_ext: Option<types::Element>,
pub points: Option<types::Decimal>,
#[serde(rename = "_points")]
pub points_ext: Option<types::Element>,
pub net: Option<types::Money>,
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ContractBinding {
#[fhir("bindingAttachment")]
Attachment(Box<types::Attachment>),
#[fhir("bindingReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ContractFriendlyContent {
#[fhir("contentAttachment")]
Attachment(Box<types::Attachment>),
#[fhir("contentReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ContractLegalContent {
#[fhir("contentAttachment")]
Attachment(Box<types::Attachment>),
#[fhir("contentReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ContractRuleContent {
#[fhir("contentAttachment")]
Attachment(Box<types::Attachment>),
#[fhir("contentReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ContractTermValuedItemEntity {
#[fhir("entityCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("entityReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ContractValuedItemEntity {
#[fhir("entityCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("entityReference")]
Reference(Box<types::Reference>),
}
#[cfg(test)]
mod tests {
use super::*;
type T = Contract;
#[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);
}
}