jquants_api_client/api/
financial_statements.rs

1//! Financial Statements Data API.
2
3use serde::{Deserialize, Serialize};
4
5use crate::{AccountingPeriod, TypeOfDocument};
6
7use super::{
8    shared::{
9        deserialize_utils::empty_string_or_null_as_none,
10        traits::{
11            builder::JQuantsBuilder,
12            pagination::{HasPaginationKey, MergePage, Paginatable},
13        },
14    },
15    JQuantsApiClient, JQuantsPlanClient,
16};
17
18/// Builder for Financial Statements Data API.
19#[derive(Clone, Serialize)]
20pub struct FinancialStatementsBuilder {
21    #[serde(skip)]
22    client: JQuantsApiClient,
23
24    /// Issue code (e.g. "27890" or "2789")
25    #[serde(skip_serializing_if = "Option::is_none")]
26    code: Option<String>,
27    /// Disclosure date (e.g. "20210901" or "2021-09-01")
28    #[serde(skip_serializing_if = "Option::is_none")]
29    date: Option<String>,
30
31    /// Pagination key.
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pagination_key: Option<String>,
34}
35
36impl JQuantsBuilder<FinancialStatementsResponse> for FinancialStatementsBuilder {
37    async fn send(self) -> Result<FinancialStatementsResponse, crate::JQuantsError> {
38        self.send_ref().await
39    }
40
41    async fn send_ref(&self) -> Result<FinancialStatementsResponse, crate::JQuantsError> {
42        self.client.inner.get("fins/statements", self).await
43    }
44}
45
46impl Paginatable<FinancialStatementsResponse> for FinancialStatementsBuilder {
47    fn pagination_key(mut self, pagination_key: impl Into<String>) -> Self {
48        self.pagination_key = Some(pagination_key.into());
49        self
50    }
51}
52
53impl FinancialStatementsBuilder {
54    /// Create a new builder.
55    pub(crate) fn new(client: JQuantsApiClient) -> Self {
56        Self {
57            client,
58            code: None,
59            date: None,
60            pagination_key: None,
61        }
62    }
63
64    /// Set issue code (e.g. "27890" or "2789")
65    pub fn code(mut self, code: impl Into<String>) -> Self {
66        self.code = Some(code.into());
67        self
68    }
69
70    /// Set disclosure date (e.g. "20210901" or "2021-09-01")
71    pub fn date(mut self, date: impl Into<String>) -> Self {
72        self.date = Some(date.into());
73        self
74    }
75}
76
77/// Trait for Financial Statements Data API.
78pub trait FinancialStatementsApi: JQuantsPlanClient {
79    /// Get API builder for Financial Statements Data.
80    ///
81    /// Use [Financial Statements Data (/fins/statements) API](https://jpx.gitbook.io/j-quants-en/api-reference/statements)
82    fn get_financial_statements(&self) -> FinancialStatementsBuilder {
83        FinancialStatementsBuilder::new(self.get_api_client().clone())
84    }
85}
86
87/// Financial Statements Data response.
88///
89/// See: [API Reference](https://jpx.gitbook.io/j-quants-en/api-reference/statements)
90#[derive(Debug, Clone, PartialEq, Deserialize)]
91pub struct FinancialStatementsResponse {
92    /// List of financial statements
93    pub statements: Vec<FinancialStatementItem>,
94    /// Pagination key for fetching next set of data
95    pub pagination_key: Option<String>,
96}
97
98impl HasPaginationKey for FinancialStatementsResponse {
99    fn get_pagination_key(&self) -> Option<&str> {
100        self.pagination_key.as_deref()
101    }
102}
103
104impl MergePage for FinancialStatementsResponse {
105    fn merge_page(
106        page: Result<Vec<Self>, crate::JQuantsError>,
107    ) -> Result<Self, crate::JQuantsError> {
108        let mut page = page?;
109        let mut merged = page.pop().unwrap();
110        for p in page {
111            merged.statements.extend(p.statements);
112        }
113        merged.pagination_key = None;
114
115        Ok(merged)
116    }
117}
118
119/// Represents a single financial statement item.
120#[derive(Debug, Clone, PartialEq, Deserialize)]
121pub struct FinancialStatementItem {
122    /// Disclosed Date (YYYY-MM-DD)
123    #[serde(rename = "DisclosedDate")]
124    pub disclosed_date: String,
125
126    /// Disclosed Time (HH:MM:SS)
127    #[serde(rename = "DisclosedTime")]
128    pub disclosed_time: String,
129
130    /// Issue Code (5-character)
131    #[serde(rename = "LocalCode")]
132    pub local_code: String,
133
134    /// Disclosure Number
135    #[serde(rename = "DisclosureNumber")]
136    pub disclosure_number: String,
137
138    /// Type of Document
139    #[serde(rename = "TypeOfDocument")]
140    pub type_of_document: TypeOfDocument,
141
142    /// Type of Current Period (e.g., "3Q")
143    #[serde(rename = "TypeOfCurrentPeriod")]
144    pub type_of_current_period: AccountingPeriod,
145
146    /// Start date of current accounting period
147    #[serde(rename = "CurrentPeriodStartDate")]
148    pub current_period_start_date: String,
149
150    /// End date of current accounting period
151    #[serde(rename = "CurrentPeriodEndDate")]
152    pub current_period_end_date: String,
153
154    /// Start date of current fiscal year
155    #[serde(rename = "CurrentFiscalYearStartDate")]
156    pub current_fiscal_year_start_date: String,
157
158    /// End date of current fiscal year
159    #[serde(rename = "CurrentFiscalYearEndDate")]
160    pub current_fiscal_year_end_date: String,
161
162    /// Start date of next fiscal year
163    ///
164    /// Blank is set if disclosure information for the following fiscal year is not set.
165    #[serde(
166        rename = "NextFiscalYearStartDate",
167        deserialize_with = "empty_string_or_null_as_none"
168    )]
169    pub next_fiscal_year_start_date: Option<String>,
170
171    /// End date of next fiscal year
172    ///
173    /// Blank is set if disclosure information for the following fiscal year is not set.
174    #[serde(
175        rename = "NextFiscalYearEndDate",
176        deserialize_with = "empty_string_or_null_as_none"
177    )]
178    pub next_fiscal_year_end_date: Option<String>,
179
180    /// Net Sales
181    #[serde(rename = "NetSales")]
182    pub net_sales: String,
183
184    /// Operating Profit
185    #[serde(rename = "OperatingProfit")]
186    pub operating_profit: String,
187
188    /// Ordinary Profit
189    #[serde(rename = "OrdinaryProfit")]
190    pub ordinary_profit: String,
191
192    /// Profit
193    #[serde(rename = "Profit")]
194    pub profit: String,
195
196    /// Earnings per share
197    #[serde(rename = "EarningsPerShare")]
198    pub earnings_per_share: String,
199
200    /// Diluted Earnings per share
201    #[serde(rename = "DilutedEarningsPerShare")]
202    pub diluted_earnings_per_share: String,
203
204    /// Total Assets
205    #[serde(rename = "TotalAssets")]
206    pub total_assets: String,
207
208    /// Equity
209    #[serde(rename = "Equity")]
210    pub equity: String,
211
212    /// Equity to Asset Ratio
213    #[serde(rename = "EquityToAssetRatio")]
214    pub equity_to_asset_ratio: String,
215
216    /// Book Value per Share
217    #[serde(rename = "BookValuePerShare")]
218    pub book_value_per_share: String,
219
220    /// Cash Flows from Operating Activities
221    #[serde(rename = "CashFlowsFromOperatingActivities")]
222    pub cash_flows_from_operating_activities: String,
223
224    /// Cash Flows from Investing Activities
225    #[serde(rename = "CashFlowsFromInvestingActivities")]
226    pub cash_flows_from_investing_activities: String,
227
228    /// Cash Flows from Financing Activities
229    #[serde(rename = "CashFlowsFromFinancingActivities")]
230    pub cash_flows_from_financing_activities: String,
231
232    /// Cash and Equivalents
233    #[serde(rename = "CashAndEquivalents")]
234    pub cash_and_equivalents: String,
235
236    /// Result Dividend Per Share 1st Quarter
237    #[serde(rename = "ResultDividendPerShare1stQuarter")]
238    pub result_dividend_per_share_1st_quarter: String,
239
240    /// Result Dividend Per Share 2nd Quarter
241    #[serde(rename = "ResultDividendPerShare2ndQuarter")]
242    pub result_dividend_per_share_2nd_quarter: String,
243
244    /// Result Dividend Per Share 3rd Quarter
245    #[serde(rename = "ResultDividendPerShare3rdQuarter")]
246    pub result_dividend_per_share_3rd_quarter: String,
247
248    /// Result Dividend Per Share Fiscal Year End
249    #[serde(rename = "ResultDividendPerShareFiscalYearEnd")]
250    pub result_dividend_per_share_fiscal_year_end: String,
251
252    /// Result Dividend Per Share Annual
253    #[serde(rename = "ResultDividendPerShareAnnual")]
254    pub result_dividend_per_share_annual: String,
255
256    /// Distributions Per Unit (REIT)
257    #[serde(rename = "DistributionsPerUnit(REIT)")]
258    pub distributions_per_unit_reit: String,
259
260    /// Result Total Dividend Paid Annual
261    #[serde(rename = "ResultTotalDividendPaidAnnual")]
262    pub result_total_dividend_paid_annual: String,
263
264    /// Result Payout Ratio Annual
265    #[serde(rename = "ResultPayoutRatioAnnual")]
266    pub result_payout_ratio_annual: String,
267
268    /// Forecast Dividend Per Share 1st Quarter
269    #[serde(rename = "ForecastDividendPerShare1stQuarter")]
270    pub forecast_dividend_per_share_1st_quarter: String,
271
272    /// Forecast Dividend Per Share 2nd Quarter
273    #[serde(rename = "ForecastDividendPerShare2ndQuarter")]
274    pub forecast_dividend_per_share_2nd_quarter: String,
275
276    /// Forecast Dividend Per Share 3rd Quarter
277    #[serde(rename = "ForecastDividendPerShare3rdQuarter")]
278    pub forecast_dividend_per_share_3rd_quarter: String,
279
280    /// Forecast Dividend Per Share Fiscal Year End
281    #[serde(rename = "ForecastDividendPerShareFiscalYearEnd")]
282    pub forecast_dividend_per_share_fiscal_year_end: String,
283
284    /// Forecast Dividend Per Share Annual
285    #[serde(rename = "ForecastDividendPerShareAnnual")]
286    pub forecast_dividend_per_share_annual: String,
287
288    /// Forecast Distributions Per Unit (REIT)
289    #[serde(rename = "ForecastDistributionsPerUnit(REIT)")]
290    pub forecast_distributions_per_unit_reit: String,
291
292    /// Forecast Total Dividend Paid Annual
293    #[serde(rename = "ForecastTotalDividendPaidAnnual")]
294    pub forecast_total_dividend_paid_annual: String,
295
296    /// Forecast Payout Ratio Annual
297    #[serde(rename = "ForecastPayoutRatioAnnual")]
298    pub forecast_payout_ratio_annual: String,
299
300    /// Next Year Forecast Dividend Per Share 1st Quarter
301    #[serde(rename = "NextYearForecastDividendPerShare1stQuarter")]
302    pub next_year_forecast_dividend_per_share_1st_quarter: String,
303
304    /// Next Year Forecast Dividend Per Share 2nd Quarter
305    #[serde(rename = "NextYearForecastDividendPerShare2ndQuarter")]
306    pub next_year_forecast_dividend_per_share_2nd_quarter: String,
307
308    /// Next Year Forecast Dividend Per Share 3rd Quarter
309    #[serde(rename = "NextYearForecastDividendPerShare3rdQuarter")]
310    pub next_year_forecast_dividend_per_share_3rd_quarter: String,
311
312    /// Next Year Forecast Dividend Per Share Fiscal Year End
313    #[serde(rename = "NextYearForecastDividendPerShareFiscalYearEnd")]
314    pub next_year_forecast_dividend_per_share_fiscal_year_end: String,
315
316    /// Next Year Forecast Dividend Per Share Annual
317    #[serde(rename = "NextYearForecastDividendPerShareAnnual")]
318    pub next_year_forecast_dividend_per_share_annual: String,
319
320    /// Next Year Forecast Distributions Per Unit (REIT)
321    #[serde(rename = "NextYearForecastDistributionsPerUnit(REIT)")]
322    pub next_year_forecast_distributions_per_unit_reit: String,
323
324    /// Next Year Forecast Payout Ratio Annual
325    #[serde(rename = "NextYearForecastPayoutRatioAnnual")]
326    pub next_year_forecast_payout_ratio_annual: String,
327
328    /// Forecast Net Sales 2nd Quarter
329    #[serde(rename = "ForecastNetSales2ndQuarter")]
330    pub forecast_net_sales_2nd_quarter: String,
331
332    /// Forecast Operating Profit 2nd Quarter
333    #[serde(rename = "ForecastOperatingProfit2ndQuarter")]
334    pub forecast_operating_profit_2nd_quarter: String,
335
336    /// Forecast Ordinary Profit 2nd Quarter
337    #[serde(rename = "ForecastOrdinaryProfit2ndQuarter")]
338    pub forecast_ordinary_profit_2nd_quarter: String,
339
340    /// Forecast Profit 2nd Quarter
341    #[serde(rename = "ForecastProfit2ndQuarter")]
342    pub forecast_profit_2nd_quarter: String,
343
344    /// Forecast Earnings Per Share 2nd Quarter
345    #[serde(rename = "ForecastEarningsPerShare2ndQuarter")]
346    pub forecast_earnings_per_share_2nd_quarter: String,
347
348    /// Next Year Forecast Net Sales 2nd Quarter
349    #[serde(rename = "NextYearForecastNetSales2ndQuarter")]
350    pub next_year_forecast_net_sales_2nd_quarter: String,
351
352    /// Next Year Forecast Operating Profit 2nd Quarter
353    #[serde(rename = "NextYearForecastOperatingProfit2ndQuarter")]
354    pub next_year_forecast_operating_profit_2nd_quarter: String,
355
356    /// Next Year Forecast Ordinary Profit 2nd Quarter
357    #[serde(rename = "NextYearForecastOrdinaryProfit2ndQuarter")]
358    pub next_year_forecast_ordinary_profit_2nd_quarter: String,
359
360    /// Next Year Forecast Profit 2nd Quarter
361    #[serde(rename = "NextYearForecastProfit2ndQuarter")]
362    pub next_year_forecast_profit_2nd_quarter: String,
363
364    /// Next Year Forecast Earnings Per Share 2nd Quarter
365    #[serde(rename = "NextYearForecastEarningsPerShare2ndQuarter")]
366    pub next_year_forecast_earnings_per_share_2nd_quarter: String,
367
368    /// Forecast Net Sales at Fiscal Year End
369    #[serde(rename = "ForecastNetSales")]
370    pub forecast_net_sales: String,
371
372    /// Forecast Operating Profit at Fiscal Year End
373    #[serde(rename = "ForecastOperatingProfit")]
374    pub forecast_operating_profit: String,
375
376    /// Forecast Ordinary Profit at Fiscal Year End
377    #[serde(rename = "ForecastOrdinaryProfit")]
378    pub forecast_ordinary_profit: String,
379
380    /// Forecast Profit at Fiscal Year End
381    #[serde(rename = "ForecastProfit")]
382    pub forecast_profit: String,
383
384    /// Forecast Earnings Per Share at Fiscal Year End
385    #[serde(rename = "ForecastEarningsPerShare")]
386    pub forecast_earnings_per_share: String,
387
388    /// Next Year Forecast Net Sales at Fiscal Year End
389    #[serde(rename = "NextYearForecastNetSales")]
390    pub next_year_forecast_net_sales: String,
391
392    /// Next Year Forecast Operating Profit at Fiscal Year End
393    #[serde(rename = "NextYearForecastOperatingProfit")]
394    pub next_year_forecast_operating_profit: String,
395
396    /// Next Year Forecast Ordinary Profit at Fiscal Year End
397    #[serde(rename = "NextYearForecastOrdinaryProfit")]
398    pub next_year_forecast_ordinary_profit: String,
399
400    /// Next Year Forecast Profit at Fiscal Year End
401    #[serde(rename = "NextYearForecastProfit")]
402    pub next_year_forecast_profit: String,
403
404    /// Next Year Forecast Earnings Per Share at Fiscal Year End
405    #[serde(rename = "NextYearForecastEarningsPerShare")]
406    pub next_year_forecast_earnings_per_share: String,
407
408    /// Material Changes in Subsidiaries at Fiscal Year End
409    #[serde(rename = "MaterialChangesInSubsidiaries")]
410    pub material_changes_in_subsidiaries: String,
411
412    /// Significant Changes In The Scope Of Consolidation
413    #[serde(
414        rename = "SignificantChangesInTheScopeOfConsolidation",
415        deserialize_with = "empty_string_or_null_as_none"
416    )]
417    pub significant_changes_in_the_scope_of_consolidation: Option<String>,
418
419    /// Changes Based on Revisions of Accounting Standard
420    #[serde(rename = "ChangesBasedOnRevisionsOfAccountingStandard")]
421    pub changes_based_on_revisions_of_accounting_standard: String,
422
423    /// Changes Other Than Ones Based on Revisions of Accounting Standard
424    #[serde(rename = "ChangesOtherThanOnesBasedOnRevisionsOfAccountingStandard")]
425    pub changes_other_than_based_on_revisions_of_accounting_standard: String,
426
427    /// Changes in Accounting Estimates
428    #[serde(rename = "ChangesInAccountingEstimates")]
429    pub changes_in_accounting_estimates: String,
430
431    /// Retrospective Restatement
432    #[serde(rename = "RetrospectiveRestatement")]
433    pub retrospective_restatement: String,
434
435    /// Number of Issued and Outstanding Shares at the End of Fiscal Year Including Treasury Stock
436    #[serde(
437        rename = "NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock"
438    )]
439    pub number_of_issued_and_outstanding_shares_at_the_end_of_fiscal_year_including_treasury_stock:
440        String,
441
442    /// Number of Treasury Stock at the End of Fiscal Year
443    #[serde(rename = "NumberOfTreasuryStockAtTheEndOfFiscalYear")]
444    pub number_of_treasury_stock_at_the_end_of_fiscal_year: String,
445
446    /// Average Number of Shares
447    #[serde(rename = "AverageNumberOfShares")]
448    pub average_number_of_shares: String,
449
450    /// Non-Consolidated Net Sales at Fiscal Year End
451    #[serde(rename = "NonConsolidatedNetSales")]
452    pub non_consolidated_net_sales: String,
453
454    /// Non-Consolidated Operating Profit at Fiscal Year End
455    #[serde(rename = "NonConsolidatedOperatingProfit")]
456    pub non_consolidated_operating_profit: String,
457
458    /// Non-Consolidated Ordinary Profit at Fiscal Year End
459    #[serde(rename = "NonConsolidatedOrdinaryProfit")]
460    pub non_consolidated_ordinary_profit: String,
461
462    /// Non-Consolidated Profit at Fiscal Year End
463    #[serde(rename = "NonConsolidatedProfit")]
464    pub non_consolidated_profit: String,
465
466    /// Non-Consolidated Earnings Per Share at Fiscal Year End
467    #[serde(rename = "NonConsolidatedEarningsPerShare")]
468    pub non_consolidated_earnings_per_share: String,
469
470    /// Non-Consolidated Total Assets at Fiscal Year End
471    #[serde(rename = "NonConsolidatedTotalAssets")]
472    pub non_consolidated_total_assets: String,
473
474    /// Non-Consolidated Equity at Fiscal Year End
475    #[serde(rename = "NonConsolidatedEquity")]
476    pub non_consolidated_equity: String,
477
478    /// Non-Consolidated Equity to Asset Ratio at Fiscal Year End
479    #[serde(rename = "NonConsolidatedEquityToAssetRatio")]
480    pub non_consolidated_equity_to_asset_ratio: String,
481
482    /// Non-Consolidated Book Value Per Share at Fiscal Year End
483    #[serde(rename = "NonConsolidatedBookValuePerShare")]
484    pub non_consolidated_book_value_per_share: String,
485
486    /// Forecast Non-Consolidated Net Sales 2nd Quarter
487    #[serde(rename = "ForecastNonConsolidatedNetSales2ndQuarter")]
488    pub forecast_non_consolidated_net_sales_2nd_quarter: String,
489
490    /// Forecast Non-Consolidated Operating Profit 2nd Quarter
491    #[serde(rename = "ForecastNonConsolidatedOperatingProfit2ndQuarter")]
492    pub forecast_non_consolidated_operating_profit_2nd_quarter: String,
493
494    /// Forecast Non-Consolidated Ordinary Profit 2nd Quarter
495    #[serde(rename = "ForecastNonConsolidatedOrdinaryProfit2ndQuarter")]
496    pub forecast_non_consolidated_ordinary_profit_2nd_quarter: String,
497
498    /// Forecast Non-Consolidated Profit 2nd Quarter
499    #[serde(rename = "ForecastNonConsolidatedProfit2ndQuarter")]
500    pub forecast_non_consolidated_profit_2nd_quarter: String,
501
502    /// Forecast Non-Consolidated Earnings Per Share 2nd Quarter
503    #[serde(rename = "ForecastNonConsolidatedEarningsPerShare2ndQuarter")]
504    pub forecast_non_consolidated_earnings_per_share_2nd_quarter: String,
505
506    /// Next Year Forecast Non-Consolidated Net Sales 2nd Quarter
507    #[serde(rename = "NextYearForecastNonConsolidatedNetSales2ndQuarter")]
508    pub next_year_forecast_non_consolidated_net_sales_2nd_quarter: String,
509
510    /// Next Year Forecast Non-Consolidated Operating Profit 2nd Quarter
511    #[serde(rename = "NextYearForecastNonConsolidatedOperatingProfit2ndQuarter")]
512    pub next_year_forecast_non_consolidated_operating_profit_2nd_quarter: String,
513
514    /// Next Year Forecast Non-Consolidated Ordinary Profit 2nd Quarter
515    #[serde(rename = "NextYearForecastNonConsolidatedOrdinaryProfit2ndQuarter")]
516    pub next_year_forecast_non_consolidated_ordinary_profit_2nd_quarter: String,
517
518    /// Next Year Forecast Non-Consolidated Profit 2nd Quarter
519    #[serde(rename = "NextYearForecastNonConsolidatedProfit2ndQuarter")]
520    pub next_year_forecast_non_consolidated_profit_2nd_quarter: String,
521
522    /// Next Year Forecast Non-Consolidated Earnings Per Share 2nd Quarter
523    #[serde(rename = "NextYearForecastNonConsolidatedEarningsPerShare2ndQuarter")]
524    pub next_year_forecast_non_consolidated_earnings_per_share_2nd_quarter: String,
525
526    /// Forecast Non-Consolidated Net Sales at Fiscal Year End
527    #[serde(rename = "ForecastNonConsolidatedNetSales")]
528    pub forecast_non_consolidated_net_sales: String,
529
530    /// Forecast Non-Consolidated Operating Profit at Fiscal Year End
531    #[serde(rename = "ForecastNonConsolidatedOperatingProfit")]
532    pub forecast_non_consolidated_operating_profit: String,
533
534    /// Forecast Non-Consolidated Ordinary Profit at Fiscal Year End
535    #[serde(rename = "ForecastNonConsolidatedOrdinaryProfit")]
536    pub forecast_non_consolidated_ordinary_profit: String,
537
538    /// Forecast Non-Consolidated Profit at Fiscal Year End
539    #[serde(rename = "ForecastNonConsolidatedProfit")]
540    pub forecast_non_consolidated_profit: String,
541
542    /// Forecast Non-Consolidated Earnings Per Share at Fiscal Year End
543    #[serde(rename = "ForecastNonConsolidatedEarningsPerShare")]
544    pub forecast_non_consolidated_earnings_per_share: String,
545
546    /// Next Year Forecast Non-Consolidated Net Sales at Fiscal Year End
547    #[serde(rename = "NextYearForecastNonConsolidatedNetSales")]
548    pub next_year_forecast_non_consolidated_net_sales: String,
549
550    /// Next Year Forecast Non-Consolidated Operating Profit at Fiscal Year End
551    #[serde(rename = "NextYearForecastNonConsolidatedOperatingProfit")]
552    pub next_year_forecast_non_consolidated_operating_profit: String,
553
554    /// Next Year Forecast Non-Consolidated Ordinary Profit at Fiscal Year End
555    #[serde(rename = "NextYearForecastNonConsolidatedOrdinaryProfit")]
556    pub next_year_forecast_non_consolidated_ordinary_profit: String,
557
558    /// Next Year Forecast Non-Consolidated Profit at Fiscal Year End
559    #[serde(rename = "NextYearForecastNonConsolidatedProfit")]
560    pub next_year_forecast_non_consolidated_profit: String,
561
562    /// Next Year Forecast Non-Consolidated Earnings Per Share at Fiscal Year End
563    #[serde(rename = "NextYearForecastNonConsolidatedEarningsPerShare")]
564    pub next_year_forecast_non_consolidated_earnings_per_share: String,
565}
566
567#[cfg(test)]
568mod tests {
569    use super::*;
570
571    #[test]
572    fn test_deserialize_financial_statements_response() {
573        let json_data = r#"
574        {
575            "statements": [
576                {
577                    "DisclosedDate": "2023-01-30",
578                    "DisclosedTime": "12:00:00",
579                    "LocalCode": "86970",
580                    "DisclosureNumber": "20230127594871",
581                    "TypeOfDocument": "3QFinancialStatements_Consolidated_IFRS",
582                    "TypeOfCurrentPeriod": "3Q",
583                    "CurrentPeriodStartDate": "2022-04-01",
584                    "CurrentPeriodEndDate": "2022-12-31",
585                    "CurrentFiscalYearStartDate": "2022-04-01",
586                    "CurrentFiscalYearEndDate": "2023-03-31",
587                    "NextFiscalYearStartDate": "",
588                    "NextFiscalYearEndDate": "",
589                    "NetSales": "100529000000",
590                    "OperatingProfit": "51765000000",
591                    "OrdinaryProfit": "",
592                    "Profit": "35175000000",
593                    "EarningsPerShare": "66.76",
594                    "DilutedEarningsPerShare": "",
595                    "TotalAssets": "79205861000000",
596                    "Equity": "320021000000",
597                    "EquityToAssetRatio": "0.004",
598                    "BookValuePerShare": "",
599                    "CashFlowsFromOperatingActivities": "",
600                    "CashFlowsFromInvestingActivities": "",
601                    "CashFlowsFromFinancingActivities": "",
602                    "CashAndEquivalents": "91135000000",
603                    "ResultDividendPerShare1stQuarter": "",
604                    "ResultDividendPerShare2ndQuarter": "26.0",
605                    "ResultDividendPerShare3rdQuarter": "",
606                    "ResultDividendPerShareFiscalYearEnd": "",
607                    "ResultDividendPerShareAnnual": "",
608                    "DistributionsPerUnit(REIT)": "",
609                    "ResultTotalDividendPaidAnnual": "",
610                    "ResultPayoutRatioAnnual": "",
611                    "ForecastDividendPerShare1stQuarter": "",
612                    "ForecastDividendPerShare2ndQuarter": "",
613                    "ForecastDividendPerShare3rdQuarter": "",
614                    "ForecastDividendPerShareFiscalYearEnd": "36.0",
615                    "ForecastDividendPerShareAnnual": "62.0",
616                    "ForecastDistributionsPerUnit(REIT)": "",
617                    "ForecastTotalDividendPaidAnnual": "",
618                    "ForecastPayoutRatioAnnual": "",
619                    "NextYearForecastDividendPerShare1stQuarter": "",
620                    "NextYearForecastDividendPerShare2ndQuarter": "",
621                    "NextYearForecastDividendPerShare3rdQuarter": "",
622                    "NextYearForecastDividendPerShareFiscalYearEnd": "",
623                    "NextYearForecastDividendPerShareAnnual": "",
624                    "NextYearForecastDistributionsPerUnit(REIT)": "",
625                    "NextYearForecastPayoutRatioAnnual": "",
626                    "ForecastNetSales2ndQuarter": "",
627                    "ForecastOperatingProfit2ndQuarter": "",
628                    "ForecastOrdinaryProfit2ndQuarter": "",
629                    "ForecastProfit2ndQuarter": "",
630                    "ForecastEarningsPerShare2ndQuarter": "",
631                    "NextYearForecastNetSales2ndQuarter": "",
632                    "NextYearForecastOperatingProfit2ndQuarter": "",
633                    "NextYearForecastOrdinaryProfit2ndQuarter": "",
634                    "NextYearForecastProfit2ndQuarter": "",
635                    "NextYearForecastEarningsPerShare2ndQuarter": "",
636                    "ForecastNetSales": "132500000000",
637                    "ForecastOperatingProfit": "65500000000",
638                    "ForecastOrdinaryProfit": "",
639                    "ForecastProfit": "45000000000",
640                    "ForecastEarningsPerShare": "85.42",
641                    "NextYearForecastNetSales": "",
642                    "NextYearForecastOperatingProfit": "",
643                    "NextYearForecastOrdinaryProfit": "",
644                    "NextYearForecastProfit": "",
645                    "NextYearForecastEarningsPerShare": "",
646                    "MaterialChangesInSubsidiaries": "false",
647                    "SignificantChangesInTheScopeOfConsolidation": "",
648                    "ChangesBasedOnRevisionsOfAccountingStandard": "false",
649                    "ChangesOtherThanOnesBasedOnRevisionsOfAccountingStandard": "false",
650                    "ChangesInAccountingEstimates": "true",
651                    "RetrospectiveRestatement": "",
652                    "NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock": "528578441",
653                    "NumberOfTreasuryStockAtTheEndOfFiscalYear": "1861043",
654                    "AverageNumberOfShares": "526874759",
655                    "NonConsolidatedNetSales": "",
656                    "NonConsolidatedOperatingProfit": "",
657                    "NonConsolidatedOrdinaryProfit": "",
658                    "NonConsolidatedProfit": "",
659                    "NonConsolidatedEarningsPerShare": "",
660                    "NonConsolidatedTotalAssets": "",
661                    "NonConsolidatedEquity": "",
662                    "NonConsolidatedEquityToAssetRatio": "",
663                    "NonConsolidatedBookValuePerShare": "",
664                    "ForecastNonConsolidatedNetSales2ndQuarter": "",
665                    "ForecastNonConsolidatedOperatingProfit2ndQuarter": "",
666                    "ForecastNonConsolidatedOrdinaryProfit2ndQuarter": "",
667                    "ForecastNonConsolidatedProfit2ndQuarter": "",
668                    "ForecastNonConsolidatedEarningsPerShare2ndQuarter": "",
669                    "NextYearForecastNonConsolidatedNetSales2ndQuarter": "",
670                    "NextYearForecastNonConsolidatedOperatingProfit2ndQuarter": "",
671                    "NextYearForecastNonConsolidatedOrdinaryProfit2ndQuarter": "",
672                    "NextYearForecastNonConsolidatedProfit2ndQuarter": "",
673                    "NextYearForecastNonConsolidatedEarningsPerShare2ndQuarter": "",
674                    "ForecastNonConsolidatedNetSales": "",
675                    "ForecastNonConsolidatedOperatingProfit": "",
676                    "ForecastNonConsolidatedOrdinaryProfit": "",
677                    "ForecastNonConsolidatedProfit": "",
678                    "ForecastNonConsolidatedEarningsPerShare": "",
679                    "NextYearForecastNonConsolidatedNetSales": "",
680                    "NextYearForecastNonConsolidatedOperatingProfit": "",
681                    "NextYearForecastNonConsolidatedOrdinaryProfit": "",
682                    "NextYearForecastNonConsolidatedProfit": "",
683                    "NextYearForecastNonConsolidatedEarningsPerShare": ""
684              }
685            ],
686            "pagination_key": "value1.value2."
687        }
688        "#;
689
690        let response: FinancialStatementsResponse = serde_json::from_str(json_data).unwrap();
691        let expected_response = FinancialStatementsResponse {
692            statements: vec![FinancialStatementItem {
693                disclosed_date: "2023-01-30".to_string(),
694                disclosed_time: "12:00:00".to_string(),
695                local_code: "86970".to_string(),
696                disclosure_number: "20230127594871".to_string(),
697                type_of_document: TypeOfDocument::Q3FinancialStatementsConsolidatedIFRS,
698                type_of_current_period: AccountingPeriod::Q3,
699                current_period_start_date: "2022-04-01".to_string(),
700                current_period_end_date: "2022-12-31".to_string(),
701                current_fiscal_year_start_date: "2022-04-01".to_string(),
702                current_fiscal_year_end_date: "2023-03-31".to_string(),
703                next_fiscal_year_start_date: None,
704                next_fiscal_year_end_date: None,
705                net_sales: "100529000000".to_string(),
706                operating_profit: "51765000000".to_string(),
707                ordinary_profit: "".to_string(),
708                profit: "35175000000".to_string(),
709                earnings_per_share: "66.76".to_string(),
710                diluted_earnings_per_share: "".to_string(),
711                total_assets: "79205861000000".to_string(),
712                equity: "320021000000".to_string(),
713                equity_to_asset_ratio: "0.004".to_string(),
714                book_value_per_share: "".to_string(),
715                cash_flows_from_operating_activities: "".to_string(),
716                cash_flows_from_investing_activities: "".to_string(),
717                cash_flows_from_financing_activities: "".to_string(),
718                cash_and_equivalents: "91135000000".to_string(),
719                result_dividend_per_share_1st_quarter: "".to_string(),
720                result_dividend_per_share_2nd_quarter: "26.0".to_string(),
721                result_dividend_per_share_3rd_quarter: "".to_string(),
722                result_dividend_per_share_fiscal_year_end: "".to_string(),
723                result_dividend_per_share_annual: "".to_string(),
724                distributions_per_unit_reit: "".to_string(),
725                result_total_dividend_paid_annual: "".to_string(),
726                result_payout_ratio_annual: "".to_string(),
727                forecast_dividend_per_share_1st_quarter: "".to_string(),
728                forecast_dividend_per_share_2nd_quarter: "".to_string(),
729                forecast_dividend_per_share_3rd_quarter: "".to_string(),
730                forecast_dividend_per_share_fiscal_year_end: "36.0".to_string(),
731                forecast_dividend_per_share_annual: "62.0".to_string(),
732                forecast_distributions_per_unit_reit: "".to_string(),
733                forecast_total_dividend_paid_annual: "".to_string(),
734                forecast_payout_ratio_annual: "".to_string(),
735                next_year_forecast_dividend_per_share_1st_quarter: "".to_string(),
736                next_year_forecast_dividend_per_share_2nd_quarter: "".to_string(),
737                next_year_forecast_dividend_per_share_3rd_quarter: "".to_string(),
738                next_year_forecast_dividend_per_share_fiscal_year_end: "".to_string(),
739                next_year_forecast_dividend_per_share_annual: "".to_string(),
740                next_year_forecast_distributions_per_unit_reit: "".to_string(),
741                next_year_forecast_payout_ratio_annual: "".to_string(),
742                forecast_net_sales_2nd_quarter: "".to_string(),
743                forecast_operating_profit_2nd_quarter: "".to_string(),
744                forecast_ordinary_profit_2nd_quarter: "".to_string(),
745                forecast_profit_2nd_quarter: "".to_string(),
746                forecast_earnings_per_share_2nd_quarter: "".to_string(),
747                next_year_forecast_net_sales_2nd_quarter: "".to_string(),
748                next_year_forecast_operating_profit_2nd_quarter: "".to_string(),
749                next_year_forecast_ordinary_profit_2nd_quarter: "".to_string(),
750                next_year_forecast_profit_2nd_quarter: "".to_string(),
751                next_year_forecast_earnings_per_share_2nd_quarter: "".to_string(),
752                forecast_net_sales: "132500000000".to_string(),
753                forecast_operating_profit: "65500000000".to_string(),
754                forecast_ordinary_profit: "".to_string(),
755                forecast_profit: "45000000000".to_string(),
756                forecast_earnings_per_share: "85.42".to_string(),
757                next_year_forecast_net_sales: "".to_string(),
758                next_year_forecast_operating_profit: "".to_string(),
759                next_year_forecast_ordinary_profit: "".to_string(),
760                next_year_forecast_profit: "".to_string(),
761                next_year_forecast_earnings_per_share: "".to_string(),
762                material_changes_in_subsidiaries: "false".to_string(),
763                significant_changes_in_the_scope_of_consolidation: None,
764                changes_based_on_revisions_of_accounting_standard: "false".to_string(),
765                changes_other_than_based_on_revisions_of_accounting_standard: "false".to_string(),
766                changes_in_accounting_estimates: "true".to_string(),
767                retrospective_restatement: "".to_string(),
768                number_of_issued_and_outstanding_shares_at_the_end_of_fiscal_year_including_treasury_stock: "528578441".to_string(),
769                number_of_treasury_stock_at_the_end_of_fiscal_year: "1861043".to_string(),
770                average_number_of_shares: "526874759".to_string(),
771                non_consolidated_net_sales: "".to_string(),
772                non_consolidated_operating_profit: "".to_string(),
773                non_consolidated_ordinary_profit: "".to_string(),
774                non_consolidated_profit: "".to_string(),
775                non_consolidated_earnings_per_share: "".to_string(),
776                non_consolidated_total_assets: "".to_string(),
777                non_consolidated_equity: "".to_string(),
778                non_consolidated_equity_to_asset_ratio: "".to_string(),
779                non_consolidated_book_value_per_share: "".to_string(),
780                forecast_non_consolidated_net_sales_2nd_quarter: "".to_string(),
781                forecast_non_consolidated_operating_profit_2nd_quarter: "".to_string(),
782                forecast_non_consolidated_ordinary_profit_2nd_quarter: "".to_string(),
783                forecast_non_consolidated_profit_2nd_quarter: "".to_string(),
784                forecast_non_consolidated_earnings_per_share_2nd_quarter: "".to_string(),
785                next_year_forecast_non_consolidated_net_sales_2nd_quarter: "".to_string(),
786                next_year_forecast_non_consolidated_operating_profit_2nd_quarter: "".to_string(),
787                next_year_forecast_non_consolidated_ordinary_profit_2nd_quarter: "".to_string(),
788                next_year_forecast_non_consolidated_profit_2nd_quarter: "".to_string(),
789                next_year_forecast_non_consolidated_earnings_per_share_2nd_quarter: "".to_string(),
790                forecast_non_consolidated_net_sales: "".to_string(),
791                forecast_non_consolidated_operating_profit: "".to_string(),
792                forecast_non_consolidated_ordinary_profit: "".to_string(),
793                forecast_non_consolidated_profit: "".to_string(),
794                forecast_non_consolidated_earnings_per_share: "".to_string(),
795                next_year_forecast_non_consolidated_net_sales: "".to_string(),
796                next_year_forecast_non_consolidated_operating_profit: "".to_string(),
797                next_year_forecast_non_consolidated_ordinary_profit: "".to_string(),
798                next_year_forecast_non_consolidated_profit: "".to_string(),
799                next_year_forecast_non_consolidated_earnings_per_share: "".to_string(),
800            }],
801            pagination_key: Some("value1.value2.".to_string()),
802        };
803
804        pretty_assertions::assert_eq!(response, expected_response);
805    }
806
807    #[test]
808    fn test_deserialize_financial_statements_response_no_pagination_key() {
809        let json_data = r#"
810        {
811            "statements": [
812                {
813                    "DisclosedDate": "2023-01-30",
814                    "DisclosedTime": "12:00:00",
815                    "LocalCode": "86970",
816                    "DisclosureNumber": "20230127594871",
817                    "TypeOfDocument": "3QFinancialStatements_Consolidated_IFRS",
818                    "TypeOfCurrentPeriod": "3Q",
819                    "CurrentPeriodStartDate": "2022-04-01",
820                    "CurrentPeriodEndDate": "2022-12-31",
821                    "CurrentFiscalYearStartDate": "2022-04-01",
822                    "CurrentFiscalYearEndDate": "2023-03-31",
823                    "NextFiscalYearStartDate": "2024-11-01",
824                    "NextFiscalYearEndDate": "2024-11-01",
825                    "NetSales": "100529000000",
826                    "OperatingProfit": "51765000000",
827                    "OrdinaryProfit": "",
828                    "Profit": "35175000000",
829                    "EarningsPerShare": "66.76",
830                    "DilutedEarningsPerShare": "",
831                    "TotalAssets": "79205861000000",
832                    "Equity": "320021000000",
833                    "EquityToAssetRatio": "0.004",
834                    "BookValuePerShare": "",
835                    "CashFlowsFromOperatingActivities": "",
836                    "CashFlowsFromInvestingActivities": "",
837                    "CashFlowsFromFinancingActivities": "",
838                    "CashAndEquivalents": "91135000000",
839                    "ResultDividendPerShare1stQuarter": "",
840                    "ResultDividendPerShare2ndQuarter": "26.0",
841                    "ResultDividendPerShare3rdQuarter": "",
842                    "ResultDividendPerShareFiscalYearEnd": "",
843                    "ResultDividendPerShareAnnual": "",
844                    "DistributionsPerUnit(REIT)": "",
845                    "ResultTotalDividendPaidAnnual": "",
846                    "ResultPayoutRatioAnnual": "",
847                    "ForecastDividendPerShare1stQuarter": "",
848                    "ForecastDividendPerShare2ndQuarter": "",
849                    "ForecastDividendPerShare3rdQuarter": "",
850                    "ForecastDividendPerShareFiscalYearEnd": "36.0",
851                    "ForecastDividendPerShareAnnual": "62.0",
852                    "ForecastDistributionsPerUnit(REIT)": "",
853                    "ForecastTotalDividendPaidAnnual": "",
854                    "ForecastPayoutRatioAnnual": "",
855                    "NextYearForecastDividendPerShare1stQuarter": "",
856                    "NextYearForecastDividendPerShare2ndQuarter": "",
857                    "NextYearForecastDividendPerShare3rdQuarter": "",
858                    "NextYearForecastDividendPerShareFiscalYearEnd": "",
859                    "NextYearForecastDividendPerShareAnnual": "",
860                    "NextYearForecastDistributionsPerUnit(REIT)": "",
861                    "NextYearForecastPayoutRatioAnnual": "",
862                    "ForecastNetSales2ndQuarter": "",
863                    "ForecastOperatingProfit2ndQuarter": "",
864                    "ForecastOrdinaryProfit2ndQuarter": "",
865                    "ForecastProfit2ndQuarter": "",
866                    "ForecastEarningsPerShare2ndQuarter": "",
867                    "NextYearForecastNetSales2ndQuarter": "",
868                    "NextYearForecastOperatingProfit2ndQuarter": "",
869                    "NextYearForecastOrdinaryProfit2ndQuarter": "",
870                    "NextYearForecastProfit2ndQuarter": "",
871                    "NextYearForecastEarningsPerShare2ndQuarter": "",
872                    "ForecastNetSales": "132500000000",
873                    "ForecastOperatingProfit": "65500000000",
874                    "ForecastOrdinaryProfit": "",
875                    "ForecastProfit": "45000000000",
876                    "ForecastEarningsPerShare": "85.42",
877                    "NextYearForecastNetSales": "",
878                    "NextYearForecastOperatingProfit": "",
879                    "NextYearForecastOrdinaryProfit": "",
880                    "NextYearForecastProfit": "",
881                    "NextYearForecastEarningsPerShare": "",
882                    "MaterialChangesInSubsidiaries": "false",
883                    "SignificantChangesInTheScopeOfConsolidation": "2024-11-01",
884                    "ChangesBasedOnRevisionsOfAccountingStandard": "false",
885                    "ChangesOtherThanOnesBasedOnRevisionsOfAccountingStandard": "false",
886                    "ChangesInAccountingEstimates": "true",
887                    "RetrospectiveRestatement": "",
888                    "NumberOfIssuedAndOutstandingSharesAtTheEndOfFiscalYearIncludingTreasuryStock": "528578441",
889                    "NumberOfTreasuryStockAtTheEndOfFiscalYear": "1861043",
890                    "AverageNumberOfShares": "526874759",
891                    "NonConsolidatedNetSales": "",
892                    "NonConsolidatedOperatingProfit": "",
893                    "NonConsolidatedOrdinaryProfit": "",
894                    "NonConsolidatedProfit": "",
895                    "NonConsolidatedEarningsPerShare": "",
896                    "NonConsolidatedTotalAssets": "",
897                    "NonConsolidatedEquity": "",
898                    "NonConsolidatedEquityToAssetRatio": "",
899                    "NonConsolidatedBookValuePerShare": "",
900                    "ForecastNonConsolidatedNetSales2ndQuarter": "",
901                    "ForecastNonConsolidatedOperatingProfit2ndQuarter": "",
902                    "ForecastNonConsolidatedOrdinaryProfit2ndQuarter": "",
903                    "ForecastNonConsolidatedProfit2ndQuarter": "",
904                    "ForecastNonConsolidatedEarningsPerShare2ndQuarter": "",
905                    "NextYearForecastNonConsolidatedNetSales2ndQuarter": "",
906                    "NextYearForecastNonConsolidatedOperatingProfit2ndQuarter": "",
907                    "NextYearForecastNonConsolidatedOrdinaryProfit2ndQuarter": "",
908                    "NextYearForecastNonConsolidatedProfit2ndQuarter": "",
909                    "NextYearForecastNonConsolidatedEarningsPerShare2ndQuarter": "",
910                    "ForecastNonConsolidatedNetSales": "",
911                    "ForecastNonConsolidatedOperatingProfit": "",
912                    "ForecastNonConsolidatedOrdinaryProfit": "",
913                    "ForecastNonConsolidatedProfit": "",
914                    "ForecastNonConsolidatedEarningsPerShare": "",
915                    "NextYearForecastNonConsolidatedNetSales": "",
916                    "NextYearForecastNonConsolidatedOperatingProfit": "",
917                    "NextYearForecastNonConsolidatedOrdinaryProfit": "",
918                    "NextYearForecastNonConsolidatedProfit": "",
919                    "NextYearForecastNonConsolidatedEarningsPerShare": ""
920                }
921            ]
922        }
923        "#;
924
925        let response: FinancialStatementsResponse = serde_json::from_str(json_data).unwrap();
926        let expected_response = FinancialStatementsResponse {
927            statements: vec![FinancialStatementItem {
928                disclosed_date: "2023-01-30".to_string(),
929                disclosed_time: "12:00:00".to_string(),
930                local_code: "86970".to_string(),
931                disclosure_number: "20230127594871".to_string(),
932                type_of_document: TypeOfDocument::Q3FinancialStatementsConsolidatedIFRS,
933                type_of_current_period: AccountingPeriod::Q3,
934                current_period_start_date: "2022-04-01".to_string(),
935                current_period_end_date: "2022-12-31".to_string(),
936                current_fiscal_year_start_date: "2022-04-01".to_string(),
937                current_fiscal_year_end_date: "2023-03-31".to_string(),
938                next_fiscal_year_start_date: Some("2024-11-01".to_string()),
939                next_fiscal_year_end_date: Some("2024-11-01".to_string()),
940                net_sales: "100529000000".to_string(),
941                operating_profit: "51765000000".to_string(),
942                ordinary_profit: "".to_string(),
943                profit: "35175000000".to_string(),
944                earnings_per_share: "66.76".to_string(),
945                diluted_earnings_per_share: "".to_string(),
946                total_assets: "79205861000000".to_string(),
947                equity: "320021000000".to_string(),
948                equity_to_asset_ratio: "0.004".to_string(),
949                book_value_per_share: "".to_string(),
950                cash_flows_from_operating_activities: "".to_string(),
951                cash_flows_from_investing_activities: "".to_string(),
952                cash_flows_from_financing_activities: "".to_string(),
953                cash_and_equivalents: "91135000000".to_string(),
954                result_dividend_per_share_1st_quarter: "".to_string(),
955                result_dividend_per_share_2nd_quarter: "26.0".to_string(),
956                result_dividend_per_share_3rd_quarter: "".to_string(),
957                result_dividend_per_share_fiscal_year_end: "".to_string(),
958                result_dividend_per_share_annual: "".to_string(),
959                distributions_per_unit_reit: "".to_string(),
960                result_total_dividend_paid_annual: "".to_string(),
961                result_payout_ratio_annual: "".to_string(),
962                forecast_dividend_per_share_1st_quarter: "".to_string(),
963                forecast_dividend_per_share_2nd_quarter: "".to_string(),
964                forecast_dividend_per_share_3rd_quarter: "".to_string(),
965                forecast_dividend_per_share_fiscal_year_end: "36.0".to_string(),
966                forecast_dividend_per_share_annual: "62.0".to_string(),
967                forecast_distributions_per_unit_reit: "".to_string(),
968                forecast_total_dividend_paid_annual: "".to_string(),
969                forecast_payout_ratio_annual: "".to_string(),
970                next_year_forecast_dividend_per_share_1st_quarter: "".to_string(),
971                next_year_forecast_dividend_per_share_2nd_quarter: "".to_string(),
972                next_year_forecast_dividend_per_share_3rd_quarter: "".to_string(),
973                next_year_forecast_dividend_per_share_fiscal_year_end: "".to_string(),
974                next_year_forecast_dividend_per_share_annual: "".to_string(),
975                next_year_forecast_distributions_per_unit_reit: "".to_string(),
976                next_year_forecast_payout_ratio_annual: "".to_string(),
977                forecast_net_sales_2nd_quarter: "".to_string(),
978                forecast_operating_profit_2nd_quarter: "".to_string(),
979                forecast_ordinary_profit_2nd_quarter: "".to_string(),
980                forecast_profit_2nd_quarter: "".to_string(),
981                forecast_earnings_per_share_2nd_quarter: "".to_string(),
982                next_year_forecast_net_sales_2nd_quarter: "".to_string(),
983                next_year_forecast_operating_profit_2nd_quarter: "".to_string(),
984                next_year_forecast_ordinary_profit_2nd_quarter: "".to_string(),
985                next_year_forecast_profit_2nd_quarter: "".to_string(),
986                next_year_forecast_earnings_per_share_2nd_quarter: "".to_string(),
987                forecast_net_sales: "132500000000".to_string(),
988                forecast_operating_profit: "65500000000".to_string(),
989                forecast_ordinary_profit: "".to_string(),
990                forecast_profit: "45000000000".to_string(),
991                forecast_earnings_per_share: "85.42".to_string(),
992                next_year_forecast_net_sales: "".to_string(),
993                next_year_forecast_operating_profit: "".to_string(),
994                next_year_forecast_ordinary_profit: "".to_string(),
995                next_year_forecast_profit: "".to_string(),
996                next_year_forecast_earnings_per_share: "".to_string(),
997                material_changes_in_subsidiaries: "false".to_string(),
998                significant_changes_in_the_scope_of_consolidation: Some("2024-11-01".to_string()),
999                changes_based_on_revisions_of_accounting_standard: "false".to_string(),
1000                changes_other_than_based_on_revisions_of_accounting_standard: "false".to_string(),
1001                changes_in_accounting_estimates: "true".to_string(),
1002                retrospective_restatement: "".to_string(),
1003                number_of_issued_and_outstanding_shares_at_the_end_of_fiscal_year_including_treasury_stock: "528578441".to_string(),
1004                number_of_treasury_stock_at_the_end_of_fiscal_year: "1861043".to_string(),
1005                average_number_of_shares: "526874759".to_string(),
1006                non_consolidated_net_sales: "".to_string(),
1007                non_consolidated_operating_profit: "".to_string(),
1008                non_consolidated_ordinary_profit: "".to_string(),
1009                non_consolidated_profit: "".to_string(),
1010                non_consolidated_earnings_per_share: "".to_string(),
1011                non_consolidated_total_assets: "".to_string(),
1012                non_consolidated_equity: "".to_string(),
1013                non_consolidated_equity_to_asset_ratio: "".to_string(),
1014                non_consolidated_book_value_per_share: "".to_string(),
1015                forecast_non_consolidated_net_sales_2nd_quarter: "".to_string(),
1016                forecast_non_consolidated_operating_profit_2nd_quarter: "".to_string(),
1017                forecast_non_consolidated_ordinary_profit_2nd_quarter: "".to_string(),
1018                forecast_non_consolidated_profit_2nd_quarter: "".to_string(),
1019                forecast_non_consolidated_earnings_per_share_2nd_quarter: "".to_string(),
1020                next_year_forecast_non_consolidated_net_sales_2nd_quarter: "".to_string(),
1021                next_year_forecast_non_consolidated_operating_profit_2nd_quarter: "".to_string(),
1022                next_year_forecast_non_consolidated_ordinary_profit_2nd_quarter: "".to_string(),
1023                next_year_forecast_non_consolidated_profit_2nd_quarter: "".to_string(),
1024                next_year_forecast_non_consolidated_earnings_per_share_2nd_quarter: "".to_string(),
1025                forecast_non_consolidated_net_sales: "".to_string(),
1026                forecast_non_consolidated_operating_profit: "".to_string(),
1027                forecast_non_consolidated_ordinary_profit: "".to_string(),
1028                forecast_non_consolidated_profit: "".to_string(),
1029                forecast_non_consolidated_earnings_per_share: "".to_string(),
1030                next_year_forecast_non_consolidated_net_sales: "".to_string(),
1031                next_year_forecast_non_consolidated_operating_profit: "".to_string(),
1032                next_year_forecast_non_consolidated_ordinary_profit: "".to_string(),
1033                next_year_forecast_non_consolidated_profit: "".to_string(),
1034                next_year_forecast_non_consolidated_earnings_per_share: "".to_string(),
1035            }],
1036            pagination_key: None,
1037        };
1038
1039        pretty_assertions::assert_eq!(response, expected_response);
1040    }
1041
1042    #[test]
1043    fn test_deserialize_financial_statements_response_no_data() {
1044        let json_data = r#"
1045        {
1046            "statements": []
1047        }
1048        "#;
1049
1050        let response: FinancialStatementsResponse = serde_json::from_str(json_data).unwrap();
1051        let expected_response = FinancialStatementsResponse {
1052            statements: vec![],
1053            pagination_key: None,
1054        };
1055
1056        pretty_assertions::assert_eq!(response, expected_response);
1057    }
1058}