@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.
- package/dist/evidence/evidence-ref.d.ts +32 -0
- package/dist/evidence/evidence-ref.d.ts.map +1 -0
- package/dist/evidence/evidence-ref.js +6 -0
- package/dist/evidence/evidence-ref.js.map +1 -0
- package/dist/evidence/index.d.ts +2 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +2 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/ground-model/builder.d.ts +7 -0
- package/dist/ground-model/builder.d.ts.map +1 -0
- package/dist/ground-model/builder.js +401 -0
- package/dist/ground-model/builder.js.map +1 -0
- package/dist/ground-model/index.d.ts +3 -0
- package/dist/ground-model/index.d.ts.map +1 -0
- package/dist/ground-model/index.js +2 -0
- package/dist/ground-model/index.js.map +1 -0
- package/dist/ground-model/model.d.ts +119 -0
- package/dist/ground-model/model.d.ts.map +1 -0
- package/dist/ground-model/model.js +2 -0
- package/dist/ground-model/model.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/meta/metadata.json +1 -1
- package/dist/tabular/csv.d.ts +17 -0
- package/dist/tabular/csv.d.ts.map +1 -0
- package/dist/tabular/csv.js +123 -0
- package/dist/tabular/csv.js.map +1 -0
- package/dist/tabular/index.d.ts +4 -0
- package/dist/tabular/index.d.ts.map +1 -0
- package/dist/tabular/index.js +4 -0
- package/dist/tabular/index.js.map +1 -0
- package/dist/tabular/schema-inference.d.ts +45 -0
- package/dist/tabular/schema-inference.d.ts.map +1 -0
- package/dist/tabular/schema-inference.js +284 -0
- package/dist/tabular/schema-inference.js.map +1 -0
- package/dist/tabular/xlsx.d.ts +15 -0
- package/dist/tabular/xlsx.d.ts.map +1 -0
- package/dist/tabular/xlsx.js +190 -0
- package/dist/tabular/xlsx.js.map +1 -0
- package/dist/verifier/findings.d.ts +22 -0
- package/dist/verifier/findings.d.ts.map +1 -0
- package/dist/verifier/findings.js +96 -0
- package/dist/verifier/findings.js.map +1 -0
- package/dist/verifier/index.d.ts +2 -0
- package/dist/verifier/index.d.ts.map +1 -0
- package/dist/verifier/index.js +2 -0
- package/dist/verifier/index.js.map +1 -0
- package/dist/workspace/classifier.d.ts +7 -0
- package/dist/workspace/classifier.d.ts.map +1 -0
- package/dist/workspace/classifier.js +186 -0
- package/dist/workspace/classifier.js.map +1 -0
- package/dist/workspace/dossier.d.ts +3 -0
- package/dist/workspace/dossier.d.ts.map +1 -0
- package/dist/workspace/dossier.js +414 -0
- package/dist/workspace/dossier.js.map +1 -0
- package/dist/workspace/index.d.ts +5 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +5 -0
- package/dist/workspace/index.js.map +1 -0
- package/dist/workspace/manifest.d.ts +63 -0
- package/dist/workspace/manifest.d.ts.map +1 -0
- package/dist/workspace/manifest.js +7 -0
- package/dist/workspace/manifest.js.map +1 -0
- package/dist/workspace/scanner.d.ts +3 -0
- package/dist/workspace/scanner.d.ts.map +1 -0
- package/dist/workspace/scanner.js +254 -0
- package/dist/workspace/scanner.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,aAAa,GAKd,MAAM,qBAAqB,CAAC;AAiC7B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAE1F,MAAM,eAAe,GAAsD;IACzE,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE;IAC/C,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE;IAC7C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE;IAC/C,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACrD,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,eAAe,EAAE;IACjD,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACnD,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE;CAC5C,CAAC;AAEF,SAAS,UAAU,CAAC,MAA8B,EAAE,IAAwB;IAC1E,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAC5E,CAAC;AAED,SAAS,WAAW,CAAC,MAA8B,EAAE,IAAwB;IAC3E,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,UAAU,CAAC,MAA8B,EAAE,UAAmB;IACrE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,IAAI,CAAC;AAC3E,CAAC;AAED,SAAS,IAAI,CAAC,GAAe,EAAE,UAAmB;IAChD,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,KAAkB;IAChC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAwB,EAAE,MAA8B;IAClF,OAAO,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,WAAW,CAClB,KAAmB,EACnB,MAAqB,EACrB,QAAgB,EAChB,UAAkB,EAClB,QAAqB,EACrB,eAA4B,EAC5B,WAAqB,EAAE;IAEvB,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAClE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClB,EAAE;QACF,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;QAC5B,QAAQ,EAAE;YACR,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;YAC1B,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;YACtC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;YAClC,SAAS,EAAE,QAAQ,GAAG,CAAC;YACvB,UAAU;SACX;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1D,QAAQ;QACR,eAAe;QACf,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;QAC3C,QAAQ;KACT,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAqB;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7F,CAAC;AAED,SAAS,cAAc,CACrB,SAA2C,EAC3C,EAAU,EACV,cAAwB,EAAE,EAC1B,UAAU,GAAG,GAAG;IAEhB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/E,QAAQ,CAAC,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7F,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAwB;QACpC,EAAE;QACF,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,EAAE;QACf,WAAW;QACX,UAAU,EAAE,2BAA2B,CAAC,UAAU,CAAC;QACnD,QAAQ,EAAE,EAAE;KACb,CAAC;IACF,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,MAAqB,EAAE,GAAe;IAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5C,OAAO,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAmB,EACnB,WAA2C;IAE3C,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,wBAAwB,KAAK,sFAAsF,CAAC;IAC7H,CAAC;IACD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,wBAAwB,KAAK,yCAAyC,CAAC;IAC7F,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,wBAAwB,KAAK,gFAAgF,CAAC;IACtI,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,IAAwB,EACxB,OAAe,EACf,QAAkB;IAElB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1D,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE;gBACzD,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACvD,OAAO;aACR,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACrE,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAsB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChI,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CACtB,KAAmB,EACnB,MAAqB,EACrB,SAA2C,EAC3C,GAAe,EACf,QAAgB;IAEhB,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC;QAAE,OAAO;IAEvG,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,aAAa,IAAI,OAAO,IAAI,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/I,IAAI,cAAc,IAAI,QAAQ,IAAI,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpJ,IAAI,cAAc,IAAI,QAAQ,IAAI,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpJ,IAAI,eAAe,IAAI,SAAS,IAAI,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzJ,MAAM,UAAU,GAA0B;QACxC,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,WAAW;QACX,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;KAC3D,CAAC;IACF,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACnF,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC;AACpC,CAAC;AAED,SAAS,OAAO,CACd,KAAmB,EACnB,MAAqB,EACrB,SAA2C,EAC3C,GAAe,EACf,QAAgB;IAEhB,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjG,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAE1D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9G,MAAM,eAAe,GAAG,WAAW;QACjC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC;QAClF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACzF,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,cAAc,EAAE,CAAC;QACnB,iBAAiB,CAAC,KAAK,EAAE;YACvB,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,QAAQ,GAAG,CAAC,KAAK,cAAc,EAAE;YACpE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;YAC5B,WAAW;YACX,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;SAC/B,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC;IACtD,MAAM,IAAI,GAAuB;QAC/B,KAAK;QACL,MAAM;QACN,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;QAC1C,WAAW;QACX,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1D,QAAQ;KACT,CAAC;IACF,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7E,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CACtB,KAAmB,EACnB,MAAqB,EACrB,SAA2C,EAC3C,WAAgD,EAChD,GAAe,EACf,QAAgB;IAEhB,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,iBAAiB,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAEhD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,KAAK,CAAC,CAAC;IAChH,MAAM,WAAW,GAAsC;QACrD,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC;QACtC,KAAK;QACL,WAAW,EAAE,CAAC,UAAU,CAAC;QACzB,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1D,QAAQ,EAAE,EAAE;KACb,CAAC;IACF,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;QAC3B,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CACjB,KAAmB,EACnB,MAAqB,EACrB,SAA2C,EAC3C,MAA4B,EAC5B,GAAe,EACf,QAAgB;IAEhB,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW;QAAE,OAAO;IAE/C,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpG,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IACzH,IAAI,cAAc,IAAI,QAAQ,IAAI,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpJ,IAAI,iBAAiB,IAAI,WAAW,IAAI,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAEnK,MAAM,OAAO,GAAuB;QAClC,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC;QACtC,QAAQ;QACR,WAAW;QACX,WAAW;QACX,WAAW;QACX,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1D,QAAQ,EAAE,WAAW,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,CAAC,EAAE;KACjI,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAAmB,EACnB,MAAqB,EACrB,QAA8B,EAC9B,UAAkC,EAClC,GAAe,EACf,QAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,aAAa,GAA2B,EAAE,CAAC;IAEjD,KAAK,MAAM,aAAa,IAAI,eAAe,EAAE,CAAC;QAC5C,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACvC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,YAAY,IAAI,IAAI,IAAI,CAAC,SAAS;gBAAE,SAAS;YACjD,MAAM,eAAe,GAAG,YAAY,IAAI,SAAS,IAAI,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;YAC/F,aAAa,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;gBAC3C,UAAU;gBACV,QAAQ;gBACR,KAAK;gBACL,WAAW,EAAE,CAAC,UAAU,CAAC;gBACzB,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;gBAC1D,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACvC,UAAU,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC;QACZ,QAAQ;QACR,UAAU;QACV,KAAK;QACL,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC;QACxE,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1D,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAmB,EACnB,MAAqB,EACrB,gBAA+C;IAE/C,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,wBAAwB,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,eAAe;QAAE,OAAO;IACpH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxI,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YAChI,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC9H,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBAC5H,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,SAAS,CAAC;IACpB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAClE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAChD,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACxC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gBAAgB,CAAC,IAAI,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;QAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;QAClC,IAAI;QACJ,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC/B,WAAW;QACX,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1D,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAyB,EACzB,UAAmC,EAAE;IAErC,MAAM,KAAK,GAAiB;QAC1B,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,EAAE;QACZ,oBAAoB,EAAE,EAAE;KACzB,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IACzD,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,MAAM,WAAW,GAAwC,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAC1C,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,gBAAgB,GAAkC,EAAE,CAAC;IAC3D,IAAI,wBAAwB,GAAG,KAAK,CAAC;IACrC,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;YACtD,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACzD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACjD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACtE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC5D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChG,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACnE,CAAC,CAAC,EAAE,CAAC;gBACH,wBAAwB,GAAG,IAAI,CAAC;YAClC,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChG,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACjE,CAAC,CAAC,EAAE,CAAC;gBACH,mBAAmB,GAAG,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACpG,MAAM,gBAAgB,GAAG;QACvB,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC,YAAqB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAqB,CAAC,CAAC,CAAC,SAAkB;QACzH,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,SAAS;QAC3E,QAAQ,EAAE,mBAAmB,IAAI,CAAC,wBAAwB;YACxD,CAAC,CAAC,CAAC,qEAAqE,CAAC;YACzE,CAAC,CAAC,EAAE;KACP,CAAC;IAEF,MAAM,KAAK,GAAG;QACZ,SAAS,EAAE,YAAY,CAAC,MAAM;QAC9B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACvF,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,uBAAuB,EAAE,WAAW,CAAC,MAAM;QAC3C,QAAQ,EAAE,QAAQ,CAAC,MAAM;QACzB,UAAU,EAAE,UAAU,CAAC,MAAM;QAC7B,gBAAgB,EAAE,gBAAgB,CAAC,MAAM;QACzC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,CAAC,MAAM;KACxD,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,iBAAiB;QAChC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE;YACP,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,eAAe,EAAE,QAAQ,CAAC,eAAe;YACzC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;SAC9C;QACD,gBAAgB;QAChB,SAAS,EAAE,YAAY;QACvB,MAAM;QACN,WAAW;QACX,QAAQ;QACR,UAAU;QACV,gBAAgB;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzE,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -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 @@
|
|
|
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
|