@classytic/payroll 1.0.1 → 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.

Potentially problematic release.


This version of @classytic/payroll might be problematic. Click here for more details.

Files changed (46) 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 +61 -25
  24. package/payroll.d.ts +0 -241
  25. package/src/config.js +0 -177
  26. package/src/core/compensation.manager.js +0 -242
  27. package/src/core/employment.manager.js +0 -224
  28. package/src/core/payroll.manager.js +0 -499
  29. package/src/enums.js +0 -141
  30. package/src/factories/compensation.factory.js +0 -198
  31. package/src/factories/employee.factory.js +0 -173
  32. package/src/factories/payroll.factory.js +0 -247
  33. package/src/hrm.orchestrator.js +0 -139
  34. package/src/index.js +0 -172
  35. package/src/init.js +0 -41
  36. package/src/models/payroll-record.model.js +0 -126
  37. package/src/plugins/employee.plugin.js +0 -157
  38. package/src/schemas/employment.schema.js +0 -126
  39. package/src/services/compensation.service.js +0 -231
  40. package/src/services/employee.service.js +0 -162
  41. package/src/services/payroll.service.js +0 -213
  42. package/src/utils/calculation.utils.js +0 -91
  43. package/src/utils/date.utils.js +0 -120
  44. package/src/utils/logger.js +0 -36
  45. package/src/utils/query-builders.js +0 -185
  46. 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 };