diff --git a/package.json b/package.json
index bcd8eef..9e68a2f 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
   "dependencies": {
     "easysoap": "^1.0.5",
     "ini": "^1.3.4",
+    "moment": "^2.13.0",
     "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git",
     "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
     "soap": "^0.15.0",
diff --git a/partner-kospinjasa.js b/partner-kospinjasa.js
index e3c5ff4..7fcc020 100644
--- a/partner-kospinjasa.js
+++ b/partner-kospinjasa.js
@@ -6,6 +6,8 @@ var fs = require("fs");
 var whiskers = require("whiskers");
 var http = require("http");
 var url = require("url");
+var mongoClient = require('mongodb').MongoClient;
+var moment = require('moment');
 
 process.chdir(__dirname);
 var soapTemplate = fs.readFileSync("message.xml");
@@ -18,6 +20,7 @@ var callbackReport;
 var aaa;
 var logger;
 var options;
+var mongodb;
 
 function start(_config, _callbackReport, options) {
     config = _config;
@@ -36,9 +39,89 @@ function start(_config, _callbackReport, options) {
             ]
         });
     }
+
+    initMongoClient();
+}
+
+function initMongoClient() {
+    if (!config || !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});
+                return;
+            }
+            mongodb = db;
+            logger.info('MongoDB connected');
+        });
+    }
+    catch(err) {
+        logger.warn('Exception when connecting to mongodb', {err: err, url: url});
+    }
+}
+
+function insertTaskToMongoDb(task) {
+    if (!isMongoReady()) { return; }
+
+    task.supplier = config.globals.gateway_name;
+    task.rc = '68';
+
+    try {
+        mongodb.collection(config.mongodb.collection).insertOne(task);
+    }
+    catch(err) {
+        //logger.warn('Exception when inserting document to mongodb', {err: err, task: task});
+    }
+}
+
+function pushResponseToMongoDb(task, response, rc) {
+    if (!isMongoReady()) { return; }
+
+    try {
+        mongodb.collection(config.mongodb.collection).updateOne(
+            {requestId: task.requestId},
+            {
+                $set: {
+                    lastResponse: response,
+                    supplier: config.globals.gateway_name,
+                    rc: rc
+                },
+                $push: {
+                    responses: response
+                }
+            },
+            function(err, result) {
+                if (err) {
+                    logger.warn('Error when pushing response to mongodb', {err: err, task: task, response: response});
+                    return;
+                }
+            }
+        );
+    }
+    catch(err) {
+        logger.warn('Exception when pushing response to mongodb', {err: err, task: task, response: response});
+    }
+}
+
+function isMongoReady() {
+    if (!config.mongodb) { return; }
+    if (!config.mongodb.collection) { return; }
+    if (!mongodb) { return; }
+
+    return true;
 }
 
 function topupRequest(task, retry) {
+    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);
+
     saldoCheck(billpayment, task);
 }
 
@@ -58,8 +141,13 @@ function saldoCheck(callback, task) {
     soap.createClient(config.h2h_out.partner, function(err, soapClient) {
 
         if (err) {
-            logger.warn('Error creating soap client for saldoCheck', {err: err});
-            callbackReport(task.requestId, '40', 'Error creating soap client for saldoCheck: ' + err);
+
+            var errorMessage = 'Error creating soap client for saldoCheck: ' + err;
+
+            logger.warn(errorMessage, {err: err});
+            callbackReport(task.requestId, '40', errorMessage);
+            pushResponseToMongoDb(task, {ts:  ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40');
+
             return;
         }
 
@@ -77,8 +165,11 @@ function saldoCheck(callback, task) {
             );
 
             if (err) {
-                logger.warn('Error requesting saldoCheck', {err: err});
-                callbackReport(task.requestId, '40', 'Gagal check saldo');
+                var errorMessage = 'Error requesting saldoCheck: ' + err;
+
+                logger.warn(errorMessage, {err: err});
+                callbackReport(task.requestId, '40', errorMessage);
+                pushResponseToMongoDb(task, {ts:  ts, supplier: config.globals.gateway_name, raw: errorMessage}, '40');
             }
 
             var balance;
@@ -147,17 +238,21 @@ function billpayment(task, balance) {
             );
 
             if (err) {
-                logger.warn('Error requesting service', {err: err});
-                callbackReport(task.requestId, '68', 'something wrong');
+                var errorMessage = 'Error requesting service: ' + err;
+
+                logger.warn(errorMessage, {err: err});
+                callbackReport(task.requestId, '68', errorMessage);
+                pushResponseToMongoDb(task, {ts:  ts, supplier: config.globals.gateway_name, raw: soapClient.lastResponse, parsed: result}, '68');
+
                 return;
             }
 
-            topupResponseHandler(task, result, balance);
+            topupResponseHandler(task, result, balance, soapClient.lastResponse);
         });
     });
 }
 
-function topupResponseHandler(task, response, balance) {
+function topupResponseHandler(task, response, balance, rawResponse) {
     var st24rc = '68';
     var st24message = response.outputParameter.resultDesc.$value;
 
@@ -293,6 +388,7 @@ function topupResponseHandler(task, response, balance) {
 
     logger.info('Got result: ' + message, {response: response});
     callbackReport(task.requestId, st24rc, st24message + ' -- Prev Balance: ' + balance);
+    pushResponseToMongoDb(task, {ts:  ts, supplier: config.globals.gateway_name, raw: rawResponse, parsed: response}, st24rc);
 }
 
 function createSignature(params, password) {