tackler_api/reports/
register_report.rs

1/*
2 * Tackler-NG 2025
3 * SPDX-License-Identifier: Apache-2.0
4 */
5use crate::metadata::Metadata;
6use crate::txn_header::TxnHeader;
7use serde::Serialize;
8
9/// Register posting API object
10#[derive(Serialize, Debug)]
11pub struct RegisterPosting {
12    /// Account for register posting
13    pub account: String,
14
15    /// Amount of posting
16    ///
17    /// Commodity Conversion: Original amount before conversion in `base_commodity`
18    pub amount: String,
19
20    /// Running total for that account
21    ///
22    /// Commodity Conversion: In target commodity
23    #[serde(rename = "runningTotal")]
24    pub running_total: String,
25
26    /// Posting commodity
27    ///
28    /// Commodity Conversion: Target commodity
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub commodity: Option<String>,
31
32    /// Commodity Conversion: Rate if valuation is based on Txn Time
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub rate: Option<String>,
35
36    /// Commodity Conversion: Original (source) commodity
37    #[serde(rename = "baseCommodity")]
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub base_commodity: Option<String>,
40}
41
42/// Register transaction API object
43#[derive(Serialize, Debug)]
44pub struct RegisterTxn {
45    /// Txn timestamp in display format
46    /// This is controlled by conf key `report.register.timestamp-style`
47    #[serde(rename = "displayTime")]
48    pub display_time: String,
49    /// Transaction header
50    pub txn: TxnHeader,
51
52    /// Register Txn (entry) postings
53    pub postings: Vec<RegisterPosting>,
54}
55
56/// Register report API object
57#[derive(Serialize, Debug)]
58pub struct RegisterReport {
59    /// Optional metadata
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub metadata: Option<Metadata>,
62
63    /// Title of Balance Report
64    pub title: String,
65
66    /// Balance rows / items
67    pub transactions: Vec<RegisterTxn>,
68}