iso_20022_tsmt/
tsmt_045_001_02.rs

1// Copyright 2023 Emergent Financial, LLC - All Rights Reserved
2//
3//
4// This software is licensed under the Emergent Financial Limited Public License Version 1.0
5// (EF-LPLv1). You may use, copy, modify, and distribute this software under the terms and
6// conditions of the EF-LPL. For more information, please refer to the full text of the license
7// at https://github.com/emergentfinancial/ef-lpl.
8//
9//
10// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
11// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
13// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16//
17// See ISO-20022 Intellectual Property Rights Policy at
18// <https://www.iso20022.org/intellectual-property-rights>
19// for more information.
20
21use 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
43/// Returns the namespace of the schema
44pub 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}