@bedrock-engineer/bro-xml-parser 0.1.7 → 0.3.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 (71) hide show
  1. package/dist/adapters/browser-adapter.d.ts.map +1 -1
  2. package/dist/adapters/browser-adapter.js +6 -2
  3. package/dist/adapters/browser-adapter.js.map +1 -1
  4. package/dist/adapters/node-adapter.d.ts.map +1 -1
  5. package/dist/adapters/node-adapter.js +6 -2
  6. package/dist/adapters/node-adapter.js.map +1 -1
  7. package/dist/browser.d.ts +2 -2
  8. package/dist/browser.d.ts.map +1 -1
  9. package/dist/browser.js +1 -1
  10. package/dist/browser.js.map +1 -1
  11. package/dist/colors.d.ts +18 -8
  12. package/dist/colors.d.ts.map +1 -1
  13. package/dist/colors.js +1 -1
  14. package/dist/colors.js.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +1 -1
  17. package/dist/node.d.ts +2 -2
  18. package/dist/node.d.ts.map +1 -1
  19. package/dist/node.js +1 -1
  20. package/dist/node.js.map +1 -1
  21. package/dist/parser.d.ts +2 -2
  22. package/dist/parser.js +2 -2
  23. package/dist/resolvers/bhrg-resolvers.d.ts +3 -18
  24. package/dist/resolvers/bhrg-resolvers.d.ts.map +1 -1
  25. package/dist/resolvers/bhrg-resolvers.js +296 -43
  26. package/dist/resolvers/bhrg-resolvers.js.map +1 -1
  27. package/dist/resolvers/bore-resolver-utils.d.ts +21 -2
  28. package/dist/resolvers/bore-resolver-utils.d.ts.map +1 -1
  29. package/dist/resolvers/bore-resolver-utils.js +73 -23
  30. package/dist/resolvers/bore-resolver-utils.js.map +1 -1
  31. package/dist/resolvers/bore-resolvers.d.ts +35 -18
  32. package/dist/resolvers/bore-resolvers.d.ts.map +1 -1
  33. package/dist/resolvers/bore-resolvers.js +428 -159
  34. package/dist/resolvers/bore-resolvers.js.map +1 -1
  35. package/dist/resolvers/cpt-resolvers.d.ts +1 -8
  36. package/dist/resolvers/cpt-resolvers.d.ts.map +1 -1
  37. package/dist/resolvers/cpt-resolvers.js +2 -29
  38. package/dist/resolvers/cpt-resolvers.js.map +1 -1
  39. package/dist/resolvers/gml-resolvers.d.ts.map +1 -1
  40. package/dist/resolvers/gml-resolvers.js +11 -1
  41. package/dist/resolvers/gml-resolvers.js.map +1 -1
  42. package/dist/resolvers/measurement-resolver.d.ts.map +1 -1
  43. package/dist/resolvers/measurement-resolver.js +6 -6
  44. package/dist/resolvers/measurement-resolver.js.map +1 -1
  45. package/dist/resolvers/type-resolvers.d.ts +22 -13
  46. package/dist/resolvers/type-resolvers.d.ts.map +1 -1
  47. package/dist/resolvers/type-resolvers.js +55 -43
  48. package/dist/resolvers/type-resolvers.js.map +1 -1
  49. package/dist/resolvers.d.ts +5 -4
  50. package/dist/resolvers.d.ts.map +1 -1
  51. package/dist/resolvers.js +6 -4
  52. package/dist/resolvers.js.map +1 -1
  53. package/dist/schema-presets.js +3 -3
  54. package/dist/schema-presets.js.map +1 -1
  55. package/dist/schemas/bhrg-schema.d.ts.map +1 -1
  56. package/dist/schemas/bhrg-schema.js +39 -14
  57. package/dist/schemas/bhrg-schema.js.map +1 -1
  58. package/dist/schemas/bore-schema.d.ts.map +1 -1
  59. package/dist/schemas/bore-schema.js +74 -14
  60. package/dist/schemas/bore-schema.js.map +1 -1
  61. package/dist/schemas/common-fields.d.ts +16 -0
  62. package/dist/schemas/common-fields.d.ts.map +1 -0
  63. package/dist/schemas/common-fields.js +31 -0
  64. package/dist/schemas/common-fields.js.map +1 -0
  65. package/dist/schemas/cpt-schema.d.ts.map +1 -1
  66. package/dist/schemas/cpt-schema.js +25 -14
  67. package/dist/schemas/cpt-schema.js.map +1 -1
  68. package/dist/types/index.d.ts +559 -61
  69. package/dist/types/index.d.ts.map +1 -1
  70. package/dist/types/index.js.map +1 -1
  71. package/package.json +15 -5
