@voyantjs/legal 0.2.0 → 0.3.1

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 (32) hide show
  1. package/dist/contracts/routes.d.ts +94 -1
  2. package/dist/contracts/routes.d.ts.map +1 -1
  3. package/dist/contracts/routes.js +27 -1
  4. package/dist/contracts/service-contracts.d.ts +1234 -0
  5. package/dist/contracts/service-contracts.d.ts.map +1 -0
  6. package/dist/contracts/service-contracts.js +233 -0
  7. package/dist/contracts/service-series.d.ts +68 -0
  8. package/dist/contracts/service-series.d.ts.map +1 -0
  9. package/dist/contracts/service-series.js +34 -0
  10. package/dist/contracts/service-shared.d.ts +32 -0
  11. package/dist/contracts/service-shared.d.ts.map +1 -0
  12. package/dist/contracts/service-shared.js +142 -0
  13. package/dist/contracts/service-templates.d.ts +434 -0
  14. package/dist/contracts/service-templates.d.ts.map +1 -0
  15. package/dist/contracts/service-templates.js +132 -0
  16. package/dist/contracts/service.d.ts +882 -909
  17. package/dist/contracts/service.d.ts.map +1 -1
  18. package/dist/contracts/service.js +8 -568
  19. package/dist/contracts/validation.d.ts +14 -0
  20. package/dist/contracts/validation.d.ts.map +1 -1
  21. package/dist/contracts/validation.js +16 -0
  22. package/dist/policies/routes.d.ts +2 -2
  23. package/dist/policies/service-core.d.ts +1336 -0
  24. package/dist/policies/service-core.d.ts.map +1 -0
  25. package/dist/policies/service-core.js +357 -0
  26. package/dist/policies/service-shared.d.ts +43 -0
  27. package/dist/policies/service-shared.d.ts.map +1 -0
  28. package/dist/policies/service-shared.js +30 -0
  29. package/dist/policies/service.d.ts +28 -76
  30. package/dist/policies/service.d.ts.map +1 -1
  31. package/dist/policies/service.js +4 -436
  32. package/package.json +6 -6
