tackler_api/reports/
balance_report.rs

1/*
2 * Tackler-NG 2025
3 * SPDX-License-Identifier: Apache-2.0
4 */
5use crate::metadata::Metadata;
6use serde::Serialize;
7
8/// One item / row in the balance report
9#[derive(Serialize, Debug)]
10pub struct BalanceItem {
11    /// Sum of txns for this account
12    #[serde(rename = "accountSum")]
13    pub account_sum: String,
14
15    /// Recursive sum of all txns for this account and all of it's children
16    #[serde(rename = "accountTreeSum")]
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub account_tree_sum: Option<String>,
19
20    /// Full account name
21    pub account: String,
22
23    /// Optional commodity for this balance row
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub commodity: Option<String>,
26}
27
28/// One delta item / row of balance report (per commodity)
29#[derive(Serialize, Debug)]
30pub struct Delta {
31    /// Amount of Delta (difference)
32    pub delta: String,
33    /// Optional commodity, if it's multi-currency balance
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub commodity: Option<String>,
36}
37
38/// Balance report API object
39#[derive(Serialize, Debug)]
40pub struct BalanceReport {
41    /// Optional metadata
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub metadata: Option<Metadata>,
44
45    /// Title of Balance Report
46    pub title: String,
47
48    /// Balance rows / items
49    pub balances: Vec<BalanceItem>,
50
51    /// Balance deltas rows / items
52    pub deltas: Vec<Delta>,
53}