@forwardslashns/taskit-validation-messages 1.6.1 → 1.7.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 (29) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -1
  4. package/dist/validation/features/client-categories.validation-messages.d.ts +20 -0
  5. package/dist/validation/features/client-categories.validation-messages.d.ts.map +1 -0
  6. package/dist/validation/features/client-categories.validation-messages.js +22 -0
  7. package/dist/validation/features/income-accounts.validation-messages.d.ts +20 -0
  8. package/dist/validation/features/income-accounts.validation-messages.d.ts.map +1 -0
  9. package/dist/validation/features/income-accounts.validation-messages.js +22 -0
  10. package/dist/validation/features/template-assignments.validation-messages.d.ts +55 -0
  11. package/dist/validation/features/template-assignments.validation-messages.d.ts.map +1 -0
  12. package/dist/validation/features/template-assignments.validation-messages.js +57 -0
  13. package/dist/validation/features/templates.validation-messages.d.ts +68 -0
  14. package/dist/validation/features/templates.validation-messages.d.ts.map +1 -0
  15. package/dist/validation/features/templates.validation-messages.js +70 -0
  16. package/dist/validation/validation-constants.d.ts +5 -0
  17. package/dist/validation/validation-constants.d.ts.map +1 -1
  18. package/dist/validation/validation-constants.js +11 -1
  19. package/dist/validation/validation-messages.d.ts +159 -0
  20. package/dist/validation/validation-messages.d.ts.map +1 -1
  21. package/dist/validation/validation-messages.js +8 -0
  22. package/package.json +1 -1
  23. package/src/index.ts +18 -2
  24. package/src/validation/features/client-categories.validation-messages.ts +19 -0
  25. package/src/validation/features/income-accounts.validation-messages.ts +19 -0
  26. package/src/validation/features/template-assignments.validation-messages.ts +58 -0
  27. package/src/validation/features/templates.validation-messages.ts +67 -0
  28. package/src/validation/validation-constants.ts +13 -0
  29. package/src/validation/validation-messages.ts +8 -0
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import { getValidationMessage, ValidationMessageResult } from './validation/validation-message.formatter';
2
- import { VALIDATION } from './validation/validation-constants';
3
- export { VALIDATION, getValidationMessage, ValidationMessageResult };
2
+ import { VALIDATION, RELATED_CLIENT_PREFIX, RELATED_CLIENT_SUFFIX, RELATED_CLIENT_REGEX, getRelatedClientMessagePrefix, extractRelatedClientName } from './validation/validation-constants';
3
+ export { VALIDATION, getValidationMessage, ValidationMessageResult, RELATED_CLIENT_PREFIX, RELATED_CLIENT_SUFFIX, RELATED_CLIENT_REGEX, getRelatedClientMessagePrefix, extractRelatedClientName, };
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAC1G,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAC1G,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,wBAAwB,GACzB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getValidationMessage = exports.VALIDATION = void 0;
3
+ exports.extractRelatedClientName = exports.getRelatedClientMessagePrefix = exports.RELATED_CLIENT_REGEX = exports.RELATED_CLIENT_SUFFIX = exports.RELATED_CLIENT_PREFIX = exports.getValidationMessage = exports.VALIDATION = void 0;
4
4
  const validation_message_formatter_1 = require("./validation/validation-message.formatter");
5
5
  Object.defineProperty(exports, "getValidationMessage", { enumerable: true, get: function () { return validation_message_formatter_1.getValidationMessage; } });
6
6
  const validation_constants_1 = require("./validation/validation-constants");
7
7
  Object.defineProperty(exports, "VALIDATION", { enumerable: true, get: function () { return validation_constants_1.VALIDATION; } });
