diff --git a/httppulsakita.js b/httppulsakita.js
index aa796ce..c67ab02 100644
--- a/httppulsakita.js
+++ b/httppulsakita.js
@@ -11,6 +11,28 @@ var sleep_before_retry = 3000;
 
 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
 
+function parseSN(message) {
+    var sn_regex = new RegExp(config.h2h_out.sn_pattern);
+    var sn_match = message.match(sn_regex);
+        
+    if (sn_match <= 0) {
+        console.log('SN Not found: ' + message);
+        return '';
+    }
+    
+    var sn = sn_match[0];
+    var sn_remove_patterns = config.h2h_out.sn_remove_patterns.split(config.h2h_out.sn_remove_patterns_separator);
+    
+    var count = sn_remove_patterns.length;
+    
+    for(var i = 0; i < count; i++) {
+        sn = sn.replace(sn_remove_patterns[i], '');
+    }
+    
+    return sn.trim();
+}
+
+
 function topupRequest(task, retry) {
     if (config.globals.requests_count == undefined) {
         config.globals.requests_count = 1;
@@ -91,15 +113,23 @@ function topupRequest(task, retry) {
                 token = result.respon.token[0];
             }
             
-            var data_pelanggan = '';
+            var data_pelanggan = 'NO-DATA';
             if (result.respon.data) {
                 data_pelanggan = result.respon.data[0].replace(/ /g, '-');
             }
             
             var message = result.respon.pesan[0].replace(/\n/g, ' ');
             
-            if (token && data_pelanggan) {
-                var sn = token + '/' + data_pelanggan;
+            
+            if (response_code = '00') {
+                
+                var sn = "";
+                if (token && data_pelanggan) {
+                    sn = token + '/' + data_pelanggan;
+
+                } else if (config.h2h_out.parse_sn == 'YES') {                    
+                    sn = parseSN(message);
+                }
                 message = 'SN=' + sn + '; ' + message;
             }