///////////////////////////////////////////////////////////////////////////////
//
// This software is provided "AS IS".  The JavaPOS working group (including
// each of the Corporate members, contributors and individuals)  MAKES NO
// REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NON-INFRINGEMENT. The JavaPOS working group shall not be liable for
// any damages suffered as a result of using, modifying or distributing this
// software or its derivatives.Permission to use, copy, modify, and distribute
// the software and its documentation for any purpose is hereby granted.
//
// CATService113
//
//   Interface definining all capabilities, properties and methods that are
//   specific to the Credit Authorization Terminal for release 1.13.
//
// Modification history
// ------------------------------------------------------------------
// 2009-Feb-23 JavaPOS Release 1.13                                BS
// 2010-Nov-17 JavaPOS Release 1.13.3                              BS
//   Added missing property OutputID
//
//////////////////////////////////////////////////////////////////////////////

package jpos.services;

import jpos.*;

public interface CATService113 extends CATService112
{
  // Properties
  public int     getOutputID() throws JposException;
}