#![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 ClaimResponse {
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>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub identifier: Vec<types::Identifier>,
pub status: crate::coded::Coded<crate::r4::codes::FmStatus>,
#[serde(rename = "_status")]
pub status_ext: Option<types::Element>,
pub r#type: types::CodeableConcept,
pub sub_type: Option<types::CodeableConcept>,
pub r#use: crate::coded::Coded<crate::r4::codes::ClaimUse>,
#[serde(rename = "_use")]
pub use_ext: Option<types::Element>,
pub patient: types::Reference,
pub created: types::DateTime,
#[serde(rename = "_created")]
pub created_ext: Option<types::Element>,
pub insurer: types::Reference,
pub requestor: Option<types::Reference>,
pub request: Option<types::Reference>,
pub outcome: crate::coded::Coded<crate::r4::codes::RemittanceOutcome>,
#[serde(rename = "_outcome")]
pub outcome_ext: Option<types::Element>,
pub disposition: Option<types::String>,
#[serde(rename = "_disposition")]
pub disposition_ext: Option<types::Element>,
pub pre_auth_ref: Option<types::String>,
#[serde(rename = "_preAuthRef")]
pub pre_auth_ref_ext: Option<types::Element>,
pub pre_auth_period: Option<types::Period>,
pub payee_type: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub item: Vec<ClaimResponseItem>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub add_item: Vec<ClaimResponseAddItem>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub adjudication: Vec<ClaimResponseItemAdjudication>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub total: Vec<ClaimResponseTotal>,
pub payment: Option<ClaimResponsePayment>,
pub funds_reserve: Option<types::CodeableConcept>,
pub form_code: Option<types::CodeableConcept>,
pub form: Option<types::Attachment>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub process_note: Vec<ClaimResponseProcessNote>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub communication_request: Vec<types::Reference>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub insurance: Vec<ClaimResponseInsurance>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub error: Vec<ClaimResponseError>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseAddItem {
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 item_sequence: Vec<types::PositiveInt>,
#[serde(rename = "_itemSequence")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub item_sequence_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub detail_sequence: Vec<types::PositiveInt>,
#[serde(rename = "_detailSequence")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub detail_sequence_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub subdetail_sequence: Vec<types::PositiveInt>,
#[serde(rename = "_subdetailSequence")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub subdetail_sequence_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub provider: Vec<types::Reference>,
pub product_or_service: 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<ClaimResponseAddItemServiced>,
#[serde(flatten)]
pub location: Option<ClaimResponseAddItemLocation>,
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>,
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 note_number: Vec<types::PositiveInt>,
#[serde(rename = "_noteNumber")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number_ext: Vec<Option<types::Element>>,
pub adjudication: ::vec1::Vec1<ClaimResponseItemAdjudication>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub detail: Vec<ClaimResponseAddItemDetail>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseAddItemDetail {
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 product_or_service: types::CodeableConcept,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier: 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 note_number: Vec<types::PositiveInt>,
#[serde(rename = "_noteNumber")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number_ext: Vec<Option<types::Element>>,
pub adjudication: ::vec1::Vec1<ClaimResponseItemAdjudication>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sub_detail: Vec<ClaimResponseAddItemDetailSubDetail>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseAddItemDetailSubDetail {
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 product_or_service: types::CodeableConcept,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier: 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 note_number: Vec<types::PositiveInt>,
#[serde(rename = "_noteNumber")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number_ext: Vec<Option<types::Element>>,
pub adjudication: ::vec1::Vec1<ClaimResponseItemAdjudication>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseError {
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 item_sequence: Option<types::PositiveInt>,
#[serde(rename = "_itemSequence")]
pub item_sequence_ext: Option<types::Element>,
pub detail_sequence: Option<types::PositiveInt>,
#[serde(rename = "_detailSequence")]
pub detail_sequence_ext: Option<types::Element>,
pub sub_detail_sequence: Option<types::PositiveInt>,
#[serde(rename = "_subDetailSequence")]
pub sub_detail_sequence_ext: Option<types::Element>,
pub code: 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 ClaimResponseInsurance {
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>,
pub claim_response: Option<types::Reference>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseItem {
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 item_sequence: types::PositiveInt,
#[serde(rename = "_itemSequence")]
pub item_sequence_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number: Vec<types::PositiveInt>,
#[serde(rename = "_noteNumber")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number_ext: Vec<Option<types::Element>>,
pub adjudication: ::vec1::Vec1<ClaimResponseItemAdjudication>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub detail: Vec<ClaimResponseItemDetail>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseItemAdjudication {
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 category: types::CodeableConcept,
pub reason: Option<types::CodeableConcept>,
pub amount: Option<types::Money>,
pub value: Option<types::Decimal>,
#[serde(rename = "_value")]
pub value_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 ClaimResponseItemDetail {
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 detail_sequence: types::PositiveInt,
#[serde(rename = "_detailSequence")]
pub detail_sequence_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number: Vec<types::PositiveInt>,
#[serde(rename = "_noteNumber")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number_ext: Vec<Option<types::Element>>,
pub adjudication: ::vec1::Vec1<ClaimResponseItemAdjudication>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub sub_detail: Vec<ClaimResponseItemDetailSubDetail>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseItemDetailSubDetail {
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 sub_detail_sequence: types::PositiveInt,
#[serde(rename = "_subDetailSequence")]
pub sub_detail_sequence_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number: Vec<types::PositiveInt>,
#[serde(rename = "_noteNumber")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub note_number_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub adjudication: Vec<ClaimResponseItemAdjudication>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponsePayment {
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 adjustment: Option<types::Money>,
pub adjustment_reason: Option<types::CodeableConcept>,
pub date: Option<types::Date>,
#[serde(rename = "_date")]
pub date_ext: Option<types::Element>,
pub amount: types::Money,
pub identifier: Option<types::Identifier>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct ClaimResponseProcessNote {
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 number: Option<types::PositiveInt>,
#[serde(rename = "_number")]
pub number_ext: Option<types::Element>,
pub r#type: Option<crate::coded::Coded<crate::r4::codes::NoteType>>,
#[serde(rename = "_type")]
pub type_ext: Option<types::Element>,
pub text: types::String,
#[serde(rename = "_text")]
pub text_ext: Option<types::Element>,
pub language: Option<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 ClaimResponseTotal {
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 category: types::CodeableConcept,
pub amount: types::Money,
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r4")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimResponseAddItemServiced {
#[fhir("servicedDate")]
Date(crate::r4::choice::Primitive<types::Date>),
#[fhir("servicedPeriod")]
Period(Box<types::Period>),
}
#[derive(Debug, Clone, PartialEq, Eq, fhir_derive_macros::FhirChoice, Validate)]
#[fhir_version("r4")]
#[allow(clippy::large_enum_variant)]
pub enum ClaimResponseAddItemLocation {
#[fhir("locationCodeableConcept")]
CodeableConcept(Box<types::CodeableConcept>),
#[fhir("locationAddress")]
Address(Box<types::Address>),
#[fhir("locationReference")]
Reference(Box<types::Reference>),
}
#[cfg(test)]
mod tests {
use super::*;
type T = ClaimResponse;
#[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);
}
}