syntax= "proto3";

option java_package = "com.murni.tcr";

package tcrservice;

service TCRService {
	rpc grpcApiVersion(TCRApiReq) returns (TCRApiResp) {}
	rpc grpcDllVersion(TCRDllReq) returns (TCRDllResp) {}
	rpc grpcTCRVersion(TCRVersionReq) returns (TCRVersionResp) {}
	rpc grpcTCROpen(TCROpenReq) returns (TCROpenResp) {}
	rpc grpcTCRClose(TCRCloseReq) returns (TCRCloseResp) {}
	rpc grpcTCRPoll(TCRPollReq) returns (TCRPollResp) {}
	rpc grpcTCRReset(TCRResetReq) returns (TCRResetResp) {}
	rpc grpcTCRActivate(TCRActivateReq) returns (TCRActivateResp) {}
	rpc grpcTCRActStatus(TCRActStatusReq) returns (TCRActStatusResp) {}
	rpc grpcTCROpenShutter(TCROpenShutterReq) returns (TCROpenShutterResp) {}
	rpc grpcTCRCloseShutter(TCRCloseShutterReq) returns (TCRCloseShutterResp) {}
	rpc grpcTCRCashIn(TCRCashInReq) returns (TCRCashInResp) {}
	rpc grpcTCRCashInDetail(TCRCashInDetailReq) returns (TCRCashInDetailResp) {}
	rpc grpcTCRCashInEnd(TCRCashInEndReq) returns (TCRCashInEndResp) {}

	rpc grpcTCRCashInRollback(TCRCashInRollbackReq) returns (TCRCashInRollbackResp) {}
	rpc grpcTCRCashOut(TCRCashOutReq) returns (TCRCashOutResp) {}
	rpc grpcTCRExchangeStart(TCRExchangeStartReq) returns (TCRExchangeStartResp) {}
	rpc grpcTCRExchangeEnd(TCRExchangeEndReq) returns (TCRExchangeEndResp) {}
	rpc grpcTCRClearManip(TCRClearManipReq) returns (TCRClearManipResp) {}
	rpc grpcTCRClearCount(TCRClearCountReq) returns (TCRClearCountResp) {}
	rpc grpcTCRCashUnitCount(TCRCashUnitCountReq) returns (TCRCashUnitCountResp) {}
	rpc grpcTCRCashUnitInfo(TCRCashUnitInfoReq)  returns (TCRCashUnitInfoResp) {}
	rpc grpcTCRNotesCount(TCRNotesCountReq) returns (TCRNotesCountResp) {}
	rpc grpcTCRNotesInfo(TCRNotesInfoReq) returns (TCRNotesInfoResp) {}
	rpc grpcTCRBalanceInfo(TCRBalanceInfoReq) returns (TCRBalanceInfoResp) {}
	rpc grpcTCRLastTransaction(TCRLastTransactionReq) returns (TCRLastTransactionResp) {}
}

