use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use crate::common::{MetaData, NtRef};
#[skip_serializing_none]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Default)]
#[serde(rename_all = "PascalCase", default)]
#[cfg_attr(
feature = "builder",
derive(Builder),
builder(default, build_fn(error = "QBTypeError"), setter(into, strip_option))
)]
pub struct TaxRate {
pub id: Option<String>,
pub sync_token: Option<String>,
pub name: Option<String>,
pub rate_value: Option<f64>,
pub active: Option<bool>,
pub description: Option<String>,
pub agency_ref: Option<NtRef>,
pub meta_data: Option<MetaData>,
pub display_type: Option<String>,
pub tax_return_line_ref: Option<NtRef>,
pub effective_tax_rate: Option<EffectiveTaxRate>,
pub special_tax_type: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct EffectiveTaxRate {
pub rate_value: f64,
pub end_date: NaiveDateTime,
pub effective_date: NaiveDateTime,
}