@t4dhg/mcp-factorial 8.2.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +77 -15
  2. package/dist/api/attendance.d.ts +37 -13
  3. package/dist/api/attendance.d.ts.map +1 -1
  4. package/dist/api/attendance.js +161 -31
  5. package/dist/api/attendance.js.map +1 -1
  6. package/dist/api/contracts.js +4 -4
  7. package/dist/api/contracts.js.map +1 -1
  8. package/dist/api/documents.d.ts +6 -5
  9. package/dist/api/documents.d.ts.map +1 -1
  10. package/dist/api/documents.js +17 -12
  11. package/dist/api/documents.js.map +1 -1
  12. package/dist/api/employees.d.ts +5 -3
  13. package/dist/api/employees.d.ts.map +1 -1
  14. package/dist/api/employees.js +7 -5
  15. package/dist/api/employees.js.map +1 -1
  16. package/dist/api/index.d.ts +1 -1
  17. package/dist/api/index.d.ts.map +1 -1
  18. package/dist/api/index.js +1 -1
  19. package/dist/api/index.js.map +1 -1
  20. package/dist/api/time-off.d.ts +6 -1
  21. package/dist/api/time-off.d.ts.map +1 -1
  22. package/dist/api/time-off.js +20 -16
  23. package/dist/api/time-off.js.map +1 -1
  24. package/dist/attendance/backfill.d.ts +36 -0
  25. package/dist/attendance/backfill.d.ts.map +1 -0
  26. package/dist/attendance/backfill.js +104 -0
  27. package/dist/attendance/backfill.js.map +1 -0
  28. package/dist/attendance/gate.d.ts +40 -0
  29. package/dist/attendance/gate.d.ts.map +1 -0
  30. package/dist/attendance/gate.js +63 -0
  31. package/dist/attendance/gate.js.map +1 -0
  32. package/dist/attendance/identity.d.ts +27 -0
  33. package/dist/attendance/identity.d.ts.map +1 -0
  34. package/dist/attendance/identity.js +73 -0
  35. package/dist/attendance/identity.js.map +1 -0
  36. package/dist/attendance/planner.d.ts +147 -0
  37. package/dist/attendance/planner.d.ts.map +1 -0
  38. package/dist/attendance/planner.js +316 -0
  39. package/dist/attendance/planner.js.map +1 -0
  40. package/dist/config.d.ts +1 -1
  41. package/dist/config.d.ts.map +1 -1
  42. package/dist/config.js +4 -1
  43. package/dist/config.js.map +1 -1
  44. package/dist/endpoints.d.ts +5 -0
  45. package/dist/endpoints.d.ts.map +1 -1
  46. package/dist/endpoints.js +5 -0
  47. package/dist/endpoints.js.map +1 -1
  48. package/dist/http-client.d.ts +26 -1
  49. package/dist/http-client.d.ts.map +1 -1
  50. package/dist/http-client.js +68 -8
  51. package/dist/http-client.js.map +1 -1
  52. package/dist/schemas/ats.d.ts +204 -127
  53. package/dist/schemas/ats.d.ts.map +1 -1
  54. package/dist/schemas/ats.js +77 -39
  55. package/dist/schemas/ats.js.map +1 -1
  56. package/dist/schemas/attendance.d.ts +367 -0
  57. package/dist/schemas/attendance.d.ts.map +1 -0
  58. package/dist/schemas/attendance.js +159 -0
  59. package/dist/schemas/attendance.js.map +1 -0
  60. package/dist/schemas/documents.d.ts +75 -45
  61. package/dist/schemas/documents.d.ts.map +1 -1
  62. package/dist/schemas/documents.js +44 -15
  63. package/dist/schemas/documents.js.map +1 -1
  64. package/dist/schemas/employees.d.ts +135 -77
  65. package/dist/schemas/employees.d.ts.map +1 -1
  66. package/dist/schemas/employees.js +65 -30
  67. package/dist/schemas/employees.js.map +1 -1
  68. package/dist/schemas/index.d.ts +3 -2
  69. package/dist/schemas/index.d.ts.map +1 -1
  70. package/dist/schemas/index.js +4 -2
  71. package/dist/schemas/index.js.map +1 -1
  72. package/dist/schemas/job-catalog.d.ts +39 -27
  73. package/dist/schemas/job-catalog.d.ts.map +1 -1
  74. package/dist/schemas/job-catalog.js +16 -9
  75. package/dist/schemas/job-catalog.js.map +1 -1
  76. package/dist/schemas/payroll.d.ts +89 -70
  77. package/dist/schemas/payroll.d.ts.map +1 -1
  78. package/dist/schemas/payroll.js +49 -24
  79. package/dist/schemas/payroll.js.map +1 -1
  80. package/dist/schemas/projects.d.ts +123 -97
  81. package/dist/schemas/projects.d.ts.map +1 -1
  82. package/dist/schemas/projects.js +51 -32
  83. package/dist/schemas/projects.js.map +1 -1
  84. package/dist/schemas/shared.d.ts +13 -0
  85. package/dist/schemas/shared.d.ts.map +1 -1
  86. package/dist/schemas/shared.js +13 -0
  87. package/dist/schemas/shared.js.map +1 -1
  88. package/dist/schemas/time-off.d.ts +244 -187
  89. package/dist/schemas/time-off.d.ts.map +1 -1
  90. package/dist/schemas/time-off.js +96 -63
  91. package/dist/schemas/time-off.js.map +1 -1
  92. package/dist/schemas/training.d.ts +180 -76
  93. package/dist/schemas/training.d.ts.map +1 -1
  94. package/dist/schemas/training.js +75 -25
  95. package/dist/schemas/training.js.map +1 -1
  96. package/dist/schemas/work-areas.d.ts +14 -21
  97. package/dist/schemas/work-areas.d.ts.map +1 -1
  98. package/dist/schemas/work-areas.js +9 -7
  99. package/dist/schemas/work-areas.js.map +1 -1
  100. package/dist/tools/ats.js +3 -3
  101. package/dist/tools/ats.js.map +1 -1
  102. package/dist/tools/attendance.d.ts +9 -1
  103. package/dist/tools/attendance.d.ts.map +1 -1
  104. package/dist/tools/attendance.js +314 -24
  105. package/dist/tools/attendance.js.map +1 -1
  106. package/dist/tools/documents.js +6 -6
  107. package/dist/tools/documents.js.map +1 -1
  108. package/dist/tools/index.js +2 -2
  109. package/dist/tools/index.js.map +1 -1
  110. package/dist/tools/shared.d.ts +2 -2
  111. package/dist/tools/shared.d.ts.map +1 -1
  112. package/dist/tools/shared.js +14 -2
  113. package/dist/tools/shared.js.map +1 -1
  114. package/dist/tools/time-off.d.ts.map +1 -1
  115. package/dist/tools/time-off.js +15 -6
  116. package/dist/tools/time-off.js.map +1 -1
  117. package/dist/tools/work-areas.js +2 -2
  118. package/dist/tools/work-areas.js.map +1 -1
  119. package/dist/types.d.ts +29 -14
  120. package/dist/types.d.ts.map +1 -1
  121. package/dist/write-safety.d.ts +18 -0
  122. package/dist/write-safety.d.ts.map +1 -1
  123. package/dist/write-safety.js +19 -0
  124. package/dist/write-safety.js.map +1 -1
  125. package/llms.txt +6 -4
  126. package/package.json +1 -1
