using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace UnifiedPOS.CAT.V1_4
{
    [ServiceContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public interface CAT
    {
        #region Version 1.1

        //
        // Common Properties
        //

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAutoDisable", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAutoDisableResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        // int GetAutoDisable(string ConsumerID);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetAutoDisable", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetAutoDisableResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        // void SetAutoDisable(string ConsumerID, int AutoDisable);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCompareFirmwareVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCompareFirmwareVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapCompareFirmwareVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapPowerReporting", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapPowerReportingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        PowerReporting GetCapPowerReporting(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapStatisticsReporting", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapStatisticsReportingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapStatisticsReporting(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapUpdateFirmware", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapUpdateFirmwareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapUpdateFirmware(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapUpdateStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapUpdateStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapUpdateStatistics(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCheckHealthText", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCheckHealthTextResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetCheckHealthText(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetClaimed", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetClaimedResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetClaimed(string ConsumerID);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDataCount", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDataCountResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        // int GetDataCount(string ConsumerID);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDataEventEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDataEventEnabledResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        // bool GetDataEventEnabled(string ConsumerID);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetDataEventEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetDataEventEnabledResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        // void SetDataEventEnabled(string ConsumerID, bool DataEventEnabled);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetDeviceEnabled(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetDeviceEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetDeviceEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetDeviceEnabled(string ConsumerID, bool DeviceEnabled);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetFreezeEvents", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetFreezeEventsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetFreezeEvents(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetFreezeEvents", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetFreezeEventsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetFreezeEvents(string ConsumerID, bool FreezeEvents);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetOutputID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetOutputIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        int GetOutputID(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPowerNotify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPowerNotifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        PowerNotification GetPowerNotify(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetPowerNotify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetPowerNotifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetPowerNotify(string ConsumerID, PowerNotification PowerNotify);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPowerState", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPowerStateResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        PowerState GetPowerState(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetState", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetStateResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        ControlState GetState(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceControlDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceControlDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetDeviceControlDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceControlVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceControlVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        UposVersion GetDeviceControlVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceServiceDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceServiceDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetDeviceServiceDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceServiceVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDeviceServiceVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        UposVersion GetDeviceServiceVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPhysicalDeviceDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPhysicalDeviceDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetPhysicalDeviceDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPhysicalDeviceName", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPhysicalDeviceNameResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetPhysicalDeviceName(string ConsumerID);

        //
        // Specific Properties
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAccountNumber", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAccountNumberResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetAccountNumber(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAdditionalSecurityInformation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAdditionalSecurityInformationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetAdditionalSecurityInformation(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetAdditionalSecurityInformation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetAdditionalSecurityInformationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetAdditionalSecurityInformation(string ConsumerID, string AdditionalSecurityInformation);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetApprovalCode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetApprovalCodeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetApprovalCode(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAsyncMode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetAsyncModeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetAsyncMode(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetAsyncMode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetAsyncModeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetAsyncMode(string ConsumerID, bool AsyncMode);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetBalance", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetBalanceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        decimal GetBalance(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAdditionalSecurityInformation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAdditionalSecurityInformationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapAdditionalSecurityInformation(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeCompletion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeCompletionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapAuthorizeCompletion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizePreSales", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizePreSalesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapAuthorizePreSales(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeRefund", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeRefundResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapAuthorizeRefund(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeVoid", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeVoidResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapAuthorizeVoid(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeVoidPreSales", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapAuthorizeVoidPreSalesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapAuthorizeVoidPreSales(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCashDeposit", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCashDepositResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapCashDeposit(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCenterResultCode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCenterResultCodeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapCenterResultCode(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCheckCard", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapCheckCardResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapCheckCard(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapDailyLog", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapDailyLogResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        CATLogs GetCapDailyLog(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapInstallments", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapInstallmentsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapInstallments(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapLockTerminal", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapLockTerminalResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapLockTerminal(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapLogStatus", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapLogStatusResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapLogStatus(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapPaymentDetail", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapPaymentDetailResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapPaymentDetail(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapTaxOthers", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapTaxOthersResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapTaxOthers(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapTransactionNumber", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapTransactionNumberResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapTransactionNumber(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapTrainingMode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapTrainingModeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapTrainingMode(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapUnlockTerminal", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCapUnlockTerminalResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetCapUnlockTerminal(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCardCompanyID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCardCompanyIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetCardCompanyID(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCenterResultCode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetCenterResultCodeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetCenterResultCode(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDailyLog", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetDailyLogResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetDailyLog(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetLogStatus", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetLogStatusResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        DealingLogStatus GetLogStatus(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPaymentCondition", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPaymentConditionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        PaymentCondition GetPaymentCondition(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPaymentDetail", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPaymentDetailResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetPaymentDetail(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPaymentMedia", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetPaymentMediaResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        PaymentMedia GetPaymentMedia(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetPaymentMedia", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetPaymentMediaResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetPaymentMedia(string ConsumerID, PaymentMedia PaymentMedia);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetSequenceNumber", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetSequenceNumberResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        int GetSequenceNumber(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetSettledAmount", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetSettledAmountResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        decimal GetSettledAmount(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetSlipNumber", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetSlipNumberResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetSlipNumber(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetTrainingMode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetTrainingModeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        bool GetTrainingMode(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetTrainingMode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetTrainingModeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetTrainingMode(string ConsumerID, bool TrainingMode);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetTransactionNumber", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetTransactionNumberResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetTransactionNumber(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetTransactionType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetTransactionTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        CreditTransactionType GetTransactionType(string ConsumerID);

        //
        // Common Methods
        //

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/Open", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/OpenResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        //void Open(string ConsumerID, string EndpointAddress);

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/Close", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/CloseResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        //void Close(string ConsumerID, string EndpointAddress);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/Claim", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/ClaimResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void Claim(string ConsumerID, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/Release", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/ReleaseResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void Release(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/CheckHealth", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/CheckHealthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void CheckHealth(string ConsumerID, HealthCheckLevel Level);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/ClearInput", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/ClearInputResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        // void ClearInput(string ConsumerID);

        // [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/ClearInputProperties", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/ClearInputPropertiesResponse")]
        // [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        // void ClearInputProperties(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/ClearOutput", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/ClearOutputResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void ClearOutput(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/DirectIO", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/DirectIOResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        DirectIOData DirectIO(string ConsumerID, int Command, int Data, object Obj);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/CompareFirmwareVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/CompareFirmwareVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        CompareFirmwareResult CompareFirmwareVersion(string ConsumerID, string FirmwareFileName);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/ResetStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/ResetStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void ResetStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/RetrieveStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/RetrieveStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string RetrieveStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UpdateFirmware", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/UpdateFirmwareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void UpdateFirmware(string ConsumerID, string FirmwareFileName);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UpdateStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/UpdateStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void UpdateStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        //
        // Specific Methods
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/AccessDailyLog", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/AccessDailyLogResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void AccessDailyLog(string ConsumerID, int SequenceNumber, CATLogs Type, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeCompletion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeCompletionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void AuthorizeCompletion(string ConsumerID, int SequenceNumber, decimal Amount, decimal TaxOthers, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizePreSales", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizePreSalesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void AuthorizePreSales(string ConsumerID, int SequenceNumber, decimal Amount, decimal TaxOthers, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeRefund", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeRefundResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void AuthorizeRefund(string ConsumerID, int SequenceNumber, decimal Amount, decimal TaxOthers, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeSales", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeSalesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void AuthorizeSales(string ConsumerID, int SequenceNumber, decimal Amount, decimal TaxOthers, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeVoid", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeVoidResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void AuthorizeVoid(string ConsumerID, int SequenceNumber, decimal Amount, decimal TaxOthers, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeVoidPreSales", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/AuthorizeVoidPreSalesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void AuthorizeVoidPreSales(string ConsumerID, int SequenceNumber, decimal Amount, decimal TaxOthers, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/CashDeposit", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/CashDepositResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void CashDeposit(string ConsumerID, int SequenceNumber, decimal Amount, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/CheckCard", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/CheckCardResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void CheckCard(string ConsumerID, int SequenceNumber, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/LockTerminal", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/LockTerminalResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void LockTerminal(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UnlockTerminal", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/UnlockTerminalResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void UnlockTerminal(string ConsumerID);

        #endregion

        #region Version 1.2

        //
        // Session Management
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetWSPOSVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetWSPOSVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        UposVersion GetWSPOSVersion();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GenerateConsumerID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GenerateConsumerIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GenerateConsumerID();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/OpenSession", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/OpenSessionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void OpenSession(string ConsumerID, string EndpointAddress);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/CloseSession", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/CloseSessionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void CloseSession(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetProviderSessionTimeout", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetProviderSessionTimeoutResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        int GetProviderSessionTimeout(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/KeepAlive", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/KeepAliveResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void KeepAlive(string ConsumerID);

        //
        // Device Control
        // 

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/OpenDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/OpenDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void OpenDevice(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/CloseDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/CloseDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void CloseDevice(string ConsumerID);

        //
        // Event Polling
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/PollForUPOSEvent", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/PollForUPOSEventResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        CATEvent PollForUPOSEvent(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetEventResponse", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/SetEventResponseResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        void SetEventResponse(string ConsumerID, CATEventResponse EventResponse);

        #endregion

        #region Version 1.3

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetEncryptedClaimedConsumerID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CAT/GetEncryptedClaimedConsumerIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CAT/UposException", Name = "UposException")]
        string GetEncryptedClaimedConsumerID();

        #endregion
    }

    #region Version 1.1

    //
    // Common Data Types
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class DirectIOData
    {
        [DataMember]
        public int Data { get; set; }
        [DataMember]
        public object Obj { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class UposException
    {
        [DataMember]
        public ErrorCode ErrorCode { get; set; }
        [DataMember]
        public int ErrorCodeExtended { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class UposVersion
    {
        [DataMember]
        public int Major { get; set; }
        [DataMember]
        public int Minor { get; set; }
        [DataMember]
        public int Build { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class Statistic
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Value { get; set; }
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/", ItemName = "Statistic")]
    public class StatisticList : List<Statistic>
    {
    }

    //
    // Common Enumerations
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum CompareFirmwareResult
    {
        [EnumMember]
        CFV_FIRMWARE_OLDER,
        [EnumMember]
        CFV_FIRMWARE_SAME,
        [EnumMember]
        CFV_FIRMWARE_NEWER,
        [EnumMember]
        CFV_FIRMWARE_DIFFERENT,
        [EnumMember]
        CFV_FIRMWARE_UNKNOWN,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum ControlState
    {
        [EnumMember]
        S_CLOSED,
        [EnumMember]
        S_IDLE,
        [EnumMember]
        S_BUSY,
        [EnumMember]
        S_ERROR,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum ErrorCode
    {
        [EnumMember]
        E_CLOSED,
        [EnumMember]
        E_CLAIMED,
        [EnumMember]
        E_NOTCLAIMED,
        [EnumMember]
        E_NOSERVICE,
        [EnumMember]
        E_DISABLED,
        [EnumMember]
        E_ILLEGAL,
        [EnumMember]
        E_NOHARDWARE,
        [EnumMember]
        E_OFFLINE,
        [EnumMember]
        E_NOEXIST,
        [EnumMember]
        E_EXISTS,
        [EnumMember]
        E_FAILURE,
        [EnumMember]
        E_TIMEOUT,
        [EnumMember]
        E_BUSY,
        [EnumMember]
        E_EXTENDED,
        [EnumMember]
        E_DEPRECATED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum HealthCheckLevel
    {
        [EnumMember]
        CH_INTERNAL,
        [EnumMember]
        CH_EXTERNAL,
        [EnumMember]
        CH_INTERACTIVE,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum PowerNotification
    {
        [EnumMember]
        PN_DISABLED,
        [EnumMember]
        PN_ENABLED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum PowerReporting
    {
        [EnumMember]
        PR_NONE,
        [EnumMember]
        PR_STANDARD,
        [EnumMember]
        PR_ADVANCED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum PowerState
    {
        [EnumMember]
        PS_UNKNOWN,
        [EnumMember]
        PS_ONLINE,
        [EnumMember]
        PS_OFF,
        [EnumMember]
        PS_OFFLINE,
        [EnumMember]
        PS_OFF_OFFLINE,
    }

    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum StatisticCategories
    {
        [EnumMember]
        All,
        [EnumMember]
        Manufacturer,
        [EnumMember]
        Upos,
    }
    */
    public class StatisticCategories
    {
        public const string All = "";
        public const string Manufacturer = "M_";
        public const string Upos = "U_";
    }

    //
    // Specific Data Types
    //

    //
    // Specific Enumerations
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum CATLogs
    {
        [EnumMember]
        CAT_DL_NONE,
        [EnumMember]
        CAT_DL_REPORTING,
        [EnumMember]
        CAT_DL_SETTLEMENT,
        [EnumMember]
        CAT_DL_REPORTING_SETTLEMENT,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum CreditTransactionType
    {
        [EnumMember]
        CAT_TRANSACTION_SALES,
        [EnumMember]
        CAT_TRANSACTION_VOID,
        [EnumMember]
        CAT_TRANSACTION_REFUND,
        [EnumMember]
        CAT_TRANSACTION_COMPLETION,
        [EnumMember]
        CAT_TRANSACTION_PRESALES,
        [EnumMember]
        CAT_TRANSACTION_CHECKCARD,
        [EnumMember]
        CAT_TRANSACTION_VOIDPRESALES,
        [EnumMember]
        CAT_TRANSACTION_CASHDEPOSIT,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum DealingLogStatus
    {
        [EnumMember]
        CAT_LOGSTATUS_OK,
        [EnumMember]
        CAT_LOGSTATUS_NEARFULL,
        [EnumMember]
        CAT_LOGSTATUS_FULL,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum PaymentCondition
    {
        [EnumMember]
        CAT_PAYMENT_LUMP,
        [EnumMember]
        CAT_PAYMENT_BONUS_1,
        [EnumMember]
        CAT_PAYMENT_BONUS_2,
        [EnumMember]
        CAT_PAYMENT_BONUS_3,
        [EnumMember]
        CAT_PAYMENT_BONUS_4,
        [EnumMember]
        CAT_PAYMENT_BONUS_5,
        [EnumMember]
        CAT_PAYMENT_INSTALLMENT_1,
        [EnumMember]
        CAT_PAYMENT_INSTALLMENT_2,
        [EnumMember]
        CAT_PAYMENT_INSTALLMENT_3,
        [EnumMember]
        CAT_PAYMENT_BONUS_COMBINATION_1,
        [EnumMember]
        CAT_PAYMENT_BONUS_COMBINATION_2,
        [EnumMember]
        CAT_PAYMENT_BONUS_COMBINATION_3,
        [EnumMember]
        CAT_PAYMENT_BONUS_COMBINATION_4,
        [EnumMember]
        CAT_PAYMENT_REVOLVING,
        [EnumMember]
        CAT_PAYMENT_DEBIT,
        [EnumMember]
        CAT_PAYMENT_ELECTRONIC_MONEY,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum PaymentMedia
    {
        [EnumMember]
        CAT_MEDIA_UNSPECIFIED,
        [EnumMember]
        CAT_MEDIA_CREDIT,
        [EnumMember]
        CAT_MEDIA_DEBIT,
        [EnumMember]
        CAT_MEDIA_ELECTRONIC_MONEY,
    }

    //
    // Constants
    //

    /*
    public class Constants
    {
        public const int ExtendedErrorCenterError = 1;
        public const int ExtendedErrorCommandError = 90;
        public const int ExtendedErrorCommunicationError = 92;
        public const int ExtendedErrorDailyLogOverflow = 200;
        public const int ExtendedErrorDeficient = 201;
        public const int ExtendedErrorFirmwareBadFile = 281;
        public const int ExtendedErrorOverDeposit = 202;
        public const int ExtendedErrorReset = 91;
        public const int ExtendedErrorStatistics = 280;
        public const int ExtendedErrorStatisticsDependency = 282;
        public const string StatisticCommunicationErrorCount = "CommunicationErrorCount";
        public const string StatisticDeviceCategory = "DeviceCategory";
        public const string StatisticFirmwareRevision = "FirmwareRevision";
        public const string StatisticHoursPoweredCount = "HoursPoweredCount";
        public const string StatisticInstallationDate = "InstallationDate";
        public const string StatisticInterface = "Interface";
        public const string StatisticManufactureDate = "ManufactureDate";
        public const string StatisticManufacturerName = "ManufacturerName";
        public const string StatisticMechanicalRevision = "MechanicalRevision";
        public const string StatisticModelName = "ModelName";
        public const string StatisticSerialNumber = "SerialNumber";
        public const string StatisticUnifiedPOSVersion = "UnifiedPOSVersion";
        public const int WaitForever = -1;
    }
    */

    public class ExtendedError
    {
        public const int ECAT_CENTERERROR = 1;
        public const int ECAT_COMMANDERROR = 90;
        public const int ECAT_COMMUNICATIONERROR = 92;
        public const int ECAT_DAILYLOGOVERFLOW = 200;
        public const int ECAT_DEFICIENT = 201;
        public const int EFIRMWARE_BAD_FILE = 281;
        public const int ECAT_OVERDEPOSIT = 202;
        public const int ECAT_RESET = 91;
        public const int ESTATS_ERROR = 280;
        public const int ESTATS_DEPENDENCY = 282;
    }

    public class StatisticProperties
    {
        public const string CommunicationErrorCount = "CommunicationErrorCount";
        public const string DeviceCategory = "DeviceCategory";
        public const string FirmwareRevision = "FirmwareRevision";
        public const string HoursPoweredCount = "HoursPoweredCount";
        public const string InstallationDate = "InstallationDate";
        public const string Interface = "Interface";
        public const string ManufactureDate = "ManufactureDate";
        public const string ManufacturerName = "ManufacturerName";
        public const string MechanicalRevision = "MechanicalRevision";
        public const string ModelName = "ModelName";
        public const string SerialNumber = "SerialNumber";
        public const string UnifiedPOSVersion = "UnifiedPOSVersion";
    }
    
    public class Wait
    {
        public const int FOREVER = -1;
    }

    #endregion

    #region Version 1.2

    //
    // Event Polling
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class CATEvent
    {
        //[DataMember]
        //public DataEvent DataEvent { get; set; }
        [DataMember]
        public DirectIOEvent DirectIOEvent { get; set; }
        [DataMember]
        public ErrorEvent ErrorEvent { get; set; }
        [DataMember]
        public OutputCompleteEvent OutputCompleteEvent { get; set; }
        [DataMember]
        public StatusUpdateEvent StatusUpdateEvent { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class CATEventResponse
    {
        //[DataMember]
        //public DataEventResponse DataEventResponse { get; set; }
        [DataMember]
        public DirectIOEventResponse DirectIOEventResponse { get; set; }
        [DataMember]
        public ErrorEventResponse ErrorEventResponse { get; set; }
        [DataMember]
        public OutputCompleteEventResponse OutputCompleteEventResponse { get; set; }
        [DataMember]
        public StatusUpdateEventResponse StatusUpdateEventResponse { get; set; }
    }
    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class DataEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class DataEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }
    */
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class DirectIOEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int EventNumber { get; set; }
        [DataMember]
        public int Data { get; set; }
        [DataMember]
        public object Obj { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class DirectIOEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DirectIOData DirectIOData { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class ErrorEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public ErrorCode ErrorCode { get; set; }
        [DataMember]
        public int ErrorCodeExtended { get; set; }
        [DataMember]
        public ErrorLocus ErrorLocus { get; set; }
        [DataMember]
        public ErrorResponse ErrorResponse { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class ErrorEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public ErrorResponse ErrorResponse { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class OutputCompleteEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int OutputID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class OutputCompleteEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class StatusUpdateEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public class StatusUpdateEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum ErrorLocus
    {
        [EnumMember]
        EL_INPUT,
        [EnumMember]
        EL_INPUT_DATA,
        [EnumMember]
        EL_OUTPUT,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CAT/")]
    public enum ErrorResponse
    {
        [EnumMember]
        ER_CLEAR,
        [EnumMember]
        ER_CONTINUEINPUT,
        [EnumMember]
        ER_RETRY,
    }

    #endregion
}
