/* 
 * GK application - OmniPOS Service API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * OpenAPI spec version: 5.21.1-b03
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 */

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.ComponentModel.DataAnnotations;
using SwaggerDateConverter = IO.Swagger.Client.SwaggerDateConverter;

namespace IO.Swagger.Model
{
    /// <summary>
    /// TerminalPaymentRequest &lt;p&gt;Request object used by terminal payment operations.&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest :  IEquatable<ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;TerminalTransactionTypeCode: terminal transaction type code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;TerminalTransactionTypeCode: terminal transaction type code&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum TerminalTransactionTypeCodeEnum
        {
            
            /// <summary>
            /// Enum Offline for value: Offline
            /// </summary>
            [EnumMember(Value = "Offline")]
            Offline = 1,
            
            /// <summary>
            /// Enum Online for value: Online
            /// </summary>
            [EnumMember(Value = "Online")]
            Online = 2
        }

        /// <summary>
        /// &lt;p&gt;TerminalTransactionTypeCode: terminal transaction type code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;TerminalTransactionTypeCode: terminal transaction type code&lt;/p&gt;</value>
        [DataMember(Name="terminalTransactionTypeCode", EmitDefaultValue=false)]
        public TerminalTransactionTypeCodeEnum? TerminalTransactionTypeCode { get; set; }
        /// <summary>
        /// Defines RequestType
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum RequestTypeEnum
        {
            
            /// <summary>
            /// Enum CREATETENDERAUTHORIZATION for value: CREATE_TENDER_AUTHORIZATION
            /// </summary>
            [EnumMember(Value = "CREATE_TENDER_AUTHORIZATION")]
            CREATETENDERAUTHORIZATION = 1,
            
            /// <summary>
            /// Enum REMOVERECOVERYDATA for value: REMOVE_RECOVERY_DATA
            /// </summary>
            [EnumMember(Value = "REMOVE_RECOVERY_DATA")]
            REMOVERECOVERYDATA = 2,
            
            /// <summary>
            /// Enum REGISTERTERMINALPAYMENT for value: REGISTER_TERMINAL_PAYMENT
            /// </summary>
            [EnumMember(Value = "REGISTER_TERMINAL_PAYMENT")]
            REGISTERTERMINALPAYMENT = 3,
            
            /// <summary>
            /// Enum UPDATEAFTERIMMEDIATEVOIDING for value: UPDATE_AFTER_IMMEDIATE_VOIDING
            /// </summary>
            [EnumMember(Value = "UPDATE_AFTER_IMMEDIATE_VOIDING")]
            UPDATEAFTERIMMEDIATEVOIDING = 4,
            
            /// <summary>
            /// Enum UPDATETOINTERMEDIATERESULT for value: UPDATE_TO_INTERMEDIATE_RESULT
            /// </summary>
            [EnumMember(Value = "UPDATE_TO_INTERMEDIATE_RESULT")]
            UPDATETOINTERMEDIATERESULT = 5,
            
            /// <summary>
            /// Enum UPDATETOFINALRESULT for value: UPDATE_TO_FINAL_RESULT
            /// </summary>
            [EnumMember(Value = "UPDATE_TO_FINAL_RESULT")]
            UPDATETOFINALRESULT = 6,
            
            /// <summary>
            /// Enum UPDATETRANSACTIONSTATEONLY for value: UPDATE_TRANSACTION_STATE_ONLY
            /// </summary>
            [EnumMember(Value = "UPDATE_TRANSACTION_STATE_ONLY")]
            UPDATETRANSACTIONSTATEONLY = 7,
            
            /// <summary>
            /// Enum CUSTOM01 for value: CUSTOM_01
            /// </summary>
            [EnumMember(Value = "CUSTOM_01")]
            CUSTOM01 = 8,
            
            /// <summary>
            /// Enum CUSTOM02 for value: CUSTOM_02
            /// </summary>
            [EnumMember(Value = "CUSTOM_02")]
            CUSTOM02 = 9,
            
            /// <summary>
            /// Enum CUSTOM03 for value: CUSTOM_03
            /// </summary>
            [EnumMember(Value = "CUSTOM_03")]
            CUSTOM03 = 10,
            
            /// <summary>
            /// Enum CUSTOM04 for value: CUSTOM_04
            /// </summary>
            [EnumMember(Value = "CUSTOM_04")]
            CUSTOM04 = 11,
            
            /// <summary>
            /// Enum CUSTOM05 for value: CUSTOM_05
            /// </summary>
            [EnumMember(Value = "CUSTOM_05")]
            CUSTOM05 = 12,
            
            /// <summary>
            /// Enum CUSTOM06 for value: CUSTOM_06
            /// </summary>
            [EnumMember(Value = "CUSTOM_06")]
            CUSTOM06 = 13,
            
            /// <summary>
            /// Enum CUSTOM07 for value: CUSTOM_07
            /// </summary>
            [EnumMember(Value = "CUSTOM_07")]
            CUSTOM07 = 14,
            
            /// <summary>
            /// Enum CUSTOM08 for value: CUSTOM_08
            /// </summary>
            [EnumMember(Value = "CUSTOM_08")]
            CUSTOM08 = 15,
            
            /// <summary>
            /// Enum CUSTOM09 for value: CUSTOM_09
            /// </summary>
            [EnumMember(Value = "CUSTOM_09")]
            CUSTOM09 = 16,
            
            /// <summary>
            /// Enum CUSTOM10 for value: CUSTOM_10
            /// </summary>
            [EnumMember(Value = "CUSTOM_10")]
            CUSTOM10 = 17
        }