@@ -4,52 +4,94 @@
4
4
  import { z } from 'zod';
5
5
  /**
6
6
  * Job Posting schema
7
+ *
8
+ * Response field set taken from the 2026-07-01 reference; the verification
9
+ * tenant has no job postings, so it could not be checked against a live record.
7
10
  */
8
11
  export declare const JobPostingSchema: z.ZodObject<{
9
- id: z.ZodNumber;
12
+ id: z.ZodString;
13
+ company_id: z.ZodOptional<z.ZodString>;
14
+ ats_company_id: z.ZodOptional<z.ZodString>;
10
15
  title: z.ZodString;
11
16
  description: z.ZodNullable<z.ZodString>;
12
- department: z.ZodNullable<z.ZodString>;
13
- location_id: z.ZodNullable<z.ZodNumber>;
14
- team_id: z.ZodNullable<z.ZodNumber>;
15
- status: z.ZodNullable<z.ZodEnum<["draft", "published", "closed", "archived"]>>;
16
- employment_type: z.ZodNullable<z.ZodString>;
17
- remote_status: z.ZodNullable<z.ZodString>;
18
- company_id: z.ZodNullable<z.ZodNumber>;
17
+ status: z.ZodEnum<["draft", "published", "unlisted", "archived", "cancelled", "deleted"]>;
18
+ contract_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
+ category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
20
+ workplace_type: z.ZodOptional<z.ZodNullable<z.ZodEnum<["onsite", "remote", "hybrid"]>>>;
21
+ remote: z.ZodOptional<z.ZodBoolean>;
22
+ schedule_type: z.ZodOptional<z.ZodNullable<z.ZodEnum<["full_time", "part_time"]>>>;
23
+ team_id: z.ZodNullable<z.ZodString>;
24
+ location_id: z.ZodNullable<z.ZodString>;
25
+ legal_entity_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26
+ salary_format: z.ZodOptional<z.ZodNullable<z.ZodEnum<["fixed_amount", "range"]>>>;
27
+ salary_from_amount_in_cents: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
28
+ salary_to_amount_in_cents: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
29
+ salary_period: z.ZodOptional<z.ZodNullable<z.ZodEnum<["annual", "monthly", "daily"]>>>;
30
+ hide_salary: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
31
+ cv_requirement: z.ZodOptional<z.ZodEnum<["mandatory", "optional", "do_not_ask"]>>;
32
+ cover_letter_requirement: z.ZodOptional<z.ZodEnum<["mandatory", "optional", "do_not_ask"]>>;
33
+ phone_requirement: z.ZodOptional<z.ZodEnum<["mandatory", "optional", "do_not_ask"]>>;
34
+ photo_requirement: z.ZodOptional<z.ZodEnum<["mandatory", "optional", "do_not_ask"]>>;
35
+ personal_url_requirement: z.ZodOptional<z.ZodEnum<["mandatory", "optional", "do_not_ask"]>>;
36
+ url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
37
  published_at: z.ZodNullable<z.ZodString>;
20
- closed_at: z.ZodNullable<z.ZodString>;
21
38
  created_at: z.ZodNullable<z.ZodString>;
22
- updated_at: z.ZodNullable<z.ZodString>;
23
39
  }, "strip", z.ZodTypeAny, {
24
- status: "archived" | "draft" | "published" | "closed" | null;
25
- id: number;
26
- company_id: number | null;
27
- location_id: number | null;
40
+ status: "cancelled" | "archived" | "draft" | "deleted" | "published" | "unlisted";
41
+ id: string;
42
+ location_id: string | null;
28
43
  created_at: string | null;
29
- updated_at: string | null;
30
44
  description: string | null;
31
45
  title: string;
32
- department: string | null;
33
- team_id: number | null;
34
- employment_type: string | null;
35
- remote_status: string | null;
46
+ team_id: string | null;
36
47
  published_at: string | null;
37
- closed_at: string | null;
48
+ company_id?: string | undefined;
49
+ legal_entity_id?: string | null | undefined;
50
+ ats_company_id?: string | undefined;
51
+ contract_type?: string | null | undefined;
52
+ category?: string | null | undefined;
53
+ remote?: boolean | undefined;
54
+ workplace_type?: "onsite" | "remote" | "hybrid" | null | undefined;
55
+ schedule_type?: "full_time" | "part_time" | null | undefined;
56
+ salary_format?: "fixed_amount" | "range" | null | undefined;
57
+ salary_from_amount_in_cents?: number | null | undefined;
58
+ salary_to_amount_in_cents?: number | null | undefined;
59
+ salary_period?: "monthly" | "daily" | "annual" | null | undefined;
60
+ hide_salary?: boolean | null | undefined;
61
+ cv_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
62
+ cover_letter_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
63
+ phone_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
64
+ photo_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
65
+ personal_url_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
66
+ url?: string | null | undefined;
38
67
  }, {
39
- status: "archived" | "draft" | "published" | "closed" | null;
40
- id: number;
41
- company_id: number | null;
42
- location_id: number | null;
68
+ status: "cancelled" | "archived" | "draft" | "deleted" | "published" | "unlisted";
69
+ id: string;
70
+ location_id: string | null;
43
71
  created_at: string | null;
44
- updated_at: string | null;
45
72
  description: string | null;
46
73
  title: string;
47
- department: string | null;
48
- team_id: number | null;
49
- employment_type: string | null;
50
- remote_status: string | null;
74
+ team_id: string | null;
51
75
  published_at: string | null;
52
- closed_at: string | null;
76
+ company_id?: string | undefined;
77
+ legal_entity_id?: string | null | undefined;
78
+ ats_company_id?: string | undefined;
79
+ contract_type?: string | null | undefined;
80
+ category?: string | null | undefined;
81
+ remote?: boolean | undefined;
82
+ workplace_type?: "onsite" | "remote" | "hybrid" | null | undefined;
83
+ schedule_type?: "full_time" | "part_time" | null | undefined;
84
+ salary_format?: "fixed_amount" | "range" | null | undefined;
85
+ salary_from_amount_in_cents?: number | null | undefined;
86
+ salary_to_amount_in_cents?: number | null | undefined;
87
+ salary_period?: "monthly" | "daily" | "annual" | null | undefined;
88
+ hide_salary?: boolean | null | undefined;
89
+ cv_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
90
+ cover_letter_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
91
+ phone_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
92
+ photo_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
93
+ personal_url_requirement?: "mandatory" | "optional" | "do_not_ask" | undefined;
94
+ url?: string | null | undefined;
53
95
  }>;
