@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.
Files changed (68) hide show
  1. package/README.md +168 -489
  2. package/dist/core/index.d.ts +480 -0
  3. package/dist/core/index.js +971 -0
  4. package/dist/core/index.js.map +1 -0
  5. package/dist/index-CTjHlCzz.d.ts +721 -0
  6. package/dist/index.d.ts +967 -0
  7. package/dist/index.js +4352 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/payroll.d.ts +233 -0
  10. package/dist/payroll.js +2103 -0
  11. package/dist/payroll.js.map +1 -0
  12. package/dist/plugin-D9mOr3_d.d.ts +333 -0
  13. package/dist/schemas/index.d.ts +2869 -0
  14. package/dist/schemas/index.js +440 -0
  15. package/dist/schemas/index.js.map +1 -0
  16. package/dist/services/index.d.ts +3 -0
  17. package/dist/services/index.js +1696 -0
  18. package/dist/services/index.js.map +1 -0
  19. package/dist/types-BSYyX2KJ.d.ts +671 -0
  20. package/dist/utils/index.d.ts +873 -0
  21. package/dist/utils/index.js +1046 -0
  22. package/dist/utils/index.js.map +1 -0
  23. package/package.json +54 -37
  24. package/dist/types/config.d.ts +0 -162
  25. package/dist/types/core/compensation.manager.d.ts +0 -54
  26. package/dist/types/core/employment.manager.d.ts +0 -49
  27. package/dist/types/core/payroll.manager.d.ts +0 -60
  28. package/dist/types/enums.d.ts +0 -117
  29. package/dist/types/factories/compensation.factory.d.ts +0 -196
  30. package/dist/types/factories/employee.factory.d.ts +0 -149
  31. package/dist/types/factories/payroll.factory.d.ts +0 -319
  32. package/dist/types/hrm.orchestrator.d.ts +0 -47
  33. package/dist/types/index.d.ts +0 -20
  34. package/dist/types/init.d.ts +0 -30
  35. package/dist/types/models/payroll-record.model.d.ts +0 -3
  36. package/dist/types/plugins/employee.plugin.d.ts +0 -2
  37. package/dist/types/schemas/employment.schema.d.ts +0 -959
  38. package/dist/types/services/compensation.service.d.ts +0 -94
  39. package/dist/types/services/employee.service.d.ts +0 -28
  40. package/dist/types/services/payroll.service.d.ts +0 -30
  41. package/dist/types/utils/calculation.utils.d.ts +0 -26
  42. package/dist/types/utils/date.utils.d.ts +0 -35
  43. package/dist/types/utils/logger.d.ts +0 -12
  44. package/dist/types/utils/query-builders.d.ts +0 -83
  45. package/dist/types/utils/validation.utils.d.ts +0 -33
  46. package/payroll.d.ts +0 -241
  47. package/src/config.js +0 -177
  48. package/src/core/compensation.manager.js +0 -242
  49. package/src/core/employment.manager.js +0 -224
  50. package/src/core/payroll.manager.js +0 -499
  51. package/src/enums.js +0 -141
  52. package/src/factories/compensation.factory.js +0 -198
  53. package/src/factories/employee.factory.js +0 -173
  54. package/src/factories/payroll.factory.js +0 -413
  55. package/src/hrm.orchestrator.js +0 -139
  56. package/src/index.js +0 -172
  57. package/src/init.js +0 -62
  58. package/src/models/payroll-record.model.js +0 -126
  59. package/src/plugins/employee.plugin.js +0 -164
  60. package/src/schemas/employment.schema.js +0 -126
  61. package/src/services/compensation.service.js +0 -231
  62. package/src/services/employee.service.js +0 -162
  63. package/src/services/payroll.service.js +0 -213
  64. package/src/utils/calculation.utils.js +0 -91
  65. package/src/utils/date.utils.js +0 -120
  66. package/src/utils/logger.js +0 -36
  67. package/src/utils/query-builders.js +0 -185
  68. 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 };