dsh-data-quality 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.es.md +7 -1
- package/README.hi.md +7 -1
- package/README.md +22 -9
- package/README.pt.md +7 -1
- package/README.zh.md +7 -1
- package/cordis.patch.yml +11 -0
- package/lib/index.js +1405 -140
- package/lib/types/config.d.ts +12 -0
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/config.js +35 -0
- package/lib/types/config.js.map +1 -1
- package/lib/types/contract.d.ts +83 -0
- package/lib/types/contract.d.ts.map +1 -0
- package/lib/types/contract.js +144 -0
- package/lib/types/contract.js.map +1 -0
- package/lib/types/dataset.d.ts +50 -3
- package/lib/types/dataset.d.ts.map +1 -1
- package/lib/types/dataset.js +76 -21
- package/lib/types/dataset.js.map +1 -1
- package/lib/types/events.d.ts +2 -0
- package/lib/types/events.d.ts.map +1 -1
- package/lib/types/events.js.map +1 -1
- package/lib/types/index.d.ts +11 -8
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +15 -6
- package/lib/types/index.js.map +1 -1
- package/lib/types/presets.d.ts +28 -0
- package/lib/types/presets.d.ts.map +1 -0
- package/lib/types/presets.js +134 -0
- package/lib/types/presets.js.map +1 -0
- package/lib/types/profile.d.ts +38 -1
- package/lib/types/profile.d.ts.map +1 -1
- package/lib/types/profile.js +64 -10
- package/lib/types/profile.js.map +1 -1
- package/lib/types/provider-local.d.ts +7 -1
- package/lib/types/provider-local.d.ts.map +1 -1
- package/lib/types/provider-local.js +72 -2
- package/lib/types/provider-local.js.map +1 -1
- package/lib/types/scorecard.d.ts +50 -0
- package/lib/types/scorecard.d.ts.map +1 -0
- package/lib/types/scorecard.js +186 -0
- package/lib/types/scorecard.js.map +1 -0
- package/lib/types/service.d.ts +32 -2
- package/lib/types/service.d.ts.map +1 -1
- package/lib/types/service.js.map +1 -1
- package/lib/types/store.d.ts +21 -1
- package/lib/types/store.d.ts.map +1 -1
- package/lib/types/store.js +13 -1
- package/lib/types/store.js.map +1 -1
- package/lib/types/tools/clean.d.ts.map +1 -1
- package/lib/types/tools/clean.js +76 -1
- package/lib/types/tools/clean.js.map +1 -1
- package/lib/types/tools/profile-report-schema.d.ts +315 -0
- package/lib/types/tools/profile-report-schema.d.ts.map +1 -0
- package/lib/types/tools/profile-report-schema.js +95 -0
- package/lib/types/tools/profile-report-schema.js.map +1 -0
- package/lib/types/tools/profile.d.ts.map +1 -1
- package/lib/types/tools/profile.js +6 -53
- package/lib/types/tools/profile.js.map +1 -1
- package/lib/types/tools/report.d.ts +14 -0
- package/lib/types/tools/report.d.ts.map +1 -0
- package/lib/types/tools/report.js +86 -0
- package/lib/types/tools/report.js.map +1 -0
- package/lib/types/tools/shared.d.ts.map +1 -1
- package/lib/types/tools/shared.js +22 -2
- package/lib/types/tools/shared.js.map +1 -1
- package/lib/types/tools/verify.d.ts.map +1 -1
- package/lib/types/tools/verify.js +36 -1
- package/lib/types/tools/verify.js.map +1 -1
- package/lib/types/verify.d.ts +49 -3
- package/lib/types/verify.d.ts.map +1 -1
- package/lib/types/verify.js +111 -4
- package/lib/types/verify.js.map +1 -1
- package/lib/types/version.d.ts +1 -1
- package/lib/types/version.js +1 -1
- package/package.json +1 -1
- package/src/config.ts +52 -0
- package/src/contract.ts +190 -0
- package/src/dataset.ts +101 -21
- package/src/events.ts +2 -0
- package/src/index.ts +25 -8
- package/src/presets.ts +146 -0
- package/src/profile.ts +101 -11
- package/src/provider-local.ts +77 -3
- package/src/scorecard.ts +244 -0
- package/src/service.ts +34 -2
- package/src/store.ts +28 -2
- package/src/tools/clean.ts +76 -1
- package/src/tools/profile-report-schema.ts +97 -0
- package/src/tools/profile.ts +8 -56
- package/src/tools/report.ts +108 -0
- package/src/tools/shared.ts +21 -2
- package/src/tools/verify.ts +40 -2
- package/src/verify.ts +151 -5
- package/src/version.ts +1 -1
package/lib/types/verify.js
CHANGED
|
@@ -20,6 +20,19 @@ export class VerifyRuleError extends Error {
|
|
|
20
20
|
this.name = 'VerifyRuleError';
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
/** Raised for invalid expectations; `message` names the expectation index and reason. */
|
|
24
|
+
export class VerifyExpectationError extends Error {
|
|
25
|
+
expectationIndex;
|
|
26
|
+
/**
|
|
27
|
+
* @param expectationIndex - index of the offending expectation in the request array.
|
|
28
|
+
* @param message - actionable human-readable detail.
|
|
29
|
+
*/
|
|
30
|
+
constructor(expectationIndex, message) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.expectationIndex = expectationIndex;
|
|
33
|
+
this.name = 'VerifyExpectationError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
23
36
|
/** Assert `column` exists. */
|
|
24
37
|
function requireColumn(columns, column, ruleIndex) {
|
|
25
38
|
if (!columns.includes(column)) {
|
|
@@ -63,13 +76,101 @@ function evaluate(table, ruleIndex, ruleName, columns, predicate, evidenceRowLim
|
|
|
63
76
|
};
|
|
64
77
|
}
|
|
65
78
|
const CROSS_OPS = ['<', '<=', '==', '!=', '>=', '>'];
|
|
79
|
+
/** The metric ids, for validation and diagnostics. */
|
|
80
|
+
const VERIFY_METRICS = ['rowCount', 'columnSum', 'columnMean', 'uniqueCount', 'nullCount'];
|
|
81
|
+
/** Throw unless the expectation is well-formed (metric/column/tolerance). */
|
|
82
|
+
function validateExpectation(table, expectation, index) {
|
|
83
|
+
if (!VERIFY_METRICS.includes(expectation.metric)) {
|
|
84
|
+
throw new VerifyExpectationError(index, `expectation ${index}: unknown metric ${JSON.stringify(expectation.metric)} (expected one of ${VERIFY_METRICS.join(', ')})`);
|
|
85
|
+
}
|
|
86
|
+
if (expectation.metric !== 'rowCount') {
|
|
87
|
+
if (expectation.column === undefined || expectation.column === '') {
|
|
88
|
+
throw new VerifyExpectationError(index, `expectation ${index}: metric ${expectation.metric} requires a column`);
|
|
89
|
+
}
|
|
90
|
+
if (!table.columns.includes(expectation.column)) {
|
|
91
|
+
throw new VerifyExpectationError(index, `expectation ${index}: unknown column ${JSON.stringify(expectation.column)} (columns: ${table.columns.join(', ')})`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (expectation.column !== undefined) {
|
|
95
|
+
throw new VerifyExpectationError(index, `expectation ${index}: metric rowCount takes no column, got ${JSON.stringify(expectation.column)}`);
|
|
96
|
+
}
|
|
97
|
+
if (expectation.tolerance !== undefined && (typeof expectation.tolerance !== 'number' || !Number.isFinite(expectation.tolerance) || expectation.tolerance < 0 || expectation.tolerance > 1)) {
|
|
98
|
+
throw new VerifyExpectationError(index, `expectation ${index}: tolerance must be a finite number in [0, 1], got ${String(expectation.tolerance)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Compute the deterministic actual value of one expectation's metric. */
|
|
102
|
+
function metricValueOf(table, expectation) {
|
|
103
|
+
switch (expectation.metric) {
|
|
104
|
+
case 'rowCount':
|
|
105
|
+
return table.rows.length;
|
|
106
|
+
case 'nullCount': {
|
|
107
|
+
let count = 0;
|
|
108
|
+
for (const row of table.rows) {
|
|
109
|
+
if (isMissing(row[expectation.column]))
|
|
110
|
+
count += 1;
|
|
111
|
+
}
|
|
112
|
+
return count;
|
|
113
|
+
}
|
|
114
|
+
case 'uniqueCount': {
|
|
115
|
+
const distinct = new Set();
|
|
116
|
+
for (const row of table.rows) {
|
|
117
|
+
const cell = row[expectation.column];
|
|
118
|
+
if (isMissing(cell))
|
|
119
|
+
continue;
|
|
120
|
+
distinct.add(typeof cell === 'string' ? cell : JSON.stringify(cell));
|
|
121
|
+
}
|
|
122
|
+
return distinct.size;
|
|
123
|
+
}
|
|
124
|
+
case 'columnSum':
|
|
125
|
+
case 'columnMean': {
|
|
126
|
+
let sum = 0;
|
|
127
|
+
let count = 0;
|
|
128
|
+
for (const row of table.rows) {
|
|
129
|
+
const value = parseNumeric(row[expectation.column]);
|
|
130
|
+
if (value === undefined)
|
|
131
|
+
continue;
|
|
132
|
+
sum += value;
|
|
133
|
+
count += 1;
|
|
134
|
+
}
|
|
135
|
+
return expectation.metric === 'columnSum' ? sum : count === 0 ? 0 : sum / count;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Reconcile each expectation against its deterministic actual value. A
|
|
141
|
+
* mismatch is a normal `passed: false` result, never a thrown error; invalid
|
|
142
|
+
* metrics, columns, and tolerances fail loud.
|
|
143
|
+
* @param table - the parsed dataset.
|
|
144
|
+
* @param expectations - the expectations to reconcile.
|
|
145
|
+
* @param defaultTolerance - configured fallback relative tolerance.
|
|
146
|
+
* @param signal - optional abort signal.
|
|
147
|
+
* @returns one outcome per expectation.
|
|
148
|
+
*/
|
|
149
|
+
export function verifyExpectations(table, expectations, defaultTolerance, signal) {
|
|
150
|
+
return expectations.map((expectation, index) => {
|
|
151
|
+
throwIfAborted(signal);
|
|
152
|
+
validateExpectation(table, expectation, index);
|
|
153
|
+
const actual = metricValueOf(table, expectation);
|
|
154
|
+
const tolerance = expectation.tolerance ?? defaultTolerance;
|
|
155
|
+
const passed = numericClose(actual, expectation.expected, tolerance);
|
|
156
|
+
return {
|
|
157
|
+
metric: expectation.metric,
|
|
158
|
+
...(expectation.column !== undefined ? { column: expectation.column } : {}),
|
|
159
|
+
expected: expectation.expected,
|
|
160
|
+
actual,
|
|
161
|
+
tolerance,
|
|
162
|
+
passed,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
}
|
|
66
166
|
/**
|
|
67
167
|
* Apply verification rules over a parsed table. A missing cell fails every
|
|
68
|
-
* rule that reads it. The overall `passed` is the conjunction of rule passes
|
|
69
|
-
* a failing dataset is a normal result, never a
|
|
168
|
+
* rule that reads it. The overall `passed` is the conjunction of rule passes
|
|
169
|
+
* and expectation passes; a failing dataset is a normal result, never a
|
|
170
|
+
* thrown error.
|
|
70
171
|
* @param table - the parsed dataset.
|
|
71
172
|
* @param rules - non-empty rule list.
|
|
72
|
-
* @param options - evidence cap, injected clock for `freshness`, abort signal.
|
|
173
|
+
* @param options - evidence cap, injected clock for `freshness`, optional expectations, default tolerance, abort signal.
|
|
73
174
|
* @returns the verify report (without the dataset label; the caller adds it).
|
|
74
175
|
*/
|
|
75
176
|
export function verifyTable(table, rules, options) {
|
|
@@ -233,10 +334,12 @@ export function verifyTable(table, rules, options) {
|
|
|
233
334
|
}
|
|
234
335
|
results.push(result);
|
|
235
336
|
}
|
|
337
|
+
const expectations = verifyExpectations(table, options.expectations ?? [], options.defaultTolerance ?? 1e-9, options.signal);
|
|
236
338
|
return {
|
|
237
|
-
passed: results.every((result) => result.passed),
|
|
339
|
+
passed: results.every((result) => result.passed) && expectations.every((expectation) => expectation.passed),
|
|
238
340
|
rowCount: table.rows.length,
|
|
239
341
|
rules: results,
|
|
342
|
+
expectations,
|
|
240
343
|
generatedAt: options.now(),
|
|
241
344
|
};
|
|
242
345
|
}
|
|
@@ -254,6 +357,10 @@ export function renderVerifyText(report) {
|
|
|
254
357
|
lines.push(` … and ${rule.failedCount - rule.evidence.length} more failing row(s)`);
|
|
255
358
|
}
|
|
256
359
|
}
|
|
360
|
+
for (const expectation of report.expectations) {
|
|
361
|
+
const target = expectation.column !== undefined ? `${expectation.metric}(${expectation.column})` : expectation.metric;
|
|
362
|
+
lines.push(`- [${expectation.passed ? 'pass' : 'FAIL'}] expectation ${target}: actual ${expectation.actual} vs expected ${expectation.expected} (tolerance ${expectation.tolerance})`);
|
|
363
|
+
}
|
|
257
364
|
return lines.join('\n');
|
|
258
365
|
}
|
|
259
366
|
/**
|
package/lib/types/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/verify.ts"],"names":[],"mappings":"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"}
|
package/lib/types/version.d.ts
CHANGED
package/lib/types/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-data-quality",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Deterministic data profiling, cleaning, and verification for DeepSeek Harness: a ctx.dataQuality capability seam (Service Definition / local Provider / tool Consumers) with data_profile, data_clean, and data_verify model tools, a frozen cross-plugin verifyCitations contract, durable reports in a storage domain, and data-quality/* session events on hosts that support them.",
|
|
5
5
|
"author": "dsh-data-quality contributors",
|
|
6
6
|
"private": false,
|
package/src/config.ts
CHANGED
|
@@ -7,6 +7,29 @@
|
|
|
7
7
|
|
|
8
8
|
import z from '@deepseek-ai/schemastery'
|
|
9
9
|
|
|
10
|
+
/** Per-dimension scorecard weights (all optional; defaults fill to `1` = equal). */
|
|
11
|
+
export interface ScorecardWeights {
|
|
12
|
+
completeness?: number
|
|
13
|
+
uniqueness?: number
|
|
14
|
+
validity?: number
|
|
15
|
+
consistency?: number
|
|
16
|
+
timeliness?: number
|
|
17
|
+
accuracy?: number
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** The six scorecard dimension ids, in report order (kept in sync with `scorecard.ts`). */
|
|
21
|
+
const SCORECARD_DIMENSIONS = ['completeness', 'uniqueness', 'validity', 'consistency', 'timeliness', 'accuracy'] as const
|
|
22
|
+
|
|
23
|
+
/** Equal-weight defaults for {@link ScorecardWeights}. */
|
|
24
|
+
const EQUAL_WEIGHTS: Required<ScorecardWeights> = {
|
|
25
|
+
completeness: 1,
|
|
26
|
+
uniqueness: 1,
|
|
27
|
+
validity: 1,
|
|
28
|
+
consistency: 1,
|
|
29
|
+
timeliness: 1,
|
|
30
|
+
accuracy: 1,
|
|
31
|
+
}
|
|
32
|
+
|
|
10
33
|
/** Raw plugin config — every field optional; {@link resolveConfig} supplies the defaults. */
|
|
11
34
|
export interface Config {
|
|
12
35
|
/** Master switch; `false` mounts nothing. */
|
|
@@ -25,6 +48,8 @@ export interface Config {
|
|
|
25
48
|
workspaceRoot?: string
|
|
26
49
|
/** Persist reports to the `data_quality` storage domain. */
|
|
27
50
|
storeReports?: boolean
|
|
51
|
+
/** Per-dimension weights for the scorecard's weighted overall total (non-negative). */
|
|
52
|
+
scorecardWeights?: ScorecardWeights
|
|
28
53
|
}
|
|
29
54
|
|
|
30
55
|
/** Fully resolved config handed to the runtime. */
|
|
@@ -37,6 +62,7 @@ export interface ResolvedConfig {
|
|
|
37
62
|
readonly allowedExtensions: readonly string[]
|
|
38
63
|
readonly workspaceRoot: string
|
|
39
64
|
readonly storeReports: boolean
|
|
65
|
+
readonly scorecardWeights: Required<ScorecardWeights>
|
|
40
66
|
}
|
|
41
67
|
|
|
42
68
|
/** Schemastery schema: the loader validates and fills defaults before `apply`. */
|
|
@@ -49,6 +75,16 @@ export const Config: z<Config> = z.object({
|
|
|
49
75
|
allowedExtensions: z.array(z.string()).default(['.csv', '.tsv', '.json', '.jsonl']),
|
|
50
76
|
workspaceRoot: z.string().default(''),
|
|
51
77
|
storeReports: z.boolean().default(true),
|
|
78
|
+
scorecardWeights: z
|
|
79
|
+
.object({
|
|
80
|
+
completeness: z.number().default(1),
|
|
81
|
+
uniqueness: z.number().default(1),
|
|
82
|
+
validity: z.number().default(1),
|
|
83
|
+
consistency: z.number().default(1),
|
|
84
|
+
timeliness: z.number().default(1),
|
|
85
|
+
accuracy: z.number().default(1),
|
|
86
|
+
})
|
|
87
|
+
.default(EQUAL_WEIGHTS),
|
|
52
88
|
})
|
|
53
89
|
|
|
54
90
|
/** Throw unless `value` is a positive safe integer. */
|
|
@@ -91,6 +127,8 @@ export function resolveConfig(config: Config = {}): ResolvedConfig {
|
|
|
91
127
|
throw new TypeError('allowedExtensions must not be empty')
|
|
92
128
|
}
|
|
93
129
|
|
|
130
|
+
const scorecardWeights = resolveScorecardWeights(config.scorecardWeights)
|
|
131
|
+
|
|
94
132
|
return {
|
|
95
133
|
enabled: config.enabled ?? true,
|
|
96
134
|
maxRows,
|
|
@@ -100,5 +138,19 @@ export function resolveConfig(config: Config = {}): ResolvedConfig {
|
|
|
100
138
|
allowedExtensions,
|
|
101
139
|
workspaceRoot: config.workspaceRoot ?? '',
|
|
102
140
|
storeReports: config.storeReports ?? true,
|
|
141
|
+
scorecardWeights,
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** Resolve scorecard weights, filling defaults and rejecting non-negative violations loudly. */
|
|
146
|
+
function resolveScorecardWeights(weights: ScorecardWeights = {}): Required<ScorecardWeights> {
|
|
147
|
+
const out = {} as Required<ScorecardWeights>
|
|
148
|
+
for (const dimension of SCORECARD_DIMENSIONS) {
|
|
149
|
+
const value = weights[dimension] ?? 1
|
|
150
|
+
if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
|
|
151
|
+
throw new TypeError(`scorecardWeights.${dimension} must be a non-negative finite number, got ${String(value)}`)
|
|
152
|
+
}
|
|
153
|
+
out[dimension] = value
|
|
103
154
|
}
|
|
155
|
+
return out
|
|
104
156
|
}
|
package/src/contract.ts
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delivery contract for `data_clean`: a deterministic pre-delivery validation
|
|
3
|
+
* summary (primary-key/type/dedupe row-count comparison plus uniqueness and
|
|
4
|
+
* non-null regression) and the clean before/after profile diff report. Pure —
|
|
5
|
+
* no I/O, no clock, no RNG; timestamps are injected.
|
|
6
|
+
* @module dsh-data-quality/contract
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { isMissing, parseBoolean, parseDate, parseNumeric, throwIfAborted, type Row, type Table } from './dataset.ts'
|
|
10
|
+
import type { CleanResult, CleanRule } from './clean.ts'
|
|
11
|
+
import { profileTable, type ProfileReport } from './profile.ts'
|
|
12
|
+
import type { ScorecardDimensionName } from './scorecard.ts'
|
|
13
|
+
|
|
14
|
+
/** The pre-delivery contract summary attached to a clean run. */
|
|
15
|
+
export interface CleanContractSummary {
|
|
16
|
+
/** Row count before cleaning. */
|
|
17
|
+
readonly inputRows: number
|
|
18
|
+
/** Row count after cleaning. */
|
|
19
|
+
readonly outputRows: number
|
|
20
|
+
/** Rows removed across all rules. */
|
|
21
|
+
readonly removedRows: number
|
|
22
|
+
/** Key columns of the first `dedupe` rule; `null` when no dedupe rule ran (uniqueness then covers full rows). */
|
|
23
|
+
readonly dedupeColumns: string[] | null
|
|
24
|
+
/** Whether the uniqueness key is free of duplicates in the cleaned output. */
|
|
25
|
+
readonly uniqueKeys: boolean
|
|
26
|
+
/** Remaining duplicate rows over the uniqueness key in the cleaned output. */
|
|
27
|
+
readonly remainingDuplicateRows: number
|
|
28
|
+
/** Non-null regression: remaining missing cells in columns a `fill-missing` rule targeted. */
|
|
29
|
+
readonly remainingMissing: Array<{ readonly column: string; readonly count: number }>
|
|
30
|
+
/** Type regression: remaining non-conforming cells in columns a `coerce-type` rule targeted. */
|
|
31
|
+
readonly typeConformance: Array<{ readonly column: string; readonly to: 'number' | 'date' | 'boolean'; readonly invalidCount: number }>
|
|
32
|
+
/** Per-column decision trace: which strategies touched each column and how many rows they affected. */
|
|
33
|
+
readonly columnDecisions: Array<{
|
|
34
|
+
readonly column: string
|
|
35
|
+
readonly decisions: Array<{ readonly strategy: string; readonly affectedRows: number }>
|
|
36
|
+
}>
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** The clean before/after profile diff report (persisted under the `clean-diff` report kind). */
|
|
40
|
+
export interface CleanProfileDiff {
|
|
41
|
+
readonly dataset: string
|
|
42
|
+
/** Full profile of the input dataset. */
|
|
43
|
+
readonly before: ProfileReport
|
|
44
|
+
/** Full profile of the cleaned output (including its scorecard). */
|
|
45
|
+
readonly after: ProfileReport
|
|
46
|
+
readonly generatedAt: number
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Count missing cells in one column of the cleaned output. */
|
|
50
|
+
function countMissing(rows: readonly Row[], column: string, signal?: AbortSignal): number {
|
|
51
|
+
let count = 0
|
|
52
|
+
for (const [index, row] of rows.entries()) {
|
|
53
|
+
if (index % 1024 === 0) throwIfAborted(signal)
|
|
54
|
+
if (isMissing(row[column])) count += 1
|
|
55
|
+
}
|
|
56
|
+
return count
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Count present cells in one column that still fail to parse as the requested type. */
|
|
60
|
+
function countNonConforming(rows: readonly Row[], column: string, to: 'number' | 'date' | 'boolean', signal?: AbortSignal): number {
|
|
61
|
+
let count = 0
|
|
62
|
+
for (const [index, row] of rows.entries()) {
|
|
63
|
+
if (index % 1024 === 0) throwIfAborted(signal)
|
|
64
|
+
const cell = row[column]
|
|
65
|
+
if (isMissing(cell)) continue
|
|
66
|
+
const conforms = to === 'number' ? parseNumeric(cell) !== undefined : to === 'date' ? parseDate(cell) !== undefined : parseBoolean(cell) !== undefined
|
|
67
|
+
if (!conforms) count += 1
|
|
68
|
+
}
|
|
69
|
+
return count
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Compute the pre-delivery contract summary from a cleaning run: dedupe
|
|
74
|
+
* before/after row counts, the dedupe key's uniqueness regression, and the
|
|
75
|
+
* non-null/type regressions over the columns the rules targeted.
|
|
76
|
+
* @param result - the cleaning outcome (input/output rows plus cleaned rows).
|
|
77
|
+
* @param rules - the ordered rules that produced `result`.
|
|
78
|
+
* @param options - optional abort signal.
|
|
79
|
+
* @returns the contract summary.
|
|
80
|
+
*/
|
|
81
|
+
export function computeCleanContract(
|
|
82
|
+
result: CleanResult,
|
|
83
|
+
rules: readonly CleanRule[],
|
|
84
|
+
options: { signal?: AbortSignal | undefined } = {},
|
|
85
|
+
): CleanContractSummary {
|
|
86
|
+
const dedupeRule = rules.find((rule) => rule.rule === 'dedupe') as Extract<CleanRule, { rule: 'dedupe' }> | undefined
|
|
87
|
+
const dedupeColumns = dedupeRule === undefined ? null : [...(dedupeRule.columns ?? result.columns)]
|
|
88
|
+
const keyColumns = dedupeColumns ?? result.columns
|
|
89
|
+
const seen = new Set<string>()
|
|
90
|
+
let remainingDuplicateRows = 0
|
|
91
|
+
for (const [index, row] of result.rows.entries()) {
|
|
92
|
+
if (index % 1024 === 0) throwIfAborted(options.signal)
|
|
93
|
+
const key = JSON.stringify(keyColumns.map((column) => row[column] ?? null))
|
|
94
|
+
if (seen.has(key)) {
|
|
95
|
+
remainingDuplicateRows += 1
|
|
96
|
+
} else {
|
|
97
|
+
seen.add(key)
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const remainingMissing = rules
|
|
101
|
+
.filter((rule) => rule.rule === 'fill-missing')
|
|
102
|
+
.map((rule) => {
|
|
103
|
+
const fill = rule as Extract<CleanRule, { rule: 'fill-missing' }>
|
|
104
|
+
return { column: fill.column, count: countMissing(result.rows, fill.column, options.signal) }
|
|
105
|
+
})
|
|
106
|
+
const typeConformance = rules
|
|
107
|
+
.filter((rule) => rule.rule === 'coerce-type')
|
|
108
|
+
.map((rule) => {
|
|
109
|
+
const coerce = rule as Extract<CleanRule, { rule: 'coerce-type' }>
|
|
110
|
+
return { column: coerce.column, to: coerce.to, invalidCount: countNonConforming(result.rows, coerce.column, coerce.to, options.signal) }
|
|
111
|
+
})
|
|
112
|
+
const columnDecisions = traceColumnDecisions(result, rules)
|
|
113
|
+
return {
|
|
114
|
+
inputRows: result.inputRows,
|
|
115
|
+
outputRows: result.outputRows,
|
|
116
|
+
removedRows: result.inputRows - result.outputRows,
|
|
117
|
+
dedupeColumns,
|
|
118
|
+
uniqueKeys: remainingDuplicateRows === 0,
|
|
119
|
+
remainingDuplicateRows,
|
|
120
|
+
remainingMissing,
|
|
121
|
+
typeConformance,
|
|
122
|
+
columnDecisions,
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** The columns a single rule targets (single-column rules target one column; trim/dedupe may target many). */
|
|
127
|
+
function ruleColumns(rule: CleanRule, allColumns: readonly string[]): string[] {
|
|
128
|
+
switch (rule.rule) {
|
|
129
|
+
case 'fill-missing':
|
|
130
|
+
case 'coerce-type':
|
|
131
|
+
case 'normalize-unit':
|
|
132
|
+
case 'map-values':
|
|
133
|
+
return [rule.column]
|
|
134
|
+
case 'trim':
|
|
135
|
+
case 'dedupe':
|
|
136
|
+
return [...(rule.columns ?? allColumns)]
|
|
137
|
+
default:
|
|
138
|
+
return []
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Build the per-column decision trace: strategies + affected rows, in dataset column order. */
|
|
143
|
+
function traceColumnDecisions(
|
|
144
|
+
result: CleanResult,
|
|
145
|
+
rules: readonly CleanRule[],
|
|
146
|
+
): CleanContractSummary['columnDecisions'] {
|
|
147
|
+
const byColumn = new Map<string, Array<{ strategy: string; affectedRows: number }>>()
|
|
148
|
+
for (const [index, rule] of rules.entries()) {
|
|
149
|
+
const log = result.logs[index]
|
|
150
|
+
if (log === undefined) continue
|
|
151
|
+
for (const column of ruleColumns(rule, result.columns)) {
|
|
152
|
+
const list = byColumn.get(column) ?? []
|
|
153
|
+
list.push({ strategy: rule.rule, affectedRows: log.affectedRows })
|
|
154
|
+
byColumn.set(column, list)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return result.columns
|
|
158
|
+
.filter((column) => byColumn.has(column))
|
|
159
|
+
.map((column) => ({ column, decisions: byColumn.get(column) as Array<{ strategy: string; affectedRows: number }> }))
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Build the clean before/after profile diff: two full {@link ProfileReport}
|
|
164
|
+
* snapshots (input and cleaned output) under one envelope. Reuses the profile
|
|
165
|
+
* engine so the scorecard and duplicate detection stay consistent across the
|
|
166
|
+
* whole plugin.
|
|
167
|
+
* @param input - the input dataset.
|
|
168
|
+
* @param output - the cleaned dataset.
|
|
169
|
+
* @param options - dataset label, injected timestamp, optional weights, optional abort signal.
|
|
170
|
+
* @returns the diff report.
|
|
171
|
+
*/
|
|
172
|
+
export function computeCleanProfileDiff(
|
|
173
|
+
input: Table,
|
|
174
|
+
output: Table,
|
|
175
|
+
options: { dataset: string; generatedAt: number; scorecardWeights?: Readonly<Record<ScorecardDimensionName, number>> | undefined; signal?: AbortSignal | undefined },
|
|
176
|
+
): CleanProfileDiff {
|
|
177
|
+
const before = profileTable(input, {
|
|
178
|
+
dataset: options.dataset,
|
|
179
|
+
generatedAt: options.generatedAt,
|
|
180
|
+
scorecardWeights: options.scorecardWeights,
|
|
181
|
+
signal: options.signal,
|
|
182
|
+
})
|
|
183
|
+
const after = profileTable(output, {
|
|
184
|
+
dataset: options.dataset,
|
|
185
|
+
generatedAt: options.generatedAt,
|
|
186
|
+
scorecardWeights: options.scorecardWeights,
|
|
187
|
+
signal: options.signal,
|
|
188
|
+
})
|
|
189
|
+
return { dataset: options.dataset, before, after, generatedAt: options.generatedAt }
|
|
190
|
+
}
|