54
96
  export type JobPosting = z.infer<typeof JobPostingSchema>;
55
97
  /**
@@ -67,16 +109,16 @@ export declare const CreateJobPostingInputSchema: z.ZodObject<{
67
109
  title: string;
68
110
  location_id?: number | undefined;
69
111
  description?: string | undefined;
70
- department?: string | undefined;
71
112
  team_id?: number | undefined;
113
+ department?: string | undefined;
72
114
  employment_type?: string | undefined;
73
115
  remote_status?: string | undefined;
74
116
  }, {
75
117
  title: string;
76
118
  location_id?: number | undefined;
77
119
  description?: string | undefined;
78
- department?: string | undefined;
79
120
  team_id?: number | undefined;
121
+ department?: string | undefined;
80
122
  employment_type?: string | undefined;
81
123
  remote_status?: string | undefined;
82
124
  }>;
@@ -95,67 +137,94 @@ export declare const UpdateJobPostingInputSchema: z.ZodObject<{
95
137
  } & {
96
138
  status: z.ZodOptional<z.ZodEnum<["draft", "published", "closed", "archived"]>>;
97
139
  }, "strip", z.ZodTypeAny, {
98
- status?: "archived" | "draft" | "published" | "closed" | undefined;
140
+ status?: "archived" | "closed" | "draft" | "published" | undefined;
99
141
  location_id?: number | undefined;
100
142
  description?: string | undefined;
101
143
  title?: string | undefined;
102
- department?: string | undefined;
103
144
  team_id?: number | undefined;
145
+ department?: string | undefined;
104
146
  employment_type?: string | undefined;
105
147
  remote_status?: string | undefined;
106
148
  }, {
107
- status?: "archived" | "draft" | "published" | "closed" | undefined;
149
+ status?: "archived" | "closed" | "draft" | "published" | undefined;
108
150
  location_id?: number | undefined;
109
151
  description?: string | undefined;
110
152
  title?: string | undefined;
111
- department?: string | undefined;
112
153
  team_id?: number | undefined;
154
+ department?: string | undefined;
113
155
  employment_type?: string | undefined;
114
156
  remote_status?: string | undefined;
115
157
  }>;
116
158
  export type UpdateJobPostingInput = z.infer<typeof UpdateJobPostingInputSchema>;
117
159
  /**
118
160
  * Candidate schema
161
+ *
162
+ * Response field set taken from the 2026-07-01 reference; the verification
163
+ * tenant has no candidates, so it could not be checked against a live record.
119
164
  */