8
+ Object.defineProperty(exports, "RELATED_CLIENT_PREFIX", { enumerable: true, get: function () { return validation_constants_1.RELATED_CLIENT_PREFIX; } });
9
+ Object.defineProperty(exports, "RELATED_CLIENT_SUFFIX", { enumerable: true, get: function () { return validation_constants_1.RELATED_CLIENT_SUFFIX; } });
10
+ Object.defineProperty(exports, "RELATED_CLIENT_REGEX", { enumerable: true, get: function () { return validation_constants_1.RELATED_CLIENT_REGEX; } });
11
+ Object.defineProperty(exports, "getRelatedClientMessagePrefix", { enumerable: true, get: function () { return validation_constants_1.getRelatedClientMessagePrefix; } });
12
+ Object.defineProperty(exports, "extractRelatedClientName", { enumerable: true, get: function () { return validation_constants_1.extractRelatedClientName; } });
@@ -0,0 +1,20 @@
1
+ export declare const CLIENT_CATEGORIES: {
2
+ readonly NAME_REQUIRED: {
3
+ readonly message: "Client category name is required";
4
+ readonly affectedFields: readonly ["name"];
5
+ };
6
+ readonly NAME_ALREADY_EXISTS: {
7
+ readonly message: "Client category with the name '{name}' already exists";
8
+ readonly params: readonly ["name"];
9
+ readonly affectedFields: readonly ["name"];
10
+ };
11
+ readonly OPTION_IN_USE: {
12
+ readonly message: "This option is currently in use and cannot be deleted";
13
+ readonly affectedFields: readonly [];
14
+ };
15
+ readonly CLIENT_CATEGORY_NOT_FOUND: {
16
+ readonly message: "Client category not found";
17
+ readonly affectedFields: readonly [];
18
+ };
19
+ };
20
+ //# sourceMappingURL=client-categories.validation-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-categories.validation-messages.d.ts","sourceRoot":"","sources":["../../../src/validation/features/client-categories.validation-messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;CAkBpB,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLIENT_CATEGORIES = void 0;
4
+ exports.CLIENT_CATEGORIES = {
5
+ NAME_REQUIRED: {
6
+ message: 'Client category name is required',
7
+ affectedFields: ['name'],
8
+ },
9
+ NAME_ALREADY_EXISTS: {
10
+ message: "Client category with the name '{name}' already exists",
11
+ params: ['name'],
12
+ affectedFields: ['name'],
13
+ },
14
+ OPTION_IN_USE: {
15
+ message: 'This option is currently in use and cannot be deleted',
16
+ affectedFields: [],
17
+ },
18
+ CLIENT_CATEGORY_NOT_FOUND: {
19
+ message: 'Client category not found',
20
+ affectedFields: [],
21
+ },
22
+ };
@@ -0,0 +1,20 @@
1
+ export declare const INCOME_ACCOUNTS: {
2
+ readonly NAME_REQUIRED: {
3
+ readonly message: "Income account name is required";
4
+ readonly affectedFields: readonly ["name"];
5
+ };
6
+ readonly NAME_ALREADY_EXISTS: {
7
+ readonly message: "Income account with the name '{name}' already exists";
8
+ readonly params: readonly ["name"];
9
+ readonly affectedFields: readonly ["name"];
10
+ };
11
+ readonly OPTION_IN_USE: {
12
+ readonly message: "This option is currently in use and cannot be deleted";
13
+ readonly affectedFields: readonly [];
14
+ };
15
+ readonly INCOME_ACCOUNT_NOT_FOUND: {
16
+ readonly message: "Income account not found";
17
+ readonly affectedFields: readonly [];
18
+ };
19
+ };
20
+ //# sourceMappingURL=income-accounts.validation-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"income-accounts.validation-messages.d.ts","sourceRoot":"","sources":["../../../src/validation/features/income-accounts.validation-messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;CAkBlB,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INCOME_ACCOUNTS = void 0;
4
+ exports.INCOME_ACCOUNTS = {
5
+ NAME_REQUIRED: {
6
+ message: 'Income account name is required',
7
+ affectedFields: ['name'],
8
+ },
9
+ NAME_ALREADY_EXISTS: {
10
+ message: "Income account with the name '{name}' already exists",
11
+ params: ['name'],
12
+ affectedFields: ['name'],
13
+ },
14
+ OPTION_IN_USE: {
15
+ message: 'This option is currently in use and cannot be deleted',
16
+ affectedFields: [],
17
+ },
18
+ INCOME_ACCOUNT_NOT_FOUND: {
19
+ message: 'Income account not found',
20
+ affectedFields: [],
21
+ },
22
+ };
@@ -0,0 +1,55 @@
1
+ export declare const TEMPLATE_ASSIGNMENTS: {
2
+ readonly NAME_REQUIRED: {
3
+ readonly message: "Assignment name is required";
4
+ readonly affectedFields: readonly ["name"];
5
+ };
6
+ readonly NAME_ALREADY_EXISTS: {
7
+ readonly message: "This name is already in use on this template. Please enter a different name";
8
+ readonly affectedFields: readonly ["name"];
9
+ };
10
+ readonly DEFAULT_STAFF_REQUIRED: {
11
+ readonly message: "Default staff is required";
12
+ readonly affectedFields: readonly ["defaultStaffId"];
13
+ };
14
+ readonly INVALID_STAFF: {
15
+ readonly message: "Invalid staff member";
16
+ readonly affectedFields: readonly ["defaultStaffId"];
17
+ };
18
+ readonly ASSIGNMENT_TYPE_REQUIRED: {
19
+ readonly message: "Assignment type is required";
20
+ readonly affectedFields: readonly ["assignmentTypeId"];
21
+ };
22
+ readonly INVALID_ASSIGNMENT_TYPE: {
23
+ readonly message: "Invalid assignment type";
24
+ readonly affectedFields: readonly ["assignmentTypeId"];
25
+ };
26
+ readonly ORDER_REQUIRED: {
27
+ readonly message: "Order is required for workflow assignments";
28
+ readonly affectedFields: readonly ["order"];
29
+ };
30
+ readonly ORDER_ALREADY_EXISTS: {
31
+ readonly message: "This order number is already in use on this template. Please enter a different number to set the workflow order";
32
+ readonly affectedFields: readonly ["order"];
33
+ };
34
+ readonly TEMPLATE_NOT_FOUND: {
35
+ readonly message: "Template not found";
36
+ readonly affectedFields: readonly [];
37
+ };
38
+ readonly ASSIGNMENT_NOT_FOUND: {
39
+ readonly message: "Assignment not found";
40
+ readonly affectedFields: readonly [];
41
+ };
42
+ readonly CANNOT_EDIT_IN_USE: {
43
+ readonly message: "This assignment is already being used by a client, and cannot be edited";
44
+ readonly affectedFields: readonly [];
45
+ };
46
+ readonly CANNOT_DELETE_IN_USE: {
47
+ readonly message: "This assignment is already being used by a client, and cannot be deleted";
48
+ readonly affectedFields: readonly [];
49
+ };
50
+ readonly INVALID_CLIENT_CATEGORY: {
51
+ readonly message: "Invalid client category";
52
+ readonly affectedFields: readonly ["clientCategoryId"];
53
+ };
54
+ };
55
+ //# sourceMappingURL=template-assignments.validation-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-assignments.validation-messages.d.ts","sourceRoot":"","sources":["../../../src/validation/features/template-assignments.validation-messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDvB,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TEMPLATE_ASSIGNMENTS = void 0;
4
+ exports.TEMPLATE_ASSIGNMENTS = {
5
+ NAME_REQUIRED: {
6
+ message: 'Assignment name is required',
7
+ affectedFields: ['name'],
8
+ },
9
+ NAME_ALREADY_EXISTS: {
10
+ message: 'This name is already in use on this template. Please enter a different name',
11
+ affectedFields: ['name'],
12
+ },
13
+ DEFAULT_STAFF_REQUIRED: {
14
+ message: 'Default staff is required',
15
+ affectedFields: ['defaultStaffId'],
16
+ },
17
+ INVALID_STAFF: {
18
+ message: 'Invalid staff member',
19
+ affectedFields: ['defaultStaffId'],
20
+ },
21
+ ASSIGNMENT_TYPE_REQUIRED: {
22
+ message: 'Assignment type is required',
23
+ affectedFields: ['assignmentTypeId'],
24
+ },
25
+ INVALID_ASSIGNMENT_TYPE: {
26
+ message: 'Invalid assignment type',
27
+ affectedFields: ['assignmentTypeId'],
28
+ },
29
+ ORDER_REQUIRED: {
30
+ message: 'Order is required for workflow assignments',
31
+ affectedFields: ['order'],
32
+ },
33
+ ORDER_ALREADY_EXISTS: {
34
+ message: 'This order number is already in use on this template. Please enter a different number to set the workflow order',
35
+ affectedFields: ['order'],
36
+ },
37
+ TEMPLATE_NOT_FOUND: {
38
+ message: 'Template not found',
39
+ affectedFields: [],
40
+ },
41
+ ASSIGNMENT_NOT_FOUND: {
42
+ message: 'Assignment not found',
43
+ affectedFields: [],
44
+ },
45
+ CANNOT_EDIT_IN_USE: {
46
+ message: 'This assignment is already being used by a client, and cannot be edited',
47
+ affectedFields: [],
48
+ },
49
+ CANNOT_DELETE_IN_USE: {
50
+ message: 'This assignment is already being used by a client, and cannot be deleted',
51
+ affectedFields: [],
52
+ },
53
+ INVALID_CLIENT_CATEGORY: {
54
+ message: 'Invalid client category',
55
+ affectedFields: ['clientCategoryId'],
56
+ },
57
+ };
@@ -0,0 +1,68 @@
1
+ export declare const TEMPLATES: {
2
+ readonly NAME_REQUIRED: {
3
+ readonly message: "Template name is required";
4
+ readonly affectedFields: readonly ["name"];
5
+ };
6
+ readonly NAME_ALREADY_EXISTS: {
7
+ readonly message: "Template with the name '{name}' already exists";
8
+ readonly params: readonly ["name"];
9
+ readonly affectedFields: readonly ["name"];
10
+ };
11
+ readonly TYPE_REQUIRED: {
12
+ readonly message: "Template type is required";
13
+ readonly affectedFields: readonly ["templateTypeId"];
14
+ };
15
+ readonly INVALID_TYPE: {
16
+ readonly message: "Invalid template type";
17
+ readonly affectedFields: readonly ["templateTypeId"];
18
+ };
19
+ readonly DEFAULT_STAFF_REQUIRED: {
20
+ readonly message: "Default staff is required";
21
+ readonly affectedFields: readonly ["defaultStaffId"];
22
+ };
23
+ readonly INVALID_STAFF: {
24
+ readonly message: "Invalid staff member";
25
+ readonly affectedFields: readonly ["defaultStaffId"];
26
+ };
27
+ readonly INCOME_ACCOUNT_REQUIRED: {
28
+ readonly message: "Income account is required";
29
+ readonly affectedFields: readonly ["incomeAccountId"];
30
+ };
31
+ readonly INVALID_INCOME_ACCOUNT: {
32
+ readonly message: "Invalid income account";
33
+ readonly affectedFields: readonly ["incomeAccountId"];
34
+ };
35
+ readonly AMOUNT_REQUIRED: {
36
+ readonly message: "Amount is required when separately charged";
37
+ readonly affectedFields: readonly ["amount"];
38
+ };
39
+ readonly COMMISSION_RATE_REQUIRED: {
40
+ readonly message: "Commission rate is required when subject to commission";
41
+ readonly affectedFields: readonly ["commissionRate"];
42
+ };
43
+ readonly ENTITY_TYPE_REQUIRED: {
44
+ readonly message: "At least one associated entity is required";
45
+ readonly affectedFields: readonly ["associatedEntities"];
46
+ };
47
+ readonly INVALID_ENTITY_TYPE: {
48
+ readonly message: "Invalid entity type";
49
+ readonly affectedFields: readonly ["associatedEntities"];
50
+ };
51
+ readonly INVALID_CLASSIFICATION: {
52
+ readonly message: "Invalid classification";
53
+ readonly affectedFields: readonly ["classificationId"];
54
+ };
55
+ readonly INVALID_SETUP_TEMPLATE: {
56
+ readonly message: "Invalid associated setup template";
57
+ readonly affectedFields: readonly ["associatedSetupTemplateId"];
58
+ };
59
+ readonly OPTION_IN_USE: {
60
+ readonly message: "This template is currently in use and cannot be deleted";
61
+ readonly affectedFields: readonly [];
62
+ };
63
+ readonly TEMPLATE_NOT_FOUND: {
64
+ readonly message: "Template not found";
65
+ readonly affectedFields: readonly [];
66
+ };
67
+ };
68
+ //# sourceMappingURL=templates.validation-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.validation-messages.d.ts","sourceRoot":"","sources":["../../../src/validation/features/templates.validation-messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEZ,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TEMPLATES = void 0;
4
+ exports.TEMPLATES = {
5
+ NAME_REQUIRED: {
6
+ message: 'Template name is required',
7
+ affectedFields: ['name'],
8
+ },
9
+ NAME_ALREADY_EXISTS: {
10
+ message: "Template with the name '{name}' already exists",
11
+ params: ['name'],
12
+ affectedFields: ['name'],
13
+ },
14
+ TYPE_REQUIRED: {
15
+ message: 'Template type is required',
16
+ affectedFields: ['templateTypeId'],
17
+ },
18
+ INVALID_TYPE: {
19
+ message: 'Invalid template type',
20
+ affectedFields: ['templateTypeId'],
21
+ },
22
+ DEFAULT_STAFF_REQUIRED: {
23
+ message: 'Default staff is required',
24
+ affectedFields: ['defaultStaffId'],
25
+ },
26
+ INVALID_STAFF: {
27
+ message: 'Invalid staff member',
28
+ affectedFields: ['defaultStaffId'],
29
+ },
30
+ INCOME_ACCOUNT_REQUIRED: {
31
+ message: 'Income account is required',
32
+ affectedFields: ['incomeAccountId'],
33
+ },
34
+ INVALID_INCOME_ACCOUNT: {
35
+ message: 'Invalid income account',
36
+ affectedFields: ['incomeAccountId'],
37
+ },
38
+ AMOUNT_REQUIRED: {
39
+ message: 'Amount is required when separately charged',
40
+ affectedFields: ['amount'],
41
+ },
42
+ COMMISSION_RATE_REQUIRED: {
43
+ message: 'Commission rate is required when subject to commission',
44
+ affectedFields: ['commissionRate'],
45
+ },
46
+ ENTITY_TYPE_REQUIRED: {
47
+ message: 'At least one associated entity is required',
48
+ affectedFields: ['associatedEntities'],
49
+ },
50
+ INVALID_ENTITY_TYPE: {
51
+ message: 'Invalid entity type',
52
+ affectedFields: ['associatedEntities'],
53
+ },
54
+ INVALID_CLASSIFICATION: {
55
+ message: 'Invalid classification',
56
+ affectedFields: ['classificationId'],
57
+ },
58
+ INVALID_SETUP_TEMPLATE: {
59
+ message: 'Invalid associated setup template',
60
+ affectedFields: ['associatedSetupTemplateId'],
61
+ },
62
+ OPTION_IN_USE: {
63
+ message: 'This template is currently in use and cannot be deleted',
64
+ affectedFields: [],
65
+ },
66
+ TEMPLATE_NOT_FOUND: {
67
+ message: 'Template not found',
68
+ affectedFields: [],
69
+ },
70
+ };
@@ -2,4 +2,9 @@ import { VALIDATION_MESSAGES } from './validation-messages';
2
2
  export declare const VALIDATION: { [F in keyof typeof VALIDATION_MESSAGES]: {
3
3
  readonly FEATURE: F;
4
4
  } & { [K in keyof (typeof VALIDATION_MESSAGES)[F]]: `${F}.${K & string}`; }; };
