1use super::*;
2
3#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
4#[serde(rename_all = "snake_case")]
5pub enum SettlementReconciliationState {
6 Open,
7 Reconciled,
8 Ignored,
9 RetryScheduled,
10}
11
12#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
13#[serde(rename_all = "camelCase")]
14pub struct SettlementReconciliationSummary {
15 pub matching_receipts: u64,
16 pub returned_receipts: u64,
17 pub pending_receipts: u64,
18 pub failed_receipts: u64,
19 pub actionable_receipts: u64,
20 pub reconciled_receipts: u64,
21 pub truncated: bool,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
25#[serde(rename_all = "camelCase")]
26pub struct SettlementReconciliationRow {
27 pub receipt_id: String,
28 pub timestamp: u64,
29 pub capability_id: String,
30 #[serde(default, skip_serializing_if = "Option::is_none")]
31 pub subject_key: Option<String>,
32 pub tool_server: String,
33 pub tool_name: String,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub payment_reference: Option<String>,
36 pub settlement_status: SettlementStatus,
37 #[serde(default, skip_serializing_if = "Option::is_none")]
38 pub cost_charged: Option<u64>,
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub currency: Option<String>,
41 #[serde(default, skip_serializing_if = "Option::is_none")]
42 pub budget_authority: Option<FinancialBudgetAuthorityReceiptMetadata>,
43 pub reconciliation_state: SettlementReconciliationState,
44 pub action_required: bool,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub note: Option<String>,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub updated_at: Option<u64>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
52#[serde(rename_all = "camelCase")]
53pub struct SettlementReconciliationReport {
54 pub summary: SettlementReconciliationSummary,
55 pub receipts: Vec<SettlementReconciliationRow>,
56}
57
58#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
59#[serde(rename_all = "snake_case")]
60pub enum MeteredBillingReconciliationState {
61 Open,
62 Reconciled,
63 Ignored,
64 RetryScheduled,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
68#[serde(rename_all = "camelCase")]
69pub struct MeteredBillingEvidenceRecord {
70 pub usage_evidence: MeteredUsageEvidenceReceiptMetadata,
71 pub billed_cost: MonetaryAmount,
72 pub recorded_at: u64,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
76#[serde(rename_all = "camelCase")]
77pub struct MeteredBillingReconciliationSummary {
78 pub matching_receipts: u64,
79 pub returned_receipts: u64,
80 pub evidence_attached_receipts: u64,
81 pub missing_evidence_receipts: u64,
82 pub over_quoted_units_receipts: u64,
83 pub over_max_billed_units_receipts: u64,
84 pub over_quoted_cost_receipts: u64,
85 pub financial_mismatch_receipts: u64,
86 pub actionable_receipts: u64,
87 pub reconciled_receipts: u64,
88 pub truncated: bool,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
92#[serde(rename_all = "camelCase")]
93pub struct MeteredBillingReconciliationRow {
94 pub receipt_id: String,
95 pub timestamp: u64,
96 pub capability_id: String,
97 #[serde(default, skip_serializing_if = "Option::is_none")]
98 pub subject_key: Option<String>,
99 pub tool_server: String,
100 pub tool_name: String,
101 pub settlement_mode: MeteredSettlementMode,
102 pub provider: String,
103 pub quote_id: String,
104 pub billing_unit: String,
105 pub quoted_units: u64,
106 pub quoted_cost: MonetaryAmount,
107 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub max_billed_units: Option<u64>,
109 #[serde(default, skip_serializing_if = "Option::is_none")]
110 pub financial_cost_charged: Option<u64>,
111 #[serde(default, skip_serializing_if = "Option::is_none")]
112 pub financial_currency: Option<String>,
113 #[serde(default, skip_serializing_if = "Option::is_none")]
114 pub budget_authority: Option<FinancialBudgetAuthorityReceiptMetadata>,
115 #[serde(default, skip_serializing_if = "Option::is_none")]
116 pub evidence: Option<MeteredBillingEvidenceRecord>,
117 pub reconciliation_state: MeteredBillingReconciliationState,
118 pub action_required: bool,
119 pub evidence_missing: bool,
120 pub exceeds_quoted_units: bool,
121 pub exceeds_max_billed_units: bool,
122 pub exceeds_quoted_cost: bool,
123 pub financial_mismatch: bool,
124 #[serde(default, skip_serializing_if = "Option::is_none")]
125 pub note: Option<String>,
126 #[serde(default, skip_serializing_if = "Option::is_none")]
127 pub updated_at: Option<u64>,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
131#[serde(rename_all = "camelCase")]
132pub struct MeteredBillingReconciliationReport {
133 pub summary: MeteredBillingReconciliationSummary,
134 pub receipts: Vec<MeteredBillingReconciliationRow>,
135}
136
137#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
138#[serde(rename_all = "camelCase")]
139pub struct EconomicReceiptProjectionSummary {
140 pub matching_receipts: u64,
141 pub returned_receipts: u64,
142 pub metered_receipts: u64,
143 pub pending_settlement_receipts: u64,
144 pub failed_settlement_receipts: u64,
145 pub settlement_actionable_receipts: u64,
146 pub metering_actionable_receipts: u64,
147 pub metering_evidence_missing_receipts: u64,
148 pub metering_financial_mismatch_receipts: u64,
149 pub truncated: bool,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
153#[serde(rename_all = "camelCase")]
154pub struct EconomicReceiptSettlementProjection {
155 pub settlement_status: SettlementStatus,
156 pub reconciliation_state: SettlementReconciliationState,
157 pub action_required: bool,
158 #[serde(default, skip_serializing_if = "Option::is_none")]
159 pub note: Option<String>,
160 #[serde(default, skip_serializing_if = "Option::is_none")]
161 pub updated_at: Option<u64>,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
165#[serde(rename_all = "camelCase")]
166pub struct EconomicReceiptMeteringProjection {
167 pub reconciliation_state: MeteredBillingReconciliationState,
168 pub action_required: bool,
169 pub evidence_missing: bool,
170 pub exceeds_quoted_units: bool,
171 pub exceeds_max_billed_units: bool,
172 pub exceeds_quoted_cost: bool,
173 pub financial_mismatch: bool,
174 #[serde(default, skip_serializing_if = "Option::is_none")]
175 pub evidence: Option<MeteredBillingEvidenceRecord>,
176 #[serde(default, skip_serializing_if = "Option::is_none")]
177 pub note: Option<String>,
178 #[serde(default, skip_serializing_if = "Option::is_none")]
179 pub updated_at: Option<u64>,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
183#[serde(rename_all = "camelCase")]
184pub struct EconomicReceiptProjectionRow {
185 pub receipt_id: String,
186 pub timestamp: u64,
187 pub capability_id: String,
188 #[serde(default, skip_serializing_if = "Option::is_none")]
189 pub subject_key: Option<String>,
190 pub tool_server: String,
191 pub tool_name: String,
192 pub economic_authorization: EconomicAuthorizationReceiptMetadata,
193 #[serde(default, skip_serializing_if = "Option::is_none")]
194 pub budget_authority: Option<FinancialBudgetAuthorityReceiptMetadata>,
195 pub settlement: EconomicReceiptSettlementProjection,
196 #[serde(default, skip_serializing_if = "Option::is_none")]
197 pub metering: Option<EconomicReceiptMeteringProjection>,
198}
199
200#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
201#[serde(rename_all = "camelCase")]
202pub struct EconomicReceiptProjectionReport {
203 pub summary: EconomicReceiptProjectionSummary,
204 pub receipts: Vec<EconomicReceiptProjectionRow>,
205}
206
207#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
208#[serde(rename_all = "camelCase")]
209pub struct EconomicCompletionFlowSummary {
210 pub matching_receipts: u64,
211 pub returned_receipts: u64,
212 pub matching_underwriting_decisions: u64,
213 pub returned_underwriting_decisions: u64,
214 pub matching_credit_facilities: u64,
215 pub returned_credit_facilities: u64,
216 pub matching_credit_bonds: u64,
217 pub returned_credit_bonds: u64,
218 pub pending_settlement_receipts: u64,
219 pub failed_settlement_receipts: u64,
220 pub metering_actionable_receipts: u64,
221 #[serde(default, skip_serializing_if = "Option::is_none")]
222 pub latest_underwriting_decision_id: Option<String>,
223 #[serde(default, skip_serializing_if = "Option::is_none")]
224 pub latest_underwriting_outcome: Option<UnderwritingDecisionOutcome>,
225 #[serde(default, skip_serializing_if = "Option::is_none")]
226 pub latest_credit_facility_id: Option<String>,
227 #[serde(default, skip_serializing_if = "Option::is_none")]
228 pub latest_credit_facility_disposition: Option<CreditFacilityDisposition>,
229 #[serde(default, skip_serializing_if = "Option::is_none")]
230 pub latest_credit_bond_id: Option<String>,
231 #[serde(default, skip_serializing_if = "Option::is_none")]
232 pub latest_credit_bond_disposition: Option<CreditBondDisposition>,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
236#[serde(rename_all = "camelCase")]
237pub struct EconomicCompletionFlowReport {
238 pub schema: String,
239 pub generated_at: u64,
240 pub filters: ExposureLedgerQuery,
241 pub summary: EconomicCompletionFlowSummary,
242 pub economic_receipts: EconomicReceiptProjectionReport,
243 pub underwriting_decisions: UnderwritingDecisionListReport,
244 pub credit_facilities: CreditFacilityListReport,
245 pub credit_bonds: CreditBondListReport,
246}