@@ -1,54 +1,31 @@
1
- import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
2
- import type { z } from "zod";
3
- import type { contractListQuerySchema, contractTemplateListQuerySchema, insertContractAttachmentSchema, insertContractNumberSeriesSchema, insertContractSchema, insertContractSignatureSchema, insertContractTemplateSchema, insertContractTemplateVersionSchema, renderTemplateInputSchema, updateContractAttachmentSchema, updateContractNumberSeriesSchema, updateContractSchema, updateContractTemplateSchema } from "./validation.js";
4
- type ContractListQuery = z.infer<typeof contractListQuerySchema>;
5
- type ContractTemplateListQuery = z.infer<typeof contractTemplateListQuerySchema>;
6
- type CreateContractTemplateInput = z.infer<typeof insertContractTemplateSchema>;
7
- type UpdateContractTemplateInput = z.infer<typeof updateContractTemplateSchema>;
8
- type CreateContractTemplateVersionInput = z.infer<typeof insertContractTemplateVersionSchema>;
9
- type CreateContractNumberSeriesInput = z.infer<typeof insertContractNumberSeriesSchema>;
10
- type UpdateContractNumberSeriesInput = z.infer<typeof updateContractNumberSeriesSchema>;
11
- type CreateContractInput = z.infer<typeof insertContractSchema>;
12
- type UpdateContractInput = z.infer<typeof updateContractSchema>;
13
- type CreateContractSignatureInput = z.infer<typeof insertContractSignatureSchema>;
14
- type CreateContractAttachmentInput = z.infer<typeof insertContractAttachmentSchema>;
15
- type UpdateContractAttachmentInput = z.infer<typeof updateContractAttachmentSchema>;
16
- type RenderTemplateInput = z.infer<typeof renderTemplateInputSchema>;
17
- /**
18
- * Substitute variables in a template body. Supports:
19
- * - markdown / html / plain text: mustache replacement `{{path.to.value}}`
20
- * - lexical_json: walks the AST, rewriting text nodes only
21
- */
22
- export declare function renderTemplate(body: string, bodyFormat: "markdown" | "html" | "lexical_json", variables: Record<string, unknown>): string;
23
- /**
24
- * Validate variable values against a template's variableSchema (JSON object
25
- * shape describing required fields). Returns a list of issues; empty array
26
- * means valid.
27
- */
28
- export declare function validateTemplateVariables(variableSchema: unknown, values: Record<string, unknown>): string[];
29
- /**
30
- * Transactionally allocate the next sequence number for a series. Honors the
31
- * reset strategy (never/annual/monthly). Uses SELECT ... FOR UPDATE to avoid
32
- * concurrent-increment races.
33
- */
34
- export declare function allocateContractNumber(db: PostgresJsDatabase, seriesId: string): Promise<{
35
- number: string;
36
- sequence: number;
37
- } | null>;
1
+ import { allocateContractNumber, renderTemplate, validateTemplateVariables } from "./service-shared.js";
2
+ export { allocateContractNumber, renderTemplate, validateTemplateVariables };
38
3
  export declare const contractsService: {
39
- listTemplates(db: PostgresJsDatabase, query: ContractTemplateListQuery): Promise<{
4
+ listContracts(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: import("./service-shared.js").ContractListQuery): Promise<{
40
5
  data: {
41
6
  id: string;
42
- name: string;
43
- slug: string;
7
+ contractNumber: string | null;
44
8
  scope: "customer" | "partner" | "supplier" | "other" | "channel";
9
+ status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
10
+ title: string;
11
+ templateVersionId: string | null;
12
+ seriesId: string | null;
13
+ personId: string | null;
14
+ organizationId: string | null;
15
+ supplierId: string | null;
16
+ channelId: string | null;
17
+ bookingId: string | null;
18
+ orderId: string | null;
19
+ issuedAt: Date | null;
20
+ sentAt: Date | null;
21
+ executedAt: Date | null;
22
+ expiresAt: Date | null;
23
+ voidedAt: Date | null;
45
24
  language: string;
46
- description: string | null;
47
- bodyFormat: "markdown" | "html" | "lexical_json";
48
- body: string;
49
- variableSchema: unknown;
50
- currentVersionId: string | null;
51
- active: boolean;
25
+ renderedBodyFormat: "markdown" | "html" | "lexical_json";
26
+ renderedBody: string | null;
27
+ variables: unknown;
28
+ metadata: unknown;
52
29
  createdAt: Date;
53
30
  updatedAt: Date;
54
31
  }[];
@@ -56,58 +33,206 @@ export declare const contractsService: {
56
33
  limit: number;
57
34
  offset: number;
58
35
  }>;
59
- getTemplateById(db: PostgresJsDatabase, id: string): Promise<{
36
+ getContractById(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
60
37
  id: string;
61
- name: string;
62
- slug: string;
38
+ contractNumber: string | null;
63
39
  scope: "customer" | "partner" | "supplier" | "other" | "channel";
40
+ status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
41
+ title: string;
42
+ templateVersionId: string | null;
43
+ seriesId: string | null;
44
+ personId: string | null;
45
+ organizationId: string | null;
46
+ supplierId: string | null;
47
+ channelId: string | null;
48
+ bookingId: string | null;
49
+ orderId: string | null;
50
+ issuedAt: Date | null;
51
+ sentAt: Date | null;
52
+ executedAt: Date | null;
53
+ expiresAt: Date | null;
54
+ voidedAt: Date | null;
64
55
  language: string;
65
- description: string | null;
66
- bodyFormat: "markdown" | "html" | "lexical_json";
67
- body: string;
68
- variableSchema: unknown;
69
- currentVersionId: string | null;
70
- active: boolean;
56
+ renderedBodyFormat: "markdown" | "html" | "lexical_json";
57
+ renderedBody: string | null;
58
+ variables: unknown;
59
+ metadata: unknown;
71
60
  createdAt: Date;
72
61
  updatedAt: Date;
73
62
  } | null>;
74
- createTemplate(db: PostgresJsDatabase, data: CreateContractTemplateInput): Promise<{
63
+ createContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, data: import("./service-shared.js").CreateContractInput): Promise<{
75
64
  id: string;
76
- name: string;
77
- active: boolean;
65
+ status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
78
66
  createdAt: Date;
79
67
  updatedAt: Date;
80
- description: string | null;
81
- slug: string;
68
+ organizationId: string | null;
69
+ personId: string | null;
70
+ sentAt: Date | null;
71
+ title: string;
72
+ metadata: unknown;
73
+ supplierId: string | null;
82
74
  scope: "customer" | "partner" | "supplier" | "other" | "channel";
83
75
  language: string;
84
- bodyFormat: "markdown" | "html" | "lexical_json";
85
- body: string;
86
- variableSchema: unknown;
87
- currentVersionId: string | null;
76
+ contractNumber: string | null;
77
+ templateVersionId: string | null;
78
+ seriesId: string | null;
79
+ channelId: string | null;
80
+ bookingId: string | null;
81
+ orderId: string | null;
82
+ issuedAt: Date | null;
83
+ executedAt: Date | null;
84
+ expiresAt: Date | null;
85
+ voidedAt: Date | null;
86
+ renderedBodyFormat: "markdown" | "html" | "lexical_json";
87
+ renderedBody: string | null;
88
+ variables: unknown;
88
89
  } | null>;
89
- updateTemplate(db: PostgresJsDatabase, id: string, data: UpdateContractTemplateInput): Promise<{
90
+ updateContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string, data: import("./service-shared.js").UpdateContractInput): Promise<{
90
91
  id: string;
91
- name: string;
92
- slug: string;
92
+ contractNumber: string | null;
93
93
  scope: "customer" | "partner" | "supplier" | "other" | "channel";
94
+ status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
95
+ title: string;
96
+ templateVersionId: string | null;
97
+ seriesId: string | null;
98
+ personId: string | null;
99
+ organizationId: string | null;
100
+ supplierId: string | null;
101
+ channelId: string | null;
102
+ bookingId: string | null;
103
+ orderId: string | null;
104
+ issuedAt: Date | null;
105
+ sentAt: Date | null;
106
+ executedAt: Date | null;
107
+ expiresAt: Date | null;
108
+ voidedAt: Date | null;
94
109
  language: string;
95
- description: string | null;
96
- bodyFormat: "markdown" | "html" | "lexical_json";
97
- body: string;
98
- variableSchema: unknown;
99
- currentVersionId: string | null;
100
- active: boolean;
110
+ renderedBodyFormat: "markdown" | "html" | "lexical_json";
111
+ renderedBody: string | null;
112
+ variables: unknown;
113
+ metadata: unknown;
101
114
  createdAt: Date;
102
115
  updatedAt: Date;
103
116
  } | null>;
104
- deleteTemplate(db: PostgresJsDatabase, id: string): Promise<{
105
- id: string;
106
- } | null>;
107
- listTemplateVersions(db: PostgresJsDatabase, templateId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"contract_template_versions", {
117
+ deleteContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
118
+ status: "not_found";
119
+ } | {
120
+ status: "not_draft";
121
+ } | {
122
+ status: "deleted";
123
+ }>;
124
+ issueContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string): Promise<{
125
+ status: "not_found";
126
+ contract?: undefined;
127
+ } | {
128
+ status: "not_draft";
129
+ contract?: undefined;
130
+ } | {
131
+ status: "issued";
132
+ contract: {
133
+ id: string;
134
+ contractNumber: string | null;
135
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
136
+ status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
137
+ title: string;
138
+ templateVersionId: string | null;
139
+ seriesId: string | null;
140
+ personId: string | null;
141
+ organizationId: string | null;
142
+ supplierId: string | null;
143
+ channelId: string | null;
144
+ bookingId: string | null;
145
+ orderId: string | null;
146
+ issuedAt: Date | null;
147
+ sentAt: Date | null;
148
+ executedAt: Date | null;
149
+ expiresAt: Date | null;
150
+ voidedAt: Date | null;
151
+ language: string;
152
+ renderedBodyFormat: "markdown" | "html" | "lexical_json";
153
+ renderedBody: string | null;
154
+ variables: unknown;
155
+ metadata: unknown;
156
+ createdAt: Date;
157
+ updatedAt: Date;
158
+ } | null;
159
+ }>;
160
+ sendContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string): Promise<{
161
+ status: "not_found";
162
+ contract?: undefined;
163
+ } | {
164
+ status: "not_issued";
165
+ contract?: undefined;
166
+ } | {
167
+ status: "sent";
168
+ contract: {
169
+ id: string;
170
+ contractNumber: string | null;
171
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
172
+ status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
173
+ title: string;
174
+ templateVersionId: string | null;
175
+ seriesId: string | null;
176
+ personId: string | null;
177
+ organizationId: string | null;
178
+ supplierId: string | null;
179
+ channelId: string | null;
180
+ bookingId: string | null;
181
+ orderId: string | null;
182
+ issuedAt: Date | null;
183
+ sentAt: Date | null;
184
+ executedAt: Date | null;
185
+ expiresAt: Date | null;
186
+ voidedAt: Date | null;
187
+ language: string;
188
+ renderedBodyFormat: "markdown" | "html" | "lexical_json";
189
+ renderedBody: string | null;
190
+ variables: unknown;
191
+ metadata: unknown;
192
+ createdAt: Date;
193
+ updatedAt: Date;
194
+ } | null;
195
+ }>;
196
+ voidContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string): Promise<{
197
+ status: "not_found";
198
+ contract?: undefined;
199
+ } | {
200
+ status: "already_void";
201
+ contract?: undefined;
202
+ } | {
203
+ status: "voided";
204
+ contract: {
205
+ id: string;
206
+ contractNumber: string | null;
207
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
208
+ status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
209
+ title: string;
210
+ templateVersionId: string | null;
211
+ seriesId: string | null;
212
+ personId: string | null;
213
+ organizationId: string | null;
214
+ supplierId: string | null;
215
+ channelId: string | null;
216
+ bookingId: string | null;
217
+ orderId: string | null;
218
+ issuedAt: Date | null;
219
+ sentAt: Date | null;
220
+ executedAt: Date | null;
221
+ expiresAt: Date | null;
222
+ voidedAt: Date | null;
223
+ language: string;
224
+ renderedBodyFormat: "markdown" | "html" | "lexical_json";
225
+ renderedBody: string | null;
226
+ variables: unknown;
227
+ metadata: unknown;
228
+ createdAt: Date;
229
+ updatedAt: Date;
230
+ } | null;
231
+ }>;
232
+ listSignatures(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"contract_signatures", {
108
233
  id: import("drizzle-orm/pg-core").PgColumn<{
109
234
  name: string;
110
- tableName: "contract_template_versions";
235
+ tableName: "contract_signatures";
111
236
  dataType: "string";
112
237
  columnType: "PgText";
113
238
  data: string;
@@ -122,9 +247,9 @@ export declare const contractsService: {
122
247
  identity: undefined;
123
248
  generated: undefined;
124
249
  }, {}, {}>;
125
- templateId: import("drizzle-orm/pg-core").PgColumn<{
250
+ contractId: import("drizzle-orm/pg-core").PgColumn<{
126
251
  name: string;
127
- tableName: "contract_template_versions";
252
+ tableName: "contract_signatures";
128
253
  dataType: "string";
129
254
  columnType: "PgText";
130
255
  data: string;
@@ -139,48 +264,99 @@ export declare const contractsService: {
139
264
  identity: undefined;
140
265
  generated: undefined;
141
266
  }, {}, {}>;
142
- version: import("drizzle-orm/pg-core").PgColumn<{
143
- name: "version";
144
- tableName: "contract_template_versions";
145
- dataType: "number";
146
- columnType: "PgInteger";
147
- data: number;
148
- driverParam: string | number;
267
+ signerName: import("drizzle-orm/pg-core").PgColumn<{
268
+ name: "signer_name";
269
+ tableName: "contract_signatures";
270
+ dataType: "string";
271
+ columnType: "PgText";
272
+ data: string;
273
+ driverParam: string;
149
274
  notNull: true;
150
275
  hasDefault: false;
151
276
  isPrimaryKey: false;
152
277
  isAutoincrement: false;
153
278
  hasRuntimeDefault: false;
154
- enumValues: undefined;
279
+ enumValues: [string, ...string[]];
155
280
  baseColumn: never;
156
281
  identity: undefined;
157
282
  generated: undefined;
158
283
  }, {}, {}>;
159
- bodyFormat: import("drizzle-orm/pg-core").PgColumn<{
160
- name: "body_format";
161
- tableName: "contract_template_versions";
284
+ signerEmail: import("drizzle-orm/pg-core").PgColumn<{
285
+ name: "signer_email";
286
+ tableName: "contract_signatures";
162
287
  dataType: "string";
163
- columnType: "PgEnumColumn";
164
- data: "markdown" | "html" | "lexical_json";
165
- driverParam: string;
288
+ columnType: "PgText";
289
+ data: string;
290
+ driverParam: string;
291
+ notNull: false;
292
+ hasDefault: false;
293
+ isPrimaryKey: false;
294
+ isAutoincrement: false;
295
+ hasRuntimeDefault: false;
296
+ enumValues: [string, ...string[]];
297
+ baseColumn: never;
298
+ identity: undefined;
299
+ generated: undefined;
300
+ }, {}, {}>;
301
+ signerRole: import("drizzle-orm/pg-core").PgColumn<{
302
+ name: "signer_role";
303
+ tableName: "contract_signatures";
304
+ dataType: "string";
305
+ columnType: "PgText";
306
+ data: string;
307
+ driverParam: string;
308
+ notNull: false;
309
+ hasDefault: false;
310
+ isPrimaryKey: false;
311
+ isAutoincrement: false;
312
+ hasRuntimeDefault: false;
313
+ enumValues: [string, ...string[]];
314
+ baseColumn: never;
315
+ identity: undefined;
316
+ generated: undefined;
317
+ }, {}, {}>;
318
+ personId: import("drizzle-orm/pg-core").PgColumn<{
319
+ name: string;
320
+ tableName: "contract_signatures";
321
+ dataType: "string";
322
+ columnType: "PgText";
323
+ data: string;
324
+ driverParam: string;
325
+ notNull: false;
326
+ hasDefault: false;
327
+ isPrimaryKey: false;
328
+ isAutoincrement: false;
329
+ hasRuntimeDefault: false;
330
+ enumValues: [string, ...string[]];
331
+ baseColumn: never;
332
+ identity: undefined;
333
+ generated: undefined;
334
+ }, {}, {}>;
335
+ method: import("drizzle-orm/pg-core").PgColumn<{
336
+ name: "method";
337
+ tableName: "contract_signatures";
338
+ dataType: "string";
339
+ columnType: "PgEnumColumn";
340
+ data: "other" | "manual" | "electronic" | "docusign";
341
+ driverParam: string;
166
342
  notNull: true;
167
343
  hasDefault: true;
168
344
  isPrimaryKey: false;
169
345
  isAutoincrement: false;
170
346
  hasRuntimeDefault: false;
171
- enumValues: ["markdown", "html", "lexical_json"];
347
+ enumValues: ["manual", "electronic", "docusign", "other"];
172
348
  baseColumn: never;
173
349
  identity: undefined;
174
350
  generated: undefined;
175
351
  }, {}, {}>;
176
- body: import("drizzle-orm/pg-core").PgColumn<{
177
- name: "body";
178
- tableName: "contract_template_versions";
352
+ provider: import("drizzle-orm/pg-core").PgColumn<{
353
+ name: "provider";
354
+ tableName: "contract_signatures";
179
355
  dataType: "string";
180
356
  columnType: "PgText";
181
357
  data: string;
182
358
  driverParam: string;
183
- notNull: true;
359
+ notNull: false;
184
360
  hasDefault: false;
185
361
  isPrimaryKey: false;
186
362
  isAutoincrement: false;
@@ -190,26 +366,26 @@ export declare const contractsService: {
190
366
  identity: undefined;
191
367
  generated: undefined;
192
368
  }, {}, {}>;
193
- variableSchema: import("drizzle-orm/pg-core").PgColumn<{
194
- name: "variable_schema";
195
- tableName: "contract_template_versions";
196
- dataType: "json";
197
- columnType: "PgJsonb";
198
- data: unknown;
199
- driverParam: unknown;
369
+ externalReference: import("drizzle-orm/pg-core").PgColumn<{
370
+ name: "external_reference";
371
+ tableName: "contract_signatures";
372
+ dataType: "string";
373
+ columnType: "PgText";
374
+ data: string;
375
+ driverParam: string;
200
376
  notNull: false;
201
377
  hasDefault: false;
202
378
  isPrimaryKey: false;
203
379
  isAutoincrement: false;
204
380
  hasRuntimeDefault: false;
205
- enumValues: undefined;
381
+ enumValues: [string, ...string[]];
206
382
  baseColumn: never;
207
383
  identity: undefined;
208
384
  generated: undefined;
209
385
  }, {}, {}>;
210
- changelog: import("drizzle-orm/pg-core").PgColumn<{
211
- name: "changelog";
212
- tableName: "contract_template_versions";
386
+ signatureData: import("drizzle-orm/pg-core").PgColumn<{
387
+ name: "signature_data";
388
+ tableName: "contract_signatures";
213
389
  dataType: "string";
214
390
  columnType: "PgText";
215
391
  data: string;
@@ -224,9 +400,26 @@ export declare const contractsService: {
224
400
  identity: undefined;
225
401
  generated: undefined;
226
402
  }, {}, {}>;
227
- createdBy: import("drizzle-orm/pg-core").PgColumn<{
228
- name: "created_by";
229
- tableName: "contract_template_versions";
403
+ ipAddress: import("drizzle-orm/pg-core").PgColumn<{
404
+ name: "ip_address";
405
+ tableName: "contract_signatures";
406
+ dataType: "string";
407
+ columnType: "PgText";
408
+ data: string;
409
+ driverParam: string;
410
+ notNull: false;
411
+ hasDefault: false;
412
+ isPrimaryKey: false;
413
+ isAutoincrement: false;
414
+ hasRuntimeDefault: false;
415
+ enumValues: [string, ...string[]];
416
+ baseColumn: never;
417
+ identity: undefined;
418
+ generated: undefined;
419
+ }, {}, {}>;
420
+ userAgent: import("drizzle-orm/pg-core").PgColumn<{
421
+ name: "user_agent";
422
+ tableName: "contract_signatures";
230
423
  dataType: "string";
231
424
  columnType: "PgText";
232
425
  data: string;
@@ -241,9 +434,43 @@ export declare const contractsService: {
241
434
  identity: undefined;
242
435
  generated: undefined;
243
436
  }, {}, {}>;
437
+ signedAt: import("drizzle-orm/pg-core").PgColumn<{
438
+ name: "signed_at";
439
+ tableName: "contract_signatures";
440
+ dataType: "date";
441
+ columnType: "PgTimestamp";
442
+ data: Date;
443
+ driverParam: string;
444
+ notNull: true;
445
+ hasDefault: true;
446
+ isPrimaryKey: false;
447
+ isAutoincrement: false;
448
+ hasRuntimeDefault: false;
449
+ enumValues: undefined;
450
+ baseColumn: never;
451
+ identity: undefined;
452
+ generated: undefined;
453
+ }, {}, {}>;
454
+ metadata: import("drizzle-orm/pg-core").PgColumn<{
455
+ name: "metadata";
456
+ tableName: "contract_signatures";
457
+ dataType: "json";
458
+ columnType: "PgJsonb";
459
+ data: unknown;
460
+ driverParam: unknown;
461
+ notNull: false;
462
+ hasDefault: false;
463
+ isPrimaryKey: false;
464
+ isAutoincrement: false;
465
+ hasRuntimeDefault: false;
466
+ enumValues: undefined;
467
+ baseColumn: never;
468
+ identity: undefined;
469
+ generated: undefined;
470
+ }, {}, {}>;
244
471
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
245
472
  name: "created_at";
246
- tableName: "contract_template_versions";
473
+ tableName: "contract_signatures";
247
474
  dataType: "date";
248
475
  columnType: "PgTimestamp";
249
476
  data: Date;
@@ -258,20 +485,26 @@ export declare const contractsService: {
258
485
  identity: undefined;
259
486
  generated: undefined;
260
487
  }, {}, {}>;
261
- }, "single", Record<"contract_template_versions", "not-null">, false, "where" | "orderBy", {
488
+ }, "single", Record<"contract_signatures", "not-null">, false, "where" | "orderBy", {
262
489
  id: string;
263
- templateId: string;
264
- version: number;
265
- bodyFormat: "markdown" | "html" | "lexical_json";
266
- body: string;
267
- variableSchema: unknown;
268
- changelog: string | null;
269
- createdBy: string | null;
490
+ contractId: string;
491
+ signerName: string;
492
+ signerEmail: string | null;
493
+ signerRole: string | null;
494
+ personId: string | null;
495
+ method: "other" | "manual" | "electronic" | "docusign";
496
+ provider: string | null;
497
+ externalReference: string | null;
498
+ signatureData: string | null;
499
+ ipAddress: string | null;
500
+ userAgent: string | null;
501
+ signedAt: Date;
502
+ metadata: unknown;
270
503
  createdAt: Date;
271
504
  }[], {
272
505
  id: import("drizzle-orm/pg-core").PgColumn<{
273
506
  name: string;
274
- tableName: "contract_template_versions";
507
+ tableName: "contract_signatures";
275
508
  dataType: "string";
276
509
  columnType: "PgText";
277
510
  data: string;
@@ -286,9 +519,9 @@ export declare const contractsService: {
286
519
  identity: undefined;
287
520
  generated: undefined;
288
521
  }, {}, {}>;
289
- templateId: import("drizzle-orm/pg-core").PgColumn<{
522
+ contractId: import("drizzle-orm/pg-core").PgColumn<{
290
523
  name: string;
291
- tableName: "contract_template_versions";
524
+ tableName: "contract_signatures";
292
525
  dataType: "string";
293
526
  columnType: "PgText";
294
527
  data: string;
@@ -303,48 +536,48 @@ export declare const contractsService: {
303
536
  identity: undefined;
304
537
  generated: undefined;
305
538
  }, {}, {}>;
306
- version: import("drizzle-orm/pg-core").PgColumn<{
307
- name: "version";
308
- tableName: "contract_template_versions";
309
- dataType: "number";
310
- columnType: "PgInteger";
311
- data: number;
312
- driverParam: string | number;
539
+ signerName: import("drizzle-orm/pg-core").PgColumn<{
540
+ name: "signer_name";
541
+ tableName: "contract_signatures";
542
+ dataType: "string";
543
+ columnType: "PgText";
544
+ data: string;
545
+ driverParam: string;
313
546
  notNull: true;
314
547
  hasDefault: false;
315
548
  isPrimaryKey: false;
316
549
  isAutoincrement: false;
317
550
  hasRuntimeDefault: false;
318
- enumValues: undefined;
551
+ enumValues: [string, ...string[]];
319
552
  baseColumn: never;
320
553
  identity: undefined;
321
554
  generated: undefined;
322
555
  }, {}, {}>;
323
- bodyFormat: import("drizzle-orm/pg-core").PgColumn<{
324
- name: "body_format";
325
- tableName: "contract_template_versions";
556
+ signerEmail: import("drizzle-orm/pg-core").PgColumn<{
557
+ name: "signer_email";
558
+ tableName: "contract_signatures";
326
559
  dataType: "string";
327
- columnType: "PgEnumColumn";
328
- data: "markdown" | "html" | "lexical_json";
560
+ columnType: "PgText";
561
+ data: string;
329
562
  driverParam: string;
330
- notNull: true;
331
- hasDefault: true;
563
+ notNull: false;
564
+ hasDefault: false;
332
565
  isPrimaryKey: false;
333
566
  isAutoincrement: false;
334
567
  hasRuntimeDefault: false;
335
- enumValues: ["markdown", "html", "lexical_json"];
568
+ enumValues: [string, ...string[]];
336
569
  baseColumn: never;
337
570
  identity: undefined;
338
571
  generated: undefined;
339
572
  }, {}, {}>;
340
- body: import("drizzle-orm/pg-core").PgColumn<{
341
- name: "body";
342
- tableName: "contract_template_versions";
573
+ signerRole: import("drizzle-orm/pg-core").PgColumn<{
574
+ name: "signer_role";
575
+ tableName: "contract_signatures";
343
576
  dataType: "string";
344
577
  columnType: "PgText";
345
578
  data: string;
346
579
  driverParam: string;
347
- notNull: true;
580
+ notNull: false;
348
581
  hasDefault: false;
349
582
  isPrimaryKey: false;
350
583
  isAutoincrement: false;
@@ -354,43 +587,43 @@ export declare const contractsService: {
354
587
  identity: undefined;
355
588
  generated: undefined;
356
589
  }, {}, {}>;
357
- variableSchema: import("drizzle-orm/pg-core").PgColumn<{
358
- name: "variable_schema";
359
- tableName: "contract_template_versions";
360
- dataType: "json";
361
- columnType: "PgJsonb";
362
- data: unknown;
363
- driverParam: unknown;
590
+ personId: import("drizzle-orm/pg-core").PgColumn<{
591
+ name: string;
592
+ tableName: "contract_signatures";
593
+ dataType: "string";
594
+ columnType: "PgText";
595
+ data: string;
596
+ driverParam: string;
364
597
  notNull: false;
365
598
  hasDefault: false;
366
599
  isPrimaryKey: false;
367
600
  isAutoincrement: false;
368
601
  hasRuntimeDefault: false;
369
- enumValues: undefined;
602
+ enumValues: [string, ...string[]];
370
603
  baseColumn: never;
371
604
  identity: undefined;
372
605
  generated: undefined;
373
606
  }, {}, {}>;
374
- changelog: import("drizzle-orm/pg-core").PgColumn<{
375
- name: "changelog";
376
- tableName: "contract_template_versions";
607
+ method: import("drizzle-orm/pg-core").PgColumn<{
608
+ name: "method";
609
+ tableName: "contract_signatures";
377
610
  dataType: "string";
378
- columnType: "PgText";
379
- data: string;
611
+ columnType: "PgEnumColumn";
612
+ data: "other" | "manual" | "electronic" | "docusign";
380
613
  driverParam: string;
381
- notNull: false;
382
- hasDefault: false;
614
+ notNull: true;
615
+ hasDefault: true;
383
616
  isPrimaryKey: false;
384
617
  isAutoincrement: false;
385
618
  hasRuntimeDefault: false;
386
- enumValues: [string, ...string[]];
619
+ enumValues: ["manual", "electronic", "docusign", "other"];
387
620
  baseColumn: never;
388
621
  identity: undefined;
389
622
  generated: undefined;
390
623
  }, {}, {}>;
391
- createdBy: import("drizzle-orm/pg-core").PgColumn<{
392
- name: "created_by";
393
- tableName: "contract_template_versions";
624
+ provider: import("drizzle-orm/pg-core").PgColumn<{
625
+ name: "provider";
626
+ tableName: "contract_signatures";
394
627
  dataType: "string";
395
628
  columnType: "PgText";
396
629
  data: string;
@@ -405,11 +638,113 @@ export declare const contractsService: {
405
638
  identity: undefined;
406
639
  generated: undefined;
407
640
  }, {}, {}>;
408
- createdAt: import("drizzle-orm/pg-core").PgColumn<{
409
- name: "created_at";
410
- tableName: "contract_template_versions";
411
- dataType: "date";
412
- columnType: "PgTimestamp";
641
+ externalReference: import("drizzle-orm/pg-core").PgColumn<{
642
+ name: "external_reference";
643
+ tableName: "contract_signatures";
644
+ dataType: "string";
645
+ columnType: "PgText";
646
+ data: string;
647
+ driverParam: string;
648
+ notNull: false;
649
+ hasDefault: false;
650
+ isPrimaryKey: false;
651
+ isAutoincrement: false;
652
+ hasRuntimeDefault: false;
653
+ enumValues: [string, ...string[]];
654
+ baseColumn: never;
655
+ identity: undefined;
656
+ generated: undefined;
657
+ }, {}, {}>;
658
+ signatureData: import("drizzle-orm/pg-core").PgColumn<{
659
+ name: "signature_data";
660
+ tableName: "contract_signatures";
661
+ dataType: "string";
662
+ columnType: "PgText";
663
+ data: string;
664
+ driverParam: string;
665
+ notNull: false;
666
+ hasDefault: false;
667
+ isPrimaryKey: false;
668
+ isAutoincrement: false;
669
+ hasRuntimeDefault: false;
670
+ enumValues: [string, ...string[]];
671
+ baseColumn: never;
672
+ identity: undefined;
673
+ generated: undefined;
674
+ }, {}, {}>;
675
+ ipAddress: import("drizzle-orm/pg-core").PgColumn<{
676
+ name: "ip_address";
677
+ tableName: "contract_signatures";
678
+ dataType: "string";
679
+ columnType: "PgText";
680
+ data: string;
681
+ driverParam: string;
682
+ notNull: false;
683
+ hasDefault: false;
684
+ isPrimaryKey: false;
685
+ isAutoincrement: false;
686
+ hasRuntimeDefault: false;
687
+ enumValues: [string, ...string[]];
688
+ baseColumn: never;
689
+ identity: undefined;
690
+ generated: undefined;
691
+ }, {}, {}>;
692
+ userAgent: import("drizzle-orm/pg-core").PgColumn<{
693
+ name: "user_agent";
694
+ tableName: "contract_signatures";
695
+ dataType: "string";
696
+ columnType: "PgText";
697
+ data: string;
698
+ driverParam: string;
699
+ notNull: false;
700
+ hasDefault: false;
701
+ isPrimaryKey: false;
702
+ isAutoincrement: false;
703
+ hasRuntimeDefault: false;
704
+ enumValues: [string, ...string[]];
705
+ baseColumn: never;
706
+ identity: undefined;
707
+ generated: undefined;
708
+ }, {}, {}>;
709
+ signedAt: import("drizzle-orm/pg-core").PgColumn<{
710
+ name: "signed_at";
711
+ tableName: "contract_signatures";
712
+ dataType: "date";
713
+ columnType: "PgTimestamp";
714
+ data: Date;
715
+ driverParam: string;
716
+ notNull: true;
717
+ hasDefault: true;
718
+ isPrimaryKey: false;
719
+ isAutoincrement: false;
720
+ hasRuntimeDefault: false;
721
+ enumValues: undefined;
722
+ baseColumn: never;
723
+ identity: undefined;
724
+ generated: undefined;
725
+ }, {}, {}>;
726
+ metadata: import("drizzle-orm/pg-core").PgColumn<{
727
+ name: "metadata";
728
+ tableName: "contract_signatures";
729
+ dataType: "json";
730
+ columnType: "PgJsonb";
731
+ data: unknown;
732
+ driverParam: unknown;
733
+ notNull: false;
734
+ hasDefault: false;
735
+ isPrimaryKey: false;
736
+ isAutoincrement: false;
737
+ hasRuntimeDefault: false;
738
+ enumValues: undefined;
739
+ baseColumn: never;
740
+ identity: undefined;
741
+ generated: undefined;
742
+ }, {}, {}>;
743
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
744
+ name: "created_at";
745
+ tableName: "contract_signatures";
746
+ dataType: "date";
747
+ columnType: "PgTimestamp";
413
748
  data: Date;
414
749
  driverParam: string;
415
750
  notNull: true;
@@ -423,224 +758,16 @@ export declare const contractsService: {
423
758
  generated: undefined;
424
759
  }, {}, {}>;
425
760
  }>, "where" | "orderBy">;
426
- getTemplateVersionById(db: PostgresJsDatabase, id: string): Promise<{
427
- id: string;
428
- templateId: string;
429
- version: number;
430
- bodyFormat: "markdown" | "html" | "lexical_json";
431
- body: string;
432
- variableSchema: unknown;
433
- changelog: string | null;
434
- createdBy: string | null;
435
- createdAt: Date;
436
- } | null>;
437
- createTemplateVersion(db: PostgresJsDatabase, templateId: string, data: CreateContractTemplateVersionInput): Promise<{
438
- id: string;
439
- createdAt: Date;
440
- bodyFormat: "markdown" | "html" | "lexical_json";
441
- body: string;
442
- variableSchema: unknown;
443
- templateId: string;
444
- version: number;
445
- changelog: string | null;
446
- createdBy: string | null;
447
- } | null>;
448
- listSeries(db: PostgresJsDatabase): Promise<{
449
- id: string;
450
- code: string;
451
- name: string;
452
- prefix: string;
453
- separator: string;
454
- padLength: number;
455
- currentSequence: number;
456
- resetStrategy: "never" | "annual" | "monthly";
457
- resetAt: Date | null;
458
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
459
- active: boolean;
460
- createdAt: Date;
461
- updatedAt: Date;
462
- }[]>;
463
- getSeriesById(db: PostgresJsDatabase, id: string): Promise<{
464
- id: string;
465
- code: string;
466
- name: string;
467
- prefix: string;
468
- separator: string;
469
- padLength: number;
470
- currentSequence: number;
471
- resetStrategy: "never" | "annual" | "monthly";
472
- resetAt: Date | null;
473
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
474
- active: boolean;
475
- createdAt: Date;
476
- updatedAt: Date;
477
- } | null>;
478
- createSeries(db: PostgresJsDatabase, data: CreateContractNumberSeriesInput): Promise<{
479
- id: string;
480
- name: string;
481
- active: boolean;
482
- createdAt: Date;
483
- updatedAt: Date;
484
- code: string;
485
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
486
- prefix: string;
487
- separator: string;
488
- padLength: number;
489
- currentSequence: number;
490
- resetStrategy: "never" | "annual" | "monthly";
491
- resetAt: Date | null;
492
- } | null>;
493
- updateSeries(db: PostgresJsDatabase, id: string, data: UpdateContractNumberSeriesInput): Promise<{
494
- id: string;
495
- code: string;
496
- name: string;
497
- prefix: string;
498
- separator: string;
499
- padLength: number;
500
- currentSequence: number;
501
- resetStrategy: "never" | "annual" | "monthly";
502
- resetAt: Date | null;
503
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
504
- active: boolean;
505
- createdAt: Date;
506
- updatedAt: Date;
507
- } | null>;
508
- deleteSeries(db: PostgresJsDatabase, id: string): Promise<{
509
- id: string;
510
- } | null>;
511
- listContracts(db: PostgresJsDatabase, query: ContractListQuery): Promise<{
512
- data: {
513
- id: string;
514
- contractNumber: string | null;
515
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
516
- status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
517
- title: string;
518
- templateVersionId: string | null;
519
- seriesId: string | null;
520
- personId: string | null;
521
- organizationId: string | null;
522
- supplierId: string | null;
523
- channelId: string | null;
524
- bookingId: string | null;
525
- orderId: string | null;
526
- issuedAt: Date | null;
527
- sentAt: Date | null;
528
- executedAt: Date | null;
529
- expiresAt: Date | null;
530
- voidedAt: Date | null;
531
- language: string;
532
- renderedBodyFormat: "markdown" | "html" | "lexical_json";
533
- renderedBody: string | null;
534
- variables: unknown;
535
- metadata: unknown;
536
- createdAt: Date;
537
- updatedAt: Date;
538
- }[];
539
- total: number;
540
- limit: number;
541
- offset: number;
542
- }>;
543
- getContractById(db: PostgresJsDatabase, id: string): Promise<{
544
- id: string;
545
- contractNumber: string | null;
546
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
547
- status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
548
- title: string;
549
- templateVersionId: string | null;
550
- seriesId: string | null;
551
- personId: string | null;
552
- organizationId: string | null;
553
- supplierId: string | null;
554
- channelId: string | null;
555
- bookingId: string | null;
556
- orderId: string | null;
557
- issuedAt: Date | null;
558
- sentAt: Date | null;
559
- executedAt: Date | null;
560
- expiresAt: Date | null;
561
- voidedAt: Date | null;
562
- language: string;
563
- renderedBodyFormat: "markdown" | "html" | "lexical_json";
564
- renderedBody: string | null;
565
- variables: unknown;
566
- metadata: unknown;
567
- createdAt: Date;
568
- updatedAt: Date;
569
- } | null>;
570
- createContract(db: PostgresJsDatabase, data: CreateContractInput): Promise<{
571
- id: string;
572
- status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
573
- createdAt: Date;
574
- updatedAt: Date;
575
- organizationId: string | null;
576
- title: string;
577
- personId: string | null;
578
- sentAt: Date | null;
579
- metadata: unknown;
580
- supplierId: string | null;
581
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
582
- language: string;
583
- contractNumber: string | null;
584
- templateVersionId: string | null;
585
- seriesId: string | null;
586
- channelId: string | null;
587
- bookingId: string | null;
588
- orderId: string | null;
589
- issuedAt: Date | null;
590
- executedAt: Date | null;
591
- expiresAt: Date | null;
592
- voidedAt: Date | null;
593
- renderedBodyFormat: "markdown" | "html" | "lexical_json";
594
- renderedBody: string | null;
595
- variables: unknown;
596
- } | null>;
597
- updateContract(db: PostgresJsDatabase, id: string, data: UpdateContractInput): Promise<{
598
- id: string;
599
- contractNumber: string | null;
600
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
601
- status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
602
- title: string;
603
- templateVersionId: string | null;
604
- seriesId: string | null;
605
- personId: string | null;
606
- organizationId: string | null;
607
- supplierId: string | null;
608
- channelId: string | null;
609
- bookingId: string | null;
610
- orderId: string | null;
611
- issuedAt: Date | null;
612
- sentAt: Date | null;
613
- executedAt: Date | null;
614
- expiresAt: Date | null;
615
- voidedAt: Date | null;
616
- language: string;
617
- renderedBodyFormat: "markdown" | "html" | "lexical_json";
618
- renderedBody: string | null;
619
- variables: unknown;
620
- metadata: unknown;
621
- createdAt: Date;
622
- updatedAt: Date;
623
- } | null>;
624
- deleteContract(db: PostgresJsDatabase, id: string): Promise<{
625
- status: "not_found";
626
- } | {
627
- status: "not_draft";
628
- } | {
629
- status: "deleted";
630
- }>;
631
- /**
632
- * Transition a draft contract to `issued`: renders body from the template
633
- * version, allocates a contract number if a series is set, timestamps
634
- * `issuedAt`. Returns null if contract is missing or not in `draft`.
635
- */
636
- issueContract(db: PostgresJsDatabase, contractId: string): Promise<{
761
+ signContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string, data: import("./service-shared.js").CreateContractSignatureInput): Promise<{
637
762
  status: "not_found";
638
763
  contract?: undefined;
764
+ signature?: undefined;
639
765
  } | {
640
- status: "not_draft";
766
+ status: "not_signable";
641
767
  contract?: undefined;
768
+ signature?: undefined;
642
769
  } | {
643
- status: "issued";
770
+ status: "signed";
644
771
  contract: {
645
772
  id: string;
646
773
  contractNumber: string | null;
@@ -668,51 +795,32 @@ export declare const contractsService: {
668
795
  createdAt: Date;
669
796
  updatedAt: Date;
670
797
  } | null;
671
- }>;
672
- sendContract(db: PostgresJsDatabase, contractId: string): Promise<{
673
- status: "not_found";
674
- contract?: undefined;
675
- } | {
676
- status: "not_issued";
677
- contract?: undefined;
678
- } | {
679
- status: "sent";
680
- contract: {
798
+ signature: {
681
799
  id: string;
682
- contractNumber: string | null;
683
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
684
- status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
685
- title: string;
686
- templateVersionId: string | null;
687
- seriesId: string | null;
800
+ createdAt: Date;
688
801
  personId: string | null;
689
- organizationId: string | null;
690
- supplierId: string | null;
691
- channelId: string | null;
692
- bookingId: string | null;
693
- orderId: string | null;
694
- issuedAt: Date | null;
695
- sentAt: Date | null;
696
- executedAt: Date | null;
697
- expiresAt: Date | null;
698
- voidedAt: Date | null;
699
- language: string;
700
- renderedBodyFormat: "markdown" | "html" | "lexical_json";
701
- renderedBody: string | null;
702
- variables: unknown;
703
802
  metadata: unknown;
704
- createdAt: Date;
705
- updatedAt: Date;
803
+ contractId: string;
804
+ signerName: string;
805
+ signerEmail: string | null;
806
+ signerRole: string | null;
807
+ method: "other" | "manual" | "electronic" | "docusign";
808
+ provider: string | null;
809
+ externalReference: string | null;
810
+ signatureData: string | null;
811
+ ipAddress: string | null;
812
+ userAgent: string | null;
813
+ signedAt: Date;
706
814
  } | null;
707
815
  }>;
708
- voidContract(db: PostgresJsDatabase, contractId: string): Promise<{
816
+ executeContract(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string): Promise<{
709
817
  status: "not_found";
710
818
  contract?: undefined;
711
819
  } | {
712
- status: "already_void";
820
+ status: "not_signed";
713
821
  contract?: undefined;
714
822
  } | {
715
- status: "voided";
823
+ status: "executed";
716
824
  contract: {
717
825
  id: string;
718
826
  contractNumber: string | null;
@@ -734,90 +842,39 @@ export declare const contractsService: {
734
842
  voidedAt: Date | null;
735
843
  language: string;
736
844
  renderedBodyFormat: "markdown" | "html" | "lexical_json";
737
- renderedBody: string | null;
738
- variables: unknown;
739
- metadata: unknown;
740
- createdAt: Date;
741
- updatedAt: Date;
742
- } | null;
743
- }>;
744
- listSignatures(db: PostgresJsDatabase, contractId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"contract_signatures", {
745
- id: import("drizzle-orm/pg-core").PgColumn<{
746
- name: string;
747
- tableName: "contract_signatures";
748
- dataType: "string";
749
- columnType: "PgText";
750
- data: string;
751
- driverParam: string;
752
- notNull: true;
753
- hasDefault: true;
754
- isPrimaryKey: true;
755
- isAutoincrement: false;
756
- hasRuntimeDefault: true;
757
- enumValues: [string, ...string[]];
758
- baseColumn: never;
759
- identity: undefined;
760
- generated: undefined;
761
- }, {}, {}>;
762
- contractId: import("drizzle-orm/pg-core").PgColumn<{
763
- name: string;
764
- tableName: "contract_signatures";
765
- dataType: "string";
766
- columnType: "PgText";
767
- data: string;
768
- driverParam: string;
769
- notNull: true;
770
- hasDefault: false;
771
- isPrimaryKey: false;
772
- isAutoincrement: false;
773
- hasRuntimeDefault: false;
774
- enumValues: [string, ...string[]];
775
- baseColumn: never;
776
- identity: undefined;
777
- generated: undefined;
778
- }, {}, {}>;
779
- signerName: import("drizzle-orm/pg-core").PgColumn<{
780
- name: "signer_name";
781
- tableName: "contract_signatures";
845
+ renderedBody: string | null;
846
+ variables: unknown;
847
+ metadata: unknown;
848
+ createdAt: Date;
849
+ updatedAt: Date;
850
+ } | null;
851
+ }>;
852
+ listAttachments(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"contract_attachments", {
853
+ id: import("drizzle-orm/pg-core").PgColumn<{
854
+ name: string;
855
+ tableName: "contract_attachments";
782
856
  dataType: "string";
783
857
  columnType: "PgText";
784
858
  data: string;
785
859
  driverParam: string;
786
860
  notNull: true;
787
- hasDefault: false;
788
- isPrimaryKey: false;
789
- isAutoincrement: false;
790
- hasRuntimeDefault: false;
791
- enumValues: [string, ...string[]];
792
- baseColumn: never;
793
- identity: undefined;
794
- generated: undefined;
795
- }, {}, {}>;
796
- signerEmail: import("drizzle-orm/pg-core").PgColumn<{
797
- name: "signer_email";
798
- tableName: "contract_signatures";
799
- dataType: "string";
800
- columnType: "PgText";
801
- data: string;
802
- driverParam: string;
803
- notNull: false;
804
- hasDefault: false;
805
- isPrimaryKey: false;
861
+ hasDefault: true;
862
+ isPrimaryKey: true;
806
863
  isAutoincrement: false;
807
- hasRuntimeDefault: false;
864
+ hasRuntimeDefault: true;
808
865
  enumValues: [string, ...string[]];
809
866
  baseColumn: never;
810
867
  identity: undefined;
811
868
  generated: undefined;
812
869
  }, {}, {}>;
813
- signerRole: import("drizzle-orm/pg-core").PgColumn<{
814
- name: "signer_role";
815
- tableName: "contract_signatures";
870
+ contractId: import("drizzle-orm/pg-core").PgColumn<{
871
+ name: string;
872
+ tableName: "contract_attachments";
816
873
  dataType: "string";
817
874
  columnType: "PgText";
818
875
  data: string;
819
876
  driverParam: string;
820
- notNull: false;
877
+ notNull: true;
821
878
  hasDefault: false;
822
879
  isPrimaryKey: false;
823
880
  isAutoincrement: false;
@@ -827,48 +884,31 @@ export declare const contractsService: {
827
884
  identity: undefined;
828
885
  generated: undefined;
829
886
  }, {}, {}>;
830
- personId: import("drizzle-orm/pg-core").PgColumn<{
831
- name: string;
832
- tableName: "contract_signatures";
887
+ kind: import("drizzle-orm/pg-core").PgColumn<{
888
+ name: "kind";
889
+ tableName: "contract_attachments";
833
890
  dataType: "string";
834
891
  columnType: "PgText";
835
892
  data: string;
836
893
  driverParam: string;
837
- notNull: false;
838
- hasDefault: false;
839
- isPrimaryKey: false;
840
- isAutoincrement: false;
841
- hasRuntimeDefault: false;
842
- enumValues: [string, ...string[]];
843
- baseColumn: never;
844
- identity: undefined;
845
- generated: undefined;
846
- }, {}, {}>;
847
- method: import("drizzle-orm/pg-core").PgColumn<{
848
- name: "method";
849
- tableName: "contract_signatures";
850
- dataType: "string";
851
- columnType: "PgEnumColumn";
852
- data: "other" | "manual" | "electronic" | "docusign";
853
- driverParam: string;
854
894
  notNull: true;
855
895
  hasDefault: true;
856
896
  isPrimaryKey: false;
857
897
  isAutoincrement: false;
858
898
  hasRuntimeDefault: false;
859
- enumValues: ["manual", "electronic", "docusign", "other"];
899
+ enumValues: [string, ...string[]];
860
900
  baseColumn: never;
861
901
  identity: undefined;
862
902
  generated: undefined;
863
903
  }, {}, {}>;
864
- provider: import("drizzle-orm/pg-core").PgColumn<{
865
- name: "provider";
866
- tableName: "contract_signatures";
904
+ name: import("drizzle-orm/pg-core").PgColumn<{
905
+ name: "name";
906
+ tableName: "contract_attachments";
867
907
  dataType: "string";
868
908
  columnType: "PgText";
869
909
  data: string;
870
910
  driverParam: string;
871
- notNull: false;
911
+ notNull: true;
872
912
  hasDefault: false;
873
913
  isPrimaryKey: false;
874
914
  isAutoincrement: false;
@@ -878,9 +918,9 @@ export declare const contractsService: {
878
918
  identity: undefined;
879
919
  generated: undefined;
880
920
  }, {}, {}>;
881
- externalReference: import("drizzle-orm/pg-core").PgColumn<{
882
- name: "external_reference";
883
- tableName: "contract_signatures";
921
+ mimeType: import("drizzle-orm/pg-core").PgColumn<{
922
+ name: "mime_type";
923
+ tableName: "contract_attachments";
884
924
  dataType: "string";
885
925
  columnType: "PgText";
886
926
  data: string;
@@ -895,26 +935,26 @@ export declare const contractsService: {
895
935
  identity: undefined;
896
936
  generated: undefined;
897
937
  }, {}, {}>;
898
- signatureData: import("drizzle-orm/pg-core").PgColumn<{
899
- name: "signature_data";
900
- tableName: "contract_signatures";
901
- dataType: "string";
902
- columnType: "PgText";
903
- data: string;
904
- driverParam: string;
938
+ fileSize: import("drizzle-orm/pg-core").PgColumn<{
939
+ name: "file_size";
940
+ tableName: "contract_attachments";
941
+ dataType: "number";
942
+ columnType: "PgInteger";
943
+ data: number;
944
+ driverParam: string | number;
905
945
  notNull: false;
906
946
  hasDefault: false;
907
947
  isPrimaryKey: false;
908
948
  isAutoincrement: false;
909
949
  hasRuntimeDefault: false;
910
- enumValues: [string, ...string[]];
950
+ enumValues: undefined;
911
951
  baseColumn: never;
912
952
  identity: undefined;
913
953
  generated: undefined;
914
954
  }, {}, {}>;
915
- ipAddress: import("drizzle-orm/pg-core").PgColumn<{
916
- name: "ip_address";
917
- tableName: "contract_signatures";
955
+ storageKey: import("drizzle-orm/pg-core").PgColumn<{
956
+ name: "storage_key";
957
+ tableName: "contract_attachments";
918
958
  dataType: "string";
919
959
  columnType: "PgText";
920
960
  data: string;
@@ -929,9 +969,9 @@ export declare const contractsService: {
929
969
  identity: undefined;
930
970
  generated: undefined;
931
971
  }, {}, {}>;
932
- userAgent: import("drizzle-orm/pg-core").PgColumn<{
933
- name: "user_agent";
934
- tableName: "contract_signatures";
972
+ checksum: import("drizzle-orm/pg-core").PgColumn<{
973
+ name: "checksum";
974
+ tableName: "contract_attachments";
935
975
  dataType: "string";
936
976
  columnType: "PgText";
937
977
  data: string;
@@ -946,26 +986,9 @@ export declare const contractsService: {
946
986
  identity: undefined;
947
987
  generated: undefined;
948
988
  }, {}, {}>;
949
- signedAt: import("drizzle-orm/pg-core").PgColumn<{
950
- name: "signed_at";
951
- tableName: "contract_signatures";
952
- dataType: "date";
953
- columnType: "PgTimestamp";
954
- data: Date;
955
- driverParam: string;
956
- notNull: true;
957
- hasDefault: true;
958
- isPrimaryKey: false;
959
- isAutoincrement: false;
960
- hasRuntimeDefault: false;
961
- enumValues: undefined;
962
- baseColumn: never;
963
- identity: undefined;
964
- generated: undefined;
965
- }, {}, {}>;
966
989
  metadata: import("drizzle-orm/pg-core").PgColumn<{
967
990
  name: "metadata";
968
- tableName: "contract_signatures";
991
+ tableName: "contract_attachments";
969
992
  dataType: "json";
970
993
  columnType: "PgJsonb";
971
994
  data: unknown;
@@ -982,7 +1005,7 @@ export declare const contractsService: {
982
1005
  }, {}, {}>;
983
1006
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
984
1007
  name: "created_at";
985
- tableName: "contract_signatures";
1008
+ tableName: "contract_attachments";
986
1009
  dataType: "date";
987
1010
  columnType: "PgTimestamp";
988
1011
  data: Date;
@@ -997,26 +1020,21 @@ export declare const contractsService: {
997
1020
  identity: undefined;
998
1021
  generated: undefined;
999
1022
  }, {}, {}>;
1000
- }, "single", Record<"contract_signatures", "not-null">, false, "where" | "orderBy", {
1023
+ }, "single", Record<"contract_attachments", "not-null">, false, "where" | "orderBy", {
1001
1024
  id: string;
1002
1025
  contractId: string;
1003
- signerName: string;
1004
- signerEmail: string | null;
1005
- signerRole: string | null;
1006
- personId: string | null;
1007
- method: "other" | "manual" | "electronic" | "docusign";
1008
- provider: string | null;
1009
- externalReference: string | null;
1010
- signatureData: string | null;
1011
- ipAddress: string | null;
1012
- userAgent: string | null;
1013
- signedAt: Date;
1026
+ kind: string;
1027
+ name: string;
1028
+ mimeType: string | null;
1029
+ fileSize: number | null;
1030
+ storageKey: string | null;
1031
+ checksum: string | null;
1014
1032
  metadata: unknown;
1015
1033
  createdAt: Date;
1016
1034
  }[], {
1017
1035
  id: import("drizzle-orm/pg-core").PgColumn<{
1018
1036
  name: string;
1019
- tableName: "contract_signatures";
1037
+ tableName: "contract_attachments";
1020
1038
  dataType: "string";
1021
1039
  columnType: "PgText";
1022
1040
  data: string;
@@ -1033,24 +1051,7 @@ export declare const contractsService: {
1033
1051
  }, {}, {}>;
1034
1052
  contractId: import("drizzle-orm/pg-core").PgColumn<{
1035
1053
  name: string;
1036
- tableName: "contract_signatures";
1037
- dataType: "string";
1038
- columnType: "PgText";
1039
- data: string;
1040
- driverParam: string;
1041
- notNull: true;
1042
- hasDefault: false;
1043
- isPrimaryKey: false;
1044
- isAutoincrement: false;
1045
- hasRuntimeDefault: false;
1046
- enumValues: [string, ...string[]];
1047
- baseColumn: never;
1048
- identity: undefined;
1049
- generated: undefined;
1050
- }, {}, {}>;
1051
- signerName: import("drizzle-orm/pg-core").PgColumn<{
1052
- name: "signer_name";
1053
- tableName: "contract_signatures";
1054
+ tableName: "contract_attachments";
1054
1055
  dataType: "string";
1055
1056
  columnType: "PgText";
1056
1057
  data: string;
@@ -1065,99 +1066,31 @@ export declare const contractsService: {
1065
1066
  identity: undefined;
1066
1067
  generated: undefined;
1067
1068
  }, {}, {}>;
1068
- signerEmail: import("drizzle-orm/pg-core").PgColumn<{
1069
- name: "signer_email";
1070
- tableName: "contract_signatures";
1071
- dataType: "string";
1072
- columnType: "PgText";
1073
- data: string;
1074
- driverParam: string;
1075
- notNull: false;
1076
- hasDefault: false;
1077
- isPrimaryKey: false;
1078
- isAutoincrement: false;
1079
- hasRuntimeDefault: false;
1080
- enumValues: [string, ...string[]];
1081
- baseColumn: never;
1082
- identity: undefined;
1083
- generated: undefined;
1084
- }, {}, {}>;
1085
- signerRole: import("drizzle-orm/pg-core").PgColumn<{
1086
- name: "signer_role";
1087
- tableName: "contract_signatures";
1088
- dataType: "string";
1089
- columnType: "PgText";
1090
- data: string;
1091
- driverParam: string;
1092
- notNull: false;
1093
- hasDefault: false;
1094
- isPrimaryKey: false;
1095
- isAutoincrement: false;
1096
- hasRuntimeDefault: false;
1097
- enumValues: [string, ...string[]];
1098
- baseColumn: never;
1099
- identity: undefined;
1100
- generated: undefined;
1101
- }, {}, {}>;
1102
- personId: import("drizzle-orm/pg-core").PgColumn<{
1103
- name: string;
1104
- tableName: "contract_signatures";
1069
+ kind: import("drizzle-orm/pg-core").PgColumn<{
1070
+ name: "kind";
1071
+ tableName: "contract_attachments";
1105
1072
  dataType: "string";
1106
1073
  columnType: "PgText";
1107
1074
  data: string;
1108
1075
  driverParam: string;
1109
- notNull: false;
1110
- hasDefault: false;
1111
- isPrimaryKey: false;
1112
- isAutoincrement: false;
1113
- hasRuntimeDefault: false;
1114
- enumValues: [string, ...string[]];
1115
- baseColumn: never;
1116
- identity: undefined;
1117
- generated: undefined;
1118
- }, {}, {}>;
1119
- method: import("drizzle-orm/pg-core").PgColumn<{
1120
- name: "method";
1121
- tableName: "contract_signatures";
1122
- dataType: "string";
1123
- columnType: "PgEnumColumn";
1124
- data: "other" | "manual" | "electronic" | "docusign";
1125
- driverParam: string;
1126
1076
  notNull: true;
1127
1077
  hasDefault: true;
1128
1078
  isPrimaryKey: false;
1129
1079
  isAutoincrement: false;
1130
1080
  hasRuntimeDefault: false;
1131
- enumValues: ["manual", "electronic", "docusign", "other"];
1132
- baseColumn: never;
1133
- identity: undefined;
1134
- generated: undefined;
1135
- }, {}, {}>;
1136
- provider: import("drizzle-orm/pg-core").PgColumn<{
1137
- name: "provider";
1138
- tableName: "contract_signatures";
1139
- dataType: "string";
1140
- columnType: "PgText";
1141
- data: string;
1142
- driverParam: string;
1143
- notNull: false;
1144
- hasDefault: false;
1145
- isPrimaryKey: false;
1146
- isAutoincrement: false;
1147
- hasRuntimeDefault: false;
1148
1081
  enumValues: [string, ...string[]];
1149
1082
  baseColumn: never;
1150
1083
  identity: undefined;
1151
1084
  generated: undefined;
1152
1085
  }, {}, {}>;
1153
- externalReference: import("drizzle-orm/pg-core").PgColumn<{
1154
- name: "external_reference";
1155
- tableName: "contract_signatures";
1086
+ name: import("drizzle-orm/pg-core").PgColumn<{
1087
+ name: "name";
1088
+ tableName: "contract_attachments";
1156
1089
  dataType: "string";
1157
1090
  columnType: "PgText";
1158
1091
  data: string;
1159
1092
  driverParam: string;
1160
- notNull: false;
1093
+ notNull: true;
1161
1094
  hasDefault: false;
1162
1095
  isPrimaryKey: false;
1163
1096
  isAutoincrement: false;
@@ -1167,9 +1100,9 @@ export declare const contractsService: {
1167
1100
  identity: undefined;
1168
1101
  generated: undefined;
1169
1102
  }, {}, {}>;
1170
- signatureData: import("drizzle-orm/pg-core").PgColumn<{
1171
- name: "signature_data";
1172
- tableName: "contract_signatures";
1103
+ mimeType: import("drizzle-orm/pg-core").PgColumn<{
1104
+ name: "mime_type";
1105
+ tableName: "contract_attachments";
1173
1106
  dataType: "string";
1174
1107
  columnType: "PgText";
1175
1108
  data: string;
@@ -1184,26 +1117,26 @@ export declare const contractsService: {
1184
1117
  identity: undefined;
1185
1118
  generated: undefined;
1186
1119
  }, {}, {}>;
1187
- ipAddress: import("drizzle-orm/pg-core").PgColumn<{
1188
- name: "ip_address";
1189
- tableName: "contract_signatures";
1190
- dataType: "string";
1191
- columnType: "PgText";
1192
- data: string;
1193
- driverParam: string;
1120
+ fileSize: import("drizzle-orm/pg-core").PgColumn<{
1121
+ name: "file_size";
1122
+ tableName: "contract_attachments";
1123
+ dataType: "number";
1124
+ columnType: "PgInteger";
1125
+ data: number;
1126
+ driverParam: string | number;
1194
1127
  notNull: false;
1195
1128
  hasDefault: false;
1196
1129
  isPrimaryKey: false;
1197
1130
  isAutoincrement: false;
1198
1131
  hasRuntimeDefault: false;
1199
- enumValues: [string, ...string[]];
1132
+ enumValues: undefined;
1200
1133
  baseColumn: never;
1201
1134
  identity: undefined;
1202
1135
  generated: undefined;
1203
1136
  }, {}, {}>;
1204
- userAgent: import("drizzle-orm/pg-core").PgColumn<{
1205
- name: "user_agent";
1206
- tableName: "contract_signatures";
1137
+ storageKey: import("drizzle-orm/pg-core").PgColumn<{
1138
+ name: "storage_key";
1139
+ tableName: "contract_attachments";
1207
1140
  dataType: "string";
1208
1141
  columnType: "PgText";
1209
1142
  data: string;
@@ -1218,26 +1151,26 @@ export declare const contractsService: {
1218
1151
  identity: undefined;
1219
1152
  generated: undefined;
1220
1153
  }, {}, {}>;
1221
- signedAt: import("drizzle-orm/pg-core").PgColumn<{
1222
- name: "signed_at";
1223
- tableName: "contract_signatures";
1224
- dataType: "date";
1225
- columnType: "PgTimestamp";
1226
- data: Date;
1154
+ checksum: import("drizzle-orm/pg-core").PgColumn<{
1155
+ name: "checksum";
1156
+ tableName: "contract_attachments";
1157
+ dataType: "string";
1158
+ columnType: "PgText";
1159
+ data: string;
1227
1160
  driverParam: string;
1228
- notNull: true;
1229
- hasDefault: true;
1161
+ notNull: false;
1162
+ hasDefault: false;
1230
1163
  isPrimaryKey: false;
1231
1164
  isAutoincrement: false;
1232
1165
  hasRuntimeDefault: false;
1233
- enumValues: undefined;
1166
+ enumValues: [string, ...string[]];
1234
1167
  baseColumn: never;
1235
1168
  identity: undefined;
1236
1169
  generated: undefined;
1237
1170
  }, {}, {}>;
1238
1171
  metadata: import("drizzle-orm/pg-core").PgColumn<{
1239
1172
  name: "metadata";
1240
- tableName: "contract_signatures";
1173
+ tableName: "contract_attachments";
1241
1174
  dataType: "json";
1242
1175
  columnType: "PgJsonb";
1243
1176
  data: unknown;
@@ -1254,7 +1187,7 @@ export declare const contractsService: {
1254
1187
  }, {}, {}>;
1255
1188
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
1256
1189
  name: "created_at";
1257
- tableName: "contract_signatures";
1190
+ tableName: "contract_attachments";
1258
1191
  dataType: "date";
1259
1192
  columnType: "PgTimestamp";
1260
1193
  data: Date;
@@ -1270,101 +1203,187 @@ export declare const contractsService: {
1270
1203
  generated: undefined;
1271
1204
  }, {}, {}>;
1272
1205
  }>, "where" | "orderBy">;
1273
- signContract(db: PostgresJsDatabase, contractId: string, data: CreateContractSignatureInput): Promise<{
1274
- status: "not_found";
1275
- contract?: undefined;
1276
- signature?: undefined;
1277
- } | {
1278
- status: "not_signable";
1279
- contract?: undefined;
1280
- signature?: undefined;
1281
- } | {
1282
- status: "signed";
1283
- contract: {
1284
- id: string;
1285
- contractNumber: string | null;
1286
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
1287
- status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
1288
- title: string;
1289
- templateVersionId: string | null;
1290
- seriesId: string | null;
1291
- personId: string | null;
1292
- organizationId: string | null;
1293
- supplierId: string | null;
1294
- channelId: string | null;
1295
- bookingId: string | null;
1296
- orderId: string | null;
1297
- issuedAt: Date | null;
1298
- sentAt: Date | null;
1299
- executedAt: Date | null;
1300
- expiresAt: Date | null;
1301
- voidedAt: Date | null;
1302
- language: string;
1303
- renderedBodyFormat: "markdown" | "html" | "lexical_json";
1304
- renderedBody: string | null;
1305
- variables: unknown;
1306
- metadata: unknown;
1307
- createdAt: Date;
1308
- updatedAt: Date;
1309
- } | null;
1310
- signature: {
1311
- id: string;
1312
- createdAt: Date;
1313
- personId: string | null;
1314
- metadata: unknown;
1315
- contractId: string;
1316
- signerName: string;
1317
- signerEmail: string | null;
1318
- signerRole: string | null;
1319
- method: "other" | "manual" | "electronic" | "docusign";
1320
- provider: string | null;
1321
- externalReference: string | null;
1322
- signatureData: string | null;
1323
- ipAddress: string | null;
1324
- userAgent: string | null;
1325
- signedAt: Date;
1326
- } | null;
1327
- }>;
1328
- executeContract(db: PostgresJsDatabase, contractId: string): Promise<{
1329
- status: "not_found";
1330
- contract?: undefined;
1331
- } | {
1332
- status: "not_signed";
1333
- contract?: undefined;
1334
- } | {
1335
- status: "executed";
1336
- contract: {
1206
+ createAttachment(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, contractId: string, data: import("./service-shared.js").CreateContractAttachmentInput): Promise<{
1207
+ id: string;
1208
+ name: string;
1209
+ createdAt: Date;
1210
+ kind: string;
1211
+ metadata: unknown;
1212
+ contractId: string;
1213
+ mimeType: string | null;
1214
+ fileSize: number | null;
1215
+ storageKey: string | null;
1216
+ checksum: string | null;
1217
+ } | null>;
1218
+ updateAttachment(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, attachmentId: string, data: import("./service-shared.js").UpdateContractAttachmentInput): Promise<{
1219
+ id: string;
1220
+ contractId: string;
1221
+ kind: string;
1222
+ name: string;
1223
+ mimeType: string | null;
1224
+ fileSize: number | null;
1225
+ storageKey: string | null;
1226
+ checksum: string | null;
1227
+ metadata: unknown;
1228
+ createdAt: Date;
1229
+ } | null>;
1230
+ deleteAttachment(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, attachmentId: string): Promise<{
1231
+ id: string;
1232
+ } | null>;
1233
+ listSeries(db: import("drizzle-orm/postgres-js").PostgresJsDatabase): Promise<{
1234
+ id: string;
1235
+ code: string;
1236
+ name: string;
1237
+ prefix: string;
1238
+ separator: string;
1239
+ padLength: number;
1240
+ currentSequence: number;
1241
+ resetStrategy: "never" | "annual" | "monthly";
1242
+ resetAt: Date | null;
1243
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1244
+ active: boolean;
1245
+ createdAt: Date;
1246
+ updatedAt: Date;
1247
+ }[]>;
1248
+ getSeriesById(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
1249
+ id: string;
1250
+ code: string;
1251
+ name: string;
1252
+ prefix: string;
1253
+ separator: string;
1254
+ padLength: number;
1255
+ currentSequence: number;
1256
+ resetStrategy: "never" | "annual" | "monthly";
1257
+ resetAt: Date | null;
1258
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1259
+ active: boolean;
1260
+ createdAt: Date;
1261
+ updatedAt: Date;
1262
+ } | null>;
1263
+ createSeries(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, data: import("./service-shared.js").CreateContractNumberSeriesInput): Promise<{
1264
+ id: string;
1265
+ name: string;
1266
+ active: boolean;
1267
+ createdAt: Date;
1268
+ updatedAt: Date;
1269
+ code: string;
1270
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1271
+ prefix: string;
1272
+ separator: string;
1273
+ padLength: number;
1274
+ currentSequence: number;
1275
+ resetStrategy: "never" | "annual" | "monthly";
1276
+ resetAt: Date | null;
1277
+ } | null>;
1278
+ updateSeries(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string, data: import("./service-shared.js").UpdateContractNumberSeriesInput): Promise<{
1279
+ id: string;
1280
+ code: string;
1281
+ name: string;
1282
+ prefix: string;
1283
+ separator: string;
1284
+ padLength: number;
1285
+ currentSequence: number;
1286
+ resetStrategy: "never" | "annual" | "monthly";
1287
+ resetAt: Date | null;
1288
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1289
+ active: boolean;
1290
+ createdAt: Date;
1291
+ updatedAt: Date;
1292
+ } | null>;
1293
+ deleteSeries(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
1294
+ id: string;
1295
+ } | null>;
1296
+ listTemplates(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: import("./service-shared.js").ContractTemplateListQuery): Promise<{
1297
+ data: {
1337
1298
  id: string;
1338
- contractNumber: string | null;
1299
+ name: string;
1300
+ slug: string;
1339
1301
  scope: "customer" | "partner" | "supplier" | "other" | "channel";
1340
- status: "draft" | "sent" | "expired" | "issued" | "signed" | "executed" | "void";
1341
- title: string;
1342
- templateVersionId: string | null;
1343
- seriesId: string | null;
1344
- personId: string | null;
1345
- organizationId: string | null;
1346
- supplierId: string | null;
1347
- channelId: string | null;
1348
- bookingId: string | null;
1349
- orderId: string | null;
1350
- issuedAt: Date | null;
1351
- sentAt: Date | null;
1352
- executedAt: Date | null;
1353
- expiresAt: Date | null;
1354
- voidedAt: Date | null;
1355
1302
  language: string;
1356
- renderedBodyFormat: "markdown" | "html" | "lexical_json";
1357
- renderedBody: string | null;
1358
- variables: unknown;
1359
- metadata: unknown;
1303
+ description: string | null;
1304
+ bodyFormat: "markdown" | "html" | "lexical_json";
1305
+ body: string;
1306
+ variableSchema: unknown;
1307
+ currentVersionId: string | null;
1308
+ active: boolean;
1360
1309
  createdAt: Date;
1361
1310
  updatedAt: Date;
1362
- } | null;
1311
+ }[];
1312
+ total: number;
1313
+ limit: number;
1314
+ offset: number;
1363
1315
  }>;
1364
- listAttachments(db: PostgresJsDatabase, contractId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"contract_attachments", {
1316
+ getTemplateById(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
1317
+ id: string;
1318
+ name: string;
1319
+ slug: string;
1320
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1321
+ language: string;
1322
+ description: string | null;
1323
+ bodyFormat: "markdown" | "html" | "lexical_json";
1324
+ body: string;
1325
+ variableSchema: unknown;
1326
+ currentVersionId: string | null;
1327
+ active: boolean;
1328
+ createdAt: Date;
1329
+ updatedAt: Date;
1330
+ } | null>;
1331
+ getDefaultTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: {
1332
+ scope: "customer" | "supplier" | "partner" | "channel" | "other";
1333
+ language?: string;
1334
+ fallbackLanguages?: string[];
1335
+ }): Promise<{
1336
+ id: string;
1337
+ name: string;
1338
+ slug: string;
1339
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1340
+ language: string;
1341
+ description: string | null;
1342
+ bodyFormat: "markdown" | "html" | "lexical_json";
1343
+ body: string;
1344
+ variableSchema: unknown;
1345
+ currentVersionId: string | null;
1346
+ active: boolean;
1347
+ createdAt: Date;
1348
+ updatedAt: Date;
1349
+ } | null>;
1350
+ createTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, data: import("./service-shared.js").CreateContractTemplateInput): Promise<{
1351
+ id: string;
1352
+ name: string;
1353
+ active: boolean;
1354
+ createdAt: Date;
1355
+ updatedAt: Date;
1356
+ description: string | null;
1357
+ slug: string;
1358
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1359
+ language: string;
1360
+ bodyFormat: "markdown" | "html" | "lexical_json";
1361
+ body: string;
1362
+ variableSchema: unknown;
1363
+ currentVersionId: string | null;
1364
+ } | null>;
1365
+ updateTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string, data: import("./service-shared.js").UpdateContractTemplateInput): Promise<{
1366
+ id: string;
1367
+ name: string;
1368
+ slug: string;
1369
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1370
+ language: string;
1371
+ description: string | null;
1372
+ bodyFormat: "markdown" | "html" | "lexical_json";
1373
+ body: string;
1374
+ variableSchema: unknown;
1375
+ currentVersionId: string | null;
1376
+ active: boolean;
1377
+ createdAt: Date;
1378
+ updatedAt: Date;
1379
+ } | null>;
1380
+ deleteTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
1381
+ id: string;
1382
+ } | null>;
1383
+ listTemplateVersions(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, templateId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"contract_template_versions", {
1365
1384
  id: import("drizzle-orm/pg-core").PgColumn<{
1366
1385
  name: string;
1367
- tableName: "contract_attachments";
1386
+ tableName: "contract_template_versions";
1368
1387
  dataType: "string";
1369
1388
  columnType: "PgText";
1370
1389
  data: string;
@@ -1379,9 +1398,9 @@ export declare const contractsService: {
1379
1398
  identity: undefined;
1380
1399
  generated: undefined;
1381
1400
  }, {}, {}>;
1382
- contractId: import("drizzle-orm/pg-core").PgColumn<{
1401
+ templateId: import("drizzle-orm/pg-core").PgColumn<{
1383
1402
  name: string;
1384
- tableName: "contract_attachments";
1403
+ tableName: "contract_template_versions";
1385
1404
  dataType: "string";
1386
1405
  columnType: "PgText";
1387
1406
  data: string;
@@ -1396,48 +1415,48 @@ export declare const contractsService: {
1396
1415
  identity: undefined;
1397
1416
  generated: undefined;
1398
1417
  }, {}, {}>;
1399
- kind: import("drizzle-orm/pg-core").PgColumn<{
1400
- name: "kind";
1401
- tableName: "contract_attachments";
1402
- dataType: "string";
1403
- columnType: "PgText";
1404
- data: string;
1405
- driverParam: string;
1418
+ version: import("drizzle-orm/pg-core").PgColumn<{
1419
+ name: "version";
1420
+ tableName: "contract_template_versions";
1421
+ dataType: "number";
1422
+ columnType: "PgInteger";
1423
+ data: number;
1424
+ driverParam: string | number;
1406
1425
  notNull: true;
1407
- hasDefault: true;
1426
+ hasDefault: false;
1408
1427
  isPrimaryKey: false;
1409
1428
  isAutoincrement: false;
1410
1429
  hasRuntimeDefault: false;
1411
- enumValues: [string, ...string[]];
1430
+ enumValues: undefined;
1412
1431
  baseColumn: never;
1413
1432
  identity: undefined;
1414
1433
  generated: undefined;
1415
1434
  }, {}, {}>;
1416
- name: import("drizzle-orm/pg-core").PgColumn<{
1417
- name: "name";
1418
- tableName: "contract_attachments";
1435
+ bodyFormat: import("drizzle-orm/pg-core").PgColumn<{
1436
+ name: "body_format";
1437
+ tableName: "contract_template_versions";
1419
1438
  dataType: "string";
1420
- columnType: "PgText";
1421
- data: string;
1439
+ columnType: "PgEnumColumn";
1440
+ data: "markdown" | "html" | "lexical_json";
1422
1441
  driverParam: string;
1423
1442
  notNull: true;
1424
- hasDefault: false;
1443
+ hasDefault: true;
1425
1444
  isPrimaryKey: false;
1426
1445
  isAutoincrement: false;
1427
1446
  hasRuntimeDefault: false;
1428
- enumValues: [string, ...string[]];
1447
+ enumValues: ["markdown", "html", "lexical_json"];
1429
1448
  baseColumn: never;
1430
1449
  identity: undefined;
1431
1450
  generated: undefined;
1432
1451
  }, {}, {}>;
1433
- mimeType: import("drizzle-orm/pg-core").PgColumn<{
1434
- name: "mime_type";
1435
- tableName: "contract_attachments";
1452
+ body: import("drizzle-orm/pg-core").PgColumn<{
1453
+ name: "body";
1454
+ tableName: "contract_template_versions";
1436
1455
  dataType: "string";
1437
1456
  columnType: "PgText";
1438
1457
  data: string;
1439
1458
  driverParam: string;
1440
- notNull: false;
1459
+ notNull: true;
1441
1460
  hasDefault: false;
1442
1461
  isPrimaryKey: false;
1443
1462
  isAutoincrement: false;
@@ -1447,13 +1466,13 @@ export declare const contractsService: {
1447
1466
  identity: undefined;
1448
1467
  generated: undefined;
1449
1468
  }, {}, {}>;
1450
- fileSize: import("drizzle-orm/pg-core").PgColumn<{
1451
- name: "file_size";
1452
- tableName: "contract_attachments";
1453
- dataType: "number";
1454
- columnType: "PgInteger";
1455
- data: number;
1456
- driverParam: string | number;
1469
+ variableSchema: import("drizzle-orm/pg-core").PgColumn<{
1470
+ name: "variable_schema";
1471
+ tableName: "contract_template_versions";
1472
+ dataType: "json";
1473
+ columnType: "PgJsonb";
1474
+ data: unknown;
1475
+ driverParam: unknown;
1457
1476
  notNull: false;
1458
1477
  hasDefault: false;
1459
1478
  isPrimaryKey: false;
@@ -1464,9 +1483,9 @@ export declare const contractsService: {
1464
1483
  identity: undefined;
1465
1484
  generated: undefined;
1466
1485
  }, {}, {}>;
1467
- storageKey: import("drizzle-orm/pg-core").PgColumn<{
1468
- name: "storage_key";
1469
- tableName: "contract_attachments";
1486
+ changelog: import("drizzle-orm/pg-core").PgColumn<{
1487
+ name: "changelog";
1488
+ tableName: "contract_template_versions";
1470
1489
  dataType: "string";
1471
1490
  columnType: "PgText";
1472
1491
  data: string;
@@ -1481,9 +1500,9 @@ export declare const contractsService: {
1481
1500
  identity: undefined;
1482
1501
  generated: undefined;
1483
1502
  }, {}, {}>;
1484
- checksum: import("drizzle-orm/pg-core").PgColumn<{
1485
- name: "checksum";
1486
- tableName: "contract_attachments";
1503
+ createdBy: import("drizzle-orm/pg-core").PgColumn<{
1504
+ name: "created_by";
1505
+ tableName: "contract_template_versions";
1487
1506
  dataType: "string";
1488
1507
  columnType: "PgText";
1489
1508
  data: string;
@@ -1498,26 +1517,9 @@ export declare const contractsService: {
1498
1517
  identity: undefined;
1499
1518
  generated: undefined;
1500
1519
  }, {}, {}>;
1501
- metadata: import("drizzle-orm/pg-core").PgColumn<{
1502
- name: "metadata";
1503
- tableName: "contract_attachments";
1504
- dataType: "json";
1505
- columnType: "PgJsonb";
1506
- data: unknown;
1507
- driverParam: unknown;
1508
- notNull: false;
1509
- hasDefault: false;
1510
- isPrimaryKey: false;
1511
- isAutoincrement: false;
1512
- hasRuntimeDefault: false;
1513
- enumValues: undefined;
1514
- baseColumn: never;
1515
- identity: undefined;
1516
- generated: undefined;
1517
- }, {}, {}>;
1518
1520
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
1519
1521
  name: "created_at";
1520
- tableName: "contract_attachments";
1522
+ tableName: "contract_template_versions";
1521
1523
  dataType: "date";
1522
1524
  columnType: "PgTimestamp";
1523
1525
  data: Date;
@@ -1532,21 +1534,20 @@ export declare const contractsService: {
1532
1534
  identity: undefined;
1533
1535
  generated: undefined;
1534
1536
  }, {}, {}>;
1535
- }, "single", Record<"contract_attachments", "not-null">, false, "where" | "orderBy", {
1537
+ }, "single", Record<"contract_template_versions", "not-null">, false, "where" | "orderBy", {
1536
1538
  id: string;
1537
- contractId: string;
1538
- kind: string;
1539
- name: string;
1540
- mimeType: string | null;
1541
- fileSize: number | null;
1542
- storageKey: string | null;
1543
- checksum: string | null;
1544
- metadata: unknown;
1539
+ templateId: string;
1540
+ version: number;
1541
+ bodyFormat: "markdown" | "html" | "lexical_json";
1542
+ body: string;
1543
+ variableSchema: unknown;
1544
+ changelog: string | null;
1545
+ createdBy: string | null;
1545
1546
  createdAt: Date;
1546
1547
  }[], {
1547
1548
  id: import("drizzle-orm/pg-core").PgColumn<{
1548
1549
  name: string;
1549
- tableName: "contract_attachments";
1550
+ tableName: "contract_template_versions";
1550
1551
  dataType: "string";
1551
1552
  columnType: "PgText";
1552
1553
  data: string;
@@ -1561,9 +1562,9 @@ export declare const contractsService: {
1561
1562
  identity: undefined;
1562
1563
  generated: undefined;
1563
1564
  }, {}, {}>;
1564
- contractId: import("drizzle-orm/pg-core").PgColumn<{
1565
+ templateId: import("drizzle-orm/pg-core").PgColumn<{
1565
1566
  name: string;
1566
- tableName: "contract_attachments";
1567
+ tableName: "contract_template_versions";
1567
1568
  dataType: "string";
1568
1569
  columnType: "PgText";
1569
1570
  data: string;
@@ -1578,48 +1579,48 @@ export declare const contractsService: {
1578
1579
  identity: undefined;
1579
1580
  generated: undefined;
1580
1581
  }, {}, {}>;
1581
- kind: import("drizzle-orm/pg-core").PgColumn<{
1582
- name: "kind";
1583
- tableName: "contract_attachments";
1584
- dataType: "string";
1585
- columnType: "PgText";
1586
- data: string;
1587
- driverParam: string;
1582
+ version: import("drizzle-orm/pg-core").PgColumn<{
1583
+ name: "version";
1584
+ tableName: "contract_template_versions";
1585
+ dataType: "number";
1586
+ columnType: "PgInteger";
1587
+ data: number;
1588
+ driverParam: string | number;
1588
1589
  notNull: true;
1589
- hasDefault: true;
1590
+ hasDefault: false;
1590
1591
  isPrimaryKey: false;
1591
1592
  isAutoincrement: false;
1592
1593
  hasRuntimeDefault: false;
1593
- enumValues: [string, ...string[]];
1594
+ enumValues: undefined;
1594
1595
  baseColumn: never;
1595
1596
  identity: undefined;
1596
1597
  generated: undefined;
1597
1598
  }, {}, {}>;
1598
- name: import("drizzle-orm/pg-core").PgColumn<{
1599
- name: "name";
1600
- tableName: "contract_attachments";
1599
+ bodyFormat: import("drizzle-orm/pg-core").PgColumn<{
1600
+ name: "body_format";
1601
+ tableName: "contract_template_versions";
1601
1602
  dataType: "string";
1602
- columnType: "PgText";
1603
- data: string;
1603
+ columnType: "PgEnumColumn";
1604
+ data: "markdown" | "html" | "lexical_json";
1604
1605
  driverParam: string;
1605
1606
  notNull: true;
1606
- hasDefault: false;
1607
+ hasDefault: true;
1607
1608
  isPrimaryKey: false;
1608
1609
  isAutoincrement: false;
1609
1610
  hasRuntimeDefault: false;
1610
- enumValues: [string, ...string[]];
1611
+ enumValues: ["markdown", "html", "lexical_json"];
1611
1612
  baseColumn: never;
1612
1613
  identity: undefined;
1613
1614
  generated: undefined;
1614
1615
  }, {}, {}>;
1615
- mimeType: import("drizzle-orm/pg-core").PgColumn<{
1616
- name: "mime_type";
1617
- tableName: "contract_attachments";
1616
+ body: import("drizzle-orm/pg-core").PgColumn<{
1617
+ name: "body";
1618
+ tableName: "contract_template_versions";
1618
1619
  dataType: "string";
1619
1620
  columnType: "PgText";
1620
1621
  data: string;
1621
1622
  driverParam: string;
1622
- notNull: false;
1623
+ notNull: true;
1623
1624
  hasDefault: false;
1624
1625
  isPrimaryKey: false;
1625
1626
  isAutoincrement: false;
@@ -1629,13 +1630,13 @@ export declare const contractsService: {
1629
1630
  identity: undefined;
1630
1631
  generated: undefined;
1631
1632
  }, {}, {}>;
1632
- fileSize: import("drizzle-orm/pg-core").PgColumn<{
1633
- name: "file_size";
1634
- tableName: "contract_attachments";
1635
- dataType: "number";
1636
- columnType: "PgInteger";
1637
- data: number;
1638
- driverParam: string | number;
1633
+ variableSchema: import("drizzle-orm/pg-core").PgColumn<{
1634
+ name: "variable_schema";
1635
+ tableName: "contract_template_versions";
1636
+ dataType: "json";
1637
+ columnType: "PgJsonb";
1638
+ data: unknown;
1639
+ driverParam: unknown;
1639
1640
  notNull: false;
1640
1641
  hasDefault: false;
1641
1642
  isPrimaryKey: false;
@@ -1646,9 +1647,9 @@ export declare const contractsService: {
1646
1647
  identity: undefined;
1647
1648
  generated: undefined;
1648
1649
  }, {}, {}>;
1649
- storageKey: import("drizzle-orm/pg-core").PgColumn<{
1650
- name: "storage_key";
1651
- tableName: "contract_attachments";
1650
+ changelog: import("drizzle-orm/pg-core").PgColumn<{
1651
+ name: "changelog";
1652
+ tableName: "contract_template_versions";
1652
1653
  dataType: "string";
1653
1654
  columnType: "PgText";
1654
1655
  data: string;
@@ -1663,9 +1664,9 @@ export declare const contractsService: {
1663
1664
  identity: undefined;
1664
1665
  generated: undefined;
1665
1666
  }, {}, {}>;
1666
- checksum: import("drizzle-orm/pg-core").PgColumn<{
1667
- name: "checksum";
1668
- tableName: "contract_attachments";
1667
+ createdBy: import("drizzle-orm/pg-core").PgColumn<{
1668
+ name: "created_by";
1669
+ tableName: "contract_template_versions";
1669
1670
  dataType: "string";
1670
1671
  columnType: "PgText";
1671
1672
  data: string;
@@ -1680,26 +1681,9 @@ export declare const contractsService: {
1680
1681
  identity: undefined;
1681
1682
  generated: undefined;
1682
1683
  }, {}, {}>;
1683
- metadata: import("drizzle-orm/pg-core").PgColumn<{
1684
- name: "metadata";
1685
- tableName: "contract_attachments";
1686
- dataType: "json";
1687
- columnType: "PgJsonb";
1688
- data: unknown;
1689
- driverParam: unknown;
1690
- notNull: false;
1691
- hasDefault: false;
1692
- isPrimaryKey: false;
1693
- isAutoincrement: false;
1694
- hasRuntimeDefault: false;
1695
- enumValues: undefined;
1696
- baseColumn: never;
1697
- identity: undefined;
1698
- generated: undefined;
1699
- }, {}, {}>;
1700
1684
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
1701
1685
  name: "created_at";
1702
- tableName: "contract_attachments";
1686
+ tableName: "contract_template_versions";
1703
1687
  dataType: "date";
1704
1688
  columnType: "PgTimestamp";
1705
1689
  data: Date;
@@ -1715,39 +1699,28 @@ export declare const contractsService: {
1715
1699
  generated: undefined;
1716
1700
  }, {}, {}>;
1717
1701
  }>, "where" | "orderBy">;
1718
- createAttachment(db: PostgresJsDatabase, contractId: string, data: CreateContractAttachmentInput): Promise<{
1702
+ getTemplateVersionById(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
1719
1703
  id: string;
1720
- name: string;
1704
+ templateId: string;
1705
+ version: number;
1706
+ bodyFormat: "markdown" | "html" | "lexical_json";
1707
+ body: string;
1708
+ variableSchema: unknown;
1709
+ changelog: string | null;
1710
+ createdBy: string | null;
1721
1711
  createdAt: Date;
1722
- kind: string;
1723
- metadata: unknown;
1724
- contractId: string;
1725
- mimeType: string | null;
1726
- fileSize: number | null;
1727
- storageKey: string | null;
1728
- checksum: string | null;
1729
1712
  } | null>;
1730
- updateAttachment(db: PostgresJsDatabase, attachmentId: string, data: UpdateContractAttachmentInput): Promise<{
1713
+ createTemplateVersion(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, templateId: string, data: import("./service-shared.js").CreateContractTemplateVersionInput): Promise<{
1731
1714
  id: string;
1732
- contractId: string;
1733
- kind: string;
1734
- name: string;
1735
- mimeType: string | null;
1736
- fileSize: number | null;
1737
- storageKey: string | null;
1738
- checksum: string | null;
1739
- metadata: unknown;
1740
1715
  createdAt: Date;
1716
+ bodyFormat: "markdown" | "html" | "lexical_json";
1717
+ body: string;
1718
+ variableSchema: unknown;
1719
+ templateId: string;
1720
+ version: number;
1721
+ changelog: string | null;
1722
+ createdBy: string | null;
1741
1723
  } | null>;
1742
- deleteAttachment(db: PostgresJsDatabase, attachmentId: string): Promise<{
1743
- id: string;
1744
- } | null>;
1745
- /**
1746
- * Preview render: substitute variables against an arbitrary body without
1747
- * touching the database. Used by `/v1/admin/contracts/:id/render` and
1748
- * `/v1/admin/contracts/templates/:id/preview`.
1749
- */
1750
- renderPreview(input: RenderTemplateInput): string;
1724
+ renderPreview(input: import("./service-shared.js").RenderTemplateInput): string;
1751
1725
  };
1752
- export {};
1753
1726
  //# sourceMappingURL=service.d.ts.map