Commit 6a0eba853d0b651ad47e5e704c6da8c1320633d9

Authored by Adhidarma Hadiwinoto
1 parent 95d4f71b1e
Exists in master

getDetailFromMessage support replace rules

Showing 4 changed files with 64 additions and 103 deletions Side-by-side Diff

1 1 "use strict";
2 2  
  3 +const regexLooperReplace = require('tektrans-lib/regex-looper/replace');
3 4 const rcFromMsg = require('komodo-sdk/rc-from-msg');
4 5 const organicRc = require('./rc');
5 6  
... ... @@ -111,16 +112,17 @@ function getBalanceFromMessage(msg, rule) {
111 112 return Number(result.replace(/\./g, ''));
112 113 }
113 114  
114   -function getDetailFromMessage(msg, rule) {
  115 +function getDetailFromMessage(msg, rule, replacementRules) {
115 116 if (!rule) {
116 117 rule = {
117 118 pattern: " Detail:\\s*(.+?)\\s+Sisa [Ss]aldo",
118 119 match_idx: 1,
119 120 }
120 121 }
121   -
122   - let result = extractFromMessage(msg, rule);
123   - return (result || '').trim();
  122 +
  123 + return (
  124 + regexLooperReplace(extractFromMessage(msg, rule), replacementRules) || ''
  125 + ).trim() || null;
124 126 }
125 127  
126 128 function splitPostpaidDetail(str) {
... ... @@ -138,7 +138,8 @@
138 138 "arr-union": {
139 139 "version": "3.1.0",
140 140 "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
141   - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
  141 + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
  142 + "optional": true
142 143 },
143 144 "array-flatten": {
144 145 "version": "1.1.1",
... ... @@ -369,23 +370,6 @@
369 370 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
370 371 "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
371 372 },
372   - "bytewise": {
373   - "version": "1.1.0",
374   - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz",
375   - "integrity": "sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=",
376   - "requires": {
377   - "bytewise-core": "^1.2.2",
378   - "typewise": "^1.0.3"
379   - }
380   - },
381   - "bytewise-core": {
382   - "version": "1.2.3",
383   - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz",
384   - "integrity": "sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=",
385   - "requires": {
386   - "typewise-core": "^1.2"
387   - }
388   - },
389 373 "cache-base": {
390 374 "version": "1.0.1",
391 375 "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
... ... @@ -1839,7 +1823,8 @@
1839 1823 "get-value": {
1840 1824 "version": "2.0.6",
1841 1825 "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
1842   - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
  1826 + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
  1827 + "optional": true
1843 1828 },
1844 1829 "getpass": {
1845 1830 "version": "0.1.7",
... ... @@ -2093,7 +2078,8 @@
2093 2078 "is-buffer": {
2094 2079 "version": "1.1.6",
2095 2080 "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
2096   - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
  2081 + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
  2082 + "optional": true
2097 2083 },
2098 2084 "is-data-descriptor": {
2099 2085 "version": "0.1.4",
... ... @@ -2137,7 +2123,8 @@
2137 2123 "is-extendable": {
2138 2124 "version": "0.1.1",
2139 2125 "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
2140   - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
  2126 + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
  2127 + "optional": true
2141 2128 },
2142 2129 "is-extglob": {
2143 2130 "version": "2.1.1",
... ... @@ -2184,6 +2171,7 @@
2184 2171 "version": "2.0.4",
2185 2172 "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
2186 2173 "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
  2174 + "optional": true,
2187 2175 "requires": {
2188 2176 "isobject": "^3.0.1"
2189 2177 }
... ... @@ -2220,7 +2208,8 @@
2220 2208 "isobject": {
2221 2209 "version": "3.0.1",
2222 2210 "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
2223   - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
  2211 + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
  2212 + "optional": true
2224 2213 },
2225 2214 "isstream": {
2226 2215 "version": "0.1.2",
... ... @@ -2299,30 +2288,29 @@
2299 2288 "basic-auth": "^2.0.0",
2300 2289 "body-parser": "^1.18.2",
2301 2290 "dot-object": "^1.7.0",
2302   - "express": "^4.16.3",
  2291 + "express": "^4.17.1",
2303 2292 "express-session": "^1.15.6",
2304 2293 "fs-copy-file": "^2.1.2",
2305 2294 "json-query": "^2.2.2",
2306 2295 "lru-cache": "^4.1.1",
2307   - "macaddress": "^0.2.8",
2308   - "moment": "^2.19.1",
  2296 + "macaddress": "^0.2.9",
  2297 + "moment": "^2.24.0",
2309 2298 "node-machine-id": "^1.1.10",
2310 2299 "node-natural-sort": "^0.8.6",
2311 2300 "numeral": "^2.0.6",
2312   - "nunjucks": "^3.0.1",
  2301 + "nunjucks": "^3.2.1",
2313 2302 "pkginfo": "^0.4.1",
2314 2303 "redis": "^2.8.0",
2315   - "request": "^2.81.0",
  2304 + "request": "^2.88.0",
2316 2305 "sha1": "^1.1.1",
2317 2306 "simple-git": "^1.80.1",
2318   - "sort-object": "^3.0.2",
2319 2307 "strftime": "^0.10.0",
2320 2308 "string-natural-compare": "^2.0.2",
2321 2309 "uniqid": "^4.1.1",
2322 2310 "uuid": "^3.1.0",
2323   - "winston": "^2.3.1",
  2311 + "winston": "^3.3.3",
2324 2312 "winston-circular-buffer": "^1.0.0",
2325   - "winston-daily-rotate-file": "^1.4.6"
  2313 + "winston-daily-rotate-file": "^3.10.0"
2326 2314 }
2327 2315 },
2328 2316 "lcid": {
... ... @@ -3324,61 +3312,6 @@
3324 3312 }
3325 3313 }
3326 3314 },
3327   - "sort-asc": {
3328   - "version": "0.2.0",
3329   - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz",
3330   - "integrity": "sha1-AKSelHvCXVEL/eLLuN/9qfUOsvw="
3331   - },
3332   - "sort-desc": {
3333   - "version": "0.2.0",
3334   - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz",
3335   - "integrity": "sha1-KAwb2vxld4h87brR7S5BwDeXZkY="
3336   - },
3337   - "sort-object": {
3338   - "version": "3.0.2",
3339   - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.2.tgz",
3340   - "integrity": "sha1-2vK2k/YR990qIbgrgF5OrCMPdV4=",
3341   - "requires": {
3342   - "bytewise": "^1.1.0",
3343   - "get-value": "^2.0.2",
3344   - "is-extendable": "^0.1.1",
3345   - "sort-asc": "^0.2.0",
3346   - "sort-desc": "^0.2.0",
3347   - "union-value": "^0.2.3"
3348   - },
3349   - "dependencies": {
3350   - "extend-shallow": {
3351   - "version": "2.0.1",
3352   - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3353   - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3354   - "requires": {
3355   - "is-extendable": "^0.1.0"
3356   - }
3357   - },
3358   - "set-value": {
3359   - "version": "0.4.3",
3360   - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
3361   - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
3362   - "requires": {
3363   - "extend-shallow": "^2.0.1",
3364   - "is-extendable": "^0.1.1",
3365   - "is-plain-object": "^2.0.1",
3366   - "to-object-path": "^0.3.0"
3367   - }
3368   - },
3369   - "union-value": {
3370   - "version": "0.2.4",
3371   - "resolved": "https://registry.npmjs.org/union-value/-/union-value-0.2.4.tgz",
3372   - "integrity": "sha1-c3UVJ4ZnkFfns3qmdug0aPwCdPA=",
3373   - "requires": {
3374   - "arr-union": "^3.1.0",
3375   - "get-value": "^2.0.6",
3376   - "is-extendable": "^0.1.1",
3377   - "set-value": "^0.4.3"
3378   - }
3379   - }
3380   - }
3381   - },
3382 3315 "source-map": {
3383 3316 "version": "0.5.7",
3384 3317 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
... ... @@ -3559,6 +3492,10 @@
3559 3492 }
3560 3493 }
3561 3494 },
  3495 + "tektrans-lib": {
  3496 + "version": "git+https://github.com/tektrans/tektrans-lib.git#fa043c81e72e10ee1232e1273fd1297c3d50a88d",
  3497 + "from": "git+https://github.com/tektrans/tektrans-lib.git"
  3498 + },
3562 3499 "text-table": {
3563 3500 "version": "0.2.0",
3564 3501 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
... ... @@ -3584,6 +3521,7 @@
3584 3521 "version": "0.3.0",
3585 3522 "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
3586 3523 "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
  3524 + "optional": true,
3587 3525 "requires": {
3588 3526 "kind-of": "^3.0.2"
3589 3527 },
... ... @@ -3592,6 +3530,7 @@
3592 3530 "version": "3.2.2",
3593 3531 "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
3594 3532 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
  3533 + "optional": true,
3595 3534 "requires": {
3596 3535 "is-buffer": "^1.1.5"
3597 3536 }
... ... @@ -3678,19 +3617,6 @@
3678 3617 "mime-types": "~2.1.24"
3679 3618 }
3680 3619 },
3681   - "typewise": {
3682   - "version": "1.0.3",
3683   - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz",
3684   - "integrity": "sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=",
3685   - "requires": {
3686   - "typewise-core": "^1.2.0"
3687   - }
3688   - },
3689   - "typewise-core": {
3690   - "version": "1.2.0",
3691   - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz",
3692   - "integrity": "sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU="
3693   - },
3694 3620 "uid-safe": {
3695 3621 "version": "2.1.5",
3696 3622 "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
... ... @@ -24,6 +24,7 @@
24 24 "should": "^13.2.3"
25 25 },
26 26 "dependencies": {
27   - "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git"
  27 + "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
  28 + "tektrans-lib": "git+https://github.com/tektrans/tektrans-lib.git"
28 29 }
29 30 }
... ... @@ -105,6 +105,38 @@ describe('#irs', function() {
105 105 irs.getDetailFromMessage('REFF#561744 CEK TAGIHAN PLN25 SUKSES IDPEL:172000147469 Detail: NAMA:MASJID-NURUL-IMAN/DAYA:900/TARIF:S2/JMLBLN:1BLN/PERIODE:201912/METERKINI:19627/METERLALU:19428/TAGIHAN:79340/ADM:2500/DENDA:0/TOTALTAGIHAN:81840 Sisa Saldo: 1.000.000 - 0 = 1.000.000 @2019/12/20 19:41:21')
106 106 .should.equal('NAMA:MASJID-NURUL-IMAN/DAYA:900/TARIF:S2/JMLBLN:1BLN/PERIODE:201912/METERKINI:19627/METERLALU:19428/TAGIHAN:79340/ADM:2500/DENDA:0/TOTALTAGIHAN:81840');
107 107 });
  108 +
  109 + it('should return correct result with custom pattern', () => {
  110 + irs.getDetailFromMessage(
  111 + 'Cek Tagihan PLN SUKSES ke 520550410074, REFID: 520550410074/MASJID.. KATEGORI:S2/900 , PERIODE:092020, JUMLAH:1, TOTAL TAGIHAN : 72.010',
  112 + {
  113 + pattern: '(REFID: .*)$',
  114 + match_idx: 1,
  115 + },
  116 + [
  117 + {
  118 + pattern: ' *\\.\\.+ *',
  119 + replacement: '/',
  120 + flags: 'g',
  121 + },
  122 + {
  123 + pattern: ' *, *',
  124 + replacement: '/',
  125 + flags: 'g',
  126 + },
  127 + {
  128 + pattern: ' *: *',
  129 + replacement: ':',
  130 + flags: 'g',
  131 + },
  132 + {
  133 + pattern: 'TOTAL TAGIHAN*',
  134 + replacement: 'TOTALTAGIHAN',
  135 + },
  136 + ]
  137 + )
  138 + .should.equal('REFID:520550410074/MASJID/KATEGORI:S2/900/PERIODE:092020/JUMLAH:1/TOTALTAGIHAN:72.010', 'TAJIRA PLN POSTPAID');
  139 + });
108 140 });
109 141  
110 142 describe('#splitPostpaidDetail', () => {