@bedrock-engineer/bro-xml-parser 0.2.0 → 0.4.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.
Files changed (116) hide show
  1. package/README.md +21 -12
  2. package/dist/browser.d.ts +15 -5
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +7 -5
  5. package/dist/browser.js.map +1 -1
  6. package/dist/core/columns.d.ts +80 -0
  7. package/dist/core/columns.d.ts.map +1 -0
  8. package/dist/core/columns.js +100 -0
  9. package/dist/core/columns.js.map +1 -0
  10. package/dist/core/producer.d.ts +216 -0
  11. package/dist/core/producer.d.ts.map +1 -0
  12. package/dist/core/producer.js +85 -0
  13. package/dist/core/producer.js.map +1 -0
  14. package/dist/core/schema-parser.d.ts +41 -17
  15. package/dist/core/schema-parser.d.ts.map +1 -1
  16. package/dist/core/schema-parser.js +178 -73
  17. package/dist/core/schema-parser.js.map +1 -1
  18. package/dist/core/version-detector.d.ts +3 -1
  19. package/dist/core/version-detector.d.ts.map +1 -1
  20. package/dist/core/version-detector.js +37 -0
  21. package/dist/core/version-detector.js.map +1 -1
  22. package/dist/decoders/constants.d.ts +2 -0
  23. package/dist/decoders/constants.d.ts.map +1 -0
  24. package/dist/decoders/constants.js +2 -0
  25. package/dist/decoders/constants.js.map +1 -0
  26. package/dist/decoders/type-decoders.d.ts +38 -0
  27. package/dist/decoders/type-decoders.d.ts.map +1 -0
  28. package/dist/decoders/type-decoders.js +134 -0
  29. package/dist/decoders/type-decoders.js.map +1 -0
  30. package/dist/namespaces.d.ts.map +1 -1
  31. package/dist/namespaces.js +16 -0
  32. package/dist/namespaces.js.map +1 -1
  33. package/dist/node.d.ts +15 -5
  34. package/dist/node.d.ts.map +1 -1
  35. package/dist/node.js +7 -5
  36. package/dist/node.js.map +1 -1
  37. package/dist/parser.d.ts +69 -19
  38. package/dist/parser.d.ts.map +1 -1
  39. package/dist/parser.js +103 -29
  40. package/dist/parser.js.map +1 -1
  41. package/dist/producers.d.ts +36 -0
  42. package/dist/producers.d.ts.map +1 -0
  43. package/dist/producers.js +35 -0
  44. package/dist/producers.js.map +1 -0
  45. package/dist/resolvers/bhrg-resolvers.d.ts +3 -18
  46. package/dist/resolvers/bhrg-resolvers.d.ts.map +1 -1
  47. package/dist/resolvers/bhrg-resolvers.js +294 -41
  48. package/dist/resolvers/bhrg-resolvers.js.map +1 -1
  49. package/dist/resolvers/bore-resolver-utils.d.ts +21 -2
  50. package/dist/resolvers/bore-resolver-utils.d.ts.map +1 -1
  51. package/dist/resolvers/bore-resolver-utils.js +69 -22
  52. package/dist/resolvers/bore-resolver-utils.js.map +1 -1
  53. package/dist/resolvers/bore-resolvers.d.ts +34 -17
  54. package/dist/resolvers/bore-resolvers.d.ts.map +1 -1
  55. package/dist/resolvers/bore-resolvers.js +342 -175
  56. package/dist/resolvers/bore-resolvers.js.map +1 -1
  57. package/dist/resolvers/cpt-resolvers.d.ts +1 -8
  58. package/dist/resolvers/cpt-resolvers.d.ts.map +1 -1
  59. package/dist/resolvers/cpt-resolvers.js +2 -29
  60. package/dist/resolvers/cpt-resolvers.js.map +1 -1
  61. package/dist/resolvers/gld-resolvers.d.ts +30 -0
  62. package/dist/resolvers/gld-resolvers.d.ts.map +1 -0
  63. package/dist/resolvers/gld-resolvers.js +76 -0
  64. package/dist/resolvers/gld-resolvers.js.map +1 -0
  65. package/dist/resolvers/gmw-resolvers.d.ts +37 -0
  66. package/dist/resolvers/gmw-resolvers.d.ts.map +1 -0
  67. package/dist/resolvers/gmw-resolvers.js +101 -0
  68. package/dist/resolvers/gmw-resolvers.js.map +1 -0
  69. package/dist/resolvers/type-resolvers.d.ts +12 -4
  70. package/dist/resolvers/type-resolvers.d.ts.map +1 -1
  71. package/dist/resolvers/type-resolvers.js +12 -4
  72. package/dist/resolvers/type-resolvers.js.map +1 -1
  73. package/dist/resolvers.d.ts +5 -2
  74. package/dist/resolvers.d.ts.map +1 -1
  75. package/dist/resolvers.js +8 -2
  76. package/dist/resolvers.js.map +1 -1
  77. package/dist/schema-presets.d.ts +67 -16
  78. package/dist/schema-presets.d.ts.map +1 -1
  79. package/dist/schema-presets.js +51 -114
  80. package/dist/schema-presets.js.map +1 -1
  81. package/dist/schemas/bhrg-schema.d.ts +528 -9
  82. package/dist/schemas/bhrg-schema.d.ts.map +1 -1
  83. package/dist/schemas/bhrg-schema.js +330 -162
  84. package/dist/schemas/bhrg-schema.js.map +1 -1
  85. package/dist/schemas/bhrgt-analysis.d.ts +1057 -0
  86. package/dist/schemas/bhrgt-analysis.d.ts.map +1 -0
  87. package/dist/schemas/bhrgt-analysis.js +454 -0
  88. package/dist/schemas/bhrgt-analysis.js.map +1 -0
  89. package/dist/schemas/bore-schema.d.ts +773 -9
  90. package/dist/schemas/bore-schema.d.ts.map +1 -1
  91. package/dist/schemas/bore-schema.js +344 -257
  92. package/dist/schemas/bore-schema.js.map +1 -1
  93. package/dist/schemas/common-fields.d.ts +61 -0
  94. package/dist/schemas/common-fields.d.ts.map +1 -0
  95. package/dist/schemas/common-fields.js +82 -0
  96. package/dist/schemas/common-fields.js.map +1 -0
  97. package/dist/schemas/cpt-schema.d.ts +126 -9
  98. package/dist/schemas/cpt-schema.d.ts.map +1 -1
  99. package/dist/schemas/cpt-schema.js +182 -275
  100. package/dist/schemas/cpt-schema.js.map +1 -1
  101. package/dist/schemas/generated/gld.generated.d.ts +9 -0
  102. package/dist/schemas/generated/gld.generated.d.ts.map +1 -0
  103. package/dist/schemas/generated/gld.generated.js +19 -0
  104. package/dist/schemas/generated/gld.generated.js.map +1 -0
  105. package/dist/schemas/gld-schema.d.ts +92 -0
  106. package/dist/schemas/gld-schema.d.ts.map +1 -0
  107. package/dist/schemas/gld-schema.js +88 -0
  108. package/dist/schemas/gld-schema.js.map +1 -0
  109. package/dist/schemas/gmw-schema.d.ts +180 -0
  110. package/dist/schemas/gmw-schema.d.ts.map +1 -0
  111. package/dist/schemas/gmw-schema.js +131 -0
  112. package/dist/schemas/gmw-schema.js.map +1 -0
  113. package/dist/types/index.d.ts +51 -1005
  114. package/dist/types/index.d.ts.map +1 -1
  115. package/dist/types/index.js.map +1 -1
  116. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"bore-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/bore-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,eAAO,MAAM,WAAW,EAAE,MAoVzB,CAAC"}