120
165
  export declare const CandidateSchema: z.ZodObject<{
121
- id: z.ZodNumber;
122
- first_name: z.ZodNullable<z.ZodString>;
123
- last_name: z.ZodNullable<z.ZodString>;
124
- full_name: z.ZodNullable<z.ZodString>;
166
+ id: z.ZodString;
167
+ company_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
168
+ first_name: z.ZodString;
169
+ last_name: z.ZodString;
170
+ full_name: z.ZodString;
125
171
  email: z.ZodNullable<z.ZodString>;
126
- phone: z.ZodNullable<z.ZodString>;
127
- source: z.ZodNullable<z.ZodString>;
128
- resume_url: z.ZodNullable<z.ZodString>;
129
- linkedin_url: z.ZodNullable<z.ZodString>;
130
- company_id: z.ZodNullable<z.ZodNumber>;
172
+ phone_number: z.ZodOptional<z.ZodNullable<z.ZodString>>;
173
+ personal_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
174
+ gender: z.ZodOptional<z.ZodNullable<z.ZodEnum<["female", "male", "unanswered", "other"]>>>;
175
+ talent_pool: z.ZodOptional<z.ZodBoolean>;
176
+ consent_to_talent_pool: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
177
+ consent_given_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
178
+ consent_expiration_date: z.ZodOptional<z.ZodNullable<z.ZodString>>;
179
+ inactive_since: z.ZodOptional<z.ZodNullable<z.ZodString>>;
180
+ medium: z.ZodOptional<z.ZodNullable<z.ZodString>>;
181
+ source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
182
+ score: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
183
+ ats_job_posting_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
131
184
  created_at: z.ZodNullable<z.ZodString>;
132
185
  updated_at: z.ZodNullable<z.ZodString>;
133
186
  }, "strip", z.ZodTypeAny, {
134
- id: number;
135
- first_name: string | null;
136
- last_name: string | null;
137
- full_name: string | null;
187
+ id: string;
188
+ first_name: string;
189
+ last_name: string;
190
+ full_name: string;
138
191
  email: string | null;
139
- company_id: number | null;
140
192
  created_at: string | null;
141
193
  updated_at: string | null;
142
- phone: string | null;
143
- source: string | null;
144
- resume_url: string | null;
145
- linkedin_url: string | null;
194
+ gender?: "male" | "female" | "other" | "unanswered" | null | undefined;
195
+ phone_number?: string | null | undefined;
196
+ company_id?: string | null | undefined;
197
+ personal_url?: string | null | undefined;
198
+ talent_pool?: boolean | undefined;
199
+ consent_to_talent_pool?: boolean | null | undefined;
200
+ consent_given_at?: string | null | undefined;
201
+ consent_expiration_date?: string | null | undefined;
202
+ inactive_since?: string | null | undefined;
203
+ medium?: string | null | undefined;
204
+ source_id?: string | null | undefined;
205
+ score?: number | null | undefined;
206
+ ats_job_posting_ids?: string[] | undefined;
146
207
  }, {
147
- id: number;
148
- first_name: string | null;
149
- last_name: string | null;
150
- full_name: string | null;
208
+ id: string;
209
+ first_name: string;
210
+ last_name: string;
211
+ full_name: string;
151
212
  email: string | null;
152
- company_id: number | null;
153
213
  created_at: string | null;
154
214
  updated_at: string | null;
155
- phone: string | null;
156
- source: string | null;
157
- resume_url: string | null;
158
- linkedin_url: string | null;
215
+ gender?: "male" | "female" | "other" | "unanswered" | null | undefined;
216
+ phone_number?: string | null | undefined;
217
+ company_id?: string | null | undefined;
218
+ personal_url?: string | null | undefined;
219
+ talent_pool?: boolean | undefined;
220
+ consent_to_talent_pool?: boolean | null | undefined;
221
+ consent_given_at?: string | null | undefined;
222
+ consent_expiration_date?: string | null | undefined;
223
+ inactive_since?: string | null | undefined;
224
+ medium?: string | null | undefined;
225
+ source_id?: string | null | undefined;
226
+ score?: number | null | undefined;
227
+ ats_job_posting_ids?: string[] | undefined;
159
228
  }>;