        /// <summary>
        /// Gets or Sets RequestType
        /// </summary>
        [DataMember(Name="requestType", EmitDefaultValue=false)]
        public RequestTypeEnum? RequestType { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest" /> class.
        /// </summary>
        /// <param name="positionOperationConfig">&lt;p&gt;PositionOperationConfig: position operation config&lt;/p&gt;.</param>
        /// <param name="tender">&lt;p&gt;TenderDO: tender&lt;/p&gt;.</param>
        /// <param name="amount">&lt;p&gt;Amount: amount&lt;/p&gt;.</param>
        /// <param name="tipAmount">&lt;p&gt;Amount: tip amount&lt;/p&gt;.</param>
        /// <param name="baseIsoCurrencyCode">&lt;p&gt;String: base iso currency code&lt;/p&gt;.</param>
        /// <param name="foreignIsoCurrencyCode">&lt;p&gt;String: foreign iso currency code&lt;/p&gt;.</param>
        /// <param name="exchangeRate">&lt;p&gt;double: exchange rate&lt;/p&gt; (required).</param>
        /// <param name="multiplyFlag">&lt;p&gt;boolean: multiply flag&lt;/p&gt; (required).</param>
        /// <param name="tenderClassCode">&lt;p&gt;String : tender class code&lt;/p&gt;.</param>
        /// <param name="paymentDescription">&lt;p&gt;String : payment description&lt;/p&gt;.</param>
        /// <param name="keyedOnline">keyedOnline.</param>
        /// <param name="success">&lt;p&gt;boolean : success&lt;/p&gt; (required).</param>
        /// <param name="autoCancellation">&lt;p&gt;boolean : auto cancellation&lt;/p&gt; (required).</param>
        /// <param name="cancellation">&lt;p&gt;boolean : cancellation&lt;/p&gt; (required).</param>
        /// <param name="cardType">&lt;p&gt;String : card type&lt;/p&gt;.</param>
        /// <param name="cardIssuerCode">&lt;p&gt;String : card issue code&lt;/p&gt;.</param>
        /// <param name="accountNumber">&lt;p&gt;String : account number&lt;/p&gt;.</param>
        /// <param name="cardEntryMethodCode">&lt;p&gt;String : card entry method code&lt;/p&gt;.</param>
        /// <param name="cashbackAmount">&lt;p&gt;double: cashbackAmount&lt;/p&gt;.</param>
        /// <param name="entrySourceCode">&lt;p&gt;String : entry source code&lt;/p&gt;.</param>
        /// <param name="personalIDRequiredTypeCode">&lt;p&gt;String : personal iD required type code&lt;/p&gt;.</param>
        /// <param name="personalIDReferenceNumber">&lt;p&gt;int : personal iD reference number&lt;/p&gt;.</param>
        /// <param name="authorizationMethodCode">&lt;p&gt;String : authorization method code&lt;/p&gt;.</param>
        /// <param name="adjudicationCode">&lt;p&gt;String : adjudication code&lt;/p&gt;.</param>
        /// <param name="cardExpirationDate">&lt;p&gt;String : card expiration date&lt;/p&gt;.</param>
        /// <param name="cardHolderName">&lt;p&gt;String : card holder name&lt;/p&gt;.</param>
        /// <param name="cardIssueSequenceNumber">&lt;p&gt;String : card Issue sequence number&lt;/p&gt;.</param>
        /// <param name="cardStartDate">&lt;p&gt;String : card start date&lt;/p&gt;.</param>
        /// <param name="serviceCode">&lt;p&gt;String : service code&lt;/p&gt;.</param>
        /// <param name="terminalTransactionID">&lt;p&gt;String : terminal transaction iD&lt;/p&gt;.</param>
        /// <param name="terminalID">&lt;p&gt;String : terminal iD&lt;/p&gt;.</param>
        /// <param name="terminalTransactionStatus">&lt;p&gt;int : terminal transaction status&lt;/p&gt;.</param>
        /// <param name="terminalTransactionResult">&lt;p&gt;String : terminal transaction status&lt;/p&gt;.</param>
        /// <param name="terminalTransactionTypeCode">&lt;p&gt;TerminalTransactionTypeCode: terminal transaction type code&lt;/p&gt;.</param>
        /// <param name="cardNumber">&lt;p&gt;String : card number&lt;/p&gt;.</param>
        /// <param name="merchantPrintCache">&lt;p&gt;String : merchant print cache&lt;/p&gt;.</param>
        /// <param name="customerPrintCache">&lt;p&gt;String : customer print cache&lt;/p&gt;.</param>
        /// <param name="merchantCachePrinted">&lt;p&gt;boolean : merchant cache printed&lt;/p&gt; (required).</param>
        /// <param name="customerCachePrinted">&lt;p&gt;boolean : customer cache printed&lt;/p&gt; (required).</param>
        /// <param name="approvalCode">&lt;p&gt;String : approval code&lt;/p&gt;.</param>
        /// <param name="terminalType">&lt;p&gt;String : terminal type&lt;/p&gt;.</param>
        /// <param name="merchantNumber">&lt;p&gt;String : merchant number&lt;/p&gt;.</param>
        /// <param name="isoCurrencyNumber">&lt;p&gt;String : iso currency number&lt;/p&gt;.</param>
        /// <param name="currentDate">&lt;p&gt;Date : current date&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="transactionStatus">&lt;p&gt;int : transaction status&lt;/p&gt;.</param>
        /// <param name="forceOffline">&lt;p&gt;boolean : force offline&lt;/p&gt;.</param>
        /// <param name="cardHolderVerificationTypeCode">&lt;p&gt;String : card holder verification type code&lt;/p&gt;.</param>
        /// <param name="hostAuthorizedFlag">&lt;p&gt;boolean : host authorized flag&lt;/p&gt;.</param>
        /// <param name="traceNumber">&lt;p&gt;int : trace number&lt;/p&gt;.</param>
        /// <param name="terminalTransactionErrorNumber">&lt;p&gt;int : terminal transaction error number&lt;/p&gt;.</param>
        /// <param name="adjuctionText">&lt;p&gt;String : adjuction text&lt;/p&gt;.</param>
        /// <param name="currentTenderAuthorizationKey">&lt;p&gt;TenderAuthorizationKey : current tender authorization key&lt;/p&gt;.</param>
        /// <param name="recoveryValues">recoveryValues.</param>
        /// <param name="requestType">requestType.</param>
        /// <param name="origTenderAuthorizationNumber">origTenderAuthorizationNumber.</param>
        /// <param name="voidingLineItemSequenceNumber">voidingLineItemSequenceNumber.</param>
        /// <param name="terminalReferenceNumber">&lt;p&gt;String : terminal Reference Number&lt;/p&gt;.</param>
        /// <param name="token">&lt;p&gt;String : token that comes back from USA Payment servers.  Used with T+ &lt;/p&gt;.</param>
        /// <param name="signatureFormat">&lt;p&gt;String : format of the signature data ex. png, bmp &lt;/p&gt;.</param>
        /// <param name="signatureData">&lt;p&gt;String : signature data&lt;/p&gt;.</param>
        /// <param name="internationalBankAccountNumber">internationalBankAccountNumber.</param>
        /// <param name="bankIdentifierCode">bankIdentifierCode.</param>
        /// <param name="creditorID">creditorID.</param>
        /// <param name="mandateID">mandateID.</param>
        /// <param name="prenotificationText">prenotificationText.</param>
        /// <param name="terminalTenderDescription">&lt;p&gt;Tender description.&lt;/p&gt;.</param>
        /// <param name="applicationID">&lt;p&gt;Application identifier&lt;/p&gt;.</param>
        /// <param name="encryptedPAN">&lt;p&gt;Masked application PAN.&lt;/p&gt;.</param>
        /// <param name="terminalTransactionCurrencyCode">&lt;p&gt;Currency key (default 978).&lt;/p&gt;.</param>
        /// <param name="purchaseRestriction">&lt;p&gt;String : purchase restriction if any exists.&lt;/p&gt;.</param>
        /// <param name="gradeRestriction">&lt;p&gt;String : grade restriction value if any exists.&lt;/p&gt;.</param>
        /// <param name="xXCustom08">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom10">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom09">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom07">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom05">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom06">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom11">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom12">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom13">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom14">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom15">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom03">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom02">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom04">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom01">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        public ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest(ComGkSoftwarePosApiModelConfigProcessActionPositionOperationConfig positionOperationConfig = default(ComGkSoftwarePosApiModelConfigProcessActionPositionOperationConfig), ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO tender = default(ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO), ComGkSoftwarePosApiModelDomAppAmountAmount amount = default(ComGkSoftwarePosApiModelDomAppAmountAmount), ComGkSoftwarePosApiModelDomAppAmountAmount tipAmount = default(ComGkSoftwarePosApiModelDomAppAmountAmount), string baseIsoCurrencyCode = default(string), string foreignIsoCurrencyCode = default(string), double? exchangeRate = default(double?), bool? multiplyFlag = default(bool?), string tenderClassCode = default(string), string paymentDescription = default(string), bool? keyedOnline = default(bool?), bool? success = default(bool?), bool? autoCancellation = default(bool?), bool? cancellation = default(bool?), string cardType = default(string), string cardIssuerCode = default(string), string accountNumber = default(string), string cardEntryMethodCode = default(string), double? cashbackAmount = default(double?), string entrySourceCode = default(string), string personalIDRequiredTypeCode = default(string), int? personalIDReferenceNumber = default(int?), string authorizationMethodCode = default(string), string adjudicationCode = default(string), string cardExpirationDate = default(string), string cardHolderName = default(string), string cardIssueSequenceNumber = default(string), string cardStartDate = default(string), string serviceCode = default(string), string terminalTransactionID = default(string), string terminalID = default(string), int? terminalTransactionStatus = default(int?), string terminalTransactionResult = default(string), TerminalTransactionTypeCodeEnum? terminalTransactionTypeCode = default(TerminalTransactionTypeCodeEnum?), string cardNumber = default(string), string merchantPrintCache = default(string), string customerPrintCache = default(string), bool? merchantCachePrinted = default(bool?), bool? customerCachePrinted = default(bool?), string approvalCode = default(string), string terminalType = default(string), string merchantNumber = default(string), string isoCurrencyNumber = default(string), string currentDate = default(string), int? transactionStatus = default(int?), bool? forceOffline = default(bool?), string cardHolderVerificationTypeCode = default(string), bool? hostAuthorizedFlag = default(bool?), int? traceNumber = default(int?), int? terminalTransactionErrorNumber = default(int?), string adjuctionText = default(string), ComGkSoftwarePosApiModelDomAppServicesTransactionTenderAuthorizationKey currentTenderAuthorizationKey = default(ComGkSoftwarePosApiModelDomAppServicesTransactionTenderAuthorizationKey), ComGkSoftwarePosFlowLibsPaymentTerminalTransactionRecoveryValues recoveryValues = default(ComGkSoftwarePosFlowLibsPaymentTerminalTransactionRecoveryValues), RequestTypeEnum? requestType = default(RequestTypeEnum?), int? origTenderAuthorizationNumber = default(int?), int? voidingLineItemSequenceNumber = default(int?), string terminalReferenceNumber = default(string), string token = default(string), string signatureFormat = default(string), string signatureData = default(string), string internationalBankAccountNumber = default(string), string bankIdentifierCode = default(string), string creditorID = default(string), string mandateID = default(string), string prenotificationText = default(string), string terminalTenderDescription = default(string), string applicationID = default(string), string encryptedPAN = default(string), string terminalTransactionCurrencyCode = default(string), string purchaseRestriction = default(string), string gradeRestriction = default(string), string xXCustom08 = default(string), string xXCustom10 = default(string), string xXCustom09 = default(string), string xXCustom07 = default(string), string xXCustom05 = default(string), string xXCustom06 = default(string), string xXCustom11 = default(string), string xXCustom12 = default(string), string xXCustom13 = default(string), string xXCustom14 = default(string), string xXCustom15 = default(string), string xXCustom03 = default(string), string xXCustom02 = default(string), string xXCustom04 = default(string), string xXCustom01 = default(string))
        {
            // to ensure "exchangeRate" is required (not null)
            if (exchangeRate == null)
            {
                throw new InvalidDataException("exchangeRate is a required property for ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest and cannot be null");
            }
            else
            {
                this.ExchangeRate = exchangeRate;
            }
            // to ensure "multiplyFlag" is required (not null)
            if (multiplyFlag == null)
            {
                throw new InvalidDataException("multiplyFlag is a required property for ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest and cannot be null");
            }
            else
            {
                this.MultiplyFlag = multiplyFlag;
            }
            // to ensure "success" is required (not null)
            if (success == null)
            {
                throw new InvalidDataException("success is a required property for ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest and cannot be null");
            }
            else
            {
                this.Success = success;
            }
            // to ensure "autoCancellation" is required (not null)
            if (autoCancellation == null)
            {
                throw new InvalidDataException("autoCancellation is a required property for ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest and cannot be null");
            }
            else
            {
                this.AutoCancellation = autoCancellation;
            }
            // to ensure "cancellation" is required (not null)
            if (cancellation == null)
            {
                throw new InvalidDataException("cancellation is a required property for ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest and cannot be null");
            }
            else
            {
                this.Cancellation = cancellation;
            }
            // to ensure "merchantCachePrinted" is required (not null)
            if (merchantCachePrinted == null)
            {
                throw new InvalidDataException("merchantCachePrinted is a required property for ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest and cannot be null");
            }
            else
            {
                this.MerchantCachePrinted = merchantCachePrinted;
            }
            // to ensure "customerCachePrinted" is required (not null)
            if (customerCachePrinted == null)
            {
                throw new InvalidDataException("customerCachePrinted is a required property for ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest and cannot be null");
            }
            else
            {
                this.CustomerCachePrinted = customerCachePrinted;
            }
            this.PositionOperationConfig = positionOperationConfig;
            this.Tender = tender;
            this.Amount = amount;
            this.TipAmount = tipAmount;
            this.BaseIsoCurrencyCode = baseIsoCurrencyCode;
            this.ForeignIsoCurrencyCode = foreignIsoCurrencyCode;
            this.TenderClassCode = tenderClassCode;
            this.PaymentDescription = paymentDescription;
            this.KeyedOnline = keyedOnline;
            this.CardType = cardType;
            this.CardIssuerCode = cardIssuerCode;
            this.AccountNumber = accountNumber;
            this.CardEntryMethodCode = cardEntryMethodCode;
            this.CashbackAmount = cashbackAmount;
            this.EntrySourceCode = entrySourceCode;
            this.PersonalIDRequiredTypeCode = personalIDRequiredTypeCode;
            this.PersonalIDReferenceNumber = personalIDReferenceNumber;
            this.AuthorizationMethodCode = authorizationMethodCode;
            this.AdjudicationCode = adjudicationCode;
            this.CardExpirationDate = cardExpirationDate;
            this.CardHolderName = cardHolderName;
            this.CardIssueSequenceNumber = cardIssueSequenceNumber;
            this.CardStartDate = cardStartDate;
            this.ServiceCode = serviceCode;
            this.TerminalTransactionID = terminalTransactionID;
            this.TerminalID = terminalID;
            this.TerminalTransactionStatus = terminalTransactionStatus;
            this.TerminalTransactionResult = terminalTransactionResult;
            this.TerminalTransactionTypeCode = terminalTransactionTypeCode;
            this.CardNumber = cardNumber;
            this.MerchantPrintCache = merchantPrintCache;
            this.CustomerPrintCache = customerPrintCache;
            this.ApprovalCode = approvalCode;
            this.TerminalType = terminalType;
            this.MerchantNumber = merchantNumber;
            this.IsoCurrencyNumber = isoCurrencyNumber;
            this.CurrentDate = currentDate;
            this.TransactionStatus = transactionStatus;
            this.ForceOffline = forceOffline;
            this.CardHolderVerificationTypeCode = cardHolderVerificationTypeCode;
            this.HostAuthorizedFlag = hostAuthorizedFlag;
            this.TraceNumber = traceNumber;
            this.TerminalTransactionErrorNumber = terminalTransactionErrorNumber;
            this.AdjuctionText = adjuctionText;
            this.CurrentTenderAuthorizationKey = currentTenderAuthorizationKey;
            this.RecoveryValues = recoveryValues;
            this.RequestType = requestType;
            this.OrigTenderAuthorizationNumber = origTenderAuthorizationNumber;
            this.VoidingLineItemSequenceNumber = voidingLineItemSequenceNumber;
            this.TerminalReferenceNumber = terminalReferenceNumber;
            this.Token = token;
            this.SignatureFormat = signatureFormat;
            this.SignatureData = signatureData;
            this.InternationalBankAccountNumber = internationalBankAccountNumber;
            this.BankIdentifierCode = bankIdentifierCode;
            this.CreditorID = creditorID;
            this.MandateID = mandateID;
            this.PrenotificationText = prenotificationText;
            this.TerminalTenderDescription = terminalTenderDescription;
            this.ApplicationID = applicationID;
            this.EncryptedPAN = encryptedPAN;
            this.TerminalTransactionCurrencyCode = terminalTransactionCurrencyCode;
            this.PurchaseRestriction = purchaseRestriction;
            this.GradeRestriction = gradeRestriction;
            this.XXCustom08 = xXCustom08;
            this.XXCustom10 = xXCustom10;
            this.XXCustom09 = xXCustom09;
            this.XXCustom07 = xXCustom07;
            this.XXCustom05 = xXCustom05;
            this.XXCustom06 = xXCustom06;
            this.XXCustom11 = xXCustom11;
            this.XXCustom12 = xXCustom12;
            this.XXCustom13 = xXCustom13;
            this.XXCustom14 = xXCustom14;
            this.XXCustom15 = xXCustom15;
            this.XXCustom03 = xXCustom03;
            this.XXCustom02 = xXCustom02;
            this.XXCustom04 = xXCustom04;
            this.XXCustom01 = xXCustom01;
        }
        
        /// <summary>
        /// &lt;p&gt;PositionOperationConfig: position operation config&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;PositionOperationConfig: position operation config&lt;/p&gt;</value>
        [DataMember(Name="positionOperationConfig", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelConfigProcessActionPositionOperationConfig PositionOperationConfig { get; set; }

        /// <summary>
        /// &lt;p&gt;TenderDO: tender&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;TenderDO: tender&lt;/p&gt;</value>
        [DataMember(Name="tender", EmitDefaultValue=false)]
        public ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO Tender { get; set; }

        /// <summary>
        /// &lt;p&gt;Amount: amount&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Amount: amount&lt;/p&gt;</value>
        [DataMember(Name="amount", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelDomAppAmountAmount Amount { get; set; }

        /// <summary>
        /// &lt;p&gt;Amount: tip amount&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Amount: tip amount&lt;/p&gt;</value>
        [DataMember(Name="tipAmount", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelDomAppAmountAmount TipAmount { get; set; }

        /// <summary>
        /// &lt;p&gt;String: base iso currency code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: base iso currency code&lt;/p&gt;</value>
        [DataMember(Name="baseIsoCurrencyCode", EmitDefaultValue=false)]
        public string BaseIsoCurrencyCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String: foreign iso currency code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: foreign iso currency code&lt;/p&gt;</value>
        [DataMember(Name="foreignIsoCurrencyCode", EmitDefaultValue=false)]
        public string ForeignIsoCurrencyCode { get; set; }

        /// <summary>
        /// &lt;p&gt;double: exchange rate&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;double: exchange rate&lt;/p&gt;</value>
        [DataMember(Name="exchangeRate", EmitDefaultValue=false)]
        public double? ExchangeRate { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean: multiply flag&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean: multiply flag&lt;/p&gt;</value>
        [DataMember(Name="multiplyFlag", EmitDefaultValue=false)]
        public bool? MultiplyFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;String : tender class code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : tender class code&lt;/p&gt;</value>
        [DataMember(Name="tenderClassCode", EmitDefaultValue=false)]
        public string TenderClassCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : payment description&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : payment description&lt;/p&gt;</value>
        [DataMember(Name="paymentDescription", EmitDefaultValue=false)]
        public string PaymentDescription { get; set; }

        /// <summary>
        /// Gets or Sets KeyedOnline
        /// </summary>
        [DataMember(Name="keyedOnline", EmitDefaultValue=false)]
        public bool? KeyedOnline { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean : success&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean : success&lt;/p&gt;</value>
        [DataMember(Name="success", EmitDefaultValue=false)]
        public bool? Success { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean : auto cancellation&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean : auto cancellation&lt;/p&gt;</value>
        [DataMember(Name="autoCancellation", EmitDefaultValue=false)]
        public bool? AutoCancellation { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean : cancellation&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean : cancellation&lt;/p&gt;</value>
        [DataMember(Name="cancellation", EmitDefaultValue=false)]
        public bool? Cancellation { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card type&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card type&lt;/p&gt;</value>
        [DataMember(Name="cardType", EmitDefaultValue=false)]
        public string CardType { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card issue code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card issue code&lt;/p&gt;</value>
        [DataMember(Name="cardIssuerCode", EmitDefaultValue=false)]
        public string CardIssuerCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : account number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : account number&lt;/p&gt;</value>
        [DataMember(Name="accountNumber", EmitDefaultValue=false)]
        public string AccountNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card entry method code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card entry method code&lt;/p&gt;</value>
        [DataMember(Name="cardEntryMethodCode", EmitDefaultValue=false)]
        public string CardEntryMethodCode { get; set; }

        /// <summary>
        /// &lt;p&gt;double: cashbackAmount&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;double: cashbackAmount&lt;/p&gt;</value>
        [DataMember(Name="cashbackAmount", EmitDefaultValue=false)]
        public double? CashbackAmount { get; set; }

        /// <summary>
        /// &lt;p&gt;String : entry source code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : entry source code&lt;/p&gt;</value>
        [DataMember(Name="entrySourceCode", EmitDefaultValue=false)]
        public string EntrySourceCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : personal iD required type code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : personal iD required type code&lt;/p&gt;</value>
        [DataMember(Name="personalIDRequiredTypeCode", EmitDefaultValue=false)]
        public string PersonalIDRequiredTypeCode { get; set; }

        /// <summary>
        /// &lt;p&gt;int : personal iD reference number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;int : personal iD reference number&lt;/p&gt;</value>
        [DataMember(Name="personalIDReferenceNumber", EmitDefaultValue=false)]
        public int? PersonalIDReferenceNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : authorization method code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : authorization method code&lt;/p&gt;</value>
        [DataMember(Name="authorizationMethodCode", EmitDefaultValue=false)]
        public string AuthorizationMethodCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : adjudication code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : adjudication code&lt;/p&gt;</value>
        [DataMember(Name="adjudicationCode", EmitDefaultValue=false)]
        public string AdjudicationCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card expiration date&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card expiration date&lt;/p&gt;</value>
        [DataMember(Name="cardExpirationDate", EmitDefaultValue=false)]
        public string CardExpirationDate { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card holder name&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card holder name&lt;/p&gt;</value>
        [DataMember(Name="cardHolderName", EmitDefaultValue=false)]
        public string CardHolderName { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card Issue sequence number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card Issue sequence number&lt;/p&gt;</value>
        [DataMember(Name="cardIssueSequenceNumber", EmitDefaultValue=false)]
        public string CardIssueSequenceNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card start date&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card start date&lt;/p&gt;</value>
        [DataMember(Name="cardStartDate", EmitDefaultValue=false)]
        public string CardStartDate { get; set; }

        /// <summary>
        /// &lt;p&gt;String : service code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : service code&lt;/p&gt;</value>
        [DataMember(Name="serviceCode", EmitDefaultValue=false)]
        public string ServiceCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : terminal transaction iD&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : terminal transaction iD&lt;/p&gt;</value>
        [DataMember(Name="terminalTransactionID", EmitDefaultValue=false)]
        public string TerminalTransactionID { get; set; }

        /// <summary>
        /// &lt;p&gt;String : terminal iD&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : terminal iD&lt;/p&gt;</value>
        [DataMember(Name="terminalID", EmitDefaultValue=false)]
        public string TerminalID { get; set; }

        /// <summary>
        /// &lt;p&gt;int : terminal transaction status&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;int : terminal transaction status&lt;/p&gt;</value>
        [DataMember(Name="terminalTransactionStatus", EmitDefaultValue=false)]
        public int? TerminalTransactionStatus { get; set; }

        /// <summary>
        /// &lt;p&gt;String : terminal transaction status&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : terminal transaction status&lt;/p&gt;</value>
        [DataMember(Name="terminalTransactionResult", EmitDefaultValue=false)]
        public string TerminalTransactionResult { get; set; }


        /// <summary>
        /// &lt;p&gt;String : card number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card number&lt;/p&gt;</value>
        [DataMember(Name="cardNumber", EmitDefaultValue=false)]
        public string CardNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : merchant print cache&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : merchant print cache&lt;/p&gt;</value>
        [DataMember(Name="merchantPrintCache", EmitDefaultValue=false)]
        public string MerchantPrintCache { get; set; }

        /// <summary>
        /// &lt;p&gt;String : customer print cache&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : customer print cache&lt;/p&gt;</value>
        [DataMember(Name="customerPrintCache", EmitDefaultValue=false)]
        public string CustomerPrintCache { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean : merchant cache printed&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean : merchant cache printed&lt;/p&gt;</value>
        [DataMember(Name="merchantCachePrinted", EmitDefaultValue=false)]
        public bool? MerchantCachePrinted { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean : customer cache printed&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean : customer cache printed&lt;/p&gt;</value>
        [DataMember(Name="customerCachePrinted", EmitDefaultValue=false)]
        public bool? CustomerCachePrinted { get; set; }

        /// <summary>
        /// &lt;p&gt;String : approval code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : approval code&lt;/p&gt;</value>
        [DataMember(Name="approvalCode", EmitDefaultValue=false)]
        public string ApprovalCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : terminal type&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : terminal type&lt;/p&gt;</value>
        [DataMember(Name="terminalType", EmitDefaultValue=false)]
        public string TerminalType { get; set; }

        /// <summary>
        /// &lt;p&gt;String : merchant number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : merchant number&lt;/p&gt;</value>
        [DataMember(Name="merchantNumber", EmitDefaultValue=false)]
        public string MerchantNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : iso currency number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : iso currency number&lt;/p&gt;</value>
        [DataMember(Name="isoCurrencyNumber", EmitDefaultValue=false)]
        public string IsoCurrencyNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;Date : current date&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>&lt;p&gt;Date : current date&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="currentDate", EmitDefaultValue=false)]
        public string CurrentDate { get; set; }

        /// <summary>
        /// &lt;p&gt;int : transaction status&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;int : transaction status&lt;/p&gt;</value>
        [DataMember(Name="transactionStatus", EmitDefaultValue=false)]
        public int? TransactionStatus { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean : force offline&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean : force offline&lt;/p&gt;</value>
        [DataMember(Name="forceOffline", EmitDefaultValue=false)]
        public bool? ForceOffline { get; set; }

        /// <summary>
        /// &lt;p&gt;String : card holder verification type code&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : card holder verification type code&lt;/p&gt;</value>
        [DataMember(Name="cardHolderVerificationTypeCode", EmitDefaultValue=false)]
        public string CardHolderVerificationTypeCode { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean : host authorized flag&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean : host authorized flag&lt;/p&gt;</value>
        [DataMember(Name="hostAuthorizedFlag", EmitDefaultValue=false)]
        public bool? HostAuthorizedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;int : trace number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;int : trace number&lt;/p&gt;</value>
        [DataMember(Name="traceNumber", EmitDefaultValue=false)]
        public int? TraceNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;int : terminal transaction error number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;int : terminal transaction error number&lt;/p&gt;</value>
        [DataMember(Name="terminalTransactionErrorNumber", EmitDefaultValue=false)]
        public int? TerminalTransactionErrorNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : adjuction text&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : adjuction text&lt;/p&gt;</value>
        [DataMember(Name="adjuctionText", EmitDefaultValue=false)]
        public string AdjuctionText { get; set; }

        /// <summary>
        /// &lt;p&gt;TenderAuthorizationKey : current tender authorization key&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;TenderAuthorizationKey : current tender authorization key&lt;/p&gt;</value>
        [DataMember(Name="currentTenderAuthorizationKey", EmitDefaultValue=false)]
        public ComGkSoftwarePosApiModelDomAppServicesTransactionTenderAuthorizationKey CurrentTenderAuthorizationKey { get; set; }

        /// <summary>
        /// Gets or Sets RecoveryValues
        /// </summary>
        [DataMember(Name="recoveryValues", EmitDefaultValue=false)]
        public ComGkSoftwarePosFlowLibsPaymentTerminalTransactionRecoveryValues RecoveryValues { get; set; }


        /// <summary>
        /// Gets or Sets OrigTenderAuthorizationNumber
        /// </summary>
        [DataMember(Name="origTenderAuthorizationNumber", EmitDefaultValue=false)]
        public int? OrigTenderAuthorizationNumber { get; set; }

        /// <summary>
        /// Gets or Sets VoidingLineItemSequenceNumber
        /// </summary>
        [DataMember(Name="voidingLineItemSequenceNumber", EmitDefaultValue=false)]
        public int? VoidingLineItemSequenceNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : terminal Reference Number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : terminal Reference Number&lt;/p&gt;</value>
        [DataMember(Name="terminalReferenceNumber", EmitDefaultValue=false)]
        public string TerminalReferenceNumber { get; set; }

        /// <summary>
        /// &lt;p&gt;String : token that comes back from USA Payment servers.  Used with T+ &lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : token that comes back from USA Payment servers.  Used with T+ &lt;/p&gt;</value>
        [DataMember(Name="token", EmitDefaultValue=false)]
        public string Token { get; set; }

        /// <summary>
        /// &lt;p&gt;String : format of the signature data ex. png, bmp &lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : format of the signature data ex. png, bmp &lt;/p&gt;</value>
        [DataMember(Name="signatureFormat", EmitDefaultValue=false)]
        public string SignatureFormat { get; set; }

        /// <summary>
        /// &lt;p&gt;String : signature data&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : signature data&lt;/p&gt;</value>
        [DataMember(Name="signatureData", EmitDefaultValue=false)]
        public string SignatureData { get; set; }

        /// <summary>
        /// Gets or Sets InternationalBankAccountNumber
        /// </summary>
        [DataMember(Name="internationalBankAccountNumber", EmitDefaultValue=false)]
        public string InternationalBankAccountNumber { get; set; }

        /// <summary>
        /// Gets or Sets BankIdentifierCode
        /// </summary>
        [DataMember(Name="bankIdentifierCode", EmitDefaultValue=false)]
        public string BankIdentifierCode { get; set; }

        /// <summary>
        /// Gets or Sets CreditorID
        /// </summary>
        [DataMember(Name="creditorID", EmitDefaultValue=false)]
        public string CreditorID { get; set; }

        /// <summary>
        /// Gets or Sets MandateID
        /// </summary>
        [DataMember(Name="mandateID", EmitDefaultValue=false)]
        public string MandateID { get; set; }

        /// <summary>
        /// Gets or Sets PrenotificationText
        /// </summary>
        [DataMember(Name="prenotificationText", EmitDefaultValue=false)]
        public string PrenotificationText { get; set; }

        /// <summary>
        /// &lt;p&gt;Tender description.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Tender description.&lt;/p&gt;</value>
        [DataMember(Name="terminalTenderDescription", EmitDefaultValue=false)]
        public string TerminalTenderDescription { get; set; }

        /// <summary>
        /// &lt;p&gt;Application identifier&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Application identifier&lt;/p&gt;</value>
        [DataMember(Name="applicationID", EmitDefaultValue=false)]
        public string ApplicationID { get; set; }

        /// <summary>
        /// &lt;p&gt;Masked application PAN.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Masked application PAN.&lt;/p&gt;</value>
        [DataMember(Name="encryptedPAN", EmitDefaultValue=false)]
        public string EncryptedPAN { get; set; }

        /// <summary>
        /// &lt;p&gt;Currency key (default 978).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Currency key (default 978).&lt;/p&gt;</value>
        [DataMember(Name="terminalTransactionCurrencyCode", EmitDefaultValue=false)]
        public string TerminalTransactionCurrencyCode { get; set; }

        /// <summary>
        /// &lt;p&gt;String : purchase restriction if any exists.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : purchase restriction if any exists.&lt;/p&gt;</value>
        [DataMember(Name="purchaseRestriction", EmitDefaultValue=false)]
        public string PurchaseRestriction { get; set; }

        /// <summary>
        /// &lt;p&gt;String : grade restriction value if any exists.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String : grade restriction value if any exists.&lt;/p&gt;</value>
        [DataMember(Name="gradeRestriction", EmitDefaultValue=false)]
        public string GradeRestriction { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom08", EmitDefaultValue=false)]
        public string XXCustom08 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom10", EmitDefaultValue=false)]
        public string XXCustom10 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom09", EmitDefaultValue=false)]
        public string XXCustom09 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom07", EmitDefaultValue=false)]
        public string XXCustom07 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom05", EmitDefaultValue=false)]
        public string XXCustom05 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom06", EmitDefaultValue=false)]
        public string XXCustom06 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom11", EmitDefaultValue=false)]
        public string XXCustom11 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom12", EmitDefaultValue=false)]
        public string XXCustom12 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom13", EmitDefaultValue=false)]
        public string XXCustom13 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom14", EmitDefaultValue=false)]
        public string XXCustom14 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom15", EmitDefaultValue=false)]
        public string XXCustom15 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom03", EmitDefaultValue=false)]
        public string XXCustom03 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom02", EmitDefaultValue=false)]
        public string XXCustom02 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom04", EmitDefaultValue=false)]
        public string XXCustom04 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom01", EmitDefaultValue=false)]
        public string XXCustom01 { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            var sb = new StringBuilder();
            sb.Append("class ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest {\n");
            sb.Append("  PositionOperationConfig: ").Append(PositionOperationConfig).Append("\n");
            sb.Append("  Tender: ").Append(Tender).Append("\n");
            sb.Append("  Amount: ").Append(Amount).Append("\n");
            sb.Append("  TipAmount: ").Append(TipAmount).Append("\n");
            sb.Append("  BaseIsoCurrencyCode: ").Append(BaseIsoCurrencyCode).Append("\n");
            sb.Append("  ForeignIsoCurrencyCode: ").Append(ForeignIsoCurrencyCode).Append("\n");
            sb.Append("  ExchangeRate: ").Append(ExchangeRate).Append("\n");
            sb.Append("  MultiplyFlag: ").Append(MultiplyFlag).Append("\n");
            sb.Append("  TenderClassCode: ").Append(TenderClassCode).Append("\n");
            sb.Append("  PaymentDescription: ").Append(PaymentDescription).Append("\n");
            sb.Append("  KeyedOnline: ").Append(KeyedOnline).Append("\n");
            sb.Append("  Success: ").Append(Success).Append("\n");
            sb.Append("  AutoCancellation: ").Append(AutoCancellation).Append("\n");
            sb.Append("  Cancellation: ").Append(Cancellation).Append("\n");
            sb.Append("  CardType: ").Append(CardType).Append("\n");
            sb.Append("  CardIssuerCode: ").Append(CardIssuerCode).Append("\n");
            sb.Append("  AccountNumber: ").Append(AccountNumber).Append("\n");
            sb.Append("  CardEntryMethodCode: ").Append(CardEntryMethodCode).Append("\n");
            sb.Append("  CashbackAmount: ").Append(CashbackAmount).Append("\n");
            sb.Append("  EntrySourceCode: ").Append(EntrySourceCode).Append("\n");
            sb.Append("  PersonalIDRequiredTypeCode: ").Append(PersonalIDRequiredTypeCode).Append("\n");
            sb.Append("  PersonalIDReferenceNumber: ").Append(PersonalIDReferenceNumber).Append("\n");
            sb.Append("  AuthorizationMethodCode: ").Append(AuthorizationMethodCode).Append("\n");
            sb.Append("  AdjudicationCode: ").Append(AdjudicationCode).Append("\n");
            sb.Append("  CardExpirationDate: ").Append(CardExpirationDate).Append("\n");
            sb.Append("  CardHolderName: ").Append(CardHolderName).Append("\n");
            sb.Append("  CardIssueSequenceNumber: ").Append(CardIssueSequenceNumber).Append("\n");
            sb.Append("  CardStartDate: ").Append(CardStartDate).Append("\n");
            sb.Append("  ServiceCode: ").Append(ServiceCode).Append("\n");
            sb.Append("  TerminalTransactionID: ").Append(TerminalTransactionID).Append("\n");
            sb.Append("  TerminalID: ").Append(TerminalID).Append("\n");
            sb.Append("  TerminalTransactionStatus: ").Append(TerminalTransactionStatus).Append("\n");
            sb.Append("  TerminalTransactionResult: ").Append(TerminalTransactionResult).Append("\n");
            sb.Append("  TerminalTransactionTypeCode: ").Append(TerminalTransactionTypeCode).Append("\n");
            sb.Append("  CardNumber: ").Append(CardNumber).Append("\n");
            sb.Append("  MerchantPrintCache: ").Append(MerchantPrintCache).Append("\n");
            sb.Append("  CustomerPrintCache: ").Append(CustomerPrintCache).Append("\n");
            sb.Append("  MerchantCachePrinted: ").Append(MerchantCachePrinted).Append("\n");
            sb.Append("  CustomerCachePrinted: ").Append(CustomerCachePrinted).Append("\n");
            sb.Append("  ApprovalCode: ").Append(ApprovalCode).Append("\n");
            sb.Append("  TerminalType: ").Append(TerminalType).Append("\n");
            sb.Append("  MerchantNumber: ").Append(MerchantNumber).Append("\n");
            sb.Append("  IsoCurrencyNumber: ").Append(IsoCurrencyNumber).Append("\n");
            sb.Append("  CurrentDate: ").Append(CurrentDate).Append("\n");
            sb.Append("  TransactionStatus: ").Append(TransactionStatus).Append("\n");
            sb.Append("  ForceOffline: ").Append(ForceOffline).Append("\n");
            sb.Append("  CardHolderVerificationTypeCode: ").Append(CardHolderVerificationTypeCode).Append("\n");
            sb.Append("  HostAuthorizedFlag: ").Append(HostAuthorizedFlag).Append("\n");
            sb.Append("  TraceNumber: ").Append(TraceNumber).Append("\n");
            sb.Append("  TerminalTransactionErrorNumber: ").Append(TerminalTransactionErrorNumber).Append("\n");
            sb.Append("  AdjuctionText: ").Append(AdjuctionText).Append("\n");
            sb.Append("  CurrentTenderAuthorizationKey: ").Append(CurrentTenderAuthorizationKey).Append("\n");
            sb.Append("  RecoveryValues: ").Append(RecoveryValues).Append("\n");
            sb.Append("  RequestType: ").Append(RequestType).Append("\n");
            sb.Append("  OrigTenderAuthorizationNumber: ").Append(OrigTenderAuthorizationNumber).Append("\n");
            sb.Append("  VoidingLineItemSequenceNumber: ").Append(VoidingLineItemSequenceNumber).Append("\n");
            sb.Append("  TerminalReferenceNumber: ").Append(TerminalReferenceNumber).Append("\n");
            sb.Append("  Token: ").Append(Token).Append("\n");
            sb.Append("  SignatureFormat: ").Append(SignatureFormat).Append("\n");
            sb.Append("  SignatureData: ").Append(SignatureData).Append("\n");
            sb.Append("  InternationalBankAccountNumber: ").Append(InternationalBankAccountNumber).Append("\n");
            sb.Append("  BankIdentifierCode: ").Append(BankIdentifierCode).Append("\n");
            sb.Append("  CreditorID: ").Append(CreditorID).Append("\n");
            sb.Append("  MandateID: ").Append(MandateID).Append("\n");
            sb.Append("  PrenotificationText: ").Append(PrenotificationText).Append("\n");
            sb.Append("  TerminalTenderDescription: ").Append(TerminalTenderDescription).Append("\n");
            sb.Append("  ApplicationID: ").Append(ApplicationID).Append("\n");
            sb.Append("  EncryptedPAN: ").Append(EncryptedPAN).Append("\n");
            sb.Append("  TerminalTransactionCurrencyCode: ").Append(TerminalTransactionCurrencyCode).Append("\n");
            sb.Append("  PurchaseRestriction: ").Append(PurchaseRestriction).Append("\n");
            sb.Append("  GradeRestriction: ").Append(GradeRestriction).Append("\n");
            sb.Append("  XXCustom08: ").Append(XXCustom08).Append("\n");
            sb.Append("  XXCustom10: ").Append(XXCustom10).Append("\n");
            sb.Append("  XXCustom09: ").Append(XXCustom09).Append("\n");
            sb.Append("  XXCustom07: ").Append(XXCustom07).Append("\n");
            sb.Append("  XXCustom05: ").Append(XXCustom05).Append("\n");
            sb.Append("  XXCustom06: ").Append(XXCustom06).Append("\n");
            sb.Append("  XXCustom11: ").Append(XXCustom11).Append("\n");
            sb.Append("  XXCustom12: ").Append(XXCustom12).Append("\n");
            sb.Append("  XXCustom13: ").Append(XXCustom13).Append("\n");
            sb.Append("  XXCustom14: ").Append(XXCustom14).Append("\n");
            sb.Append("  XXCustom15: ").Append(XXCustom15).Append("\n");
            sb.Append("  XXCustom03: ").Append(XXCustom03).Append("\n");
            sb.Append("  XXCustom02: ").Append(XXCustom02).Append("\n");
            sb.Append("  XXCustom04: ").Append(XXCustom04).Append("\n");
            sb.Append("  XXCustom01: ").Append(XXCustom01).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }
  
        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return JsonConvert.SerializeObject(this, Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest);
        }

        /// <summary>
        /// Returns true if ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest instances are equal
        /// </summary>
        /// <param name="input">Instance of ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ComGkSoftwarePosApiServicePaymentTerminalPaymentRequest input)
        {
            if (input == null)
                return false;

            return 
                (
                    this.PositionOperationConfig == input.PositionOperationConfig ||
                    (this.PositionOperationConfig != null &&
                    this.PositionOperationConfig.Equals(input.PositionOperationConfig))
                ) && 
                (
                    this.Tender == input.Tender ||
                    (this.Tender != null &&
                    this.Tender.Equals(input.Tender))
                ) && 
                (
                    this.Amount == input.Amount ||
                    (this.Amount != null &&
                    this.Amount.Equals(input.Amount))
                ) && 
                (
                    this.TipAmount == input.TipAmount ||
                    (this.TipAmount != null &&
                    this.TipAmount.Equals(input.TipAmount))
                ) && 
                (
                    this.BaseIsoCurrencyCode == input.BaseIsoCurrencyCode ||
                    (this.BaseIsoCurrencyCode != null &&
                    this.BaseIsoCurrencyCode.Equals(input.BaseIsoCurrencyCode))
                ) && 
                (
                    this.ForeignIsoCurrencyCode == input.ForeignIsoCurrencyCode ||
                    (this.ForeignIsoCurrencyCode != null &&
                    this.ForeignIsoCurrencyCode.Equals(input.ForeignIsoCurrencyCode))
                ) && 
                (
                    this.ExchangeRate == input.ExchangeRate ||
                    (this.ExchangeRate != null &&
                    this.ExchangeRate.Equals(input.ExchangeRate))
                ) && 
                (
                    this.MultiplyFlag == input.MultiplyFlag ||
                    (this.MultiplyFlag != null &&
                    this.MultiplyFlag.Equals(input.MultiplyFlag))
                ) && 
                (
                    this.TenderClassCode == input.TenderClassCode ||
                    (this.TenderClassCode != null &&
                    this.TenderClassCode.Equals(input.TenderClassCode))
                ) && 
                (
                    this.PaymentDescription == input.PaymentDescription ||
                    (this.PaymentDescription != null &&
                    this.PaymentDescription.Equals(input.PaymentDescription))
                ) && 
                (
                    this.KeyedOnline == input.KeyedOnline ||
                    (this.KeyedOnline != null &&
                    this.KeyedOnline.Equals(input.KeyedOnline))
                ) && 
                (
                    this.Success == input.Success ||
                    (this.Success != null &&
                    this.Success.Equals(input.Success))
                ) && 
                (
                    this.AutoCancellation == input.AutoCancellation ||
                    (this.AutoCancellation != null &&
                    this.AutoCancellation.Equals(input.AutoCancellation))
                ) && 
                (
                    this.Cancellation == input.Cancellation ||
                    (this.Cancellation != null &&
                    this.Cancellation.Equals(input.Cancellation))
                ) && 
                (
                    this.CardType == input.CardType ||
                    (this.CardType != null &&
                    this.CardType.Equals(input.CardType))
                ) && 
                (
                    this.CardIssuerCode == input.CardIssuerCode ||
                    (this.CardIssuerCode != null &&
                    this.CardIssuerCode.Equals(input.CardIssuerCode))
                ) && 
                (
                    this.AccountNumber == input.AccountNumber ||
                    (this.AccountNumber != null &&
                    this.AccountNumber.Equals(input.AccountNumber))
                ) && 
                (
                    this.CardEntryMethodCode == input.CardEntryMethodCode ||
                    (this.CardEntryMethodCode != null &&
                    this.CardEntryMethodCode.Equals(input.CardEntryMethodCode))
                ) && 
                (
                    this.CashbackAmount == input.CashbackAmount ||
                    (this.CashbackAmount != null &&
                    this.CashbackAmount.Equals(input.CashbackAmount))
                ) && 
                (
                    this.EntrySourceCode == input.EntrySourceCode ||
                    (this.EntrySourceCode != null &&
                    this.EntrySourceCode.Equals(input.EntrySourceCode))
                ) && 
                (
                    this.PersonalIDRequiredTypeCode == input.PersonalIDRequiredTypeCode ||
                    (this.PersonalIDRequiredTypeCode != null &&
                    this.PersonalIDRequiredTypeCode.Equals(input.PersonalIDRequiredTypeCode))
                ) && 
                (
                    this.PersonalIDReferenceNumber == input.PersonalIDReferenceNumber ||
                    (this.PersonalIDReferenceNumber != null &&
                    this.PersonalIDReferenceNumber.Equals(input.PersonalIDReferenceNumber))
                ) && 
                (
                    this.AuthorizationMethodCode == input.AuthorizationMethodCode ||
                    (this.AuthorizationMethodCode != null &&
                    this.AuthorizationMethodCode.Equals(input.AuthorizationMethodCode))
                ) && 
                (
                    this.AdjudicationCode == input.AdjudicationCode ||
                    (this.AdjudicationCode != null &&
                    this.AdjudicationCode.Equals(input.AdjudicationCode))
                ) && 
                (
                    this.CardExpirationDate == input.CardExpirationDate ||
                    (this.CardExpirationDate != null &&
                    this.CardExpirationDate.Equals(input.CardExpirationDate))
                ) && 
                (
                    this.CardHolderName == input.CardHolderName ||
                    (this.CardHolderName != null &&
                    this.CardHolderName.Equals(input.CardHolderName))
                ) && 
                (
                    this.CardIssueSequenceNumber == input.CardIssueSequenceNumber ||
                    (this.CardIssueSequenceNumber != null &&
                    this.CardIssueSequenceNumber.Equals(input.CardIssueSequenceNumber))
                ) && 
                (
                    this.CardStartDate == input.CardStartDate ||
                    (this.CardStartDate != null &&
                    this.CardStartDate.Equals(input.CardStartDate))
                ) && 
                (
                    this.ServiceCode == input.ServiceCode ||
                    (this.ServiceCode != null &&
                    this.ServiceCode.Equals(input.ServiceCode))
                ) && 
                (
                    this.TerminalTransactionID == input.TerminalTransactionID ||
                    (this.TerminalTransactionID != null &&
                    this.TerminalTransactionID.Equals(input.TerminalTransactionID))
                ) && 
                (
                    this.TerminalID == input.TerminalID ||
                    (this.TerminalID != null &&
                    this.TerminalID.Equals(input.TerminalID))
                ) && 
                (
                    this.TerminalTransactionStatus == input.TerminalTransactionStatus ||
                    (this.TerminalTransactionStatus != null &&
                    this.TerminalTransactionStatus.Equals(input.TerminalTransactionStatus))
                ) && 
                (
                    this.TerminalTransactionResult == input.TerminalTransactionResult ||
                    (this.TerminalTransactionResult != null &&
                    this.TerminalTransactionResult.Equals(input.TerminalTransactionResult))
                ) && 
                (
                    this.TerminalTransactionTypeCode == input.TerminalTransactionTypeCode ||
                    (this.TerminalTransactionTypeCode != null &&
                    this.TerminalTransactionTypeCode.Equals(input.TerminalTransactionTypeCode))
                ) && 
                (
                    this.CardNumber == input.CardNumber ||
                    (this.CardNumber != null &&
                    this.CardNumber.Equals(input.CardNumber))
                ) && 
                (
                    this.MerchantPrintCache == input.MerchantPrintCache ||
                    (this.MerchantPrintCache != null &&
                    this.MerchantPrintCache.Equals(input.MerchantPrintCache))
                ) && 
                (
                    this.CustomerPrintCache == input.CustomerPrintCache ||
                    (this.CustomerPrintCache != null &&
                    this.CustomerPrintCache.Equals(input.CustomerPrintCache))
                ) && 
                (
                    this.MerchantCachePrinted == input.MerchantCachePrinted ||
                    (this.MerchantCachePrinted != null &&
                    this.MerchantCachePrinted.Equals(input.MerchantCachePrinted))
                ) && 
                (
                    this.CustomerCachePrinted == input.CustomerCachePrinted ||
                    (this.CustomerCachePrinted != null &&
                    this.CustomerCachePrinted.Equals(input.CustomerCachePrinted))
                ) && 
                (
                    this.ApprovalCode == input.ApprovalCode ||
                    (this.ApprovalCode != null &&
                    this.ApprovalCode.Equals(input.ApprovalCode))
                ) && 
                (
                    this.TerminalType == input.TerminalType ||
                    (this.TerminalType != null &&
                    this.TerminalType.Equals(input.TerminalType))
                ) && 
                (
                    this.MerchantNumber == input.MerchantNumber ||
                    (this.MerchantNumber != null &&
                    this.MerchantNumber.Equals(input.MerchantNumber))
                ) && 
                (
                    this.IsoCurrencyNumber == input.IsoCurrencyNumber ||
                    (this.IsoCurrencyNumber != null &&
                    this.IsoCurrencyNumber.Equals(input.IsoCurrencyNumber))
                ) && 
                (
                    this.CurrentDate == input.CurrentDate ||
                    (this.CurrentDate != null &&
                    this.CurrentDate.Equals(input.CurrentDate))
                ) && 
                (
                    this.TransactionStatus == input.TransactionStatus ||
                    (this.TransactionStatus != null &&
                    this.TransactionStatus.Equals(input.TransactionStatus))
                ) && 
                (
                    this.ForceOffline == input.ForceOffline ||
                    (this.ForceOffline != null &&
                    this.ForceOffline.Equals(input.ForceOffline))
                ) && 
                (
                    this.CardHolderVerificationTypeCode == input.CardHolderVerificationTypeCode ||
                    (this.CardHolderVerificationTypeCode != null &&
                    this.CardHolderVerificationTypeCode.Equals(input.CardHolderVerificationTypeCode))
                ) && 
                (
                    this.HostAuthorizedFlag == input.HostAuthorizedFlag ||
                    (this.HostAuthorizedFlag != null &&
                    this.HostAuthorizedFlag.Equals(input.HostAuthorizedFlag))
                ) && 
                (
                    this.TraceNumber == input.TraceNumber ||
                    (this.TraceNumber != null &&
                    this.TraceNumber.Equals(input.TraceNumber))
                ) && 
                (
                    this.TerminalTransactionErrorNumber == input.TerminalTransactionErrorNumber ||
                    (this.TerminalTransactionErrorNumber != null &&
                    this.TerminalTransactionErrorNumber.Equals(input.TerminalTransactionErrorNumber))
                ) && 
                (
                    this.AdjuctionText == input.AdjuctionText ||
                    (this.AdjuctionText != null &&
                    this.AdjuctionText.Equals(input.AdjuctionText))
                ) && 
                (
                    this.CurrentTenderAuthorizationKey == input.CurrentTenderAuthorizationKey ||
                    (this.CurrentTenderAuthorizationKey != null &&
                    this.CurrentTenderAuthorizationKey.Equals(input.CurrentTenderAuthorizationKey))
                ) && 
                (
                    this.RecoveryValues == input.RecoveryValues ||
                    (this.RecoveryValues != null &&
                    this.RecoveryValues.Equals(input.RecoveryValues))
                ) && 
                (
                    this.RequestType == input.RequestType ||
                    (this.RequestType != null &&
                    this.RequestType.Equals(input.RequestType))
                ) && 
                (
                    this.OrigTenderAuthorizationNumber == input.OrigTenderAuthorizationNumber ||
                    (this.OrigTenderAuthorizationNumber != null &&
                    this.OrigTenderAuthorizationNumber.Equals(input.OrigTenderAuthorizationNumber))
                ) && 
                (
                    this.VoidingLineItemSequenceNumber == input.VoidingLineItemSequenceNumber ||
                    (this.VoidingLineItemSequenceNumber != null &&
                    this.VoidingLineItemSequenceNumber.Equals(input.VoidingLineItemSequenceNumber))
                ) && 
                (
                    this.TerminalReferenceNumber == input.TerminalReferenceNumber ||
                    (this.TerminalReferenceNumber != null &&
                    this.TerminalReferenceNumber.Equals(input.TerminalReferenceNumber))
                ) && 
                (
                    this.Token == input.Token ||
                    (this.Token != null &&
                    this.Token.Equals(input.Token))
                ) && 
                (
                    this.SignatureFormat == input.SignatureFormat ||
                    (this.SignatureFormat != null &&
                    this.SignatureFormat.Equals(input.SignatureFormat))
                ) && 
                (
                    this.SignatureData == input.SignatureData ||
                    (this.SignatureData != null &&
                    this.SignatureData.Equals(input.SignatureData))
                ) && 
                (
                    this.InternationalBankAccountNumber == input.InternationalBankAccountNumber ||
                    (this.InternationalBankAccountNumber != null &&
                    this.InternationalBankAccountNumber.Equals(input.InternationalBankAccountNumber))
                ) && 
                (
                    this.BankIdentifierCode == input.BankIdentifierCode ||
                    (this.BankIdentifierCode != null &&
                    this.BankIdentifierCode.Equals(input.BankIdentifierCode))
                ) && 
                (
                    this.CreditorID == input.CreditorID ||
                    (this.CreditorID != null &&
                    this.CreditorID.Equals(input.CreditorID))
                ) && 
                (
                    this.MandateID == input.MandateID ||
                    (this.MandateID != null &&
                    this.MandateID.Equals(input.MandateID))
                ) && 
                (
                    this.PrenotificationText == input.PrenotificationText ||
                    (this.PrenotificationText != null &&
                    this.PrenotificationText.Equals(input.PrenotificationText))
                ) && 
                (
                    this.TerminalTenderDescription == input.TerminalTenderDescription ||
                    (this.TerminalTenderDescription != null &&
                    this.TerminalTenderDescription.Equals(input.TerminalTenderDescription))
                ) && 
                (
                    this.ApplicationID == input.ApplicationID ||
                    (this.ApplicationID != null &&
                    this.ApplicationID.Equals(input.ApplicationID))
                ) && 
                (
                    this.EncryptedPAN == input.EncryptedPAN ||
                    (this.EncryptedPAN != null &&
                    this.EncryptedPAN.Equals(input.EncryptedPAN))
                ) && 
                (
                    this.TerminalTransactionCurrencyCode == input.TerminalTransactionCurrencyCode ||
                    (this.TerminalTransactionCurrencyCode != null &&
                    this.TerminalTransactionCurrencyCode.Equals(input.TerminalTransactionCurrencyCode))
                ) && 
                (
                    this.PurchaseRestriction == input.PurchaseRestriction ||
                    (this.PurchaseRestriction != null &&
                    this.PurchaseRestriction.Equals(input.PurchaseRestriction))
                ) && 
                (
                    this.GradeRestriction == input.GradeRestriction ||
                    (this.GradeRestriction != null &&
                    this.GradeRestriction.Equals(input.GradeRestriction))
                ) && 
                (
                    this.XXCustom08 == input.XXCustom08 ||
                    (this.XXCustom08 != null &&
                    this.XXCustom08.Equals(input.XXCustom08))
                ) && 
                (
                    this.XXCustom10 == input.XXCustom10 ||
                    (this.XXCustom10 != null &&
                    this.XXCustom10.Equals(input.XXCustom10))
                ) && 
                (
                    this.XXCustom09 == input.XXCustom09 ||
                    (this.XXCustom09 != null &&
                    this.XXCustom09.Equals(input.XXCustom09))
                ) && 
                (
                    this.XXCustom07 == input.XXCustom07 ||
                    (this.XXCustom07 != null &&
                    this.XXCustom07.Equals(input.XXCustom07))
                ) && 
                (
                    this.XXCustom05 == input.XXCustom05 ||
                    (this.XXCustom05 != null &&
                    this.XXCustom05.Equals(input.XXCustom05))
                ) && 
                (
                    this.XXCustom06 == input.XXCustom06 ||
                    (this.XXCustom06 != null &&
                    this.XXCustom06.Equals(input.XXCustom06))
                ) && 
                (
                    this.XXCustom11 == input.XXCustom11 ||
                    (this.XXCustom11 != null &&
                    this.XXCustom11.Equals(input.XXCustom11))
                ) && 
                (
                    this.XXCustom12 == input.XXCustom12 ||
                    (this.XXCustom12 != null &&
                    this.XXCustom12.Equals(input.XXCustom12))
                ) && 
                (
                    this.XXCustom13 == input.XXCustom13 ||
                    (this.XXCustom13 != null &&
                    this.XXCustom13.Equals(input.XXCustom13))
                ) && 
                (
                    this.XXCustom14 == input.XXCustom14 ||
                    (this.XXCustom14 != null &&
                    this.XXCustom14.Equals(input.XXCustom14))
                ) && 
                (
                    this.XXCustom15 == input.XXCustom15 ||
                    (this.XXCustom15 != null &&
                    this.XXCustom15.Equals(input.XXCustom15))
                ) && 
                (
                    this.XXCustom03 == input.XXCustom03 ||
                    (this.XXCustom03 != null &&
                    this.XXCustom03.Equals(input.XXCustom03))
                ) && 
                (
                    this.XXCustom02 == input.XXCustom02 ||
                    (this.XXCustom02 != null &&
                    this.XXCustom02.Equals(input.XXCustom02))
                ) && 
                (
                    this.XXCustom04 == input.XXCustom04 ||
                    (this.XXCustom04 != null &&
                    this.XXCustom04.Equals(input.XXCustom04))
                ) && 
                (
                    this.XXCustom01 == input.XXCustom01 ||
                    (this.XXCustom01 != null &&
                    this.XXCustom01.Equals(input.XXCustom01))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.PositionOperationConfig != null)
                    hashCode = hashCode * 59 + this.PositionOperationConfig.GetHashCode();
                if (this.Tender != null)
                    hashCode = hashCode * 59 + this.Tender.GetHashCode();
                if (this.Amount != null)
                    hashCode = hashCode * 59 + this.Amount.GetHashCode();
                if (this.TipAmount != null)
                    hashCode = hashCode * 59 + this.TipAmount.GetHashCode();
                if (this.BaseIsoCurrencyCode != null)
                    hashCode = hashCode * 59 + this.BaseIsoCurrencyCode.GetHashCode();
                if (this.ForeignIsoCurrencyCode != null)
                    hashCode = hashCode * 59 + this.ForeignIsoCurrencyCode.GetHashCode();
                if (this.ExchangeRate != null)
                    hashCode = hashCode * 59 + this.ExchangeRate.GetHashCode();
                if (this.MultiplyFlag != null)
                    hashCode = hashCode * 59 + this.MultiplyFlag.GetHashCode();
                if (this.TenderClassCode != null)
                    hashCode = hashCode * 59 + this.TenderClassCode.GetHashCode();
                if (this.PaymentDescription != null)
                    hashCode = hashCode * 59 + this.PaymentDescription.GetHashCode();
                if (this.KeyedOnline != null)
                    hashCode = hashCode * 59 + this.KeyedOnline.GetHashCode();
                if (this.Success != null)
                    hashCode = hashCode * 59 + this.Success.GetHashCode();
                if (this.AutoCancellation != null)
                    hashCode = hashCode * 59 + this.AutoCancellation.GetHashCode();
                if (this.Cancellation != null)
                    hashCode = hashCode * 59 + this.Cancellation.GetHashCode();
                if (this.CardType != null)
                    hashCode = hashCode * 59 + this.CardType.GetHashCode();
                if (this.CardIssuerCode != null)
                    hashCode = hashCode * 59 + this.CardIssuerCode.GetHashCode();
                if (this.AccountNumber != null)
                    hashCode = hashCode * 59 + this.AccountNumber.GetHashCode();
                if (this.CardEntryMethodCode != null)
                    hashCode = hashCode * 59 + this.CardEntryMethodCode.GetHashCode();
                if (this.CashbackAmount != null)
                    hashCode = hashCode * 59 + this.CashbackAmount.GetHashCode();
                if (this.EntrySourceCode != null)
                    hashCode = hashCode * 59 + this.EntrySourceCode.GetHashCode();
                if (this.PersonalIDRequiredTypeCode != null)
                    hashCode = hashCode * 59 + this.PersonalIDRequiredTypeCode.GetHashCode();
                if (this.PersonalIDReferenceNumber != null)
                    hashCode = hashCode * 59 + this.PersonalIDReferenceNumber.GetHashCode();
                if (this.AuthorizationMethodCode != null)
                    hashCode = hashCode * 59 + this.AuthorizationMethodCode.GetHashCode();
                if (this.AdjudicationCode != null)
                    hashCode = hashCode * 59 + this.AdjudicationCode.GetHashCode();
                if (this.CardExpirationDate != null)
                    hashCode = hashCode * 59 + this.CardExpirationDate.GetHashCode();
                if (this.CardHolderName != null)
                    hashCode = hashCode * 59 + this.CardHolderName.GetHashCode();
                if (this.CardIssueSequenceNumber != null)
                    hashCode = hashCode * 59 + this.CardIssueSequenceNumber.GetHashCode();
                if (this.CardStartDate != null)
                    hashCode = hashCode * 59 + this.CardStartDate.GetHashCode();
                if (this.ServiceCode != null)
                    hashCode = hashCode * 59 + this.ServiceCode.GetHashCode();
                if (this.TerminalTransactionID != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionID.GetHashCode();
                if (this.TerminalID != null)
                    hashCode = hashCode * 59 + this.TerminalID.GetHashCode();
                if (this.TerminalTransactionStatus != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionStatus.GetHashCode();
                if (this.TerminalTransactionResult != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionResult.GetHashCode();
                if (this.TerminalTransactionTypeCode != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionTypeCode.GetHashCode();
                if (this.CardNumber != null)
                    hashCode = hashCode * 59 + this.CardNumber.GetHashCode();
                if (this.MerchantPrintCache != null)
                    hashCode = hashCode * 59 + this.MerchantPrintCache.GetHashCode();
                if (this.CustomerPrintCache != null)
                    hashCode = hashCode * 59 + this.CustomerPrintCache.GetHashCode();
                if (this.MerchantCachePrinted != null)
                    hashCode = hashCode * 59 + this.MerchantCachePrinted.GetHashCode();
                if (this.CustomerCachePrinted != null)
                    hashCode = hashCode * 59 + this.CustomerCachePrinted.GetHashCode();
                if (this.ApprovalCode != null)
                    hashCode = hashCode * 59 + this.ApprovalCode.GetHashCode();
                if (this.TerminalType != null)
                    hashCode = hashCode * 59 + this.TerminalType.GetHashCode();
                if (this.MerchantNumber != null)
                    hashCode = hashCode * 59 + this.MerchantNumber.GetHashCode();
                if (this.IsoCurrencyNumber != null)
                    hashCode = hashCode * 59 + this.IsoCurrencyNumber.GetHashCode();
                if (this.CurrentDate != null)
                    hashCode = hashCode * 59 + this.CurrentDate.GetHashCode();
                if (this.TransactionStatus != null)
                    hashCode = hashCode * 59 + this.TransactionStatus.GetHashCode();
                if (this.ForceOffline != null)
                    hashCode = hashCode * 59 + this.ForceOffline.GetHashCode();
                if (this.CardHolderVerificationTypeCode != null)
                    hashCode = hashCode * 59 + this.CardHolderVerificationTypeCode.GetHashCode();
                if (this.HostAuthorizedFlag != null)
                    hashCode = hashCode * 59 + this.HostAuthorizedFlag.GetHashCode();
                if (this.TraceNumber != null)
                    hashCode = hashCode * 59 + this.TraceNumber.GetHashCode();
                if (this.TerminalTransactionErrorNumber != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionErrorNumber.GetHashCode();
                if (this.AdjuctionText != null)
                    hashCode = hashCode * 59 + this.AdjuctionText.GetHashCode();
                if (this.CurrentTenderAuthorizationKey != null)
                    hashCode = hashCode * 59 + this.CurrentTenderAuthorizationKey.GetHashCode();
                if (this.RecoveryValues != null)
                    hashCode = hashCode * 59 + this.RecoveryValues.GetHashCode();
                if (this.RequestType != null)
                    hashCode = hashCode * 59 + this.RequestType.GetHashCode();
                if (this.OrigTenderAuthorizationNumber != null)
                    hashCode = hashCode * 59 + this.OrigTenderAuthorizationNumber.GetHashCode();
                if (this.VoidingLineItemSequenceNumber != null)
                    hashCode = hashCode * 59 + this.VoidingLineItemSequenceNumber.GetHashCode();
                if (this.TerminalReferenceNumber != null)
                    hashCode = hashCode * 59 + this.TerminalReferenceNumber.GetHashCode();
                if (this.Token != null)
                    hashCode = hashCode * 59 + this.Token.GetHashCode();
                if (this.SignatureFormat != null)
                    hashCode = hashCode * 59 + this.SignatureFormat.GetHashCode();
                if (this.SignatureData != null)
                    hashCode = hashCode * 59 + this.SignatureData.GetHashCode();
                if (this.InternationalBankAccountNumber != null)
                    hashCode = hashCode * 59 + this.InternationalBankAccountNumber.GetHashCode();
                if (this.BankIdentifierCode != null)
                    hashCode = hashCode * 59 + this.BankIdentifierCode.GetHashCode();
                if (this.CreditorID != null)
                    hashCode = hashCode * 59 + this.CreditorID.GetHashCode();
                if (this.MandateID != null)
                    hashCode = hashCode * 59 + this.MandateID.GetHashCode();
                if (this.PrenotificationText != null)
                    hashCode = hashCode * 59 + this.PrenotificationText.GetHashCode();
                if (this.TerminalTenderDescription != null)
                    hashCode = hashCode * 59 + this.TerminalTenderDescription.GetHashCode();
                if (this.ApplicationID != null)
                    hashCode = hashCode * 59 + this.ApplicationID.GetHashCode();
                if (this.EncryptedPAN != null)
                    hashCode = hashCode * 59 + this.EncryptedPAN.GetHashCode();
                if (this.TerminalTransactionCurrencyCode != null)
                    hashCode = hashCode * 59 + this.TerminalTransactionCurrencyCode.GetHashCode();
                if (this.PurchaseRestriction != null)
                    hashCode = hashCode * 59 + this.PurchaseRestriction.GetHashCode();
                if (this.GradeRestriction != null)
                    hashCode = hashCode * 59 + this.GradeRestriction.GetHashCode();
                if (this.XXCustom08 != null)
                    hashCode = hashCode * 59 + this.XXCustom08.GetHashCode();
                if (this.XXCustom10 != null)
                    hashCode = hashCode * 59 + this.XXCustom10.GetHashCode();
                if (this.XXCustom09 != null)
                    hashCode = hashCode * 59 + this.XXCustom09.GetHashCode();
                if (this.XXCustom07 != null)
                    hashCode = hashCode * 59 + this.XXCustom07.GetHashCode();
                if (this.XXCustom05 != null)
                    hashCode = hashCode * 59 + this.XXCustom05.GetHashCode();
                if (this.XXCustom06 != null)
                    hashCode = hashCode * 59 + this.XXCustom06.GetHashCode();
                if (this.XXCustom11 != null)
                    hashCode = hashCode * 59 + this.XXCustom11.GetHashCode();
                if (this.XXCustom12 != null)
                    hashCode = hashCode * 59 + this.XXCustom12.GetHashCode();
                if (this.XXCustom13 != null)
                    hashCode = hashCode * 59 + this.XXCustom13.GetHashCode();
                if (this.XXCustom14 != null)
                    hashCode = hashCode * 59 + this.XXCustom14.GetHashCode();
                if (this.XXCustom15 != null)
                    hashCode = hashCode * 59 + this.XXCustom15.GetHashCode();
                if (this.XXCustom03 != null)
                    hashCode = hashCode * 59 + this.XXCustom03.GetHashCode();
                if (this.XXCustom02 != null)
                    hashCode = hashCode * 59 + this.XXCustom02.GetHashCode();
                if (this.XXCustom04 != null)
                    hashCode = hashCode * 59 + this.XXCustom04.GetHashCode();
                if (this.XXCustom01 != null)
                    hashCode = hashCode * 59 + this.XXCustom01.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
