@abyss-project/tools 1.0.3 → 1.1.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 (207) hide show
  1. package/dist/api/abyss.admin.api.d.ts +0 -3
  2. package/dist/api/abyss.admin.api.js +1 -13
  3. package/dist/api/abyss.admin.api.js.map +1 -1
  4. package/dist/api/beam.api.d.ts +48 -0
  5. package/dist/api/beam.api.js +104 -0
  6. package/dist/api/beam.api.js.map +1 -0
  7. package/dist/api/extraction-plan-preset.api.d.ts +9 -0
  8. package/dist/api/extraction-plan-preset.api.js +23 -0
  9. package/dist/api/extraction-plan-preset.api.js.map +1 -0
  10. package/dist/api/extraction-plan-preset.api.test.d.ts +1 -0
  11. package/dist/api/extraction-plan-preset.api.test.js +41 -0
  12. package/dist/api/extraction-plan-preset.api.test.js.map +1 -0
  13. package/dist/api/extraction-settings.api.d.ts +4 -0
  14. package/dist/api/extraction-settings.api.js +22 -0
  15. package/dist/api/extraction-settings.api.js.map +1 -0
  16. package/dist/api/extraction.api.d.ts +74 -0
  17. package/dist/api/extraction.api.js +416 -0
  18. package/dist/api/extraction.api.js.map +1 -0
  19. package/dist/api/index.d.ts +5 -1
  20. package/dist/api/index.js +5 -1
  21. package/dist/api/index.js.map +1 -1
  22. package/dist/api/monitor.api.d.ts +2 -0
  23. package/dist/api/monitor.api.js +9 -0
  24. package/dist/api/monitor.api.js.map +1 -0
  25. package/dist/constants/beam.constants.d.ts +1 -0
  26. package/dist/constants/beam.constants.js +5 -0
  27. package/dist/constants/beam.constants.js.map +1 -0
  28. package/dist/constants/index.d.ts +1 -0
  29. package/dist/constants/index.js +1 -0
  30. package/dist/constants/index.js.map +1 -1
  31. package/dist/index.d.ts +111 -61
  32. package/dist/index.js +109 -61
  33. package/dist/index.js.map +1 -1
  34. package/dist/types/enum/beam.enum.d.ts +12 -0
  35. package/dist/types/enum/beam.enum.js +18 -0
  36. package/dist/types/enum/beam.enum.js.map +1 -0
  37. package/dist/types/enum/combine-strategy.enum.d.ts +5 -0
  38. package/dist/types/enum/combine-strategy.enum.js +10 -0
  39. package/dist/types/enum/combine-strategy.enum.js.map +1 -0
  40. package/dist/types/enum/content-share.enum.d.ts +3 -1
  41. package/dist/types/enum/content-share.enum.js +2 -0
  42. package/dist/types/enum/content-share.enum.js.map +1 -1
  43. package/dist/types/enum/document-type.enum.d.ts +9 -0
  44. package/dist/types/enum/document-type.enum.js +14 -0
  45. package/dist/types/enum/document-type.enum.js.map +1 -0
  46. package/dist/types/enum/extraction-feedback-issue-type.enum.d.ts +8 -0
  47. package/dist/types/enum/extraction-feedback-issue-type.enum.js +13 -0
  48. package/dist/types/enum/extraction-feedback-issue-type.enum.js.map +1 -0
  49. package/dist/types/enum/extraction-warning.enum.d.ts +7 -0
  50. package/dist/types/enum/extraction-warning.enum.js +12 -0
  51. package/dist/types/enum/extraction-warning.enum.js.map +1 -0
  52. package/dist/types/enum/index.d.ts +7 -0
  53. package/dist/types/enum/index.js +7 -0
  54. package/dist/types/enum/index.js.map +1 -1
  55. package/dist/types/enum/interpreter-kind.enum.d.ts +5 -0
  56. package/dist/types/enum/interpreter-kind.enum.js +10 -0
  57. package/dist/types/enum/interpreter-kind.enum.js.map +1 -0
  58. package/dist/types/enum/provider-kind.enum.d.ts +10 -0
  59. package/dist/types/enum/provider-kind.enum.js +16 -0
  60. package/dist/types/enum/provider-kind.enum.js.map +1 -0
  61. package/dist/types/interface/api/requests/beam.request.d.ts +122 -0
  62. package/dist/types/interface/api/{responses/pdf.response.js → requests/beam.request.js} +1 -1
  63. package/dist/types/interface/api/requests/beam.request.js.map +1 -0
  64. package/dist/types/interface/api/requests/{rcb.request.d.ts → extraction.request.d.ts} +81 -52
  65. package/dist/types/interface/api/requests/{pdf.public.request.js → extraction.request.js} +1 -1
  66. package/dist/types/interface/api/requests/extraction.request.js.map +1 -0
  67. package/dist/types/interface/api/requests/index.d.ts +2 -1
  68. package/dist/types/interface/api/requests/index.js +2 -1
  69. package/dist/types/interface/api/requests/index.js.map +1 -1
  70. package/dist/types/interface/api/responses/beam.response.d.ts +92 -0
  71. package/dist/types/interface/api/responses/{rcb.response.js → beam.response.js} +1 -1
  72. package/dist/types/interface/api/responses/beam.response.js.map +1 -0
  73. package/dist/types/interface/api/responses/extraction.response.d.ts +403 -0
  74. package/dist/types/interface/api/{requests/rcb.request.js → responses/extraction.response.js} +1 -1
  75. package/dist/types/interface/api/responses/extraction.response.js.map +1 -0
  76. package/dist/types/interface/api/responses/index.d.ts +3 -1
  77. package/dist/types/interface/api/responses/index.js +3 -1
  78. package/dist/types/interface/api/responses/index.js.map +1 -1
  79. package/dist/types/interface/api/responses/monitor.response.d.ts +7 -0
  80. package/dist/types/interface/api/{requests/user-tag.request.js → responses/monitor.response.js} +1 -1
  81. package/dist/types/interface/api/responses/monitor.response.js.map +1 -0
  82. package/dist/types/interface/models/beam.dto.d.ts +58 -0
  83. package/dist/types/interface/{api/requests/pdf.request.js → models/beam.dto.js} +1 -1
  84. package/dist/types/interface/models/beam.dto.js.map +1 -0
  85. package/dist/types/interface/models/extraction-fetched-provenance.dto.test.d.ts +1 -0
  86. package/dist/types/interface/models/extraction-fetched-provenance.dto.test.js +159 -0
  87. package/dist/types/interface/models/extraction-fetched-provenance.dto.test.js.map +1 -0
  88. package/dist/types/interface/models/extraction-plan.dto.d.ts +163 -0
  89. package/dist/types/interface/models/extraction-plan.dto.js +11 -0
  90. package/dist/types/interface/models/extraction-plan.dto.js.map +1 -0
  91. package/dist/types/interface/models/extraction-plan.dto.test.d.ts +1 -0
  92. package/dist/types/interface/models/extraction-plan.dto.test.js +35 -0
  93. package/dist/types/interface/models/extraction-plan.dto.test.js.map +1 -0
  94. package/dist/types/interface/models/extraction-spatial-template.dto.d.ts +37 -0
  95. package/dist/types/interface/models/extraction-spatial-template.dto.js +3 -0
  96. package/dist/types/interface/models/extraction-spatial-template.dto.js.map +1 -0
  97. package/dist/types/interface/models/extraction-spatial-template.dto.test.d.ts +1 -0
  98. package/dist/types/interface/models/extraction-spatial-template.dto.test.js +15 -0
  99. package/dist/types/interface/models/extraction-spatial-template.dto.test.js.map +1 -0
  100. package/dist/types/interface/models/{rcb.dto.d.ts → extraction.dto.d.ts} +64 -48
  101. package/dist/types/interface/models/extraction.dto.js +28 -0
  102. package/dist/types/interface/models/extraction.dto.js.map +1 -0
  103. package/dist/types/interface/models/index.d.ts +4 -1
  104. package/dist/types/interface/models/index.js +4 -1
  105. package/dist/types/interface/models/index.js.map +1 -1
  106. package/dist/types/interface/models/organization.dto.d.ts +2 -0
  107. package/dist/utils/{rcb-webhook.utils.d.ts → extraction-webhook.utils.d.ts} +2 -2
  108. package/dist/utils/{rcb-webhook.utils.js → extraction-webhook.utils.js} +4 -4
  109. package/dist/utils/extraction-webhook.utils.js.map +1 -0
  110. package/dist/utils/index.d.ts +1 -1
  111. package/dist/utils/index.js +1 -1
  112. package/dist/utils/index.js.map +1 -1
  113. package/package.json +1 -1
  114. package/src/api/abyss.admin.api.ts +0 -18
  115. package/src/api/beam.api.ts +300 -0
  116. package/src/api/extraction-plan-preset.api.test.ts +24 -0
  117. package/src/api/extraction-plan-preset.api.ts +51 -0
  118. package/src/api/extraction-settings.api.ts +59 -0
  119. package/src/api/extraction.api.ts +899 -0
  120. package/src/api/index.ts +56 -48
  121. package/src/api/monitor.api.ts +6 -0
  122. package/src/api/tests/beam.api.spec.ts +42 -0
  123. package/src/constants/beam.constants.ts +4 -0
  124. package/src/constants/index.ts +6 -5
  125. package/src/index.ts +840 -746
  126. package/src/types/enum/beam.enum.ts +24 -0
  127. package/src/types/enum/combine-strategy.enum.ts +7 -0
  128. package/src/types/enum/content-share.enum.ts +38 -36
  129. package/src/types/enum/document-type.enum.ts +10 -0
  130. package/src/types/enum/extraction-feedback-issue-type.enum.ts +10 -0
  131. package/src/types/enum/extraction-warning.enum.ts +21 -0
  132. package/src/types/enum/index.ts +13 -6
  133. package/src/types/enum/interpreter-kind.enum.ts +7 -0
  134. package/src/types/enum/provider-kind.enum.ts +13 -0
  135. package/src/types/interface/api/requests/beam.request.ts +152 -0
  136. package/src/types/interface/api/requests/extraction.request.ts +366 -0
  137. package/src/types/interface/api/requests/index.ts +29 -28
  138. package/src/types/interface/api/responses/beam.response.ts +122 -0
  139. package/src/types/interface/api/responses/extraction.response.ts +454 -0
  140. package/src/types/interface/api/responses/index.ts +33 -31
  141. package/src/types/interface/api/responses/monitor.response.ts +8 -0
  142. package/src/types/interface/models/beam.dto.ts +67 -0
  143. package/src/types/interface/models/extraction-fetched-provenance.dto.test.ts +193 -0
  144. package/src/types/interface/models/extraction-plan.dto.test.ts +47 -0
  145. package/src/types/interface/models/extraction-plan.dto.ts +241 -0
  146. package/src/types/interface/models/extraction-spatial-template.dto.test.ts +27 -0
  147. package/src/types/interface/models/extraction-spatial-template.dto.ts +48 -0
  148. package/src/types/interface/models/{rcb.dto.ts → extraction.dto.ts} +317 -267
  149. package/src/types/interface/models/index.ts +34 -31
  150. package/src/types/interface/models/organization.dto.ts +21 -12
  151. package/src/types/tests/beam-management-types.spec.ts +38 -0
  152. package/src/types/tests/beam-share-enums.spec.ts +11 -0
  153. package/src/types/tests/beam.dto.spec.ts +61 -0
  154. package/src/types/tests/beam.request-response.spec.ts +43 -0
  155. package/src/utils/{rcb-webhook.utils.ts → extraction-webhook.utils.ts} +30 -30
  156. package/src/utils/index.ts +6 -6
  157. package/tsconfig.json +36 -35
  158. package/dist/api/atlas-page-content.api.d.ts +0 -0
  159. package/dist/api/atlas-page-content.api.js +0 -2
  160. package/dist/api/atlas-page-content.api.js.map +0 -1
  161. package/dist/api/pdf.api.d.ts +0 -15
  162. package/dist/api/pdf.api.js +0 -61
  163. package/dist/api/pdf.api.js.map +0 -1
  164. package/dist/api/pdf.public.api.d.ts +0 -8
  165. package/dist/api/pdf.public.api.js +0 -33
  166. package/dist/api/pdf.public.api.js.map +0 -1
  167. package/dist/api/rcb.api.d.ts +0 -72
  168. package/dist/api/rcb.api.js +0 -400
  169. package/dist/api/rcb.api.js.map +0 -1
  170. package/dist/api/user-tag.api.d.ts +0 -9
  171. package/dist/api/user-tag.api.js +0 -37
  172. package/dist/api/user-tag.api.js.map +0 -1
  173. package/dist/constants/user-tag.constants.d.ts +0 -3
  174. package/dist/constants/user-tag.constants.js +0 -7
  175. package/dist/constants/user-tag.constants.js.map +0 -1
  176. package/dist/types/enum/pdf-session.enum.d.ts +0 -10
  177. package/dist/types/enum/pdf-session.enum.js +0 -16
  178. package/dist/types/enum/pdf-session.enum.js.map +0 -1
  179. package/dist/types/interface/api/requests/pdf.public.request.d.ts +0 -19
  180. package/dist/types/interface/api/requests/pdf.public.request.js.map +0 -1
  181. package/dist/types/interface/api/requests/pdf.request.d.ts +0 -50
  182. package/dist/types/interface/api/requests/pdf.request.js.map +0 -1
  183. package/dist/types/interface/api/requests/rcb.request.js.map +0 -1
  184. package/dist/types/interface/api/requests/user-tag.request.d.ts +0 -44
  185. package/dist/types/interface/api/requests/user-tag.request.js.map +0 -1
  186. package/dist/types/interface/api/responses/pdf.public.response.d.ts +0 -33
  187. package/dist/types/interface/api/responses/pdf.public.response.js +0 -3
  188. package/dist/types/interface/api/responses/pdf.public.response.js.map +0 -1
  189. package/dist/types/interface/api/responses/pdf.response.d.ts +0 -35
  190. package/dist/types/interface/api/responses/pdf.response.js.map +0 -1
  191. package/dist/types/interface/api/responses/rcb.response.d.ts +0 -376
  192. package/dist/types/interface/api/responses/rcb.response.js.map +0 -1
  193. package/dist/types/interface/api/responses/user-tag.response.d.ts +0 -32
  194. package/dist/types/interface/api/responses/user-tag.response.js +0 -3
  195. package/dist/types/interface/api/responses/user-tag.response.js.map +0 -1
  196. package/dist/types/interface/models/pdf-session.dto.d.ts +0 -28
  197. package/dist/types/interface/models/pdf-session.dto.js +0 -3
  198. package/dist/types/interface/models/pdf-session.dto.js.map +0 -1
  199. package/dist/types/interface/models/rcb.dto.js +0 -26
  200. package/dist/types/interface/models/rcb.dto.js.map +0 -1
  201. package/dist/types/interface/models/user-tag.dto.d.ts +0 -22
  202. package/dist/types/interface/models/user-tag.dto.js +0 -3
  203. package/dist/types/interface/models/user-tag.dto.js.map +0 -1
  204. package/dist/utils/rcb-webhook.utils.js.map +0 -1
  205. package/src/api/rcb.api.ts +0 -829
  206. package/src/types/interface/api/requests/rcb.request.ts +0 -267
  207. package/src/types/interface/api/responses/rcb.response.ts +0 -399