// ----------------------------------------
message TCRApiReq {
	int32 clientId = 1;
}
message TCRApiResp {
	string message = 1;
	TCR_RESP response = 2;
}
// ----------------------------------------
message TCRDllReq {
	int32 clientId = 1;
}
message TCRDllResp {
	string message = 1;
	TCR_RESP response = 2;
}
// ----------------------------------------
message TCRVersionReq {
	int32 clientId = 1;
	string ip = 2;
}
message TCRVersionResp {
	TCR_RESP response = 1;
	TCRInfo info = 2;
	string message = 3;
}
message TCRInfo {
	string CIMVersion = 1;
	string CIMFWversion = 2;
	string CIMAPversion = 3;
	string CDMversion = 4;
	string CDMFWversion = 5;
	string CDMAPversion = 6;
	string tcrid = 7;
	string reserved = 8;     
}
// --------------------------------------
message TCROpenReq {
	int32 clientId = 1;
	string ip = 2;
}
message TCROpenResp {
	string message = 1;
	TCR_RESP response = 2;
}
// ---------------------------------------
message TCRCloseReq {
	int32 clientId = 1;
}
message TCRCloseResp {
	string message = 1;
	TCR_RESP response = 2;
}
// ---------------------------------------
message TCRPollReq {
	int32 clientId = 1;
}
message TCRPollResp {
	string message = 1;
	TCR_RESP response = 2;
	TCR_ACTIVITY activity = 3;
}
// --------------------------------------
message TCRResetReq {
	int32 clientId = 1;
}
message TCRResetResp {
	string message = 1;
	TCR_RESP response = 2;
}
// --------------------------------------
message TCRActivateReq {
	int32 clientId = 1;
	TCR_STATUS state = 2;
}
message TCRActivateResp {
	string message = 1;
	TCR_RESP response = 2;
}
// --------------------------------------
message TCRActStatusReq {
	int32 clientId = 1;
}
message TCRActStatusResp {
	string message = 1;
	TCR_RESP response = 2;
	TCR_STATUS state = 3;
}
// -------------------------------------
message TCROpenShutterReq {
	int32 clientId = 1;
	int32 sPos = 2;
}
message TCROpenShutterResp {
	string message = 1;
	TCR_RESP response = 2;
}
// -------------------------------------
message TCRCloseShutterReq {
	int32 clientId = 1;
	int32 sPos = 2;
}
message TCRCloseShutterResp {
	string message = 1;
	TCR_RESP response = 2;
}
// ------------------------------------
message TCRCashInReq {
	int32 clientId = 1;
	int32 timeout = 2;
}
message TCRCashInResp {
	int32 notes = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -------------------------------------
message TCRCashInDetailReq {
	int32 clientId = 1;
	int32 notes = 2;
}
message TCRCashInDetailResp {
	TCRCimParm parm = 1;
	string message = 2;
	TCR_RESP response = 3;
}
message TCRCimParm {
	string tellerId = 1;
	TCRNotes notes = 2;
}
message TCRNotes {
	string currency = 1;
	int32 count = 2;
	TCR_DENOMINATION denom = 3;
	int64 amount = 4; 
}
// ------------------------------------
message TCRCashInEndReq {
	int32 clientId = 1;
}
message TCRCashInEndResp {
	string message = 1;
	TCR_RESP response = 2;
}
// ------------------------------------
message TCRCashInRollbackReq {
	int32 clientId = 1;
}
message TCRCashInRollbackResp {
	string message = 1;
	TCR_RESP response = 2;
}
// ------------------------------------
message TCRCashOutReq {
	int32 clientId = 1;
	TCRCdmParm parm = 2;
}
message TCRCashOutResp {
	string message = 1;
	TCR_RESP response = 2;
}
message TCRCdmParm {
	string tellerId = 1;
	TCRNotes notes = 2;
}
// ------------------------------------
message TCRExchangeStartReq {
	int32 clientId = 1;
}
message TCRExchangeStartResp {
	TCRExcParm parm	 = 1;
	string message = 2;
	TCR_RESP response = 3;
}
message TCRExcParm {
	bytes tellerId = 1;
    TCRCashUnit cu = 2;
}
message TCRCashUnit {
	int32 cuid = 1;
    bytes currency = 2;
    int32 count = 3;               
    int32 capacity = 4;             // Cash unit capacity           
    TCR_DENOMINATION denom = 5;     // Denomination of the notes    
    TCR_CU_TYPE type = 6;           // Type of cash unit            
    TCR_CU_FILLSTAT fill = 7;       // Volume status of cash unit   
    TCR_CU_STAT stat = 8;           // Status of cash unit          
}
// ------------------------------------
message TCRExchangeEndReq {
	int32 clientId = 1;
}
message TCRExchangeEndResp {
	TCRExcParm parm	 = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// ------------------------------------
message TCRClearManipReq {
	int32 clientId = 1;
}
message TCRClearManipResp {
	TCRCashUnit cu = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// ------------------------------------
message TCRClearCountReq {
	int32 clientId = 1;
}
message TCRClearCountResp {
	TCRCashUnit cu = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -----------------------------------
message TCRCashUnitCountReq {
	int32 clientId = 1;
}
message TCRCashUnitCountResp {
	int32 cu = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -----------------------------------
message TCRCashUnitInfoReq {
	int32 clientId = 1;
	int32 cu = 2;
}
message TCRCashUnitInfoResp {
	TCRCashUnit cu = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -----------------------------------
message TCRNotesCountReq {
	int32 clientId = 1;
}
message TCRNotesCountResp {
	int32 notes = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -----------------------------------
message TCRNotesInfoReq {
	int32 clientId = 1;
	int32 n = 2;
}
message TCRNotesInfoResp {
	TCRNotes notes = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -----------------------------------
message TCRBalanceInfoReq {
	int32 clientId = 1;
}
message TCRBalanceInfoResp {
	int64 balance = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -----------------------------------
message TCRLastTransactionReq {
	int32 clientId = 1;
}
message TCRLastTransactionResp {
	TCR_ACTIVITY activity = 1;
	string message = 2;
	TCR_RESP response = 3;
}
// -----------------------------------

enum TCR_RESP {
	NO_ERR               = 0;
	ERR_INVALID_FIELD    = 1; 
	ERR_INVALID_HANDLE   = 2; 
	ERR_PARAMETER_RANGE  = 3; 
	ERR_BAD_LENGTH       = 12;
	ERR_USER_CANCELLED   = 32; 
	ERR_TIMEOUT          = 33; 
	ERR_NOT_RESPONDING   = 87; 
	ERR_COMMS            = 89; 
	ERR_UNKNOWN_RESPONSE = 997;
	ERR_BAD_PARAMETER    = 998;
	ERR_CDM_INVALIDCURRENCY        = 100;
	ERR_CDM_INVALIDTELLERID        = 101;
	ERR_CDM_CASHUNITERROR          = 102;
	ERR_CDM_INVALIDDENOMINATION    = 103;
	ERR_CDM_INVALIDMIXNUMBER       = 104;
	ERR_CDM_NOCURRENCYMIX          = 105;
	ERR_CDM_NOTDISPENSABLE         = 106;
	ERR_CDM_TOOMANYITEMS           = 107;
	ERR_CDM_UNSUPPOSITION          = 108;
	ERR_CDM_SAFEDOOROPEN           = 110;
	ERR_CDM_SHUTTERNOTOPEN         = 112;
	ERR_CDM_SHUTTEROPEN            = 113;
	ERR_CDM_SHUTTERCLOSED          = 114;
	ERR_CDM_INVALIDCASHUNIT        = 115;
	ERR_CDM_NOITEMS                = 116;
	ERR_CDM_EXCHANGEACTIVE         = 117;
	ERR_CDM_NOEXCHANGEACTIVE       = 118;
	ERR_CDM_SHUTTERNOTCLOSED       = 119;
	ERR_CDM_PRERRORNOITEMS         = 120;
	ERR_CDM_PRERRORITEMS           = 121;
	ERR_CDM_PRERRORUNKNOWN         = 122;
	ERR_CDM_ITEMSTAKEN             = 123;
	ERR_CDM_INVALIDMIXTABLE        = 127;
	ERR_CDM_OUTPUTPOS_NOT_EMPTY    = 128;
	ERR_CDM_INVALIDRETRACTPOSITION = 129;
	ERR_CDM_NOTRETRACTAREA         = 130;
	ERR_CDM_NOCASHBOXPRESENT       = 133;
	ERR_CDM_AMOUNTNOTINMIXTABLE    = 134;
	ERR_CDM_ITEMSNOTTAKEN          = 135;
	ERR_CDM_ITEMSLEFT              = 136;
	ERR_CDM_INVALID_PORT           = 137;
	ERR_CDM_POWERSAVETOOSHORT      = 138;
	ERR_CDM_POWERSAVEMEDIAPRESENT  = 139;
	WRN_CDM_ESCROW_FULL            = 500;
	WRN_CDM_ESCROW_CONTAIN_NOTES   = 501;
}

enum TCR_ACTIVITY {	       
    TCRIDLESTATE	= 0;   
    DLLVERSION      = 1;
    TCRVERSION	    = 2;
    TCROPEN	        = 3;
    TCRCLOSE	    = 4;
    TCRRESET	    = 5;
    TCRACTIVATE	    = 6;
    TCRACTSTATUS	= 7;
    TCROPENSHUTTER	= 8;
    TCRCLOSESHUTTER	= 9;
    TCRCASHIN	    = 10;
    TCRCASHINDETAIL	= 11;
    TCRCASHINEND	= 12;
    TCRCASHINROLLBACK = 13;
    TCRCASHOUT	= 14;
    TCRREJECT	= 15;
    TCRRETRACT	= 16;
    TCREXCHANGESTART = 17;
    TCREXCHANGEEND	 = 18;
    TCRCLEARCOUNT	 = 19;
    TCRCASHUNITCOUNT = 20;
    TCRCASHUNITINFO	 = 21;
    TCRNOTESCOUNT	 = 22;
    TCRNOTESINFO	 = 23;
    TCRBALANCEINFO	 = 24;
    TCRLASTTRANSACTION = 25;
}

enum TCR_STATUS {               // TCR activation status return codes         
    TCR_DEVONLINE         = 0;  // TCR machine is turned on & available       
    TCR_DEVACTIVATED      = 1;  // TCR machine ready to make transaction      
    TCR_DEVEXCHANGE       = 2;  // TCR machine ready to do collection         
    TCR_DEVOFFLINE        = 3;  // TCR machine is turned on but not available 
    TCR_DEVHWERROR        = 20; // TCR hardware error                         
    TCR_DEVPOWEROFF       = 21; // TCR machine turned off 
    TCR_DEVNODEVICE       = 22; // TCR machine not found  
    TCR_DEVBUSY           = 23; // TCR machine busy 
    TCR_DEVFRAUDATTEMPT   = 24;
    TCR_DEVPOTENTIALFRAUD = 25;
    TCR_SUSPEND           = 49; // TCR machine is paused and not ready 
    TCR_DEVUSERERROR      = 99; // TCR machine has user defined error 
}

enum TCR_DENOMINATION {   
    TCR_MIX             = 0;    // Mix denom 
    TCR_1K              = 1;    // IDR 1000  
    TCR_2K              = 2;    // IDR 2000  
    TCR_5K              = 3;    // IDR 5000  
    TCR_10K             = 4;    // IDR 10000 
    TCR_20K             = 5;    // IDR 20000 
    TCR_50K             = 6;    // IDR 50000 
    TCR_100K            = 7;    // IDR 100000
}

enum TCR_CU_TYPE { 
    CU_NOTDEFINE            = 0; // TCR cash unit not defined yet          
    CIM_TYPERECYCLING       = 1; // TCR cash unit for deposit and dispense    
    CIM_TYPECASHIN          = 2; // TCR cash unit for deposit notes only   
    CIM_TYPEREPCONTAINER    = 3;
    CIM_TYPERETRACTCASSETTE = 4; // TCR cash unit for retracted notes      
    CIM_TYPEREJECT          = 5; // TCR cash unit for rejected notes       
    CIM_TYPECDMSPECIFIC     = 6;
    CDM_TYPENA              = 101;
    CDM_TYPEREJECTCASSETTE  = 102;
    CDM_TYPEBILLCASSETTE    = 103;
    CDM_TYPECOINCYLINDER    = 104;
    CDM_TYPECOINDISPENSER   = 105;
    CDM_TYPERETRACTCASSETTE = 106;
    CDM_TYPECOUPON          = 107;
    CDM_TYPEDOCUMENT        = 108;
    CDM_TYPEREPCONTAINER    = 111;
    CDM_TYPERECYCLING       = 112;
}

enum TCR_CU_FILLSTAT {          // TCR cash unit volume status 
    CUVOLND   = 0;              // TCR cash unit volume status not defined
    CUEMPTY   = 1;              // Cash unit empty          
    CULOW     = 2;              // Cash unit low            
    CUHIGH    = 3;              // Cash unit almost full    
    CUFULL    = 4;              // Cash unit FULL           
}

enum TCR_CU_STAT {              // TCR cash unit readiness status
    CUOK      = 0;              // Cash unit OK             
    CUINOP    = 1;              // Cash unit inoperatable   
    CUMISSING = 2;              // Cash unit missing        
    CUNOVAL   = 3;              // Cash unit no value       
    CUNOREF   = 4;              // Cash unit no ref         
    CUMANIP   = 5;              // Cash unit manipulated    
    CULOCKED  = 55;             // Cash unit locked         
    CUNOTCONF = 58;             // Cash unit not configured
}

