boring_parser/
boring_structs_400.rs

1use serde::{Deserialize, Serialize};
2
3// v3.00とv2.10の構造体を流用
4use crate::boring_structs_210::*;
5use crate::boring_structs_300::*;
6
7// ============================================================================
8// ルート構造体 - v4.00で基礎情報が追加
9// ============================================================================
10
11#[derive(Debug, Serialize, Deserialize)]
12#[serde(rename = "ボーリング情報")]
13pub struct Boring400 {
14    #[serde(rename = "@DTD_version")]
15    pub dtd_version: Option<String>,
16    #[serde(rename = "基礎情報")]
17    pub foundation_info: FoundationInfo400,
18    #[serde(rename = "標題情報")]
19    pub title: Title400,
20    #[serde(rename = "コア情報")]
21    pub core: Core400,
22}
23
24// ============================================================================
25// 基礎情報 - v4.00で新規追加
26// ============================================================================
27
28#[derive(Debug, Serialize, Deserialize)]
29pub struct FoundationInfo400 {
30    #[serde(default, rename = "適用規格")]
31    pub applicable_standards: Vec<String>,
32    #[serde(rename = "公開フラグ")]
33    pub public_flag: PublicFlag400,
34}
35
36#[derive(Debug, Serialize, Deserialize)]
37pub struct PublicFlag400 {
38    #[serde(rename = "公開フラグ_コード")]
39    pub code: Option<String>,
40    #[serde(default, rename = "公開フラグ_備考")]
41    pub remarks: Option<String>,
42}
43
44// ============================================================================
45// 標題情報 - v4.00でハンマー落下用具とN値記録用具が削除
46// ============================================================================
47
48#[derive(Debug, Serialize, Deserialize)]
49pub struct Title400 {
50    #[serde(rename = "調査基本情報")]
51    pub basic_info: BasicSurvey300, // v3.00を流用
52    #[serde(rename = "経度緯度情報")]
53    pub longitude_latitude: LngLat210, // v2.10を流用
54    #[serde(default, rename = "ローカル座標")]
55    pub local_coordinates: Vec<LocalCoordinate210>, // v2.10を流用
56    #[serde(rename = "調査位置")]
57    pub survey_position: SurveyPosition210, // v2.10を流用
58    #[serde(rename = "発注機関")]
59    pub order_institution: OrderInstitution210, // v2.10を流用
60    #[serde(rename = "調査期間")]
61    pub survey_period: SurveyPeriod210, // v2.10を流用
62    #[serde(rename = "調査会社")]
63    pub survey_company: SurveyCompany400, // v4.00で拡張(登録番号追加)
64    #[serde(rename = "ボーリング基本情報")]
65    pub boring_basic_info: BoringBasicInfo400, // v4.00でフィールド名変更
66    #[serde(rename = "試錐機")]
67    pub drilling_machine: DrillingMachine210, // v2.10を流用
68    #[serde(rename = "エンジン")]
69    pub engine: Engine210, // v2.10を流用
70    // v4.00で削除: ハンマー落下用具、N値記録用具
71    #[serde(rename = "ポンプ")]
72    pub pump: Pump210, // v2.10を流用
73    #[serde(default, rename = "櫓種類")]
74    pub tower_type: Option<TowerType210>, // v2.10を流用
75}
76
77// ============================================================================
78// 調査会社 - v4.00で地質調査技士登録番号等を追加
79// ============================================================================
80
81#[derive(Debug, Serialize, Deserialize)]
82pub struct SurveyCompany400 {
83    #[serde(rename = "調査会社_名称")]
84    pub name: Option<String>,
85    #[serde(rename = "調査会社_TEL")]
86    pub tel: Option<String>,
87    #[serde(rename = "調査会社_主任技師_氏名")]
88    pub chief_engineer_name: Option<String>,
89    #[serde(default, rename = "調査会社_主任技師_地質調査技士登録番号")]
90    pub chief_engineer_registration_number: Option<String>,
91    #[serde(rename = "調査会社_現場代理人_氏名")]
92    pub site_agent_name: Option<String>,
93    #[serde(default, rename = "調査会社_現場代理人_地質調査技士登録番号")]
94    pub site_agent_registration_number: Option<String>,
95    #[serde(rename = "調査会社_コア鑑定者_氏名")]
96    pub core_appraiser_name: Option<String>,
97    #[serde(default, rename = "調査会社_コア鑑定者_地質調査技士登録番号")]
98    pub core_appraiser_registration_number: Option<String>,
99    #[serde(rename = "調査会社_ボーリング責任者_氏名")]
100    pub boring_supervisor_name: Option<String>,
101    #[serde(default, rename = "調査会社_ボーリング責任者_地質調査技士登録番号")]
102    pub boring_supervisor_registration_number: Option<String>,
103    #[serde(default, rename = "調査会社_電子納品管理者_氏名")]
104    pub electronic_delivery_manager_name: Option<String>,
105    #[serde(default, rename = "調査会社_電子納品管理者_地質情報管理士登録番号")]
106    pub electronic_delivery_manager_registration_number: Option<String>,
107}
108
109// ============================================================================
110// ボーリング基本情報 - v4.00でフィールド名変更
111// 総掘進長→総削孔長、掘進角度→角度、掘進方向→方位
112// ============================================================================
113
114#[derive(Debug, Serialize, Deserialize)]
115pub struct BoringBasicInfo400 {
116    #[serde(rename = "孔口標高")]
117    pub surface_elevation: Option<String>,
118    #[serde(rename = "総削孔長")] // v3.00: 総掘進長
119    pub total_drilling_length: Option<String>,
120    #[serde(rename = "柱状図様式")]
121    pub columnar_diagram_format: Option<String>,
122    #[serde(default, rename = "角度")] // v3.00: 掘進角度
123    pub angle: Option<String>,
124    #[serde(default, rename = "方位")] // v3.00: 掘進方向
125    pub azimuth: Option<String>,
126    #[serde(default, rename = "地盤勾配")]
127    pub ground_slope: Option<String>,
128}
129
130// ============================================================================
131// コア情報 - v4.00で名称変更と新規要素追加
132// ============================================================================
133
134#[derive(Debug, Serialize, Deserialize)]
135pub struct Core400 {
136    // 岩石土区分 → 工学的地質区分名現場土質名
137    #[serde(rename = "工学的地質区分名現場土質名")]
138    pub engineering_geology_classifications: Vec<EngineeringGeologyClassification400>,
139    #[serde(default, rename = "色調")]
140    pub colors: Vec<Color210>, // v2.10を流用
141    #[serde(default, rename = "観察記事")]
142    pub observational_articles: Vec<ObservationalArticle210>, // v2.10を流用
143    #[serde(default, rename = "観察記事枠線")]
144    pub observational_article_frames: Vec<ObservationalArticleFrame210>, // v2.10を流用
145    #[serde(default, rename = "標準貫入試験")]
146    pub standard_penetration_tests: Vec<StandardPenetrationTest400>, // v4.00で単位変更
147    #[serde(default, rename = "標準貫入試験詳細データ")]
148    pub standard_penetration_test_details: Vec<StandardPenetrationTestDetail210>, // v2.10を流用
149    #[serde(default, rename = "ルジオン試験")]
150    pub lugeon_tests: Vec<LugeonTest210>, // v2.10を流用
151    #[serde(default, rename = "ルジオン試験詳細データ")]
152    pub lugeon_test_details: Vec<LugeonTestDetail210>, // v2.10を流用
153    #[serde(default, rename = "相対密度稠度")]
154    pub relative_density_consistency: Vec<RelativeDensityConsistency210>, // v2.10を流用
155    #[serde(default, rename = "硬軟区分判定表")]
156    pub hardness_classification_table: Vec<HardnessClassificationTable210>, // v2.10を流用
157    #[serde(default, rename = "硬軟区分")]
158    pub hardness_classifications: Vec<HardnessClassification300>, // v3.00を流用
159    // コア形状区分 → ボーリングコアの形状区分
160    #[serde(default, rename = "ボーリングコアの形状区分判定表")]
161    pub boring_core_shape_classification_table: Vec<CoreShapeClassificationTable210>, // v2.10を流用(名称のみ変更)
162    #[serde(default, rename = "ボーリングコアの形状区分")]
163    pub boring_core_shape_classifications: Vec<CoreShapeClassification300>, // v3.00を流用(名称のみ変更)
164    // 割れ目区分 → 割れ目の状態区分
165    #[serde(default, rename = "割れ目の状態区分判定表")]
166    pub crack_state_classification_table: Vec<FractureClassificationTable210>, // v2.10を流用(名称のみ変更)
167    #[serde(default, rename = "割れ目の状態区分")]
168    pub crack_state_classifications: Vec<FractureClassification300>, // v3.00を流用(名称のみ変更)
169    // 風化区分 → 風化の程度区分
170    #[serde(default, rename = "風化の程度区分判定表")]
171    pub weathering_degree_classification_table: Vec<WeatheringClassificationTable210>, // v2.10を流用(名称のみ変更)
172    #[serde(default, rename = "風化の程度区分")]
173    pub weathering_degree_classifications: Vec<WeatheringClassification300>, // v3.00を流用(名称のみ変更)
174    // 変質区分 → 熱水変質の程度区分
175    #[serde(default, rename = "熱水変質の程度区分判定表")]
176    pub hydrothermal_alteration_degree_classification_table: Vec<AlterationClassificationTable210>, // v2.10を流用(名称のみ変更)
177    #[serde(default, rename = "熱水変質の程度区分")]
178    pub hydrothermal_alteration_degree_classifications: Vec<AlterationClassification300>, // v3.00を流用(名称のみ変更)
179    // 破砕度(v4.00で新規追加)
180    #[serde(default, rename = "破砕度判定表")]
181    pub crushing_degree_classification_table: Vec<CrushingDegreeClassificationTable400>,
182    #[serde(default, rename = "破砕度")]
183    pub crushing_degrees: Vec<CrushingDegree400>,
184    // 孔内水平載荷試験 → 孔内載荷試験
185    #[serde(default, rename = "孔内載荷試験")]
186    pub borehole_loading_tests: Vec<BoreholeHorizontalLoadTest210>, // v2.10を流用(名称のみ変更)
187    #[serde(default, rename = "透水試験")]
188    pub permeability_tests: Vec<PermeabilityTest210>, // v2.10を流用
189    #[serde(default, rename = "P波試験")]
190    pub p_wave_tests: Vec<PWaveTest210>, // v2.10を流用
191    #[serde(default, rename = "S波試験")]
192    pub s_wave_tests: Vec<SWaveTest210>, // v2.10を流用
193    #[serde(default, rename = "その他原位置試験")]
194    pub other_in_situ_tests: Vec<OtherInSituTest210>, // v2.10を流用
195    #[serde(default, rename = "試料採取")]
196    pub sample_collections: Vec<SampleCollection210>, // v2.10を流用
197    #[serde(default, rename = "地盤材料の工学的分類")]
198    pub ground_material_classifications: Vec<GroundMaterialClassification210>, // v2.10を流用
199    #[serde(default, rename = "地質時代")]
200    pub geological_ages: Vec<GeologicalAge300>, // v3.00を流用
201    #[serde(default, rename = "地層岩体区分")]
202    pub stratum_rock_classifications: Vec<StratumRockClassification210>, // v2.10を流用
203    #[serde(default, rename = "孔内水位")]
204    pub borehole_water_levels: Vec<BoreholeWaterLevel400>, // v4.00で水位種別コード削除
205    // 掘削工程 → 削孔工程
206    #[serde(default, rename = "削孔工程")]
207    pub drilling_processes: Vec<DrillingProcess400>, // v4.00でフィールド名変更
208    #[serde(default, rename = "孔径孔壁保護")]
209    pub borehole_diameter_protections: Vec<BoreholeDiameterProtection210>, // v2.10を流用
210    // 掘進速度 → 削孔速度
211    #[serde(default, rename = "削孔速度")]
212    pub drilling_speeds: Vec<DrillingSpeed400>, // v4.00でフィールド名変更
213    #[serde(default, rename = "コアチューブビット")]
214    pub core_tube_bits: Vec<CoreTubeBit210>, // v2.10を流用
215    #[serde(default, rename = "給圧条件")]
216    pub pressure_conditions: Vec<PressureCondition210>, // v2.10を流用
217    #[serde(default, rename = "回転数")]
218    pub rotation_speeds: Vec<RotationSpeed210>, // v2.10を流用
219    #[serde(default, rename = "送水条件")]
220    pub water_supply_conditions: Vec<WaterSupplyCondition210>, // v2.10を流用
221    #[serde(default, rename = "断層破砕帯区分")]
222    pub fault_fracture_zone_classifications: Vec<FaultFractureZoneClassification210>, // v2.10を流用
223    #[serde(default, rename = "コア採取率")]
224    pub core_recovery_rates: Vec<CoreRecoveryRate300>, // v3.00を流用
225    #[serde(default, rename = "最大コア長")]
226    pub maximum_core_lengths: Vec<MaximumCoreLength300>, // v3.00を流用
227    #[serde(default, rename = "RQD")]
228    pub rqds: Vec<RQD210>, // v2.10を流用
229    // コア質量(v4.00で新規追加)
230    #[serde(default, rename = "コア質量")]
231    pub core_masses: Vec<CoreMass400>,
232    #[serde(default, rename = "岩級区分判定表")]
233    pub rock_class_classification_table: Vec<RockClassClassificationTable210>, // v2.10を流用
234    #[serde(default, rename = "岩級区分")]
235    pub rock_class_classifications: Vec<RockClassClassification300>, // v3.00を流用
236    #[serde(default, rename = "保孔管")]
237    pub casing_pipes: Vec<CasingPipe210>, // v2.10を流用
238    #[serde(default, rename = "計測機器")]
239    pub measuring_instruments: Vec<MeasuringInstrument210>, // v2.10を流用
240    // 地下水検層試験 → トレーサーによる地下水流動層検層
241    #[serde(default, rename = "トレーサーによる地下水流動層検層")]
242    pub tracer_groundwater_flow_layer_loggings: Vec<TracerGroundwaterFlowLayerLogging400>, // v4.00で名称変更
243    #[serde(default, rename = "トレーサーによる地下水流動層検層詳細データ")]
244    pub tracer_groundwater_flow_layer_logging_details:
245        Vec<TracerGroundwaterFlowLayerLoggingDetail400>, // v4.00で名称変更
246    #[serde(default, rename = "トレーサーによる地下水流動層検層判定結果")]
247    pub tracer_groundwater_flow_layer_logging_results:
248        Vec<TracerGroundwaterFlowLayerLoggingResult400>, // v4.00で名称変更
249    #[serde(default, rename = "備考")]
250    pub remarks: Vec<Remark210>, // v2.10を流用
251    #[serde(default, rename = "フリー情報")]
252    pub free_info: Vec<String>,
253}
254
255// ============================================================================
256// 工学的地質区分名現場土質名 - v4.00で岩石土区分から名称変更
257// 構造はv3.00の岩石土区分と同じ
258// ============================================================================
259
260#[derive(Debug, Serialize, Deserialize)]
261pub struct EngineeringGeologyClassification400 {
262    #[serde(rename = "工学的地質区分名現場土質名_下端深度")]
263    pub depth: Option<String>,
264    #[serde(rename = "工学的地質区分名現場土質名_工学的地質区分名現場土質名")]
265    pub name: Option<String>,
266    #[serde(
267        default,
268        rename = "工学的地質区分名現場土質名_工学的地質区分名現場土質名記号"
269    )]
270    pub symbol: Option<String>,
271    #[serde(rename = "工学的地質区分名現場土質名_岩石群")]
272    pub rock_groups: Vec<RockGroup400>,
273}
274
275#[derive(Debug, Serialize, Deserialize)]
276pub struct RockGroup400 {
277    #[serde(rename = "工学的地質区分名現場土質名_岩石群コード")]
278    pub rock_group_code: Option<String>,
279    #[serde(rename = "工学的地質区分名現場土質名_岩石土コード")]
280    pub rock_soil_codes: Vec<RockSoilCode400>,
281}
282
283#[derive(Debug, Serialize, Deserialize)]
284pub struct RockSoilCode400 {
285    #[serde(default, rename = "工学的地質区分名現場土質名_岩相")]
286    pub lithofacies: Option<String>,
287    #[serde(default, rename = "工学的地質区分名現場土質名_岩石")]
288    pub rock: Option<String>,
289    #[serde(default, rename = "工学的地質区分名現場土質名_変成岩岩相")]
290    pub metamorphic_rock_lithofacies: Option<String>,
291    #[serde(default, rename = "工学的地質区分名現場土質名_変成岩岩石")]
292    pub metamorphic_rock: Option<String>,
293}
294
295// ============================================================================
296// 標準貫入試験 - v4.00で単位変更(cm → mm)
297// ============================================================================
298
299#[derive(Debug, Serialize, Deserialize)]
300pub struct StandardPenetrationTest400 {
301    #[serde(rename = "標準貫入試験_開始深度")]
302    pub start_depth: Option<String>,
303    // 単位変更: 0-10cm → 0-100mm
304    #[serde(default, rename = "標準貫入試験_0_100打撃回数")]
305    pub hit_count_0_100: Option<String>,
306    #[serde(default, rename = "標準貫入試験_0_100貫入量")]
307    pub penetration_0_100: Option<String>,
308    // 単位変更: 10-20cm → 100-200mm
309    #[serde(default, rename = "標準貫入試験_100_200打撃回数")]
310    pub hit_count_100_200: Option<String>,
311    #[serde(default, rename = "標準貫入試験_100_200貫入量")]
312    pub penetration_100_200: Option<String>,
313    // 単位変更: 20-30cm → 200-300mm
314    #[serde(default, rename = "標準貫入試験_200_300打撃回数")]
315    pub hit_count_200_300: Option<String>,
316    #[serde(default, rename = "標準貫入試験_200_300貫入量")]
317    pub penetration_200_300: Option<String>,
318    #[serde(rename = "標準貫入試験_合計打撃回数")]
319    pub total_hit_count: Option<String>,
320    #[serde(rename = "標準貫入試験_合計貫入量")]
321    pub total_penetration: Option<String>,
322    #[serde(default, rename = "標準貫入試験_備考")]
323    pub remarks: Option<String>,
324}
325
326// ============================================================================
327// 破砕度 - v4.00で新規追加
328// ============================================================================
329
330#[derive(Debug, Serialize, Deserialize)]
331pub struct CrushingDegreeClassificationTable400 {
332    #[serde(default, rename = "破砕度判定表_項目名")]
333    pub item_names: Vec<String>,
334    #[serde(default, rename = "破砕度判定表_判定")]
335    pub judgments: Vec<CrushingDegreeJudgment400>,
336}
337
338#[derive(Debug, Serialize, Deserialize)]
339pub struct CrushingDegreeJudgment400 {
340    #[serde(rename = "破砕度判定表_コード")]
341    pub code: Option<String>,
342    #[serde(rename = "破砕度判定表_記号")]
343    pub symbol: Option<String>,
344    #[serde(default, rename = "破砕度判定表_説明")]
345    pub descriptions: Vec<String>,
346}
347
348#[derive(Debug, Serialize, Deserialize)]
349pub struct CrushingDegree400 {
350    #[serde(rename = "破砕度_上端深度")]
351    pub start_depth: Option<String>,
352    #[serde(rename = "破砕度_下端深度")]
353    pub end_depth: Option<String>,
354    #[serde(default, rename = "破砕度_破砕度")]
355    pub crushing_degree: Option<String>,
356}
357
358// ============================================================================
359// コア質量 - v4.00で新規追加
360// ============================================================================
361
362#[derive(Debug, Serialize, Deserialize)]
363pub struct CoreMass400 {
364    #[serde(rename = "コア質量_下端深度")]
365    pub depth: Option<String>,
366    #[serde(default, rename = "コア質量_コア質量")]
367    pub core_mass: Option<String>,
368}
369
370// ============================================================================
371// 孔内水位 - v4.00で水位種別コード削除、掘削状況→削孔状況
372// ============================================================================
373
374#[derive(Debug, Serialize, Deserialize)]
375pub struct BoreholeWaterLevel400 {
376    #[serde(rename = "孔内水位_測定年月日")]
377    pub measurement_date: Option<String>,
378    #[serde(rename = "孔内水位_削孔状況コード")] // v3.00: 掘削状況コード
379    pub drilling_status_code: Option<String>,
380    #[serde(rename = "孔内水位_削孔状況")] // v3.00: 掘削状況
381    pub drilling_status: Option<String>,
382    #[serde(rename = "孔内水位_孔内水位")]
383    pub water_level: Option<String>,
384    // v4.00で削除: 孔内水位_水位種別コード
385    #[serde(default, rename = "孔内水位_水位種別備考")]
386    pub water_level_type_remarks: Option<String>,
387}
388
389// ============================================================================
390// 削孔工程 - v4.00で掘削工程から名称変更、掘進深度→削孔深度
391// ============================================================================
392
393#[derive(Debug, Serialize, Deserialize)]
394pub struct DrillingProcess400 {
395    #[serde(rename = "削孔工程_開始年月日")] // v3.00: 掘削工程_開始年月日
396    pub start_date: Option<String>,
397    #[serde(rename = "削孔工程_終了年月日")] // v3.00: 掘削工程_終了年月日
398    pub end_date: Option<String>,
399    #[serde(rename = "削孔工程_削孔深度")] // v3.00: 掘削工程_掘進深度
400    pub drilling_depth: Option<String>,
401    #[serde(default, rename = "削孔工程_作業内容")] // v3.00: 掘削工程_作業内容
402    pub work_content: Option<String>,
403}
404
405// ============================================================================
406// 削孔速度 - v4.00で掘進速度から名称変更
407// ============================================================================
408
409#[derive(Debug, Serialize, Deserialize)]
410pub struct DrillingSpeed400 {
411    #[serde(rename = "削孔速度_上端深度")] // v3.00: 掘進速度_上端深度
412    pub start_depth: Option<String>,
413    #[serde(rename = "削孔速度_下端深度")] // v3.00: 掘進速度_下端深度
414    pub end_depth: Option<String>,
415    #[serde(default, rename = "削孔速度_削孔速度")] // v3.00: 掘進速度_掘進速度
416    pub drilling_speed: Option<String>,
417}
418
419// ============================================================================
420// トレーサーによる地下水流動層検層 - v4.00で地下水検層試験から名称変更
421// 掘削深度→削孔深度
422// ============================================================================
423
424#[derive(Debug, Serialize, Deserialize)]
425pub struct TracerGroundwaterFlowLayerLogging400 {
426    #[serde(rename = "トレーサーによる地下水流動層検層_検層番号")]
427    // v3.00: 地下水検層試験_試験番号
428    pub test_number: Option<String>,
429    #[serde(rename = "トレーサーによる地下水流動層検層_上端深度")]
430    pub start_depth: Option<String>,
431    #[serde(rename = "トレーサーによる地下水流動層検層_下端深度")]
432    pub end_depth: Option<String>,
433    #[serde(rename = "トレーサーによる地下水流動層検層_削孔深度")] // v3.00: 掘削深度
434    pub drilling_depth: Option<String>,
435    #[serde(rename = "トレーサーによる地下水流動層検層_孔内水位")]
436    pub borehole_water_level: Option<String>,
437    #[serde(rename = "トレーサーによる地下水流動層検層_検層方法コード")] // v3.00: 試験方法コード
438    pub test_method_code: Option<String>,
439    #[serde(rename = "トレーサーによる地下水流動層検層_電解質溶液濃度")]
440    pub electrolyte_concentration: Option<String>,
441    #[serde(default, rename = "トレーサーによる地下水流動層検層_測定時間")]
442    pub measurement_times: Vec<String>,
443}
444
445#[derive(Debug, Serialize, Deserialize)]
446pub struct TracerGroundwaterFlowLayerLoggingDetail400 {
447    #[serde(rename = "トレーサーによる地下水流動層検層詳細データ_検層番号")] // v3.00: 試験番号
448    pub test_number: Option<String>,
449    #[serde(rename = "トレーサーによる地下水流動層検層詳細データ_測定深度")]
450    pub measurement_depth: Option<String>,
451    #[serde(
452        default,
453        rename = "トレーサーによる地下水流動層検層詳細データ_比抵抗値"
454    )]
455    pub resistivity_values: Vec<String>,
456}
457
458#[derive(Debug, Serialize, Deserialize)]
459pub struct TracerGroundwaterFlowLayerLoggingResult400 {
460    #[serde(rename = "トレーサーによる地下水流動層検層判定結果_上端深度")]
461    pub start_depth: Option<String>,
462    #[serde(rename = "トレーサーによる地下水流動層検層判定結果_下端深度")]
463    pub end_depth: Option<String>,
464    #[serde(rename = "トレーサーによる地下水流動層検層判定結果_地下水流動層検層結果")]
465    pub result: Option<String>,
466}