@@ -1,267 +1,317 @@
1
- // ──────────────────────────────────────────────
2
- // RCB (Relevé de Compte Bancaire) DTOs.
3
- // Mirror server-side Sequelize models, dates serialized as ISO strings.
4
- // ──────────────────────────────────────────────
5
-
6
- export type RcbExtractionMode = 'auto' | 'hint' | 'template';
7
- export type RcbProcessingMode = 'sync' | 'queue';
8
- export type RcbExtractionStatus = 'pending' | 'completed' | 'failed' | 'cached';
9
-
10
- export type RcbFeedbackIssueType =
11
- | 'missing_record'
12
- | 'wrong_sign'
13
- | 'wrong_amount'
14
- | 'wrong_date'
15
- | 'wrong_description'
16
- | 'duplicate'
17
- | 'other';
18
-
19
- export type RcbFeedbackStatus = 'open' | 'triaged' | 'fixed' | 'closed';
20
-
21
- export type RcbUsageEventType =
22
- | 'extract.sync.success'
23
- | 'extract.sync.cached'
24
- | 'extract.sync.failed'
25
- | 'extract.queue.enqueued'
26
- | 'extract.queue.success'
27
- | 'extract.queue.cached'
28
- | 'extract.queue.failed'
29
- | 'template.run.success'
30
- | 'template.run.failed';
31
-
32
- export interface IRcbBankHint {
33
- bank: string;
34
- version?: string;
35
- }
36
-
37
- export interface IRcbTransaction {
38
- date?: string;
39
- description?: string;
40
- amount?: number;
41
- balance?: number;
42
- valueDate?: string;
43
- bookingDate?: string;
44
- reference?: string;
45
- [k: string]: unknown;
46
- }
47
-
48
- export interface IRcbExtractionMetadata {
49
- iban?: string;
50
- bic?: string;
51
- bank?: string;
52
- accountHolder?: string;
53
- periodStart?: string;
54
- periodEnd?: string;
55
- openingBalance?: number;
56
- closingBalance?: number;
57
- currency?: string;
58
- [k: string]: unknown;
59
- }
60
-
61
- export interface IRcbFile {
62
- id: string;
63
- userId: string;
64
- applicationId: string | null;
65
- pdfHash: string;
66
- pdfSizeBytes: number;
67
- pdfMimeType: string;
68
- pdfPageCount: number | null;
69
- pdfFilename: string | null;
70
- applicationFileId: string | null;
71
- userExternalId: string | null;
72
- userMetadata: Record<string, unknown> | null;
73
- detectedBank: string | null;
74
- detectedVersion: string | null;
75
- detectedIban: string | null;
76
- detectedBic: string | null;
77
- detectedCurrency: string | null;
78
- createdAt: string;
79
- updatedAt: string;
80
- }
81
-
82
- // Structured warning emitted by the extraction orchestrator. The `code`
83
- // is the i18n key suffix, `data` carries numeric/string values the UI
84
- // formats locally (currencies, dates, etc.).
85
- export enum RcbWarningCode {
86
- NO_RECORDS = 'no_records',
87
- NO_IBAN = 'no_iban',
88
- NO_BALANCES = 'no_balances',
89
- BALANCE_MISMATCH = 'balance_mismatch',
90
- }
91
-
92
- export interface IRcbWarning {
93
- code: RcbWarningCode;
94
- data?: {
95
- actualCents?: number;
96
- expectedCents?: number;
97
- currency?: string;
98
- };
99
- }
100
-
101
- export interface IRcbExtraction {
102
- id: string;
103
- fileId: string;
104
- mode: RcbExtractionMode;
105
- hintBank: string | null;
106
- hintVersion: string | null;
107
- templateId: string | null;
108
- templateVersion: number | null;
109
- status: RcbExtractionStatus;
110
- strategyUsed: string | null;
111
- confidence: number | null;
112
- recordsCount: number | null;
113
- balanceValidated: boolean | null;
114
- durationMs: number | null;
115
- error: string | null;
116
- recordsJson: IRcbTransaction[] | null;
117
- metadataJson: IRcbExtractionMetadata | null;
118
- warningsJson: IRcbWarning[] | null;
119
- tags: string[] | null;
120
- note: string | null;
121
- shareToken: string | null;
122
- shareExpiresAt: string | null;
123
- createdAt: string;
124
- }
125
-
126
- export interface IRcbTemplate {
127
- id: string;
128
- userId: string;
129
- name: string;
130
- description: string | null;
131
- isActive: boolean;
132
- createdAt: string;
133
- updatedAt: string;
134
- }
135
-
136
- /**
137
- * Spatial zone on a PDF page (PDF coords: origin bottom-left, points).
138
- * Restricts regex matching to a specific rectangle.
139
- */
140
- export interface IRcbTemplateZone {
141
- name: string;
142
- page: number; // 1-indexed
143
- x: number;
144
- y: number;
145
- w: number;
146
- h: number;
147
- }
148
-
149
- /**
150
- * Typed shape of the template DSL JSON stored in `templateJson`. Mirrors
151
- * `TemplateDSL` server-side. UI editors should narrow `templateJson` to this
152
- * shape via `templateJson as IRcbTemplateDsl`.
153
- */
154
- export interface IRcbTemplateDsl {
155
- regex_iban?: string;
156
- regex_bic?: string;
157
- period?: { regex: string };
158
- balance?: { opening_regex?: string; closing_regex?: string };
159
- transactions?: {
160
- row_pattern: string;
161
- date_format?: string;
162
- amount_locale?: 'fr' | 'en';
163
- sign_rule?: 'explicit' | 'keyword';
164
- };
165
- skip_patterns?: string[];
166
- zones?: IRcbTemplateZone[];
167
- }
168
-
169
- export interface IRcbTemplateVersion {
170
- id: string;
171
- templateId: string;
172
- version: number;
173
- templateJson: Record<string, unknown>;
174
- comment: string | null;
175
- createdAt: string;
176
- }
177
-
178
- export interface IRcbFeedback {
179
- id: string;
180
- extractionId: string;
181
- userId: string;
182
- issueType: RcbFeedbackIssueType;
183
- description: string | null;
184
- status: RcbFeedbackStatus;
185
- createdAt: string;
186
- }
187
-
188
- export interface IRcbWebhookDelivery {
189
- id: string;
190
- userId: string | null;
191
- organizationId: string | null;
192
- projectId: string | null;
193
- createdByUserId: string | null;
194
- webhookId: string | null;
195
- jobId: string | null;
196
- event: string;
197
- url: string;
198
- payloadJson: Record<string, unknown>;
199
- attempts: number;
200
- lastStatus: number | null;
201
- lastError: string | null;
202
- deliveredAt: string | null;
203
- createdAt: string;
204
- updatedAt: string;
205
- }
206
-
207
- // Webhook event identifier. Values mirror AbyssApplicationEvent's RCB_*
208
- // entries so a logger.log(applicationEvent: ...) and a webhook delivery
209
- // can never drift.
210
- export enum RcbWebhookEvent {
211
- EXTRACT_COMPLETED = 'rcb.extract.completed',
212
- EXTRACT_FAILED = 'rcb.extract.failed',
213
- EXTRACT_LOW_CONFIDENCE = 'rcb.extract.low-confidence',
214
- EXTRACT_BALANCE_KO = 'rcb.extract.balance-ko',
215
- FILE_ARCHIVED = 'rcb.file.archived',
216
- SHARE_MINTED = 'rcb.share.minted',
217
- SHARE_REVOKED = 'rcb.share.revoked',
218
- FEEDBACK_SUBMITTED = 'rcb.feedback.submitted',
219
- JOB_FAILED = 'rcb.job.failed',
220
- EXPORT_COMPLETED = 'rcb.export.completed',
221
- EXPORT_FAILED = 'rcb.export.failed',
222
- }
223
-
224
- export const RCB_WEBHOOK_EVENTS: RcbWebhookEvent[] =
225
- Object.values(RcbWebhookEvent);
226
-
227
- export interface IRcbWebhook {
228
- id: string;
229
- userId: string | null;
230
- organizationId: string | null;
231
- projectId: string | null;
232
- createdByUserId: string | null;
233
- webhookUrl: string;
234
- webhookSecret: string;
235
- isEnabled: boolean;
236
- name: string;
237
- description: string;
238
- scopes: RcbWebhookEvent[];
239
- consecutiveFailures: number;
240
- createdAt: string;
241
- updatedAt: string;
242
- }
243
-
244
- export interface IRcbQuota {
245
- userId: string;
246
- tier: string;
247
- monthlyExtractCap: number | null;
248
- monthlyExtractedCap: number | null;
249
- monthlyBytesCap: number | null;
250
- queueOnlyAboveCount: number | null;
251
- createdAt: string;
252
- updatedAt: string;
253
- }
254
-
255
- export interface IRcbBankVersion {
256
- id: string;
257
- bank: string;
258
- version: string;
259
- validFrom: string | null;
260
- validTo: string | null;
261
- detectorJson: Record<string, unknown>;
262
- parserKind: string;
263
- configJson: Record<string, unknown>;
264
- isActive: boolean;
265
- createdAt: string;
266
- updatedAt: string;
267
- }
1
+ // ──────────────────────────────────────────────
2
+ // Extraction DTOs.
3
+ // Mirror server-side Sequelize models, dates serialized as ISO strings.
4
+ // ──────────────────────────────────────────────
5
+
6
+ import { ExtractionWarningCode } from '../../../types/enum/extraction-warning.enum';
7
+ import { ExtractionFeedbackIssueType } from '../../../types/enum/extraction-feedback-issue-type.enum';
8
+ import type {
9
+ IFieldValue,
10
+ IExecutionManifest,
11
+ IGlobalConfidence,
12
+ } from './extraction-plan.dto';
13
+
14
+ // Re-export so consumers can import ExtractionFeedbackIssueType from the DTO barrel.
15
+ export { ExtractionFeedbackIssueType };
16
+
17
+ export type ExtractionMode = 'auto' | 'hint' | 'template';
18
+ export type ProcessingMode = 'sync' | 'queue';
19
+ export type ExtractionStatus = 'pending' | 'completed' | 'failed' | 'cached';
20
+
21
+ export type ExtractionFeedbackStatus = 'open' | 'triaged' | 'fixed' | 'closed';
22
+
23
+ export type ExtractionUsageEventType =
24
+ | 'extract.sync.success'
25
+ | 'extract.sync.cached'
26
+ | 'extract.sync.failed'
27
+ | 'extract.queue.enqueued'
28
+ | 'extract.queue.success'
29
+ | 'extract.queue.cached'
30
+ | 'extract.queue.failed'
31
+ | 'template.run.success'
32
+ | 'template.run.failed';
33
+
34
+ export interface IExtractionBankHint {
35
+ bank: string;
36
+ version?: string;
37
+ }
38
+
39
+ export interface IExtractionTransaction {
40
+ date?: string;
41
+ description?: string;
42
+ amount?: number;
43
+ balance?: number;
44
+ valueDate?: string;
45
+ bookingDate?: string;
46
+ reference?: string;
47
+ [k: string]: unknown;
48
+ }
49
+
50
+ export interface IExtractionMetadata {
51
+ iban?: string;
52
+ bic?: string;
53
+ bank?: string;
54
+ accountHolder?: string;
55
+ periodStart?: string;
56
+ periodEnd?: string;
57
+ openingBalance?: number;
58
+ closingBalance?: number;
59
+ currency?: string;
60
+ [k: string]: unknown;
61
+ }
62
+
63
+ export interface IExtractionFile {
64
+ id: string;
65
+ userId: string;
66
+ applicationId: string | null;
67
+ pdfHash: string;
68
+ pdfSizeBytes: number;
69
+ pdfMimeType: string;
70
+ pdfPageCount: number | null;
71
+ pdfFilename: string | null;
72
+ applicationFileId: string | null;
73
+ userExternalId: string | null;
74
+ userMetadata: Record<string, unknown> | null;
75
+ detectedBank: string | null;
76
+ detectedVersion: string | null;
77
+ detectedIban: string | null;
78
+ detectedBic: string | null;
79
+ detectedCurrency: string | null;
80
+ createdAt: string;
81
+ updatedAt: string;
82
+ }
83
+
84
+ // Re-export ExtractionWarningCode so consumers can import it from the dto barrel.
85
+ export { ExtractionWarningCode };
86
+
87
+ export interface IExtractionWarning {
88
+ code: ExtractionWarningCode;
89
+ data?: {
90
+ /** Balance mismatch data (bank_statement). */
91
+ actualCents?: number;
92
+ expectedCents?: number;
93
+ currency?: string;
94
+ /**
95
+ * Adapter-specific validation error/warning type string, e.g.
96
+ * `ACTIF_PASSIF_MISMATCH`, `TOTAL_MISMATCH`, `MRZ_INVALID`.
97
+ * Present when `code === ExtractionWarningCode.ADAPTER_VALIDATION_ERROR`.
98
+ */
99
+ type?: string;
100
+ /** Human-readable explanation from the adapter's ValidationResult. */
101
+ message?: string;
102
+ };
103
+ }
104
+
105
+ export interface IExtraction {
106
+ id: string;
107
+ fileId: string;
108
+ mode: ExtractionMode;
109
+ hintBank: string | null;
110
+ hintVersion: string | null;
111
+ templateId: string | null;
112
+ templateVersion: number | null;
113
+ status: ExtractionStatus;
114
+ strategyUsed: string | null;
115
+ confidence: number | null;
116
+ recordsCount: number | null;
117
+ balanceValidated: boolean | null;
118
+ durationMs: number | null;
119
+ error: string | null;
120
+ recordsJson: IExtractionTransaction[] | null;
121
+ metadataJson: IExtractionMetadata | null;
122
+ warningsJson: IExtractionWarning[] | null;
123
+ tags: string[] | null;
124
+ note: string | null;
125
+ shareToken: string | null;
126
+ shareExpiresAt: string | null;
127
+ documentType: string | null;
128
+ documentTypeConfidence: number | null;
129
+ /**
130
+ * Persisted per-field results. Widened (V2-P1, ADDITIVE) to the IFieldValue
131
+ * superset: value + confidence stay at the SAME path (old readers unaffected),
132
+ * and the plan path additionally surfaces chosen / sources / signals /
133
+ * agreement provenance. Legacy template/hints rows persist only value +
134
+ * confidence (still a valid IFieldValue subset on the wire).
135
+ */
136
+ fieldsJson: Record<string, IFieldValue> | null;
137
+ improvementConsent: boolean;
138
+ usableForTraining: boolean;
139
+ supportTicketId: string | null;
140
+ /** AbyssExtract-owned training copy (extraction-training bucket). Purgeable. */
141
+ trainingFileId: string | null;
142
+ /** Whether the OCR layer was used for this extraction run. */
143
+ usedOcr: boolean;
144
+ /** Number of pages processed by the OCR layer. */
145
+ ocrPageCount: number;
146
+ /**
147
+ * Frozen execution manifest (resolved plan + per-pass impl/version) — the
148
+ * reproducible recipe. Present on plan-path rows; absent (null/undefined) on
149
+ * legacy template/hints rows. ADDITIVE, optional.
150
+ */
151
+ executionManifest?: IExecutionManifest | null;
152
+ /**
153
+ * Auditable global confidence (stats + aggregation + per-pass contributions).
154
+ * Surfaced where available; optional/absent otherwise. ADDITIVE, optional.
155
+ */
156
+ globalConfidence?: IGlobalConfidence | null;
157
+ createdAt: string;
158
+ }
159
+
160
+ export interface IExtractionTemplate {
161
+ id: string;
162
+ userId: string;
163
+ name: string;
164
+ description: string | null;
165
+ isActive: boolean;
166
+ createdAt: string;
167
+ updatedAt: string;
168
+ }
169
+
170
+ /**
171
+ * Spatial zone on a PDF page (PDF coords: origin bottom-left, points).
172
+ * Restricts regex matching to a specific rectangle.
173
+ */
174
+ export interface IExtractionTemplateZone {
175
+ name: string;
176
+ page: number; // 1-indexed
177
+ x: number;
178
+ y: number;
179
+ w: number;
180
+ h: number;
181
+ }
182
+
183
+ /**
184
+ * Typed shape of the template DSL JSON stored in `templateJson`. Mirrors
185
+ * `TemplateDSL` server-side. UI editors should narrow `templateJson` to this
186
+ * shape via `templateJson as IExtractionTemplateDsl`.
187
+ */
188
+ export interface IExtractionTemplateDsl {
189
+ regex_iban?: string;
190
+ regex_bic?: string;
191
+ period?: { regex: string };
192
+ balance?: { opening_regex?: string; closing_regex?: string };
193
+ transactions?: {
194
+ row_pattern: string;
195
+ date_format?: string;
196
+ amount_locale?: 'fr' | 'en';
197
+ sign_rule?: 'explicit' | 'keyword';
198
+ };
199
+ skip_patterns?: string[];
200
+ zones?: IExtractionTemplateZone[];
201
+ }
202
+
203
+ export interface IExtractionTemplateVersion {
204
+ id: string;
205
+ templateId: string;
206
+ version: number;
207
+ templateJson: Record<string, unknown>;
208
+ comment: string | null;
209
+ createdAt: string;
210
+ }
211
+
212
+ export interface IExtractionFeedback {
213
+ id: string;
214
+ extractionId: string;
215
+ userId: string;
216
+ issueType: ExtractionFeedbackIssueType;
217
+ fieldKey: string | null;
218
+ expectedValue: string | null;
219
+ description: string | null;
220
+ supportTicketId: string | null;
221
+ status: ExtractionFeedbackStatus;
222
+ createdAt: string;
223
+ }
224
+
225
+ export interface IExtractionWebhookDelivery {
226
+ id: string;
227
+ userId: string | null;
228
+ organizationId: string | null;
229
+ projectId: string | null;
230
+ createdByUserId: string | null;
231
+ webhookId: string | null;
232
+ jobId: string | null;
233
+ event: string;
234
+ url: string;
235
+ payloadJson: Record<string, unknown>;
236
+ attempts: number;
237
+ lastStatus: number | null;
238
+ lastError: string | null;
239
+ deliveredAt: string | null;
240
+ createdAt: string;
241
+ updatedAt: string;
242
+ }
243
+
244
+ // Webhook event identifier. Values mirror AbyssApplicationEvent's RCB_*
245
+ // entries so a logger.log(applicationEvent: ...) and a webhook delivery
246
+ // can never drift.
247
+ export enum ExtractionWebhookEvent {
248
+ EXTRACT_COMPLETED = 'rcb.extract.completed',
249
+ EXTRACT_FAILED = 'rcb.extract.failed',
250
+ EXTRACT_LOW_CONFIDENCE = 'rcb.extract.low-confidence',
251
+ EXTRACT_BALANCE_KO = 'rcb.extract.balance-ko',
252
+ FILE_ARCHIVED = 'rcb.file.archived',
253
+ SHARE_MINTED = 'rcb.share.minted',
254
+ SHARE_REVOKED = 'rcb.share.revoked',
255
+ FEEDBACK_SUBMITTED = 'rcb.feedback.submitted',
256
+ JOB_FAILED = 'rcb.job.failed',
257
+ EXPORT_COMPLETED = 'rcb.export.completed',
258
+ EXPORT_FAILED = 'rcb.export.failed',
259
+ }
260
+
261
+ export const EXTRACTION_WEBHOOK_EVENTS: ExtractionWebhookEvent[] =
262
+ Object.values(ExtractionWebhookEvent);
263
+
264
+ export interface IExtractionWebhook {
265
+ id: string;
266
+ userId: string | null;
267
+ organizationId: string | null;
268
+ projectId: string | null;
269
+ createdByUserId: string | null;
270
+ webhookUrl: string;
271
+ webhookSecret: string;
272
+ isEnabled: boolean;
273
+ name: string;
274
+ description: string;
275
+ scopes: ExtractionWebhookEvent[];
276
+ consecutiveFailures: number;
277
+ createdAt: string;
278
+ updatedAt: string;
279
+ }
280
+
281
+ export interface IExtractionBankVersion {
282
+ id: string;
283
+ bank: string;
284
+ version: string;
285
+ validFrom: string | null;
286
+ validTo: string | null;
287
+ detectorJson: Record<string, unknown>;
288
+ parserKind: string;
289
+ configJson: Record<string, unknown>;
290
+ isActive: boolean;
291
+ createdAt: string;
292
+ updatedAt: string;
293
+ }
294
+
295
+ // ─── EXTRACTION SETTINGS (P4) ────────────────────────────────────────────────
296
+
297
+ /**
298
+ * Scope discriminator for extraction settings.
299
+ * 'user' = personal scope; 'org' = organization scope.
300
+ */
301
+ export enum ExtractionSettingsScopeKind {
302
+ USER = 'user',
303
+ ORG = 'org',
304
+ }
305
+
306
+ /** Per-scope improvement-consent settings row. */
307
+ export interface IExtractionSettings {
308
+ id: string;
309
+ /** Set for personal scope. XOR with organizationId. */
310
+ userId: string | null;
311
+ /** Set for organization scope. XOR with userId. */
312
+ organizationId: string | null;
313
+ /** Factory default for per-extraction improvementConsent. OFF (false) by default. */
314
+ improvementDefault: boolean;
315
+ createdAt: string;
316
+ updatedAt: string;
317
+ }
@@ -1,31 +1,34 @@
1
- export * from './user.dto';
2
- export * from './organization.dto';
3
- export * from './project.dto';
4
- export * from './atlas.dto';
5
- export * from './atlas-document.dto';
6
- export * from './atlas-group.dto';
7
- export * from './atlas-page.dto';
8
- export * from './atlas-page-content.dto';
9
- export * from './draw.dto';
10
- export * from './memo.dto';
11
- export * from './retrospective.dto';
12
- export * from './retrospective-section.dto';
13
- export * from './retrospective-card.dto';
14
- export * from './retrospective-member.dto';
15
- export * from './short-link.dto';
16
- export * from './short-link-click.dto';
17
- export * from './board.dto';
18
- export * from './board-activity.dto';
19
- export * from './board-card.dto';
20
- export * from './board-card-checklist.dto';
21
- export * from './board-card-checklist-row.dto';
22
- export * from './board-card-comment.dto';
23
- export * from './board-card-document.dto';
24
- export * from './board-card-label.dto';
25
- export * from './board-card-member.dto';
26
- export * from './board-column.dto';
27
- export * from './board-label.dto';
28
- export * from './team.dto';
29
- export * from './tag.dto';
30
- export * from './content-share.dto';
31
- export * from './rcb.dto';
1
+ export * from './user.dto';
2
+ export * from './organization.dto';
3
+ export * from './project.dto';
4
+ export * from './atlas.dto';
5
+ export * from './atlas-document.dto';
6
+ export * from './atlas-group.dto';
7
+ export * from './atlas-page.dto';
8
+ export * from './atlas-page-content.dto';
9
+ export * from './draw.dto';
10
+ export * from './memo.dto';
11
+ export * from './retrospective.dto';
12
+ export * from './retrospective-section.dto';
13
+ export * from './retrospective-card.dto';
14
+ export * from './retrospective-member.dto';
15
+ export * from './short-link.dto';
16
+ export * from './short-link-click.dto';
17
+ export * from './beam.dto';
18
+ export * from './board.dto';
19
+ export * from './board-activity.dto';
20
+ export * from './board-card.dto';
21
+ export * from './board-card-checklist.dto';
22
+ export * from './board-card-checklist-row.dto';
23
+ export * from './board-card-comment.dto';
24
+ export * from './board-card-document.dto';
25
+ export * from './board-card-label.dto';
26
+ export * from './board-card-member.dto';
27
+ export * from './board-column.dto';
28
+ export * from './board-label.dto';
29
+ export * from './team.dto';
30
+ export * from './tag.dto';
31
+ export * from './content-share.dto';
32
+ export * from './extraction.dto';
33
+ export * from './extraction-plan.dto';
34
+ export * from './extraction-spatial-template.dto';