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

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

        //
        // Common Properties
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        //
        // Specific Properties
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetCurrencyCashList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetCurrencyCashListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashUnits GetCurrencyCashList(string ConsumerID);

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetCurrencyCodeList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetCurrencyCodeListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CurrencyCodeList GetCurrencyCodeList(string ConsumerID);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetCurrentExit", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetCurrentExitResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void SetCurrentExit(string ConsumerID, int CurrentExit);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetCurrentService", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetCurrentServiceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void SetCurrentService(string ConsumerID, int CurrentService);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositCashList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositCashListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashUnits GetDepositCashList(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositCodeList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositCodeListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        DepositCodeList GetDepositCodeList(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositCounts", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositCountsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashCountList GetDepositCounts(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositStatus", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDepositStatusResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashDepositStatus GetDepositStatus(string ConsumerID);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDeviceStatus", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetDeviceStatusResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashChangerStatus GetDeviceStatus(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetExitCashList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetExitCashListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashUnits GetExitCashList(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetFullStatus", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetFullStatusResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashChangerFullStatus GetFullStatus(string ConsumerID);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetRealTimeDataEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetRealTimeDataEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void SetRealTimeDataEnabled(string ConsumerID, bool RealTimeDataEnabled);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetServiceIndex", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/GetServiceIndexResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        ServiceIndex GetServiceIndex(string ConsumerID);

        //
        // Common Methods
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        //
        // Specific Methods
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/AdjustCashCounts", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/AdjustCashCountsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void AdjustCashCounts(string ConsumerID, CashCountList CashCounts);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/DispenseCash", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/DispenseCashResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void DispenseCash(string ConsumerID, CashCountList CashCounts);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/DispenseChange", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/DispenseChangeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void DispenseChange(string ConsumerID, int Amount);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/EndDeposit", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/EndDepositResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void EndDeposit(string ConsumerID, CashDepositAction Success);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/PauseDeposit", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/PauseDepositResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void PauseDeposit(string ConsumerID, CashDepositPause Control);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/ReadCashCounts", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/ReadCashCountsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        CashCounts ReadCashCounts(string ConsumerID);

        #endregion

        #region Version 1.2

        //
        // Session Management
        //

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

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

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

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

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

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

        //
        // Device Control
        // 

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

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

        //
        // Event Polling
        //

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

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

        #endregion

        #region Version 1.3

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetEventRequestProperties", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/SetEventRequestPropertiesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/UposException", Name = "UposException")]
        void SetEventRequestProperties(string ConsumerID, PropertyNameList list);

        #endregion

    }

    #region Version 1.1

    //
    // Common Data Types
    //

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

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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    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/CashChanger/")]
    public class Statistic
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Value { get; set; }
    }

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

    //
    // Common Enumerations
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    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/CashChanger/")]
    public enum ControlState
    {
        [EnumMember]
        S_CLOSED,
        [EnumMember]
        S_IDLE,
        [EnumMember]
        S_BUSY,
        [EnumMember]
        S_ERROR,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    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/CashChanger/")]
    public enum HealthCheckLevel
    {
        [EnumMember]
        CH_INTERNAL,
        [EnumMember]
        CH_EXTERNAL,
        [EnumMember]
        CH_INTERACTIVE,
    }

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

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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    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/CashChanger/")]
    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
    //

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/", ItemName = "Bill")]
    public class BillList : List<int>
    {
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public class CashCount
    {
        [DataMember]
        public int Count { get; set; }
        [DataMember]
        public int NominalValue { get; set; }
        [DataMember]
        public CashCountType Type { get; set; }
    }

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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public class CashCounts
    {
        [DataMember]
        public CashCountList Counts { get; set; }
        [DataMember]
        public bool Discrepancy { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public class CashUnits
    {
        [DataMember]
        public BillList Bills { get; set; }
        [DataMember]
        public CoinList Coins { get; set; }
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/", ItemName = "Coin")]
    public class CoinList : List<int>
    {
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/", ItemName = "CurrencyCode")]
    public class CurrencyCodeList : List<string>
    {
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/", ItemName = "DepositCode")]
    public class DepositCodeList : List<string>
    {
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public class ServiceIndex
    {
        [DataMember]
        public int BillDispenser { get; set; }
        [DataMember]
        public int BillAcceptor { get; set; }
        [DataMember]
        public int CoinDispenser { get; set; }
        [DataMember]
        public int CoinAcceptor { get; set; }
    }

    //
    // Specific Enumerations
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public enum CashChangerFullStatus
    {
        [EnumMember]
        CHAN_STATUS_OK,
        [EnumMember]
        CHAN_STATUS_FULL,
        [EnumMember]
        CHAN_STATUS_NEARFULL,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public enum CashChangerStatus
    {
        [EnumMember]
        CHAN_STATUS_OK,
        [EnumMember]
        CHAN_STATUS_EMPTY,
        [EnumMember]
        CHAN_STATUS_NEAREMPTY,
        [EnumMember]
        CHAN_STATUS_JAM,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public enum CashCountType
    {
        [EnumMember]
        Bill,
        [EnumMember]
        Coin,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public enum CashDepositAction
    {
        [EnumMember]
        CHAN_DEPOSIT_CHANGE,
        [EnumMember]
        CHAN_DEPOSIT_NOCHANGE,
        [EnumMember]
        CHAN_DEPOSIT_REPAY,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public enum CashDepositPause
    {
        [EnumMember]
        CHAN_DEPOSIT_PAUSE,
        [EnumMember]
        CHAN_DEPOSIT_RESTART,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public enum CashDepositStatus
    {
        [EnumMember]
        CHAN_STATUS_DEPOSIT_START,
        [EnumMember]
        CHAN_STATUS_DEPOSIT_END,
        [EnumMember]
        CHAN_STATUS_DEPOSIT_NONE,
        [EnumMember]
        CHAN_STATUS_DEPOSIT_COUNT,
        [EnumMember]
        CHAN_STATUS_DEPOSIT_JAM,
    }

    //
    // Constants
    //

    /*
    public class Constants
    {
        public const int ExtendedErrorFirmwareBadFile = 281;
        public const int ExtendedErrorOverDispense = 201;
        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 EFIRMWARE_BAD_FILE = 281;
        public const int ECHAN_OVERDISPENSE = 201;
        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/CashChanger/")]
    public class CashChangerEvent
    {
        [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; }
        [DataMember]
        public DataContainedEvent DataContainedEvent { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public class CashChangerEventResponse
    {
        [DataMember]
        public DataEventResponse DataEventResponse { get; set; }
        [DataMember]
        public DataContainedEventResponse DataContainedEventResponse { 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/CashChanger/")]
    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/CashChanger/")]
    public class DataEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    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/CashChanger/")]
    public class DirectIOEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DirectIOData DirectIOData { get; set; }
    }
    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    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/CashChanger/")]
    public class ErrorEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public ErrorResponse ErrorResponse { get; set; }
    }

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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public class OutputCompleteEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }
    */
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    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/CashChanger/")]
    public class StatusUpdateEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }
    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/")]
    public enum ErrorLocus
    {
        [EnumMember]
        EL_INPUT,
        [EnumMember]
        EL_INPUT_DATA,
        [EnumMember]
        EL_OUTPUT,
    }

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

    #region Version 1.3

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/", ItemName = "PropertyName")]
    public class PropertyNameList : List<string>
    {
    }



    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/CashChanger/", ItemName = "Parameter")]
    public class ParameterList : Dictionary<string, object>
    {
    }

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

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

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

    #endregion
}