5
+ export declare const RELATED_CLIENT_PREFIX = "[Related Client \"";
6
+ export declare const RELATED_CLIENT_SUFFIX = "\"] ";
7
+ export declare const getRelatedClientMessagePrefix: (clientName: string) => string;
8
+ export declare const RELATED_CLIENT_REGEX: RegExp;
9
+ export declare const extractRelatedClientName: (message: string) => string | null;
5
10
  //# sourceMappingURL=validation-constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-constants.d.ts","sourceRoot":"","sources":["../../src/validation/validation-constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAmB5D,eAAO,MAAM,UAAU,EAAkC,GACtD,CAAC,IAAI,MAAM,OAAO,mBAAmB,GAAG;IACvC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;CACrB,GAAG,GACD,CAAC,IAAI,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,GACnE,GACF,CAAC"}
1
+ {"version":3,"file":"validation-constants.d.ts","sourceRoot":"","sources":["../../src/validation/validation-constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAmB5D,eAAO,MAAM,UAAU,EAAkC,GACtD,CAAC,IAAI,MAAM,OAAO,mBAAmB,GAAG;IACvC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;CACrB,GAAG,GACD,CAAC,IAAI,MAAM,CAAC,OAAO,mBAAmB,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,GACnE,GACF,CAAC;AAEF,eAAO,MAAM,qBAAqB,uBAAsB,CAAC;AACzD,eAAO,MAAM,qBAAqB,SAAQ,CAAC;AAE3C,eAAO,MAAM,6BAA6B,GAAI,YAAY,MAAM,KAAG,MACF,CAAC;AAElE,eAAO,MAAM,oBAAoB,QAAsC,CAAC;AAExE,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,MAAM,GAAG,IAGnE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VALIDATION = void 0;
3
+ exports.extractRelatedClientName = exports.RELATED_CLIENT_REGEX = exports.getRelatedClientMessagePrefix = exports.RELATED_CLIENT_SUFFIX = exports.RELATED_CLIENT_PREFIX = exports.VALIDATION = void 0;
4
4
  const validation_messages_1 = require("./validation-messages");
5
5
  const createValidationConstants = () => {
6
6
  const result = {};
@@ -16,3 +16,13 @@ const createValidationConstants = () => {
16
16
  return result;
17
17
  };
18
18
  exports.VALIDATION = createValidationConstants();
19
+ exports.RELATED_CLIENT_PREFIX = '[Related Client "';
20
+ exports.RELATED_CLIENT_SUFFIX = '"] ';
21
+ const getRelatedClientMessagePrefix = (clientName) => `${exports.RELATED_CLIENT_PREFIX}${clientName}${exports.RELATED_CLIENT_SUFFIX}`;
22
+ exports.getRelatedClientMessagePrefix = getRelatedClientMessagePrefix;
23
+ exports.RELATED_CLIENT_REGEX = /^\[Related Client "([^"]+)"\]\s+/i;
24
+ const extractRelatedClientName = (message) => {
25
+ const match = message.match(exports.RELATED_CLIENT_REGEX);
26
+ return match ? match[1] : null;
27
+ };
28
+ exports.extractRelatedClientName = extractRelatedClientName;
@@ -1013,5 +1013,164 @@ export declare const VALIDATION_MESSAGES: {
1013
1013
  readonly affectedFields: readonly ["startDate", "endDate"];
1014
1014
  };
1015
1015
  };
1016
+ readonly TEMPLATES: {
1017
+ readonly NAME_REQUIRED: {
1018
+ readonly message: "Template name is required";
1019
+ readonly affectedFields: readonly ["name"];
1020
+ };
1021
+ readonly NAME_ALREADY_EXISTS: {
1022
+ readonly message: "Template with the name '{name}' already exists";
1023
+ readonly params: readonly ["name"];
1024
+ readonly affectedFields: readonly ["name"];
1025
+ };
1026
+ readonly TYPE_REQUIRED: {
1027
+ readonly message: "Template type is required";
1028
+ readonly affectedFields: readonly ["templateTypeId"];
1029
+ };
1030
+ readonly INVALID_TYPE: {
1031
+ readonly message: "Invalid template type";
1032
+ readonly affectedFields: readonly ["templateTypeId"];
1033
+ };
1034
+ readonly DEFAULT_STAFF_REQUIRED: {
1035
+ readonly message: "Default staff is required";
1036
+ readonly affectedFields: readonly ["defaultStaffId"];
1037
+ };
1038
+ readonly INVALID_STAFF: {
1039
+ readonly message: "Invalid staff member";
1040
+ readonly affectedFields: readonly ["defaultStaffId"];
1041
+ };
1042
+ readonly INCOME_ACCOUNT_REQUIRED: {
1043
+ readonly message: "Income account is required";
1044
+ readonly affectedFields: readonly ["incomeAccountId"];
1045
+ };
1046
+ readonly INVALID_INCOME_ACCOUNT: {
1047
+ readonly message: "Invalid income account";
1048
+ readonly affectedFields: readonly ["incomeAccountId"];
1049
+ };
1050
+ readonly AMOUNT_REQUIRED: {
1051
+ readonly message: "Amount is required when separately charged";
1052
+ readonly affectedFields: readonly ["amount"];
1053
+ };
1054
+ readonly COMMISSION_RATE_REQUIRED: {
1055
+ readonly message: "Commission rate is required when subject to commission";
1056
+ readonly affectedFields: readonly ["commissionRate"];
1057
+ };
1058
+ readonly ENTITY_TYPE_REQUIRED: {
1059
+ readonly message: "At least one associated entity is required";
1060
+ readonly affectedFields: readonly ["associatedEntities"];
1061
+ };
1062
+ readonly INVALID_ENTITY_TYPE: {
1063
+ readonly message: "Invalid entity type";
1064
+ readonly affectedFields: readonly ["associatedEntities"];
1065
+ };
1066
+ readonly INVALID_CLASSIFICATION: {
1067
+ readonly message: "Invalid classification";
1068
+ readonly affectedFields: readonly ["classificationId"];
1069
+ };
1070
+ readonly INVALID_SETUP_TEMPLATE: {
1071
+ readonly message: "Invalid associated setup template";
1072
+ readonly affectedFields: readonly ["associatedSetupTemplateId"];
1073
+ };
1074
+ readonly OPTION_IN_USE: {
1075
+ readonly message: "This template is currently in use and cannot be deleted";
1076
+ readonly affectedFields: readonly [];
1077
+ };
1078
+ readonly TEMPLATE_NOT_FOUND: {
1079
+ readonly message: "Template not found";
1080
+ readonly affectedFields: readonly [];
1081
+ };
1082
+ };
1083
+ readonly TEMPLATE_ASSIGNMENTS: {
1084
+ readonly NAME_REQUIRED: {
1085
+ readonly message: "Assignment name is required";
1086
+ readonly affectedFields: readonly ["name"];
1087
+ };
1088
+ readonly NAME_ALREADY_EXISTS: {
1089
+ readonly message: "This name is already in use on this template. Please enter a different name";
1090
+ readonly affectedFields: readonly ["name"];
1091
+ };
1092
+ readonly DEFAULT_STAFF_REQUIRED: {
1093
+ readonly message: "Default staff is required";
1094
+ readonly affectedFields: readonly ["defaultStaffId"];
1095
+ };
1096
+ readonly INVALID_STAFF: {
1097
+ readonly message: "Invalid staff member";
1098
+ readonly affectedFields: readonly ["defaultStaffId"];
1099
+ };
1100
+ readonly ASSIGNMENT_TYPE_REQUIRED: {
1101
+ readonly message: "Assignment type is required";
1102
+ readonly affectedFields: readonly ["assignmentTypeId"];
1103
+ };
1104
+ readonly INVALID_ASSIGNMENT_TYPE: {
1105
+ readonly message: "Invalid assignment type";
1106
+ readonly affectedFields: readonly ["assignmentTypeId"];
1107
+ };
1108
+ readonly ORDER_REQUIRED: {
1109
+ readonly message: "Order is required for workflow assignments";
1110
+ readonly affectedFields: readonly ["order"];
1111
+ };
1112
+ readonly ORDER_ALREADY_EXISTS: {
1113
+ readonly message: "This order number is already in use on this template. Please enter a different number to set the workflow order";
1114
+ readonly affectedFields: readonly ["order"];
1115
+ };
1116
+ readonly TEMPLATE_NOT_FOUND: {
1117
+ readonly message: "Template not found";
1118
+ readonly affectedFields: readonly [];
1119
+ };
1120
+ readonly ASSIGNMENT_NOT_FOUND: {
1121
+ readonly message: "Assignment not found";
1122
+ readonly affectedFields: readonly [];
1123
+ };
1124
+ readonly CANNOT_EDIT_IN_USE: {
1125
+ readonly message: "This assignment is already being used by a client, and cannot be edited";
1126
+ readonly affectedFields: readonly [];
1127
+ };
1128
+ readonly CANNOT_DELETE_IN_USE: {
1129
+ readonly message: "This assignment is already being used by a client, and cannot be deleted";
1130
+ readonly affectedFields: readonly [];
1131
+ };
1132
+ readonly INVALID_CLIENT_CATEGORY: {
1133
+ readonly message: "Invalid client category";
1134
+ readonly affectedFields: readonly ["clientCategoryId"];
1135
+ };
1136
+ };
1137
+ readonly CLIENT_CATEGORIES: {
1138
+ readonly NAME_REQUIRED: {
1139
+ readonly message: "Client category name is required";
1140
+ readonly affectedFields: readonly ["name"];
1141
+ };
1142
+ readonly NAME_ALREADY_EXISTS: {
1143
+ readonly message: "Client category with the name '{name}' already exists";
1144
+ readonly params: readonly ["name"];
1145
+ readonly affectedFields: readonly ["name"];
1146
+ };
1147
+ readonly OPTION_IN_USE: {
1148
+ readonly message: "This option is currently in use and cannot be deleted";
1149
+ readonly affectedFields: readonly [];
1150
+ };
1151
+ readonly CLIENT_CATEGORY_NOT_FOUND: {
1152
+ readonly message: "Client category not found";
1153
+ readonly affectedFields: readonly [];
1154
+ };
1155
+ };
1156
+ readonly INCOME_ACCOUNTS: {
1157
+ readonly NAME_REQUIRED: {
1158
+ readonly message: "Income account name is required";
1159
+ readonly affectedFields: readonly ["name"];
1160
+ };
1161
+ readonly NAME_ALREADY_EXISTS: {
1162
+ readonly message: "Income account with the name '{name}' already exists";
1163
+ readonly params: readonly ["name"];
1164
+ readonly affectedFields: readonly ["name"];
1165
+ };
1166
+ readonly OPTION_IN_USE: {
1167
+ readonly message: "This option is currently in use and cannot be deleted";
1168
+ readonly affectedFields: readonly [];
1169
+ };
1170
+ readonly INCOME_ACCOUNT_NOT_FOUND: {
1171
+ readonly message: "Income account not found";
1172
+ readonly affectedFields: readonly [];
1173
+ };
1174
+ };
1016
1175
  };
