@goxtechnologies/connectwise-psa-mcp 1.2.0 → 1.3.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.
@@ -1,9 +1,36 @@
1
1
  import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { TimeEntry, ValidationViolation } from '../types/index.js';
2
3
  export declare const validationTools: Tool[];
4
+ export interface RuleConfig {
5
+ severity: 'reject' | 'warn';
6
+ enabled: boolean;
7
+ }
8
+ export declare const DEFAULT_RULES: Record<string, RuleConfig>;
9
+ export declare function resolveRuleConfig(overrides?: Record<string, string>): Record<string, RuleConfig>;
10
+ interface AccrualBalance {
11
+ accrualType?: {
12
+ name?: string;
13
+ };
14
+ availableHours?: number;
15
+ currentBalance?: number;
16
+ }
17
+ export interface TimeStats {
18
+ totalHours: number;
19
+ billableHours: number;
20
+ billablePercent: number;
21
+ internalHours: number;
22
+ internalPercent: number;
23
+ customerNonBillHours: number;
24
+ customerNonBillPercent: number;
25
+ chargeCodeBreakdown: Record<string, number>;
26
+ }
27
+ export declare function computeStats(entries: TimeEntry[]): TimeStats;
28
+ export declare function validateEntries(entries: TimeEntry[], roleCategory?: string, accrualBalances?: AccrualBalance[], ruleConfig?: Record<string, RuleConfig>): ValidationViolation[];
3
29
  export declare function handleValidationTool(toolName: string, args: Record<string, unknown>): Promise<{
4
30
  content: Array<{
5
31
  type: 'text';
6
32
  text: string;
7
33
  }>;
8
34
  }>;