160
229
  export type Candidate = z.infer<typeof CandidateSchema>;
161
230
  /**
@@ -172,15 +241,15 @@ export declare const CreateCandidateInputSchema: z.ZodObject<{
172
241
  first_name: string;
173
242
  last_name: string;
174
243
  email?: string | undefined;
175
- phone?: string | undefined;
176
244
  source?: string | undefined;
245
+ phone?: string | undefined;
177
246
  linkedin_url?: string | undefined;
178
247
  }, {
179
248
  first_name: string;
180
249
  last_name: string;
181
250
  email?: string | undefined;
182
- phone?: string | undefined;
183
251
  source?: string | undefined;
252
+ phone?: string | undefined;
184
253
  linkedin_url?: string | undefined;
185
254
  }>;
186
255
  export type CreateCandidateInput = z.infer<typeof CreateCandidateInputSchema>;
@@ -198,63 +267,77 @@ export declare const UpdateCandidateInputSchema: z.ZodObject<{
198
267
  first_name?: string | undefined;
199
268
  last_name?: string | undefined;
200
269
  email?: string | undefined;
201
- phone?: string | undefined;
202
270
  source?: string | undefined;
271
+ phone?: string | undefined;
203
272
  linkedin_url?: string | undefined;
204
273
  }, {
205
274
  first_name?: string | undefined;
206
275
  last_name?: string | undefined;
207
276
  email?: string | undefined;
208
- phone?: string | undefined;
209
277
  source?: string | undefined;
278
+ phone?: string | undefined;
210
279
  linkedin_url?: string | undefined;
211
280
  }>;
212
281
  export type UpdateCandidateInput = z.infer<typeof UpdateCandidateInputSchema>;
213
282
  /**
214
283
  * Application schema
284
+ *
285
+ * Response field set taken from the 2026-07-01 reference; the verification
286
+ * tenant has no applications, so it could not be checked against a live record.
287
+ * Foreign keys are prefixed `ats_` (ats_job_posting_id, ats_candidate_id) and
288
+ * the pipeline position is `ats_application_phase_id`.
215
289
  */
