@geotechcli/core 0.4.27 → 0.4.29

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 (70) hide show
  1. package/dist/evidence/evidence-ref.d.ts +32 -0
  2. package/dist/evidence/evidence-ref.d.ts.map +1 -0
  3. package/dist/evidence/evidence-ref.js +6 -0
  4. package/dist/evidence/evidence-ref.js.map +1 -0
  5. package/dist/evidence/index.d.ts +2 -0
  6. package/dist/evidence/index.d.ts.map +1 -0
  7. package/dist/evidence/index.js +2 -0
  8. package/dist/evidence/index.js.map +1 -0
  9. package/dist/ground-model/builder.d.ts +7 -0
  10. package/dist/ground-model/builder.d.ts.map +1 -0
  11. package/dist/ground-model/builder.js +401 -0
  12. package/dist/ground-model/builder.js.map +1 -0
  13. package/dist/ground-model/index.d.ts +3 -0
  14. package/dist/ground-model/index.d.ts.map +1 -0
  15. package/dist/ground-model/index.js +2 -0
  16. package/dist/ground-model/index.js.map +1 -0
  17. package/dist/ground-model/model.d.ts +119 -0
  18. package/dist/ground-model/model.d.ts.map +1 -0
  19. package/dist/ground-model/model.js +2 -0
  20. package/dist/ground-model/model.js.map +1 -0
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +6 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/meta/metadata.json +1 -1
  26. package/dist/tabular/csv.d.ts +17 -0
  27. package/dist/tabular/csv.d.ts.map +1 -0
  28. package/dist/tabular/csv.js +123 -0
  29. package/dist/tabular/csv.js.map +1 -0
  30. package/dist/tabular/index.d.ts +4 -0
  31. package/dist/tabular/index.d.ts.map +1 -0
  32. package/dist/tabular/index.js +4 -0
  33. package/dist/tabular/index.js.map +1 -0
  34. package/dist/tabular/schema-inference.d.ts +45 -0
  35. package/dist/tabular/schema-inference.d.ts.map +1 -0
  36. package/dist/tabular/schema-inference.js +284 -0
  37. package/dist/tabular/schema-inference.js.map +1 -0
  38. package/dist/tabular/xlsx.d.ts +15 -0
  39. package/dist/tabular/xlsx.d.ts.map +1 -0
  40. package/dist/tabular/xlsx.js +190 -0
  41. package/dist/tabular/xlsx.js.map +1 -0
  42. package/dist/verifier/findings.d.ts +22 -0
  43. package/dist/verifier/findings.d.ts.map +1 -0
  44. package/dist/verifier/findings.js +96 -0
  45. package/dist/verifier/findings.js.map +1 -0
  46. package/dist/verifier/index.d.ts +2 -0
  47. package/dist/verifier/index.d.ts.map +1 -0
  48. package/dist/verifier/index.js +2 -0
  49. package/dist/verifier/index.js.map +1 -0
  50. package/dist/workspace/classifier.d.ts +7 -0
  51. package/dist/workspace/classifier.d.ts.map +1 -0
  52. package/dist/workspace/classifier.js +186 -0
  53. package/dist/workspace/classifier.js.map +1 -0
  54. package/dist/workspace/dossier.d.ts +3 -0
  55. package/dist/workspace/dossier.d.ts.map +1 -0
  56. package/dist/workspace/dossier.js +414 -0
  57. package/dist/workspace/dossier.js.map +1 -0
  58. package/dist/workspace/index.d.ts +5 -0
  59. package/dist/workspace/index.d.ts.map +1 -0
  60. package/dist/workspace/index.js +5 -0
  61. package/dist/workspace/index.js.map +1 -0
  62. package/dist/workspace/manifest.d.ts +63 -0
  63. package/dist/workspace/manifest.d.ts.map +1 -0
  64. package/dist/workspace/manifest.js +7 -0
  65. package/dist/workspace/manifest.js.map +1 -0
  66. package/dist/workspace/scanner.d.ts +3 -0
  67. package/dist/workspace/scanner.d.ts.map +1 -0
  68. package/dist/workspace/scanner.js +254 -0
  69. package/dist/workspace/scanner.js.map +1 -0
  70. package/package.json +1 -1