35
+ export {};
9
36
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/tools/validation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAc1D,eAAO,MAAM,eAAe,EAAE,IAAI,EA0EjC,CAAC;AAuXF,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyJ7D"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/tools/validation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAK1D,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAoB,MAAM,mBAAmB,CAAC;AAS1F,eAAO,MAAM,eAAe,EAAE,IAAI,EAkGjC,CAAC;AA8CF,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAUpD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAgBhG;AA+FD,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,CA6B5D;AAMD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,EAAE,EACpB,YAAY,GAAE,MAAkB,EAChC,eAAe,GAAE,cAAc,EAAO,EACtC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GACtC,mBAAmB,EAAE,CA0VvB;AAcD,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAgO7D"}
@@ -15,9 +15,9 @@ const __dirname = dirname(__filename);
15
15
  export const validationTools = [
16
16
  {
17
17
  name: 'cw_validate_timesheets',
18
- description: 'Validate all time entries for a member within a date range against 8 business rules. ' +
18
+ description: 'Validate all time entries for a member within a date range against 9 business rules. ' +
19
19
  'Returns a list of violations tagged as either "reject" (must be corrected) or "warn" (advisory). ' +
20
- 'Rules: 5-minute rounding, deduction rounding, overlap detection, missing notes, department match, overtime flag, pause rules, and charge-code weekly limits.',
20
+ 'Rules: 5-minute rounding, deduction rounding, overlap detection, missing notes, department match, overtime flag, pause rules, charge-code weekly limits, and accrual balance.',
21
21
  inputSchema: {
22
22
  type: 'object',
23
23
  properties: {
@@ -33,6 +33,30 @@ export const validationTools = [
33
33
  type: 'string',
34
34
  description: 'Period end date in ISO format (YYYY-MM-DD)',
35
35
  },
36
+ rules: {
37
+ type: 'object',
38
+ description: 'Override rule config. Each rule: "reject", "warn", or "off".',
39
+ properties: {
40
+ five_min_rounding: { type: 'string', enum: ['reject', 'warn', 'off'] },
41
+ deduct_rounding: { type: 'string', enum: ['reject', 'warn', 'off'] },
42
+ overlap_detection: { type: 'string', enum: ['reject', 'warn', 'off'] },
43
+ missing_notes: { type: 'string', enum: ['reject', 'warn', 'off'] },
44
+ pause_rules: { type: 'string', enum: ['reject', 'warn', 'off'] },
45
+ charge_code_limits: { type: 'string', enum: ['reject', 'warn', 'off'] },
46
+ overtime_flag: { type: 'string', enum: ['reject', 'warn', 'off'] },
47
+ department_match: { type: 'string', enum: ['reject', 'warn', 'off'] },
48
+ accrual_balance: { type: 'string', enum: ['reject', 'warn', 'off'] },
49
+ },
50
+ },
51
+ format: {
52
+ type: 'string',
53
+ enum: ['markdown', 'structured'],
54
+ description: 'Output format. "structured" adds a JSON content block.',
55
+ },
56
+ include_stats: {
57
+ type: 'boolean',
58
+ description: 'Include time breakdown stats (billable/internal/customer split).',
59
+ },
36
60
  },
37
61
  required: ['member_identifier', 'start_date', 'end_date'],
38
62
  },
@@ -115,6 +139,36 @@ function toLocal(iso) {
115
139
  function round2(n) {
116
140
  return Math.round(n * 100) / 100;
117
141
  }
142
+ export const DEFAULT_RULES = {
143
+ five_min_rounding: { severity: 'reject', enabled: true },
144
+ deduct_rounding: { severity: 'reject', enabled: true },
145
+ overlap_detection: { severity: 'reject', enabled: true },
146
+ missing_notes: { severity: 'reject', enabled: true },
147
+ pause_rules: { severity: 'reject', enabled: true },
148
+ charge_code_limits: { severity: 'warn', enabled: true },
149
+ overtime_flag: { severity: 'warn', enabled: true },
150
+ department_match: { severity: 'warn', enabled: true },
151
+ accrual_balance: { severity: 'reject', enabled: true },
152
+ };
153
+ export function resolveRuleConfig(overrides) {
154
+ const config = {};
155
+ for (const [k, v] of Object.entries(DEFAULT_RULES)) {
156
+ config[k] = { ...v };
157
+ }
158
+ if (!overrides)
159
+ return config;
160
+ for (const [rule, setting] of Object.entries(overrides)) {
161
+ if (config[rule]) {
162
+ if (setting === 'off') {
163
+ config[rule] = { ...config[rule], enabled: false };
164
+ }
165
+ else {
166
+ config[rule] = { severity: setting, enabled: true };
167
+ }
168
+ }
169
+ }
170
+ return config;
171
+ }
118
172
  /** Parse an ISO datetime string and return local { hours, minutes }. */
119
173
  function parseHHMM(iso) {
120
174
  if (!iso)
@@ -138,9 +192,16 @@ function toDateKey(iso) {
138
192
  return `${y}-${m}-${d}`;
139
193
  }
140
194
  // ---------------------------------------------------------------------------
141
- // Allowed deduct values (15-second increments expressed as fractions of 1 hour)
195
+ // Allowed deduct values enumerated exact valid fractions of one hour
196
+ // (5-minute increments expressed as hour fractions: 0 to 55 min / 60)
142
197
  // ---------------------------------------------------------------------------
143
- const VALID_DEDUCTS = new Set([0, 0.08, 0.17, 0.25, 0.33, 0.42, 0.5, 0.58, 0.67, 0.75, 0.83, 0.92, 1.0]);
198
+ const VALID_DEDUCTS = new Set([0, 0.08, 0.17, 0.25, 0.33, 0.42, 0.5, 0.58, 0.67, 0.75, 0.83, 0.92]);
199
+ // Lunch window boundaries (local time, in minutes since midnight)
200
+ const LUNCH_START_MIN = 720; // 12:00
201
+ const LUNCH_END_MIN = 780; // 13:00
202
+ // Half-day boundaries
203
+ const AM_END_MIN = 720; // noon — entries with timeStart < this are AM
204
+ const PM_START_MIN = 780; // 13:00 — entries with timeStart >= this are PM
144
205
  let _chargeCodeRules = null;
145
206
  function getChargeCodeRules() {
146
207
  if (_chargeCodeRules)
@@ -171,10 +232,53 @@ function getChargeCodeLimit(codeName, roleCategory) {
171
232
  return rule.max_hours_regular; // null means no limit
172
233
  }
173
234
  // ---------------------------------------------------------------------------
174
- // 8-rule validation engine
235
+ // Accrual charge code mapping — maps charge code name to accrual type name
175
236
  // ---------------------------------------------------------------------------
176
- function validateEntries(entries, roleCategory = 'regular') {
237
+ const ACCRUAL_CHARGE_CODES = {
238
+ Vacation: 'Vacation',
239
+ Vacances: 'Vacation',
240
+ Sick: 'Sick',
241
+ Maladie: 'Sick',
242
+ PTO: 'PTO',
243
+ 'Journée Bonheur': 'PTO',
244
+ Holiday: 'Holiday',
245
+ Férié: 'Holiday',
246
+ };
247
+ export function computeStats(entries) {
248
+ let total = 0, billable = 0, internal = 0, customerNonBill = 0;
249
+ const byCode = {};
250
+ for (const e of entries) {
251
+ const hours = (e.actualHours ?? 0) - (e.hoursDeduct ?? 0);
252
+ total += hours;
253
+ const code = e.chargeCode?.name ?? 'Unknown';
254
+ byCode[code] = (byCode[code] ?? 0) + hours;
255
+ if (e.billableOption === 'Billable') {
256
+ billable += hours;
257
+ }
258
+ else if (e.company?.id) {
259
+ customerNonBill += hours;
260
+ }
261
+ else {
262
+ internal += hours;
263
+ }
264
+ }
265
+ return {
266
+ totalHours: round2(total),
267
+ billableHours: round2(billable),
268
+ billablePercent: total > 0 ? round2((billable / total) * 100) : 0,
269
+ internalHours: round2(internal),
270
+ internalPercent: total > 0 ? round2((internal / total) * 100) : 0,
271
+ customerNonBillHours: round2(customerNonBill),
272
+ customerNonBillPercent: total > 0 ? round2((customerNonBill / total) * 100) : 0,
273
+ chargeCodeBreakdown: byCode,
274
+ };
275
+ }
276
+ // ---------------------------------------------------------------------------
277
+ // 9-rule validation engine
278
+ // ---------------------------------------------------------------------------
279
+ export function validateEntries(entries, roleCategory = 'regular', accrualBalances = [], ruleConfig) {
177
280
  const violations = [];
281
+ const cfg = ruleConfig ?? DEFAULT_RULES;
178
282
  // Group by date for overlap and pause checks
179
283
  const byDate = new Map();
180
284
  for (const e of entries) {
@@ -195,50 +299,57 @@ function validateEntries(entries, roleCategory = 'regular') {
195
299
  // Per-entry rules
196
300
  // -------------------------------------------------------------------------
197
301
  for (const entry of entries) {
198
- // Rule 1: 5-minute rounding
199
302
  const startT = parseHHMM(entry.timeStart);
200
303
  const endT = parseHHMM(entry.timeEnd);
201
- if (startT && startT.minutes % 5 !== 0) {
202
- violations.push({
203
- rule: '5min_rounding',
204
- severity: 'reject',
205
- entry_id: entry.id,
206
- message: `timeStart ${entry.timeStart} is not on a 5-minute boundary`,
207
- details: { timeStart: entry.timeStart, minutes: startT.minutes },
208
- });
209
- }
210
- if (endT && endT.minutes % 5 !== 0) {
211
- violations.push({
212
- rule: '5min_rounding',
213
- severity: 'reject',
214
- entry_id: entry.id,
215
- message: `timeEnd ${entry.timeEnd} is not on a 5-minute boundary`,
216
- details: { timeEnd: entry.timeEnd, minutes: endT.minutes },
217
- });
304
+ // Rule 1: 5-minute rounding
305
+ if (cfg['five_min_rounding']?.enabled) {
306
+ const sev = cfg['five_min_rounding'].severity;
307
+ if (startT && startT.minutes % 5 !== 0) {
308
+ violations.push({
309
+ rule: '5min_rounding',
310
+ severity: sev,
311
+ entry_id: entry.id,
312
+ message: `timeStart ${entry.timeStart} is not on a 5-minute boundary`,
313
+ details: { timeStart: entry.timeStart, minutes: startT.minutes },
314
+ });
315
+ }
316
+ if (endT && endT.minutes % 5 !== 0) {
317
+ violations.push({
318
+ rule: '5min_rounding',
319
+ severity: sev,
320
+ entry_id: entry.id,
321
+ message: `timeEnd ${entry.timeEnd} is not on a 5-minute boundary`,
322
+ details: { timeEnd: entry.timeEnd, minutes: endT.minutes },
323
+ });
324
+ }
218
325
  }
219
326
  // Rule 2: deduction rounding
220
- const deduct = round2(entry.hoursDeduct ?? 0);
221
- if (!VALID_DEDUCTS.has(deduct)) {
222
- violations.push({
223
- rule: 'deduct_rounding',
224
- severity: 'reject',
225
- entry_id: entry.id,
226
- message: `hoursDeduct ${deduct} is not a valid deduction value`,
227
- details: { hoursDeduct: deduct, validValues: [...VALID_DEDUCTS] },
228
- });
327
+ if (cfg['deduct_rounding']?.enabled) {
328
+ const deduct = round2(entry.hoursDeduct ?? 0);
329
+ if (!VALID_DEDUCTS.has(deduct)) {
330
+ violations.push({
331
+ rule: 'deduct_rounding',
332
+ severity: cfg['deduct_rounding'].severity,
333
+ entry_id: entry.id,
334
+ message: `hoursDeduct ${deduct} is not a valid deduction value`,
335
+ details: { hoursDeduct: deduct, validValues: [...VALID_DEDUCTS] },
336
+ });
337
+ }
229
338
  }
230
339
  // Rule 4: missing notes
231
- if ((entry.actualHours ?? 0) > 0 && !entry.notes?.trim()) {
232
- violations.push({
233
- rule: 'missing_notes',
234
- severity: 'reject',
235
- entry_id: entry.id,
236
- message: 'Entry has hours but no notes',
237
- details: { actualHours: entry.actualHours },
238
- });
340
+ if (cfg['missing_notes']?.enabled) {
341
+ if ((entry.actualHours ?? 0) > 0 && !entry.notes?.trim()) {
342
+ violations.push({
343
+ rule: 'missing_notes',
344
+ severity: cfg['missing_notes'].severity,
345
+ entry_id: entry.id,
346
+ message: 'Entry has hours but no notes',
347
+ details: { actualHours: entry.actualHours },
348
+ });
349
+ }
239
350
  }
240
- // Rule 6: overtime flag (warning only)
241
- if (startT && endT) {
351
+ // Rule 6: overtime flag
352
+ if (cfg['overtime_flag']?.enabled && startT && endT) {
242
353
  const startMin = startT.hours * 60 + startT.minutes;
243
354
  const endMin = endT.hours * 60 + endT.minutes;
244
355
  const beforeWork = startMin < 8 * 60; // before 08:00
@@ -249,7 +360,7 @@ function validateEntries(entries, roleCategory = 'regular') {
249
360
  if (!isOvertime) {
250
361
  violations.push({
251
362
  rule: 'overtime_flag',
252
- severity: 'warn',
363
+ severity: cfg['overtime_flag'].severity,
253
364
  entry_id: entry.id,
254
365
  message: `Entry spans outside 08:00–17:00 but work type is "${wt || 'unset'}" (not overtime)`,
255
366
  details: { timeStart: entry.timeStart, timeEnd: entry.timeEnd, workType: wt },
@@ -258,21 +369,23 @@ function validateEntries(entries, roleCategory = 'regular') {
258
369
  }
259
370
  }
260
371
  // Rule 8: charge-code weekly limits (loaded from config/charge-code-rules.json)
261
- const chargeCodeName = entry.chargeCode?.name;
262
- if (chargeCodeName) {
263
- const limit = getChargeCodeLimit(chargeCodeName, roleCategory);
264
- if (limit !== null) {
265
- const weekKey = `${isoWeek(toDateKey(entry.dateEntered))}:${chargeCodeName}`;
266
- const accumulated = (weeklyChargeHours.get(weekKey) ?? 0) + (entry.actualHours ?? 0);
267
- weeklyChargeHours.set(weekKey, accumulated);
268
- if (accumulated > limit) {
269
- violations.push({
270
- rule: 'charge_code_limits',
271
- severity: 'reject',
272
- entry_id: entry.id,
273
- message: `Charge code "${chargeCodeName}" exceeds weekly limit of ${limit}h for role "${roleCategory}" (accumulated: ${round2(accumulated)}h)`,
274
- details: { chargeCode: chargeCodeName, limit, accumulated: round2(accumulated), roleCategory },
275
- });
372
+ if (cfg['charge_code_limits']?.enabled) {
373
+ const chargeCodeName = entry.chargeCode?.name;
374
+ if (chargeCodeName) {
375
+ const limit = getChargeCodeLimit(chargeCodeName, roleCategory);
376
+ if (limit !== null) {
377
+ const weekKey = `${isoWeek(toDateKey(entry.dateEntered))}:${chargeCodeName}`;
378
+ const accumulated = (weeklyChargeHours.get(weekKey) ?? 0) + (entry.actualHours ?? 0);
379
+ weeklyChargeHours.set(weekKey, accumulated);
380
+ if (accumulated > limit) {
381
+ violations.push({
382
+ rule: 'charge_code_limits',
383
+ severity: cfg['charge_code_limits'].severity,
384
+ entry_id: entry.id,
385
+ message: `Charge code "${chargeCodeName}" exceeds weekly limit of ${limit}h for role "${roleCategory}" (accumulated: ${round2(accumulated)}h)`,
386
+ details: { chargeCode: chargeCodeName, limit, accumulated: round2(accumulated), roleCategory },
387
+ });
388
+ }
276
389
  }
277
390
  }
278
391
  }
@@ -282,114 +395,153 @@ function validateEntries(entries, roleCategory = 'regular') {
282
395
  // -------------------------------------------------------------------------
283
396
  for (const [date, dayEntries] of byDate) {
284
397
  // Rule 3: overlap detection
285
- // Sort by timeStart ascending
286
- const sorted = [...dayEntries].sort((a, b) => {
287
- const am = toMinutes(a.timeStart) ?? 0;
288
- const bm = toMinutes(b.timeStart) ?? 0;
289
- return am - bm;
290
- });
291
- for (let i = 0; i < sorted.length - 1; i++) {
292
- const current = sorted[i];
293
- const next = sorted[i + 1];
294
- const currentEnd = toMinutes(current.timeEnd);
295
- const nextStart = toMinutes(next.timeStart);
296
- if (currentEnd !== null && nextStart !== null && currentEnd > nextStart) {
297
- // Check if the overlap is accounted for by a compensatory deduction.
298
- // The actual overlap is the time where both entries run simultaneously.
299
- // If either entry's deduction covers that overlap, no double-billing.
300
- const overlapMin = currentEnd - nextStart;
301
- const currentDeductMin = (current.hoursDeduct ?? 0) * 60;
302
- const nextDeductMin = (next.hoursDeduct ?? 0) * 60;
303
- // If either entry's deduction covers the overlap duration (within
304
- // 5-minute tolerance), the overlap is intentionally accounted for
305
- const isCompensated = (currentDeductMin > 0 && currentDeductMin >= overlapMin - 5) ||
306
- (nextDeductMin > 0 && nextDeductMin >= overlapMin - 5);
307
- if (!isCompensated) {
308
- violations.push({
309
- rule: 'overlap_detection',
310
- severity: 'reject',
311
- entry_id: next.id,
312
- message: `Entry #${next.id} starts at ${next.timeStart} before entry #${current.id} ends at ${current.timeEnd} on ${date}`,
313
- details: {
314
- date,
315
- overlapWithEntryId: current.id,
316
- conflictStart: next.timeStart,
317
- conflictEnd: current.timeEnd,
318
- },
319
- });
398
+ if (cfg['overlap_detection']?.enabled) {
399
+ const sorted = [...dayEntries].sort((a, b) => {
400
+ const am = toMinutes(a.timeStart) ?? 0;
401
+ const bm = toMinutes(b.timeStart) ?? 0;
402
+ return am - bm;
403
+ });
404
+ for (let i = 0; i < sorted.length - 1; i++) {
405
+ const current = sorted[i];
406
+ const next = sorted[i + 1];
407
+ const currentEnd = toMinutes(current.timeEnd);
408
+ const nextStart = toMinutes(next.timeStart);
409
+ if (currentEnd !== null && nextStart !== null && currentEnd > nextStart) {
410
+ const overlapMin = currentEnd - nextStart;
411
+ const currentDeductMin = (current.hoursDeduct ?? 0) * 60;
412
+ const nextDeductMin = (next.hoursDeduct ?? 0) * 60;
413
+ const isCompensated = (currentDeductMin > 0 && currentDeductMin >= overlapMin - 5) ||
414
+ (nextDeductMin > 0 && nextDeductMin >= overlapMin - 5);
415
+ if (!isCompensated) {
416
+ violations.push({
417
+ rule: 'overlap_detection',
418
+ severity: cfg['overlap_detection'].severity,
419
+ entry_id: next.id,
420
+ message: `Entry #${next.id} starts at ${next.timeStart} before entry #${current.id} ends at ${current.timeEnd} on ${date}`,
421
+ details: {
422
+ date,
423
+ overlapWithEntryId: current.id,
424
+ conflictStart: next.timeStart,
425
+ conflictEnd: current.timeEnd,
426
+ },
427
+ });
428
+ }
320
429
  }
321
430
  }
322
431
  }
323
- // Rule 7: pause rules — max 0.25h deduct per AM / PM period per day
324
- // Exempt leave/vacation entries — full-day leave uses 08:00-17:00 with 1h
325
- // deduct as the standard template; this is not a "pause".
326
- const LEAVE_KEYWORDS = ['vacances', 'vacation', 'congé', 'conge', 'sick', 'holiday', 'pto', 'férié', 'ferie', 'leave', 'absence'];
327
- const isLeaveEntry = (e) => {
328
- const wt = (e.workType?.name ?? '').toLowerCase();
329
- return LEAVE_KEYWORDS.some(kw => wt.includes(kw));
330
- };
331
- // Identify compensatory deductions: if entry A has a deduct and another
332
- // entry B is nested inside A's time range with duration ≈ A's deduct,
333
- // then A's deduct is compensatory (accounts for B), not a pause.
334
- const isCompensatoryDeduct = (entry) => {
335
- if ((entry.hoursDeduct ?? 0) <= 0)
336
- return false;
337
- const entryStart = toMinutes(entry.timeStart);
338
- const entryEnd = toMinutes(entry.timeEnd);
339
- if (entryStart === null || entryEnd === null)
432
+ // Rule 7: pause rules
433
+ if (cfg['pause_rules']?.enabled) {
434
+ // Exempt leave/vacation entries full-day leave uses 08:00-17:00 with 1h
435
+ // deduct as the standard template; this is not a "pause".
436
+ const LEAVE_KEYWORDS = ['vacances', 'vacation', 'congé', 'conge', 'sick', 'holiday', 'pto', 'férié', 'ferie', 'leave', 'absence'];
437
+ const isLeaveEntry = (e) => {
438
+ const wt = (e.workType?.name ?? '').toLowerCase();
439
+ return LEAVE_KEYWORDS.some(kw => wt.includes(kw));
440
+ };
441
+ const isCompensatoryDeduct = (entry) => {
442
+ if ((entry.hoursDeduct ?? 0) <= 0)
443
+ return false;
444
+ const entryStart = toMinutes(entry.timeStart);
445
+ const entryEnd = toMinutes(entry.timeEnd);
446
+ if (entryStart === null || entryEnd === null)
447
+ return false;
448
+ const deductMin = (entry.hoursDeduct ?? 0) * 60;
449
+ for (const other of dayEntries) {
450
+ if (other.id === entry.id)
451
+ continue;
452
+ const otherStart = toMinutes(other.timeStart);
453
+ const otherEnd = toMinutes(other.timeEnd);
454
+ if (otherStart === null || otherEnd === null)
455
+ continue;
456
+ if (otherStart >= entryStart && otherEnd <= entryEnd) {
457
+ const otherDuration = otherEnd - otherStart;
458
+ if (Math.abs(deductMin - otherDuration) <= 5)
459
+ return true;
460
+ }
461
+ }
340
462
  return false;
341
- const deductMin = (entry.hoursDeduct ?? 0) * 60;
342
- // Check if any other entry on this day is nested inside this entry's range
343
- for (const other of dayEntries) {
344
- if (other.id === entry.id)
463
+ };
464
+ const isPauseEntry = (e) => {
465
+ return (e.chargeCode?.name ?? '').toLowerCase().includes('pause') || (e.hoursDeduct ?? 0) > 0;
466
+ };
467
+ const pauseEntries = dayEntries.filter(e => !isLeaveEntry(e) && !isCompensatoryDeduct(e));
468
+ const pauseSev = cfg['pause_rules'].severity;
469
+ const amEntries = pauseEntries.filter((e) => {
470
+ const startMin = toMinutes(e.timeStart);
471
+ return startMin !== null && startMin < AM_END_MIN;
472
+ });
473
+ const pmEntries = pauseEntries.filter((e) => {
474
+ const startMin = toMinutes(e.timeStart);
475
+ return startMin !== null && startMin >= PM_START_MIN;
476
+ });
477
+ // Check 7a: max 0.25h deduct per AM / PM period per day
478
+ const amDeduct = amEntries.reduce((s, e) => s + (e.hoursDeduct ?? 0), 0);
479
+ const pmDeduct = pmEntries.reduce((s, e) => s + (e.hoursDeduct ?? 0), 0);
480
+ if (round2(amDeduct) > 0.25) {
481
+ const lastAm = amEntries[amEntries.length - 1];
482
+ if (lastAm) {
483
+ violations.push({
484
+ rule: 'pause_rules',
485
+ severity: pauseSev,
486
+ entry_id: lastAm.id,
487
+ message: `AM deductions for ${date} total ${round2(amDeduct)}h — maximum is 0.25h`,
488
+ details: { date, period: 'AM', totalDeduct: round2(amDeduct), limit: 0.25 },
489
+ });
490
+ }
491
+ }
492
+ if (round2(pmDeduct) > 0.25) {
493
+ const lastPm = pmEntries[pmEntries.length - 1];
494
+ if (lastPm) {
495
+ violations.push({
496
+ rule: 'pause_rules',
497
+ severity: pauseSev,
498
+ entry_id: lastPm.id,
499
+ message: `PM deductions for ${date} total ${round2(pmDeduct)}h — maximum is 0.25h`,
500
+ details: { date, period: 'PM', totalDeduct: round2(pmDeduct), limit: 0.25 },
501
+ });
502
+ }
503
+ }
504
+ // Check 7b: lunch exclusion
505
+ for (const e of pauseEntries) {
506
+ if (!isPauseEntry(e))
345
507
  continue;
346
- const otherStart = toMinutes(other.timeStart);
347
- const otherEnd = toMinutes(other.timeEnd);
348
- if (otherStart === null || otherEnd === null)
508
+ const startMin = toMinutes(e.timeStart);
509
+ const endMin = toMinutes(e.timeEnd);
510
+ if (startMin === null || endMin === null)
349
511
  continue;
350
- if (otherStart >= entryStart && otherEnd <= entryEnd) {
351
- const otherDuration = otherEnd - otherStart;
352
- if (Math.abs(deductMin - otherDuration) <= 5)
353
- return true;
512
+ if (startMin < LUNCH_END_MIN && endMin > LUNCH_START_MIN) {
513
+ violations.push({
514
+ rule: 'pause_rules',
515
+ severity: pauseSev,
516
+ entry_id: e.id,
517
+ message: `Pause entry on ${date} overlaps the lunch period (12:00–13:00)`,
518
+ details: { date, timeStart: e.timeStart, timeEnd: e.timeEnd, lunchStart: '12:00', lunchEnd: '13:00' },
519
+ });
354
520
  }
355
521
  }
356
- return false;
357
- };
358
- // Filter out leave entries and compensatory deductions before summing
359
- const pauseEntries = dayEntries.filter(e => !isLeaveEntry(e) && !isCompensatoryDeduct(e));
360
- const amEntries = pauseEntries.filter((e) => {
361
- const t = parseHHMM(e.timeStart);
362
- return t !== null && t.hours < 12;
363
- });
364
- const pmEntries = pauseEntries.filter((e) => {
365
- const t = parseHHMM(e.timeStart);
366
- return t !== null && t.hours >= 12;
367
- });
368
- const amDeduct = amEntries.reduce((s, e) => s + (e.hoursDeduct ?? 0), 0);
369
- const pmDeduct = pmEntries.reduce((s, e) => s + (e.hoursDeduct ?? 0), 0);
370
- if (round2(amDeduct) > 0.25) {
371
- // Flag the last AM entry as the carrier of the violation
372
- const lastAm = amEntries[amEntries.length - 1];
373
- if (lastAm) {
374
- violations.push({
375
- rule: 'pause_rules',
376
- severity: 'reject',
377
- entry_id: lastAm.id,
378
- message: `AM deductions for ${date} total ${round2(amDeduct)}h — maximum is 0.25h`,
379
- details: { date, period: 'AM', totalDeduct: round2(amDeduct), limit: 0.25 },
380
- });
381
- }
382
- }
383
- if (round2(pmDeduct) > 0.25) {
384
- const lastPm = pmEntries[pmEntries.length - 1];
385
- if (lastPm) {
386
- violations.push({
387
- rule: 'pause_rules',
388
- severity: 'reject',
389
- entry_id: lastPm.id,
390
- message: `PM deductions for ${date} total ${round2(pmDeduct)}h — maximum is 0.25h`,
391
- details: { date, period: 'PM', totalDeduct: round2(pmDeduct), limit: 0.25 },
392
- });
522
+ // Check 7c: must-cut-slot
523
+ for (const [halfLabel, halfEntries] of [['AM', amEntries], ['PM', pmEntries]]) {
524
+ for (const e of halfEntries) {
525
+ if (!isPauseEntry(e))
526
+ continue;
527
+ const pauseStart = toMinutes(e.timeStart);
528
+ const pauseEnd = toMinutes(e.timeEnd);
529
+ if (pauseStart === null || pauseEnd === null)
530
+ continue;
531
+ const workEntries = halfEntries.filter(w => !isPauseEntry(w));
532
+ const hasWorkBefore = workEntries.some(w => (toMinutes(w.timeEnd) ?? 0) <= pauseStart);
533
+ const hasWorkAfter = workEntries.some(w => (toMinutes(w.timeStart) ?? Infinity) >= pauseEnd);
534
+ if (!hasWorkBefore || !hasWorkAfter) {
535
+ const missing = !hasWorkBefore ? 'before' : 'after';
536
+ violations.push({
537
+ rule: 'pause_rules',
538
+ severity: pauseSev,
539
+ entry_id: e.id,
540
+ message: `${halfLabel} pause on ${date} does not cut a work slot — no work entry ${missing} it`,
541
+ details: { date, period: halfLabel, timeStart: e.timeStart, timeEnd: e.timeEnd, hasWorkBefore, hasWorkAfter },
542
+ });
543
+ }
544
+ }
393
545
  }
394
546
  }
395
547
  }
@@ -397,6 +549,55 @@ function validateEntries(entries, roleCategory = 'regular') {
397
549
  // The check is intentionally omitted here to avoid an extra API round-trip
398
550
  // inside the validation loop; it is surfaced as a design-time warning instead.
399
551
  // If the caller provides member department info in a future parameter, add it here.
552
+ // -------------------------------------------------------------------------
553
+ // Rule 9: accrual_balance — reject entries that would overdraw accrual balance
554
+ // -------------------------------------------------------------------------
555
+ if (cfg['accrual_balance']?.enabled && accrualBalances.length > 0) {
556
+ // Build lookup: accrual type name → available hours
557
+ const availableByType = new Map();
558
+ for (const b of accrualBalances) {
559
+ const typeName = b.accrualType?.name;
560
+ if (!typeName)
561
+ continue;
562
+ const available = b.availableHours ?? b.currentBalance ?? 0;
563
+ availableByType.set(typeName, available);
564
+ }
565
+ // Sum all hours per accrual type across the entire period
566
+ const accumulatedByType = new Map();
567
+ const lastEntryByType = new Map();
568
+ for (const entry of entries) {
569
+ const codeName = entry.chargeCode?.name;
570
+ if (!codeName)
571
+ continue;
572
+ const accrualType = ACCRUAL_CHARGE_CODES[codeName];
573
+ if (!accrualType)
574
+ continue;
575
+ const prev = accumulatedByType.get(accrualType) ?? 0;
576
+ accumulatedByType.set(accrualType, prev + (entry.actualHours ?? 0));
577
+ lastEntryByType.set(accrualType, entry);
578
+ }
579
+ // Emit a violation for each accrual type that exceeds its available balance
580
+ for (const [accrualType, totalRequested] of accumulatedByType) {
581
+ const available = availableByType.get(accrualType);
582
+ if (available === undefined)
583
+ continue; // No balance record — cannot check
584
+ if (round2(totalRequested) > round2(available)) {
585
+ const lastEntry = lastEntryByType.get(accrualType);
586
+ violations.push({
587
+ rule: 'accrual_balance',
588
+ severity: cfg['accrual_balance'].severity,
589
+ entry_id: lastEntry.id,
590
+ message: `Accrual type "${accrualType}" would be overdrawn: ${round2(totalRequested)}h requested, ${round2(available)}h available`,
591
+ details: {
592
+ accrualType,
593
+ requested: round2(totalRequested),
594
+ available: round2(available),
595
+ overdraft: round2(totalRequested - available),
596
+ },
597
+ });
598
+ }
599
+ }
600
+ }
400
601
  return violations;
401
602
  }
402
603
  // ---------------------------------------------------------------------------
@@ -416,6 +617,9 @@ export async function handleValidationTool(toolName, args) {
416
617
  const memberIdentifier = String(args['member_identifier'] ?? '').trim();
417
618
  const startDate = String(args['start_date'] ?? '').trim();
418
619
  const endDate = String(args['end_date'] ?? '').trim();
620
+ const rulesOverrides = args['rules'];
621
+ const format = String(args['format'] ?? 'markdown').trim();
622
+ const includeStats = args['include_stats'] === true;
419
623
  if (!memberIdentifier || !startDate || !endDate) {
420
624
  return text('Error: member_identifier, start_date, and end_date are all required.');
421
625
  }
@@ -424,6 +628,8 @@ export async function handleValidationTool(toolName, args) {
424
628
  if (!isoDateRe.test(startDate) || !isoDateRe.test(endDate)) {
425
629
  return text('Error: start_date and end_date must be in YYYY-MM-DD format.');
426
630
  }
631
+ // Resolve rule configuration (apply caller overrides on top of defaults)
632
+ const ruleConfig = resolveRuleConfig(rulesOverrides);
427
633
  // Fetch time entries
428
634
  let entries;
429
635
  try {
@@ -438,7 +644,21 @@ export async function handleValidationTool(toolName, args) {
438
644
  if (entries.length === 0) {
439
645
  return text(`No time entries found for member "${memberIdentifier}" between ${startDate} and ${endDate}.`);
440
646
  }
441
- const violations = validateEntries(entries);
647
+ // Fetch accrual balances for the member (best-effort — validation continues on failure)
648
+ let accrualBalances = [];
649
+ try {
650
+ const raw = await api.request({
651
+ path: '/time/accruals',
652
+ method: 'GET',
653
+ params: { conditions: `member/identifier='${memberIdentifier}'` },
654
+ });
655
+ accrualBalances = Array.isArray(raw) ? raw : [];
656
+ }
657
+ catch {
658
+ // Non-fatal — proceed without accrual check
659
+ accrualBalances = [];
660
+ }
661
+ const violations = validateEntries(entries, 'regular', accrualBalances, ruleConfig);
442
662
  const rejects = violations.filter((v) => v.severity === 'reject');
443
663
  const warns = violations.filter((v) => v.severity === 'warn');
444
664
  const passed = rejects.length === 0;
@@ -449,6 +669,8 @@ export async function handleValidationTool(toolName, args) {
449
669
  violations,
450
670
  passed,
451
671
  };
672
+ // Optionally compute stats
673
+ const stats = includeStats ? computeStats(entries) : undefined;
452
674
  // Build human-readable summary
453
675
  const lines = [
454
676
  `Validation result for ${memberIdentifier} (${startDate} to ${endDate})`,
@@ -475,10 +697,54 @@ export async function handleValidationTool(toolName, args) {
475
697
  }
476
698
  }
477
699
  }
700
+ if (stats) {
701
+ lines.push('');
702
+ lines.push('--- Time breakdown ---');
703
+ lines.push(` Total hours : ${stats.totalHours}h`);
704
+ lines.push(` Billable : ${stats.billableHours}h (${stats.billablePercent}%)`);
705
+ lines.push(` Internal : ${stats.internalHours}h (${stats.internalPercent}%)`);
706
+ lines.push(` Customer non-bill : ${stats.customerNonBillHours}h (${stats.customerNonBillPercent}%)`);
707
+ }
478
708
  lines.push('');
479
709
  lines.push('--- Full JSON result ---');
480
710
  lines.push(JSON.stringify(result, null, 2));
481
- return text(lines.join('\n'));
711
+ const markdownOutput = lines.join('\n');
712
+ // Return structured output when requested
713
+ if (format === 'structured') {
714
+ const structuredData = {
715
+ members: [{
716
+ identifier: memberIdentifier,
717
+ period: result.period,
718
+ totalEntries: result.totalEntries,
719
+ passed: result.passed,
720
+ violations: result.violations,
721
+ entries: entries.map(e => ({
722
+ id: e.id,
723
+ ticketId: e.chargeToId,
724
+ chargeCode: e.chargeCode?.name ?? null,
725
+ hours: e.actualHours,
726
+ hoursDeduct: e.hoursDeduct,
727
+ timeStart: e.timeStart,
728
+ timeEnd: e.timeEnd,
729
+ notes: e.notes,
730
+ billableOption: e.billableOption,
731
+ company: e.company,
732
+ })),
733
+ ...(stats ? { stats } : {}),
734
+ accruals: accrualBalances.map((b) => ({
735
+ accrualType: b.accrualType?.name ?? 'Unknown',
736
+ hours: b.availableHours ?? b.currentBalance ?? 0,
737
+ })),
738
+ }],
739
+ };
740
+ return {
741
+ content: [
742
+ { type: 'text', text: markdownOutput },
743
+ { type: 'text', text: JSON.stringify(structuredData) },
744
+ ],
745
+ };
746
+ }
747
+ return text(markdownOutput);
482
748
  }
483
749
  // -----------------------------------------------------------------------
484
750
  case 'cw_accrual_balance': {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/tools/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/tools/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Generates a ConnectWise web client deep link URL for a given record type and ID.
3
+ *
4
+ * @param recordType - One of: ticket, company, contact, project, opportunity, activity, time_entry
5
+ * @param recordId - The numeric ID of the record
6
+ * @param cwApiUrl - The CW_API_URL env value (used to extract the base host)
7
+ * @param parentTicketId - Required for time_entry; the parent ticket ID to link to
8
+ * @returns A fully-qualified deep link URL, or empty string if the type is unknown
9
+ */
10
+ export declare function cwDeepLink(recordType: string, recordId: number, cwApiUrl: string, parentTicketId?: number): string;
11
+ //# sourceMappingURL=deep-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-links.d.ts","sourceRoot":"","sources":["../../src/utils/deep-links.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAmBR"}
@@ -0,0 +1,40 @@
1
+ // ConnectWise web client deep link URL generator
2
+ const ROUTE_TO_MAP = {
3
+ ticket: 'ServiceFV',
4
+ company: 'CompanyFV',
5
+ contact: 'ContactFV',
6
+ project: 'ProjectHeaderFV',
7
+ opportunity: 'OpportunityFV',
8
+ activity: 'ActivityFV',
9
+ };
10
+ const CW_WEB_VERSION = 'v2025_1';
11
+ /**
12
+ * Generates a ConnectWise web client deep link URL for a given record type and ID.
13
+ *
14
+ * @param recordType - One of: ticket, company, contact, project, opportunity, activity, time_entry
15
+ * @param recordId - The numeric ID of the record
16
+ * @param cwApiUrl - The CW_API_URL env value (used to extract the base host)
17
+ * @param parentTicketId - Required for time_entry; the parent ticket ID to link to
18
+ * @returns A fully-qualified deep link URL, or empty string if the type is unknown
19
+ */
20
+ export function cwDeepLink(recordType, recordId, cwApiUrl, parentTicketId) {
21
+ if (recordType === 'time_entry') {
22
+ if (!parentTicketId)
23
+ return '';
24
+ return cwDeepLink('ticket', parentTicketId, cwApiUrl);
25
+ }
26
+ const routeTo = ROUTE_TO_MAP[recordType];
27
+ if (!routeTo)
28
+ return '';
29
+ let host;
30
+ try {
31
+ const parsed = new URL(cwApiUrl);
32
+ host = parsed.origin;
33
+ }
34
+ catch {
35
+ return '';
36
+ }
37
+ const locale = process.env.CW_LOCALE ?? 'en_CA';
38
+ return `${host}/${CW_WEB_VERSION}/ConnectWise.aspx?locale=${locale}&routeTo=${routeTo}&recid=${recordId}`;
39
+ }
40
+ //# sourceMappingURL=deep-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-links.js","sourceRoot":"","sources":["../../src/utils/deep-links.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,MAAM,YAAY,GAA2B;IAC3C,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,eAAe;IAC5B,QAAQ,EAAE,YAAY;CACvB,CAAC;AAEF,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,UAAkB,EAClB,QAAgB,EAChB,QAAgB,EAChB,cAAuB;IAEvB,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc;YAAE,OAAO,EAAE,CAAC;QAC/B,OAAO,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC;IAChD,OAAO,GAAG,IAAI,IAAI,cAAc,4BAA4B,MAAM,YAAY,OAAO,UAAU,QAAQ,EAAE,CAAC;AAC5G,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goxtechnologies/connectwise-psa-mcp",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "ConnectWise PSA MCP server — 22 tools, 509 named operations, 72 analytics handlers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",