216
290
  export declare const ApplicationSchema: z.ZodObject<{
217
- id: z.ZodNumber;
218
- job_posting_id: z.ZodNumber;
219
- candidate_id: z.ZodNumber;
220
- hiring_stage_id: z.ZodNullable<z.ZodNumber>;
221
- ats_application_phase_id: z.ZodNullable<z.ZodNumber>;
222
- status: z.ZodNullable<z.ZodString>;
223
- rating: z.ZodNullable<z.ZodNumber>;
224
- notes: z.ZodNullable<z.ZodString>;
225
- applied_at: z.ZodNullable<z.ZodString>;
226
- rejected_at: z.ZodNullable<z.ZodString>;
227
- hired_at: z.ZodNullable<z.ZodString>;
291
+ id: z.ZodString;
292
+ company_id: z.ZodOptional<z.ZodString>;
293
+ ats_job_posting_id: z.ZodString;
294
+ ats_candidate_id: z.ZodString;
295
+ ats_application_phase_id: z.ZodNullable<z.ZodString>;
296
+ ats_conversation_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
297
+ ats_rejection_reason_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
298
+ employee_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
299
+ source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
300
+ qualified: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
301
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
302
+ medium: z.ZodOptional<z.ZodNullable<z.ZodString>>;
303
+ cover_letter: z.ZodOptional<z.ZodNullable<z.ZodString>>;
304
+ cv: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
305
+ rating_average: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
228
306
  created_at: z.ZodNullable<z.ZodString>;
229
- updated_at: z.ZodNullable<z.ZodString>;
230
307
  }, "strip", z.ZodTypeAny, {
231
- status: string | null;
232
- id: number;
308
+ id: string;
233
309
  created_at: string | null;
234
- updated_at: string | null;
235
- notes: string | null;
236
- job_posting_id: number;
237
- candidate_id: number;
238
- hiring_stage_id: number | null;
239
- ats_application_phase_id: number | null;
240
- rating: number | null;
241
- applied_at: string | null;
242
- rejected_at: string | null;
243
- hired_at: string | null;
310
+ ats_job_posting_id: string;
311
+ ats_candidate_id: string;
312
+ ats_application_phase_id: string | null;
313
+ company_id?: string | undefined;
314
+ employee_id?: string | null | undefined;
315
+ medium?: string | null | undefined;
316
+ source_id?: string | null | undefined;
317
+ phone?: string | null | undefined;
318
+ ats_conversation_id?: string | null | undefined;
319
+ ats_rejection_reason_id?: string | null | undefined;
320
+ qualified?: boolean | null | undefined;
321
+ cover_letter?: string | null | undefined;
322
+ cv?: Record<string, unknown> | null | undefined;
323
+ rating_average?: number | null | undefined;
244
324
  }, {
245
- status: string | null;
246
- id: number;
325
+ id: string;
247
326
  created_at: string | null;
248
- updated_at: string | null;
249
- notes: string | null;
250
- job_posting_id: number;
251
- candidate_id: number;
252
- hiring_stage_id: number | null;
253
- ats_application_phase_id: number | null;
254
- rating: number | null;
255
- applied_at: string | null;
256
- rejected_at: string | null;
257
- hired_at: string | null;
327
+ ats_job_posting_id: string;
328
+ ats_candidate_id: string;
329
+ ats_application_phase_id: string | null;
330
+ company_id?: string | undefined;
331
+ employee_id?: string | null | undefined;
332
+ medium?: string | null | undefined;
333
+ source_id?: string | null | undefined;
334
+ phone?: string | null | undefined;
335
+ ats_conversation_id?: string | null | undefined;
336
+ ats_rejection_reason_id?: string | null | undefined;
337
+ qualified?: boolean | null | undefined;
338
+ cover_letter?: string | null | undefined;
339
+ cv?: Record<string, unknown> | null | undefined;
340
+ rating_average?: number | null | undefined;
258
341
  }>;
259
342
  export type Application = z.infer<typeof ApplicationSchema>;
260
343
  /**
@@ -293,34 +376,28 @@ export declare const UpdateApplicationInputSchema: z.ZodObject<{
293
376
  export type UpdateApplicationInput = z.infer<typeof UpdateApplicationInputSchema>;
294
377
  /**
295
378
  * Hiring Stage schema
379
+ *
380
+ * Field set verified against live /ats/hiring_stages responses on API
381
+ * version 2026-07-01. Hiring stages carry no timestamps.
296
382
  */
297
383
  export declare const HiringStageSchema: z.ZodObject<{
298
- id: z.ZodNumber;
299
- name: z.ZodString;
300
- label: z.ZodNullable<z.ZodString>;
301
- ats_application_phase_id: z.ZodNullable<z.ZodNumber>;
302
- position: z.ZodNullable<z.ZodNumber>;
303
- company_id: z.ZodNullable<z.ZodNumber>;
304
- created_at: z.ZodNullable<z.ZodString>;
305
- updated_at: z.ZodNullable<z.ZodString>;
384
+ id: z.ZodString;
385
+ name: z.ZodEnum<["new", "screening", "interview", "assessment", "offer", "hired"]>;
386
+ label: z.ZodString;
387
+ position: z.ZodNumber;
388
+ company_id: z.ZodNullable<z.ZodString>;
306
389
  }, "strip", z.ZodTypeAny, {
307
- id: number;
308
- company_id: number | null;
309
- created_at: string | null;
310
- updated_at: string | null;
311
- name: string;
312
- ats_application_phase_id: number | null;
313
- label: string | null;
314
- position: number | null;
390
+ id: string;
391
+ company_id: string | null;
392
+ name: "new" | "screening" | "interview" | "assessment" | "offer" | "hired";
393
+ position: number;
394
+ label: string;
315
395
  }, {
316
- id: number;
317
- company_id: number | null;
318
- created_at: string | null;
319
- updated_at: string | null;
320
- name: string;
321
- ats_application_phase_id: number | null;
322
- label: string | null;
323
- position: number | null;
396
+ id: string;
397
+ company_id: string | null;
398
+ name: "new" | "screening" | "interview" | "assessment" | "offer" | "hired";
399
+ position: number;
400
+ label: string;
324
401
  }>;
