Skip to main content

efi_bank/
types.rs

1use serde::{Deserialize, Serialize};
2use serde_repr::{Deserialize_repr, Serialize_repr};
3use serde_with::skip_serializing_none;
4
5// ========== Split de pagamento Pix ==========
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct SplitRepasse {
10    pub tipo: String,
11    pub valor: String,
12    pub favorecido: SplitFavorecido,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct SplitFavorecido {
18    pub cpf: String,
19    pub conta: String,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct SplitParte {
25    pub tipo: String,
26    pub valor: String,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[serde(rename_all = "camelCase")]
31pub struct SplitPayload {
32    pub descricao: String,
33    pub lancamento: SplitLancamento,
34    pub split: SplitConfig,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38#[serde(rename_all = "camelCase")]
39pub struct SplitLancamento {
40    pub imediato: bool,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45pub struct SplitConfig {
46    pub divisao_tarifa: String,
47    pub minha_parte: SplitParte,
48    pub repasses: Vec<SplitRepasse>,
49}
50
51#[skip_serializing_none]
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(rename_all = "camelCase")]
54pub struct SplitConfigResponse {
55    pub id: String,
56    pub descricao: Option<String>,
57    pub lancamento: Option<SplitLancamento>,
58    pub split: Option<SplitConfig>,
59}
60
61#[skip_serializing_none]
62#[derive(Debug, Clone, Serialize, Deserialize)]
63#[serde(rename_all = "camelCase")]
64pub struct SplitLinkResponse {
65    pub status: String,
66    pub message: Option<String>,
67}
68
69// ========== COB - Immediate Charge (Cobrança Imediata) ==========
70
71#[skip_serializing_none]
72#[derive(Debug, Clone, Serialize, Deserialize)]
73#[serde(rename_all = "camelCase")]
74pub struct CobPayload {
75    pub calendario: CobCalendario,
76    pub devedor: Option<CobPessoa>,
77    pub valor: CobValor,
78    pub chave: String,
79    pub solicitacao_pagador: Option<String>,
80    pub info_adicionais: Option<Vec<CobInfoAdicional>>,
81}
82
83#[skip_serializing_none]
84#[derive(Debug, Clone, Serialize, Deserialize)]
85#[serde(rename_all = "camelCase")]
86pub struct CobCalendario {
87    pub data_de_vencimento: Option<String>,
88    pub validade_apos_vencimento: Option<i32>,
89}
90
91#[skip_serializing_none]
92#[derive(Debug, Clone, Serialize, Deserialize)]
93#[serde(rename_all = "camelCase")]
94pub struct CobPessoa {
95    pub cpf: Option<String>,
96    pub cnpj: Option<String>,
97    pub nome: Option<String>,
98}
99
100#[skip_serializing_none]
101#[derive(Debug, Clone, Serialize, Deserialize)]
102#[serde(rename_all = "camelCase")]
103pub struct CobValor {
104    pub original: String,
105    pub multa: Option<String>,
106    pub juros: Option<String>,
107    pub desconto: Option<String>,
108    pub abatimento: Option<String>,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112#[serde(rename_all = "camelCase")]
113pub struct CobInfoAdicional {
114    pub nome: String,
115    pub valor: String,
116}
117
118#[skip_serializing_none]
119#[derive(Debug, Clone, Serialize, Deserialize)]
120#[serde(rename_all = "camelCase")]
121pub struct CobResponse {
122    pub txid: String,
123    pub calendario: Option<CobCalendarioResponse>,
124    pub devedor: Option<CobPessoa>,
125    pub valor: Option<CobValor>,
126    pub chave: Option<String>,
127    pub solicitacao_pagador: Option<String>,
128    pub info_adicionais: Option<Vec<CobInfoAdicional>>,
129    pub br: Option<String>,
130    pub status: Option<String>,
131    pub criacao_date_time: Option<String>,
132}
133
134#[skip_serializing_none]
135#[derive(Debug, Clone, Serialize, Deserialize)]
136#[serde(rename_all = "camelCase")]
137pub struct CobCalendarioResponse {
138    pub criacao_date_time: Option<String>,
139    pub data_de_vencimento: Option<String>,
140    pub validade_apos_vencimento: Option<i32>,
141}
142
143// ========== COBV - Expiring Charge (Cobrança com Vencimento) ==========
144
145#[skip_serializing_none]
146#[derive(Debug, Clone, Serialize, Deserialize)]
147#[serde(rename_all = "camelCase")]
148pub struct CobvPayload {
149    pub calendario: CobvCalendario,
150    pub devedor: Option<CobPessoa>,
151    pub valor: CobValor,
152    pub chave: String,
153    pub solicitacao_pagador: Option<String>,
154    pub info_adicionais: Option<Vec<CobInfoAdicional>>,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize)]
158#[serde(rename_all = "camelCase")]
159pub struct CobvCalendario {
160    pub data_de_vencimento: String,
161    pub validade_apos_vencimento: i32,
162}
163
164#[skip_serializing_none]
165#[derive(Debug, Clone, Serialize, Deserialize)]
166#[serde(rename_all = "camelCase")]
167pub struct CobvResponse {
168    pub txid: String,
169    pub calendario: Option<CobvCalendarioResponse>,
170    pub devedor: Option<CobPessoa>,
171    pub valor: Option<CobValor>,
172    pub chave: Option<String>,
173    pub solicitacao_pagador: Option<String>,
174    pub info_adicionais: Option<Vec<CobInfoAdicional>>,
175    pub br: Option<String>,
176    pub status: Option<String>,
177    pub criacao_date_time: Option<String>,
178}
179
180#[skip_serializing_none]
181#[derive(Debug, Clone, Serialize, Deserialize)]
182#[serde(rename_all = "camelCase")]
183pub struct CobvCalendarioResponse {
184    pub criacao_date_time: Option<String>,
185    pub data_de_vencimento: Option<String>,
186    pub validade_apos_vencimento: Option<i32>,
187}
188
189// ========== Webhook Management ==========
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
192pub struct WebhookPayload {
193    pub url: String,
194    pub chave: String,
195}
196
197#[skip_serializing_none]
198#[derive(Debug, Clone, Serialize, Deserialize)]
199#[serde(rename_all = "camelCase")]
200pub struct WebhookResponse {
201    pub id: String,
202    pub url: String,
203    pub chave: Option<String>,
204    pub criacao_date_time: Option<String>,
205}
206
207#[derive(Debug, Clone, Serialize, Deserialize)]
208pub struct WebhooksListResponse {
209    pub webhooks: Vec<WebhookResponse>,
210}
211
212// ========== PIX Transactions ==========
213
214#[skip_serializing_none]
215#[derive(Debug, Clone, Serialize, Deserialize)]
216#[serde(rename_all = "camelCase")]
217pub struct PixTransactionPayload {
218    pub valor: String,
219    pub chave_destino: String,
220    pub descricao: Option<String>,
221    pub idempotency_key: Option<String>,
222}
223
224#[skip_serializing_none]
225#[derive(Debug, Clone, Serialize, Deserialize)]
226#[serde(rename_all = "camelCase")]
227pub struct PixTransactionResponse {
228    pub id: String,
229    pub end_to_end_id: String,
230    pub valor: String,
231    pub status: String,
232    pub chave_destino: Option<String>,
233    pub data_hora: Option<String>,
234}
235
236#[skip_serializing_none]
237#[derive(Debug, Clone, Serialize, Deserialize)]
238#[serde(rename_all = "camelCase")]
239pub struct PixTransactionDetailResponse {
240    pub id: String,
241    pub end_to_end_id: String,
242    pub valor: String,
243    pub status: String,
244    pub chave_destino: Option<String>,
245    pub chave_origem: Option<String>,
246    pub data_hora: Option<String>,
247    pub motivo_cancelamento: Option<String>,
248}
249
250// ========== Billing API - Split de Pagamento ==========
251
252#[skip_serializing_none]
253#[derive(Debug, Clone, Serialize, Deserialize)]
254pub struct BillingRepasse {
255    pub payee_code: String,
256    /// transfer percentage, where 9000 equals 90%
257    pub percentage: Option<i32>,
258    pub fixed: Option<i32>,
259}
260
261#[derive(Debug, Clone, Serialize_repr, Deserialize_repr)]
262#[repr(u8)]
263pub enum BillingRepasseType {
264    /// fee is deducted only from the account that issued the charge
265    IssuerOnly = 1,
266    /// fee is deducted proportionally according to the percentage defined for each account receiving the transfer
267    Proportional = 2,
268}
269
270#[derive(Debug, Clone, Serialize, Deserialize)]
271pub struct BillingMarketplace {
272    pub repasses: Vec<BillingRepasse>,
273    pub mode: BillingRepasseType,
274}
275
276#[derive(Debug, Clone, Serialize, Deserialize)]
277pub struct BillingMarketplaceResponse {
278    pub repasses: Vec<BillingRepasse>,
279}
280
281#[skip_serializing_none]
282#[derive(Debug, Clone, Serialize, Deserialize)]
283pub struct BillingItem {
284    pub name: String,
285    pub value: i64,
286    pub amount: i32,
287    pub marketplace: Option<BillingMarketplace>,
288}
289
290#[skip_serializing_none]
291#[derive(Debug, Clone, Serialize, Deserialize)]
292pub struct BillingItemResponse {
293    pub name: String,
294    pub value: i64,
295    pub amount: i32,
296    pub marketplace: Option<BillingMarketplaceResponse>,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize)]
300pub struct BillingShipping {
301    pub name: String,
302    pub value: i64,
303}
304
305#[skip_serializing_none]
306#[derive(Debug, Clone, Serialize, Deserialize)]
307pub struct BillingAddress {
308    pub street: Option<String>,
309    pub number: Option<String>,
310    pub neighborhood: Option<String>,
311    pub zipcode: Option<String>,
312    pub city: Option<String>,
313    pub complement: Option<String>,
314    pub state: Option<String>,
315}
316
317#[derive(Debug, Clone, Serialize, Deserialize)]
318pub struct BillingJuridicalPerson {
319    pub corporate_name: String,
320    pub cnpj: String,
321}
322
323#[skip_serializing_none]
324#[derive(Debug, Clone, Serialize, Deserialize)]
325pub struct BillingCustomer {
326    pub name: Option<String>,
327    pub cpf: Option<String>,
328    pub email: Option<String>,
329    pub birth: Option<String>,
330    pub phone_number: Option<String>,
331    pub address: Option<BillingAddress>,
332    pub juridical_person: Option<BillingJuridicalPerson>,
333}
334
335#[skip_serializing_none]
336#[derive(Debug, Clone, Serialize, Deserialize)]
337pub struct BillingBilletConfigurations {
338    pub fine: Option<i64>,
339    pub interest: Option<i64>,
340}
341
342#[skip_serializing_none]
343#[derive(Debug, Clone, Serialize, Deserialize)]
344pub struct BillingBankingBillet {
345    pub expire_at: Option<String>,
346    pub customer: BillingCustomer,
347    pub configurations: Option<BillingBilletConfigurations>,
348    pub message: Option<String>,
349}
350
351#[skip_serializing_none]
352#[derive(Debug, Clone, Serialize, Deserialize)]
353pub struct BillingPayment {
354    pub banking_billet: Option<BillingBankingBillet>,
355    pub credit_card: Option<BillingCreditCard>,
356}
357
358#[skip_serializing_none]
359#[derive(Debug, Clone, Serialize, Deserialize)]
360pub struct BillingCreditCard {
361    pub customer: BillingCustomer,
362    pub installments: i32,
363    pub payment_token: String,
364    pub billing_address: Option<BillingAddress>,
365}
366
367#[skip_serializing_none]
368#[derive(Debug, Clone, Serialize, Deserialize)]
369pub struct BillingChargeMetadata {
370    /// Your valid URL address that will receive notifications of transaction status changes.
371    /// Maximum of 255 characters.
372    pub notification_url: Option<String>,
373    /// Allows associating an Efí transaction with a specific ID from your system or application,
374    /// allowing you to identify it if you have a specific identification and want to maintain it.
375    /// Maximum of 255 characters.
376    pub custom_id: Option<String>,
377}
378
379#[skip_serializing_none]
380#[derive(Debug, Clone, Serialize, Deserialize)]
381pub struct BillingChargeCreateRequest {
382    pub items: Vec<BillingItem>,
383    pub metadata: Option<BillingChargeMetadata>,
384}
385
386#[skip_serializing_none]
387#[derive(Debug, Clone, Serialize, Deserialize)]
388pub struct BillingChargeOneStepRequest {
389    pub items: Vec<BillingItem>,
390    pub shippings: Option<Vec<BillingShipping>>,
391    pub payment: BillingPayment,
392    pub metadata: Option<BillingChargeMetadata>,
393}
394
395#[derive(Debug, Clone, Serialize, Deserialize)]
396pub struct BillingChargePayRequest {
397    pub payment: BillingPayment,
398}
399
400#[derive(Debug, Clone, Serialize, Deserialize)]
401pub struct BillingChargeResponse {
402    pub code: i32,
403    pub data: BillingChargeData,
404}
405
406#[derive(Debug, Clone, Serialize, Deserialize)]
407pub struct BillingChargeDetailResponse {
408    pub code: i32,
409    pub data: BillingChargeDetailData,
410}
411
412#[skip_serializing_none]
413#[derive(Debug, Clone, Serialize, Deserialize)]
414pub struct BillingChargeDetailData {
415    pub charge_id: i64,
416    pub total: i64,
417    pub status: String,
418    pub custom_id: Option<String>,
419    pub created_at: String,
420    pub notification_url: Option<String>,
421    pub items: Vec<BillingItemResponse>,
422    pub history: Vec<BillingChargeHistoryEntry>,
423    pub shippings: Option<Vec<BillingChargeShipping>>,
424    pub customer: Option<BillingCustomer>,
425    pub payment: BillingChargeDetailPayment,
426}
427
428#[skip_serializing_none]
429#[derive(Debug, Clone, Serialize, Deserialize)]
430pub struct BillingChargeHistoryEntry {
431    pub message: String,
432    pub created_at: String,
433}
434
435#[skip_serializing_none]
436#[derive(Debug, Clone, Serialize, Deserialize)]
437pub struct BillingChargeShipping {
438    pub name: String,
439    pub value: i64,
440    pub payee_code: Option<String>,
441}
442
443#[skip_serializing_none]
444#[derive(Debug, Clone, Serialize, Deserialize)]
445pub struct BillingChargeDetailPayment {
446    pub method: String,
447    pub created_at: String,
448    pub message: Option<String>,
449    pub banking_billet: BillingChargeDetailBankingBillet,
450    pub credit_card: Option<serde_json::Value>,
451}
452
453#[skip_serializing_none]
454#[derive(Debug, Clone, Serialize, Deserialize)]
455pub struct BillingChargeDetailBankingBillet {
456    pub barcode: String,
457    pub pix: BillingPix,
458    pub link: String,
459    pub billet_link: String,
460    pub pdf: BillingPdf,
461    pub expire_at: String,
462}
463
464#[skip_serializing_none]
465#[derive(Debug, Clone, Serialize, Deserialize)]
466pub struct BillingChargeData {
467    pub barcode: String,
468    #[serde(rename = "pix")]
469    pub pix: Option<BillingPix>,
470    pub link: String,
471    pub billet_link: String,
472    pub pdf: BillingPdf,
473    pub expire_at: String,
474    pub charge_id: i64,
475    pub status: String,
476    pub total: i64,
477    pub payment: String,
478}
479
480#[skip_serializing_none]
481#[derive(Debug, Clone, Serialize, Deserialize)]
482pub struct BillingPix {
483    pub qrcode: String,
484    pub qrcode_image: String,
485}
486
487#[derive(Debug, Clone, Serialize, Deserialize)]
488pub struct BillingPdf {
489    pub charge: String,
490}
491
492// ========== Billing API - Carnet ===========
493
494#[skip_serializing_none]
495#[derive(Debug, Clone, Serialize, Deserialize)]
496pub struct CarnetCustomer {
497    pub name: Option<String>,
498    pub cpf: Option<String>,
499    pub cnpj: Option<String>,
500    pub email: Option<String>,
501    pub phone_number: Option<String>,
502    pub birth: Option<String>,
503    pub juridical_person: Option<BillingJuridicalPerson>,
504}
505
506#[skip_serializing_none]
507#[derive(Debug, Clone, Serialize, Deserialize)]
508pub struct CarnetCreateRequest {
509    pub items: Vec<BillingItem>,
510    pub customer: CarnetCustomer,
511    pub expire_at: String,
512    pub message: Option<String>,
513    pub repeats: i32,
514    pub split_items: Option<bool>,
515    pub metadata: Option<CarnetMetadataRequest>,
516    pub configurations: Option<BillingBilletConfigurations>,
517}
518
519#[skip_serializing_none]
520#[derive(Debug, Clone, Serialize, Deserialize)]
521pub struct CarnetMetadataRequest {
522    pub notification_url: Option<String>,
523    pub custom_id: Option<String>,
524}
525
526#[derive(Debug, Clone, Serialize, Deserialize)]
527pub struct CarnetParcelRequest {
528    pub expire_at: String,
529}
530
531#[derive(Debug, Clone, Serialize, Deserialize)]
532pub struct CarnetParcelsRequest {
533    pub parcels: Vec<CarnetParcel>,
534}
535
536#[derive(Debug, Clone, Serialize, Deserialize)]
537pub struct CarnetParcel {
538    pub parcel: i32,
539    pub expire_at: String,
540}
541
542#[derive(Debug, Clone, Serialize, Deserialize)]
543pub struct CarnetHistoryRequest {
544    pub description: String,
545}
546
547#[skip_serializing_none]
548#[derive(Debug, Clone, Serialize, Deserialize)]
549pub struct CarnetData {
550    pub carnet_id: i64,
551    pub status: String,
552    pub cover: String,
553    pub link: String,
554    pub carnet_link: String,
555    pub pdf: CarnetPdf,
556    pub charges: Vec<CarnetCharge>,
557}
558
559#[skip_serializing_none]
560#[derive(Debug, Clone, Serialize, Deserialize)]
561pub struct CarnetPdf {
562    pub carnet: String,
563    pub cover: String,
564}
565
566#[skip_serializing_none]
567#[derive(Debug, Clone, Serialize, Deserialize)]
568pub struct CarnetCharge {
569    pub charge_id: i64,
570    pub parcel: String,
571    pub status: String,
572    pub value: i64,
573    pub expire_at: String,
574    pub url: String,
575    pub parcel_link: String,
576    pub pdf: CarnetChargePdf,
577    pub barcode: String,
578    pub pix: BillingPix,
579}
580
581#[skip_serializing_none]
582#[derive(Debug, Clone, Serialize, Deserialize)]
583pub struct CarnetChargePdf {
584    pub charge: String,
585}
586
587#[skip_serializing_none]
588#[derive(Debug, Clone, Serialize, Deserialize)]
589pub struct CarnetResponse {
590    pub code: i32,
591    pub data: CarnetData,
592}
593
594#[derive(Debug, Clone, Serialize, Deserialize)]
595pub struct BillingNotificationResponse {
596    pub code: i32,
597    pub data: Vec<BillingNotificationData>,
598}
599
600#[skip_serializing_none]
601#[derive(Debug, Clone, Serialize, Deserialize)]
602pub struct BillingNotificationData {
603    pub created_at: String,
604    pub custom_id: Option<String>,
605    pub id: i64,
606    pub identifiers: BillingNotificationIdentifiers,
607    pub status: BillingNotificationStatus,
608    #[serde(rename = "type")]
609    pub r#type: String,
610    pub received_by_bank_at: Option<String>,
611    pub value: Option<i64>,
612}
613
614#[derive(Debug, Clone, Serialize, Deserialize)]
615pub struct BillingNotificationIdentifiers {
616    pub charge_id: i64,
617}
618
619#[derive(Debug, Clone, Serialize, Deserialize)]
620pub struct BillingNotificationStatus {
621    pub current: String,
622    pub previous: Option<String>,
623}