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

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

        //
        // Common Properties
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        //
        // Specific Properties
        //

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

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

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

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

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

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

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

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

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

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

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/GetStatusNotify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/GetStatusNotifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        StatusNotify GetStatusNotify(string ConsumerID);

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetTareWeight", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetTareWeightResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void SetTareWeight(string ConsumerID, decimal TareWeight);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetUnitPrice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetUnitPriceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void SetUnitPrice(string ConsumerID, decimal UnitPrice);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/GetWeightUnit", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/GetWeightUnitResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        WeightUnit GetWeightUnit(string ConsumerID);

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetZeroValid", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetZeroValidResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void SetZeroValid(string ConsumerID, bool ZeroValid);

        //
        // Common Methods
        //

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        //
        // Specific Methods
        //

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/ReadWeight", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/ReadWeightResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        decimal ReadWeight(string ConsumerID, int Timeout);

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

        #endregion

        #region Version 1.2

        //
        // Session Management
        //

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

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

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

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

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

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

        //
        // Device Control
        // 

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

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

        //
        // Event Polling
        //

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

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

        #endregion

        #region Version 1.3

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

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

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

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

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

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

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

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

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/DoPriceCalculating", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/DoPriceCalculatingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        PriceCalculatingData DoPriceCalculating(string ConsumerID, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/FreezeValue", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/FreezeValueResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void FreezeValue(string ConsumerID, int Item, bool Freeze);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/ReadLiveWeightWithTare", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/ReadLiveWeightWithTareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        WeightWithTareData ReadLiveWeightWithTare(string ConsumerID, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetPriceCalculationMode", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetPriceCalculationModeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void SetPriceCalculationMode(string ConsumerID, int Mode);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetSpecialTare", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetSpecialTareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void SetSpecialTare(string ConsumerID, int Mode, int Data);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetTarePriority", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetTarePriorityResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void SetTarePriority(string ConsumerID, int Priority);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetUnitPriceWithWeightUnit", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Scale/SetUnitPriceWithWeightUnitResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Scale/UposException", Name = "UposException")]
        void SetUnitPriceWithWeightUnit(string ConsumerID, decimal UnitPrice, int WeightUnit, int WeightNumerator, int weightDenominator);

        #endregion
    }

    #region Version 1.1

    //
    // Common Data Types
    //

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

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

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

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

    //
    // Common Enumerations
    //

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

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

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

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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Scale/")]
    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/Scale/")]
    // 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/Scale/")]
    public enum StatusNotify
    {
        [EnumMember]
        SCAL_SN_DISABLED,
        [EnumMember]
        SCAL_SN_ENABLED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Scale/")]
    public enum WeightUnit
    {
        [EnumMember]
        SCAL_WU_GRAM,
        [EnumMember]
        SCAL_WU_KILOGRAM,
        [EnumMember]
        SCAL_WU_OUNCE,
        [EnumMember]
        SCAL_WU_POUND,
    }

    //
    // Constants
    //

    public class ExtendedError
    {
        public const int ESCAL_OVERWEIGHT = 201;
        public const int ESCAL_UNDER_ZERO = 202;
        public const int ESCAL_SAME_WEIGHT = 203;
        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 FirmwareRevision = "FirmwareRevision";
        public const string GoodWeightReadCount = "GoodWeightReadCount";
        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/Scale/")]
    public class ScaleEvent
    {
        [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/Scale/")]
    public class ScaleEventResponse
    {
        [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/Scale/")]
    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/Scale/")]
    public class DataEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

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

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

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

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



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

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Scale/")]
    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/Scale/")]
    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/Scale/")]
    public class DataContainedEventResponse
    {
        [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/Scale/")]
    public class PriceCalculatingData
    {
        [DataMember]
        public int WeightData { get; set; }
        [DataMember]
        public int Tare { get; set; }
        [DataMember]
        public decimal UnitPrice { get; set; }
        [DataMember]
        public decimal UnitPriceX { get; set; }
        [DataMember]
        public int WeightUnitX { get; set; }
        [DataMember]
        public int WeightNumeratorX { get; set; }
        [DataMember]
        public int WeightDenominatorX { get; set; }
        [DataMember]
        public decimal Price { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Scale/")]
    public class WeightWithTareData
    {
        [DataMember]
        int WeightData { get; set; }
        [DataMember]
        int Tare { get; set; }
    }
    #endregion
}
