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

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

        //
        // Common Properties
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        //
        // Specific Properties
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetFlagWhenIdle", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetFlagWhenIdleResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        void SetFlagWhenIdle(string ConsumerID, bool FlagWhenIdle);

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

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

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

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetStation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetStationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        void SetStation(string ConsumerID, int Station);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetStorageEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetStorageEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        void SetStorageEnabled(string ConsumerID, bool StorageEnabled);

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetWaterMark", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetWaterMarkResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        void SetWaterMark(string ConsumerID, bool WaterMark);

        //
        // Common Methods
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        //
        // Specific Methods
        //

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

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

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

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/PrintContent", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/PrintContentResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        void PrintContent(string ConsumerID, string FromMarker, string ToMarker);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/QueryContent", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/QueryContentResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        void QueryContent(string ConsumerID, string FileName, string FromMarker, string ToMarker);

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveCurrentMarker", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveCurrentMarkerResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        string RetrieveCurrentMarker(string ConsumerID, MarkerType MarkerType);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveMarker", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveMarkerResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        string RetrieveMarker(string ConsumerID, MarkerType MarkerType, int SessionNumber, int DocumentNumber);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveMarkerByDateTime", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveMarkerByDateTimeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        string RetrieveMarkerByDateTime(string ConsumerID, MarkerType MarkerType, string DateTime, string MarkerNumber);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveMarkersDateTime", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/RetrieveMarkersDateTimeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/UposException", Name = "UposException")]
        string RetrieveMarkersDateTime(string ConsumerID, string Marker);

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

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

        #endregion

        #region Version 1.2

        //
        // Session Management
        //

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

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

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

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

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

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

        //
        // Device Control
        // 

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

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

        //
        // Event Polling
        //

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

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

        #endregion

        #region Version 1.3

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetEventRequestProperties", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/SetEventRequestPropertiesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/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/ElectronicJournal/")]
    public class DirectIOData
    {
        [DataMember]
        public int Data { get; set; }
        [DataMember]
        public object Obj { get; set; }
    }

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

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

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

    //
    // Common Enumerations
    //

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

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

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

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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/")]
    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/ElectronicJournal/")]
    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/ElectronicJournal/")]
    public enum ElectronicJournalStations
    {
        [EnumMember]
        Journal,
        [EnumMember]
        Receipt,
        [EnumMember]
        Slip,
    }
    */
    public class ElectronicJournalStations
    {
        public const int EJ_S_RECEIPT = 1;
        public const int EJ_S_SLIP = 2;
        public const int EJ_S_JOURNAL = 4;
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/")]
    public enum MarkerType
    {
        [EnumMember]
        EJ_MT_SESSION_BEG,
        [EnumMember]
        EJ_MT_SESSION_END,
        [EnumMember]
        EJ_MT_DOCUMENT,
        [EnumMember]
        EJ_MT_HEAD,
        [EnumMember]
        EJ_MT_TAIL,
    }

    //
    // Constants
    //

    /*
    public class Constants
    {
        public const int ExtendedErrorCorruptedMedium = 205;
        public const int ExtendedErrorExisting = 201;
        public const int ExtendedErrorFirmwareBadFile = 281;
        public const int ExtendedErrorMediumFull = 202;
        public const int ExtendedErrorMultipleMarker = 203;
        public const int ExtendedErrorMultipleMarkers = 208;
        public const int ExtendedErrorNotEnoughSpace = 207;
        public const int ExtendedErrorStatistics = 280;
        public const int ExtendedErrorStatisticsDependency = 282;
        public const int ExtendedErrorUninitializedMedium = 204;
        public const int ExtendedErrorUnknownDataFormat = 206;
        public const string StatisticCommunicationErrorCount = "CommunicationErrorCount";
        public const string StatisticDeviceCategory = "DeviceCategory";
        public const string StatisticEraseCount = "EraseCount";
        public const string StatisticFailedWriteCount = "FailedWriteCount";
        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 StatisticMediumFreeSpace = "MediumFreeSpace";
        public const string StatisticMediumRemovedCount = "MediumRemovedCount";
        public const string StatisticMediumSize = "MediumSize";
        public const string StatisticModelName = "ModelName";
        public const string StatisticSerialNumber = "SerialNumber";
        public const string StatisticUnifiedPOSVersion = "UnifiedPOSVersion";
        public const string StatisticWriteCount = "WriteCount";
        public const int StatusIdle = 6;
        public const int StatusMediumFull = 2;
        public const int StatusMediumInserted = 4;
        public const int StatusMediumNearFull = 1;
        public const int StatusMediumRemoved = 3;
        public const int StatusMediumSuspended = 5;
        public const int StatusPowerOff = 2002;
        public const int StatusPowerOffline = 2003;
        public const int StatusPowerOffOffline = 2004;
        public const int StatusPowerOnline = 2001;
        public const int StatusUpdateFirmwareComplete = 2200;
        public const int StatusUpdateFirmwareCompleteDeviceNotRestored = 2205;
        public const int StatusUpdateFirmwareFailedDeviceNeedsFirmware = 2203;
        public const int StatusUpdateFirmwareFailedDeviceOk = 2201;
        public const int StatusUpdateFirmwareFailedDeviceUnknown = 2204;
        public const int StatusUpdateFirmwareFailedDeviceUnrecoverable = 2202;
        public const int StatusUpdateFirmwareProgress = 2100;
        public const int WaitForever = -1;
    }
    */

    public class ExtendedError
    {
        public const int EEJ_EXISTING = 201;
        public const int EEJ_MEDIUM_FULL = 202;
        public const int EEJ_MULTIPLE_MARKER = 203;
        public const int EEJ_UNINITIALIZED_MEDIUM = 204;
        public const int EEJ_CORRUPTED_MEDIUM = 205;
        public const int EEJ_UNKNOWN_DATAFORMAT = 206;
        public const int EEJ_NOT_ENOUGH_SPACE = 207;
        public const int EEJ_MULTIPLE_MARKERS = 208;
        public const int ESTATS_ERROR = 280;
        public const int EFIRMWARE_BAD_FILE = 281;
        public const int ESTATS_DEPENDENCY = 282;
    }

    public class StatisticProperties
    {
        public const string CommunicationErrorCount = "CommunicationErrorCount";
        public const string DeviceCategory = "DeviceCategory";
        public const string EraseCount = "EraseCount";
        public const string FailedWriteCount = "FailedWriteCount";
        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 MediumFreeSpace = "MediumFreeSpace";
        public const string MediumRemovedCount = "MediumRemovedCount";
        public const string MediumSize = "MediumSize";
        public const string ModelName = "ModelName";
        public const string SerialNumber = "SerialNumber";
        public const string UnifiedPOSVersion = "UnifiedPOSVersion";
        public const string WriteCount = "WriteCount";
    }

    public class Wait
    {
        public const int FOREVER = -1;
    }

    #endregion

    #region Version 1.2

    //
    // Event Polling
    //

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

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

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

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

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

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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/ElectronicJournal/")]
    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/ElectronicJournal/", ItemName = "PropertyName")]
    public class PropertyNameList : List<string>
    {
    }



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

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

    #endregion
}
