#![allow(
unused_imports,
clippy::large_enum_variant,
clippy::too_many_lines,
clippy::doc_markdown
)]
use crate::decode::{
choice_key, required, required_list, resource_type, Choice, Decoder, FhirJson, Obj, ObjWriter,
};
use crate::json::Json;
use crate::primitive::{Decimal, Kind, Primitive};
use crate::r4::*;
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Claim {
pub id: Option<String>,
pub meta: Option<Meta>,
pub implicit_rules: Option<Primitive<String>>,
pub language: Option<Primitive<String>>,
pub text: Option<Narrative>,
pub contained: Vec<Resource>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub identifier: Vec<Identifier>,
pub status: Option<Primitive<String>>,
pub type_: Option<CodeableConcept>,
pub sub_type: Option<CodeableConcept>,
pub use_: Option<Primitive<String>>,
pub patient: Option<Reference>,
pub billable_period: Option<Period>,
pub created: Option<Primitive<String>>,
pub enterer: Option<Reference>,
pub insurer: Option<Reference>,
pub provider: Option<Reference>,
pub priority: Option<CodeableConcept>,
pub funds_reserve: Option<CodeableConcept>,
pub related: Vec<ClaimRelated>,
pub prescription: Option<Reference>,
pub original_prescription: Option<Reference>,
pub payee: Option<ClaimPayee>,
pub referral: Option<Reference>,
pub facility: Option<Reference>,
pub care_team: Vec<ClaimCareTeam>,
pub supporting_info: Vec<ClaimSupportingInfo>,
pub diagnosis: Vec<ClaimDiagnosis>,
pub procedure: Vec<ClaimProcedure>,
pub insurance: Vec<ClaimInsurance>,
pub accident: Option<ClaimAccident>,
pub item: Vec<ClaimItem>,
pub total: Option<Money>,
}
#[cfg(feature = "financial")]
impl FhirJson for Claim {
const TYPE_NAME: &'static str = "Claim";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "Claim");
let r = Claim {
id: o.string(d, "id"),
meta: o.one(d, "meta"),
implicit_rules: o.prim(d, "implicitRules", Kind::Uri),
language: o.prim(d, "language", Kind::Code),
text: o.one(d, "text"),
contained: o.list(d, "contained"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
identifier: o.list(d, "identifier"),
status: o.prim(d, "status", Kind::Code),
type_: o.one(d, "type"),
sub_type: o.one(d, "subType"),
use_: o.prim(d, "use", Kind::Code),
patient: o.one(d, "patient"),
billable_period: o.one(d, "billablePeriod"),
created: o.prim(d, "created", Kind::DateTime),
enterer: o.one(d, "enterer"),
insurer: o.one(d, "insurer"),
provider: o.one(d, "provider"),
priority: o.one(d, "priority"),
funds_reserve: o.one(d, "fundsReserve"),
related: o.list(d, "related"),
prescription: o.one(d, "prescription"),
original_prescription: o.one(d, "originalPrescription"),
payee: o.one(d, "payee"),
referral: o.one(d, "referral"),
facility: o.one(d, "facility"),
care_team: o.list(d, "careTeam"),
supporting_info: o.list(d, "supportingInfo"),
diagnosis: o.list(d, "diagnosis"),
procedure: o.list(d, "procedure"),
insurance: o.list(d, "insurance"),
accident: o.one(d, "accident"),
item: o.list(d, "item"),
total: o.one(d, "total"),
};
required(d, "status", &r.status);
required(d, "type", &r.type_);
required(d, "use", &r.use_);
required(d, "patient", &r.patient);
required(d, "created", &r.created);
required(d, "provider", &r.provider);
required(d, "priority", &r.priority);
required_list(d, "insurance", &r.insurance, 1);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw("resourceType", Json::String("Claim".into()));
w.string("id", &self.id);
w.one("meta", &self.meta);
w.prim("implicitRules", &self.implicit_rules);
w.prim("language", &self.language);
w.one("text", &self.text);
w.list("contained", &self.contained);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.list("identifier", &self.identifier);
w.prim("status", &self.status);
w.one("type", &self.type_);
w.one("subType", &self.sub_type);
w.prim("use", &self.use_);
w.one("patient", &self.patient);
w.one("billablePeriod", &self.billable_period);
w.prim("created", &self.created);
w.one("enterer", &self.enterer);
w.one("insurer", &self.insurer);
w.one("provider", &self.provider);
w.one("priority", &self.priority);
w.one("fundsReserve", &self.funds_reserve);
w.list("related", &self.related);
w.one("prescription", &self.prescription);
w.one("originalPrescription", &self.original_prescription);
w.one("payee", &self.payee);
w.one("referral", &self.referral);
w.one("facility", &self.facility);
w.list("careTeam", &self.care_team);
w.list("supportingInfo", &self.supporting_info);
w.list("diagnosis", &self.diagnosis);
w.list("procedure", &self.procedure);
w.list("insurance", &self.insurance);
w.one("accident", &self.accident);
w.list("item", &self.item);
w.one("total", &self.total);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimRelated {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub claim: Option<Reference>,
pub relationship: Option<CodeableConcept>,
pub reference: Option<Identifier>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimRelated {
const TYPE_NAME: &'static str = "ClaimRelated";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimRelated {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
claim: o.one(d, "claim"),
relationship: o.one(d, "relationship"),
reference: o.one(d, "reference"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("claim", &self.claim);
w.one("relationship", &self.relationship);
w.one("reference", &self.reference);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimPayee {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub party: Option<Reference>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimPayee {
const TYPE_NAME: &'static str = "ClaimPayee";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimPayee {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
party: o.one(d, "party"),
};
required(d, "type", &r.type_);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("type", &self.type_);
w.one("party", &self.party);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimCareTeam {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub provider: Option<Reference>,
pub responsible: Option<Primitive<bool>>,
pub role: Option<CodeableConcept>,
pub qualification: Option<CodeableConcept>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimCareTeam {
const TYPE_NAME: &'static str = "ClaimCareTeam";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimCareTeam {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
provider: o.one(d, "provider"),
responsible: o.prim(d, "responsible", Kind::Boolean),
role: o.one(d, "role"),
qualification: o.one(d, "qualification"),
};
required(d, "sequence", &r.sequence);
required(d, "provider", &r.provider);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.one("provider", &self.provider);
w.prim("responsible", &self.responsible);
w.one("role", &self.role);
w.one("qualification", &self.qualification);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimSupportingInfo {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub category: Option<CodeableConcept>,
pub code: Option<CodeableConcept>,
pub timing: Option<ClaimSupportingInfoTiming>,
pub value: Option<ClaimSupportingInfoValue>,
pub reason: Option<CodeableConcept>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimSupportingInfo {
const TYPE_NAME: &'static str = "ClaimSupportingInfo";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimSupportingInfo {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
category: o.one(d, "category"),
code: o.one(d, "code"),
timing: o.choice(d, "timing"),
value: o.choice(d, "value"),
reason: o.one(d, "reason"),
};
required(d, "sequence", &r.sequence);
required(d, "category", &r.category);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.one("category", &self.category);
w.one("code", &self.code);
w.choice("timing", &self.timing);
w.choice("value", &self.value);
w.one("reason", &self.reason);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimDiagnosis {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub diagnosis: Option<ClaimDiagnosisDiagnosis>,
pub type_: Vec<CodeableConcept>,
pub on_admission: Option<CodeableConcept>,
pub package_code: Option<CodeableConcept>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimDiagnosis {
const TYPE_NAME: &'static str = "ClaimDiagnosis";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimDiagnosis {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
diagnosis: o.choice(d, "diagnosis"),
type_: o.list(d, "type"),
on_admission: o.one(d, "onAdmission"),
package_code: o.one(d, "packageCode"),
};
required(d, "sequence", &r.sequence);
required(d, "diagnosis[x]", &r.diagnosis);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.choice("diagnosis", &self.diagnosis);
w.list("type", &self.type_);
w.one("onAdmission", &self.on_admission);
w.one("packageCode", &self.package_code);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimProcedure {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub type_: Vec<CodeableConcept>,
pub date: Option<Primitive<String>>,
pub procedure: Option<ClaimProcedureProcedure>,
pub udi: Vec<Reference>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimProcedure {
const TYPE_NAME: &'static str = "ClaimProcedure";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimProcedure {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
type_: o.list(d, "type"),
date: o.prim(d, "date", Kind::DateTime),
procedure: o.choice(d, "procedure"),
udi: o.list(d, "udi"),
};
required(d, "sequence", &r.sequence);
required(d, "procedure[x]", &r.procedure);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.list("type", &self.type_);
w.prim("date", &self.date);
w.choice("procedure", &self.procedure);
w.list("udi", &self.udi);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimInsurance {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub focal: Option<Primitive<bool>>,
pub identifier: Option<Identifier>,
pub coverage: Option<Reference>,
pub business_arrangement: Option<Primitive<String>>,
pub pre_auth_ref: Vec<Primitive<String>>,
pub claim_response: Option<Reference>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimInsurance {
const TYPE_NAME: &'static str = "ClaimInsurance";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimInsurance {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
focal: o.prim(d, "focal", Kind::Boolean),
identifier: o.one(d, "identifier"),
coverage: o.one(d, "coverage"),
business_arrangement: o.prim(d, "businessArrangement", Kind::String),
pre_auth_ref: o.prim_list(d, "preAuthRef", Kind::String),
claim_response: o.one(d, "claimResponse"),
};
required(d, "sequence", &r.sequence);
required(d, "focal", &r.focal);
required(d, "coverage", &r.coverage);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.prim("focal", &self.focal);
w.one("identifier", &self.identifier);
w.one("coverage", &self.coverage);
w.prim("businessArrangement", &self.business_arrangement);
w.prim_list("preAuthRef", &self.pre_auth_ref);
w.one("claimResponse", &self.claim_response);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimAccident {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub date: Option<Primitive<String>>,
pub type_: Option<CodeableConcept>,
pub location: Option<ClaimAccidentLocation>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimAccident {
const TYPE_NAME: &'static str = "ClaimAccident";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimAccident {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
date: o.prim(d, "date", Kind::Date),
type_: o.one(d, "type"),
location: o.choice(d, "location"),
};
required(d, "date", &r.date);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("date", &self.date);
w.one("type", &self.type_);
w.choice("location", &self.location);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimItem {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub care_team_sequence: Vec<Primitive<i32>>,
pub diagnosis_sequence: Vec<Primitive<i32>>,
pub procedure_sequence: Vec<Primitive<i32>>,
pub information_sequence: Vec<Primitive<i32>>,
pub revenue: Option<CodeableConcept>,
pub category: Option<CodeableConcept>,
pub product_or_service: Option<CodeableConcept>,
pub modifier: Vec<CodeableConcept>,
pub program_code: Vec<CodeableConcept>,
pub serviced: Option<ClaimItemServiced>,
pub location: Option<ClaimItemLocation>,
pub quantity: Option<Quantity>,
pub unit_price: Option<Money>,
pub factor: Option<Primitive<Decimal>>,
pub net: Option<Money>,
pub udi: Vec<Reference>,
pub body_site: Option<CodeableConcept>,
pub sub_site: Vec<CodeableConcept>,
pub encounter: Vec<Reference>,
pub detail: Vec<ClaimItemDetail>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimItem {
const TYPE_NAME: &'static str = "ClaimItem";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimItem {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
care_team_sequence: o.prim_list(d, "careTeamSequence", Kind::PositiveInt),
diagnosis_sequence: o.prim_list(d, "diagnosisSequence", Kind::PositiveInt),
procedure_sequence: o.prim_list(d, "procedureSequence", Kind::PositiveInt),
information_sequence: o.prim_list(d, "informationSequence", Kind::PositiveInt),
revenue: o.one(d, "revenue"),
category: o.one(d, "category"),
product_or_service: o.one(d, "productOrService"),
modifier: o.list(d, "modifier"),
program_code: o.list(d, "programCode"),
serviced: o.choice(d, "serviced"),
location: o.choice(d, "location"),
quantity: o.one(d, "quantity"),
unit_price: o.one(d, "unitPrice"),
factor: o.prim(d, "factor", Kind::Decimal),
net: o.one(d, "net"),
udi: o.list(d, "udi"),
body_site: o.one(d, "bodySite"),
sub_site: o.list(d, "subSite"),
encounter: o.list(d, "encounter"),
detail: o.list(d, "detail"),
};
required(d, "sequence", &r.sequence);
required(d, "productOrService", &r.product_or_service);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.prim_list("careTeamSequence", &self.care_team_sequence);
w.prim_list("diagnosisSequence", &self.diagnosis_sequence);
w.prim_list("procedureSequence", &self.procedure_sequence);
w.prim_list("informationSequence", &self.information_sequence);
w.one("revenue", &self.revenue);
w.one("category", &self.category);
w.one("productOrService", &self.product_or_service);
w.list("modifier", &self.modifier);
w.list("programCode", &self.program_code);
w.choice("serviced", &self.serviced);
w.choice("location", &self.location);
w.one("quantity", &self.quantity);
w.one("unitPrice", &self.unit_price);
w.prim("factor", &self.factor);
w.one("net", &self.net);
w.list("udi", &self.udi);
w.one("bodySite", &self.body_site);
w.list("subSite", &self.sub_site);
w.list("encounter", &self.encounter);
w.list("detail", &self.detail);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimItemDetail {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub revenue: Option<CodeableConcept>,
pub category: Option<CodeableConcept>,
pub product_or_service: Option<CodeableConcept>,
pub modifier: Vec<CodeableConcept>,
pub program_code: Vec<CodeableConcept>,
pub quantity: Option<Quantity>,
pub unit_price: Option<Money>,
pub factor: Option<Primitive<Decimal>>,
pub net: Option<Money>,
pub udi: Vec<Reference>,
pub sub_detail: Vec<ClaimItemDetailSubDetail>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimItemDetail {
const TYPE_NAME: &'static str = "ClaimItemDetail";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimItemDetail {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
revenue: o.one(d, "revenue"),
category: o.one(d, "category"),
product_or_service: o.one(d, "productOrService"),
modifier: o.list(d, "modifier"),
program_code: o.list(d, "programCode"),
quantity: o.one(d, "quantity"),
unit_price: o.one(d, "unitPrice"),
factor: o.prim(d, "factor", Kind::Decimal),
net: o.one(d, "net"),
udi: o.list(d, "udi"),
sub_detail: o.list(d, "subDetail"),
};
required(d, "sequence", &r.sequence);
required(d, "productOrService", &r.product_or_service);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.one("revenue", &self.revenue);
w.one("category", &self.category);
w.one("productOrService", &self.product_or_service);
w.list("modifier", &self.modifier);
w.list("programCode", &self.program_code);
w.one("quantity", &self.quantity);
w.one("unitPrice", &self.unit_price);
w.prim("factor", &self.factor);
w.one("net", &self.net);
w.list("udi", &self.udi);
w.list("subDetail", &self.sub_detail);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ClaimItemDetailSubDetail {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub revenue: Option<CodeableConcept>,
pub category: Option<CodeableConcept>,
pub product_or_service: Option<CodeableConcept>,
pub modifier: Vec<CodeableConcept>,
pub program_code: Vec<CodeableConcept>,
pub quantity: Option<Quantity>,
pub unit_price: Option<Money>,
pub factor: Option<Primitive<Decimal>>,
pub net: Option<Money>,
pub udi: Vec<Reference>,
}
#[cfg(feature = "financial")]
impl FhirJson for ClaimItemDetailSubDetail {
const TYPE_NAME: &'static str = "ClaimItemDetailSubDetail";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ClaimItemDetailSubDetail {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::PositiveInt),
revenue: o.one(d, "revenue"),
category: o.one(d, "category"),
product_or_service: o.one(d, "productOrService"),
modifier: o.list(d, "modifier"),
program_code: o.list(d, "programCode"),
quantity: o.one(d, "quantity"),
unit_price: o.one(d, "unitPrice"),
factor: o.prim(d, "factor", Kind::Decimal),
net: o.one(d, "net"),
udi: o.list(d, "udi"),
};
required(d, "sequence", &r.sequence);
required(d, "productOrService", &r.product_or_service);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("sequence", &self.sequence);
w.one("revenue", &self.revenue);
w.one("category", &self.category);
w.one("productOrService", &self.product_or_service);
w.list("modifier", &self.modifier);
w.list("programCode", &self.program_code);
w.one("quantity", &self.quantity);
w.one("unitPrice", &self.unit_price);
w.prim("factor", &self.factor);
w.one("net", &self.net);
w.list("udi", &self.udi);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum ClaimSupportingInfoTiming {
Date(Primitive<String>),
Period(Period),
}
#[cfg(feature = "financial")]
impl Choice for ClaimSupportingInfoTiming {
const TYPES: &'static [&'static str] = &["date", "Period"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"Period" => o.one(d, key).map(Self::Period),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum ClaimSupportingInfoValue {
Boolean(Primitive<bool>),
String(Primitive<String>),
Quantity(Quantity),
Attachment(Attachment),
Reference(Reference),
}
#[cfg(feature = "financial")]
impl Choice for ClaimSupportingInfoValue {
const TYPES: &'static [&'static str] =
&["boolean", "string", "Quantity", "Attachment", "Reference"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"boolean" => o.prim(d, key, Kind::Boolean).map(Self::Boolean),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"Quantity" => o.one(d, key).map(Self::Quantity),
"Attachment" => o.one(d, key).map(Self::Attachment),
"Reference" => o.one(d, key).map(Self::Reference),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Boolean(v) => w.prim_value(&choice_key(base, "boolean"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
Self::Attachment(v) => w.value(&choice_key(base, "Attachment"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum ClaimDiagnosisDiagnosis {
CodeableConcept(CodeableConcept),
Reference(Reference),
}
#[cfg(feature = "financial")]
impl Choice for ClaimDiagnosisDiagnosis {
const TYPES: &'static [&'static str] = &["CodeableConcept", "Reference"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Reference" => o.one(d, key).map(Self::Reference),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum ClaimProcedureProcedure {
CodeableConcept(CodeableConcept),
Reference(Reference),
}
#[cfg(feature = "financial")]
impl Choice for ClaimProcedureProcedure {
const TYPES: &'static [&'static str] = &["CodeableConcept", "Reference"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Reference" => o.one(d, key).map(Self::Reference),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum ClaimAccidentLocation {
Address(Address),
Reference(Reference),
}
#[cfg(feature = "financial")]
impl Choice for ClaimAccidentLocation {
const TYPES: &'static [&'static str] = &["Address", "Reference"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Address" => o.one(d, key).map(Self::Address),
"Reference" => o.one(d, key).map(Self::Reference),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Address(v) => w.value(&choice_key(base, "Address"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum ClaimItemServiced {
Date(Primitive<String>),
Period(Period),
}
#[cfg(feature = "financial")]
impl Choice for ClaimItemServiced {
const TYPES: &'static [&'static str] = &["date", "Period"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"Period" => o.one(d, key).map(Self::Period),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum ClaimItemLocation {
CodeableConcept(CodeableConcept),
Address(Address),
Reference(Reference),
}
#[cfg(feature = "financial")]
impl Choice for ClaimItemLocation {
const TYPES: &'static [&'static str] = &["CodeableConcept", "Address", "Reference"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Address" => o.one(d, key).map(Self::Address),
"Reference" => o.one(d, key).map(Self::Reference),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Address(v) => w.value(&choice_key(base, "Address"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}