@classytic/payroll 1.0.2 → 2.0.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 +168 -489
- package/dist/core/index.d.ts +480 -0
- package/dist/core/index.js +971 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index-CTjHlCzz.d.ts +721 -0
- package/dist/index.d.ts +967 -0
- package/dist/index.js +4352 -0
- package/dist/index.js.map +1 -0
- package/dist/payroll.d.ts +233 -0
- package/dist/payroll.js +2103 -0
- package/dist/payroll.js.map +1 -0
- package/dist/plugin-D9mOr3_d.d.ts +333 -0
- package/dist/schemas/index.d.ts +2869 -0
- package/dist/schemas/index.js +440 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.js +1696 -0
- package/dist/services/index.js.map +1 -0
- package/dist/types-BSYyX2KJ.d.ts +671 -0
- package/dist/utils/index.d.ts +873 -0
- package/dist/utils/index.js +1046 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +54 -37
- package/dist/types/config.d.ts +0 -162
- package/dist/types/core/compensation.manager.d.ts +0 -54
- package/dist/types/core/employment.manager.d.ts +0 -49
- package/dist/types/core/payroll.manager.d.ts +0 -60
- package/dist/types/enums.d.ts +0 -117
- package/dist/types/factories/compensation.factory.d.ts +0 -196
- package/dist/types/factories/employee.factory.d.ts +0 -149
- package/dist/types/factories/payroll.factory.d.ts +0 -319
- package/dist/types/hrm.orchestrator.d.ts +0 -47
- package/dist/types/index.d.ts +0 -20
- package/dist/types/init.d.ts +0 -30
- package/dist/types/models/payroll-record.model.d.ts +0 -3
- package/dist/types/plugins/employee.plugin.d.ts +0 -2
- package/dist/types/schemas/employment.schema.d.ts +0 -959
- package/dist/types/services/compensation.service.d.ts +0 -94
- package/dist/types/services/employee.service.d.ts +0 -28
- package/dist/types/services/payroll.service.d.ts +0 -30
- package/dist/types/utils/calculation.utils.d.ts +0 -26
- package/dist/types/utils/date.utils.d.ts +0 -35
- package/dist/types/utils/logger.d.ts +0 -12
- package/dist/types/utils/query-builders.d.ts +0 -83
- package/dist/types/utils/validation.utils.d.ts +0 -33
- package/payroll.d.ts +0 -241
- package/src/config.js +0 -177
- package/src/core/compensation.manager.js +0 -242
- package/src/core/employment.manager.js +0 -224
- package/src/core/payroll.manager.js +0 -499
- package/src/enums.js +0 -141
- package/src/factories/compensation.factory.js +0 -198
- package/src/factories/employee.factory.js +0 -173
- package/src/factories/payroll.factory.js +0 -413
- package/src/hrm.orchestrator.js +0 -139
- package/src/index.js +0 -172
- package/src/init.js +0 -62
- package/src/models/payroll-record.model.js +0 -126
- package/src/plugins/employee.plugin.js +0 -164
- package/src/schemas/employment.schema.js +0 -126
- package/src/services/compensation.service.js +0 -231
- package/src/services/employee.service.js +0 -162
- package/src/services/payroll.service.js +0 -213
- package/src/utils/calculation.utils.js +0 -91
- package/src/utils/date.utils.js +0 -120
- package/src/utils/logger.js +0 -36
- package/src/utils/query-builders.js +0 -185
- package/src/utils/validation.utils.js +0 -122
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { p as ObjectId, q as OperationContext, r as PayrollInstance } from './types-BSYyX2KJ.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @classytic/payroll - Event System
|
|
5
|
+
*
|
|
6
|
+
* Type-safe event emitter for payroll lifecycle events
|
|
7
|
+
* Enables loose coupling and extensibility
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
interface EmployeeHiredEventPayload {
|
|
11
|
+
employee: {
|
|
12
|
+
id: ObjectId;
|
|
13
|
+
employeeId: string;
|
|
14
|
+
position: string;
|
|
15
|
+
department?: string;
|
|
16
|
+
};
|
|
17
|
+
organizationId: ObjectId;
|
|
18
|
+
context?: OperationContext;
|
|
19
|
+
}
|
|
20
|
+
interface EmployeeTerminatedEventPayload {
|
|
21
|
+
employee: {
|
|
22
|
+
id: ObjectId;
|
|
23
|
+
employeeId: string;
|
|
24
|
+
name?: string;
|
|
25
|
+
};
|
|
26
|
+
terminationDate: Date;
|
|
27
|
+
reason?: string;
|
|
28
|
+
organizationId: ObjectId;
|
|
29
|
+
context?: OperationContext;
|
|
30
|
+
}
|
|
31
|
+
interface EmployeeRehiredEventPayload {
|
|
32
|
+
employee: {
|
|
33
|
+
id: ObjectId;
|
|
34
|
+
employeeId: string;
|
|
35
|
+
position: string;
|
|
36
|
+
};
|
|
37
|
+
previousTerminationDate?: Date;
|
|
38
|
+
organizationId: ObjectId;
|
|
39
|
+
context?: OperationContext;
|
|
40
|
+
}
|
|
41
|
+
interface SalaryUpdatedEventPayload {
|
|
42
|
+
employee: {
|
|
43
|
+
id: ObjectId;
|
|
44
|
+
employeeId: string;
|
|
45
|
+
};
|
|
46
|
+
previousSalary: number;
|
|
47
|
+
newSalary: number;
|
|
48
|
+
effectiveFrom: Date;
|
|
49
|
+
organizationId: ObjectId;
|
|
50
|
+
context?: OperationContext;
|
|
51
|
+
}
|
|
52
|
+
interface SalaryProcessedEventPayload {
|
|
53
|
+
employee: {
|
|
54
|
+
id: ObjectId;
|
|
55
|
+
employeeId: string;
|
|
56
|
+
name?: string;
|
|
57
|
+
};
|
|
58
|
+
payroll: {
|
|
59
|
+
id: ObjectId;
|
|
60
|
+
period: {
|
|
61
|
+
month: number;
|
|
62
|
+
year: number;
|
|
63
|
+
};
|
|
64
|
+
grossAmount: number;
|
|
65
|
+
netAmount: number;
|
|
66
|
+
};
|
|
67
|
+
transactionId: ObjectId;
|
|
68
|
+
organizationId: ObjectId;
|
|
69
|
+
context?: OperationContext;
|
|
70
|
+
}
|
|
71
|
+
interface SalaryFailedEventPayload {
|
|
72
|
+
employee: {
|
|
73
|
+
id: ObjectId;
|
|
74
|
+
employeeId: string;
|
|
75
|
+
};
|
|
76
|
+
period: {
|
|
77
|
+
month: number;
|
|
78
|
+
year: number;
|
|
79
|
+
};
|
|
80
|
+
error: string;
|
|
81
|
+
organizationId: ObjectId;
|
|
82
|
+
context?: OperationContext;
|
|
83
|
+
}
|
|
84
|
+
interface PayrollCompletedEventPayload {
|
|
85
|
+
organizationId: ObjectId;
|
|
86
|
+
period: {
|
|
87
|
+
month: number;
|
|
88
|
+
year: number;
|
|
89
|
+
};
|
|
90
|
+
summary: {
|
|
91
|
+
total: number;
|
|
92
|
+
successful: number;
|
|
93
|
+
failed: number;
|
|
94
|
+
totalAmount: number;
|
|
95
|
+
};
|
|
96
|
+
context?: OperationContext;
|
|
97
|
+
}
|
|
98
|
+
interface PayrollExportedEventPayload {
|
|
99
|
+
organizationId: ObjectId;
|
|
100
|
+
dateRange: {
|
|
101
|
+
start: Date;
|
|
102
|
+
end: Date;
|
|
103
|
+
};
|
|
104
|
+
recordCount: number;
|
|
105
|
+
format: string;
|
|
106
|
+
context?: OperationContext;
|
|
107
|
+
}
|
|
108
|
+
interface CompensationChangedEventPayload {
|
|
109
|
+
employee: {
|
|
110
|
+
id: ObjectId;
|
|
111
|
+
employeeId: string;
|
|
112
|
+
};
|
|
113
|
+
changeType: 'allowance_added' | 'allowance_removed' | 'deduction_added' | 'deduction_removed';
|
|
114
|
+
details: {
|
|
115
|
+
type: string;
|
|
116
|
+
amount: number;
|
|
117
|
+
};
|
|
118
|
+
organizationId: ObjectId;
|
|
119
|
+
context?: OperationContext;
|
|
120
|
+
}
|
|
121
|
+
interface MilestoneAchievedEventPayload {
|
|
122
|
+
employee: {
|
|
123
|
+
id: ObjectId;
|
|
124
|
+
employeeId: string;
|
|
125
|
+
name?: string;
|
|
126
|
+
};
|
|
127
|
+
milestone: {
|
|
128
|
+
type: 'tenure' | 'salary' | 'payments';
|
|
129
|
+
value: number;
|
|
130
|
+
message: string;
|
|
131
|
+
};
|
|
132
|
+
organizationId: ObjectId;
|
|
133
|
+
}
|
|
134
|
+
interface PayrollEventMap {
|
|
135
|
+
'employee:hired': EmployeeHiredEventPayload;
|
|
136
|
+
'employee:terminated': EmployeeTerminatedEventPayload;
|
|
137
|
+
'employee:rehired': EmployeeRehiredEventPayload;
|
|
138
|
+
'salary:updated': SalaryUpdatedEventPayload;
|
|
139
|
+
'salary:processed': SalaryProcessedEventPayload;
|
|
140
|
+
'salary:failed': SalaryFailedEventPayload;
|
|
141
|
+
'payroll:completed': PayrollCompletedEventPayload;
|
|
142
|
+
'payroll:exported': PayrollExportedEventPayload;
|
|
143
|
+
'compensation:changed': CompensationChangedEventPayload;
|
|
144
|
+
'milestone:achieved': MilestoneAchievedEventPayload;
|
|
145
|
+
}
|
|
146
|
+
type PayrollEventType = keyof PayrollEventMap;
|
|
147
|
+
type EventHandler<T> = (payload: T) => void | Promise<void>;
|
|
148
|
+
type PayrollEventHandler<K extends PayrollEventType> = EventHandler<PayrollEventMap[K]>;
|
|
149
|
+
declare class EventBus {
|
|
150
|
+
private handlers;
|
|
151
|
+
/**
|
|
152
|
+
* Register an event handler
|
|
153
|
+
*/
|
|
154
|
+
on<K extends PayrollEventType>(event: K, handler: PayrollEventHandler<K>): () => void;
|
|
155
|
+
/**
|
|
156
|
+
* Register a one-time event handler
|
|
157
|
+
*/
|
|
158
|
+
once<K extends PayrollEventType>(event: K, handler: PayrollEventHandler<K>): () => void;
|
|
159
|
+
/**
|
|
160
|
+
* Remove an event handler
|
|
161
|
+
*/
|
|
162
|
+
off<K extends PayrollEventType>(event: K, handler: PayrollEventHandler<K>): void;
|
|
163
|
+
/**
|
|
164
|
+
* Emit an event
|
|
165
|
+
*/
|
|
166
|
+
emit<K extends PayrollEventType>(event: K, payload: PayrollEventMap[K]): Promise<void>;
|
|
167
|
+
/**
|
|
168
|
+
* Emit event synchronously (fire-and-forget)
|
|
169
|
+
*/
|
|
170
|
+
emitSync<K extends PayrollEventType>(event: K, payload: PayrollEventMap[K]): void;
|
|
171
|
+
/**
|
|
172
|
+
* Remove all handlers for an event
|
|
173
|
+
*/
|
|
174
|
+
removeAllListeners(event?: PayrollEventType): void;
|
|
175
|
+
/**
|
|
176
|
+
* Get listener count for an event
|
|
177
|
+
*/
|
|
178
|
+
listenerCount(event: PayrollEventType): number;
|
|
179
|
+
/**
|
|
180
|
+
* Get all registered events
|
|
181
|
+
*/
|
|
182
|
+
eventNames(): PayrollEventType[];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get or create the default event bus
|
|
186
|
+
*/
|
|
187
|
+
declare function getEventBus(): EventBus;
|
|
188
|
+
/**
|
|
189
|
+
* Create a new event bus instance
|
|
190
|
+
*/
|
|
191
|
+
declare function createEventBus(): EventBus;
|
|
192
|
+
/**
|
|
193
|
+
* Reset the default event bus (for testing)
|
|
194
|
+
*/
|
|
195
|
+
declare function resetEventBus(): void;
|
|
196
|
+
/**
|
|
197
|
+
* Subscribe to employee hired events
|
|
198
|
+
*/
|
|
199
|
+
declare function onEmployeeHired(handler: PayrollEventHandler<'employee:hired'>): () => void;
|
|
200
|
+
/**
|
|
201
|
+
* Subscribe to salary processed events
|
|
202
|
+
*/
|
|
203
|
+
declare function onSalaryProcessed(handler: PayrollEventHandler<'salary:processed'>): () => void;
|
|
204
|
+
/**
|
|
205
|
+
* Subscribe to payroll completed events
|
|
206
|
+
*/
|
|
207
|
+
declare function onPayrollCompleted(handler: PayrollEventHandler<'payroll:completed'>): () => void;
|
|
208
|
+
/**
|
|
209
|
+
* Subscribe to milestone achieved events
|
|
210
|
+
*/
|
|
211
|
+
declare function onMilestoneAchieved(handler: PayrollEventHandler<'milestone:achieved'>): () => void;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* @classytic/payroll - Plugin System
|
|
215
|
+
*
|
|
216
|
+
* Extensible plugin architecture for customization
|
|
217
|
+
* Follows patterns from popular libraries like Mongoose, Fastify
|
|
218
|
+
*/
|
|
219
|
+
|
|
220
|
+
interface PluginContext {
|
|
221
|
+
/** Payroll instance */
|
|
222
|
+
payroll: PayrollInstance;
|
|
223
|
+
/** Event bus for subscribing to events */
|
|
224
|
+
events: EventBus;
|
|
225
|
+
/** Logger instance */
|
|
226
|
+
logger: PluginLogger;
|
|
227
|
+
/** Configuration getter */
|
|
228
|
+
getConfig: <T>(key: string) => T | undefined;
|
|
229
|
+
/** Register a hook */
|
|
230
|
+
addHook: <K extends PayrollEventType>(event: K, handler: (payload: PayrollEventMap[K]) => void | Promise<void>) => () => void;
|
|
231
|
+
}
|
|
232
|
+
interface PluginLogger {
|
|
233
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
234
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
235
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
236
|
+
debug(message: string, meta?: Record<string, unknown>): void;
|
|
237
|
+
}
|
|
238
|
+
interface PluginHooks {
|
|
239
|
+
/** Called before employee is hired */
|
|
240
|
+
beforeHire?: (params: unknown) => void | Promise<void>;
|
|
241
|
+
/** Called after employee is hired */
|
|
242
|
+
afterHire?: (employee: unknown) => void | Promise<void>;
|
|
243
|
+
/** Called before salary is processed */
|
|
244
|
+
beforeProcessSalary?: (params: unknown) => void | Promise<void>;
|
|
245
|
+
/** Called after salary is processed */
|
|
246
|
+
afterProcessSalary?: (result: unknown) => void | Promise<void>;
|
|
247
|
+
/** Called before termination */
|
|
248
|
+
beforeTerminate?: (params: unknown) => void | Promise<void>;
|
|
249
|
+
/** Called after termination */
|
|
250
|
+
afterTerminate?: (employee: unknown) => void | Promise<void>;
|
|
251
|
+
/** Called on any error */
|
|
252
|
+
onError?: (error: Error, context: string) => void | Promise<void>;
|
|
253
|
+
}
|
|
254
|
+
interface PayrollPluginDefinition {
|
|
255
|
+
name: string;
|
|
256
|
+
version?: string;
|
|
257
|
+
hooks?: PluginHooks;
|
|
258
|
+
init?: (context: PluginContext) => void | Promise<void>;
|
|
259
|
+
destroy?: () => void | Promise<void>;
|
|
260
|
+
}
|
|
261
|
+
declare class PluginManager {
|
|
262
|
+
private context;
|
|
263
|
+
private plugins;
|
|
264
|
+
private hooks;
|
|
265
|
+
constructor(context: PluginContext);
|
|
266
|
+
/**
|
|
267
|
+
* Register a plugin
|
|
268
|
+
*/
|
|
269
|
+
register(plugin: PayrollPluginDefinition): Promise<void>;
|
|
270
|
+
/**
|
|
271
|
+
* Unregister a plugin
|
|
272
|
+
*/
|
|
273
|
+
unregister(name: string): Promise<void>;
|
|
274
|
+
/**
|
|
275
|
+
* Add a hook handler
|
|
276
|
+
*/
|
|
277
|
+
private addHook;
|
|
278
|
+
/**
|
|
279
|
+
* Execute hooks for a given event
|
|
280
|
+
*/
|
|
281
|
+
executeHooks<K extends keyof PluginHooks>(hookName: K, ...args: Parameters<NonNullable<PluginHooks[K]>>): Promise<void>;
|
|
282
|
+
/**
|
|
283
|
+
* Get registered plugin names
|
|
284
|
+
*/
|
|
285
|
+
getPluginNames(): string[];
|
|
286
|
+
/**
|
|
287
|
+
* Check if plugin is registered
|
|
288
|
+
*/
|
|
289
|
+
hasPlugin(name: string): boolean;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Define a plugin with type safety
|
|
293
|
+
*/
|
|
294
|
+
declare function definePlugin(definition: PayrollPluginDefinition): PayrollPluginDefinition;
|
|
295
|
+
/**
|
|
296
|
+
* Logging plugin - logs all payroll events
|
|
297
|
+
*/
|
|
298
|
+
declare const loggingPlugin: PayrollPluginDefinition;
|
|
299
|
+
/**
|
|
300
|
+
* Metrics plugin - collects payroll metrics
|
|
301
|
+
*/
|
|
302
|
+
declare const metricsPlugin: PayrollPluginDefinition;
|
|
303
|
+
/**
|
|
304
|
+
* Notification plugin - sends notifications for events
|
|
305
|
+
*/
|
|
306
|
+
interface NotificationPluginOptions {
|
|
307
|
+
onHired?: (employee: {
|
|
308
|
+
id: unknown;
|
|
309
|
+
name?: string;
|
|
310
|
+
}) => void | Promise<void>;
|
|
311
|
+
onTerminated?: (employee: {
|
|
312
|
+
id: unknown;
|
|
313
|
+
name?: string;
|
|
314
|
+
}) => void | Promise<void>;
|
|
315
|
+
onSalaryProcessed?: (details: {
|
|
316
|
+
employee: {
|
|
317
|
+
id: unknown;
|
|
318
|
+
name?: string;
|
|
319
|
+
};
|
|
320
|
+
amount: number;
|
|
321
|
+
}) => void | Promise<void>;
|
|
322
|
+
onMilestone?: (details: {
|
|
323
|
+
employee: {
|
|
324
|
+
id: unknown;
|
|
325
|
+
name?: string;
|
|
326
|
+
};
|
|
327
|
+
milestone: string;
|
|
328
|
+
}) => void | Promise<void>;
|
|
329
|
+
}
|
|
330
|
+
declare function createNotificationPlugin(options: NotificationPluginOptions): PayrollPluginDefinition;
|
|
331
|
+
declare const notificationPlugin: PayrollPluginDefinition;
|
|
332
|
+
|
|
333
|
+
export { type CompensationChangedEventPayload as C, EventBus as E, type MilestoneAchievedEventPayload as M, type NotificationPluginOptions as N, type PayrollPluginDefinition as P, type SalaryUpdatedEventPayload as S, type PayrollEventMap as a, PluginManager as b, createEventBus as c, type PluginContext as d, onSalaryProcessed as e, onPayrollCompleted as f, getEventBus as g, onMilestoneAchieved as h, type PayrollEventType as i, type PayrollEventHandler as j, type EmployeeHiredEventPayload as k, type EmployeeTerminatedEventPayload as l, type EmployeeRehiredEventPayload as m, type SalaryProcessedEventPayload as n, onEmployeeHired as o, type SalaryFailedEventPayload as p, type PayrollCompletedEventPayload as q, resetEventBus as r, type PayrollExportedEventPayload as s, definePlugin as t, loggingPlugin as u, metricsPlugin as v, notificationPlugin as w, createNotificationPlugin as x, type PluginLogger as y, type PluginHooks as z };
|