325
402
  export type HiringStage = z.infer<typeof HiringStageSchema>;
326
403
  //# sourceMappingURL=ats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ats.d.ts","sourceRoot":"","sources":["../../src/schemas/ats.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;EAQtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;EAOrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;EAAuC,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;EAIvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;EAIvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"ats.d.ts","sourceRoot":"","sources":["../../src/schemas/ats.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6B3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;EAQtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;EAOrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;EAAuC,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;EAIvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;EAIvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -2,24 +2,42 @@
2
2
  * ATS (Applicant Tracking System) schemas: JobPosting, Candidate, Application, HiringStage
3
3
  */
4
4
  import { z } from 'zod';
5
+ import { resourceId } from './shared.js';
5
6
  /**
6
7
  * Job Posting schema
8
+ *
9
+ * Response field set taken from the 2026-07-01 reference; the verification
10
+ * tenant has no job postings, so it could not be checked against a live record.
7
11
  */
8
12
  export const JobPostingSchema = z.object({
9
- id: z.number(),
13
+ id: resourceId,
14
+ company_id: resourceId.optional(),
15
+ ats_company_id: resourceId.optional(),
10
16
  title: z.string(),
11
17
  description: z.string().nullable(),
12
- department: z.string().nullable(),
13
- location_id: z.number().nullable(),
14
- team_id: z.number().nullable(),
15
- status: z.enum(['draft', 'published', 'closed', 'archived']).nullable(),
16
- employment_type: z.string().nullable(),
17
- remote_status: z.string().nullable(),
18
- company_id: z.number().nullable(),
18
+ status: z.enum(['draft', 'published', 'unlisted', 'archived', 'cancelled', 'deleted']),
19
+ contract_type: z.string().nullable().optional(),
20
+ // Added in API 2026-07-01
21
+ category: z.string().nullable().optional(),
22
+ workplace_type: z.enum(['onsite', 'remote', 'hybrid']).nullable().optional(),
23
+ remote: z.boolean().optional(),
24
+ schedule_type: z.enum(['full_time', 'part_time']).nullable().optional(),
25
+ team_id: resourceId.nullable(),
26
+ location_id: resourceId.nullable(),
27
+ legal_entity_id: resourceId.nullable().optional(),
28
+ salary_format: z.enum(['fixed_amount', 'range']).nullable().optional(),
29
+ salary_from_amount_in_cents: z.number().nullable().optional(),
30
+ salary_to_amount_in_cents: z.number().nullable().optional(),
31
+ salary_period: z.enum(['annual', 'monthly', 'daily']).nullable().optional(),
32
+ hide_salary: z.boolean().nullable().optional(),
33
+ cv_requirement: z.enum(['mandatory', 'optional', 'do_not_ask']).optional(),
34
+ cover_letter_requirement: z.enum(['mandatory', 'optional', 'do_not_ask']).optional(),
35
+ phone_requirement: z.enum(['mandatory', 'optional', 'do_not_ask']).optional(),
36
+ photo_requirement: z.enum(['mandatory', 'optional', 'do_not_ask']).optional(),
37
+ personal_url_requirement: z.enum(['mandatory', 'optional', 'do_not_ask']).optional(),
38
+ url: z.string().nullable().optional(),
19
39
  published_at: z.string().nullable(),
20
- closed_at: z.string().nullable(),
21
40
  created_at: z.string().nullable(),
22
- updated_at: z.string().nullable(),
23
41
  });
24
42
  /**
25
43
  * Job Posting create input schema
@@ -41,18 +59,29 @@ export const UpdateJobPostingInputSchema = CreateJobPostingInputSchema.partial()
41
59
  });
42
60
  /**
43
61
  * Candidate schema
62
+ *
63
+ * Response field set taken from the 2026-07-01 reference; the verification
64
+ * tenant has no candidates, so it could not be checked against a live record.
44
65
  */
