Expose annual debt flow relation summaries

This commit is contained in:
Jan Petykiewicz 2026-04-18 02:02:20 -07:00
commit 4f2955093f
6 changed files with 74 additions and 7 deletions

View file

@ -69,7 +69,8 @@ pub use runtime::{
RuntimePlayerTarget, RuntimeSaveProfileState, RuntimeServiceState, RuntimeState,
RuntimeTerritory, RuntimeTerritoryMetric, RuntimeTerritoryTarget, RuntimeTrackMetric,
RuntimeTrackPieceCounts, RuntimeTrain, RuntimeWorldFinanceNeighborhoodCandidate,
RuntimeWorldIssueState, RuntimeWorldRestoreState, runtime_company_annual_bond_policy_state,
RuntimeWorldIssueState, RuntimeWorldRestoreState,
runtime_annual_bond_principal_flow_relation_label, runtime_company_annual_bond_policy_state,
runtime_company_annual_creditor_pressure_state, runtime_company_annual_deep_distress_state,
runtime_company_annual_dividend_policy_state,
runtime_company_annual_finance_policy_action_label,

View file

@ -3620,6 +3620,35 @@ pub fn runtime_company_annual_finance_policy_action_label(
}
}
pub fn runtime_annual_bond_principal_flow_relation_label(
retired_principal_total: u64,
issued_principal_total: u64,
) -> Option<&'static str> {
match retired_principal_total.cmp(&issued_principal_total) {
std::cmp::Ordering::Equal => {
if retired_principal_total == 0 {
None
} else {
Some("retired_equals_issued")
}
}
std::cmp::Ordering::Greater => {
if issued_principal_total == 0 {
Some("retired_only")
} else {
Some("retired_exceeds_issued")
}
}
std::cmp::Ordering::Less => {
if retired_principal_total == 0 {
Some("issued_only")
} else {
Some("issued_exceeds_retired")
}
}
}
}
fn runtime_company_stock_issue_price_to_book_ratio_f64(
pressured_support_adjusted_share_price_scalar: f64,
book_value_per_share: f64,
@ -8359,6 +8388,30 @@ mod tests {
assert!(bond_state.eligible_for_bond_issue_branch);
}
#[test]
fn classifies_annual_bond_principal_flow_relation() {
assert_eq!(
runtime_annual_bond_principal_flow_relation_label(0, 0),
None
);
assert_eq!(
runtime_annual_bond_principal_flow_relation_label(350_000, 0),
Some("retired_only")
);
assert_eq!(
runtime_annual_bond_principal_flow_relation_label(0, 500_000),
Some("issued_only")
);
assert_eq!(
runtime_annual_bond_principal_flow_relation_label(350_000, 1_000_000),
Some("issued_exceeds_retired")
);
assert_eq!(
runtime_annual_bond_principal_flow_relation_label(500_000, 500_000),
Some("retired_equals_issued")
);
}
#[test]
fn annual_bond_policy_stays_eligible_for_repayment_without_new_issue() {
let mut year_stat_family_qword_bits = vec![

View file

@ -1,9 +1,9 @@
use serde::{Deserialize, Serialize};
use crate::{
CalendarPoint, RuntimeState, runtime_company_annual_bond_policy_state,
runtime_company_annual_creditor_pressure_state, runtime_company_annual_deep_distress_state,
runtime_company_annual_dividend_policy_state,
CalendarPoint, RuntimeState, runtime_annual_bond_principal_flow_relation_label,
runtime_company_annual_bond_policy_state, runtime_company_annual_creditor_pressure_state,
runtime_company_annual_deep_distress_state, runtime_company_annual_dividend_policy_state,
runtime_company_annual_finance_policy_action_label,
runtime_company_annual_finance_policy_state, runtime_company_annual_finance_state,
runtime_company_annual_stock_issue_state, runtime_company_annual_stock_repurchase_state,
@ -261,6 +261,7 @@ pub struct RuntimeSummary {
pub annual_dividend_adjustment_commit_count: u64,
pub annual_bond_last_retired_principal_total: u64,
pub annual_bond_last_issued_principal_total: u64,
pub annual_bond_last_principal_flow_relation: Option<String>,
pub annual_stock_repurchase_last_share_count: u64,
pub annual_stock_issue_last_share_count: u64,
pub total_trigger_dispatch_count: u64,
@ -1391,6 +1392,12 @@ impl RuntimeSummary {
annual_bond_last_issued_principal_total: state
.service_state
.annual_bond_last_issued_principal_total,
annual_bond_last_principal_flow_relation:
runtime_annual_bond_principal_flow_relation_label(
state.service_state.annual_bond_last_retired_principal_total,
state.service_state.annual_bond_last_issued_principal_total,
)
.map(str::to_string),
annual_stock_repurchase_last_share_count: state
.service_state
.annual_stock_repurchase_last_share_count,