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