diff --git a/partner-cjk.js b/partner-cjk.js
index 71c8d61..66223ac 100644
--- a/partner-cjk.js
+++ b/partner-cjk.js
@@ -19,10 +19,10 @@ function initMongoClient() {
     if (!config.mongodb || !config.mongodb.url) {
         return;
     }
-    
+
     try {
         var url = config.mongodb.url;
-    
+
         mongoClient.connect(url, function(err, db) {
             if (err) {
                 logger.warn('Failed to connect to mongodb', {err: err});
@@ -34,7 +34,7 @@ function initMongoClient() {
     }
     catch(err) {
         logger.warn('Exception when connecting to mongodb', {err: err, url: url});
-    }    
+    }
 }
 
 var maxRetry = 10;
@@ -43,11 +43,11 @@ var sleepBeforeRetry = 30;
 function start(_config, _callbackReport, options) {
     config = _config;
     callbackReport = _callbackReport
-    
+
     if (options && options.aaa) {
             aaa = options.aaa;
     }
-    
+
     if (options && options.logger) {
         logger = options.logger;
     } else {
@@ -57,7 +57,7 @@ function start(_config, _callbackReport, options) {
             ]
         });
     }
-    
+
     initMongoClient();
 }
 
@@ -65,12 +65,12 @@ function calculateSignature(params) {
     var passwordHash = crypto.createHash('sha1').update(params.password).digest().toString('hex');
     var plain = params.trxtype + params.prdcode + params.value + params.msisdn + params.trxid + params.uid + passwordHash;
     var signature = crypto.createHash('sha256').update(plain).digest().toString('hex');
-    
+
     try {
         logger.verbose('Signature calculated', {plain: plain, signature: signature});
     }
     catch(err) {}
-    
+
     return signature;
 }
 
@@ -86,18 +86,18 @@ function createXmlPayload(params) {
             {hash: calculateSignature(params)}
         ]
     });
-    
+
     try { logger.verbose("Payload: " + payload); }
     catch(errLog) {}
-    
+
     return payload;
 }
 
 function insertTaskToMongoDb(task) {
     if (!isMongoReady()) { return; }
-    
+
     task.supplier = config.globals.gateway_name;
-    
+
     try {
         mongodb.collection(config.mongodb.collection).insertOne(task);
     }
@@ -108,7 +108,7 @@ function insertTaskToMongoDb(task) {
 
 function pushResponseToMongoDb(task, response) {
     if (!isMongoReady()) { return; }
-    
+
     try {
         mongodb.collection(config.mongodb.collection).updateOne(
             {requestId: task.requestId},
@@ -138,7 +138,7 @@ function isMongoReady() {
     if (!config.mongodb) { return; }
     if (!config.mongodb.collection) { return; }
     if (!mongodb) { return; }
-    
+
     return true;
 }
 
@@ -157,7 +157,7 @@ function getSNFromMessage(message) {
 
 function hasSuccessKeywords(message) {
     var keywords = ['SUKSES', 'Finish'];
-    
+
     var count = keywords.length;
     for (var i=0; i < count; i++) {
         if (message.indexOf(keywords[i]) >= 0) {
@@ -171,9 +171,10 @@ function supplierRcToST24Rc(rc) {
     var rcs = {
         '0001': '40',
         '0012': '40', // hash data tidak sesuai
+        '0015': '40', // saldo tidak cukup
         '0019': '13', // produk tidak tersedia
     }
-    
+
     if (rcs[rc]) {
         return rcs[rc];
     } else {
@@ -191,57 +192,57 @@ function getSNFromResponseObject(respObj) {
 }
 
 function topupResponseHandler(body, task) {
-    
+
     //logger.info('Got reply from partner', {body: body});
-    
+
     xml2js(body, function(err, result) {
         var ts =  strftime('%Y-%m-%d %H:%M:%S', new Date());
-        
+
         if (err) {
             logger.warn('Got invalid XML from partner', {err: err, body: body, task: task});
             callbackReport(task.requestId, '68', body);
-            
+
             pushResponseToMongoDb(task, {ts:  ts, supplier: config.globals.gateway_name, raw: body});
             return;
         }
         logger.info('XML message from partner', {result: result});
         pushResponseToMongoDb(task, {ts:  ts, supplier: config.globals.gateway_name, raw: body, parsed: result});
-        
+
         var rc = '68';
         var message = result.ciwaru.msg[0];
-        
+
         if (message.toUpperCase().indexOf('PENDING') >= 0) {
             rc = '68';
         }
         else if (hasSuccessKeywords(message)) {
-            
+
             var sn = getSNFromResponseObject(result);
-            
+
             if (!sn) {
                 sn = getSNFromMessage(message);
             }
-            
+
             message = 'SN=' + sn + '; ' + message;
             rc = '00';
-            
+
         }
         else if (message.indexOf('Nomor Pelanggan Salah') >= 0)  {
-            
+
             rc = '14';
-            
+
         } else {
             rc  = supplierRcToST24Rc(result.ciwaru.rc[0]);
             if (!rc) {
                 rc = '68';
             }
         }
-        
+
         if ((task.retry == maxRetry) || (rc != '68')) {
             callbackReport(task.requestId, rc, message);
         } else {
             logger.info('Not reporting to AAA for duplicate 68', {task: task});
         }
-        
+
         if (rc == '68') {
             topupRequestRetry(task);
         }
@@ -250,7 +251,7 @@ function topupResponseHandler(body, task) {
 
 function topupRequestRetry(task) {
     task.retry--;
-                
+
     if (task.retry > 0) {
         logger.info('Retrying in ' +  sleepBeforeRetry + 's');
         setTimeout(topupRequest, sleepBeforeRetry * 1000, task, task.retry);
@@ -261,23 +262,23 @@ function topupRequestRetry(task) {
 }
 
 function topupRequest(task, retry) {
-    
+
     if (retry === undefined) {
-        
+
         task.ts = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
         task.ts_date = moment(task.timestamp, 'YYYYMMDDHHmmss').format('YYYY-MM-DD');
-        
+
         insertTaskToMongoDb(task);
-        
+
         retry = maxRetry;
     }
-    
+
     if (!task.retry) {
         task.retry = retry;
     }
 
     var remoteProduct = task.remoteProduct.split(',');
-    
+
     var params = {
         trxtype: '01',
         prdcode: remoteProduct[0],
@@ -287,9 +288,9 @@ function topupRequest(task, retry) {
         uid: config.h2h_out.userid,
         password: config.h2h_out.password,
     };
-    
+
     var postBody = createXmlPayload(params);
-    
+
     var partnerUrl = url.parse(config.h2h_out.partner);
     var postRequest = {
         host: partnerUrl.hostname,
@@ -301,27 +302,27 @@ function topupRequest(task, retry) {
             'Content-Length': Buffer.byteLength(postBody)
         }
     };
-    
+
     logger.info('POST to partner', {postRequest: postRequest});
     var req = http.request(postRequest, function( res ) {
-        
+
         logger.verbose('Status code: ' + res.statusCode );
         var buffer = "";
-        
-        res.on( "data", function( data ) { 
-            buffer = buffer + data; 
+
+        res.on( "data", function( data ) {
+            buffer = buffer + data;
         });
-        
-        res.on( "end", function( data ) {             
+
+        res.on( "end", function( data ) {
             topupResponseHandler(buffer, task);
         });
-        
+
     });
-    
+
     req.on('error', function(e) {
         logger.warn('problem with request: ' + e.message);
         callbackReport(task['requestId'], '68', e.message);
-        
+
         topupRequestRetry(task);
     });