@okrapdf/cli 0.1.2 → 0.1.4

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.
@@ -0,0 +1,305 @@
1
+ /**
2
+ * OCR Review Scorer - Deterministic scoring for prioritizing page review
3
+ *
4
+ * Composable scoring strategies inspired by document understanding research:
5
+ * - Direct scoring: page-level metrics only
6
+ * - Structure-aware: considers table density and layout
7
+ * - Comparison-based: OCR layer vs rendered markdown
8
+ *
9
+ * Financial verification strategies from industry best practices:
10
+ * - Cross-querying: verify related fields match (e.g., Assets = Liabilities + Equity)
11
+ * - Check-sum logic: validate mathematical relationships between cells
12
+ * - Confidence filtering: auto-approve >95%, spot-check 70-95%, manual <70%
13
+ * - Anomaly detection: flag statistical outliers (e.g., decimal point errors)
14
+ *
15
+ * @see https://arxiv.org/html/2510.10138v1
16
+ */
17
+ export interface PageData {
18
+ page: number;
19
+ status: string;
20
+ total: number;
21
+ verified: number;
22
+ pending: number;
23
+ flagged: number;
24
+ rejected: number;
25
+ avgConfidence: number;
26
+ hasOcr: boolean;
27
+ ocrLineCount: number;
28
+ hasCoverageGaps: boolean;
29
+ uncoveredCount: number;
30
+ resolution: string | null;
31
+ classification: string | null;
32
+ isStale: boolean;
33
+ }
34
+ export interface TableData {
35
+ id: string;
36
+ page_number: number;
37
+ markdown: string;
38
+ verification_status: string;
39
+ confidence?: number;
40
+ }
41
+ export interface OcrBlock {
42
+ text: string;
43
+ bbox?: {
44
+ x: number;
45
+ y: number;
46
+ width: number;
47
+ height: number;
48
+ };
49
+ confidence?: number;
50
+ }
51
+ export interface ScoredPage {
52
+ page: number;
53
+ score: number;
54
+ breakdown: ScoreBreakdown;
55
+ tableCount: number;
56
+ avgConfidence: number;
57
+ status: string;
58
+ flags: string[];
59
+ }
60
+ export interface ScoreBreakdown {
61
+ tableScore: number;
62
+ confidenceScore: number;
63
+ coverageScore: number;
64
+ flaggedScore: number;
65
+ structureScore: number;
66
+ comparisonScore: number;
67
+ }
68
+ export interface ScorerConfig {
69
+ weights: ScorerWeights;
70
+ thresholds: ScorerThresholds;
71
+ }
72
+ export interface ScorerWeights {
73
+ tableCount: number;
74
+ inverseConfidence: number;
75
+ coverageGap: number;
76
+ flaggedEntity: number;
77
+ structurePenalty: number;
78
+ comparisonDelta: number;
79
+ }
80
+ export interface ScorerThresholds {
81
+ autoApproveConfidence: number;
82
+ requireReviewConfidence: number;
83
+ maxTablesForAutoApprove: number;
84
+ minOcrLinesForContent: number;
85
+ }
86
+ export interface FilterOptions {
87
+ status?: string | string[];
88
+ minConfidence?: number;
89
+ maxConfidence?: number;
90
+ minTables?: number;
91
+ maxTables?: number;
92
+ hasGaps?: boolean;
93
+ hasTables?: boolean;
94
+ isStale?: boolean;
95
+ }
96
+ export interface ReviewStats {
97
+ totalPages: number;
98
+ pagesWithTables: number;
99
+ totalTables: number;
100
+ avgConfidence: number;
101
+ lowConfidencePages: number;
102
+ pagesWithGaps: number;
103
+ byStatus: Record<string, number>;
104
+ byPriority: {
105
+ high: number;
106
+ medium: number;
107
+ low: number;
108
+ };
109
+ estimatedReviewTime: {
110
+ pages: number;
111
+ minutes: number;
112
+ };
113
+ }
114
+ export interface ComparisonResult {
115
+ page: number;
116
+ ocrCharCount: number;
117
+ markdownCharCount: number;
118
+ delta: number;
119
+ deltaPct: number;
120
+ spatialIntegrity: number;
121
+ tableStructureScore: number;
122
+ flags: string[];
123
+ }
124
+ export declare const DEFAULT_CONFIG: ScorerConfig;
125
+ export declare class OcrReviewScorer {
126
+ private config;
127
+ private tablesByPage;
128
+ constructor(config?: Partial<ScorerConfig>);
129
+ /**
130
+ * Load table data for scoring
131
+ */
132
+ loadTables(tables: TableData[]): void;
133
+ /**
134
+ * Score a single page - deterministic priority calculation
135
+ */
136
+ scorePage(page: PageData): ScoredPage;
137
+ /**
138
+ * Score all pages and return sorted by priority (highest first)
139
+ */
140
+ scoreAll(pages: PageData[]): ScoredPage[];
141
+ /**
142
+ * Filter pages by criteria before scoring
143
+ */
144
+ filter(pages: PageData[], options: FilterOptions): PageData[];
145
+ /**
146
+ * Get pages eligible for auto-approval
147
+ */
148
+ getAutoApprovable(pages: PageData[]): PageData[];
149
+ /**
150
+ * Get pages that require human review
151
+ */
152
+ getRequireReview(pages: PageData[]): ScoredPage[];
153
+ /**
154
+ * Compute review statistics
155
+ */
156
+ computeStats(pages: PageData[]): ReviewStats;
157
+ }
158
+ /**
159
+ * Compare OCR text blocks to rendered markdown for quality assessment
160
+ * Inspired by spatial structure preservation evaluation
161
+ */
162
+ export declare function compareOcrToMarkdown(ocrBlocks: OcrBlock[], markdownContent: string): ComparisonResult & {
163
+ score: number;
164
+ };
165
+ export type ScoringStrategy = 'direct' | 'structure' | 'comparison' | 'combined';
166
+ /**
167
+ * Create a scorer with a specific strategy
168
+ */
169
+ export declare function createScorer(strategy: ScoringStrategy, config?: Partial<ScorerConfig>): OcrReviewScorer;
170
+ /**
171
+ * Parse pages JSON from CLI output
172
+ */
173
+ export declare function parsePagesJson(json: string): PageData[];
174
+ /**
175
+ * Parse tables JSON from CLI output
176
+ */
177
+ export declare function parseTablesJson(json: string): TableData[];
178
+ /**
179
+ * Format scored pages for output
180
+ */
181
+ export declare function formatScoredPages(pages: ScoredPage[], format?: 'json' | 'jsonl' | 'table' | 'csv'): string;
182
+ /**
183
+ * Format stats for output
184
+ */
185
+ export declare function formatStats(stats: ReviewStats, format?: 'json' | 'table'): string;
186
+ /**
187
+ * Confidence-based filtering thresholds
188
+ * Based on industry best practices for financial document verification
189
+ */
190
+ export declare const CONFIDENCE_TIERS: {
191
+ readonly AUTO_APPROVE: 0.95;
192
+ readonly SPOT_CHECK: 0.7;
193
+ readonly MANUAL_REVIEW: 0.7;
194
+ };
195
+ export type ConfidenceTier = 'auto_approve' | 'spot_check' | 'manual_review';
196
+ /**
197
+ * Categorize a confidence score into action tiers
198
+ */
199
+ export declare function getConfidenceTier(confidence: number): ConfidenceTier;
200
+ /**
201
+ * Batch categorize pages by confidence tier
202
+ */
203
+ export declare function categorizeByConfidence(pages: PageData[]): Record<ConfidenceTier, PageData[]>;
204
+ /**
205
+ * Financial value extracted from a table cell
206
+ */
207
+ export interface FinancialValue {
208
+ label: string;
209
+ value: number;
210
+ page: number;
211
+ tableId?: string;
212
+ confidence?: number;
213
+ }
214
+ /**
215
+ * Check-sum validation rule
216
+ */
217
+ export interface CheckSumRule {
218
+ name: string;
219
+ formula: string;
220
+ fields: string[];
221
+ validate: (values: Record<string, number>) => CheckSumResult;
222
+ }
223
+ export interface CheckSumResult {
224
+ passed: boolean;
225
+ expected: number;
226
+ actual: number;
227
+ difference: number;
228
+ tolerancePct: number;
229
+ }
230
+ /**
231
+ * Common financial check-sum rules
232
+ */
233
+ export declare const FINANCIAL_CHECKSUMS: CheckSumRule[];
234
+ /**
235
+ * Run all applicable check-sum validations on extracted values
236
+ */
237
+ export declare function runCheckSums(values: Record<string, number>, rules?: CheckSumRule[]): Array<{
238
+ rule: CheckSumRule;
239
+ result: CheckSumResult;
240
+ }>;
241
+ /**
242
+ * Anomaly detection result
243
+ */
244
+ export interface AnomalyResult {
245
+ field: string;
246
+ currentValue: number;
247
+ historicalMean: number;
248
+ historicalStdDev: number;
249
+ zScore: number;
250
+ isAnomaly: boolean;
251
+ possibleCause: string;
252
+ }
253
+ /**
254
+ * Detect anomalies in extracted values using statistical analysis
255
+ * Flags potential OCR errors like decimal point shifts
256
+ */
257
+ export declare function detectAnomalies(currentValues: Record<string, number>, historicalValues: Array<Record<string, number>>, zScoreThreshold?: number): AnomalyResult[];
258
+ /**
259
+ * Cross-query validation - verify related fields match
260
+ * e.g., verify Total = Sum of components
261
+ */
262
+ export interface CrossQueryRule {
263
+ name: string;
264
+ totalField: string;
265
+ componentFields: string[];
266
+ tolerance: number;
267
+ }
268
+ export declare const CROSS_QUERY_RULES: CrossQueryRule[];
269
+ export interface CrossQueryResult {
270
+ rule: CrossQueryRule;
271
+ passed: boolean;
272
+ totalValue: number;
273
+ componentSum: number;
274
+ difference: number;
275
+ differencePercent: number;
276
+ presentComponents: string[];
277
+ }
278
+ /**
279
+ * Validate that total fields match sum of their components
280
+ */
281
+ export declare function validateCrossQuery(values: Record<string, number>, rules?: CrossQueryRule[]): CrossQueryResult[];
282
+ /**
283
+ * Complete financial verification result
284
+ */
285
+ export interface VerificationReport {
286
+ confidenceTier: ConfidenceTier;
287
+ checkSums: Array<{
288
+ rule: CheckSumRule;
289
+ result: CheckSumResult;
290
+ }>;
291
+ anomalies: AnomalyResult[];
292
+ crossQueries: CrossQueryResult[];
293
+ overallStatus: 'pass' | 'warning' | 'fail';
294
+ issues: string[];
295
+ recommendations: string[];
296
+ }
297
+ /**
298
+ * Run comprehensive financial verification
299
+ */
300
+ export declare function runFinancialVerification(extractedValues: Record<string, number>, confidence: number, historicalValues?: Array<Record<string, number>>): VerificationReport;
301
+ /**
302
+ * Format verification report for display
303
+ */
304
+ export declare function formatVerificationReport(report: VerificationReport): string;
305
+ //# sourceMappingURL=scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../../src/lib/scorer.ts"],"names":[],"mappings":"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"}