1use validator::Validate;
22
23::lazy_static::lazy_static! {
24 static ref BIC_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"#).unwrap();
25}
26
27::lazy_static::lazy_static! {
28 static ref ACTIVE_OR_HISTORIC_CURRENCY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{3,3}"#).unwrap();
29}
30
31::lazy_static::lazy_static! {
32 static ref COUNTRY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}"#).unwrap();
33}
34
35::lazy_static::lazy_static! {
36 static ref CURRENCY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{3,3}"#).unwrap();
37}
38
39::lazy_static::lazy_static! {
40 static ref IBAN_2007_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"#).unwrap();
41}
42
43pub fn namespace() -> String {
45 "urn:iso:std:iso:20022:tech:xsd:tsmt.045.001.02".to_string()
46}
47
48#[derive(
49 Debug,
50 Default,
51 Clone,
52 PartialEq,
53 ::serde::Serialize,
54 ::serde::Deserialize,
55 ::derive_builder::Builder,
56 ::validator::Validate,
57)]
58pub struct AdjustmentType1ChoiceEnum {
59 #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
60 pub tp: Option<AdjustmentType2Code>,
61 #[serde(rename = "OthrAdjstmntTp", skip_serializing_if = "Option::is_none")]
62 pub othr_adjstmnt_tp: Option<Max35Text>,
63}
64#[derive(
65 Debug,
66 Default,
67 Clone,
68 PartialEq,
69 ::serde::Serialize,
70 ::serde::Deserialize,
71 ::derive_builder::Builder,
72 ::validator::Validate,
73)]
74pub struct AdjustmentType1Choice {
75 #[serde(flatten)]
76 pub value: AdjustmentType1ChoiceEnum,
77}
78#[derive(
79 Debug,
80 Default,
81 Clone,
82 PartialEq,
83 ::serde::Serialize,
84 ::serde::Deserialize,
85 ::derive_builder::Builder,
86 ::validator::Validate,
87)]
88pub struct IsoDateTime {
89 #[serde(rename = "$text")]
90 pub value: ::chrono::DateTime<::chrono::Utc>,
91}
92#[derive(
93 Debug,
94 Default,
95 Clone,
96 PartialEq,
97 ::serde::Serialize,
98 ::serde::Deserialize,
99 ::derive_builder::Builder,
100 ::validator::Validate,
101)]
102pub struct AccountSchemeName1ChoiceEnum {
103 #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
104 pub cd: Option<ExternalAccountIdentification1Code>,
105 #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
106 pub prtry: Option<Max35Text>,
107}
108#[derive(
109 Debug,
110 Default,
111 Clone,
112 PartialEq,
113 ::serde::Serialize,
114 ::serde::Deserialize,
115 ::derive_builder::Builder,
116 ::validator::Validate,
117)]
118pub struct AccountSchemeName1Choice {
119 #[serde(flatten)]
120 pub value: AccountSchemeName1ChoiceEnum,
121}
122#[derive(
123 Debug,
124 Default,
125 Clone,
126 PartialEq,
127 ::serde::Serialize,
128 ::serde::Deserialize,
129 ::derive_builder::Builder,
130 ::validator::Validate,
131)]
132pub struct Adjustment6 {
133 #[serde(rename = "Tp")]
134 pub tp: AdjustmentType1Choice,
135 #[serde(rename = "Drctn")]
136 pub drctn: AdjustmentDirection1Code,
137 #[validate]
138 #[serde(rename = "Amt")]
139 pub amt: CurrencyAndAmount,
140}
141#[derive(
142 Debug,
143 Default,
144 Clone,
145 PartialEq,
146 ::serde::Serialize,
147 ::serde::Deserialize,
148 ::derive_builder::Builder,
149 ::validator::Validate,
150)]
151pub struct IntentToPay2 {
152 #[serde(rename = "Brkdwn")]
153 pub brkdwn: BreakDown1Choice,
154 #[validate]
155 #[serde(rename = "XpctdPmtDt")]
156 pub xpctd_pmt_dt: IsoDate,
157 #[serde(rename = "SttlmTerms", skip_serializing_if = "Option::is_none")]
158 pub sttlm_terms: Option<SettlementTerms3>,
159}
160#[derive(
161 Debug,
162 Default,
163 Clone,
164 PartialEq,
165 ::serde::Serialize,
166 ::serde::Deserialize,
167 ::derive_builder::Builder,
168 ::validator::Validate,
169)]
170pub struct MessageIdentification1 {
171 #[validate]
172 #[serde(rename = "Id")]
173 pub id: Max35Text,
174 #[validate]
175 #[serde(rename = "CreDtTm")]
176 pub cre_dt_tm: IsoDateTime,
177}
178#[derive(
179 Debug,
180 Default,
181 Clone,
182 PartialEq,
183 ::serde::Serialize,
184 ::serde::Deserialize,
185 ::derive_builder::Builder,
186 ::validator::Validate,
187)]
188#[serde(rename = "Document")]
189pub struct Document {
190 #[validate]
191 #[serde(rename = "FwdInttToPayNtfctn")]
192 pub fwd_intt_to_pay_ntfctn: ForwardIntentToPayNotificationV02,
193 #[serde(rename = "@xmlns", default = "namespace")]
194 pub xmlns: String,
195}
196#[derive(
197 Debug,
198 Default,
199 Clone,
200 PartialEq,
201 ::serde::Serialize,
202 ::serde::Deserialize,
203 ::derive_builder::Builder,
204 ::validator::Validate,
205)]
206pub struct Max35Text {
207 #[validate(length(min = 1, max = 35,))]
208 #[serde(rename = "$text")]
209 pub value: String,
210}
211#[derive(
212 Debug,
213 Default,
214 Clone,
215 PartialEq,
216 ::serde::Serialize,
217 ::serde::Deserialize,
218 ::derive_builder::Builder,
219 ::validator::Validate,
220)]
221pub struct AccountIdentification4ChoiceEnum {
222 #[serde(rename = "Othr", skip_serializing_if = "Option::is_none")]
223 pub othr: Option<GenericAccountIdentification1>,
224 #[serde(rename = "IBAN", skip_serializing_if = "Option::is_none")]
225 pub iban: Option<Iban2007Identifier>,
226}
227#[derive(
228 Debug,
229 Default,
230 Clone,
231 PartialEq,
232 ::serde::Serialize,
233 ::serde::Deserialize,
234 ::derive_builder::Builder,
235 ::validator::Validate,
236)]
237pub struct AccountIdentification4Choice {
238 #[serde(flatten)]
239 pub value: AccountIdentification4ChoiceEnum,
240}
241#[derive(
242 Debug,
243 Default,
244 Clone,
245 PartialEq,
246 ::serde::Serialize,
247 ::serde::Deserialize,
248 ::derive_builder::Builder,
249 ::validator::Validate,
250)]
251pub struct SettlementTerms3 {
252 #[serde(rename = "CdtrAgt", skip_serializing_if = "Option::is_none")]
253 pub cdtr_agt: Option<FinancialInstitutionIdentification4Choice>,
254 #[validate]
255 #[serde(rename = "CdtrAcct")]
256 pub cdtr_acct: CashAccount24,
257}
258#[derive(
259 Debug,
260 Default,
261 Clone,
262 PartialEq,
263 ::serde::Serialize,
264 ::serde::Deserialize,
265 ::derive_builder::Builder,
266 ::validator::Validate,
267)]
268pub struct PendingActivity2 {
269 #[serde(rename = "Tp")]
270 pub tp: Action2Code,
271 #[serde(rename = "Desc", skip_serializing_if = "Option::is_none")]
272 pub desc: Option<Max140Text>,
273}
274#[derive(
275 Debug,
276 Default,
277 Clone,
278 PartialEq,
279 ::serde::Serialize,
280 ::serde::Deserialize,
281 ::derive_builder::Builder,
282 ::validator::Validate,
283)]
284pub struct TransactionStatus4 {
285 #[serde(rename = "Sts")]
286 pub sts: BaselineStatus3Code,
287}
288#[derive(
289 Debug,
290 Default,
291 Clone,
292 PartialEq,
293 ::serde::Serialize,
294 ::serde::Deserialize,
295 ::derive_builder::Builder,
296 ::validator::Validate,
297)]
298pub struct BicIdentifier {
299 #[validate(regex = "BIC_IDENTIFIER_REGEX")]
300 #[serde(rename = "$text")]
301 pub value: String,
302}
303#[derive(
304 Debug,
305 Default,
306 Clone,
307 PartialEq,
308 ::serde::Serialize,
309 ::serde::Deserialize,
310 ::derive_builder::Builder,
311 ::validator::Validate,
312)]
313pub struct ActiveOrHistoricCurrencyCode {
314 #[validate(regex = "ACTIVE_OR_HISTORIC_CURRENCY_CODE_REGEX")]
315 #[serde(rename = "$text")]
316 pub value: String,
317}
318#[derive(
319 Debug,
320 Default,
321 Clone,
322 PartialEq,
323 ::serde::Serialize,
324 ::serde::Deserialize,
325 ::derive_builder::Builder,
326 ::validator::Validate,
327)]
328pub struct Max34Text {
329 #[validate(length(min = 1, max = 34,))]
330 #[serde(rename = "$text")]
331 pub value: String,
332}
333#[derive(
334 Debug,
335 Default,
336 Clone,
337 PartialEq,
338 ::serde::Serialize,
339 ::serde::Deserialize,
340 ::derive_builder::Builder,
341 ::validator::Validate,
342)]
343pub struct Max140Text {
344 #[validate(length(min = 1, max = 140,))]
345 #[serde(rename = "$text")]
346 pub value: String,
347}
348#[derive(
349 Debug,
350 Default,
351 Clone,
352 PartialEq,
353 ::serde::Serialize,
354 ::serde::Deserialize,
355 ::derive_builder::Builder,
356 ::validator::Validate,
357)]
358pub struct CurrencyAndAmountSimpleType {
359 #[validate(range(min = 0,))]
360 #[serde(rename = "$text")]
361 pub value: f64,
362}
363#[derive(
364 Debug,
365 Default,
366 Clone,
367 PartialEq,
368 ::serde::Serialize,
369 ::serde::Deserialize,
370 ::derive_builder::Builder,
371 ::validator::Validate,
372)]
373pub struct Max16Text {
374 #[validate(length(min = 1, max = 16,))]
375 #[serde(rename = "$text")]
376 pub value: String,
377}
378#[derive(
379 Debug,
380 Default,
381 Clone,
382 PartialEq,
383 ::serde::Serialize,
384 ::serde::Deserialize,
385 ::derive_builder::Builder,
386 ::validator::Validate,
387)]
388pub struct ReportLine5 {
389 #[validate]
390 #[serde(rename = "PurchsOrdrRef")]
391 pub purchs_ordr_ref: DocumentIdentification7,
392 #[validate(length(min = 0,))]
393 #[serde(rename = "Adjstmnt", default)]
394 pub adjstmnt: Vec<Adjustment6>,
395 #[validate]
396 #[serde(rename = "NetAmt")]
397 pub net_amt: CurrencyAndAmount,
398}
399#[derive(
400 Debug,
401 Default,
402 Clone,
403 PartialEq,
404 ::serde::Serialize,
405 ::serde::Deserialize,
406 ::derive_builder::Builder,
407 ::validator::Validate,
408)]
409pub struct CountryCode {
410 #[validate(regex = "COUNTRY_CODE_REGEX")]
411 #[serde(rename = "$text")]
412 pub value: String,
413}
414#[derive(
415 Debug,
416 Default,
417 Clone,
418 PartialEq,
419 ::serde::Serialize,
420 ::serde::Deserialize,
421 ::derive_builder::Builder,
422 ::validator::Validate,
423)]
424pub struct BreakDown1ChoiceEnum {
425 #[serde(rename = "ByPurchsOrdr", skip_serializing_if = "Option::is_none")]
426 pub by_purchs_ordr: Option<ReportLine5>,
427 #[serde(rename = "ByComrclInvc", skip_serializing_if = "Option::is_none")]
428 pub by_comrcl_invc: Option<ReportLine6>,
429}
430#[derive(
431 Debug,
432 Default,
433 Clone,
434 PartialEq,
435 ::serde::Serialize,
436 ::serde::Deserialize,
437 ::derive_builder::Builder,
438 ::validator::Validate,
439)]
440pub struct BreakDown1Choice {
441 #[serde(flatten)]
442 pub value: BreakDown1ChoiceEnum,
443}
444#[derive(
445 Debug,
446 Default,
447 Clone,
448 PartialEq,
449 ::serde::Serialize,
450 ::serde::Deserialize,
451 ::derive_builder::Builder,
452 ::validator::Validate,
453)]
454pub struct DocumentIdentification5 {
455 #[validate]
456 #[serde(rename = "Id")]
457 pub id: Max35Text,
458 #[validate]
459 #[serde(rename = "IdIssr")]
460 pub id_issr: BicIdentification1,
461}
462#[derive(
463 Debug,
464 Default,
465 Clone,
466 PartialEq,
467 ::serde::Serialize,
468 ::serde::Deserialize,
469 ::derive_builder::Builder,
470 ::validator::Validate,
471)]
472pub struct CurrencyAndAmount {
473 #[serde(rename = "CurrencyAndAmount")]
474 pub value: CurrencyAndAmountSimpleType,
475 #[serde(rename = "@Ccy")]
476 pub ccy: CurrencyCode,
477}
478#[derive(
479 Debug,
480 Default,
481 Clone,
482 PartialEq,
483 ::serde::Serialize,
484 ::serde::Deserialize,
485 ::derive_builder::Builder,
486 ::validator::Validate,
487)]
488pub struct ExternalAccountIdentification1Code {
489 #[validate(length(min = 1, max = 4,))]
490 #[serde(rename = "$text")]
491 pub value: String,
492}
493#[derive(
494 Debug,
495 Default,
496 Clone,
497 PartialEq,
498 ::serde::Serialize,
499 ::serde::Deserialize,
500 ::derive_builder::Builder,
501 ::validator::Validate,
502)]
503pub struct FinancialInstitutionIdentification4ChoiceEnum {
504 #[serde(rename = "NmAndAdr", skip_serializing_if = "Option::is_none")]
505 pub nm_and_adr: Option<NameAndAddress6>,
506 #[serde(rename = "BIC", skip_serializing_if = "Option::is_none")]
507 pub bic: Option<BicIdentifier>,
508}
509#[derive(
510 Debug,
511 Default,
512 Clone,
513 PartialEq,
514 ::serde::Serialize,
515 ::serde::Deserialize,
516 ::derive_builder::Builder,
517 ::validator::Validate,
518)]
519pub struct FinancialInstitutionIdentification4Choice {
520 #[serde(flatten)]
521 pub value: FinancialInstitutionIdentification4ChoiceEnum,
522}
523#[derive(
524 Debug,
525 Default,
526 Clone,
527 PartialEq,
528 ::serde::Serialize,
529 ::serde::Deserialize,
530 ::derive_builder::Builder,
531 ::validator::Validate,
532)]
533pub struct BicIdentification1 {
534 #[validate]
535 #[serde(rename = "BIC")]
536 pub bic: BicIdentifier,
537}
538#[derive(
539 Debug,
540 Default,
541 Clone,
542 PartialEq,
543 ::serde::Serialize,
544 ::serde::Deserialize,
545 ::derive_builder::Builder,
546 ::validator::Validate,
547)]
548pub struct Number {
549 #[serde(rename = "$text")]
550 pub value: f64,
551}
552#[derive(
553 Debug,
554 Default,
555 Clone,
556 PartialEq,
557 ::serde::Serialize,
558 ::serde::Deserialize,
559 ::derive_builder::Builder,
560 ::validator::Validate,
561)]
562pub struct CurrencyCode {
563 #[validate(regex = "CURRENCY_CODE_REGEX")]
564 #[serde(rename = "$text")]
565 pub value: String,
566}
567#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
568pub enum Action2Code {
569 #[serde(rename = "SBTW")]
570 Sbtw,
571 #[serde(rename = "RSTW")]
572 Rstw,
573 #[serde(rename = "RSBS")]
574 Rsbs,
575 #[serde(rename = "ARDM")]
576 Ardm,
577 #[serde(rename = "ARCS")]
578 Arcs,
579 #[serde(rename = "ARES")]
580 Ares,
581 #[serde(rename = "WAIT")]
582 Wait,
583 #[serde(rename = "UPDT")]
584 Updt,
585 #[serde(rename = "SBDS")]
586 Sbds,
587 #[serde(rename = "ARBA")]
588 Arba,
589 #[serde(rename = "ARRO")]
590 Arro,
591 #[serde(rename = "CINR")]
592 Cinr,
593 #[default]
594 Unknown,
595}
596#[derive(
597 Debug,
598 Default,
599 Clone,
600 PartialEq,
601 ::serde::Serialize,
602 ::serde::Deserialize,
603 ::derive_builder::Builder,
604 ::validator::Validate,
605)]
606pub struct ReportLine6 {
607 #[validate]
608 #[serde(rename = "ComrclDocRef")]
609 pub comrcl_doc_ref: InvoiceIdentification1,
610 #[validate(length(min = 0,))]
611 #[serde(rename = "Adjstmnt", default)]
612 pub adjstmnt: Vec<Adjustment6>,
613 #[validate]
614 #[serde(rename = "NetAmt")]
615 pub net_amt: CurrencyAndAmount,
616 #[validate(length(min = 1,))]
617 #[serde(rename = "BrkdwnByPurchsOrdr", default)]
618 pub brkdwn_by_purchs_ordr: Vec<ReportLine7>,
619}
620#[derive(
621 Debug,
622 Default,
623 Clone,
624 PartialEq,
625 ::serde::Serialize,
626 ::serde::Deserialize,
627 ::derive_builder::Builder,
628 ::validator::Validate,
629)]
630pub struct SimpleIdentificationInformation {
631 #[validate]
632 #[serde(rename = "Id")]
633 pub id: Max35Text,
634}
635#[derive(
636 Debug,
637 Default,
638 Clone,
639 PartialEq,
640 ::serde::Serialize,
641 ::serde::Deserialize,
642 ::derive_builder::Builder,
643 ::validator::Validate,
644)]
645pub struct DocumentIdentification7 {
646 #[validate]
647 #[serde(rename = "Id")]
648 pub id: Max35Text,
649 #[validate]
650 #[serde(rename = "DtOfIsse")]
651 pub dt_of_isse: IsoDate,
652}
653#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
654pub enum AdjustmentDirection1Code {
655 #[serde(rename = "ADDD")]
656 Addd,
657 #[serde(rename = "SUBS")]
658 Subs,
659 #[default]
660 Unknown,
661}
662#[derive(
663 Debug,
664 Default,
665 Clone,
666 PartialEq,
667 ::serde::Serialize,
668 ::serde::Deserialize,
669 ::derive_builder::Builder,
670 ::validator::Validate,
671)]
672pub struct ForwardIntentToPayNotificationV02 {
673 #[validate]
674 #[serde(rename = "NtfctnId")]
675 pub ntfctn_id: MessageIdentification1,
676 #[validate]
677 #[serde(rename = "TxId")]
678 pub tx_id: SimpleIdentificationInformation,
679 #[validate]
680 #[serde(rename = "EstblishdBaselnId")]
681 pub estblishd_baseln_id: DocumentIdentification3,
682 #[validate]
683 #[serde(rename = "TxSts")]
684 pub tx_sts: TransactionStatus4,
685 #[validate(length(min = 0, max = 2,))]
686 #[serde(rename = "UsrTxRef", default)]
687 pub usr_tx_ref: Vec<DocumentIdentification5>,
688 #[validate]
689 #[serde(rename = "BuyrBk")]
690 pub buyr_bk: BicIdentification1,
691 #[validate]
692 #[serde(rename = "SellrBk")]
693 pub sellr_bk: BicIdentification1,
694 #[validate]
695 #[serde(rename = "InttToPay")]
696 pub intt_to_pay: IntentToPay2,
697 #[serde(rename = "ReqForActn", skip_serializing_if = "Option::is_none")]
698 pub req_for_actn: Option<PendingActivity2>,
699}
700#[derive(
701 Debug,
702 Default,
703 Clone,
704 PartialEq,
705 ::serde::Serialize,
706 ::serde::Deserialize,
707 ::derive_builder::Builder,
708 ::validator::Validate,
709)]
710pub struct NameAndAddress6 {
711 #[validate]
712 #[serde(rename = "Nm")]
713 pub nm: Max70Text,
714 #[validate]
715 #[serde(rename = "Adr")]
716 pub adr: PostalAddress2,
717}
718#[derive(
719 Debug,
720 Default,
721 Clone,
722 PartialEq,
723 ::serde::Serialize,
724 ::serde::Deserialize,
725 ::derive_builder::Builder,
726 ::validator::Validate,
727)]
728pub struct PostalAddress2 {
729 #[serde(rename = "StrtNm", skip_serializing_if = "Option::is_none")]
730 pub strt_nm: Option<Max70Text>,
731 #[validate]
732 #[serde(rename = "PstCdId")]
733 pub pst_cd_id: Max16Text,
734 #[validate]
735 #[serde(rename = "TwnNm")]
736 pub twn_nm: Max35Text,
737 #[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
738 pub ctry_sub_dvsn: Option<Max35Text>,
739 #[serde(rename = "Ctry")]
740 pub ctry: CountryCode,
741}
742#[derive(
743 Debug,
744 Default,
745 Clone,
746 PartialEq,
747 ::serde::Serialize,
748 ::serde::Deserialize,
749 ::derive_builder::Builder,
750 ::validator::Validate,
751)]
752pub struct IsoDate {
753 #[serde(rename = "$text")]
754 pub value: ::chrono::NaiveDate,
755}
756#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
757pub enum AdjustmentType2Code {
758 #[serde(rename = "REBA")]
759 Reba,
760 #[serde(rename = "DISC")]
761 Disc,
762 #[serde(rename = "CREN")]
763 Cren,
764 #[serde(rename = "SURC")]
765 Surc,
766 #[default]
767 Unknown,
768}
769#[derive(
770 Debug,
771 Default,
772 Clone,
773 PartialEq,
774 ::serde::Serialize,
775 ::serde::Deserialize,
776 ::derive_builder::Builder,
777 ::validator::Validate,
778)]
779pub struct InvoiceIdentification1 {
780 #[validate]
781 #[serde(rename = "InvcNb")]
782 pub invc_nb: Max35Text,
783 #[validate]
784 #[serde(rename = "IsseDt")]
785 pub isse_dt: IsoDate,
786}
787#[derive(
788 Debug,
789 Default,
790 Clone,
791 PartialEq,
792 ::serde::Serialize,
793 ::serde::Deserialize,
794 ::derive_builder::Builder,
795 ::validator::Validate,
796)]
797pub struct Max70Text {
798 #[validate(length(min = 1, max = 70,))]
799 #[serde(rename = "$text")]
800 pub value: String,
801}
802#[derive(
803 Debug,
804 Default,
805 Clone,
806 PartialEq,
807 ::serde::Serialize,
808 ::serde::Deserialize,
809 ::derive_builder::Builder,
810 ::validator::Validate,
811)]
812pub struct CashAccount24 {
813 #[serde(rename = "Id")]
814 pub id: AccountIdentification4Choice,
815 #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
816 pub tp: Option<CashAccountType2Choice>,
817 #[serde(rename = "Ccy", skip_serializing_if = "Option::is_none")]
818 pub ccy: Option<ActiveOrHistoricCurrencyCode>,
819 #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
820 pub nm: Option<Max70Text>,
821}
822#[derive(
823 Debug,
824 Default,
825 Clone,
826 PartialEq,
827 ::serde::Serialize,
828 ::serde::Deserialize,
829 ::derive_builder::Builder,
830 ::validator::Validate,
831)]
832pub struct GenericAccountIdentification1 {
833 #[validate]
834 #[serde(rename = "Id")]
835 pub id: Max34Text,
836 #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
837 pub schme_nm: Option<AccountSchemeName1Choice>,
838 #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
839 pub issr: Option<Max35Text>,
840}
841#[derive(
842 Debug,
843 Default,
844 Clone,
845 PartialEq,
846 ::serde::Serialize,
847 ::serde::Deserialize,
848 ::derive_builder::Builder,
849 ::validator::Validate,
850)]
851pub struct DocumentIdentification3 {
852 #[validate]
853 #[serde(rename = "Id")]
854 pub id: Max35Text,
855 #[validate]
856 #[serde(rename = "Vrsn")]
857 pub vrsn: Number,
858}
859#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
860pub enum BaselineStatus3Code {
861 #[serde(rename = "PROP")]
862 Prop,
863 #[serde(rename = "CLSD")]
864 Clsd,
865 #[serde(rename = "PMTC")]
866 Pmtc,
867 #[serde(rename = "ESTD")]
868 Estd,
869 #[serde(rename = "ACTV")]
870 Actv,
871 #[serde(rename = "COMP")]
872 Comp,
873 #[serde(rename = "AMRQ")]
874 Amrq,
875 #[serde(rename = "RARQ")]
876 Rarq,
877 #[serde(rename = "CLRQ")]
878 Clrq,
879 #[serde(rename = "SCRQ")]
880 Scrq,
881 #[serde(rename = "SERQ")]
882 Serq,
883 #[serde(rename = "DARQ")]
884 Darq,
885 #[default]
886 Unknown,
887}
888#[derive(
889 Debug,
890 Default,
891 Clone,
892 PartialEq,
893 ::serde::Serialize,
894 ::serde::Deserialize,
895 ::derive_builder::Builder,
896 ::validator::Validate,
897)]
898pub struct ExternalCashAccountType1Code {
899 #[validate(length(min = 1, max = 4,))]
900 #[serde(rename = "$text")]
901 pub value: String,
902}
903#[derive(
904 Debug,
905 Default,
906 Clone,
907 PartialEq,
908 ::serde::Serialize,
909 ::serde::Deserialize,
910 ::derive_builder::Builder,
911 ::validator::Validate,
912)]
913pub struct ReportLine7 {
914 #[validate]
915 #[serde(rename = "TxId")]
916 pub tx_id: Max35Text,
917 #[validate]
918 #[serde(rename = "PurchsOrdrRef")]
919 pub purchs_ordr_ref: DocumentIdentification7,
920 #[validate(length(min = 0,))]
921 #[serde(rename = "Adjstmnt", default)]
922 pub adjstmnt: Vec<Adjustment6>,
923 #[validate]
924 #[serde(rename = "NetAmt")]
925 pub net_amt: CurrencyAndAmount,
926}
927#[derive(
928 Debug,
929 Default,
930 Clone,
931 PartialEq,
932 ::serde::Serialize,
933 ::serde::Deserialize,
934 ::derive_builder::Builder,
935 ::validator::Validate,
936)]
937pub struct CashAccountType2ChoiceEnum {
938 #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
939 pub cd: Option<ExternalCashAccountType1Code>,
940 #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
941 pub prtry: Option<Max35Text>,
942}
943#[derive(
944 Debug,
945 Default,
946 Clone,
947 PartialEq,
948 ::serde::Serialize,
949 ::serde::Deserialize,
950 ::derive_builder::Builder,
951 ::validator::Validate,
952)]
953pub struct CashAccountType2Choice {
954 #[serde(flatten)]
955 pub value: CashAccountType2ChoiceEnum,
956}
957#[derive(
958 Debug,
959 Default,
960 Clone,
961 PartialEq,
962 ::serde::Serialize,
963 ::serde::Deserialize,
964 ::derive_builder::Builder,
965 ::validator::Validate,
966)]
967pub struct Iban2007Identifier {
968 #[validate(regex = "IBAN_2007_IDENTIFIER_REGEX")]
969 #[serde(rename = "$text")]
970 pub value: String,
971}