iso_20022_caam/
caam_009_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 MAX_140_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
25}
26
27::lazy_static::lazy_static! {
28    static ref ACTIVE_CURRENCY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{3,3}"#).unwrap();
29}
30
31::lazy_static::lazy_static! {
32    static ref MAX_35_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
33}
34
35::lazy_static::lazy_static! {
36    static ref MAX_100_K_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
37}
38
39::lazy_static::lazy_static! {
40    static ref MIN_5_MAX_16_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
41}
42
43::lazy_static::lazy_static! {
44    static ref MAX_500_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
45}
46
47::lazy_static::lazy_static! {
48    static ref MAX_5000_BINARY_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Za-z0-9+/]{4}*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"#).unwrap();
49}
50
51::lazy_static::lazy_static! {
52    static ref MAX_3_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{1,3}"#).unwrap();
53}
54
55::lazy_static::lazy_static! {
56    static ref MIN_2_MAX_3_ALPHA_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-zA-Z]{2,3}"#).unwrap();
57}
58
59::lazy_static::lazy_static! {
60    static ref COUNTRY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}"#).unwrap();
61}
62
63/// Returns the namespace of the schema
64pub fn namespace() -> String {
65    "urn:iso:std:iso:20022:tech:xsd:caam.009.001.02".to_string()
66}
67
68#[derive(
69    Debug,
70    Default,
71    Clone,
72    PartialEq,
73    ::serde::Serialize,
74    ::serde::Deserialize,
75    ::derive_builder::Builder,
76    ::validator::Validate,
77)]
78pub struct Parameter5 {
79    #[serde(rename = "DgstAlgo", skip_serializing_if = "Option::is_none")]
80    pub dgst_algo: Option<Algorithm11Code>,
81}
82#[derive(
83    Debug,
84    Default,
85    Clone,
86    PartialEq,
87    ::serde::Serialize,
88    ::serde::Deserialize,
89    ::derive_builder::Builder,
90    ::validator::Validate,
91)]
92pub struct AtmReconciliationAdvice2 {
93    #[validate]
94    #[serde(rename = "Envt")]
95    pub envt: AtmEnvironment10,
96    #[validate(length(min = 0,))]
97    #[serde(rename = "CmdRslt", default)]
98    pub cmd_rslt: Vec<AtmCommand8>,
99    #[serde(rename = "CmdCntxt", skip_serializing_if = "Option::is_none")]
100    pub cmd_cntxt: Option<AtmCommand9>,
101    #[validate]
102    #[serde(rename = "Tx")]
103    pub tx: AtmTransaction25,
104}
105#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
106pub enum AtmCounterType1Code {
107    #[serde(rename = "INQU")]
108    Inqu,
109    #[serde(rename = "CTXN")]
110    Ctxn,
111    #[serde(rename = "CTOF")]
112    Ctof,
113    #[serde(rename = "BDAY")]
114    Bday,
115    #[serde(rename = "PRTN")]
116    Prtn,
117    #[serde(rename = "OPER")]
118    Oper,
119    #[default]
120    Unknown,
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 Number {
133    #[serde(rename = "$text")]
134    pub value: f64,
135}
136#[derive(
137    Debug,
138    Default,
139    Clone,
140    PartialEq,
141    ::serde::Serialize,
142    ::serde::Deserialize,
143    ::derive_builder::Builder,
144    ::validator::Validate,
145)]
146pub struct AtmCassette2 {
147    #[serde(rename = "PhysId", skip_serializing_if = "Option::is_none")]
148    pub phys_id: Option<Max35Text>,
149    #[validate]
150    #[serde(rename = "LogclId")]
151    pub logcl_id: Max35Text,
152    #[serde(rename = "SrlNb", skip_serializing_if = "Option::is_none")]
153    pub srl_nb: Option<Max35Text>,
154    #[serde(rename = "Tp")]
155    pub tp: AtmCassetteType1Code,
156    #[validate(length(min = 0,))]
157    #[serde(rename = "SubTp", default)]
158    pub sub_tp: Vec<AtmNoteType1Code>,
159    #[serde(rename = "MdiaTp", skip_serializing_if = "Option::is_none")]
160    pub mdia_tp: Option<AtmMediaType1Code>,
161    #[validate(length(min = 0,))]
162    #[serde(rename = "MdiaCntrs", default)]
163    pub mdia_cntrs: Vec<AtmCassetteCounters3>,
164}
165#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
166pub enum BytePadding1Code {
167    #[serde(rename = "LNGT")]
168    Lngt,
169    #[serde(rename = "NUL8")]
170    Nul8,
171    #[serde(rename = "NULG")]
172    Nulg,
173    #[serde(rename = "NULL")]
174    Null,
175    #[serde(rename = "RAND")]
176    Rand,
177    #[default]
178    Unknown,
179}
180#[derive(
181    Debug,
182    Default,
183    Clone,
184    PartialEq,
185    ::serde::Serialize,
186    ::serde::Deserialize,
187    ::derive_builder::Builder,
188    ::validator::Validate,
189)]
190pub struct GeographicCoordinates1 {
191    #[validate]
192    #[serde(rename = "Lat")]
193    pub lat: Max16Text,
194    #[validate]
195    #[serde(rename = "Long")]
196    pub long: Max16Text,
197}
198#[derive(
199    Debug,
200    Default,
201    Clone,
202    PartialEq,
203    ::serde::Serialize,
204    ::serde::Deserialize,
205    ::derive_builder::Builder,
206    ::validator::Validate,
207)]
208pub struct Max140Binary {
209    #[validate(length(min = 1, max = 140,), regex = "MAX_140_BINARY_REGEX")]
210    pub value: String,
211}
212#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
213pub enum TransactionEnvironment3Code {
214    #[serde(rename = "BRCH")]
215    Brch,
216    #[serde(rename = "MERC")]
217    Merc,
218    #[serde(rename = "OTHR")]
219    Othr,
220    #[default]
221    Unknown,
222}
223#[derive(
224    Debug,
225    Default,
226    Clone,
227    PartialEq,
228    ::serde::Serialize,
229    ::serde::Deserialize,
230    ::derive_builder::Builder,
231    ::validator::Validate,
232)]
233pub struct ActiveCurrencyCode {
234    #[validate(regex = "ACTIVE_CURRENCY_CODE_REGEX")]
235    #[serde(rename = "$text")]
236    pub value: String,
237}
238#[derive(
239    Debug,
240    Default,
241    Clone,
242    PartialEq,
243    ::serde::Serialize,
244    ::serde::Deserialize,
245    ::derive_builder::Builder,
246    ::validator::Validate,
247)]
248pub struct UtmCoordinates1 {
249    #[validate]
250    #[serde(rename = "UTMZone")]
251    pub utm_zone: Max16Text,
252    #[validate]
253    #[serde(rename = "UTMEstwrd")]
254    pub utm_estwrd: Number,
255    #[validate]
256    #[serde(rename = "UTMNrthwrd")]
257    pub utm_nrthwrd: Number,
258}
259#[derive(
260    Debug,
261    Default,
262    Clone,
263    PartialEq,
264    ::serde::Serialize,
265    ::serde::Deserialize,
266    ::derive_builder::Builder,
267    ::validator::Validate,
268)]
269pub struct TerminalHosting1 {
270    #[serde(rename = "Ctgy", skip_serializing_if = "Option::is_none")]
271    pub ctgy: Option<TransactionEnvironment3Code>,
272    #[serde(rename = "Id", skip_serializing_if = "Option::is_none")]
273    pub id: Option<Max35Text>,
274}
275#[derive(
276    Debug,
277    Default,
278    Clone,
279    PartialEq,
280    ::serde::Serialize,
281    ::serde::Deserialize,
282    ::derive_builder::Builder,
283    ::validator::Validate,
284)]
285pub struct AlgorithmIdentification11 {
286    #[serde(rename = "Algo")]
287    pub algo: Algorithm7Code,
288    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
289    pub param: Option<Parameter4>,
290}
291#[derive(
292    Debug,
293    Default,
294    Clone,
295    PartialEq,
296    ::serde::Serialize,
297    ::serde::Deserialize,
298    ::derive_builder::Builder,
299    ::validator::Validate,
300)]
301pub struct IsoDateTime {
302    #[serde(rename = "$text")]
303    pub value: ::chrono::DateTime<::chrono::Utc>,
304}
305#[derive(
306    Debug,
307    Default,
308    Clone,
309    PartialEq,
310    ::serde::Serialize,
311    ::serde::Deserialize,
312    ::derive_builder::Builder,
313    ::validator::Validate,
314)]
315pub struct AtmConfigurationParameter1 {
316    #[serde(rename = "Tp")]
317    pub tp: DataSetCategory7Code,
318    #[validate]
319    #[serde(rename = "Vrsn")]
320    pub vrsn: Max35Text,
321}
322#[derive(
323    Debug,
324    Default,
325    Clone,
326    PartialEq,
327    ::serde::Serialize,
328    ::serde::Deserialize,
329    ::derive_builder::Builder,
330    ::validator::Validate,
331)]
332pub struct ContentInformationType10 {
333    #[serde(rename = "CnttTp")]
334    pub cntt_tp: ContentType2Code,
335    #[validate]
336    #[serde(rename = "EnvlpdData")]
337    pub envlpd_data: EnvelopedData4,
338}
339#[derive(
340    Debug,
341    Default,
342    Clone,
343    PartialEq,
344    ::serde::Serialize,
345    ::serde::Deserialize,
346    ::derive_builder::Builder,
347    ::validator::Validate,
348)]
349pub struct Max35Binary {
350    #[validate(length(min = 1, max = 35,), regex = "MAX_35_BINARY_REGEX")]
351    pub value: String,
352}
353#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
354pub enum TransactionEnvironment2Code {
355    #[serde(rename = "PRIV")]
356    Priv,
357    #[serde(rename = "PUBL")]
358    Publ,
359    #[default]
360    Unknown,
361}
362#[derive(
363    Debug,
364    Default,
365    Clone,
366    PartialEq,
367    ::serde::Serialize,
368    ::serde::Deserialize,
369    ::derive_builder::Builder,
370    ::validator::Validate,
371)]
372pub struct EncryptedContent3 {
373    #[serde(rename = "CnttTp")]
374    pub cntt_tp: ContentType2Code,
375    #[validate]
376    #[serde(rename = "CnttNcrptnAlgo")]
377    pub cntt_ncrptn_algo: AlgorithmIdentification14,
378    #[validate]
379    #[serde(rename = "NcrptdData")]
380    pub ncrptd_data: Max100KBinary,
381}
382#[derive(
383    Debug,
384    Default,
385    Clone,
386    PartialEq,
387    ::serde::Serialize,
388    ::serde::Deserialize,
389    ::derive_builder::Builder,
390    ::validator::Validate,
391)]
392pub struct AtmEquipment1 {
393    #[serde(rename = "Manfctr", skip_serializing_if = "Option::is_none")]
394    pub manfctr: Option<Max35Text>,
395    #[serde(rename = "Mdl", skip_serializing_if = "Option::is_none")]
396    pub mdl: Option<Max35Text>,
397    #[serde(rename = "SrlNb", skip_serializing_if = "Option::is_none")]
398    pub srl_nb: Option<Max35Text>,
399    #[serde(rename = "ApplPrvdr", skip_serializing_if = "Option::is_none")]
400    pub appl_prvdr: Option<Max35Text>,
401    #[serde(rename = "ApplNm", skip_serializing_if = "Option::is_none")]
402    pub appl_nm: Option<Max35Text>,
403    #[serde(rename = "ApplVrsn", skip_serializing_if = "Option::is_none")]
404    pub appl_vrsn: Option<Max35Text>,
405    #[serde(rename = "ApprvlNb", skip_serializing_if = "Option::is_none")]
406    pub apprvl_nb: Option<Max35Text>,
407    #[validate(length(min = 0,))]
408    #[serde(rename = "CfgtnParam", default)]
409    pub cfgtn_param: Vec<AtmConfigurationParameter1>,
410}
411#[derive(
412    Debug,
413    Default,
414    Clone,
415    PartialEq,
416    ::serde::Serialize,
417    ::serde::Deserialize,
418    ::derive_builder::Builder,
419    ::validator::Validate,
420)]
421pub struct RelativeDistinguishedName1 {
422    #[serde(rename = "AttrTp")]
423    pub attr_tp: AttributeType1Code,
424    #[validate]
425    #[serde(rename = "AttrVal")]
426    pub attr_val: Max140Text,
427}
428#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
429pub enum AtmCounterType2Code {
430    #[serde(rename = "BDAY")]
431    Bday,
432    #[serde(rename = "INQU")]
433    Inqu,
434    #[serde(rename = "CTOF")]
435    Ctof,
436    #[serde(rename = "OPER")]
437    Oper,
438    #[default]
439    Unknown,
440}
441#[derive(
442    Debug,
443    Default,
444    Clone,
445    PartialEq,
446    ::serde::Serialize,
447    ::serde::Deserialize,
448    ::derive_builder::Builder,
449    ::validator::Validate,
450)]
451pub struct AtmReconciliationAdviceV02 {
452    #[validate]
453    #[serde(rename = "Hdr")]
454    pub hdr: Header32,
455    #[serde(
456        rename = "PrtctdATMRcncltnAdvc",
457        skip_serializing_if = "Option::is_none"
458    )]
459    pub prtctd_atm_rcncltn_advc: Option<ContentInformationType10>,
460    #[serde(rename = "ATMRcncltnAdvc", skip_serializing_if = "Option::is_none")]
461    pub atm_rcncltn_advc: Option<AtmReconciliationAdvice2>,
462    #[serde(rename = "SctyTrlr", skip_serializing_if = "Option::is_none")]
463    pub scty_trlr: Option<ContentInformationType15>,
464}
465#[derive(
466    Debug,
467    Default,
468    Clone,
469    PartialEq,
470    ::serde::Serialize,
471    ::serde::Deserialize,
472    ::derive_builder::Builder,
473    ::validator::Validate,
474)]
475pub struct Acquirer7 {
476    #[serde(rename = "AcqrgInstn", skip_serializing_if = "Option::is_none")]
477    pub acqrg_instn: Option<Max35Text>,
478    #[serde(rename = "Brnch", skip_serializing_if = "Option::is_none")]
479    pub brnch: Option<Max35Text>,
480}
481#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
482pub enum Algorithm15Code {
483    #[serde(rename = "EA2C")]
484    Ea2C,
485    #[serde(rename = "E3DC")]
486    E3Dc,
487    #[serde(rename = "EA9C")]
488    Ea9C,
489    #[serde(rename = "EA5C")]
490    Ea5C,
491    #[default]
492    Unknown,
493}
494#[derive(
495    Debug,
496    Default,
497    Clone,
498    PartialEq,
499    ::serde::Serialize,
500    ::serde::Deserialize,
501    ::derive_builder::Builder,
502    ::validator::Validate,
503)]
504pub struct EnvelopedData4 {
505    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
506    pub vrsn: Option<Number>,
507    #[validate(length(min = 1,))]
508    #[serde(rename = "Rcpt", default)]
509    pub rcpt: Vec<Recipient4Choice>,
510    #[serde(rename = "NcrptdCntt", skip_serializing_if = "Option::is_none")]
511    pub ncrptd_cntt: Option<EncryptedContent3>,
512}
513#[derive(
514    Debug,
515    Default,
516    Clone,
517    PartialEq,
518    ::serde::Serialize,
519    ::serde::Deserialize,
520    ::derive_builder::Builder,
521    ::validator::Validate,
522)]
523pub struct AutomatedTellerMachine8 {
524    #[validate]
525    #[serde(rename = "Id")]
526    pub id: Max35Text,
527    #[serde(rename = "AddtlId", skip_serializing_if = "Option::is_none")]
528    pub addtl_id: Option<Max35Text>,
529    #[serde(rename = "SeqNb", skip_serializing_if = "Option::is_none")]
530    pub seq_nb: Option<Max35Text>,
531    #[serde(rename = "BaseCcy")]
532    pub base_ccy: ActiveCurrencyCode,
533    #[serde(rename = "Lctn", skip_serializing_if = "Option::is_none")]
534    pub lctn: Option<PostalAddress17>,
535    #[serde(rename = "LctnCtgy", skip_serializing_if = "Option::is_none")]
536    pub lctn_ctgy: Option<TransactionEnvironment2Code>,
537    #[serde(rename = "Eqpmnt", skip_serializing_if = "Option::is_none")]
538    pub eqpmnt: Option<AtmEquipment1>,
539}
540#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
541pub enum AtmNoteType1Code {
542    #[serde(rename = "ALLT")]
543    Allt,
544    #[serde(rename = "CNTR")]
545    Cntr,
546    #[serde(rename = "IDVD")]
547    Idvd,
548    #[serde(rename = "SCNT")]
549    Scnt,
550    #[serde(rename = "UNFT")]
551    Unft,
552    #[default]
553    Unknown,
554}
555#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
556pub enum AtmOperation1Code {
557    #[serde(rename = "ADJU")]
558    Adju,
559    #[serde(rename = "INSR")]
560    Insr,
561    #[serde(rename = "LOAD")]
562    Load,
563    #[serde(rename = "REMV")]
564    Remv,
565    #[serde(rename = "UNLD")]
566    Unld,
567    #[default]
568    Unknown,
569}
570#[derive(
571    Debug,
572    Default,
573    Clone,
574    PartialEq,
575    ::serde::Serialize,
576    ::serde::Deserialize,
577    ::derive_builder::Builder,
578    ::validator::Validate,
579)]
580pub struct AtmEnvironment10 {
581    #[serde(rename = "Acqrr", skip_serializing_if = "Option::is_none")]
582    pub acqrr: Option<Acquirer7>,
583    #[serde(rename = "ATMMgrId", skip_serializing_if = "Option::is_none")]
584    pub atm_mgr_id: Option<Max35Text>,
585    #[serde(rename = "HstgNtty", skip_serializing_if = "Option::is_none")]
586    pub hstg_ntty: Option<TerminalHosting1>,
587    #[validate]
588    #[serde(rename = "ATM")]
589    pub atm: AutomatedTellerMachine8,
590}
591#[derive(
592    Debug,
593    Default,
594    Clone,
595    PartialEq,
596    ::serde::Serialize,
597    ::serde::Deserialize,
598    ::derive_builder::Builder,
599    ::validator::Validate,
600)]
601pub struct EncapsulatedContent3 {
602    #[serde(rename = "CnttTp")]
603    pub cntt_tp: ContentType2Code,
604    #[serde(rename = "Cntt", skip_serializing_if = "Option::is_none")]
605    pub cntt: Option<Max100KBinary>,
606}
607#[derive(
608    Debug,
609    Default,
610    Clone,
611    PartialEq,
612    ::serde::Serialize,
613    ::serde::Deserialize,
614    ::derive_builder::Builder,
615    ::validator::Validate,
616)]
617pub struct Max100KBinary {
618    #[validate(length(min = 1, max = 102400,), regex = "MAX_100_K_BINARY_REGEX")]
619    pub value: String,
620}
621#[derive(
622    Debug,
623    Default,
624    Clone,
625    PartialEq,
626    ::serde::Serialize,
627    ::serde::Deserialize,
628    ::derive_builder::Builder,
629    ::validator::Validate,
630)]
631pub struct Min5Max16Binary {
632    #[validate(length(min = 5, max = 16,), regex = "MIN_5_MAX_16_BINARY_REGEX")]
633    pub value: String,
634}
635#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
636pub enum TerminalManagementActionResult2Code {
637    #[serde(rename = "CNTE")]
638    Cnte,
639    #[serde(rename = "FMTE")]
640    Fmte,
641    #[serde(rename = "HRDW")]
642    Hrdw,
643    #[serde(rename = "NSUP")]
644    Nsup,
645    #[serde(rename = "SECR")]
646    Secr,
647    #[serde(rename = "SUCC")]
648    Succ,
649    #[serde(rename = "SYNE")]
650    Syne,
651    #[serde(rename = "TIMO")]
652    Timo,
653    #[serde(rename = "UKRF")]
654    Ukrf,
655    #[default]
656    Unknown,
657}
658#[derive(
659    Debug,
660    Default,
661    Clone,
662    PartialEq,
663    ::serde::Serialize,
664    ::serde::Deserialize,
665    ::derive_builder::Builder,
666    ::validator::Validate,
667)]
668pub struct AtmCommand9 {
669    #[serde(rename = "Tp")]
670    pub tp: AtmCommand5Code,
671    #[serde(rename = "CmdId", skip_serializing_if = "Option::is_none")]
672    pub cmd_id: Option<AtmCommandIdentification1>,
673}
674#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
675pub enum Algorithm7Code {
676    #[serde(rename = "ERSA")]
677    Ersa,
678    #[serde(rename = "RSAO")]
679    Rsao,
680    #[default]
681    Unknown,
682}
683#[derive(
684    Debug,
685    Default,
686    Clone,
687    PartialEq,
688    ::serde::Serialize,
689    ::serde::Deserialize,
690    ::derive_builder::Builder,
691    ::validator::Validate,
692)]
693pub struct AlgorithmIdentification13 {
694    #[serde(rename = "Algo")]
695    pub algo: Algorithm13Code,
696    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
697    pub param: Option<Parameter6>,
698}
699#[derive(
700    Debug,
701    Default,
702    Clone,
703    PartialEq,
704    ::serde::Serialize,
705    ::serde::Deserialize,
706    ::derive_builder::Builder,
707    ::validator::Validate,
708)]
709pub struct Max500Binary {
710    #[validate(length(min = 1, max = 500,), regex = "MAX_500_BINARY_REGEX")]
711    pub value: String,
712}
713#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
714pub enum AtmCassetteType1Code {
715    #[serde(rename = "DPST")]
716    Dpst,
717    #[serde(rename = "DISP")]
718    Disp,
719    #[serde(rename = "RCYC")]
720    Rcyc,
721    #[serde(rename = "RJCT")]
722    Rjct,
723    #[serde(rename = "RPLT")]
724    Rplt,
725    #[serde(rename = "RTRC")]
726    Rtrc,
727    #[default]
728    Unknown,
729}
730#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
731pub enum AtmMediaType3Code {
732    #[serde(rename = "CNTR")]
733    Cntr,
734    #[serde(rename = "FITN")]
735    Fitn,
736    #[serde(rename = "FITU")]
737    Fitu,
738    #[serde(rename = "SPCT")]
739    Spct,
740    #[serde(rename = "UNFT")]
741    Unft,
742    #[serde(rename = "UNRG")]
743    Unrg,
744    #[default]
745    Unknown,
746}
747#[derive(
748    Debug,
749    Default,
750    Clone,
751    PartialEq,
752    ::serde::Serialize,
753    ::serde::Deserialize,
754    ::derive_builder::Builder,
755    ::validator::Validate,
756)]
757pub struct AtmMessageFunction2 {
758    #[serde(rename = "Fctn")]
759    pub fctn: MessageFunction11Code,
760    #[serde(rename = "ATMSvcCd", skip_serializing_if = "Option::is_none")]
761    pub atm_svc_cd: Option<Max35Text>,
762    #[serde(rename = "HstSvcCd", skip_serializing_if = "Option::is_none")]
763    pub hst_svc_cd: Option<Max35Text>,
764}
765#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
766pub enum Algorithm12Code {
767    #[serde(rename = "MACC")]
768    Macc,
769    #[serde(rename = "MCCS")]
770    Mccs,
771    #[serde(rename = "CMA1")]
772    Cma1,
773    #[serde(rename = "MCC1")]
774    Mcc1,
775    #[serde(rename = "CMA9")]
776    Cma9,
777    #[serde(rename = "CMA5")]
778    Cma5,
779    #[default]
780    Unknown,
781}
782#[derive(
783    Debug,
784    Default,
785    Clone,
786    PartialEq,
787    ::serde::Serialize,
788    ::serde::Deserialize,
789    ::derive_builder::Builder,
790    ::validator::Validate,
791)]
792pub struct AlgorithmIdentification12 {
793    #[serde(rename = "Algo")]
794    pub algo: Algorithm8Code,
795    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
796    pub param: Option<Parameter5>,
797}
798#[derive(
799    Debug,
800    Default,
801    Clone,
802    PartialEq,
803    ::serde::Serialize,
804    ::serde::Deserialize,
805    ::derive_builder::Builder,
806    ::validator::Validate,
807)]
808pub struct AuthenticatedData4 {
809    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
810    pub vrsn: Option<Number>,
811    #[validate(length(min = 1,))]
812    #[serde(rename = "Rcpt", default)]
813    pub rcpt: Vec<Recipient4Choice>,
814    #[validate]
815    #[serde(rename = "MACAlgo")]
816    pub mac_algo: AlgorithmIdentification15,
817    #[validate]
818    #[serde(rename = "NcpsltdCntt")]
819    pub ncpsltd_cntt: EncapsulatedContent3,
820    #[validate]
821    #[serde(rename = "MAC")]
822    pub mac: Max140Binary,
823}
824#[derive(
825    Debug,
826    Default,
827    Clone,
828    PartialEq,
829    ::serde::Serialize,
830    ::serde::Deserialize,
831    ::derive_builder::Builder,
832    ::validator::Validate,
833)]
834pub struct Max70Text {
835    #[validate(length(min = 1, max = 70,))]
836    #[serde(rename = "$text")]
837    pub value: String,
838}
839#[derive(
840    Debug,
841    Default,
842    Clone,
843    PartialEq,
844    ::serde::Serialize,
845    ::serde::Deserialize,
846    ::derive_builder::Builder,
847    ::validator::Validate,
848)]
849pub struct Max140Text {
850    #[validate(length(min = 1, max = 140,))]
851    #[serde(rename = "$text")]
852    pub value: String,
853}
854#[derive(
855    Debug,
856    Default,
857    Clone,
858    PartialEq,
859    ::serde::Serialize,
860    ::serde::Deserialize,
861    ::derive_builder::Builder,
862    ::validator::Validate,
863)]
864pub struct GenericIdentification77 {
865    #[validate]
866    #[serde(rename = "Id")]
867    pub id: Max35Text,
868    #[serde(rename = "Tp")]
869    pub tp: PartyType12Code,
870    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
871    pub issr: Option<PartyType12Code>,
872    #[serde(rename = "Ctry", skip_serializing_if = "Option::is_none")]
873    pub ctry: Option<Min2Max3AlphaText>,
874    #[serde(rename = "ShrtNm", skip_serializing_if = "Option::is_none")]
875    pub shrt_nm: Option<Max35Text>,
876}
877#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
878pub enum Algorithm11Code {
879    #[serde(rename = "HS25")]
880    Hs25,
881    #[serde(rename = "HS38")]
882    Hs38,
883    #[serde(rename = "HS51")]
884    Hs51,
885    #[serde(rename = "HS01")]
886    Hs01,
887    #[default]
888    Unknown,
889}
890#[derive(
891    Debug,
892    Default,
893    Clone,
894    PartialEq,
895    ::serde::Serialize,
896    ::serde::Deserialize,
897    ::derive_builder::Builder,
898    ::validator::Validate,
899)]
900pub struct KeyTransport4 {
901    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
902    pub vrsn: Option<Number>,
903    #[serde(rename = "RcptId")]
904    pub rcpt_id: Recipient5Choice,
905    #[validate]
906    #[serde(rename = "KeyNcrptnAlgo")]
907    pub key_ncrptn_algo: AlgorithmIdentification11,
908    #[validate]
909    #[serde(rename = "NcrptdKey")]
910    pub ncrptd_key: Max5000Binary,
911}
912#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
913pub enum PartyType12Code {
914    #[serde(rename = "ACQR")]
915    Acqr,
916    #[serde(rename = "ATMG")]
917    Atmg,
918    #[serde(rename = "CISP")]
919    Cisp,
920    #[serde(rename = "DLIS")]
921    Dlis,
922    #[serde(rename = "HSTG")]
923    Hstg,
924    #[serde(rename = "ITAG")]
925    Itag,
926    #[serde(rename = "OATM")]
927    Oatm,
928    #[default]
929    Unknown,
930}
931#[derive(
932    Debug,
933    Default,
934    Clone,
935    PartialEq,
936    ::serde::Serialize,
937    ::serde::Deserialize,
938    ::derive_builder::Builder,
939    ::validator::Validate,
940)]
941pub struct Recipient5ChoiceEnum {
942    #[serde(rename = "IssrAndSrlNb", skip_serializing_if = "Option::is_none")]
943    pub issr_and_srl_nb: Option<IssuerAndSerialNumber1>,
944    #[serde(rename = "KeyIdr", skip_serializing_if = "Option::is_none")]
945    pub key_idr: Option<KekIdentifier2>,
946}
947#[derive(
948    Debug,
949    Default,
950    Clone,
951    PartialEq,
952    ::serde::Serialize,
953    ::serde::Deserialize,
954    ::derive_builder::Builder,
955    ::validator::Validate,
956)]
957pub struct Recipient5Choice {
958    #[serde(flatten)]
959    pub value: Recipient5ChoiceEnum,
960}
961#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
962pub enum AttributeType1Code {
963    #[serde(rename = "CNAT")]
964    Cnat,
965    #[serde(rename = "LATT")]
966    Latt,
967    #[serde(rename = "OATT")]
968    Oatt,
969    #[serde(rename = "OUAT")]
970    Ouat,
971    #[serde(rename = "CATT")]
972    Catt,
973    #[default]
974    Unknown,
975}
976#[derive(
977    Debug,
978    Default,
979    Clone,
980    PartialEq,
981    ::serde::Serialize,
982    ::serde::Deserialize,
983    ::derive_builder::Builder,
984    ::validator::Validate,
985)]
986pub struct Max5000Binary {
987    #[validate(length(min = 1, max = 5000,), regex = "MAX_5000_BINARY_REGEX")]
988    pub value: String,
989}
990#[derive(
991    Debug,
992    Default,
993    Clone,
994    PartialEq,
995    ::serde::Serialize,
996    ::serde::Deserialize,
997    ::derive_builder::Builder,
998    ::validator::Validate,
999)]
1000pub struct AtmTransaction25 {
1001    #[serde(rename = "TpOfOpr", skip_serializing_if = "Option::is_none")]
1002    pub tp_of_opr: Option<AtmOperation1Code>,
1003    #[validate]
1004    #[serde(rename = "TxId")]
1005    pub tx_id: TransactionIdentifier1,
1006    #[validate]
1007    #[serde(rename = "RcncltnId")]
1008    pub rcncltn_id: Max35Text,
1009    #[validate(length(min = 0,))]
1010    #[serde(rename = "ATMTtls", default)]
1011    pub atm_ttls: Vec<AtmTotals1>,
1012    #[validate(length(min = 0,))]
1013    #[serde(rename = "Csstt", default)]
1014    pub csstt: Vec<AtmCassette2>,
1015    #[validate(length(min = 0,))]
1016    #[serde(rename = "TxTtls", default)]
1017    pub tx_ttls: Vec<AtmTotals3>,
1018    #[serde(rename = "RtndCard", skip_serializing_if = "Option::is_none")]
1019    pub rtnd_card: Option<Number>,
1020    #[serde(rename = "AddtlTxInf", skip_serializing_if = "Option::is_none")]
1021    pub addtl_tx_inf: Option<Max140Text>,
1022}
1023#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1024pub enum Algorithm8Code {
1025    #[serde(rename = "MGF1")]
1026    Mgf1,
1027    #[default]
1028    Unknown,
1029}
1030#[derive(
1031    Debug,
1032    Default,
1033    Clone,
1034    PartialEq,
1035    ::serde::Serialize,
1036    ::serde::Deserialize,
1037    ::derive_builder::Builder,
1038    ::validator::Validate,
1039)]
1040pub struct Header32 {
1041    #[validate]
1042    #[serde(rename = "MsgFctn")]
1043    pub msg_fctn: AtmMessageFunction2,
1044    #[validate]
1045    #[serde(rename = "PrtcolVrsn")]
1046    pub prtcol_vrsn: Max6Text,
1047    #[validate]
1048    #[serde(rename = "XchgId")]
1049    pub xchg_id: Max3NumericText,
1050    #[serde(rename = "ReTrnsmssnCntr", skip_serializing_if = "Option::is_none")]
1051    pub re_trnsmssn_cntr: Option<Number>,
1052    #[validate]
1053    #[serde(rename = "CreDtTm")]
1054    pub cre_dt_tm: IsoDateTime,
1055    #[validate]
1056    #[serde(rename = "InitgPty")]
1057    pub initg_pty: Max35Text,
1058    #[serde(rename = "RcptPty", skip_serializing_if = "Option::is_none")]
1059    pub rcpt_pty: Option<Max35Text>,
1060    #[serde(rename = "PrcStat", skip_serializing_if = "Option::is_none")]
1061    pub prc_stat: Option<Max35Text>,
1062    #[validate(length(min = 0,))]
1063    #[serde(rename = "Tracblt", default)]
1064    pub tracblt: Vec<Traceability4>,
1065}
1066#[derive(
1067    Debug,
1068    Default,
1069    Clone,
1070    PartialEq,
1071    ::serde::Serialize,
1072    ::serde::Deserialize,
1073    ::derive_builder::Builder,
1074    ::validator::Validate,
1075)]
1076pub struct AtmTotals1 {
1077    #[serde(rename = "MdiaTp", skip_serializing_if = "Option::is_none")]
1078    pub mdia_tp: Option<AtmMediaType1Code>,
1079    #[serde(rename = "Ccy", skip_serializing_if = "Option::is_none")]
1080    pub ccy: Option<ActiveCurrencyCode>,
1081    #[serde(rename = "ATMBal", skip_serializing_if = "Option::is_none")]
1082    pub atm_bal: Option<ImpliedCurrencyAndAmount>,
1083    #[serde(rename = "ATMCur", skip_serializing_if = "Option::is_none")]
1084    pub atm_cur: Option<ImpliedCurrencyAndAmount>,
1085    #[serde(rename = "ATMBalNb", skip_serializing_if = "Option::is_none")]
1086    pub atm_bal_nb: Option<Number>,
1087    #[serde(rename = "ATMCurNb", skip_serializing_if = "Option::is_none")]
1088    pub atm_cur_nb: Option<Number>,
1089}
1090#[derive(
1091    Debug,
1092    Default,
1093    Clone,
1094    PartialEq,
1095    ::serde::Serialize,
1096    ::serde::Deserialize,
1097    ::derive_builder::Builder,
1098    ::validator::Validate,
1099)]
1100pub struct Max3NumericText {
1101    #[validate(regex = "MAX_3_NUMERIC_TEXT_REGEX")]
1102    #[serde(rename = "$text")]
1103    pub value: String,
1104}
1105#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1106pub enum EncryptionFormat1Code {
1107    #[serde(rename = "TR31")]
1108    Tr31,
1109    #[serde(rename = "TR34")]
1110    Tr34,
1111    #[default]
1112    Unknown,
1113}
1114#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1115pub enum MessageFunction11Code {
1116    #[serde(rename = "BALN")]
1117    Baln,
1118    #[serde(rename = "CMPA")]
1119    Cmpa,
1120    #[serde(rename = "CMPD")]
1121    Cmpd,
1122    #[serde(rename = "ACMD")]
1123    Acmd,
1124    #[serde(rename = "DVCC")]
1125    Dvcc,
1126    #[serde(rename = "DIAQ")]
1127    Diaq,
1128    #[serde(rename = "DIAP")]
1129    Diap,
1130    #[serde(rename = "GSTS")]
1131    Gsts,
1132    #[serde(rename = "INQQ")]
1133    Inqq,
1134    #[serde(rename = "INQP")]
1135    Inqp,
1136    #[serde(rename = "KYAQ")]
1137    Kyaq,
1138    #[serde(rename = "KYAP")]
1139    Kyap,
1140    #[serde(rename = "PINQ")]
1141    Pinq,
1142    #[serde(rename = "PINP")]
1143    Pinp,
1144    #[serde(rename = "RJAQ")]
1145    Rjaq,
1146    #[serde(rename = "RJAP")]
1147    Rjap,
1148    #[serde(rename = "WITV")]
1149    Witv,
1150    #[serde(rename = "WITK")]
1151    Witk,
1152    #[serde(rename = "WITQ")]
1153    Witq,
1154    #[serde(rename = "WITP")]
1155    Witp,
1156    #[serde(rename = "INQC")]
1157    Inqc,
1158    #[serde(rename = "H2AP")]
1159    H2Ap,
1160    #[serde(rename = "H2AQ")]
1161    H2Aq,
1162    #[serde(rename = "TMOP")]
1163    Tmop,
1164    #[serde(rename = "CSEC")]
1165    Csec,
1166    #[serde(rename = "DSEC")]
1167    Dsec,
1168    #[serde(rename = "SKSC")]
1169    Sksc,
1170    #[serde(rename = "SSTS")]
1171    Ssts,
1172    #[serde(rename = "DPSK")]
1173    Dpsk,
1174    #[serde(rename = "DPSV")]
1175    Dpsv,
1176    #[serde(rename = "DPSQ")]
1177    Dpsq,
1178    #[serde(rename = "DPSP")]
1179    Dpsp,
1180    #[serde(rename = "EXPK")]
1181    Expk,
1182    #[serde(rename = "EXPV")]
1183    Expv,
1184    #[serde(rename = "TRFQ")]
1185    Trfq,
1186    #[serde(rename = "TRFP")]
1187    Trfp,
1188    #[serde(rename = "RPTC")]
1189    Rptc,
1190    #[default]
1191    Unknown,
1192}
1193#[derive(
1194    Debug,
1195    Default,
1196    Clone,
1197    PartialEq,
1198    ::serde::Serialize,
1199    ::serde::Deserialize,
1200    ::derive_builder::Builder,
1201    ::validator::Validate,
1202)]
1203pub struct AtmCommand8 {
1204    #[serde(rename = "Tp")]
1205    pub tp: AtmCommand5Code,
1206    #[serde(rename = "ReqrdDtTm", skip_serializing_if = "Option::is_none")]
1207    pub reqrd_dt_tm: Option<IsoDateTime>,
1208    #[validate]
1209    #[serde(rename = "PrcdDtTm")]
1210    pub prcd_dt_tm: IsoDateTime,
1211    #[serde(rename = "CmdId", skip_serializing_if = "Option::is_none")]
1212    pub cmd_id: Option<AtmCommandIdentification1>,
1213    #[serde(rename = "Rslt")]
1214    pub rslt: TerminalManagementActionResult2Code,
1215    #[serde(rename = "AddtlErrInf", skip_serializing_if = "Option::is_none")]
1216    pub addtl_err_inf: Option<Max140Text>,
1217}
1218#[derive(
1219    Debug,
1220    Default,
1221    Clone,
1222    PartialEq,
1223    ::serde::Serialize,
1224    ::serde::Deserialize,
1225    ::derive_builder::Builder,
1226    ::validator::Validate,
1227)]
1228pub struct Kek4 {
1229    #[serde(rename = "Vrsn", skip_serializing_if = "Option::is_none")]
1230    pub vrsn: Option<Number>,
1231    #[validate]
1232    #[serde(rename = "KEKId")]
1233    pub kek_id: KekIdentifier2,
1234    #[validate]
1235    #[serde(rename = "KeyNcrptnAlgo")]
1236    pub key_ncrptn_algo: AlgorithmIdentification13,
1237    #[validate]
1238    #[serde(rename = "NcrptdKey")]
1239    pub ncrptd_key: Max500Binary,
1240}
1241#[derive(
1242    Debug,
1243    Default,
1244    Clone,
1245    PartialEq,
1246    ::serde::Serialize,
1247    ::serde::Deserialize,
1248    ::derive_builder::Builder,
1249    ::validator::Validate,
1250)]
1251pub struct Min2Max3AlphaText {
1252    #[validate(regex = "MIN_2_MAX_3_ALPHA_TEXT_REGEX")]
1253    #[serde(rename = "$text")]
1254    pub value: String,
1255}
1256#[derive(
1257    Debug,
1258    Default,
1259    Clone,
1260    PartialEq,
1261    ::serde::Serialize,
1262    ::serde::Deserialize,
1263    ::derive_builder::Builder,
1264    ::validator::Validate,
1265)]
1266pub struct Parameter7 {
1267    #[serde(rename = "InitlstnVctr", skip_serializing_if = "Option::is_none")]
1268    pub initlstn_vctr: Option<Max500Binary>,
1269    #[serde(rename = "BPddg", skip_serializing_if = "Option::is_none")]
1270    pub b_pddg: Option<BytePadding1Code>,
1271}
1272#[derive(
1273    Debug,
1274    Default,
1275    Clone,
1276    PartialEq,
1277    ::serde::Serialize,
1278    ::serde::Deserialize,
1279    ::derive_builder::Builder,
1280    ::validator::Validate,
1281)]
1282pub struct PostalAddress17 {
1283    #[validate(length(min = 0, max = 2,))]
1284    #[serde(rename = "AdrLine", default)]
1285    pub adr_line: Vec<Max70Text>,
1286    #[serde(rename = "StrtNm", skip_serializing_if = "Option::is_none")]
1287    pub strt_nm: Option<Max70Text>,
1288    #[serde(rename = "BldgNb", skip_serializing_if = "Option::is_none")]
1289    pub bldg_nb: Option<Max16Text>,
1290    #[serde(rename = "PstCd", skip_serializing_if = "Option::is_none")]
1291    pub pst_cd: Option<Max16Text>,
1292    #[validate]
1293    #[serde(rename = "TwnNm")]
1294    pub twn_nm: Max35Text,
1295    #[validate(length(min = 0, max = 2,))]
1296    #[serde(rename = "CtrySubDvsn", default)]
1297    pub ctry_sub_dvsn: Vec<Max35Text>,
1298    #[serde(rename = "Ctry")]
1299    pub ctry: CountryCode,
1300    #[serde(rename = "GLctn", skip_serializing_if = "Option::is_none")]
1301    pub g_lctn: Option<GeographicLocation1Choice>,
1302}
1303#[derive(
1304    Debug,
1305    Default,
1306    Clone,
1307    PartialEq,
1308    ::serde::Serialize,
1309    ::serde::Deserialize,
1310    ::derive_builder::Builder,
1311    ::validator::Validate,
1312)]
1313pub struct AtmCassetteCounters3 {
1314    #[serde(rename = "UnitVal", skip_serializing_if = "Option::is_none")]
1315    pub unit_val: Option<ImpliedCurrencyAndAmount>,
1316    #[serde(rename = "Ccy", skip_serializing_if = "Option::is_none")]
1317    pub ccy: Option<ActiveCurrencyCode>,
1318    #[serde(rename = "MdiaCtgy", skip_serializing_if = "Option::is_none")]
1319    pub mdia_ctgy: Option<AtmMediaType3Code>,
1320    #[validate]
1321    #[serde(rename = "CurNb")]
1322    pub cur_nb: Number,
1323    #[serde(rename = "CurAmt", skip_serializing_if = "Option::is_none")]
1324    pub cur_amt: Option<ImpliedCurrencyAndAmount>,
1325    #[validate(length(min = 0,))]
1326    #[serde(rename = "FlowTtls", default)]
1327    pub flow_ttls: Vec<AtmCassetteCounters4>,
1328}
1329#[derive(
1330    Debug,
1331    Default,
1332    Clone,
1333    PartialEq,
1334    ::serde::Serialize,
1335    ::serde::Deserialize,
1336    ::derive_builder::Builder,
1337    ::validator::Validate,
1338)]
1339pub struct AlgorithmIdentification15 {
1340    #[serde(rename = "Algo")]
1341    pub algo: Algorithm12Code,
1342    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
1343    pub param: Option<Parameter7>,
1344}
1345#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1346pub enum ContentType2Code {
1347    #[serde(rename = "DATA")]
1348    Data,
1349    #[serde(rename = "SIGN")]
1350    Sign,
1351    #[serde(rename = "EVLP")]
1352    Evlp,
1353    #[serde(rename = "DGST")]
1354    Dgst,
1355    #[serde(rename = "AUTH")]
1356    Auth,
1357    #[default]
1358    Unknown,
1359}
1360#[derive(
1361    Debug,
1362    Default,
1363    Clone,
1364    PartialEq,
1365    ::serde::Serialize,
1366    ::serde::Deserialize,
1367    ::derive_builder::Builder,
1368    ::validator::Validate,
1369)]
1370pub struct Max6Text {
1371    #[validate(length(min = 1, max = 6,))]
1372    #[serde(rename = "$text")]
1373    pub value: String,
1374}
1375#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1376pub enum AtmCommand5Code {
1377    #[serde(rename = "ABAL")]
1378    Abal,
1379    #[serde(rename = "CCNT")]
1380    Ccnt,
1381    #[serde(rename = "RPTC")]
1382    Rptc,
1383    #[default]
1384    Unknown,
1385}
1386#[derive(
1387    Debug,
1388    Default,
1389    Clone,
1390    PartialEq,
1391    ::serde::Serialize,
1392    ::serde::Deserialize,
1393    ::derive_builder::Builder,
1394    ::validator::Validate,
1395)]
1396pub struct CountryCode {
1397    #[validate(regex = "COUNTRY_CODE_REGEX")]
1398    #[serde(rename = "$text")]
1399    pub value: String,
1400}
1401#[derive(
1402    Debug,
1403    Default,
1404    Clone,
1405    PartialEq,
1406    ::serde::Serialize,
1407    ::serde::Deserialize,
1408    ::derive_builder::Builder,
1409    ::validator::Validate,
1410)]
1411pub struct AlgorithmIdentification14 {
1412    #[serde(rename = "Algo")]
1413    pub algo: Algorithm15Code,
1414    #[serde(rename = "Param", skip_serializing_if = "Option::is_none")]
1415    pub param: Option<Parameter6>,
1416}
1417#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1418pub enum DataSetCategory7Code {
1419    #[serde(rename = "ATMC")]
1420    Atmc,
1421    #[serde(rename = "ATMP")]
1422    Atmp,
1423    #[serde(rename = "APPR")]
1424    Appr,
1425    #[serde(rename = "CRAP")]
1426    Crap,
1427    #[serde(rename = "CPRC")]
1428    Cprc,
1429    #[serde(rename = "OEXR")]
1430    Oexr,
1431    #[serde(rename = "AMNT")]
1432    Amnt,
1433    #[serde(rename = "LOCC")]
1434    Locc,
1435    #[serde(rename = "MNOC")]
1436    Mnoc,
1437    #[default]
1438    Unknown,
1439}
1440#[derive(
1441    Debug,
1442    Default,
1443    Clone,
1444    PartialEq,
1445    ::serde::Serialize,
1446    ::serde::Deserialize,
1447    ::derive_builder::Builder,
1448    ::validator::Validate,
1449)]
1450pub struct Recipient4ChoiceEnum {
1451    #[serde(rename = "KeyIdr", skip_serializing_if = "Option::is_none")]
1452    pub key_idr: Option<KekIdentifier2>,
1453    #[serde(rename = "KeyTrnsprt", skip_serializing_if = "Option::is_none")]
1454    pub key_trnsprt: Option<KeyTransport4>,
1455    #[serde(rename = "KEK", skip_serializing_if = "Option::is_none")]
1456    pub kek: Option<Kek4>,
1457}
1458#[derive(
1459    Debug,
1460    Default,
1461    Clone,
1462    PartialEq,
1463    ::serde::Serialize,
1464    ::serde::Deserialize,
1465    ::derive_builder::Builder,
1466    ::validator::Validate,
1467)]
1468pub struct Recipient4Choice {
1469    #[serde(flatten)]
1470    pub value: Recipient4ChoiceEnum,
1471}
1472#[derive(
1473    Debug,
1474    Default,
1475    Clone,
1476    PartialEq,
1477    ::serde::Serialize,
1478    ::serde::Deserialize,
1479    ::derive_builder::Builder,
1480    ::validator::Validate,
1481)]
1482pub struct AtmCassetteCounters4 {
1483    #[serde(rename = "Tp")]
1484    pub tp: AtmCounterType1Code,
1485    #[serde(rename = "AddedNb", skip_serializing_if = "Option::is_none")]
1486    pub added_nb: Option<Number>,
1487    #[serde(rename = "RmvdNb", skip_serializing_if = "Option::is_none")]
1488    pub rmvd_nb: Option<Number>,
1489    #[serde(rename = "DspnsdNb", skip_serializing_if = "Option::is_none")]
1490    pub dspnsd_nb: Option<Number>,
1491    #[serde(rename = "DpstdNb", skip_serializing_if = "Option::is_none")]
1492    pub dpstd_nb: Option<Number>,
1493    #[serde(rename = "RcycldNb", skip_serializing_if = "Option::is_none")]
1494    pub rcycld_nb: Option<Number>,
1495    #[serde(rename = "RtrctdNb", skip_serializing_if = "Option::is_none")]
1496    pub rtrctd_nb: Option<Number>,
1497    #[serde(rename = "RjctdNb", skip_serializing_if = "Option::is_none")]
1498    pub rjctd_nb: Option<Number>,
1499    #[serde(rename = "PresntdNb", skip_serializing_if = "Option::is_none")]
1500    pub presntd_nb: Option<Number>,
1501}
1502#[derive(
1503    Debug,
1504    Default,
1505    Clone,
1506    PartialEq,
1507    ::serde::Serialize,
1508    ::serde::Deserialize,
1509    ::derive_builder::Builder,
1510    ::validator::Validate,
1511)]
1512pub struct KekIdentifier2 {
1513    #[validate]
1514    #[serde(rename = "KeyId")]
1515    pub key_id: Max140Text,
1516    #[validate]
1517    #[serde(rename = "KeyVrsn")]
1518    pub key_vrsn: Max140Text,
1519    #[serde(rename = "SeqNb", skip_serializing_if = "Option::is_none")]
1520    pub seq_nb: Option<Number>,
1521    #[serde(rename = "DerivtnId", skip_serializing_if = "Option::is_none")]
1522    pub derivtn_id: Option<Min5Max16Binary>,
1523}
1524#[derive(
1525    Debug,
1526    Default,
1527    Clone,
1528    PartialEq,
1529    ::serde::Serialize,
1530    ::serde::Deserialize,
1531    ::derive_builder::Builder,
1532    ::validator::Validate,
1533)]
1534#[serde(rename = "Document")]
1535pub struct Document {
1536    #[serde(rename = "ATMRcncltnAdvc")]
1537    pub atm_rcncltn_advc: AtmReconciliationAdviceV02,
1538    #[serde(rename = "@xmlns", default = "namespace")]
1539    pub xmlns: String,
1540}
1541#[derive(
1542    Debug,
1543    Default,
1544    Clone,
1545    PartialEq,
1546    ::serde::Serialize,
1547    ::serde::Deserialize,
1548    ::derive_builder::Builder,
1549    ::validator::Validate,
1550)]
1551pub struct Max16Text {
1552    #[validate(length(min = 1, max = 16,))]
1553    #[serde(rename = "$text")]
1554    pub value: String,
1555}
1556#[derive(
1557    Debug,
1558    Default,
1559    Clone,
1560    PartialEq,
1561    ::serde::Serialize,
1562    ::serde::Deserialize,
1563    ::derive_builder::Builder,
1564    ::validator::Validate,
1565)]
1566pub struct ContentInformationType15 {
1567    #[serde(rename = "CnttTp")]
1568    pub cntt_tp: ContentType2Code,
1569    #[validate]
1570    #[serde(rename = "AuthntcdData")]
1571    pub authntcd_data: AuthenticatedData4,
1572}
1573#[derive(
1574    Debug,
1575    Default,
1576    Clone,
1577    PartialEq,
1578    ::serde::Serialize,
1579    ::serde::Deserialize,
1580    ::derive_builder::Builder,
1581    ::validator::Validate,
1582)]
1583pub struct CertificateIssuer1 {
1584    #[validate(length(min = 1,))]
1585    #[serde(rename = "RltvDstngshdNm", default)]
1586    pub rltv_dstngshd_nm: Vec<RelativeDistinguishedName1>,
1587}
1588#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1589pub enum Algorithm13Code {
1590    #[serde(rename = "EA2C")]
1591    Ea2C,
1592    #[serde(rename = "E3DC")]
1593    E3Dc,
1594    #[serde(rename = "DKP9")]
1595    Dkp9,
1596    #[serde(rename = "UKPT")]
1597    Ukpt,
1598    #[serde(rename = "UKA1")]
1599    Uka1,
1600    #[serde(rename = "EA9C")]
1601    Ea9C,
1602    #[serde(rename = "EA5C")]
1603    Ea5C,
1604    #[default]
1605    Unknown,
1606}
1607#[derive(
1608    Debug,
1609    Default,
1610    Clone,
1611    PartialEq,
1612    ::serde::Serialize,
1613    ::serde::Deserialize,
1614    ::derive_builder::Builder,
1615    ::validator::Validate,
1616)]
1617pub struct IssuerAndSerialNumber1 {
1618    #[validate]
1619    #[serde(rename = "Issr")]
1620    pub issr: CertificateIssuer1,
1621    #[validate]
1622    #[serde(rename = "SrlNb")]
1623    pub srl_nb: Max35Binary,
1624}
1625#[derive(
1626    Debug,
1627    Default,
1628    Clone,
1629    PartialEq,
1630    ::serde::Serialize,
1631    ::serde::Deserialize,
1632    ::derive_builder::Builder,
1633    ::validator::Validate,
1634)]
1635pub struct Max35Text {
1636    #[validate(length(min = 1, max = 35,))]
1637    #[serde(rename = "$text")]
1638    pub value: String,
1639}
1640#[derive(
1641    Debug,
1642    Default,
1643    Clone,
1644    PartialEq,
1645    ::serde::Serialize,
1646    ::serde::Deserialize,
1647    ::derive_builder::Builder,
1648    ::validator::Validate,
1649)]
1650pub struct Parameter4 {
1651    #[serde(rename = "NcrptnFrmt", skip_serializing_if = "Option::is_none")]
1652    pub ncrptn_frmt: Option<EncryptionFormat1Code>,
1653    #[serde(rename = "DgstAlgo", skip_serializing_if = "Option::is_none")]
1654    pub dgst_algo: Option<Algorithm11Code>,
1655    #[serde(rename = "MskGnrtrAlgo", skip_serializing_if = "Option::is_none")]
1656    pub msk_gnrtr_algo: Option<AlgorithmIdentification12>,
1657}
1658#[derive(
1659    Debug,
1660    Default,
1661    Clone,
1662    PartialEq,
1663    ::serde::Serialize,
1664    ::serde::Deserialize,
1665    ::derive_builder::Builder,
1666    ::validator::Validate,
1667)]
1668pub struct Traceability4 {
1669    #[validate]
1670    #[serde(rename = "RlayId")]
1671    pub rlay_id: GenericIdentification77,
1672    #[serde(rename = "SeqNb", skip_serializing_if = "Option::is_none")]
1673    pub seq_nb: Option<Max35Text>,
1674    #[validate]
1675    #[serde(rename = "TracDtTmIn")]
1676    pub trac_dt_tm_in: IsoDateTime,
1677    #[validate]
1678    #[serde(rename = "TracDtTmOut")]
1679    pub trac_dt_tm_out: IsoDateTime,
1680}
1681#[derive(
1682    Debug,
1683    Default,
1684    Clone,
1685    PartialEq,
1686    ::serde::Serialize,
1687    ::serde::Deserialize,
1688    ::derive_builder::Builder,
1689    ::validator::Validate,
1690)]
1691pub struct AtmTotals3 {
1692    #[validate]
1693    #[serde(rename = "Id")]
1694    pub id: Max70Text,
1695    #[serde(rename = "AddtlId", skip_serializing_if = "Option::is_none")]
1696    pub addtl_id: Option<Max70Text>,
1697    #[serde(rename = "Prd")]
1698    pub prd: AtmCounterType2Code,
1699    #[serde(rename = "Ccy", skip_serializing_if = "Option::is_none")]
1700    pub ccy: Option<ActiveCurrencyCode>,
1701    #[validate]
1702    #[serde(rename = "Cnt")]
1703    pub cnt: Number,
1704    #[serde(rename = "Amt", skip_serializing_if = "Option::is_none")]
1705    pub amt: Option<ImpliedCurrencyAndAmount>,
1706}
1707#[derive(
1708    Debug,
1709    Default,
1710    Clone,
1711    PartialEq,
1712    ::serde::Serialize,
1713    ::serde::Deserialize,
1714    ::derive_builder::Builder,
1715    ::validator::Validate,
1716)]
1717pub struct TransactionIdentifier1 {
1718    #[validate]
1719    #[serde(rename = "TxDtTm")]
1720    pub tx_dt_tm: IsoDateTime,
1721    #[validate]
1722    #[serde(rename = "TxRef")]
1723    pub tx_ref: Max35Text,
1724}
1725#[derive(
1726    Debug,
1727    Default,
1728    Clone,
1729    PartialEq,
1730    ::serde::Serialize,
1731    ::serde::Deserialize,
1732    ::derive_builder::Builder,
1733    ::validator::Validate,
1734)]
1735pub struct GeographicLocation1ChoiceEnum {
1736    #[serde(rename = "GeogcCordints", skip_serializing_if = "Option::is_none")]
1737    pub geogc_cordints: Option<GeographicCoordinates1>,
1738    #[serde(rename = "UTMCordints", skip_serializing_if = "Option::is_none")]
1739    pub utm_cordints: Option<UtmCoordinates1>,
1740}
1741#[derive(
1742    Debug,
1743    Default,
1744    Clone,
1745    PartialEq,
1746    ::serde::Serialize,
1747    ::serde::Deserialize,
1748    ::derive_builder::Builder,
1749    ::validator::Validate,
1750)]
1751pub struct GeographicLocation1Choice {
1752    #[serde(flatten)]
1753    pub value: GeographicLocation1ChoiceEnum,
1754}
1755#[derive(
1756    Debug,
1757    Default,
1758    Clone,
1759    PartialEq,
1760    ::serde::Serialize,
1761    ::serde::Deserialize,
1762    ::derive_builder::Builder,
1763    ::validator::Validate,
1764)]
1765pub struct AtmCommandIdentification1 {
1766    #[serde(rename = "Orgn", skip_serializing_if = "Option::is_none")]
1767    pub orgn: Option<Max35Text>,
1768    #[serde(rename = "Ref", skip_serializing_if = "Option::is_none")]
1769    pub r#ref: Option<Max35Text>,
1770    #[serde(rename = "Prcr", skip_serializing_if = "Option::is_none")]
1771    pub prcr: Option<Max140Text>,
1772}
1773#[derive(
1774    Debug,
1775    Default,
1776    Clone,
1777    PartialEq,
1778    ::serde::Serialize,
1779    ::serde::Deserialize,
1780    ::derive_builder::Builder,
1781    ::validator::Validate,
1782)]
1783pub struct ImpliedCurrencyAndAmount {
1784    #[validate(range(min = 0,))]
1785    #[serde(rename = "$text")]
1786    pub value: f64,
1787}
1788#[derive(
1789    Debug,
1790    Default,
1791    Clone,
1792    PartialEq,
1793    ::serde::Serialize,
1794    ::serde::Deserialize,
1795    ::derive_builder::Builder,
1796    ::validator::Validate,
1797)]
1798pub struct Parameter6 {
1799    #[serde(rename = "NcrptnFrmt", skip_serializing_if = "Option::is_none")]
1800    pub ncrptn_frmt: Option<EncryptionFormat1Code>,
1801    #[serde(rename = "InitlstnVctr", skip_serializing_if = "Option::is_none")]
1802    pub initlstn_vctr: Option<Max500Binary>,
1803    #[serde(rename = "BPddg", skip_serializing_if = "Option::is_none")]
1804    pub b_pddg: Option<BytePadding1Code>,
1805}
1806#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1807pub enum AtmMediaType1Code {
1808    #[serde(rename = "CARD")]
1809    Card,
1810    #[serde(rename = "COIN")]
1811    Coin,
1812    #[serde(rename = "CMDT")]
1813    Cmdt,
1814    #[serde(rename = "CPNS")]
1815    Cpns,
1816    #[serde(rename = "NOTE")]
1817    Note,
1818    #[serde(rename = "STMP")]
1819    Stmp,
1820    #[serde(rename = "UDTM")]
1821    Udtm,
1822    #[default]
1823    Unknown,
1824}