45
66
  export const CandidateSchema = z.object({
46
- id: z.number(),
47
- first_name: z.string().nullable(),
48
- last_name: z.string().nullable(),
49
- full_name: z.string().nullable(),
67
+ id: resourceId,
68
+ company_id: resourceId.nullable().optional(),
69
+ first_name: z.string(),
70
+ last_name: z.string(),
71
+ full_name: z.string(),
50
72
  email: z.string().nullable(),
51
- phone: z.string().nullable(),
52
- source: z.string().nullable(),
53
- resume_url: z.string().nullable(),
54
- linkedin_url: z.string().nullable(),
55
- company_id: z.number().nullable(),
73
+ phone_number: z.string().nullable().optional(),
74
+ personal_url: z.string().nullable().optional(),
75
+ gender: z.enum(['female', 'male', 'unanswered', 'other']).nullable().optional(),
76
+ talent_pool: z.boolean().optional(),
77
+ consent_to_talent_pool: z.boolean().nullable().optional(),
78
+ consent_given_at: z.string().nullable().optional(),
79
+ consent_expiration_date: z.string().nullable().optional(),
80
+ inactive_since: z.string().nullable().optional(),
81
+ medium: z.string().nullable().optional(),
82
+ source_id: resourceId.nullable().optional(),
83
+ score: z.number().nullable().optional(),
84
+ ats_job_posting_ids: z.array(resourceId).optional(),
56
85
  created_at: z.string().nullable(),
57
86
  updated_at: z.string().nullable(),
58
87
  });
@@ -73,21 +102,30 @@ export const CreateCandidateInputSchema = z.object({
73
102
  export const UpdateCandidateInputSchema = CreateCandidateInputSchema.partial();
74
103
  /**
75
104
  * Application schema
105
+ *
106
+ * Response field set taken from the 2026-07-01 reference; the verification
107
+ * tenant has no applications, so it could not be checked against a live record.
108
+ * Foreign keys are prefixed `ats_` (ats_job_posting_id, ats_candidate_id) and
109
+ * the pipeline position is `ats_application_phase_id`.
76
110
  */
77
111
  export const ApplicationSchema = z.object({
78
- id: z.number(),
79
- job_posting_id: z.number(),
80
- candidate_id: z.number(),
81
- hiring_stage_id: z.number().nullable(),
82
- ats_application_phase_id: z.number().nullable(),
83
- status: z.string().nullable(),
84
- rating: z.number().nullable(),
85
- notes: z.string().nullable(),
86
- applied_at: z.string().nullable(),
87
- rejected_at: z.string().nullable(),
88
- hired_at: z.string().nullable(),
112
+ id: resourceId,
113
+ company_id: resourceId.optional(),
114
+ ats_job_posting_id: resourceId,
115
+ ats_candidate_id: resourceId,
116
+ ats_application_phase_id: resourceId.nullable(),
117
+ ats_conversation_id: resourceId.nullable().optional(),
118
+ ats_rejection_reason_id: resourceId.nullable().optional(),
119
+ employee_id: resourceId.nullable().optional(),
120
+ source_id: resourceId.nullable().optional(),
121
+ qualified: z.boolean().nullable().optional(),
122
+ phone: z.string().nullable().optional(),
123
+ medium: z.string().nullable().optional(),
124
+ cover_letter: z.string().nullable().optional(),
125
+ // Added in API 2026-07-01: CV attachment (filename, url, byte_size, content_type, created_at)
126
+ cv: z.record(z.string(), z.unknown()).nullable().optional(),
127
+ rating_average: z.number().nullable().optional(),
89
128
  created_at: z.string().nullable(),
90
- updated_at: z.string().nullable(),
91
129
  });
92
130
  /**
93
131
  * Application create input schema
@@ -107,15 +145,15 @@ export const UpdateApplicationInputSchema = z.object({
107
145
  });
108
146
  /**
109
147
  * Hiring Stage schema
148
+ *
149
+ * Field set verified against live /ats/hiring_stages responses on API
150
+ * version 2026-07-01. Hiring stages carry no timestamps.
110
151
  */
111
152
  export const HiringStageSchema = z.object({
112
- id: z.number(),
113
- name: z.string(),
114
- label: z.string().nullable(),
115
- ats_application_phase_id: z.number().nullable(),
116
- position: z.number().nullable(),
117
- company_id: z.number().nullable(),
118
- created_at: z.string().nullable(),
119
- updated_at: z.string().nullable(),
153
+ id: resourceId,
154
+ name: z.enum(['new', 'screening', 'interview', 'assessment', 'offer', 'hired']),
155
+ label: z.string(),
156
+ position: z.number(),
157
+ company_id: resourceId.nullable(),
120
158
  });
121
159
  //# sourceMappingURL=ats.js.map