@@ -141,18 +141,44 @@ export interface DissipationMeasurement {
141
141
  */
142
142
  export interface DissipationTest {
143
143
  penetrationLength: number;
144
- phenomenonTime: Date | null;
144
+ phenomenonTime: string | null;
145
145
  measurements: Array<DissipationMeasurement>;
146
146
  }
147
+ /**
148
+ * Common `brocom:RegistrationObject` fields shared by every BRO registration
149
+ * type (CPT, BHR-GT, BHR-G, ...).
150
+ *
151
+ * Mirrors how the XSDs model these: each registration object extends
152
+ * `brocom:RegistrationObject` via complexContent. Domain data interfaces extend
153
+ * this so the shared surface is declared once and stays consistent. The runtime
154
+ * counterpart is `COMMON_REGISTRATION_FIELDS` in schemas/common-fields.ts.
155
+ */
156
+ export interface BRORegistrationObject {
157
+ broId: string | null;
158
+ /**
159
+ * BRO quality regime
160
+ *
161
+ * - IMBRO: Strict regime (all mandatory fields required)
162
+ * - IMBRO/A: Relaxed regime for historical data (allows missing fields)
163
+ */
164
+ qualityRegime: QualityRegime | null;
165
+ /** Party responsible for delivering the data to the BRO (bronhouder, KvK number or name) */
166
+ deliveryAccountableParty: string | null;
167
+ /** Object identifier assigned by the accountable party (their own reference) */
168
+ objectIdAccountableParty: string | null;
169
+ /** KvK number of the party responsible for the delivery */
170
+ deliveryResponsibleParty: string | null;
171
+ /** BRO registration history */
172
+ registrationHistory: RegistrationHistory | null;
173
+ }
147
174
  /**
148
175
  * Complete CPT data (metadata + measurements)
149
176
  */
150
- export interface CPTData {
177
+ export interface CPTData extends BRORegistrationObject {
151
178
  /**
152
179
  * Metadata about the parsed document (schema version, warnings)
153
180
  */
154
181
  meta: ParseMeta;
155
- broId: string | null;
156
182
  /**
157
183
  * User-defined identifier (not parsed from XML)
158
184
  *
@@ -166,31 +192,34 @@ export interface CPTData {
166
192
  * ```
167
193
  */
168
194
  alias?: string;
169
- /**
170
- * BRO quality regime
171
- *
172
- * - IMBRO: Strict regime (all mandatory fields required)
173
- * - IMBRO/A: Relaxed regime for historical data (allows missing fields)
174
- */
175
- qualityRegime: QualityRegime | null;
176
- researchReportDate: Date | null;
195
+ /** KvK number of the operator that carried out the research */
196
+ researchOperator: string | null;
197
+ researchReportDate: string | null;
177
198
  /** When the cone penetration test was physically performed in the field (om:phenomenonTime) */
178
- conePenetrationTestPhenomenonTime: Date | null;
199
+ conePenetrationTestPhenomenonTime: string | null;
179
200
  /** When the cone penetration test result was produced (om:resultTime) */
180
- conePenetrationTestResultTime: Date | null;
201
+ conePenetrationTestResultTime: string | null;
181
202
  deliveredLocation: Location | null;
182
203
  standardizedLocation: Location | null;
204
+ /** Coordinate transformation applied to the standardized location (e.g. "RDNAPTRANS2018") */
205
+ coordinateTransformation: string | null;
183
206
  /** Date horizontal position was determined */
184
- horizontalPositioningDate: Date | null;
207
+ horizontalPositioningDate: string | null;
185
208
  /** Method used to determine horizontal position (e.g., "onbekend", "GNSS") */
186
209
  horizontalPositioningMethod: string | null;
210
+ /** KvK number of the operator that determined the horizontal position */
211
+ horizontalPositioningOperator: string | null;
187
212
  deliveredVerticalPositionOffset: number | null;
188
213
  deliveredVerticalPositionDatum: string | null;
189
214
  deliveredVerticalPositionReferencePoint: string | null;
215
+ /** Water depth at the CPT location (m), when the survey was performed over water */
216
+ waterDepth: number | null;
190
217
  /** Date vertical position was determined */
191
- verticalPositioningDate: Date | null;
218
+ verticalPositioningDate: string | null;
192
219
  /** Method used to determine vertical position (e.g., "onbekend", "waterpassingKlasse2") */
193
220
  verticalPositioningMethod: string | null;
221
+ /** KvK number of the operator that determined the vertical position */
222
+ verticalPositioningOperator: string | null;
194
223
  /** Delivery context (e.g., "publiekeTaak", "archiefoverdracht") */
195
224
  deliveryContext: string | null;
196
225
  /** Survey purpose (e.g., "waterkering", "onbekend") */
@@ -210,7 +239,7 @@ export interface CPTData {
210
239
  finalDepth: number | null;
211
240
  groundwaterLevel: number | null;
212
241
  /** Date of additional investigation (e.g. groundwater level measurement) */
213
- investigationDate: Date | null;
242
+ investigationDate: string | null;
214
243
  /** Site conditions at time of investigation */
215
244
  conditions: string | null;
216
245
  /** Description of surface at CPT location */
@@ -218,7 +247,7 @@ export interface CPTData {
218
247
  /** Layers removed before CPT (e.g. asphalt, gravel fill) - affects depth interpretation */
219
248
  removedLayers: Array<RemovedLayer>;
220
249
  /** Date of final processing */
221
- finalProcessingDate: Date | null;
250
+ finalProcessingDate: string | null;
222
251
  /** Whether signal processing was performed */
223
252
  signalProcessingPerformed: boolean | null;
224
253
  /** Whether interruption processing was performed */
@@ -255,7 +284,6 @@ export interface CPTData {
255
284
  zlmElectricalConductivityAfter: number | null;
256
285
  data: Array<CPTMeasurement>;
257
286
  dissipationTests: Array<DissipationTest>;
258
- registrationHistory: RegistrationHistory | null;
259
287
  }
260
288
  /**
261
289
  * Grain shape properties for sand/gravel fractions
@@ -270,19 +298,105 @@ export interface Grainshape {
270
298
  /** Roughness of grains (e.g., "ruw", "glad") */
271
299
  roughness: string | null;
272
300
  }
301
+ /**
302
+ * Weathering degree of a rock layer (three-axis classification)
303
+ */
304
+ export interface RockWeatheringDegree {
305
+ /** Degree of discolouration */
306
+ discolouration: string | null;
307
+ /** Degree of disintegration */
308
+ disintegration: string | null;
309
+ /** Degree of decomposition */
310
+ decomposition: string | null;
311
+ }
312
+ /**
313
+ * Rock description for a layer (BHR-GT `rock` element).
314
+ *
315
+ * A layer describes either soil (flattened onto BHRGTLayer) or rock (this
316
+ * nested object). Yes/no fields keep their raw code (e.g. "ja", "nee",
317
+ * "nietWaargenomen") to preserve archive nuance.
318
+ */
319
+ export interface RockDescription {
320
+ rockType: string | null;
321
+ cementType: string | null;
322
+ colour: string | null;
323
+ /** Tertiary rock constituents (1 or more) */
324
+ tertiaryRockConstituent: Array<string>;
325
+ interbedding: string | null;
326
+ /** Dispersed inhomogeneities (0-2) */
327
+ dispersedInhomogeneity: Array<string>;
328
+ carbonateContentClass: string | null;
329
+ crossBedding: string | null;
330
+ gradedBedding: string | null;
331
+ voidsPresent: string | null;
332
+ voidDistribution: string | null;
333
+ stability: string | null;
334
+ strengthClass: string | null;
335
+ weathered: string | null;
336
+ weatheringDegree?: RockWeatheringDegree;
337
+ }
338
+ /**
339
+ * Post-sedimentary discontinuity in the descriptive borehole log
340
+ * (e.g. a fracture or fault plane crossing the described interval)
341
+ */
342
+ export interface PostSedimentaryDiscontinuity {
343
+ beginDepth: number;
344
+ endDepth: number;
345
+ /** Whether the discontinuity is in rock (raw code, e.g. "ja"/"nee") */
346
+ inRock: string | null;
347
+ discontinuityType: string | null;
348
+ compositeDiscontinuity: string | null;
349
+ /** Spacing between discontinuities (m) */
350
+ spacing: number | null;
351
+ smooth: string | null;
352
+ apertureClass: string | null;
353
+ infillMaterial: string | null;
354
+ }
273
355
  /**
274
356
  * BHR-GT (Borehole Research Geotechnical) layer data
275
357
  *
276
358
  * Contains all fields from the BRO BHR-GT schema for a single soil layer.
277
359
  */
278
- export interface BHRGTLayer {
360
+ /**
361
+ * Fields shared by every BHR-GT described layer, regardless of whether it
362
+ * describes soil or rock (they live directly on the XSD `layer` element).
363
+ */
364
+ export interface BHRGTLayerBase {
279
365
  upperBoundary: number;
280
366
  lowerBoundary: number;
281
367
  upperBoundaryDetermination?: string | null;
282
368
  lowerBoundaryDetermination?: string | null;
283
369
  /** Whether the layer is anthropogenic (man-made) */
284
370
  anthropogenic?: boolean | null;
371
+ /** Whether the layer boundary is slanted */
372
+ slant?: boolean | null;
373
+ /** Whether the layer is bedded/stratified */
374
+ bedded?: boolean | null;
375
+ /** Bedding type of the layer (e.g., "dikGelamineerd") */
376
+ bedding?: string | null;
377
+ /** Whether the layer is a composite layer */
378
+ compositeLayer?: boolean | null;
379
+ /** Human activity type observed in the layer (e.g., "nietBepaald") */
380
+ activityType?: string | null;
381
+ /** Whether the internal structure is intact (undisturbed) */
382
+ internalStructureIntact?: boolean | null;
383
+ /** Special material in the layer (e.g. anthropogenic debris) */
384
+ specialMaterial?: string | null;
385
+ }
386
+ /**
387
+ * A BHR-GT layer that describes soil (the common case).
388
+ * Discriminate on `material === "soil"`.
389
+ */
390
+ export interface BHRGTSoilLayer extends BHRGTLayerBase {
391
+ material: "soil";
392
+ /** Geotechnical soil name (may be "" for IMBRO/A archive data using NEN 5104) */
285
393
  geotechnicalSoilName: string;
394
+ /** Soil name per NEN 5104 (IMBRO/A archive data; geotechnicalSoilName is often nil there) */
395
+ soilNameNEN5104?: string | null;
396
+ /** Gravel content classification per NEN 5104 (IMBRO/A) */
397
+ gravelContentClassNEN5104?: string | null;
398
+ /** Organic matter content classification per NEN 5104 (IMBRO/A) */
399
+ organicMatterContentClassNEN5104?: string | null;
286
400
  /** Tertiary soil constituent (e.g., "schelpMateriaal", "plantenresten") */
287
401
  tertiaryConstituent?: string | null;
288
402
  /** Soil color code */
@@ -295,14 +409,14 @@ export interface BHRGTLayer {
295
409
  carbonateContentClass?: string | null;
296
410
  /** Sand median grain size classification */
297
411
  sandMedianClass?: string | null;
412
+ /** Gravel median grain size classification (e.g., "fijn", "middelgrof") */
413
+ gravelMedianClass?: string | null;
414
+ /** Depositional characteristic of the soil (e.g., "nietBepaald") */
415
+ geotechnicalDepositionalCharacteristic?: string | null;
416
+ /** Interbedding of other material in the soil (e.g., "kleiWeinigDikkeLaminae") */
417
+ interbedding?: string | null;
298
418
  /** Grain shape properties (for sand/gravel) */
299
419
  grainshape?: Grainshape;
300
- /** Whether the layer boundary is slanted */
301
- slant?: boolean | null;
302
- /** Whether the layer is bedded/stratified */
303
- bedded?: boolean | null;
304
- /** Whether the internal structure is intact (undisturbed) */
305
- internalStructureIntact?: boolean | null;
306
420
  /** Whether the soil is mixed */
307
421
  mixed?: boolean | null;
308
422
  /** Whether the soil has mottled appearance */
@@ -315,19 +429,55 @@ export interface BHRGTLayer {
315
429
  organicSoilTexture?: string | null;
316
430
  /** Tensile strength of peat */
317
431
  peatTensileStrength?: string | null;
432
+ /** Cross bedding present (raw code) */
433
+ crossBedding?: string | null;
434
+ /** Graded bedding present (raw code) */
435
+ gradedBedding?: string | null;
436
+ /** Mixing type of the soil */
437
+ mixingType?: string | null;
438
+ /** Fine gravel content classification */
439
+ fineGravelContentClass?: string | null;
440
+ /** Medium-coarse gravel content classification */
441
+ mediumCoarseGravelContentClass?: string | null;
442
+ /** Very coarse gravel content classification */
443
+ veryCoarseGravelContentClass?: string | null;
444
+ /** Sand sorting classification per NEN 5104 */
445
+ sandSortingNEN5104?: string | null;
446
+ /** Peat type classification */
447
+ peatType?: string | null;
448
+ /** Depositional age of the layer */
449
+ depositionalAge?: string | null;
450
+ }
451
+ /**
452
+ * A BHR-GT layer that describes rock.
453
+ * Discriminate on `material === "rock"`.
454
+ */
455
+ export interface BHRGTRockLayer extends BHRGTLayerBase {
456
+ material: "rock";
457
+ /** Rock description */
458
+ rock: RockDescription;
318
459
  }
460
+ /**
461
+ * A BHR-GT described layer: either soil or rock.
462
+ *
463
+ * Narrow on the `material` discriminant:
464
+ * ```ts
465
+ * if (layer.material === "rock") layer.rock.rockType;
466
+ * else layer.geotechnicalSoilName;
467
+ * ```
468
+ */
469
+ export type BHRGTLayer = BHRGTSoilLayer | BHRGTRockLayer;
319
470
  /**
320
471
  * Complete Bore data (metadata + layers)
321
472
  *
322
473
  * Note: BHRGTData represents BHR-GT-BMB (Boormonsterbeschrijving - visual/textural description)
323
474
  * For laboratory analysis data, see the optional `analysis` field (BHR-GT-BMA)
324
475
  */
325
- export interface BHRGTData {
476
+ export interface BHRGTData extends BRORegistrationObject {
326
477
  /**
327
478
  * Metadata about the parsed document (schema version, warnings)
328
479
  */
329
480
  meta: ParseMeta;
330
- broId: string | null;
331
481
  /**
332
482
  * User-defined identifier (not parsed from XML)
333
483
  *
@@ -341,29 +491,38 @@ export interface BHRGTData {
341
491
  * ```
342
492
  */
343
493
  alias?: string;
344
- /**
345
- * BRO quality regime
346
- *
347
- * - IMBRO: Strict regime (all mandatory fields required)
348
- * - IMBRO/A: Relaxed regime for historical data (allows missing fields)
349
- */
350
- qualityRegime: QualityRegime | null;
351
- researchReportDate: Date | null;
494
+ researchReportDate: string | null;
352
495
  deliveredLocation: Location | null;
353
496
  standardizedLocation: Location | null;
354
497
  deliveredVerticalPositionOffset: number | null;
355
498
  deliveredVerticalPositionDatum: string | null;
356
499
  deliveredVerticalPositionReferencePoint: string | null;
500
+ /** Soil use at the site (e.g., "akker", "grasland", "geenBodemgebruik") */
501
+ soilUse: string | null;
502
+ /** Position of the borehole on the ground body (e.g. "kruin", "talud") */
503
+ positionOnGroundBody: string | null;
504
+ /** Temporary change at the site at time of drilling (e.g. "geen") */
505
+ temporaryChange: string | null;
357
506
  descriptionProcedure: string | null;
358
507
  groundwaterLevel: number | null;
508
+ /** Mean highest groundwater level in m relative to local reference (GHG) */
509
+ meanHighestGroundwaterLevel: number | null;
510
+ /** Mean lowest groundwater level in m relative to local reference (GLG) */
511
+ meanLowestGroundwaterLevel: number | null;
359
512
  boreRockReached: boolean | null;
360
513
  finalBoreDepth: number | null;
361
514
  finalSampleDepth: number | null;
515
+ /** Final depth reached during site preparation (m) */
516
+ finalDepthPreparation: number | null;
517
+ /** Final depth reached by excavation (m) */
518
+ finalDepthExcavation: number | null;
519
+ /** Final depth reached with a temporary casing (m) */
520
+ finalDepthTemporaryCasing: number | null;
362
521
  boreHoleCompleted: boolean | null;
363
522
  /** Start date of the boring operation */
364
- boringStartDate: Date | null;
523
+ boringStartDate: string | null;
365
524
  /** End date of the boring operation */
366
- boringEndDate: Date | null;
525
+ boringEndDate: string | null;
367
526
  /** Boring procedure standard used (e.g., "EN1997d2v2007") */
368
527
  boringProcedure: string | null;
369
528
  /** Boring technique used (e.g., "gestoken", "mechanischGestoken") */
@@ -374,6 +533,16 @@ export interface BHRGTData {
374
533
  subsurfaceContaminated: boolean | null;
375
534
  /** Stop criterion for boring */
376
535
  stopCriterion: string | null;
536
+ /** Whether a flushing medium was used during boring */
537
+ flushingMediumUsed: boolean | null;
538
+ /** Flushing additive used during boring (e.g. "geen"), when a flushing medium was used */
539
+ flushingAdditive: string | null;
540
+ /** Whether a temporary casing was used during boring */
541
+ temporaryCasingUsed: boolean | null;
542
+ /** Site preparation before boring (e.g., "geen") */
543
+ preparation: string | null;
544
+ /** KvK number of the operator that carried out the research */
545
+ researchOperator: string | null;
377
546
  /** Type of sampler used */
378
547
  samplerType: string | null;
379
548
  /** Sampling procedure standard */
@@ -411,7 +580,7 @@ export interface BHRGTData {
411
580
  /** Description location (field/lab) */
412
581
  descriptionLocation: string | null;
413
582
  /** Date of description report */
414
- descriptionReportDate: Date | null;
583
+ descriptionReportDate: string | null;
415
584
  /** Described material type */
416
585
  describedMaterial: string | null;
417
586
  /** Whether sampling was continuous */
@@ -428,8 +597,14 @@ export interface BHRGTData {
428
597
  completedIntervals: Array<CompletedInterval>;
429
598
  /** Array of intervals not described (with reason) */
430
599
  notDescribedIntervals: Array<NotDescribedInterval>;
431
- /** BRO registration history */
432
- registrationHistory: RegistrationHistory | null;
600
+ /** Array of post-sedimentary discontinuities in the descriptive log */
601
+ postSedimentaryDiscontinuities: Array<PostSedimentaryDiscontinuity>;
602
+ /** Array of excavated layers (removed by excavation) */
603
+ excavatedLayers: Array<ExcavatedLayer>;
604
+ /** Boring velocity profile (elapsed time vs depth) */
605
+ boringVelocity: Array<BoringVelocityMeasurement>;
606
+ /** Fluid mud (slib) layer at the borehole, when present */
607
+ fluidMudLayer?: FluidMudLayer;
433
608
  /** Report history with events */
434
609
  reportHistory: ReportHistory | null;
435
610
  /** Delivery context (e.g., "publiekeTaak") */
@@ -443,10 +618,139 @@ export interface BHRGTData {
443
618
  /** Whether site characteristics were determined */
444
619
  siteCharacteristicDetermined: boolean | null;
445
620
  }
621
+ /** Munsell colour notation (BHR-G soil colour) */
622
+ export interface MunsellColour {
623
+ munsellHue: string | null;
624
+ munsellValue: string | null;
625
+ munsellChroma: string | null;
626
+ }
627
+ /** A constituent of the sand fraction */
628
+ export interface SandConstituent {
629
+ grainColour: string | null;
630
+ percentageClass: string | null;
631
+ archiveClass: string | null;
632
+ }
633
+ /** Sand fraction description (BHR-G soil) */
634
+ export interface SandFraction {
635
+ darkGrainContentClass: string | null;
636
+ darkGrainContentClassArchive: string | null;
637
+ angularity: string | null;
638
+ sandMedianClass: string | null;
639
+ sandSorting: string | null;
640
+ variegation: string | null;
641
+ anomalouslyCoarseContentClass: string | null;
642
+ anomalouslyCoarseContentClassArchive: string | null;
643
+ granuleContentClass: string | null;
644
+ granuleContentClassArchive: string | null;
645
+ estimatedMedian: number | null;
646
+ sandConstituents: Array<SandConstituent>;
647
+ }
648
+ /** A constituent of the shell fraction */
649
+ export interface ShellConstituent {
650
+ shellTaxon: string | null;
651
+ relativeAbundance: string | null;
652
+ relativeAbundanceClass: string | null;
653
+ relativeAbundanceClassArchive: string | null;
654
+ }
655
+ /** Shell fraction description (BHR-G soil) */
656
+ export interface ShellFraction {
657
+ gritContentClass: string | null;
658
+ fragmentContentClass: string | null;
659
+ remainsContentClass: string | null;
660
+ wholeContentClass: string | null;
661
+ doublets: string | null;
662
+ thickWalledContentClass: string | null;
663
+ thinWalledContentClass: string | null;
664
+ inSitu: string | null;
665
+ weatheringDegree: string | null;
666
+ shellConstituents: Array<ShellConstituent>;
667
+ }
668
+ /** A constituent of the gravel fraction */
669
+ export interface GravelConstituent {
670
+ gravelType: string | null;
671
+ fractionProportion: number | null;
672
+ archiveClass: string | null;
673
+ }
674
+ /** Gravel fraction description (BHR-G soil) */
675
+ export interface GravelFraction {
676
+ gravelMedianClass: string | null;
677
+ angularity: string | null;
678
+ fineGravelContentClass: string | null;
679
+ mediumCoarseGravelContentClass: string | null;
680
+ veryCoarseGravelContentClass: string | null;
681
+ ventifactPresent: string | null;
682
+ sphericity: string | null;
683
+ variegation: string | null;
684
+ gravelProvenance: string | null;
685
+ estimatedMedian: number | null;
686
+ gravelConstituents: Array<GravelConstituent>;
687
+ }
688
+ /** A constituent of the peat fraction */
689
+ export interface PeatConstituent {
690
+ plantRemainType: string | null;
691
+ percentageClass: string | null;
692
+ archiveClass: string | null;
693
+ }
694
+ /** Peat fraction description (BHR-G soil) */
695
+ export interface PeatFraction {
696
+ peatType: string | null;
697
+ peatConstituents: Array<PeatConstituent>;
698
+ }
699
+ /** A chunk (brok) of differing material within a layer */
700
+ export interface Chunk {
701
+ soilType: string | null;
702
+ sizeClass: string | null;
703
+ percentageClass: string | null;
704
+ archiveClass: string | null;
705
+ colour: string | null;
706
+ geologicalOrigin: string | null;
707
+ cemented: string | null;
708
+ }
709
+ /** Fine fraction distribution for organic soils (mass proportions, %) */
710
+ export interface FineFractionDistributionOrganicSoil {
711
+ estimatedMassProportionSand: number | null;
712
+ estimatedMassProportionSilt: number | null;
713
+ estimatedMassProportionLutum: number | null;
714
+ }
715
+ /** Fine fraction distribution for shelly soils (volume proportions, %) */
716
+ export interface FineFractionDistributionShellySoil {
717
+ estimatedVolumeProportionSand: number | null;
718
+ estimatedVolumeProportionSilt: number | null;
719
+ estimatedVolumeProportionLutum: number | null;
720
+ }
721
+ /** Estimated fraction distribution of a layer's soil */
722
+ export interface FractionDistribution {
723
+ fractionDistributionComplete: string | null;
724
+ estimatedMassProportionOrganicMatter: number | null;
725
+ estimatedMassProportionShellMatter: number | null;
726
+ estimatedVolumeProportionShellMatter: number | null;
727
+ estimatedMassProportionShell: number | null;
728
+ estimatedMassProportionGravel: number | null;
729
+ estimatedVolumeProportionGravel: number | null;
730
+ fineFractionDistributionOrganicSoil?: FineFractionDistributionOrganicSoil;
731
+ fineFractionDistributionShellySoil?: FineFractionDistributionShellySoil;
732
+ }
733
+ /** A mottle (vlek) in a layer */
734
+ export interface Mottle {
735
+ colour: string | null;
736
+ density: string | null;
737
+ inBands: string | null;
738
+ }
739
+ /** A thin stratum (laagje) interbedded in a layer */
740
+ export interface ThinStratum {
741
+ layerProportion: number | null;
742
+ layerProportionClass: string | null;
743
+ layerProportionClassArchive: string | null;
744
+ stratumThicknessClass: string | null;
745
+ geologicalOrigin: string | null;
746
+ }
446
747
  /**
447
748
  * BHR-G (Geological Borehole) layer data
448
749
  *
449
750
  * Contains all fields from the BRO BHR-G schema for a single soil layer.
751
+ * Soil-level fields are flattened directly onto the layer (matching the parser's
752
+ * existing style); genuinely nested sub-structures (fractions, mottles, chunks,
753
+ * thin strata) are modelled as nested objects/arrays.
450
754
  */
451
755
  export interface BHRGLayer {
452
756
  upperBoundary: number;
@@ -463,42 +767,90 @@ export interface BHRGLayer {
463
767
  gravelContentClass?: string | null;
464
768
  carbonateContentClass?: string | null;
465
769
  sandMedianClass?: string | null;
770
+ /** Whether a post-sedimentary change is present (raw code) */
771
+ postSedimentary?: string | null;
772
+ horizonCode?: string | null;
773
+ humanTrace?: string | null;
774
+ geologicalOrigin?: string | null;
775
+ bioturbated?: string | null;
776
+ /** Sedimentary structures (0-3) */
777
+ structure?: Array<string>;
778
+ /** Vertical trends (0-3) */
779
+ verticalTrend?: Array<string>;
780
+ /** Archeological constituent types (0-5) */
781
+ archeologicalConstituents?: Array<string>;
782
+ /** Geological soil name (lithostratigraphic) */
783
+ geologicalSoilName?: string | null;
784
+ /** Shell matter content classification */
785
+ shellMatterContentClass?: string | null;
786
+ micaContentClass?: string | null;
787
+ micaContentClassArchive?: string | null;
788
+ shellMatterContentClassArchive?: string | null;
789
+ /** Very coarse fraction content classes (0-2) */
790
+ veryCoarseFractionContentClass?: Array<string>;
791
+ /** Very coarse fraction content classes, archive coding (0-2) */
792
+ veryCoarseFractionContentClassArchive?: Array<string>;
793
+ glauconiteContentClass?: string | null;
794
+ glauconiteContentClassArchive?: string | null;
795
+ sedimentaryPhenomenon?: string | null;
796
+ /** Animal fossil types found in the soil (0+) */
797
+ animalFossils?: Array<string>;
798
+ munsellColour?: MunsellColour;
799
+ sandFraction?: SandFraction;
800
+ shellFraction?: ShellFraction;
801
+ gravelFraction?: GravelFraction;
802
+ peatFraction?: PeatFraction;
803
+ fractionDistribution?: FractionDistribution;
804
+ /** Chunks of differing material (0-3) */
805
+ chunks?: Array<Chunk>;
806
+ /** Mottles (0-3) */
807
+ mottles?: Array<Mottle>;
808
+ /** Thin interbedded strata (0-4) */
809
+ thinStrata?: Array<ThinStratum>;
466
810
  }
467
811
  /**
468
812
  * Complete BHR-G (Geological Borehole) data (metadata + layers)
469
813
  */
470
- export interface BHRGData {
814
+ export interface BHRGData extends BRORegistrationObject {
471
815
  /**
472
816
  * Metadata about the parsed document (schema version, warnings)
473
817
  */
474
818
  meta: ParseMeta;
475
- broId: string | null;
476
819
  /**
477
820
  * User-defined identifier (not parsed from XML)
478
821
  */
479
822
  alias?: string;
480
- /**
481
- * BRO quality regime
482
- *
483
- * - IMBRO: Strict regime (all mandatory fields required)
484
- * - IMBRO/A: Relaxed regime for historical data (allows missing fields)
485
- */
486
- qualityRegime: QualityRegime | null;
487
- researchReportDate: Date | null;
823
+ researchReportDate: string | null;
488
824
  deliveredLocation: Location | null;
489
825
  standardizedLocation: Location | null;
490
826
  deliveredVerticalPositionOffset: number | null;
491
827
  deliveredVerticalPositionDatum: string | null;
492
828
  deliveredVerticalPositionReferencePoint: string | null;
829
+ /** Water depth at the borehole location (m), when the survey was over water */
830
+ waterDepth: number | null;
831
+ /** Date vertical position was determined */
832
+ verticalPositioningDate: string | null;
833
+ /** Method used to determine vertical position */
834
+ verticalPositioningMethod: string | null;
835
+ /** KvK number of the operator that determined the vertical position */
836
+ verticalPositioningOperator: string | null;
837
+ /** Landscape element at the site */
838
+ landscapeElement: string | null;
839
+ /** Hydrological setting at the site */
840
+ hydrologicalSetting: string | null;
841
+ /** Current geomorphological process at the site */
842
+ currentProcess: string | null;
493
843
  descriptionProcedure: string | null;
844
+ /** Tool used for the sample description */
845
+ utensil: string | null;
494
846
  boreRockReached: boolean | null;
495
847
  finalBoreDepth: number | null;
496
848
  finalSampleDepth: number | null;
497
849
  boreHoleCompleted: string | null;
498
850
  /** Start date of the boring operation */
499
- boringStartDate: Date | null;
851
+ boringStartDate: string | null;
500
852
  /** End date of the boring operation */
501
- boringEndDate: Date | null;
853
+ boringEndDate: string | null;
502
854
  /** Boring procedure standard used */
503
855
  boringProcedure: string | null;
504
856
  /** Boring technique used */
@@ -509,6 +861,8 @@ export interface BHRGData {
509
861
  subsurfaceContaminated: boolean | null;
510
862
  /** Stop criterion for boring */
511
863
  stopCriterion: string | null;
864
+ /** Whether a flushing additive was used (raw code) */
865
+ flushingAdditiveUsed: string | null;
512
866
  /** Sampling procedure standard */
513
867
  samplingProcedure: string | null;
514
868
  /** Sampling method used */
@@ -522,7 +876,7 @@ export interface BHRGData {
522
876
  /** Description location (field/lab) */
523
877
  descriptionLocation: string | null;
524
878
  /** Date of description report */
525
- descriptionReportDate: Date | null;
879
+ descriptionReportDate: string | null;
526
880
  /** Described material type */
527
881
  describedMaterial: string | null;
528
882
  /** Whether sampling was continuous */
@@ -534,8 +888,6 @@ export interface BHRGData {
534
888
  boredIntervals: Array<BoredInterval>;
535
889
  /** Array of sampled intervals with method and quality */
536
890
  sampledIntervals: Array<SampledInterval>;
537
- /** BRO registration history */
538
- registrationHistory: RegistrationHistory | null;
539
891
  /** Report history with events */
540
892
  reportHistory: ReportHistory | null;
541
893
  /** Delivery context (e.g., "archiefoverdracht") */
@@ -574,6 +926,19 @@ export interface SamplerDetails {
574
926
  coreCatcherPresent: boolean | null;
575
927
  pistonPresent: boolean | null;
576
928
  }
929
+ /**
930
+ * Core recovery measurements for a sampled interval (rock coring)
931
+ */
932
+ export interface CoreRecovery {
933
+ /** Total core recovery (%) */
934
+ totalCoreRecovery: number | null;
935
+ /** Solid core recovery (%) */
936
+ solidCoreRecovery: number | null;
937
+ /** Rock Quality Designation (%) */
938
+ rockQualityDesignation: number | null;
939
+ /** Whether the core recovery was determined in the field */
940
+ fieldDetermined: boolean | null;
941
+ }
577
942
  /**
578
943
  * Sampled interval - records sampling method and quality at specific depth ranges
579
944
  */
@@ -585,6 +950,8 @@ export interface SampledInterval {
585
950
  samplingQuality: string | null;
586
951
  orientatedSampled: boolean | null;
587
952
  sampler?: SamplerDetails;
953
+ /** Core recovery measurements (rock coring), when determined */
954
+ coreRecovery?: CoreRecovery;
588
955
  }
589
956
  /**
590
957
  * Completed interval - records how the borehole was completed/backfilled
@@ -593,10 +960,45 @@ export interface CompletedInterval {
593
960
  beginDepth: number;
594
961
  endDepth: number;
595
962
  permanentCasingPresent: boolean | null;
963
+ /** Diameter of the permanent casing (mm) */
964
+ diameterPermanentCasing: number | null;
965
+ /** Material of the permanent casing */
966
+ materialPermanentCasing: string | null;
596
967
  backfillMaterial: string | null;
597
968
  backfillMaterialWashed: boolean | null;
598
969
  backfillMaterialCertified: boolean | null;
599
970
  }
971
+ /**
972
+ * Excavated layer - a layer removed by excavation before/during boring
973
+ */
974
+ export interface ExcavatedLayer {
975
+ upperBoundary: number;
976
+ lowerBoundary: number;
977
+ /** Material that was excavated */
978
+ excavatedMaterial: string | null;
979
+ }
980
+ /**
981
+ * Boring velocity measurement - drilling depth reached after a given elapsed time
982
+ */
983
+ export interface BoringVelocityMeasurement {
984
+ /** Elapsed time (s) */
985
+ elapsedTime: number | null;
986
+ /** Depth reached (m) */
987
+ depth: number | null;
988
+ }
989
+ /**
990
+ * Fluid mud layer - a layer of fluid mud (slib) recorded at the borehole
991
+ */
992
+ export interface FluidMudLayer {
993
+ /** Thickness of the fluid mud layer (m) */
994
+ thickness: number | null;
995
+ /** Colour of the fluid mud */
996
+ colour: string | null;
997
+ /** Method used to position the upper boundary */
998
+ upperBoundaryPositioningMethod: string | null;
999
+ /** Method used to position the lower boundary */
1000
+ lowerBoundaryPositioningMethod: string | null;
1001
+ }
600
1002
  /**
601
1003
  * Not described interval - records depth ranges that were not described and why
602
1004
  */
@@ -610,15 +1012,25 @@ export interface NotDescribedInterval {
610
1012
  */
611
1013
  export interface IntermediateEvent {
612
1014
  eventName: string | null;
613
- eventDate: Date | null;
1015
+ eventDate: string | null;
614
1016
  }
615
1017
  /**
616
1018
  * Registration history - BRO administrative registration information
617
1019
  */
618
1020
  export interface RegistrationHistory {
619
- objectRegistrationTime: Date | null;
1021
+ objectRegistrationTime: string | null;
620
1022
  registrationStatus: string | null;
621
- registrationCompletionTime: Date | null;
1023
+ registrationCompletionTime: string | null;
1024
+ /** Time of the latest correction to the registered object */
1025
+ latestCorrectionTime: string | null;
1026
+ /** Time of the latest addition to the registered object */
1027
+ latestAdditionTime: string | null;
1028
+ /** Time the object was placed under review */
1029
+ underReviewTime: string | null;
1030
+ /** Time the object was deregistered */
1031
+ deregistrationTime: string | null;
1032
+ /** Time the object was reregistered after deregistration */
1033
+ reregistrationTime: string | null;
622
1034
  corrected: boolean | null;
623
1035
  underReview: boolean | null;
624
1036
  deregistered: boolean | null;
@@ -628,8 +1040,8 @@ export interface RegistrationHistory {
628
1040
  * Report history - records when and how data was reported
629
1041
  */
630
1042
  export interface ReportHistory {
631
- reportStartDate: Date | null;
632
- reportEndDate: Date | null;
1043
+ reportStartDate: string | null;
1044
+ reportEndDate: string | null;
633
1045
  intermediateEvents: Array<IntermediateEvent>;
634
1046
  }
635
1047
  /**
@@ -664,6 +1076,8 @@ export interface OrganicMatterContentDetermination {
664
1076
  determinationProcedure: string | null;
665
1077
  determinationMethod: string | null;
666
1078
  removedMaterial: string | null;
1079
+ /** Whether a lutum (clay fraction) correction was applied to the result */
1080
+ lutumCorrectionApplied: boolean | null;
667
1081
  organicMatterContent: number | null;
668
1082
  }
669
1083
  /**
@@ -682,6 +1096,8 @@ export interface VolumetricMassDensityOfSolidsDetermination {
682
1096
  determinationProcedure: string | null;
683
1097
  determinationMethod: string | null;
684
1098
  liquidUsed: string | null;
1099
+ /** Volume of the sample container used (e.g., "100ml") */
1100
+ sampleContainerVolume: string | null;
685
1101
  volumetricMassDensityOfSolids: number | null;
686
1102
  }
687
1103
  /**
@@ -696,9 +1112,13 @@ export interface ParticleSizeDistributionDetermination {
696
1112
  removedMaterial: string | null;
697
1113
  equivalentMassDeterminationMethod: string | null;
698
1114
  equivalentMass: number | null;
1115
+ /** Optical model used (for laser-diffraction methods) */
1116
+ usedOpticalModel?: string | null;
699
1117
  fractionSmaller63um: number | null;
700
1118
  fractionLarger63um: number | null;
701
1119
  fraction0to2um?: number | null;
1120
+ /** 2–32 µm fraction — only present in the coarser standardDistributionFractionSmaller63um group */
1121
+ fraction2to32um?: number | null;
702
1122
  fraction2to4um?: number | null;
703
1123
  fraction4to8um?: number | null;
704
1124
  fraction8to16um?: number | null;
@@ -721,6 +1141,20 @@ export interface ParticleSizeDistributionDetermination {
721
1141
  fraction16to31_5mm?: number | null;
722
1142
  fraction31_5to63mm?: number | null;
723
1143
  fractionLarger63mm?: number | null;
1144
+ fraction63to75um?: number | null;
1145
+ fraction75to90um?: number | null;
1146
+ fraction90to106um?: number | null;
1147
+ fraction106to125um?: number | null;
1148
+ fraction125to150um?: number | null;
1149
+ fraction150to180um?: number | null;
1150
+ fraction180to212um?: number | null;
1151
+ fraction212to250um?: number | null;
1152
+ fraction4to5_6mm?: number | null;
1153
+ fraction5_6to8mm?: number | null;
1154
+ fraction8to11_2mm?: number | null;
1155
+ fraction11_2to16mm?: number | null;
1156
+ fraction16to20mm?: number | null;
1157
+ fraction20to31_5mm?: number | null;
724
1158
  }
725
1159
  /**
726
1160
  * Plasticity data point for Atterberg limits test
@@ -729,6 +1163,8 @@ export interface ParticleSizeDistributionDetermination {
729
1163
  export interface PlasticityAtSpecificWaterContent {
730
1164
  waterContent: number;
731
1165
  numberOfFalls: number;
1166
+ /** Cone penetration depth in mm (fall-cone method) */
1167
+ penetrationDepth?: number | null;
732
1168
  }
733
1169
  /**
734
1170
  * Consistency limits determination (Atterberg limits)
@@ -740,6 +1176,8 @@ export interface ConsistencyLimitsDetermination {
740
1176
  fractionLarger500um: number | null;
741
1177
  usedMedium: string | null;
742
1178
  performanceIrregularity: string | null;
1179
+ /** Fall-cone apparatus type used (e.g., "zweedseConus30graden") */
1180
+ conusType: string | null;
743
1181
  liquidLimit: number | null;
744
1182
  plasticLimit: number | null;
745
1183
  plasticityIndex: number | null;
@@ -753,6 +1191,17 @@ export interface HeightAtSpecificTime {
753
1191
  time: number;
754
1192
  height: number;
755
1193
  }
1194
+ /**
1195
+ * Stress/strain measurement at a specific time during a settlement step
1196
+ * Columns of the StressAtSpecificSettlement time-series (oedometer/consolidation).
1197
+ */
1198
+ export interface StressAtSpecificSettlement {
1199
+ elapsedTime: number;
1200
+ verticalStrain: number;
1201
+ excessPoreWaterPressure: number | null;
1202
+ verticalEffectiveStress: number | null;
1203
+ horizontalEffectiveStress: number | null;
1204
+ }
756
1205
  /**
757
1206
  * Single loading step in settlement characteristics test
758
1207
  * Represents one stress increment in oedometer/consolidation test
@@ -765,6 +1214,24 @@ export interface SettlementDeterminationStep {
765
1214
  stepType: string | null;
766
1215
  verticalStress: number | null;
767
1216
  heightChangeDuringSettlement: Array<HeightAtSpecificTime>;
1217
+ /** Stress/strain time-series for the step (alternative to heightChangeDuringSettlement) */
1218
+ stressChangeDuringSettlement?: Array<StressAtSpecificSettlement>;
1219
+ }
1220
+ /**
1221
+ * Saturation stage preceding compression in the oedometer/settlement test
1222
+ * Documents how the specimen was saturated before loading.
1223
+ */
1224
+ export interface SaturationStageAtCompression {
1225
+ porousDiscWet: boolean | null;
1226
+ usedMedium: string | null;
1227
+ backPressure: number | null;
1228
+ constantHeight: boolean | null;
1229
+ specimenHeightAfterwards: number | null;
1230
+ disturbanceInduced: boolean | null;
1231
+ /** Maximum stress difference during saturation (kPa) */
1232
+ maximumStressDifference: number | null;
1233
+ /** Maximum strain during saturation (%) */
1234
+ maximumStrain: number | null;
768
1235
  }
769
1236
  /**
770
1237
  * Settlement characteristics determination (oedometer/consolidation test)
@@ -781,6 +1248,8 @@ export interface SettlementCharacteristicsDetermination {
781
1248
  apparatusDeformationApplied: boolean | null;
782
1249
  bearingFrictionCorrectionApplied: boolean | null;
783
1250
  irregularResult: boolean | null;
1251
+ /** Saturation stage performed before compression (optional) */
1252
+ saturationStageAtCompression?: SaturationStageAtCompression;
784
1253
  determinationSteps: Array<SettlementDeterminationStep>;
785
1254
  }
786
1255
  /**
@@ -790,6 +1259,13 @@ export interface SaturatedPermeabilityAtSpecificDensity {
790
1259
  dryVolumetricMassDensity: number | null;
791
1260
  saturatedPermeability: number | null;
792
1261
  }
1262
+ /**
1263
+ * Permeability at specific load measurement
1264
+ */
1265
+ export interface SaturatedPermeabilityAtSpecificLoad {
1266
+ load: number | null;
1267
+ saturatedPermeability: number | null;
1268
+ }
793
1269
  /**
794
1270
  * Saturated permeability determination (hydraulic conductivity)
795
1271
  * Used to determine water flow characteristics through soil
@@ -805,7 +1281,14 @@ export interface SaturatedPermeabilityDetermination {
805
1281
  waterDegassed: boolean | null;
806
1282
  temperature: number | null;
807
1283
  maximumGradient: number | null;
1284
+ /** Whether the confining ring was water-repellent (raw code) */
1285
+ ringWaterRepellent: string | null;
1286
+ /** Water content after the test (%) */
1287
+ waterContentAfterwards: number | null;
1288
+ /** Material irregularities observed (0-2 codes) */
1289
+ materialIrregularity: Array<string>;
808
1290
  saturatedPermeabilityAtSpecificDensity: Array<SaturatedPermeabilityAtSpecificDensity>;
1291
+ saturatedPermeabilityAtSpecificLoad: Array<SaturatedPermeabilityAtSpecificLoad>;
809
1292
  }
810
1293
  /**
811
1294
  * Membrane correction data for triaxial test
@@ -839,6 +1322,8 @@ export interface SaturationStageAtLoading {
839
1322
  effectivePressure: number | null;
840
1323
  skemptonBCoefficient: number | null;
841
1324
  disturbanceInduced: boolean | null;
1325
+ /** Stress difference during saturation (kPa) */
1326
+ stressDifference: number | null;
842
1327
  }
843
1328
  /**
844
1329
  * Volume change measurement at specific time during consolidation
@@ -872,6 +1357,14 @@ export interface ShearStressAtSpecificStrain {
872
1357
  porePressure?: number | null;
873
1358
  volumeChange?: number | null;
874
1359
  }
1360
+ /**
1361
+ * Reconstituted/remoulded specimen preparation for a triaxial loading test
1362
+ * Present when the specimen was made in the lab rather than taken intact.
1363
+ */
1364
+ export interface SpecimenMadeForLoading {
1365
+ makingMethod: string | null;
1366
+ dryVolumetricMassDensity: number | null;
1367
+ }
875
1368
  /**
876
1369
  * Load stage data for triaxial test
877
1370
  * Documents the shearing/loading phase of the test
@@ -908,6 +1401,7 @@ export interface ShearStressChangeDuringLoadingDetermination {
908
1401
  stopCriterion: string | null;
909
1402
  membraneCorrection?: MembraneCorrection;
910
1403
  drainageStripCorrection?: DrainageStripCorrection;
1404
+ madeSpecimenForLoading?: SpecimenMadeForLoading;
911
1405
  saturationStageAtLoading?: SaturationStageAtLoading;
912
1406
  consolidationStageAtLoading?: ConsolidationStageAtLoading;
913
1407
  loadStage?: LoadStage;
@@ -923,6 +1417,10 @@ export interface MaximumUndrainedShearStrengthDetermination {
923
1417
  verticallyDetermined: boolean | null;
924
1418
  sampleMoistness: string | null;
925
1419
  maximumUndrainedShearStrength: number | null;
1420
+ /** Lowest measured maximum undrained shear strength (kPa) */
1421
+ lowestMaximumUndrainedShearStrength: number | null;
1422
+ /** Highest measured maximum undrained shear strength (kPa) */
1423
+ highestMaximumUndrainedShearStrength: number | null;
926
1424
  }
927
1425
  /**
928
1426
  * Height measurement at specific time during consolidation in horizontal deformation test
@@ -1019,7 +1517,7 @@ export interface InvestigatedInterval {
1019
1517
  * Contains laboratory test results for soil samples
1020
1518
  */
1021
1519
  export interface BoreholeSampleAnalysis {
1022
- analysisReportDate: Date | null;
1520
+ analysisReportDate: string | null;
1023
1521
  analysisProcedure: string | null;
1024
1522
  investigatedIntervals: Array<InvestigatedInterval>;
1025
1523
  }