Skip to main content

boring_parser/
boring_structs_200.rs

1use serde::{Deserialize, Serialize};
2
3// v2.10の構造体を流用
4use crate::boring_structs_210::*;
5use crate::types::FreeInfo;
6
7// ============================================================================
8// ルート構造体
9// ============================================================================
10
11#[derive(Debug, Serialize, Deserialize)]
12#[serde(rename = "ボーリング情報")]
13pub struct Boring200 {
14    #[serde(rename = "@DTD_version")]
15    pub dtd_version: Option<String>,
16    #[serde(rename = "標題情報")]
17    pub title: Title200,
18    #[serde(rename = "コア情報")]
19    pub core: Core200,
20}
21
22// ============================================================================
23// 標題情報 - v2.00固有
24// DTD: <!ELEMENT 標題情報 (調査基本情報, 経度緯度情報, ローカル座標?,
25//      調査位置, 発注機関, 調査期間, 調査会社, ボーリング基本情報,
26//      試錐機, エンジン, ハンマー落下用具, N値記録用具, ポンプ, 港湾局指定コード?)>
27// ============================================================================
28
29#[derive(Debug, Serialize, Deserialize)]
30pub struct Title200 {
31    #[serde(rename = "調査基本情報")]
32    pub basic_info: BasicSurvey210,
33    #[serde(rename = "経度緯度情報")]
34    pub longitude_latitude: LngLat210,
35    #[serde(default, rename = "ローカル座標")] // ? (オプション、単数、X/Y/Z形式)
36    pub local_coordinate: Option<LocalCoordinate200>,
37    #[serde(rename = "調査位置")]
38    pub survey_position: SurveyPosition210,
39    #[serde(rename = "発注機関")]
40    pub order_institution: OrderInstitution210,
41    #[serde(rename = "調査期間")]
42    pub survey_period: SurveyPeriod210,
43    #[serde(rename = "調査会社")]
44    pub survey_company: SurveyCompany210,
45    #[serde(rename = "ボーリング基本情報")]
46    pub boring_basic_info: BoringBasicInfo210,
47    #[serde(rename = "試錐機")]
48    pub drilling_machine: DrillingMachine210,
49    #[serde(rename = "エンジン")]
50    pub engine: Engine210,
51    #[serde(rename = "ハンマー落下用具")] // v2.00/v2.01では必須要素
52    pub hammer_drop_tool: HammerDropTool210,
53    #[serde(rename = "N値記録用具")] // v2.00/v2.01では必須要素
54    pub n_value_recorder: NValueRecorder210,
55    #[serde(rename = "ポンプ")]
56    pub pump: Pump210,
57    #[serde(default, rename = "港湾局指定コード")] // ? (オプション) - v2.00固有
58    pub port_authority_code: Option<PortAuthorityCode200>,
59}
60
61// ============================================================================
62// ローカル座標 - v2.00固有 (X/Y/Z座標形式)
63// DTD: <!ELEMENT ローカル座標 (X座標定義, X座標, Y座標定義, Y座標, Z座標定義, Z座標)>
64// v2.01で各フィールドがオプションに変更
65// ============================================================================
66
67#[derive(Debug, Serialize, Deserialize)]
68pub struct LocalCoordinate200 {
69    #[serde(default, rename = "X座標定義")] // v2.00: 必須, v2.01: オプション
70    pub x_definition: Option<String>,
71    #[serde(default, rename = "X座標")] // v2.00: 必須, v2.01: オプション
72    pub x: Option<String>,
73    #[serde(default, rename = "Y座標定義")] // v2.00: 必須, v2.01: オプション
74    pub y_definition: Option<String>,
75    #[serde(default, rename = "Y座標")] // v2.00: 必須, v2.01: オプション
76    pub y: Option<String>,
77    #[serde(default, rename = "Z座標定義")] // v2.00: 必須, v2.01: オプション
78    pub z_definition: Option<String>,
79    #[serde(default, rename = "Z座標")] // v2.00: 必須, v2.01: オプション
80    pub z: Option<String>,
81}
82
83// ============================================================================
84// 港湾局指定コード - v2.00固有 (v2.10で櫓種類に置換)
85// DTD: <!ELEMENT 港湾局指定コード (櫓種類コード, 建設局, 都道府県, 港名, 調査者)>
86// v2.01で各フィールドがオプションに変更
87// ============================================================================
88
89#[derive(Debug, Serialize, Deserialize)]
90pub struct PortAuthorityCode200 {
91    #[serde(default, rename = "櫓種類コード")] // v2.00: 必須, v2.01: オプション
92    pub tower_type_code: Option<String>,
93    #[serde(default, rename = "建設局")] // v2.00: 必須, v2.01: オプション
94    pub construction_bureau: Option<String>,
95    #[serde(default, rename = "都道府県")] // v2.00: 必須, v2.01: オプション
96    pub prefecture: Option<String>,
97    #[serde(default, rename = "港名")] // v2.00: 必須, v2.01: オプション
98    pub port_name: Option<String>,
99    #[serde(default, rename = "調査者")] // v2.00: 必須, v2.01: オプション
100    pub investigator: Option<String>,
101}
102
103// ============================================================================
104// コア情報 - v2.00固有
105// DTD: <!ELEMENT コア情報 (土質岩種区分+, 色調*, 観察記事*, 観察記事枠線*,
106//      標準貫入試験*, ルジオン試験*, ルジオン試験詳細データ*, 相対密度稠度*,
107//      硬軟区分判定表*, 硬軟区分*, コア形状区分判定表*, コア形状区分*,
108//      割れ目区分判定表*, 割れ目区分*, 風化区分判定表*, 風化区分*,
109//      変質区分判定表*, 変質区分*, 孔内水平載荷試験*, 透水試験*,
110//      P波試験*, S波試験*, その他原位置試験*, 試料採取*,
111//      地盤材料の工学的分類*, 地質時代*, 地層岩体区分*, 孔内水位*,
112//      掘削工程*, 孔径孔壁保護*, 掘進速度*, コアチューブビット*,
113//      給圧条件*, 回転数*, 送水条件*, 断層破砕帯区分*,
114//      コア採取率*, 最大コア長*, RQD*, 岩級区分判定表*, 岩級区分*,
115//      保孔管*, 計測機器*, 地下水検層試験*, 地下水検層試験詳細データ*,
116//      地下水検層試験判定結果*, 備考*, フリー情報*)>
117//
118// v2.10との差分:
119// - 標準貫入試験詳細データ が存在しない (v2.10で追加)
120// - LugeonTest200 を使用 (損失水頭補正値フィールドあり)
121// - LugeonTestDetail200 を使用 (注入圧力、v2.10では有効圧力)
122// - GroundwaterLoggingTest200 を使用 (測定時間が単一String)
123// ============================================================================
124
125#[derive(Debug, Serialize, Deserialize)]
126pub struct Core200 {
127    #[serde(rename = "土質岩種区分")] // + (1回以上)
128    pub soil_rock_classifications: Vec<SoilRockClassification210>,
129    #[serde(default, rename = "色調")]
130    pub colors: Vec<Color210>,
131    #[serde(default, rename = "観察記事")]
132    pub observational_articles: Vec<ObservationalArticle210>,
133    #[serde(default, rename = "観察記事枠線")]
134    pub observational_article_frames: Vec<ObservationalArticleFrame210>,
135    #[serde(default, rename = "標準貫入試験")]
136    pub standard_penetration_tests: Vec<StandardPenetrationTest210>,
137    // NOTE: 標準貫入試験詳細データ は v2.00には存在しない (v2.10で追加)
138    #[serde(default, rename = "ルジオン試験")]
139    pub lugeon_tests: Vec<LugeonTest200>, // v2.00固有
140    #[serde(default, rename = "ルジオン試験詳細データ")]
141    pub lugeon_test_details: Vec<LugeonTestDetail200>, // v2.00固有
142    #[serde(default, rename = "相対密度稠度")]
143    pub relative_density_consistency: Vec<RelativeDensityConsistency210>,
144    #[serde(default, rename = "硬軟区分判定表")]
145    pub hardness_classification_table: Vec<HardnessClassificationTable210>,
146    #[serde(default, rename = "硬軟区分")]
147    pub hardness_classifications: Vec<HardnessClassification210>,
148    #[serde(default, rename = "コア形状区分判定表")]
149    pub core_shape_classification_table: Vec<CoreShapeClassificationTable210>,
150    #[serde(default, rename = "コア形状区分")]
151    pub core_shape_classifications: Vec<CoreShapeClassification210>,
152    #[serde(default, rename = "割れ目区分判定表")]
153    pub fracture_classification_table: Vec<FractureClassificationTable210>,
154    #[serde(default, rename = "割れ目区分")]
155    pub fracture_classifications: Vec<FractureClassification210>,
156    #[serde(default, rename = "風化区分判定表")]
157    pub weathering_classification_table: Vec<WeatheringClassificationTable210>,
158    #[serde(default, rename = "風化区分")]
159    pub weathering_classifications: Vec<WeatheringClassification210>,
160    #[serde(default, rename = "変質区分判定表")]
161    pub alteration_classification_table: Vec<AlterationClassificationTable210>,
162    #[serde(default, rename = "変質区分")]
163    pub alteration_classifications: Vec<AlterationClassification210>,
164    #[serde(default, rename = "孔内水平載荷試験")]
165    pub borehole_horizontal_load_tests: Vec<BoreholeHorizontalLoadTest210>,
166    #[serde(default, rename = "透水試験")]
167    pub permeability_tests: Vec<PermeabilityTest210>,
168    #[serde(default, rename = "P波試験")]
169    pub p_wave_tests: Vec<PWaveTest210>,
170    #[serde(default, rename = "S波試験")]
171    pub s_wave_tests: Vec<SWaveTest210>,
172    #[serde(default, rename = "その他原位置試験")]
173    pub other_in_situ_tests: Vec<OtherInSituTest210>,
174    #[serde(default, rename = "試料採取")]
175    pub sample_collections: Vec<SampleCollection210>,
176    #[serde(default, rename = "地盤材料の工学的分類")]
177    pub ground_material_classifications: Vec<GroundMaterialClassification210>,
178    #[serde(default, rename = "地質時代")]
179    pub geological_ages: Vec<GeologicalAge210>,
180    #[serde(default, rename = "地層岩体区分")]
181    pub stratum_rock_classifications: Vec<StratumRockClassification210>,
182    #[serde(default, rename = "孔内水位")]
183    pub borehole_water_levels: Vec<BoreholeWaterLevel210>,
184    #[serde(default, rename = "掘削工程")]
185    pub drilling_processes: Vec<DrillingProcess210>,
186    #[serde(default, rename = "孔径孔壁保護")]
187    pub borehole_diameter_protections: Vec<BoreholeDiameterProtection210>,
188    #[serde(default, rename = "掘進速度")]
189    pub drilling_speeds: Vec<DrillingSpeed210>,
190    #[serde(default, rename = "コアチューブビット")]
191    pub core_tube_bits: Vec<CoreTubeBit210>,
192    #[serde(default, rename = "給圧条件")]
193    pub pressure_conditions: Vec<PressureCondition210>,
194    #[serde(default, rename = "回転数")]
195    pub rotation_speeds: Vec<RotationSpeed210>,
196    #[serde(default, rename = "送水条件")]
197    pub water_supply_conditions: Vec<WaterSupplyCondition210>,
198    #[serde(default, rename = "断層破砕帯区分")]
199    pub fault_fracture_zone_classifications: Vec<FaultFractureZoneClassification210>,
200    #[serde(default, rename = "コア採取率")]
201    pub core_recovery_rates: Vec<CoreRecoveryRate210>,
202    #[serde(default, rename = "最大コア長")]
203    pub maximum_core_lengths: Vec<MaximumCoreLength210>,
204    #[serde(default, rename = "RQD")]
205    pub rqds: Vec<RQD210>,
206    #[serde(default, rename = "岩級区分判定表")]
207    pub rock_class_classification_table: Vec<RockClassClassificationTable210>,
208    #[serde(default, rename = "岩級区分")]
209    pub rock_class_classifications: Vec<RockClassClassification210>,
210    #[serde(default, rename = "保孔管")]
211    pub casing_pipes: Vec<CasingPipe210>,
212    #[serde(default, rename = "計測機器")]
213    pub measuring_instruments: Vec<MeasuringInstrument210>,
214    #[serde(default, rename = "地下水検層試験")]
215    pub groundwater_logging_tests: Vec<GroundwaterLoggingTest200>, // v2.00固有
216    #[serde(default, rename = "地下水検層試験詳細データ")]
217    pub groundwater_logging_test_details: Vec<GroundwaterLoggingTestDetail210>,
218    #[serde(default, rename = "地下水検層試験判定結果")]
219    pub groundwater_logging_test_results: Vec<GroundwaterLoggingTestResult210>,
220    #[serde(default, rename = "備考")]
221    pub remarks: Vec<Remark210>,
222    #[serde(default, rename = "フリー情報")]
223    pub free_info: Vec<FreeInfo>,
224}
225
226// ============================================================================
227// ルジオン試験 - v2.00固有 (損失水頭補正値フィールドが存在)
228// DTD: <!ELEMENT ルジオン試験 (ルジオン試験_試験番号, ルジオン試験_上端深度,
229//      ルジオン試験_下端深度, ルジオン試験_圧力管理方法コード, ルジオン試験_圧力管理方法?,
230//      ルジオン試験_損失水頭補正値_注水管?, ルジオン試験_損失水頭補正値_パッカー?,
231//      ルジオン試験_圧力最大スケール, ルジオン試験_注入量最大スケール,
232//      ルジオン試験_圧力開始点, ルジオン試験_注入量開始点,
233//      ルジオン試験_ルジオン値区分, ルジオン試験_ルジオン値, ルジオン試験_限界圧力)>
234// ============================================================================
235
236#[derive(Debug, Serialize, Deserialize)]
237pub struct LugeonTest200 {
238    #[serde(rename = "ルジオン試験_試験番号")]
239    pub test_number: Option<String>,
240    #[serde(rename = "ルジオン試験_上端深度")]
241    pub start_depth: Option<String>,
242    #[serde(rename = "ルジオン試験_下端深度")]
243    pub end_depth: Option<String>,
244    #[serde(rename = "ルジオン試験_圧力管理方法コード")]
245    pub pressure_management_code: Option<String>,
246    #[serde(default, rename = "ルジオン試験_圧力管理方法")] // オプション
247    pub pressure_management: Option<String>,
248    // v2.00固有フィールド (v2.10で削除) - DTD順序で圧力最大スケールの前
249    #[serde(default, rename = "ルジオン試験_損失水頭補正値_注水管")] // オプション
250    pub head_loss_correction_injection_pipe: Option<String>,
251    #[serde(default, rename = "ルジオン試験_損失水頭補正値_パッカー")] // オプション
252    pub head_loss_correction_packer: Option<String>,
253    #[serde(rename = "ルジオン試験_圧力最大スケール")]
254    pub pressure_max_scale: Option<String>,
255    #[serde(rename = "ルジオン試験_注入量最大スケール")]
256    pub injection_max_scale: Option<String>,
257    #[serde(rename = "ルジオン試験_圧力開始点")]
258    pub pressure_start_point: Option<String>,
259    #[serde(rename = "ルジオン試験_注入量開始点")]
260    pub injection_start_point: Option<String>,
261    #[serde(rename = "ルジオン試験_ルジオン値区分")]
262    pub lugeon_value_classification: Option<String>,
263    #[serde(rename = "ルジオン試験_ルジオン値")]
264    pub lugeon_value: Option<String>,
265    #[serde(rename = "ルジオン試験_限界圧力")]
266    pub limit_pressure: Option<String>,
267}
268
269// ============================================================================
270// ルジオン試験詳細データ - v2.00固有 (注入圧力、v2.10では有効圧力)
271// DTD: <!ELEMENT ルジオン試験詳細データ (ルジオン試験詳細データ_試験番号,
272//      ルジオン試験詳細データ_注入圧力, ルジオン試験詳細データ_注入量)>
273// ============================================================================
274
275#[derive(Debug, Serialize, Deserialize)]
276pub struct LugeonTestDetail200 {
277    #[serde(rename = "ルジオン試験詳細データ_試験番号")]
278    pub test_number: Option<String>,
279    #[serde(rename = "ルジオン試験詳細データ_注入圧力")] // v2.10では「有効圧力」
280    pub injection_pressure: Option<String>,
281    #[serde(rename = "ルジオン試験詳細データ_注入量")]
282    pub injection_amount: Option<String>,
283}
284
285// ============================================================================
286// 地下水検層試験 - v2.00固有 (測定時間が単一#PCDATA)
287// DTD: <!ELEMENT 地下水検層試験 (地下水検層試験_試験番号, 地下水検層試験_上端深度,
288//      地下水検層試験_下端深度, 地下水検層試験_掘削深度, 地下水検層試験_孔内水位,
289//      地下水検層試験_試験方法コード, 地下水検層試験_電解質溶液濃度, 地下水検層試験_測定時間)>
290// v2.10では 測定時間* (繰り返し) に変更
291// ============================================================================
292
293#[derive(Debug, Serialize, Deserialize)]
294pub struct GroundwaterLoggingTest200 {
295    #[serde(rename = "地下水検層試験_試験番号")]
296    pub test_number: Option<String>,
297    #[serde(rename = "地下水検層試験_上端深度")]
298    pub start_depth: Option<String>,
299    #[serde(rename = "地下水検層試験_下端深度")]
300    pub end_depth: Option<String>,
301    #[serde(rename = "地下水検層試験_掘削深度")]
302    pub drilling_depth: Option<String>,
303    #[serde(rename = "地下水検層試験_孔内水位")]
304    pub water_level: Option<String>,
305    #[serde(rename = "地下水検層試験_試験方法コード")]
306    pub test_method_code: Option<String>,
307    #[serde(rename = "地下水検層試験_電解質溶液濃度")]
308    pub electrolyte_concentration: Option<String>,
309    #[serde(default, rename = "地下水検層試験_測定時間")] // 単一文字列 (v2.10ではVec<String>)
310    pub measurement_time: Option<String>,
311}