1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct TokenResponse {
7 pub token_type: String,
8 pub refresh_expires_in: i64,
9 pub refresh_token: String,
10 pub access_token: String,
11 pub expires_in: i64,
12 pub scope: String,
13 #[serde(rename = "not-before-policy")]
14 pub not_before_policy: String,
15 pub session_state: String,
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize, Default)]
21pub struct Address {
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub city: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub district: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub street: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub building: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub address: Option<String>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub zipcode: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub longitude: Option<String>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub latitude: Option<String>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, Default)]
41pub struct SenderBranchData {
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub register: Option<String>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub name: Option<String>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub email: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub phone: Option<String>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub address: Option<Address>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, Default)]
55pub struct SenderStaffData {
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub name: Option<String>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub email: Option<String>,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub phone: Option<String>,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize, Default)]
65pub struct InvoiceReceiverData {
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub register: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub name: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub email: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub phone: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub address: Option<Address>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
79pub struct Account {
80 pub account_bank_code: String,
81 pub account_number: String,
82 pub iban_number: String,
83 pub account_name: String,
84 pub account_currency: String,
85 pub is_default: bool,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct Transaction {
90 pub description: String,
91 pub amount: String,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub accounts: Option<Vec<Account>>,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct InvoiceLine {
98 #[serde(skip_serializing_if = "Option::is_none")]
99 pub tax_product_code: Option<String>,
100 pub line_description: String,
101 pub line_quantity: String,
102 pub line_unit_price: String,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub note: Option<String>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub discounts: Option<Vec<TaxEntry>>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub surcharges: Option<Vec<TaxEntry>>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub taxes: Option<Vec<TaxEntry>>,
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize)]
114pub struct EbarimtInvoiceLine {
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub tax_product_code: Option<String>,
117 pub line_description: String,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub barcode: Option<String>,
120 pub line_quantity: String,
121 pub line_unit_price: String,
122 #[serde(skip_serializing_if = "Option::is_none")]
123 pub note: Option<String>,
124 #[serde(skip_serializing_if = "Option::is_none")]
125 pub classification_code: Option<String>,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub taxes: Option<Vec<TaxEntry>>,
128}
129
130#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct TaxEntry {
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub tax_code: Option<String>,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub discount_code: Option<String>,
136 #[serde(skip_serializing_if = "Option::is_none")]
137 pub surcharge_code: Option<String>,
138 pub description: String,
139 pub amount: f64,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub note: Option<String>,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize)]
145pub struct Deeplink {
146 pub name: String,
147 pub description: String,
148 pub logo: String,
149 pub link: String,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize)]
155pub struct CreateInvoiceRequest {
156 pub invoice_code: String,
157 pub sender_invoice_no: String,
158 #[serde(skip_serializing_if = "Option::is_none")]
159 pub sender_branch_code: Option<String>,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub sender_branch_data: Option<SenderBranchData>,
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub sender_staff_data: Option<SenderStaffData>,
164 #[serde(skip_serializing_if = "Option::is_none")]
165 pub sender_staff_code: Option<String>,
166 pub invoice_receiver_code: String,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub invoice_receiver_data: Option<InvoiceReceiverData>,
169 pub invoice_description: String,
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub enable_expiry: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub allow_partial: Option<bool>,
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub minimum_amount: Option<f64>,
176 #[serde(skip_serializing_if = "Option::is_none")]
177 pub allow_exceed: Option<bool>,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub maximum_amount: Option<f64>,
180 pub amount: f64,
181 pub callback_url: String,
182 #[serde(skip_serializing_if = "Option::is_none")]
183 pub sender_terminal_code: Option<String>,
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub sender_terminal_data: Option<serde_json::Value>,
186 #[serde(skip_serializing_if = "Option::is_none")]
187 pub allow_subscribe: Option<bool>,
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub subscription_interval: Option<String>,
190 #[serde(skip_serializing_if = "Option::is_none")]
191 pub subscription_webhook: Option<String>,
192 #[serde(skip_serializing_if = "Option::is_none")]
193 pub note: Option<String>,
194 #[serde(skip_serializing_if = "Option::is_none")]
195 pub transactions: Option<Vec<Transaction>>,
196 #[serde(skip_serializing_if = "Option::is_none")]
197 pub lines: Option<Vec<InvoiceLine>>,
198}
199
200#[derive(Debug, Clone, Serialize, Deserialize)]
201pub struct CreateSimpleInvoiceRequest {
202 pub invoice_code: String,
203 pub sender_invoice_no: String,
204 pub invoice_receiver_code: String,
205 pub invoice_description: String,
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub sender_branch_code: Option<String>,
208 pub amount: f64,
209 pub callback_url: String,
210}
211
212#[derive(Debug, Clone, Serialize, Deserialize)]
213pub struct CreateEbarimtInvoiceRequest {
214 pub invoice_code: String,
215 pub sender_invoice_no: String,
216 #[serde(skip_serializing_if = "Option::is_none")]
217 pub sender_branch_code: Option<String>,
218 #[serde(skip_serializing_if = "Option::is_none")]
219 pub sender_staff_data: Option<SenderStaffData>,
220 #[serde(skip_serializing_if = "Option::is_none")]
221 pub sender_staff_code: Option<String>,
222 pub invoice_receiver_code: String,
223 #[serde(skip_serializing_if = "Option::is_none")]
224 pub invoice_receiver_data: Option<InvoiceReceiverData>,
225 pub invoice_description: String,
226 pub tax_type: String,
227 pub district_code: String,
228 pub callback_url: String,
229 pub lines: Vec<EbarimtInvoiceLine>,
230}
231
232#[derive(Debug, Clone, Serialize, Deserialize)]
233pub struct InvoiceResponse {
234 pub invoice_id: String,
235 pub qr_text: String,
236 pub qr_image: String,
237 #[serde(rename = "qPay_shortUrl")]
238 pub qpay_short_url: String,
239 pub urls: Vec<Deeplink>,
240}
241
242#[derive(Debug, Clone, Serialize, Deserialize)]
245pub struct Offset {
246 pub page_number: i32,
247 pub page_limit: i32,
248}
249
250#[derive(Debug, Clone, Serialize, Deserialize)]
251pub struct PaymentCheckRequest {
252 pub object_type: String,
253 pub object_id: String,
254 #[serde(skip_serializing_if = "Option::is_none")]
255 pub offset: Option<Offset>,
256}
257
258#[derive(Debug, Clone, Serialize, Deserialize)]
259pub struct PaymentCheckResponse {
260 pub count: i32,
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub paid_amount: Option<f64>,
263 pub rows: Vec<PaymentCheckRow>,
264}
265
266#[derive(Debug, Clone, Serialize, Deserialize)]
267pub struct PaymentCheckRow {
268 pub payment_id: String,
269 pub payment_status: String,
270 pub payment_amount: String,
271 pub trx_fee: String,
272 pub payment_currency: String,
273 pub payment_wallet: String,
274 pub payment_type: String,
275 pub next_payment_date: Option<String>,
276 pub next_payment_datetime: Option<String>,
277 #[serde(default)]
278 pub card_transactions: Vec<CardTransaction>,
279 #[serde(default)]
280 pub p2p_transactions: Vec<P2PTransaction>,
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize)]
284pub struct PaymentDetail {
285 pub payment_id: String,
286 pub payment_status: String,
287 pub payment_fee: String,
288 pub payment_amount: String,
289 pub payment_currency: String,
290 pub payment_date: String,
291 pub payment_wallet: String,
292 pub transaction_type: String,
293 pub object_type: String,
294 pub object_id: String,
295 pub next_payment_date: Option<String>,
296 pub next_payment_datetime: Option<String>,
297 #[serde(default)]
298 pub card_transactions: Vec<CardTransaction>,
299 #[serde(default)]
300 pub p2p_transactions: Vec<P2PTransaction>,
301}
302
303#[derive(Debug, Clone, Serialize, Deserialize)]
304pub struct CardTransaction {
305 #[serde(skip_serializing_if = "Option::is_none")]
306 pub card_merchant_code: Option<String>,
307 #[serde(skip_serializing_if = "Option::is_none")]
308 pub card_terminal_code: Option<String>,
309 #[serde(skip_serializing_if = "Option::is_none")]
310 pub card_number: Option<String>,
311 pub card_type: String,
312 pub is_cross_border: bool,
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub amount: Option<String>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub transaction_amount: Option<String>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub currency: Option<String>,
319 #[serde(skip_serializing_if = "Option::is_none")]
320 pub transaction_currency: Option<String>,
321 #[serde(skip_serializing_if = "Option::is_none")]
322 pub date: Option<String>,
323 #[serde(skip_serializing_if = "Option::is_none")]
324 pub transaction_date: Option<String>,
325 #[serde(skip_serializing_if = "Option::is_none")]
326 pub status: Option<String>,
327 #[serde(skip_serializing_if = "Option::is_none")]
328 pub transaction_status: Option<String>,
329 pub settlement_status: String,
330 pub settlement_status_date: String,
331}
332
333#[derive(Debug, Clone, Serialize, Deserialize)]
334pub struct P2PTransaction {
335 pub transaction_bank_code: String,
336 pub account_bank_code: String,
337 pub account_bank_name: String,
338 pub account_number: String,
339 pub status: String,
340 pub amount: String,
341 pub currency: String,
342 pub settlement_status: String,
343}
344
345#[derive(Debug, Clone, Serialize, Deserialize)]
346pub struct PaymentListRequest {
347 pub object_type: String,
348 pub object_id: String,
349 pub start_date: String,
350 pub end_date: String,
351 pub offset: Offset,
352}
353
354#[derive(Debug, Clone, Serialize, Deserialize)]
355pub struct PaymentListResponse {
356 pub count: i32,
357 pub rows: Vec<PaymentListItem>,
358}
359
360#[derive(Debug, Clone, Serialize, Deserialize)]
361pub struct PaymentListItem {
362 pub payment_id: String,
363 pub payment_date: String,
364 pub payment_status: String,
365 pub payment_fee: String,
366 pub payment_amount: String,
367 pub payment_currency: String,
368 pub payment_wallet: String,
369 pub payment_name: String,
370 pub payment_description: String,
371 pub qr_code: String,
372 pub paid_by: String,
373 pub object_type: String,
374 pub object_id: String,
375}
376
377#[derive(Debug, Clone, Serialize, Deserialize, Default)]
378pub struct PaymentCancelRequest {
379 #[serde(skip_serializing_if = "Option::is_none")]
380 pub callback_url: Option<String>,
381 #[serde(skip_serializing_if = "Option::is_none")]
382 pub note: Option<String>,
383}
384
385#[derive(Debug, Clone, Serialize, Deserialize, Default)]
386pub struct PaymentRefundRequest {
387 #[serde(skip_serializing_if = "Option::is_none")]
388 pub callback_url: Option<String>,
389 #[serde(skip_serializing_if = "Option::is_none")]
390 pub note: Option<String>,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
396pub struct CreateEbarimtRequest {
397 pub payment_id: String,
398 pub ebarimt_receiver_type: String,
399 #[serde(skip_serializing_if = "Option::is_none")]
400 pub ebarimt_receiver: Option<String>,
401 #[serde(skip_serializing_if = "Option::is_none")]
402 pub district_code: Option<String>,
403 #[serde(skip_serializing_if = "Option::is_none")]
404 pub classification_code: Option<String>,
405}
406
407#[derive(Debug, Clone, Serialize, Deserialize)]
408pub struct EbarimtResponse {
409 pub id: String,
410 pub ebarimt_by: String,
411 pub g_wallet_id: String,
412 pub g_wallet_customer_id: String,
413 pub ebarimt_receiver_type: String,
414 pub ebarimt_receiver: String,
415 pub ebarimt_district_code: String,
416 pub ebarimt_bill_type: String,
417 pub g_merchant_id: String,
418 pub merchant_branch_code: String,
419 pub merchant_terminal_code: Option<String>,
420 pub merchant_staff_code: Option<String>,
421 pub merchant_register_no: String,
422 pub g_payment_id: String,
423 pub paid_by: String,
424 pub object_type: String,
425 pub object_id: String,
426 pub amount: String,
427 pub vat_amount: String,
428 pub city_tax_amount: String,
429 pub ebarimt_qr_data: String,
430 pub ebarimt_lottery: String,
431 pub note: Option<String>,
432 pub barimt_status: String,
433 pub barimt_status_date: String,
434 pub ebarimt_sent_email: Option<String>,
435 pub ebarimt_receiver_phone: String,
436 pub tax_type: String,
437 #[serde(skip_serializing_if = "Option::is_none")]
438 pub merchant_tin: Option<String>,
439 #[serde(skip_serializing_if = "Option::is_none")]
440 pub ebarimt_receipt_id: Option<String>,
441 pub created_by: String,
442 pub created_date: String,
443 pub updated_by: String,
444 pub updated_date: String,
445 pub status: bool,
446 #[serde(default)]
447 pub barimt_items: Vec<EbarimtItem>,
448 #[serde(default)]
449 pub barimt_transactions: Vec<serde_json::Value>,
450 #[serde(default)]
451 pub barimt_histories: Vec<EbarimtHistory>,
452}
453
454#[derive(Debug, Clone, Serialize, Deserialize)]
455pub struct EbarimtItem {
456 pub id: String,
457 pub barimt_id: String,
458 pub merchant_product_code: Option<String>,
459 pub tax_product_code: String,
460 pub bar_code: Option<String>,
461 pub name: String,
462 pub unit_price: String,
463 pub quantity: String,
464 pub amount: String,
465 pub city_tax_amount: String,
466 pub vat_amount: String,
467 pub note: Option<String>,
468 pub created_by: String,
469 pub created_date: String,
470 pub updated_by: String,
471 pub updated_date: String,
472 pub status: bool,
473}
474
475#[derive(Debug, Clone, Serialize, Deserialize)]
476pub struct EbarimtHistory {
477 pub id: String,
478 pub barimt_id: String,
479 pub ebarimt_receiver_type: String,
480 pub ebarimt_receiver: String,
481 pub ebarimt_register_no: Option<String>,
482 pub ebarimt_bill_id: String,
483 pub ebarimt_date: String,
484 pub ebarimt_mac_address: String,
485 pub ebarimt_internal_code: String,
486 pub ebarimt_bill_type: String,
487 pub ebarimt_qr_data: String,
488 pub ebarimt_lottery: String,
489 pub ebarimt_lottery_msg: Option<String>,
490 pub ebarimt_error_code: Option<String>,
491 pub ebarimt_error_msg: Option<String>,
492 pub ebarimt_response_code: Option<String>,
493 pub ebarimt_response_msg: Option<String>,
494 pub note: Option<String>,
495 pub barimt_status: String,
496 pub barimt_status_date: String,
497 pub ebarimt_sent_email: Option<String>,
498 pub ebarimt_receiver_phone: String,
499 pub tax_type: String,
500 pub created_by: String,
501 pub created_date: String,
502 pub updated_by: String,
503 pub updated_date: String,
504 pub status: bool,
505}