formula-parser-payroll 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +202 -0
- package/dist/database/database-connector.d.ts +60 -0
- package/dist/database/database-connector.d.ts.map +1 -0
- package/dist/database/database-connector.js +9 -0
- package/dist/database/database-connector.js.map +1 -0
- package/dist/database/helpers.d.ts +44 -0
- package/dist/database/helpers.d.ts.map +1 -0
- package/dist/database/helpers.js +120 -0
- package/dist/database/helpers.js.map +1 -0
- package/dist/database/index.d.ts +11 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +29 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/payroll-formula.service.d.ts +118 -0
- package/dist/database/payroll-formula.service.d.ts.map +1 -0
- package/dist/database/payroll-formula.service.js +794 -0
- package/dist/database/payroll-formula.service.js.map +1 -0
- package/dist/database/types.d.ts +117 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +9 -0
- package/dist/database/types.js.map +1 -0
- package/dist/formula-engine.d.ts +18 -0
- package/dist/formula-engine.d.ts.map +1 -0
- package/dist/formula-engine.js +356 -0
- package/dist/formula-engine.js.map +1 -0
- package/dist/formula-parser.d.ts +60 -0
- package/dist/formula-parser.d.ts.map +1 -0
- package/dist/formula-parser.js +366 -0
- package/dist/formula-parser.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/nestjs/database-connector.d.ts +60 -0
- package/dist/nestjs/database-connector.d.ts.map +1 -0
- package/dist/nestjs/database-connector.js +9 -0
- package/dist/nestjs/database-connector.js.map +1 -0
- package/dist/nestjs/helpers.d.ts +44 -0
- package/dist/nestjs/helpers.d.ts.map +1 -0
- package/dist/nestjs/helpers.js +120 -0
- package/dist/nestjs/helpers.js.map +1 -0
- package/dist/nestjs/index.d.ts +11 -0
- package/dist/nestjs/index.d.ts.map +1 -0
- package/dist/nestjs/index.js +29 -0
- package/dist/nestjs/index.js.map +1 -0
- package/dist/nestjs/payroll-formula.service.d.ts +91 -0
- package/dist/nestjs/payroll-formula.service.d.ts.map +1 -0
- package/dist/nestjs/payroll-formula.service.js +640 -0
- package/dist/nestjs/payroll-formula.service.js.map +1 -0
- package/dist/nestjs/types.d.ts +117 -0
- package/dist/nestjs/types.d.ts.map +1 -0
- package/dist/nestjs/types.js +9 -0
- package/dist/nestjs/types.js.map +1 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NestJS Module Helpers for Payroll Formula Parser
|
|
4
|
+
*
|
|
5
|
+
* Helper functions for database operations and data processing.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.getCurrencyCode = getCurrencyCode;
|
|
9
|
+
exports.decryptValue = decryptValue;
|
|
10
|
+
exports.needsPositionData = needsPositionData;
|
|
11
|
+
exports.needsCostCenterData = needsCostCenterData;
|
|
12
|
+
exports.needsGradeData = needsGradeData;
|
|
13
|
+
exports.needsWorkLocationData = needsWorkLocationData;
|
|
14
|
+
exports.needsCustomFieldData = needsCustomFieldData;
|
|
15
|
+
exports.formatNameForFormula = formatNameForFormula;
|
|
16
|
+
exports.convertAuthToFormulaContext = convertAuthToFormulaContext;
|
|
17
|
+
/**
|
|
18
|
+
* Get currency code based on tax country
|
|
19
|
+
*/
|
|
20
|
+
function getCurrencyCode(taxCountry) {
|
|
21
|
+
switch (taxCountry) {
|
|
22
|
+
case 'TH': return 'THB';
|
|
23
|
+
case 'PH': return 'PHP';
|
|
24
|
+
case 'MY': return 'MYR';
|
|
25
|
+
default: return 'IDR';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Decrypt a value using database function
|
|
30
|
+
*/
|
|
31
|
+
async function decryptValue(value, auth, empId) {
|
|
32
|
+
try {
|
|
33
|
+
const q = `SELECT SF2356896('${value}',
|
|
34
|
+
'${auth.accessToken.confParse.PNUMBER}',
|
|
35
|
+
'${auth.accessToken.confParse.LNUMBER}',
|
|
36
|
+
'${empId}') AS result`;
|
|
37
|
+
const result = await auth.connFin.query(q);
|
|
38
|
+
if (result.length > 0) {
|
|
39
|
+
return result[0].result;
|
|
40
|
+
}
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if position-related data is needed
|
|
49
|
+
*/
|
|
50
|
+
function needsPositionData(words) {
|
|
51
|
+
return words.has('DEPTNAME') ||
|
|
52
|
+
words.has('POSITIONNAME') ||
|
|
53
|
+
words.has('POSITIONCODE') ||
|
|
54
|
+
words.has('DEPTCODE');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if cost center data is needed
|
|
58
|
+
*/
|
|
59
|
+
function needsCostCenterData(words) {
|
|
60
|
+
return words.has('COSTCENTER') || words.has('COSTCENTERCODE');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if grade data is needed
|
|
64
|
+
*/
|
|
65
|
+
function needsGradeData(words) {
|
|
66
|
+
return words.has('GRADE') || words.has('GRDCODE');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if work location data is needed
|
|
70
|
+
*/
|
|
71
|
+
function needsWorkLocationData(words) {
|
|
72
|
+
return words.has('WORKLOCATION') || words.has('WORKLOCATIONCODE');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if custom field data is needed
|
|
76
|
+
*/
|
|
77
|
+
function needsCustomFieldData(words) {
|
|
78
|
+
for (let i = 1; i <= 10; i++) {
|
|
79
|
+
if (words.has(`CUSTOMFIELD${i}`))
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Format name for formula with proper case handling
|
|
86
|
+
*/
|
|
87
|
+
function formatNameForFormula(name, formula) {
|
|
88
|
+
if (!name)
|
|
89
|
+
return '""';
|
|
90
|
+
const upperName = name.replace(/ /g, '').toUpperCase();
|
|
91
|
+
const normalName = name;
|
|
92
|
+
const hasUpperInFormula = formula.includes(`"${upperName}"`) ||
|
|
93
|
+
formula.includes(`'${upperName}'`);
|
|
94
|
+
if (hasUpperInFormula) {
|
|
95
|
+
return `"${upperName}"`;
|
|
96
|
+
}
|
|
97
|
+
return `"${normalName}"`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Convert legacy AuthContext to new FormulaContext
|
|
101
|
+
* This helps with backward compatibility
|
|
102
|
+
*/
|
|
103
|
+
function convertAuthToFormulaContext(auth) {
|
|
104
|
+
return {
|
|
105
|
+
database: {
|
|
106
|
+
mainConnection: auth.conn,
|
|
107
|
+
financeConnection: auth.connFin,
|
|
108
|
+
},
|
|
109
|
+
company: {
|
|
110
|
+
companyId: auth.userData.companyId,
|
|
111
|
+
companyCode: auth.userData.companyCode || auth.userData.currentCompanyCode || '',
|
|
112
|
+
taxCountry: (auth.userData.taxCountry || 'ID'),
|
|
113
|
+
},
|
|
114
|
+
encryption: auth.accessToken?.confParse ? {
|
|
115
|
+
pNumber: auth.accessToken.confParse.PNUMBER,
|
|
116
|
+
lNumber: auth.accessToken.confParse.LNUMBER,
|
|
117
|
+
} : undefined,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/nestjs/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NestJS Module for Payroll Formula Parser
|
|
3
|
+
*
|
|
4
|
+
* This module provides database-integrated formula parsing.
|
|
5
|
+
* Works with any database client that implements the IDatabaseConnection interface.
|
|
6
|
+
*/
|
|
7
|
+
export * from './database-connector';
|
|
8
|
+
export * from './types';
|
|
9
|
+
export * from './helpers';
|
|
10
|
+
export { PayrollFormulaService } from './payroll-formula.service';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NestJS Module for Payroll Formula Parser
|
|
4
|
+
*
|
|
5
|
+
* This module provides database-integrated formula parsing.
|
|
6
|
+
* Works with any database client that implements the IDatabaseConnection interface.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.PayrollFormulaService = void 0;
|
|
24
|
+
__exportStar(require("./database-connector"), exports);
|
|
25
|
+
__exportStar(require("./types"), exports);
|
|
26
|
+
__exportStar(require("./helpers"), exports);
|
|
27
|
+
var payroll_formula_service_1 = require("./payroll-formula.service");
|
|
28
|
+
Object.defineProperty(exports, "PayrollFormulaService", { enumerable: true, get: function () { return payroll_formula_service_1.PayrollFormulaService; } });
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nestjs/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,uDAAqC;AACrC,0CAAwB;AACxB,4CAA0B;AAC1B,qEAAkE;AAAzD,gIAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NestJS Payroll Formula Parser Service
|
|
3
|
+
*
|
|
4
|
+
* This service provides database-integrated formula parsing.
|
|
5
|
+
* It fetches employee data and component values from the database
|
|
6
|
+
* and then uses the core formula parser.
|
|
7
|
+
*/
|
|
8
|
+
import { AuthContext, ParseByEmpIdInput, FormulaParseResultLegacy } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Payroll Formula Parser Service
|
|
11
|
+
*
|
|
12
|
+
* Use this service when you need to parse formulas with just formula and empId.
|
|
13
|
+
* This service handles fetching employee data and component values from the database.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const service = new PayrollFormulaService();
|
|
18
|
+
* const result = await service.parseByEmpId({
|
|
19
|
+
* formula: 'SALARY * 0.1 + AL_001',
|
|
20
|
+
* empId: 'EMP001',
|
|
21
|
+
* auth: authContext,
|
|
22
|
+
* });
|
|
23
|
+
* console.log(result.result);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class PayrollFormulaService {
|
|
27
|
+
/**
|
|
28
|
+
* Parse formula by employee ID(s)
|
|
29
|
+
* This method fetches all required data from database and evaluates the formula
|
|
30
|
+
*
|
|
31
|
+
* When listEmpId is provided: returns Record<empId, hasil>
|
|
32
|
+
* When empId is provided: returns FormulaParseResultLegacy
|
|
33
|
+
*/
|
|
34
|
+
parseByEmpId(input: ParseByEmpIdInput): Promise<FormulaParseResultLegacy | Record<string, number | string | boolean>>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a formula is valid
|
|
37
|
+
* This ports the logic from payroll-server's formulaValidtyCheck
|
|
38
|
+
*/
|
|
39
|
+
formulaValidityCheck(input: {
|
|
40
|
+
formula: string;
|
|
41
|
+
auth: AuthContext;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
result: string;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Parse formula for a single employee
|
|
47
|
+
* Internal method used by parseByEmpId
|
|
48
|
+
*/
|
|
49
|
+
private parseForSingleEmployee;
|
|
50
|
+
/**
|
|
51
|
+
* Parse formula for multiple employees
|
|
52
|
+
*/
|
|
53
|
+
parseForMultipleEmployees(formula: string, empIds: string[], auth: AuthContext): Promise<Record<string, FormulaParseResultLegacy>>;
|
|
54
|
+
/**
|
|
55
|
+
* Get list of component codes
|
|
56
|
+
*/
|
|
57
|
+
private getComponentList;
|
|
58
|
+
/**
|
|
59
|
+
* Get all components for company
|
|
60
|
+
*/
|
|
61
|
+
private getAllComponents;
|
|
62
|
+
/**
|
|
63
|
+
* Get employee component values
|
|
64
|
+
*/
|
|
65
|
+
private getEmployeeComponents;
|
|
66
|
+
/**
|
|
67
|
+
* Get employee data with relations
|
|
68
|
+
*/
|
|
69
|
+
private getEmployeeData;
|
|
70
|
+
/**
|
|
71
|
+
* Get reserved words list for formula processing
|
|
72
|
+
*/
|
|
73
|
+
private getReservedWords;
|
|
74
|
+
/**
|
|
75
|
+
* Extract required words from formula
|
|
76
|
+
*/
|
|
77
|
+
private extractRequiredWordsFromFormula;
|
|
78
|
+
/**
|
|
79
|
+
* Batch load all required data for formula parsing
|
|
80
|
+
*/
|
|
81
|
+
private batchLoadFormulaData;
|
|
82
|
+
/**
|
|
83
|
+
* Convert raw employee data to EmployeeData interface
|
|
84
|
+
*/
|
|
85
|
+
private convertToEmployeeData;
|
|
86
|
+
/**
|
|
87
|
+
* Convert cache to OrganizationalData interface
|
|
88
|
+
*/
|
|
89
|
+
private convertToOrganizationalData;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=payroll-formula.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payroll-formula.service.d.ts","sourceRoot":"","sources":["../../src/nestjs/payroll-formula.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EACL,WAAW,EACX,iBAAiB,EAGjB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAYjB;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,qBAAqB;IAEhC;;;;;;OAMG;IACG,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IA0B3H;;;OAGG;IACG,oBAAoB,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA0KtG;;;OAGG;YACW,sBAAsB;IAgKpC;;OAEG;IACG,yBAAyB,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAYpD;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;YACW,qBAAqB;IAqBnC;;OAEG;YACW,eAAe;IAkC7B;;OAEG;YACW,gBAAgB;IA0B9B;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAavC;;OAEG;YACW,oBAAoB;IAyHlC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,2BAA2B;CAepC"}
|