#![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 Claim {
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>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub identifier: Vec<types::Identifier>,
pub status: Option<crate::coded::Coded<crate::r3::codes::FmStatus>>,
#[serde(rename = "_status")]
pub status_ext: Option<types::Element>,
pub r#type: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sub_type: Vec<types::CodeableConcept>,
pub r#use: Option<crate::coded::Coded<crate::r3::codes::ClaimUse>>,
#[serde(rename = "_use")]
pub use_ext: Option<types::Element>,
pub patient: Option<types::Reference>,
pub billable_period: Option<types::Period>,
pub created: Option<types::DateTime>,
#[serde(rename = "_created")]
pub created_ext: Option<types::Element>,
pub enterer: Option<types::Reference>,
pub insurer: Option<types::Reference>,
pub provider: Option<types::Reference>,
pub organization: Option<types::Reference>,
pub priority: Option<types::CodeableConcept>,
pub funds_reserve: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub related: Vec<ClaimRelated>,
pub prescription: Option<types::Reference>,
pub original_prescription: Option<types::Reference>,
pub payee: Option<ClaimPayee>,
pub referral: Option<types::Reference>,
pub facility: Option<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub care_team: Vec<ClaimCareTeam>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub information: Vec<ClaimInformation>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub diagnosis: Vec<ClaimDiagnosis>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub procedure: Vec<ClaimProcedure>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub insurance: Vec<ClaimInsurance>,
pub accident: Option<ClaimAccident>,
pub employment_impacted: Option<types::Period>,
pub hospitalization: Option<types::Period>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub item: Vec<ClaimItem>,
pub total: 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 ClaimAccident {
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 date: types::Date,
#[serde(rename = "_date")]
pub date_ext: Option<types::Element>,
pub r#type: Option<types::CodeableConcept>,
#[serde(flatten)]
pub location: Option<ClaimAccidentLocation>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ClaimCareTeam {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
pub provider: types::Reference,
pub responsible: Option<types::Boolean>,
#[serde(rename = "_responsible")]
pub responsible_ext: Option<types::Element>,
pub role: Option<types::CodeableConcept>,
pub qualification: Option<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 ClaimDiagnosis {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
#[serde(flatten)]
pub diagnosis: Option<ClaimDiagnosisDiagnosis>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub r#type: Vec<types::CodeableConcept>,
pub package_code: Option<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 ClaimInformation {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
pub category: types::CodeableConcept,
pub code: Option<types::CodeableConcept>,
#[serde(flatten)]
pub timing: Option<ClaimInformationTiming>,
#[serde(flatten)]
pub value: Option<ClaimInformationValue>,
pub reason: Option<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 ClaimInsurance {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
pub focal: types::Boolean,
#[serde(rename = "_focal")]
pub focal_ext: Option<types::Element>,
pub coverage: types::Reference,
pub business_arrangement: Option<types::String>,
#[serde(rename = "_businessArrangement")]
pub business_arrangement_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub pre_auth_ref: Vec<types::String>,
#[serde(rename = "_preAuthRef")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub pre_auth_ref_ext: Vec<Option<types::Element>>,
pub claim_response: Option<types::Reference>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ClaimItem {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub care_team_link_id: Vec<types::PositiveInt>,
#[serde(rename = "_careTeamLinkId")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub care_team_link_id_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub diagnosis_link_id: Vec<types::PositiveInt>,
#[serde(rename = "_diagnosisLinkId")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub diagnosis_link_id_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub procedure_link_id: Vec<types::PositiveInt>,
#[serde(rename = "_procedureLinkId")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub procedure_link_id_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub information_link_id: Vec<types::PositiveInt>,
#[serde(rename = "_informationLinkId")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub information_link_id_ext: Vec<Option<types::Element>>,
pub revenue: Option<types::CodeableConcept>,
pub category: Option<types::CodeableConcept>,
pub service: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub program_code: Vec<types::CodeableConcept>,
#[serde(flatten)]
pub serviced: Option<ClaimItemServiced>,
#[serde(flatten)]
pub location: Option<ClaimItemLocation>,
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 net: Option<types::Money>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub udi: Vec<types::Reference>,
pub body_site: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sub_site: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub encounter: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub detail: Vec<ClaimItemDetail>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ClaimItemDetail {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
pub revenue: Option<types::CodeableConcept>,
pub category: Option<types::CodeableConcept>,
pub service: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub program_code: Vec<types::CodeableConcept>,
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 net: Option<types::Money>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub udi: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sub_detail: Vec<ClaimItemDetailSubDetail>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ClaimItemDetailSubDetail {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
pub revenue: Option<types::CodeableConcept>,
pub category: Option<types::CodeableConcept>,
pub service: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub program_code: Vec<types::CodeableConcept>,
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 net: Option<types::Money>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub udi: Vec<types::Reference>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ClaimPayee {
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 resource_type: Option<types::Coding>,
pub party: Option<types::Reference>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ClaimProcedure {
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 sequence: types::PositiveInt,
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
pub date: Option<types::DateTime>,
#[serde(rename = "_date")]
pub date_ext: Option<types::Element>,
#[serde(flatten)]
pub procedure: Option<ClaimProcedureProcedure>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r3")]
pub struct ClaimRelated {
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 claim: Option<types::Reference>,
pub relationship: Option<types::CodeableConcept>,
pub reference: Option<types::Identifier>,
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimAccidentLocation {
#[fhir("locationAddress")]
Address(Box<types::Address>),
#[fhir("locationReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimDiagnosisDiagnosis {
#[fhir("diagnosisCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("diagnosisReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimInformationTiming {
#[fhir("timingDate")]
Date(crate::r3::choice::Primitive<types::Date>),
#[fhir("timingPeriod")]
Period(Box<types::Period>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimInformationValue {
#[fhir("valueString")]
String(crate::r3::choice::Primitive<types::String>),
#[fhir("valueQuantity")]
Quantity(Box<types::Quantity>),
#[fhir("valueAttachment")]
Attachment(Box<types::Attachment>),
#[fhir("valueReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimItemServiced {
#[fhir("servicedDate")]
Date(crate::r3::choice::Primitive<types::Date>),
#[fhir("servicedPeriod")]
Period(Box<types::Period>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimItemLocation {
#[fhir("locationCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("locationAddress")]
Address(Box<types::Address>),
#[fhir("locationReference")]
Reference(Box<types::Reference>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r3")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimProcedureProcedure {
#[fhir("procedureCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("procedureReference")]
Reference(Box<types::Reference>),
}
#[cfg(test)]
mod tests {
use super::*;
type T = Claim;
#[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);
}
}