use serde::{Deserialize, Serialize};

/// Informacja o stawce VAT (VatRateInfo).
///
/// Agregacja kwot netto, podatku i brutto dla danej stawki VAT.
/// Typ aplikacyjny (nie XSD) - służy do wygodnego grupowania pól P_13_x / P_14_x.
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[derive(Debug, Default, Clone, Deserialize, Serialize)]
pub struct VatRateInfo {
    /// Stawka VAT procentowo.
    pub rate: f64,
    /// Suma wartości sprzedaży netto dla tej stawki (odpowiednik P_13_x).
    #[serde(rename = "netAmount", alias = "net_amount")]
    pub net_amount: f64,
    /// Kwota podatku dla tej stawki (odpowiednik P_14_x).
    #[serde(rename = "taxAmount", alias = "tax_amount")]
    pub tax_amount: f64,
    /// Wartość brutto dla tej stawki (netto + podatek).
    #[serde(rename = "grossAmount", alias = "gross_amount")]
    pub gross_amount: f64,
    /// Kod stawki podatkowej FA(3) (TStawkaPodatku).
    ///
    /// Opcjonalna reprezentacja kodu stawki: 23, 22, 8, 7, 5, 0, zw, oo, np.
    #[serde(
        rename = "taxRateCode",
        alias = "tax_rate_code",
        skip_serializing_if = "Option::is_none"
    )]
    pub tax_rate_code: Option<String>,
}
