@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.
- package/dist/tools/validation.d.ts +27 -0
- package/dist/tools/validation.d.ts.map +1 -1
- package/dist/tools/validation.js +427 -161
- package/dist/tools/validation.js.map +1 -1
- package/dist/utils/deep-links.d.ts +11 -0
- package/dist/utils/deep-links.d.ts.map +1 -0
- package/dist/utils/deep-links.js +40 -0
- package/dist/utils/deep-links.js.map +1 -0
- package/package.json +1 -1
|
@@ -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;
|
|
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"}
|
package/dist/tools/validation.js
CHANGED
|
@@ -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
|
|
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,
|
|
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
|
|
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
|
|
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
|
-
//
|
|
235
|
+
// Accrual charge code mapping — maps charge code name to accrual type name
|
|
175
236
|
// ---------------------------------------------------------------------------
|
|
176
|
-
|
|
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
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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 (
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
|
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: '
|
|
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
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
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
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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
|
|
347
|
-
const
|
|
348
|
-
if (
|
|
508
|
+
const startMin = toMinutes(e.timeStart);
|
|
509
|
+
const endMin = toMinutes(e.timeEnd);
|
|
510
|
+
if (startMin === null || endMin === null)
|
|
349
511
|
continue;
|
|
350
|
-
if (
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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