1017
1176
  //# sourceMappingURL=validation-messages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-messages.d.ts","sourceRoot":"","sources":["../../src/validation/validation-messages.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsBtB,CAAC"}
1
+ {"version":3,"file":"validation-messages.d.ts","sourceRoot":"","sources":["../../src/validation/validation-messages.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BtB,CAAC"}
@@ -22,6 +22,10 @@ const roles_and_permissions_validation_messages_1 = require("./features/roles-an
22
22
  const data_filters_validation_messages_1 = require("./features/data-filters.validation-messages");
23
23
  const user_preferences_validation_messages_1 = require("./features/user-preferences.validation-messages");
24
24
  const client_records_outside_providers_validation_messages_1 = require("./features/client-records-outside-providers.validation-messages");
25
+ const templates_validation_messages_1 = require("./features/templates.validation-messages");
26
+ const template_assignments_validation_messages_1 = require("./features/template-assignments.validation-messages");
27
+ const client_categories_validation_messages_1 = require("./features/client-categories.validation-messages");
28
+ const income_accounts_validation_messages_1 = require("./features/income-accounts.validation-messages");
25
29
  exports.VALIDATION_MESSAGES = {
26
30
  ACCOUNT_CATEGORIES: account_categories_validation_messages_1.ACCOUNT_CATEGORIES,
27
31
  ACCOUNT_IDS: account_ids_validation_messages_1.ACCOUNT_IDS,
@@ -44,4 +48,8 @@ exports.VALIDATION_MESSAGES = {
44
48
  DATA_FILTERS: data_filters_validation_messages_1.DATA_FILTERS,
45
49
  USER_PREFERENCES: user_preferences_validation_messages_1.USER_PREFERENCES,
46
50
  CLIENT_RECORDS_OUTSIDE_PROVIDERS: client_records_outside_providers_validation_messages_1.CLIENT_RECORDS_OUTSIDE_PROVIDERS,
51
+ TEMPLATES: templates_validation_messages_1.TEMPLATES,
52
+ TEMPLATE_ASSIGNMENTS: template_assignments_validation_messages_1.TEMPLATE_ASSIGNMENTS,
53
+ CLIENT_CATEGORIES: client_categories_validation_messages_1.CLIENT_CATEGORIES,
54
+ INCOME_ACCOUNTS: income_accounts_validation_messages_1.INCOME_ACCOUNTS,
47
55
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forwardslashns/taskit-validation-messages",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "commonjs",
package/src/index.ts CHANGED
@@ -1,4 +1,20 @@
1
1
  import { getValidationMessage, ValidationMessageResult } from './validation/validation-message.formatter';
2
- import { VALIDATION } from './validation/validation-constants';
2
+ import {
3
+ VALIDATION,
4
+ RELATED_CLIENT_PREFIX,
5
+ RELATED_CLIENT_SUFFIX,
6
+ RELATED_CLIENT_REGEX,
7
+ getRelatedClientMessagePrefix,
8
+ extractRelatedClientName,
9
+ } from './validation/validation-constants';
3
10
 
4
- export { VALIDATION, getValidationMessage, ValidationMessageResult };
11
+ export {
12
+ VALIDATION,
13
+ getValidationMessage,
14
+ ValidationMessageResult,
15
+ RELATED_CLIENT_PREFIX,
16
+ RELATED_CLIENT_SUFFIX,
17
+ RELATED_CLIENT_REGEX,
18
+ getRelatedClientMessagePrefix,
19
+ extractRelatedClientName,
20
+ };
@@ -0,0 +1,19 @@
1
+ export const CLIENT_CATEGORIES = {
2
+ NAME_REQUIRED: {
3
+ message: 'Client category name is required',
4
+ affectedFields: ['name'],
5
+ },
6
+ NAME_ALREADY_EXISTS: {
7
+ message: "Client category with the name '{name}' already exists",
8
+ params: ['name'],
9
+ affectedFields: ['name'],
10
+ },
11
+ OPTION_IN_USE: {
12
+ message: 'This option is currently in use and cannot be deleted',
13
+ affectedFields: [],
14
+ },
15
+ CLIENT_CATEGORY_NOT_FOUND: {
16
+ message: 'Client category not found',
17
+ affectedFields: [],
18
+ },
19
+ } as const;
@@ -0,0 +1,19 @@
1
+ export const INCOME_ACCOUNTS = {
2
+ NAME_REQUIRED: {
3
+ message: 'Income account name is required',
4
+ affectedFields: ['name'],
5
+ },
6
+ NAME_ALREADY_EXISTS: {
7
+ message: "Income account with the name '{name}' already exists",
8
+ params: ['name'],
9
+ affectedFields: ['name'],
10
+ },
11
+ OPTION_IN_USE: {
12
+ message: 'This option is currently in use and cannot be deleted',
13
+ affectedFields: [],
14
+ },
15
+ INCOME_ACCOUNT_NOT_FOUND: {
16
+ message: 'Income account not found',
17
+ affectedFields: [],
18
+ },
19
+ } as const;
@@ -0,0 +1,58 @@
1
+ export const TEMPLATE_ASSIGNMENTS = {
2
+ NAME_REQUIRED: {
3
+ message: 'Assignment name is required',
4
+ affectedFields: ['name'],
5
+ },
6
+ NAME_ALREADY_EXISTS: {
7
+ message:
8
+ 'This name is already in use on this template. Please enter a different name',
9
+ affectedFields: ['name'],
10
+ },
11
+ DEFAULT_STAFF_REQUIRED: {
12
+ message: 'Default staff is required',
13
+ affectedFields: ['defaultStaffId'],
14
+ },
15
+ INVALID_STAFF: {
16
+ message: 'Invalid staff member',
17
+ affectedFields: ['defaultStaffId'],
18
+ },
19
+ ASSIGNMENT_TYPE_REQUIRED: {
20
+ message: 'Assignment type is required',
21
+ affectedFields: ['assignmentTypeId'],
22
+ },
23
+ INVALID_ASSIGNMENT_TYPE: {
24
+ message: 'Invalid assignment type',
25
+ affectedFields: ['assignmentTypeId'],
26
+ },
27
+ ORDER_REQUIRED: {
28
+ message: 'Order is required for workflow assignments',
29
+ affectedFields: ['order'],
30
+ },
31
+ ORDER_ALREADY_EXISTS: {
32
+ message:
33
+ 'This order number is already in use on this template. Please enter a different number to set the workflow order',
34
+ affectedFields: ['order'],
35
+ },
36
+ TEMPLATE_NOT_FOUND: {
37
+ message: 'Template not found',
38
+ affectedFields: [],
39
+ },
40
+ ASSIGNMENT_NOT_FOUND: {
41
+ message: 'Assignment not found',
42
+ affectedFields: [],
43
+ },
44
+ CANNOT_EDIT_IN_USE: {
45
+ message:
46
+ 'This assignment is already being used by a client, and cannot be edited',
47
+ affectedFields: [],
48
+ },
49
+ CANNOT_DELETE_IN_USE: {
50
+ message:
51
+ 'This assignment is already being used by a client, and cannot be deleted',
52
+ affectedFields: [],
53
+ },
54
+ INVALID_CLIENT_CATEGORY: {
55
+ message: 'Invalid client category',
56
+ affectedFields: ['clientCategoryId'],
57
+ },
58
+ } as const;
@@ -0,0 +1,67 @@
1
+ export const TEMPLATES = {
2
+ NAME_REQUIRED: {
3
+ message: 'Template name is required',
4
+ affectedFields: ['name'],
5
+ },
6
+ NAME_ALREADY_EXISTS: {
7
+ message: "Template with the name '{name}' already exists",
8
+ params: ['name'],
9
+ affectedFields: ['name'],
10
+ },
11
+ TYPE_REQUIRED: {
12
+ message: 'Template type is required',
13
+ affectedFields: ['templateTypeId'],
14
+ },
15
+ INVALID_TYPE: {
16
+ message: 'Invalid template type',
17
+ affectedFields: ['templateTypeId'],
18
+ },
19
+ DEFAULT_STAFF_REQUIRED: {
20
+ message: 'Default staff is required',
21
+ affectedFields: ['defaultStaffId'],
22
+ },
23
+ INVALID_STAFF: {
24
+ message: 'Invalid staff member',
25
+ affectedFields: ['defaultStaffId'],
26
+ },
27
+ INCOME_ACCOUNT_REQUIRED: {
28
+ message: 'Income account is required',
29
+ affectedFields: ['incomeAccountId'],
30
+ },
31
+ INVALID_INCOME_ACCOUNT: {
32
+ message: 'Invalid income account',
33
+ affectedFields: ['incomeAccountId'],
34
+ },
35
+ AMOUNT_REQUIRED: {
36
+ message: 'Amount is required when separately charged',
37
+ affectedFields: ['amount'],
38
+ },
39
+ COMMISSION_RATE_REQUIRED: {
40
+ message: 'Commission rate is required when subject to commission',
41
+ affectedFields: ['commissionRate'],
42
+ },
43
+ ENTITY_TYPE_REQUIRED: {
44
+ message: 'At least one associated entity is required',
45
+ affectedFields: ['associatedEntities'],
46
+ },
47
+ INVALID_ENTITY_TYPE: {
48
+ message: 'Invalid entity type',
49
+ affectedFields: ['associatedEntities'],
50
+ },
51
+ INVALID_CLASSIFICATION: {
52
+ message: 'Invalid classification',
53
+ affectedFields: ['classificationId'],
54
+ },
55
+ INVALID_SETUP_TEMPLATE: {
56
+ message: 'Invalid associated setup template',
57
+ affectedFields: ['associatedSetupTemplateId'],
58
+ },
59
+ OPTION_IN_USE: {
60
+ message: 'This template is currently in use and cannot be deleted',
61
+ affectedFields: [],
62
+ },
63
+ TEMPLATE_NOT_FOUND: {
64
+ message: 'Template not found',
65
+ affectedFields: [],
66
+ },
67
+ } as const;
@@ -24,3 +24,16 @@ export const VALIDATION = createValidationConstants() as {
24
24
  [K in keyof (typeof VALIDATION_MESSAGES)[F]]: `${F}.${K & string}`;
25
25
  };
26
26
  };
27
+
28
+ export const RELATED_CLIENT_PREFIX = '[Related Client "';
29
+ export const RELATED_CLIENT_SUFFIX = '"] ';
30
+
31
+ export const getRelatedClientMessagePrefix = (clientName: string): string =>
32
+ `${RELATED_CLIENT_PREFIX}${clientName}${RELATED_CLIENT_SUFFIX}`;
33
+
34
+ export const RELATED_CLIENT_REGEX = /^\[Related Client "([^"]+)"\]\s+/i;
35
+
36
+ export const extractRelatedClientName = (message: string): string | null => {
37
+ const match = message.match(RELATED_CLIENT_REGEX);
38
+ return match ? match[1] : null;
39
+ };
@@ -19,6 +19,10 @@ import { ROLES_AND_PERMISSIONS } from './features/roles-and-permissions.validati
19
19
  import { DATA_FILTERS } from './features/data-filters.validation-messages';
20
20
  import { USER_PREFERENCES } from './features/user-preferences.validation-messages';
21
21
  import { CLIENT_RECORDS_OUTSIDE_PROVIDERS } from './features/client-records-outside-providers.validation-messages';
22
+ import { TEMPLATES } from './features/templates.validation-messages';
23
+ import { TEMPLATE_ASSIGNMENTS } from './features/template-assignments.validation-messages';
24
+ import { CLIENT_CATEGORIES } from './features/client-categories.validation-messages';
25
+ import { INCOME_ACCOUNTS } from './features/income-accounts.validation-messages';
22
26
 
23
27
  export const VALIDATION_MESSAGES = {
24
28
  ACCOUNT_CATEGORIES,
@@ -42,4 +46,8 @@ export const VALIDATION_MESSAGES = {
42
46
  DATA_FILTERS,
43
47
  USER_PREFERENCES,
44
48
  CLIENT_RECORDS_OUTSIDE_PROVIDERS,
49
+ TEMPLATES,
50
+ TEMPLATE_ASSIGNMENTS,
51
+ CLIENT_CATEGORIES,
52
+ INCOME_ACCOUNTS,
45
53
  } as const;