@@ -0,0 +1,32 @@
1
+ export type EvidenceSourceType = 'workspace-file' | 'tabular-cell' | 'pdf-page' | 'image-region' | 'ingest-result' | 'manual-entry';
2
+ export type EvidenceMethod = 'workspace-schema' | 'csv-sample' | 'xlsx-sample' | 'ags-signature' | 'pdf-text' | 'vision' | 'manual';
3
+ export interface EvidenceLocation {
4
+ filePath: string;
5
+ absolutePath?: string;
6
+ sheetName?: string;
7
+ pageNumber?: number;
8
+ rowNumber?: number;
9
+ columnName?: string;
10
+ cellRef?: string;
11
+ }
12
+ export interface EvidenceRef {
13
+ id: string;
14
+ sourceType: EvidenceSourceType;
15
+ sourcePath: string;
16
+ location: EvidenceLocation;
17
+ method: EvidenceMethod;
18
+ confidence: number;
19
+ rawValue?: string | number | boolean | null;
20
+ normalizedValue?: string | number | boolean | null;
21
+ unit?: string;
22
+ warnings: string[];
23
+ }
24
+ export interface EvidenceBoundValue<T = string | number | boolean | null> {
25
+ value: T;
26
+ unit?: string;
27
+ evidenceIds: string[];
28
+ confidence: number;
29
+ warnings: string[];
30
+ }
31
+ export declare function normalizeEvidenceConfidence(value: number): number;
32
+ //# sourceMappingURL=evidence-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-ref.d.ts","sourceRoot":"","sources":["../../src/evidence/evidence-ref.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAChB,cAAc,GACd,UAAU,GACV,cAAc,GACd,eAAe,GACf,cAAc,CAAC;AAEnB,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,eAAe,GACf,UAAU,GACV,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,kBAAkB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;IACtE,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjE"}
@@ -0,0 +1,6 @@
1
+ export function normalizeEvidenceConfidence(value) {
2
+ if (!Number.isFinite(value))
3
+ return 0.2;
4
+ return Math.round(Math.min(1, Math.max(0, value)) * 100) / 100;
5
+ }
6
+ //# sourceMappingURL=evidence-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-ref.js","sourceRoot":"","sources":["../../src/evidence/evidence-ref.ts"],"names":[],"mappings":"AAgDA,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACjE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { normalizeEvidenceConfidence, type EvidenceBoundValue, type EvidenceLocation, type EvidenceMethod, type EvidenceRef, type EvidenceSourceType, } from './evidence-ref.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { normalizeEvidenceConfidence, } from './evidence-ref.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,GAM5B,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProjectManifest } from '../workspace/index.js';
2
+ import { type GroundModel } from './model.js';
3
+ export interface BuildGroundModelOptions {
4
+ maxRows?: number;
5
+ }
6
+ export declare function buildGroundModelFromManifest(manifest: ProjectManifest, options?: BuildGroundModelOptions): Promise<GroundModel>;
7
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/ground-model/builder.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,uBAAuB,CAAC;AACjF,OAAO,EACL,KAAK,WAAW,EAUjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsZD,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,eAAe,EACzB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,WAAW,CAAC,CAqFtB"}
@@ -0,0 +1,401 @@
1
+ import { normalizeEvidenceConfidence } from '../evidence/index.js';
2
+ import { parseDelimitedFile, parseXlsxFile, } from '../tabular/index.js';
3
+ const DEFAULT_MAX_ROWS = 200;
4
+ const SPT_STANDARD_REFERENCE_VALUES = new Set([1892, 2131, 2132, 2720, 6403, 8009, 9640]);
5
+ const PARAMETER_ROLES = [
6
+ { role: 'water_content', name: 'waterContent' },
7
+ { role: 'liquid_limit', name: 'liquidLimit' },
8
+ { role: 'plastic_limit', name: 'plasticLimit' },
9
+ { role: 'plasticity_index', name: 'plasticityIndex' },
10
+ { role: 'gradation_size', name: 'gradationSize' },
11
+ { role: 'percent_passing', name: 'percentPassing' },
12
+ { role: 'unit_weight', name: 'unitWeight' },
13
+ ];
14
+ function roleColumn(schema, role) {
15
+ return schema.columns.find((column) => column.roles.includes(role))?.name;
16
+ }
17
+ function roleColumns(schema, role) {
18
+ return schema.columns.filter((column) => column.roles.includes(role)).map((column) => column.name);
19
+ }
20
+ function columnUnit(schema, columnName) {
21
+ if (!columnName)
22
+ return undefined;
23
+ return schema.columns.find((column) => column.name === columnName)?.unit;
24
+ }
25
+ function cell(row, columnName) {
26
+ return columnName ? row[columnName] ?? null : null;
27
+ }
28
+ function asNumber(value) {
29
+ if (typeof value === 'number' && Number.isFinite(value))
30
+ return value;
31
+ if (typeof value !== 'string')
32
+ return undefined;
33
+ const parsed = Number(value.replace(/,/g, '').trim());
34
+ return Number.isFinite(parsed) ? parsed : undefined;
35
+ }
36
+ function asText(value) {
37
+ if (value == null)
38
+ return undefined;
39
+ const text = String(value).trim();
40
+ return text.length > 0 ? text : undefined;
41
+ }
42
+ function evidenceConfidence(file, schema) {
43
+ return normalizeEvidenceConfidence(Math.min(file.classification.confidence, schema.confidence));
44
+ }
45
+ function addEvidence(state, source, rowIndex, columnName, rawValue, normalizedValue, warnings = []) {
46
+ state.evidenceCounter += 1;
47
+ const id = `ev-${String(state.evidenceCounter).padStart(5, '0')}`;
48
+ state.evidence.push({
49
+ id,
50
+ sourceType: 'tabular-cell',
51
+ sourcePath: source.file.path,
52
+ location: {
53
+ filePath: source.file.path,
54
+ absolutePath: source.file.absolutePath,
55
+ sheetName: source.schema.sheetName,
56
+ rowNumber: rowIndex + 2,
57
+ columnName,
58
+ },
59
+ method: source.method,
60
+ confidence: evidenceConfidence(source.file, source.schema),
61
+ rawValue,
62
+ normalizedValue,
63
+ unit: columnUnit(source.schema, columnName),
64
+ warnings,
65
+ });
66
+ return id;
67
+ }
68
+ function sourceBoreholeId(source) {
69
+ return source.file.name.match(/\bBH[-_\s]?\d+\b/i)?.[0].replace(/\s+/g, '-').toUpperCase();
70
+ }
71
+ function ensureBorehole(boreholes, id, evidenceIds = [], confidence = 0.5) {
72
+ const existing = boreholes.get(id);
73
+ if (existing) {
74
+ existing.evidenceIds = [...new Set([...existing.evidenceIds, ...evidenceIds])];
75
+ existing.confidence = normalizeEvidenceConfidence(Math.max(existing.confidence, confidence));
76
+ return existing;
77
+ }
78
+ const borehole = {
79
+ id,
80
+ sptTests: [],
81
+ strata: [],
82
+ groundwater: [],
83
+ evidenceIds,
84
+ confidence: normalizeEvidenceConfidence(confidence),
85
+ warnings: [],
86
+ };
87
+ boreholes.set(id, borehole);
88
+ return borehole;
89
+ }
90
+ function rowBoreholeId(source, row) {
91
+ const idColumn = roleColumn(source.schema, 'borehole_id');
92
+ const fromRow = asText(cell(row, idColumn));
93
+ return fromRow ?? sourceBoreholeId(source);
94
+ }
95
+ function rejectObservation(state, observation) {
96
+ state.rejectedObservations.push(observation);
97
+ state.warnings.push(observation.reason);
98
+ }
99
+ function rejectSptReason(value) {
100
+ if (SPT_STANDARD_REFERENCE_VALUES.has(Math.round(value))) {
101
+ return `Rejected SPT N value ${value} because it matches a common standards/reference number, not a plausible blow count.`;
102
+ }
103
+ if (value < 0)
104
+ return `Rejected SPT N value ${value} because blow count cannot be negative.`;
105
+ if (value > 100)
106
+ return `Rejected SPT N value ${value} because geotechCLI treats N > 100 as refusal/reference text requiring review.`;
107
+ return undefined;
108
+ }
109
+ async function loadTabularSources(file, maxRows, warnings) {
110
+ if (!file.schemas || file.schemas.length === 0)
111
+ return [];
112
+ try {
113
+ if (file.extension === '.csv' || file.extension === '.tsv') {
114
+ const parsed = await parseDelimitedFile(file.absolutePath, {
115
+ delimiter: file.extension === '.tsv' ? '\t' : undefined,
116
+ maxRows,
117
+ });
118
+ return [{ file, schema: file.schemas[0], rows: parsed.rows, method: 'csv-sample' }];
119
+ }
120
+ if (file.extension === '.xlsx') {
121
+ const workbook = await parseXlsxFile(file.absolutePath, { maxRows });
122
+ return workbook.sheets.flatMap((sheet) => {
123
+ const schema = file.schemas?.find((candidate) => candidate.sheetName === sheet.name);
124
+ return schema ? [{ file, schema, rows: sheet.rows, method: 'xlsx-sample' }] : [];
125
+ });
126
+ }
127
+ }
128
+ catch (error) {
129
+ warnings.push(`${file.path}: GroundModel table sampling failed (${error instanceof Error ? error.message : String(error)}).`);
130
+ }
131
+ return [];
132
+ }
133
+ function bindCoordinates(state, source, boreholes, row, rowIndex) {
134
+ const id = rowBoreholeId(source, row);
135
+ const eastingColumn = roleColumn(source.schema, 'easting');
136
+ const northingColumn = roleColumn(source.schema, 'northing');
137
+ const latitudeColumn = roleColumn(source.schema, 'latitude');
138
+ const longitudeColumn = roleColumn(source.schema, 'longitude');
139
+ const easting = asNumber(cell(row, eastingColumn));
140
+ const northing = asNumber(cell(row, northingColumn));
141
+ const latitude = asNumber(cell(row, latitudeColumn));
142
+ const longitude = asNumber(cell(row, longitudeColumn));
143
+ if (!id || !((easting != null && northing != null) || (latitude != null && longitude != null)))
144
+ return;
145
+ const evidenceIds = [];
146
+ if (eastingColumn && easting != null)
147
+ evidenceIds.push(addEvidence(state, source, rowIndex, eastingColumn, cell(row, eastingColumn), easting));
148
+ if (northingColumn && northing != null)
149
+ evidenceIds.push(addEvidence(state, source, rowIndex, northingColumn, cell(row, northingColumn), northing));
150
+ if (latitudeColumn && latitude != null)
151
+ evidenceIds.push(addEvidence(state, source, rowIndex, latitudeColumn, cell(row, latitudeColumn), latitude));
152
+ if (longitudeColumn && longitude != null)
153
+ evidenceIds.push(addEvidence(state, source, rowIndex, longitudeColumn, cell(row, longitudeColumn), longitude));
154
+ const coordinate = {
155
+ easting,
156
+ northing,
157
+ latitude,
158
+ longitude,
159
+ evidenceIds,
160
+ confidence: evidenceConfidence(source.file, source.schema),
161
+ };
162
+ const borehole = ensureBorehole(boreholes, id, evidenceIds, coordinate.confidence);
163
+ borehole.coordinates = coordinate;
164
+ }
165
+ function bindSpt(state, source, boreholes, row, rowIndex) {
166
+ const sptColumn = roleColumn(source.schema, 'spt_n');
167
+ const depthColumn = roleColumn(source.schema, 'depth') ?? roleColumn(source.schema, 'top_depth');
168
+ const nValue = asNumber(cell(row, sptColumn));
169
+ const depth = asNumber(cell(row, depthColumn));
170
+ if (!sptColumn || nValue == null || depth == null)
171
+ return;
172
+ const warnings = [];
173
+ const sptEvidenceId = addEvidence(state, source, rowIndex, sptColumn, cell(row, sptColumn), nValue, warnings);
174
+ const depthEvidenceId = depthColumn
175
+ ? addEvidence(state, source, rowIndex, depthColumn, cell(row, depthColumn), depth)
176
+ : undefined;
177
+ const evidenceIds = depthEvidenceId ? [depthEvidenceId, sptEvidenceId] : [sptEvidenceId];
178
+ const rejectedReason = rejectSptReason(nValue);
179
+ if (rejectedReason) {
180
+ rejectObservation(state, {
181
+ kind: 'spt',
182
+ reason: `${source.file.path} row ${rowIndex + 2}: ${rejectedReason}`,
183
+ sourcePath: source.file.path,
184
+ evidenceIds,
185
+ rawValue: cell(row, sptColumn),
186
+ });
187
+ return;
188
+ }
189
+ const id = rowBoreholeId(source, row) ?? 'UNASSIGNED';
190
+ const test = {
191
+ depth,
192
+ nValue,
193
+ unit: columnUnit(source.schema, sptColumn),
194
+ evidenceIds,
195
+ confidence: evidenceConfidence(source.file, source.schema),
196
+ warnings,
197
+ };
198
+ const borehole = ensureBorehole(boreholes, id, evidenceIds, test.confidence);
199
+ borehole.sptTests.push(test);
200
+ }
201
+ function bindGroundwater(state, source, boreholes, groundwater, row, rowIndex) {
202
+ const groundwaterColumn = roleColumn(source.schema, 'groundwater_depth');
203
+ const depth = asNumber(cell(row, groundwaterColumn));
204
+ if (!groundwaterColumn || depth == null)
205
+ return;
206
+ const evidenceId = addEvidence(state, source, rowIndex, groundwaterColumn, cell(row, groundwaterColumn), depth);
207
+ const observation = {
208
+ boreholeId: rowBoreholeId(source, row),
209
+ depth,
210
+ evidenceIds: [evidenceId],
211
+ confidence: evidenceConfidence(source.file, source.schema),
212
+ warnings: [],
213
+ };
214
+ groundwater.push(observation);
215
+ if (observation.boreholeId) {
216
+ ensureBorehole(boreholes, observation.boreholeId, [evidenceId], observation.confidence).groundwater.push(observation);
217
+ }
218
+ }
219
+ function bindStrata(state, source, boreholes, strata, row, rowIndex) {
220
+ const descriptionColumn = roleColumn(source.schema, 'description');
221
+ const description = asText(cell(row, descriptionColumn));
222
+ if (!descriptionColumn || !description)
223
+ return;
224
+ const topDepthColumn = roleColumn(source.schema, 'top_depth') ?? roleColumn(source.schema, 'depth');
225
+ const bottomDepthColumn = roleColumn(source.schema, 'bottom_depth');
226
+ const topDepth = asNumber(cell(row, topDepthColumn));
227
+ const bottomDepth = asNumber(cell(row, bottomDepthColumn));
228
+ const evidenceIds = [addEvidence(state, source, rowIndex, descriptionColumn, cell(row, descriptionColumn), description)];
229
+ if (topDepthColumn && topDepth != null)
230
+ evidenceIds.push(addEvidence(state, source, rowIndex, topDepthColumn, cell(row, topDepthColumn), topDepth));
231
+ if (bottomDepthColumn && bottomDepth != null)
232
+ evidenceIds.push(addEvidence(state, source, rowIndex, bottomDepthColumn, cell(row, bottomDepthColumn), bottomDepth));
233
+ const stratum = {
234
+ boreholeId: rowBoreholeId(source, row),
235
+ topDepth,
236
+ bottomDepth,
237
+ description,
238
+ evidenceIds,
239
+ confidence: evidenceConfidence(source.file, source.schema),
240
+ warnings: bottomDepth != null && topDepth != null && bottomDepth < topDepth ? ['Bottom depth is shallower than top depth.'] : [],
241
+ };
242
+ strata.push(stratum);
243
+ if (stratum.boreholeId) {
244
+ ensureBorehole(boreholes, stratum.boreholeId, evidenceIds, stratum.confidence).strata.push(stratum);
245
+ }
246
+ }
247
+ function bindLabTests(state, source, labTests, parameters, row, rowIndex) {
248
+ const sampleId = asText(cell(row, roleColumn(source.schema, 'sample_id')));
249
+ const boreholeId = rowBoreholeId(source, row);
250
+ const depth = asNumber(cell(row, roleColumn(source.schema, 'depth') ?? roleColumn(source.schema, 'top_depth')));
251
+ const rowParameters = [];
252
+ for (const parameterRole of PARAMETER_ROLES) {
253
+ for (const columnName of roleColumns(source.schema, parameterRole.role)) {
254
+ const rawValue = cell(row, columnName);
255
+ const numericValue = asNumber(rawValue);
256
+ const textValue = asText(rawValue);
257
+ if (numericValue == null && !textValue)
258
+ continue;
259
+ const normalizedValue = numericValue ?? textValue ?? '';
260
+ const evidenceId = addEvidence(state, source, rowIndex, columnName, rawValue, normalizedValue);
261
+ rowParameters.push({
262
+ name: parameterRole.name,
263
+ value: normalizedValue,
264
+ unit: columnUnit(source.schema, columnName),
265
+ boreholeId,
266
+ sampleId,
267
+ depth,
268
+ evidenceIds: [evidenceId],
269
+ confidence: evidenceConfidence(source.file, source.schema),
270
+ warnings: [],
271
+ });
272
+ }
273
+ }
274
+ if (rowParameters.length === 0)
275
+ return;
276
+ parameters.push(...rowParameters);
277
+ labTests.push({
278
+ sampleId,
279
+ boreholeId,
280
+ depth,
281
+ parameters: rowParameters,
282
+ evidenceIds: rowParameters.flatMap((parameter) => parameter.evidenceIds),
283
+ confidence: evidenceConfidence(source.file, source.schema),
284
+ warnings: [],
285
+ });
286
+ }
287
+ function bindMonitoringSeries(state, source, monitoringSeries) {
288
+ if (source.schema.datasetType !== 'monitoring-time-series' && source.schema.datasetType !== 'signal-record')
289
+ return;
290
+ const detected = source.schema.detected.monitoringColumns;
291
+ const kind = detected.some((column) => source.schema.columns.find((candidate) => candidate.name === column)?.roles.includes('settlement'))
292
+ ? 'settlement'
293
+ : detected.some((column) => source.schema.columns.find((candidate) => candidate.name === column)?.roles.includes('pore_pressure'))
294
+ ? 'pore-pressure'
295
+ : detected.some((column) => source.schema.columns.find((candidate) => candidate.name === column)?.roles.includes('inclination'))
296
+ ? 'inclination'
297
+ : detected.some((column) => source.schema.columns.find((candidate) => candidate.name === column)?.roles.includes('vibration'))
298
+ ? 'vibration'
299
+ : 'unknown';
300
+ const evidenceIds = [];
301
+ const firstColumn = detected[0] ?? source.schema.columns[0]?.name;
302
+ source.rows.slice(0, 3).forEach((row, rowIndex) => {
303
+ if (firstColumn) {
304
+ const rawValue = cell(row, firstColumn);
305
+ if (rawValue != null) {
306
+ evidenceIds.push(addEvidence(state, source, rowIndex, firstColumn, rawValue, rawValue));
307
+ }
308
+ }
309
+ });
310
+ monitoringSeries.push({
311
+ sourcePath: source.file.path,
312
+ sheetName: source.schema.sheetName,
313
+ kind,
314
+ sampleCount: source.rows.length,
315
+ evidenceIds,
316
+ confidence: evidenceConfidence(source.file, source.schema),
317
+ warnings: [],
318
+ });
319
+ }
320
+ export async function buildGroundModelFromManifest(manifest, options = {}) {
321
+ const state = {
322
+ evidence: [],
323
+ evidenceCounter: 0,
324
+ warnings: [],
325
+ rejectedObservations: [],
326
+ };
327
+ const maxRows = Math.max(1, options.maxRows ?? DEFAULT_MAX_ROWS);
328
+ const boreholes = new Map();
329
+ const strata = [];
330
+ const groundwater = [];
331
+ const labTests = [];
332
+ const parameters = [];
333
+ const monitoringSeries = [];
334
+ let hasGeographicCoordinates = false;
335
+ let hasLocalCoordinates = false;
336
+ for (const file of manifest.files) {
337
+ const sources = await loadTabularSources(file, maxRows, state.warnings);
338
+ for (const source of sources) {
339
+ bindMonitoringSeries(state, source, monitoringSeries);
340
+ for (const [rowIndex, row] of source.rows.entries()) {
341
+ bindCoordinates(state, source, boreholes, row, rowIndex);
342
+ bindSpt(state, source, boreholes, row, rowIndex);
343
+ bindGroundwater(state, source, boreholes, groundwater, row, rowIndex);
344
+ bindStrata(state, source, boreholes, strata, row, rowIndex);
345
+ bindLabTests(state, source, labTests, parameters, row, rowIndex);
346
+ }
347
+ if (source.schema.detected.coordinateColumns.some((column) => {
348
+ const roles = source.schema.columns.find((candidate) => candidate.name === column)?.roles ?? [];
349
+ return roles.includes('latitude') || roles.includes('longitude');
350
+ })) {
351
+ hasGeographicCoordinates = true;
352
+ }
353
+ if (source.schema.detected.coordinateColumns.some((column) => {
354
+ const roles = source.schema.columns.find((candidate) => candidate.name === column)?.roles ?? [];
355
+ return roles.includes('easting') || roles.includes('northing');
356
+ })) {
357
+ hasLocalCoordinates = true;
358
+ }
359
+ }
360
+ }
361
+ const boreholeList = [...boreholes.values()].sort((left, right) => left.id.localeCompare(right.id));
362
+ const coordinateSystem = {
363
+ kind: hasGeographicCoordinates ? 'geographic' : hasLocalCoordinates ? 'local-grid' : 'unknown',
364
+ crs: hasGeographicCoordinates ? 'WGS84-like latitude/longitude' : undefined,
365
+ warnings: hasLocalCoordinates && !hasGeographicCoordinates
366
+ ? ['Easting/northing coordinates were detected without an explicit CRS.']
367
+ : [],
368
+ };
369
+ const stats = {
370
+ boreholes: boreholeList.length,
371
+ sptTests: boreholeList.reduce((count, borehole) => count + borehole.sptTests.length, 0),
372
+ strata: strata.length,
373
+ groundwaterObservations: groundwater.length,
374
+ labTests: labTests.length,
375
+ parameters: parameters.length,
376
+ monitoringSeries: monitoringSeries.length,
377
+ evidenceRefs: state.evidence.length,
378
+ rejectedObservations: state.rejectedObservations.length,
379
+ };
380
+ return {
381
+ schemaVersion: 'ground-model.v1',
382
+ generatedAt: new Date().toISOString(),
383
+ project: {
384
+ rootPath: manifest.rootPath,
385
+ requestedBranch: manifest.requestedBranch,
386
+ requestedStandard: manifest.requestedStandard,
387
+ },
388
+ coordinateSystem,
389
+ boreholes: boreholeList,
390
+ strata,
391
+ groundwater,
392
+ labTests,
393
+ parameters,
394
+ monitoringSeries,
395
+ evidence: state.evidence,
396
+ rejectedObservations: state.rejectedObservations,
397
+ warnings: [...new Set([...state.warnings, ...coordinateSystem.warnings])],
398
+ stats,
399
+ };
400
+ }
401
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/ground-model/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { buildGroundModelFromManifest, } from './builder.js';
2
+ export { type GroundModel, type GroundModelBorehole, type GroundModelCoordinate, type GroundModelCoordinateSystem, type GroundModelCoordinateSystemKind, type GroundModelGroundwaterObservation, type GroundModelLabTest, type GroundModelMonitoringSeries, type GroundModelParameter, type GroundModelProject, type GroundModelRejectedObservation, type GroundModelSchemaVersion, type GroundModelSptTest, type GroundModelStats, type GroundModelStratum, } from './model.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ground-model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACtC,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { buildGroundModelFromManifest, } from './builder.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ground-model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,GAC7B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,119 @@
1
+ import type { EvidenceRef } from '../evidence/index.js';
2
+ export type GroundModelSchemaVersion = 'ground-model.v1';
3
+ export type GroundModelCoordinateSystemKind = 'unknown' | 'local-grid' | 'geographic';
4
+ export interface GroundModelProject {
5
+ rootPath: string;
6
+ requestedBranch?: string;
7
+ requestedStandard?: string;
8
+ }
9
+ export interface GroundModelCoordinateSystem {
10
+ kind: GroundModelCoordinateSystemKind;
11
+ crs?: string;
12
+ warnings: string[];
13
+ }
14
+ export interface GroundModelCoordinate {
15
+ easting?: number;
16
+ northing?: number;
17
+ latitude?: number;
18
+ longitude?: number;
19
+ evidenceIds: string[];
20
+ confidence: number;
21
+ }
22
+ export interface GroundModelSptTest {
23
+ depth: number;
24
+ nValue: number;
25
+ unit?: string;
26
+ evidenceIds: string[];
27
+ confidence: number;
28
+ warnings: string[];
29
+ }
30
+ export interface GroundModelStratum {
31
+ boreholeId?: string;
32
+ topDepth?: number;
33
+ bottomDepth?: number;
34
+ description: string;
35
+ evidenceIds: string[];
36
+ confidence: number;
37
+ warnings: string[];
38
+ }
39
+ export interface GroundModelGroundwaterObservation {
40
+ boreholeId?: string;
41
+ depth: number;
42
+ evidenceIds: string[];
43
+ confidence: number;
44
+ warnings: string[];
45
+ }
46
+ export interface GroundModelParameter {
47
+ name: string;
48
+ value: number | string;
49
+ unit?: string;
50
+ boreholeId?: string;
51
+ sampleId?: string;
52
+ depth?: number;
53
+ evidenceIds: string[];
54
+ confidence: number;
55
+ warnings: string[];
56
+ }
57
+ export interface GroundModelLabTest {
58
+ sampleId?: string;
59
+ boreholeId?: string;
60
+ depth?: number;
61
+ parameters: GroundModelParameter[];
62
+ evidenceIds: string[];
63
+ confidence: number;
64
+ warnings: string[];
65
+ }
66
+ export interface GroundModelMonitoringSeries {
67
+ sourcePath: string;
68
+ sheetName?: string;
69
+ kind: 'settlement' | 'pore-pressure' | 'inclination' | 'vibration' | 'unknown';
70
+ sampleCount: number;
71
+ evidenceIds: string[];
72
+ confidence: number;
73
+ warnings: string[];
74
+ }
75
+ export interface GroundModelBorehole {
76
+ id: string;
77
+ coordinates?: GroundModelCoordinate;
78
+ sptTests: GroundModelSptTest[];
79
+ strata: GroundModelStratum[];
80
+ groundwater: GroundModelGroundwaterObservation[];
81
+ evidenceIds: string[];
82
+ confidence: number;
83
+ warnings: string[];
84
+ }
85
+ export interface GroundModelRejectedObservation {
86
+ kind: 'spt' | 'depth' | 'parameter';
87
+ reason: string;
88
+ sourcePath: string;
89
+ evidenceIds: string[];
90
+ rawValue?: string | number | boolean | null;
91
+ }
92
+ export interface GroundModelStats {
93
+ boreholes: number;
94
+ sptTests: number;
95
+ strata: number;
96
+ groundwaterObservations: number;
97
+ labTests: number;
98
+ parameters: number;
99
+ monitoringSeries: number;
100
+ evidenceRefs: number;
101
+ rejectedObservations: number;
102
+ }
103
+ export interface GroundModel {
104
+ schemaVersion: GroundModelSchemaVersion;
105
+ generatedAt: string;
106
+ project: GroundModelProject;
107
+ coordinateSystem: GroundModelCoordinateSystem;
108
+ boreholes: GroundModelBorehole[];
109
+ strata: GroundModelStratum[];
110
+ groundwater: GroundModelGroundwaterObservation[];
111
+ labTests: GroundModelLabTest[];
112
+ parameters: GroundModelParameter[];
113
+ monitoringSeries: GroundModelMonitoringSeries[];
114
+ evidence: EvidenceRef[];
115
+ rejectedObservations: GroundModelRejectedObservation[];
116
+ warnings: string[];
117
+ stats: GroundModelStats;
118
+ }
119
+ //# sourceMappingURL=model.d.ts.map