1
+ {"version":3,"file":"bore-schema.d.ts","sourceRoot":"","sources":["../../src/schemas/bore-schema.ts"],"names":[],"mappings":"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"}
@@ -1,262 +1,349 @@
1
1
  /**
2
- * BHR-GT (Geotechnical Borehole) schema definition
2
+ * BHR-GT (Geotechnical borehole) schema.
3
3
  *
4
- * Defines metadata fields for BHR-GT data following BRO structure.
5
- * Each field specifies:
6
- * - xpath: location in XML document
7
- * - resolver: function to convert/parse value (optional)
8
- * - attribute: which property to extract (optional, defaults to textContent)
9
- * - required: whether field is mandatory (optional, defaults to false)
4
+ * Maps the dsbhrgt/2.1 registration object to {@link BHRGTData}. Each described
5
+ * layer is a soil/rock discriminated union ({@link oneOf} on `material`); the
6
+ * laboratory-analysis subtree (BHR-GT-BMA) is delegated to
7
+ * {@link ANALYSIS_PRODUCER}. Coverage is verified against the official XSD with
8
+ * `npm run check:xsd-coverage`.
10
9
  */
11
- import * as typeResolvers from "../resolvers/type-resolvers.js";
12
- import * as gmlResolvers from "../resolvers/gml-resolvers.js";
13
- import * as boreResolvers from "../resolvers/bore-resolvers.js";
14
- export const BORE_SCHEMA = {
15
- // === Core Identification ===
16
- broId: {
17
- xpath: "brocom:broId",
18
- },
19
- qualityRegime: {
20
- xpath: "brocom:qualityRegime",
21
- },
22
- deliveryAccountableParty: {
23
- xpath: "brocom:deliveryAccountableParty",
24
- },
25
- // === Dates ===
26
- researchReportDate: {
27
- xpath: "./dsbhrgt:reportHistory/dsbhrgt:reportStartDate",
28
- resolver: typeResolvers.parseDate,
29
- },
30
- // === Location ===
31
- deliveredLocation: {
32
- xpath: "./dsbhrgt:deliveredLocation/bhrgtcom:location",
33
- resolver: gmlResolvers.parseGMLLocation,
34
- },
35
- standardizedLocation: {
36
- xpath: "./dsbhrgt:standardizedLocation/brocom:location",
37
- resolver: gmlResolvers.parseGMLLocation,
38
- },
39
- // === Vertical Position ===
40
- deliveredVerticalPositionOffset: {
41
- xpath: "./dsbhrgt:deliveredVerticalPosition/bhrgtcom:offset",
42
- resolver: typeResolvers.parseFloat,
43
- },
44
- deliveredVerticalPositionDatum: {
45
- xpath: "./dsbhrgt:deliveredVerticalPosition/bhrgtcom:verticalDatum",
46
- },
47
- deliveredVerticalPositionReferencePoint: {
48
- xpath: "./dsbhrgt:deliveredVerticalPosition/bhrgtcom:localVerticalReferencePoint",
49
- },
50
- // === Boring Metadata ===
51
- descriptionProcedure: {
52
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptionProcedure",
53
- },
54
- groundwaterLevel: {
55
- xpath: "./dsbhrgt:boring/bhrgtcom:groundwaterLevel",
56
- resolver: typeResolvers.parseFloat,
57
- },
58
- boreRockReached: {
59
- xpath: "./dsbhrgt:boring/bhrgtcom:rockReached",
60
- resolver: typeResolvers.parseBoolean,
61
- },
62
- finalBoreDepth: {
63
- xpath: "./dsbhrgt:boring/bhrgtcom:finalDepthBoring",
64
- resolver: typeResolvers.parseFloat,
65
- },
66
- finalSampleDepth: {
67
- xpath: "./dsbhrgt:boring/bhrgtcom:finalDepthSampling",
68
- resolver: typeResolvers.parseFloat,
69
- },
70
- boreHoleCompleted: {
71
- xpath: "./dsbhrgt:boring/bhrgtcom:boreholeCompleted",
72
- resolver: typeResolvers.parseBoolean,
73
- },
74
- // === Boring Execution Details ===
75
- boringStartDate: {
76
- xpath: "./dsbhrgt:boring/bhrgtcom:boringStartDate",
77
- resolver: typeResolvers.parseDate,
78
- },
79
- boringEndDate: {
80
- xpath: "./dsbhrgt:boring/bhrgtcom:boringEndDate",
81
- resolver: typeResolvers.parseDate,
82
- },
83
- boringProcedure: {
84
- xpath: "./dsbhrgt:boring/bhrgtcom:boringProcedure",
85
- },
86
- boringTechnique: {
87
- xpath: "./dsbhrgt:boring/bhrgtcom:boredInterval/bhrgtcom:boringTechnique",
88
- },
89
- trajectoryExcavated: {
90
- xpath: "./dsbhrgt:boring/bhrgtcom:trajectoryExcavated",
91
- resolver: typeResolvers.parseBoolean,
92
- },
93
- subsurfaceContaminated: {
94
- xpath: "./dsbhrgt:boring/bhrgtcom:subsurfaceContaminated",
95
- resolver: typeResolvers.parseBoolean,
96
- },
97
- stopCriterion: {
98
- xpath: "./dsbhrgt:boring/bhrgtcom:stopCriterion",
99
- },
100
- flushingMediumUsed: {
101
- xpath: "./dsbhrgt:boring/bhrgtcom:flushingMediumUsed",
102
- resolver: typeResolvers.parseBoolean,
103
- },
104
- temporaryCasingUsed: {
105
- xpath: "./dsbhrgt:boring/bhrgtcom:temporaryCasingUsed",
106
- resolver: typeResolvers.parseBoolean,
107
- },
108
- preparation: {
109
- xpath: "./dsbhrgt:boring/bhrgtcom:preparation",
110
- },
111
- // === Site Characteristic ===
112
- soilUse: {
113
- xpath: "./dsbhrgt:siteCharacteristic/bhrgtcom:soilUse",
114
- },
115
- // === Groundwater Levels (descriptive borehole log) ===
116
- meanHighestGroundwaterLevel: {
117
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:meanHighestGroundwaterLevel",
118
- resolver: typeResolvers.parseFloat,
119
- },
120
- meanLowestGroundwaterLevel: {
121
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:meanLowestGroundwaterLevel",
122
- resolver: typeResolvers.parseFloat,
123
- },
124
- // === Sampler Details ===
125
- samplerType: {
126
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:samplerType",
127
- },
128
- samplingProcedure: {
129
- xpath: "./dsbhrgt:boring/bhrgtcom:samplingProcedure",
130
- },
131
- samplingMethod: {
132
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:samplingMethod",
133
- },
134
- samplingQuality: {
135
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:samplingQuality",
136
- },
137
- orientatedSampled: {
138
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:orientatedSampled",
139
- resolver: typeResolvers.parseBoolean,
140
- },
141
- // === Sample Container ===
142
- sampleContainerDiameter: {
143
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:sampleContainerDiameter",
144
- resolver: typeResolvers.parseFloat,
145
- },
146
- sampleContainerLength: {
147
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:sampleContainerLength",
148
- resolver: typeResolvers.parseFloat,
149
- },
150
- // === Sampler Equipment Details ===
151
- pistonPresent: {
152
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:pistonPresent",
153
- resolver: typeResolvers.parseBoolean,
154
- },
155
- coreCatcherPresent: {
156
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:coreCatcherPresent",
157
- resolver: typeResolvers.parseBoolean,
158
- },
159
- stockingUsed: {
160
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:stockingUsed",
161
- resolver: typeResolvers.parseBoolean,
162
- },
163
- lubricationFluidUsed: {
164
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:lubricationFluidUsed",
165
- resolver: typeResolvers.parseBoolean,
166
- },
167
- rightAngledCuttingShoe: {
168
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:rightAngledCuttingShoe",
169
- resolver: typeResolvers.parseBoolean,
170
- },
171
- cuttingShoeInsideDiameter: {
172
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:cuttingShoeInsideDiameter",
173
- resolver: typeResolvers.parseFloat,
174
- },
175
- cuttingShoeOutsideDiameter: {
176
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:cuttingShoeOutsideDiameter",
177
- resolver: typeResolvers.parseFloat,
178
- },
179
- taperAngle: {
180
- xpath: "./dsbhrgt:boring/bhrgtcom:sampledInterval/bhrgtcom:sampler/bhrgtcom:taperAngle",
181
- resolver: typeResolvers.parseFloat,
182
- },
183
- // === Description Metadata ===
184
- boreholeLogChecked: {
185
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:boreholeLogChecked",
186
- resolver: typeResolvers.parseBoolean,
187
- },
188
- descriptionQuality: {
189
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:descriptionQuality",
190
- },
191
- descriptionLocation: {
192
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:descriptionLocation",
193
- },
194
- descriptionReportDate: {
195
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptionReportDate",
196
- resolver: typeResolvers.parseDate,
197
- },
198
- describedMaterial: {
199
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:describedMaterial",
200
- },
201
- continuouslySampled: {
202
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:continuouslySampled",
203
- resolver: typeResolvers.parseBoolean,
204
- },
205
- sampleMoistness: {
206
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog/bhrgtcom:sampleMoistness",
207
- },
208
- // === Layer Data ===
209
- data: {
210
- xpath: "./dsbhrgt:boreholeSampleDescription/bhrgtcom:descriptiveBoreholeLog",
211
- resolver: boreResolvers.processBHRGTLayerData,
212
- },
213
- // === Laboratory Analysis (BHR-GT-BMA) ===
214
- analysis: {
215
- xpath: ".", // Use current context (BHR_GT_O element) - resolver will find boreholeSampleAnalysis
216
- resolver: boreResolvers.processBoreholeSampleAnalysis,
217
- },
218
- // === Boring Interval Arrays ===
219
- boredIntervals: {
220
- xpath: ".", // Use current context - resolver will find all bored intervals
221
- resolver: boreResolvers.processBoredIntervals,
222
- },
223
- sampledIntervals: {
224
- xpath: ".", // Use current context - resolver will find all sampled intervals
225
- resolver: boreResolvers.processSampledIntervals,
226
- },
227
- completedIntervals: {
228
- xpath: ".", // Use current context - resolver will find all completed intervals
229
- resolver: boreResolvers.processCompletedIntervals,
230
- },
231
- notDescribedIntervals: {
232
- xpath: ".", // Use current context - resolver will find all not described intervals
233
- resolver: boreResolvers.processNotDescribedIntervals,
234
- },
235
- // === Administrative History ===
236
- registrationHistory: {
237
- xpath: ".", // Use current context - resolver will find registration history
238
- resolver: boreResolvers.processRegistrationHistory,
239
- },
240
- reportHistory: {
241
- xpath: ".", // Use current context - resolver will find report history
242
- resolver: boreResolvers.processReportHistory,
243
- },
244
- // === Additional Top-Level Metadata ===
245
- deliveryContext: {
246
- xpath: "./dsbhrgt:deliveryContext",
247
- },
248
- surveyPurpose: {
249
- xpath: "./dsbhrgt:surveyPurpose",
250
- },
251
- discipline: {
252
- xpath: "./dsbhrgt:discipline",
253
- },
254
- surveyProcedure: {
255
- xpath: "./dsbhrgt:surveyProcedure",
256
- },
257
- siteCharacteristicDetermined: {
258
- xpath: "./dsbhrgt:siteCharacteristicDetermined",
259
- resolver: typeResolvers.parseBoolean,
260
- },
10
+ import { object_, array, custom, oneOf, scalar, text, date, number_, boolean_, } from "../core/producer.js";
11
+ import { COMMON_REGISTRATION_PRODUCERS, REGISTRATION_HISTORY, gmlLocation, } from "./common-fields.js";
12
+ import { ANALYSIS_PRODUCER } from "./bhrgt-analysis.js";
13
+ const BORING = "./dsbhrgt:boring";
14
+ const SAMPLED = `${BORING}/bhrgtcom:sampledInterval`;
15
+ const SAMPLER = `${SAMPLED}/bhrgtcom:sampler`;
16
+ const SAMPLE_DESC = "./dsbhrgt:boreholeSampleDescription";
17
+ const LOG = `${SAMPLE_DESC}/bhrgtcom:descriptiveBoreholeLog`;
18
+ const VPOS = "./dsbhrgt:deliveredVerticalPosition";
19
+ const REQUIRED = { presence: "required" };
20
+ const OMIT = { presence: "omit" };
21
+ /** `"geen"` → false, any other code → true, absent → null. */
22
+ function parseDispersedInhomogeneity(raw) {
23
+ if (raw === null) {
24
+ return null;
25
+ }
26
+ return raw.toLowerCase() !== "geen";
27
+ }
28
+ /** Mount an object/array producer at a relative path, keyed only when present. */
29
+ function optional(producer, at) {
30
+ return { ...producer, at, presence: "omit" };
31
+ }
32
+ /** A repeatable code list: text of each match, always present (may be empty). */
33
+ function codeList(each) {
34
+ return array({ each, item: text() });
35
+ }
36
+ // === Rock branch ===
37
+ const ROCK_DESCRIPTION = object_({
38
+ fields: {
39
+ rockType: text("./bhrgtcom:rockType"),
40
+ cementType: text("./bhrgtcom:cementType"),
41
+ colour: text("./bhrgtcom:colour"),
42
+ tertiaryRockConstituent: codeList("./bhrgtcom:tertiaryRockConstituent"),
43
+ interbedding: text("./bhrgtcom:interbedding"),
44
+ dispersedInhomogeneity: codeList("./bhrgtcom:dispersedInhomogeneity"),
45
+ carbonateContentClass: text("./bhrgtcom:carbonateContentClass"),
46
+ crossBedding: text("./bhrgtcom:crossBedding"),
47
+ gradedBedding: text("./bhrgtcom:gradedBedding"),
48
+ voidsPresent: text("./bhrgtcom:voidsPresent"),
49
+ voidDistribution: text("./bhrgtcom:voidDistribution"),
50
+ stability: text("./bhrgtcom:stability"),
51
+ strengthClass: text("./bhrgtcom:strengthClass"),
52
+ weathered: text("./bhrgtcom:weathered"),
53
+ weatheringDegree: optional(object_({
54
+ fields: {
55
+ discolouration: text("./bhrgtcom:discolouration"),
56
+ disintegration: text("./bhrgtcom:disintegration"),
57
+ decomposition: text("./bhrgtcom:decomposition"),
58
+ },
59
+ }), "./bhrgtcom:weatheringDegree"),
60
+ },
61
+ });
62
+ const GRAINSHAPE = object_({
63
+ fields: {
64
+ sizeFraction: text("./bhrgtcom:sizeFraction"),
65
+ angularity: text("./bhrgtcom:angularity"),
66
+ sphericity: text("./bhrgtcom:sphericity"),
67
+ roughness: text("./bhrgtcom:roughness"),
68
+ },
69
+ });
70
+ // === The described layer: soil ⊕ rock ===
71
+ /** Fields shared by every layer, regardless of soil/rock. */
72
+ const LAYER_BASE = {
73
+ upperBoundary: number_("./bhrgtcom:upperBoundary"),
74
+ lowerBoundary: number_("./bhrgtcom:lowerBoundary"),
75
+ upperBoundaryDetermination: text("./bhrgtcom:upperBoundaryDetermination"),
76
+ lowerBoundaryDetermination: text("./bhrgtcom:lowerBoundaryDetermination"),
77
+ anthropogenic: boolean_("./bhrgtcom:anthropogenic"),
78
+ slant: boolean_("./bhrgtcom:slant"),
79
+ bedding: text("./bhrgtcom:bedding", OMIT),
80
+ compositeLayer: boolean_("./bhrgtcom:compositeLayer", OMIT),
81
+ activityType: text("./bhrgtcom:activityType", OMIT),
82
+ bedded: boolean_("./bhrgtcom:bedded"),
83
+ internalStructureIntact: boolean_("./bhrgtcom:internalStructureIntact"),
84
+ specialMaterial: text("./bhrgtcom:specialMaterial", OMIT),
85
+ };
86
+ const LAYER = oneOf({
87
+ tagAs: "material",
88
+ base: LAYER_BASE,
89
+ branches: [
90
+ {
91
+ when: "./bhrgtcom:rock",
92
+ at: "./bhrgtcom:rock",
93
+ tag: "rock",
94
+ fields: { rock: ROCK_DESCRIPTION },
95
+ },
96
+ {
97
+ // Any non-rock layer describes soil.
98
+ when: ".",
99
+ tag: "soil",
100
+ fields: {
101
+ geotechnicalSoilName: scalar({
102
+ at: "./bhrgtcom:soil/bhrgtcom:geotechnicalSoilName",
103
+ decode: (raw) => raw ?? "",
104
+ }),
105
+ soilNameNEN5104: text("./bhrgtcom:soil/bhrgtcom:soilNameNEN5104", OMIT),
106
+ gravelContentClassNEN5104: text("./bhrgtcom:soil/bhrgtcom:gravelContentClassNEN5104", OMIT),
107
+ organicMatterContentClassNEN5104: text("./bhrgtcom:soil/bhrgtcom:organicMatterContentClassNEN5104", OMIT),
108
+ tertiaryConstituent: text("./bhrgtcom:soil/bhrgtcom:tertiaryConstituent"),
109
+ color: text("./bhrgtcom:soil/bhrgtcom:colour", OMIT),
110
+ dispersedInhomogeneity: scalar({
111
+ at: "./bhrgtcom:soil/bhrgtcom:dispersedInhomogeneity",
112
+ decode: parseDispersedInhomogeneity,
113
+ }),
114
+ organicMatterContentClass: text("./bhrgtcom:soil/bhrgtcom:organicMatterContentClass"),
115
+ carbonateContentClass: text("./bhrgtcom:soil/bhrgtcom:carbonateContentClass"),
116
+ sandMedianClass: text("./bhrgtcom:soil/bhrgtcom:sandMedianClass"),
117
+ gravelMedianClass: text("./bhrgtcom:soil/bhrgtcom:gravelMedianClass", OMIT),
118
+ geotechnicalDepositionalCharacteristic: text("./bhrgtcom:soil/bhrgtcom:geotechnicalDepositionalCharacteristic", OMIT),
119
+ interbedding: text("./bhrgtcom:soil/bhrgtcom:interbedding", OMIT),
120
+ mixed: boolean_("./bhrgtcom:soil/bhrgtcom:mixed"),
121
+ mottled: boolean_("./bhrgtcom:soil/bhrgtcom:mottled"),
122
+ fineSoilConsistency: text("./bhrgtcom:soil/bhrgtcom:fineSoilConsistency"),
123
+ organicSoilConsistency: text("./bhrgtcom:soil/bhrgtcom:organicSoilConsistency"),
124
+ organicSoilTexture: text("./bhrgtcom:soil/bhrgtcom:organicSoilTexture"),
125
+ peatTensileStrength: text("./bhrgtcom:soil/bhrgtcom:peatTensileStrength"),
126
+ crossBedding: text("./bhrgtcom:soil/bhrgtcom:crossBedding", OMIT),
127
+ gradedBedding: text("./bhrgtcom:soil/bhrgtcom:gradedBedding", OMIT),
128
+ mixingType: text("./bhrgtcom:soil/bhrgtcom:mixingType", OMIT),
129
+ fineGravelContentClass: text("./bhrgtcom:soil/bhrgtcom:fineGravelContentClass", OMIT),
130
+ mediumCoarseGravelContentClass: text("./bhrgtcom:soil/bhrgtcom:mediumCoarseGravelContentClass", OMIT),
131
+ veryCoarseGravelContentClass: text("./bhrgtcom:soil/bhrgtcom:veryCoarseGravelContentClass", OMIT),
132
+ sandSortingNEN5104: text("./bhrgtcom:soil/bhrgtcom:sandSortingNEN5104", OMIT),
133
+ peatType: text("./bhrgtcom:soil/bhrgtcom:peatType", OMIT),
134
+ depositionalAge: text("./bhrgtcom:soil/bhrgtcom:depositionalAge", OMIT),
135
+ grainshape: optional(GRAINSHAPE, "./bhrgtcom:soil/bhrgtcom:grainshape"),
136
+ },
137
+ },
138
+ ],
139
+ });
140
+ // === Interval item producers ===
141
+ const depthRange = {
142
+ beginDepth: number_("./bhrgtcom:beginDepth", REQUIRED),
143
+ endDepth: number_("./bhrgtcom:endDepth", REQUIRED),
261
144
  };
145
+ const BORED_INTERVAL = object_({
146
+ fields: {
147
+ ...depthRange,
148
+ boringTechnique: text("./bhrgtcom:boringTechnique"),
149
+ boredDiameter: number_("./bhrgtcom:boredDiameter"),
150
+ },
151
+ });
152
+ const SAMPLED_INTERVAL = object_({
153
+ fields: {
154
+ ...depthRange,
155
+ preTreatment: text("./bhrgtcom:preTreatment"),
156
+ samplingMethod: text("./bhrgtcom:samplingMethod"),
157
+ samplingQuality: text("./bhrgtcom:samplingQuality"),
158
+ orientatedSampled: boolean_("./bhrgtcom:orientatedSampled"),
159
+ sampler: optional(object_({
160
+ fields: {
161
+ samplerType: text("./bhrgtcom:samplerType"),
162
+ sampleContainerDiameter: number_("./bhrgtcom:sampleContainerDiameter"),
163
+ sampleContainerLength: number_("./bhrgtcom:sampleContainerLength"),
164
+ cuttingShoeInsideDiameter: number_("./bhrgtcom:cuttingShoeInsideDiameter"),
165
+ cuttingShoeOutsideDiameter: number_("./bhrgtcom:cuttingShoeOutsideDiameter"),
166
+ stockingUsed: boolean_("./bhrgtcom:stockingUsed"),
167
+ rightAngledCuttingShoe: boolean_("./bhrgtcom:rightAngledCuttingShoe"),
168
+ taperAngle: number_("./bhrgtcom:taperAngle"),
169
+ lubricationFluidUsed: boolean_("./bhrgtcom:lubricationFluidUsed"),
170
+ coreCatcherPresent: boolean_("./bhrgtcom:coreCatcherPresent"),
171
+ pistonPresent: boolean_("./bhrgtcom:pistonPresent"),
172
+ },
173
+ }), "./bhrgtcom:sampler"),
174
+ coreRecovery: optional(object_({
175
+ fields: {
176
+ totalCoreRecovery: number_("./bhrgtcom:totalCoreRecovery"),
177
+ solidCoreRecovery: number_("./bhrgtcom:solidCoreRecovery"),
178
+ rockQualityDesignation: number_("./bhrgtcom:rockQualityDesignation"),
179
+ fieldDetermined: boolean_("./bhrgtcom:fieldDetermined"),
180
+ },
181
+ }), "./bhrgtcom:coreRecovery"),
182
+ },
183
+ });
184
+ const COMPLETED_INTERVAL = object_({
185
+ fields: {
186
+ ...depthRange,
187
+ permanentCasingPresent: boolean_("./bhrgtcom:permanentCasingPresent"),
188
+ diameterPermanentCasing: number_("./bhrgtcom:diameterPermanentCasing"),
189
+ materialPermanentCasing: text("./bhrgtcom:materialPermanentCasing"),
190
+ backfillMaterial: text("./bhrgtcom:backfillMaterial"),
191
+ backfillMaterialWashed: boolean_("./bhrgtcom:backfillMaterialWashed"),
192
+ backfillMaterialCertified: boolean_("./bhrgtcom:backfillMaterialCertified"),
193
+ },
194
+ });
195
+ const POST_SED_DISCONTINUITY = object_({
196
+ fields: {
197
+ ...depthRange,
198
+ inRock: text("./bhrgtcom:inRock"),
199
+ discontinuityType: text("./bhrgtcom:discontinuityType"),
200
+ compositeDiscontinuity: text("./bhrgtcom:compositeDiscontinuity"),
201
+ spacing: number_("./bhrgtcom:spacing"),
202
+ smooth: text("./bhrgtcom:smooth"),
203
+ apertureClass: text("./bhrgtcom:apertureClass"),
204
+ infillMaterial: text("./bhrgtcom:infillMaterial"),
205
+ },
206
+ });
207
+ export const BORE_PRODUCER = object_({
208
+ fields: {
209
+ // === Core identification (shared brocom fields) ===
210
+ ...COMMON_REGISTRATION_PRODUCERS,
211
+ researchReportDate: date("./dsbhrgt:reportHistory/dsbhrgt:reportStartDate"),
212
+ // === Location ===
213
+ deliveredLocation: gmlLocation("./dsbhrgt:deliveredLocation/bhrgtcom:location"),
214
+ standardizedLocation: gmlLocation("./dsbhrgt:standardizedLocation/brocom:location"),
215
+ // === Vertical position ===
216
+ deliveredVerticalPositionOffset: number_(`${VPOS}/bhrgtcom:offset`),
217
+ deliveredVerticalPositionDatum: text(`${VPOS}/bhrgtcom:verticalDatum`),
218
+ deliveredVerticalPositionReferencePoint: text(`${VPOS}/bhrgtcom:localVerticalReferencePoint`),
219
+ // === Boring metadata ===
220
+ descriptionProcedure: text(`${SAMPLE_DESC}/bhrgtcom:descriptionProcedure`),
221
+ groundwaterLevel: number_(`${BORING}/bhrgtcom:groundwaterLevel`),
222
+ meanHighestGroundwaterLevel: number_(`${LOG}/bhrgtcom:meanHighestGroundwaterLevel`),
223
+ meanLowestGroundwaterLevel: number_(`${LOG}/bhrgtcom:meanLowestGroundwaterLevel`),
224
+ boreRockReached: boolean_(`${BORING}/bhrgtcom:rockReached`),
225
+ finalBoreDepth: number_(`${BORING}/bhrgtcom:finalDepthBoring`),
226
+ finalSampleDepth: number_(`${BORING}/bhrgtcom:finalDepthSampling`),
227
+ finalDepthPreparation: number_(`${BORING}/bhrgtcom:finalDepthPreparation`),
228
+ finalDepthExcavation: number_(`${BORING}/bhrgtcom:finalDepthExcavation`),
229
+ finalDepthTemporaryCasing: number_(`${BORING}/bhrgtcom:finalDepthTemporaryCasing`),
230
+ boreHoleCompleted: boolean_(`${BORING}/bhrgtcom:boreholeCompleted`),
231
+ // === Boring execution details ===
232
+ boringStartDate: date(`${BORING}/bhrgtcom:boringStartDate`),
233
+ boringEndDate: date(`${BORING}/bhrgtcom:boringEndDate`),
234
+ boringProcedure: text(`${BORING}/bhrgtcom:boringProcedure`),
235
+ boringTechnique: text(`${BORING}/bhrgtcom:boredInterval/bhrgtcom:boringTechnique`),
236
+ trajectoryExcavated: boolean_(`${BORING}/bhrgtcom:trajectoryExcavated`),
237
+ subsurfaceContaminated: boolean_(`${BORING}/bhrgtcom:subsurfaceContaminated`),
238
+ stopCriterion: text(`${BORING}/bhrgtcom:stopCriterion`),
239
+ flushingMediumUsed: boolean_(`${BORING}/bhrgtcom:flushingMediumUsed`),
240
+ flushingAdditive: text(`${BORING}/bhrgtcom:flushingAdditive`),
241
+ temporaryCasingUsed: boolean_(`${BORING}/bhrgtcom:temporaryCasingUsed`),
242
+ preparation: text(`${BORING}/bhrgtcom:preparation`),
243
+ // === Site characteristic ===
244
+ soilUse: text("./dsbhrgt:siteCharacteristic/bhrgtcom:soilUse"),
245
+ positionOnGroundBody: text("./dsbhrgt:siteCharacteristic/bhrgtcom:positionOnGroundBody"),
246
+ temporaryChange: text("./dsbhrgt:siteCharacteristic/bhrgtcom:temporaryChange"),
247
+ researchOperator: custom({
248
+ at: "./dsbhrgt:researchOperator",
249
+ produce: (lens) => lens.textAt("./brocom:chamberOfCommerceNumber") ??
250
+ lens.textAt("./brocom:europeanCompanyRegistrationNumber"),
251
+ }),
252
+ // === Sampler details ===
253
+ samplerType: text(`${SAMPLER}/bhrgtcom:samplerType`),
254
+ samplingProcedure: text(`${BORING}/bhrgtcom:samplingProcedure`),
255
+ samplingMethod: text(`${SAMPLED}/bhrgtcom:samplingMethod`),
256
+ samplingQuality: text(`${SAMPLED}/bhrgtcom:samplingQuality`),
257
+ orientatedSampled: boolean_(`${SAMPLER}/bhrgtcom:orientatedSampled`),
258
+ sampleContainerDiameter: number_(`${SAMPLER}/bhrgtcom:sampleContainerDiameter`),
259
+ sampleContainerLength: number_(`${SAMPLER}/bhrgtcom:sampleContainerLength`),
260
+ pistonPresent: boolean_(`${SAMPLER}/bhrgtcom:pistonPresent`),
261
+ coreCatcherPresent: boolean_(`${SAMPLER}/bhrgtcom:coreCatcherPresent`),
262
+ stockingUsed: boolean_(`${SAMPLER}/bhrgtcom:stockingUsed`),
263
+ lubricationFluidUsed: boolean_(`${SAMPLER}/bhrgtcom:lubricationFluidUsed`),
264
+ rightAngledCuttingShoe: boolean_(`${SAMPLER}/bhrgtcom:rightAngledCuttingShoe`),
265
+ cuttingShoeInsideDiameter: number_(`${SAMPLER}/bhrgtcom:cuttingShoeInsideDiameter`),
266
+ cuttingShoeOutsideDiameter: number_(`${SAMPLER}/bhrgtcom:cuttingShoeOutsideDiameter`),
267
+ taperAngle: number_(`${SAMPLER}/bhrgtcom:taperAngle`),
268
+ // === Description metadata ===
269
+ boreholeLogChecked: boolean_(`${LOG}/bhrgtcom:boreholeLogChecked`),
270
+ descriptionQuality: text(`${LOG}/bhrgtcom:descriptionQuality`),
271
+ descriptionLocation: text(`${LOG}/bhrgtcom:descriptionLocation`),
272
+ descriptionReportDate: date(`${SAMPLE_DESC}/bhrgtcom:descriptionReportDate`),
273
+ describedMaterial: text(`${LOG}/bhrgtcom:describedMaterial`),
274
+ continuouslySampled: boolean_(`${LOG}/bhrgtcom:continuouslySampled`),
275
+ sampleMoistness: text(`${LOG}/bhrgtcom:sampleMoistness`),
276
+ // === Visual description (BHR-GT-BMB): soil/rock layers ===
277
+ data: array({ at: LOG, each: ".//bhrgtcom:layer", item: LAYER }),
278
+ // === Laboratory analysis (BHR-GT-BMA) ===
279
+ analysis: ANALYSIS_PRODUCER,
280
+ // === Boring interval arrays ===
281
+ boredIntervals: array({ each: `${BORING}/bhrgtcom:boredInterval`, item: BORED_INTERVAL }),
282
+ sampledIntervals: array({ each: SAMPLED, item: SAMPLED_INTERVAL }),
283
+ completedIntervals: array({
284
+ each: `${BORING}/bhrgtcom:completedInterval`,
285
+ item: COMPLETED_INTERVAL,
286
+ }),
287
+ notDescribedIntervals: array({
288
+ each: `${LOG}/bhrgtcom:notDescribedInterval`,
289
+ item: object_({ fields: { ...depthRange, noDescriptionReason: text("./bhrgtcom:noDescriptionReason") } }),
290
+ }),
291
+ postSedimentaryDiscontinuities: array({
292
+ each: `${LOG}/bhrgtcom:postSedimentaryDiscontinuity`,
293
+ item: POST_SED_DISCONTINUITY,
294
+ }),
295
+ excavatedLayers: array({
296
+ each: `${BORING}/bhrgtcom:excavatedLayer`,
297
+ item: object_({
298
+ fields: {
299
+ upperBoundary: number_("./bhrgtcom:upperBoundary", REQUIRED),
300
+ lowerBoundary: number_("./bhrgtcom:lowerBoundary", REQUIRED),
301
+ excavatedMaterial: text("./bhrgtcom:excavatedMaterial"),
302
+ },
303
+ }),
304
+ }),
305
+ boringVelocity: array({
306
+ each: `${BORING}/bhrgtcom:boringVelocity`,
307
+ item: object_({
308
+ fields: {
309
+ elapsedTime: number_("./bhrgtcom:elapsedTime"),
310
+ depth: number_("./bhrgtcom:depth"),
311
+ },
312
+ }),
313
+ }),
314
+ // === Fluid mud layer (optional, single) ===
315
+ fluidMudLayer: optional(object_({
316
+ fields: {
317
+ thickness: number_("./bhrgtcom:thickness"),
318
+ colour: text("./bhrgtcom:colour"),
319
+ upperBoundaryPositioningMethod: text("./bhrgtcom:upperBoundaryPositioningMethod"),
320
+ lowerBoundaryPositioningMethod: text("./bhrgtcom:lowerBoundaryPositioningMethod"),
321
+ },
322
+ }), "./dsbhrgt:fluidMudLayer"),
323
+ // === Administrative history ===
324
+ registrationHistory: REGISTRATION_HISTORY,
325
+ reportHistory: object_({
326
+ at: "./dsbhrgt:reportHistory",
327
+ fields: {
328
+ reportStartDate: date("./dsbhrgt:reportStartDate"),
329
+ reportEndDate: date("./dsbhrgt:reportEndDate"),
330
+ intermediateEvents: array({
331
+ each: "./dsbhrgt:intermediateEvent",
332
+ item: object_({
333
+ fields: {
334
+ eventName: text("./dsbhrgt:eventName"),
335
+ eventDate: date("./dsbhrgt:eventDate"),
336
+ },
337
+ }),
338
+ }),
339
+ },
340
+ }),
341
+ // === Additional top-level metadata ===
342
+ deliveryContext: text("./dsbhrgt:deliveryContext"),
343
+ surveyPurpose: text("./dsbhrgt:surveyPurpose"),
344
+ discipline: text("./dsbhrgt:discipline"),
345
+ surveyProcedure: text("./dsbhrgt:surveyProcedure"),
346
+ siteCharacteristicDetermined: boolean_("./dsbhrgt:siteCharacteristicDetermined"),
347
+ },
348
+ });
262
349
  //# sourceMappingURL=bore-schema.js.map