Skip to main content

boring_parser/
boring_structs_210.rs

1use serde::{Deserialize, Serialize};
2
3use crate::classification::{ClassificationInfo, Constituent, RockGroupCode, RockGroupInfo};
4use crate::types::FreeInfo;
5
6// ============================================================================
7// ルート構造体
8// ============================================================================
9
10#[derive(Debug, Serialize, Deserialize)]
11#[serde(rename = "ボーリング情報")]
12pub struct Boring210 {
13    #[serde(rename = "@DTD_version")]
14    pub dtd_version: Option<String>,
15    #[serde(rename = "標題情報")]
16    pub title: Title210,
17    #[serde(rename = "コア情報")]
18    pub core: Core210,
19}
20
21// ============================================================================
22// 標題情報
23// ============================================================================
24
25#[derive(Debug, Serialize, Deserialize)]
26pub struct Title210 {
27    #[serde(rename = "調査基本情報")]
28    pub basic_info: BasicSurvey210,
29    #[serde(rename = "経度緯度情報")]
30    pub longitude_latitude: LngLat210,
31    #[serde(default, rename = "ローカル座標")] // * (0回以上)
32    pub local_coordinates: Vec<LocalCoordinate210>,
33    #[serde(rename = "調査位置")]
34    pub survey_position: SurveyPosition210,
35    #[serde(rename = "発注機関")]
36    pub order_institution: OrderInstitution210,
37    #[serde(rename = "調査期間")]
38    pub survey_period: SurveyPeriod210,
39    #[serde(rename = "調査会社")]
40    pub survey_company: SurveyCompany210,
41    #[serde(rename = "ボーリング基本情報")]
42    pub boring_basic_info: BoringBasicInfo210,
43    #[serde(rename = "試錐機")]
44    pub drilling_machine: DrillingMachine210,
45    #[serde(rename = "エンジン")]
46    pub engine: Engine210,
47    #[serde(default, rename = "ハンマー落下用具")] // ? (オプション)
48    pub hammer_drop_tool: Option<HammerDropTool210>,
49    #[serde(default, rename = "N値記録用具")] // ? (オプション)
50    pub n_value_recorder: Option<NValueRecorder210>,
51    #[serde(rename = "ポンプ")]
52    pub pump: Pump210,
53    #[serde(default, rename = "櫓種類")] // ? (オプション)
54    pub tower_type: Option<TowerType210>,
55}
56
57// ============================================================================
58// 調査基本情報
59// ============================================================================
60
61#[derive(Debug, Serialize, Deserialize)]
62pub struct BasicSurvey210 {
63    #[serde(default, rename = "事業工事名")] // オプション
64    pub project_name: Option<String>,
65    #[serde(rename = "調査名")] // 必須
66    pub survey_name: Option<String>,
67    #[serde(rename = "調査目的")] // 必須
68    pub survey_purpose: Option<String>,
69    #[serde(rename = "調査対象")] // 必須
70    pub survey_target: Option<String>,
71    #[serde(rename = "ボーリング名")] // 必須
72    pub boring_name: Option<String>,
73    #[serde(rename = "ボーリング総数")] // 必須
74    pub total_boring: Option<String>,
75    #[serde(rename = "ボーリング連番")] // 必須
76    pub boring_serial: Option<String>,
77}
78
79// ============================================================================
80// 経度緯度情報
81// ============================================================================
82
83#[derive(Debug, Serialize, Deserialize)]
84pub struct LngLat210 {
85    #[serde(rename = "経度_度")] // 必須
86    pub longitude_degree: Option<String>,
87    #[serde(rename = "経度_分")] // 必須
88    pub longitude_minute: Option<String>,
89    #[serde(rename = "経度_秒")] // 必須
90    pub longitude_second: Option<String>,
91    #[serde(rename = "緯度_度")] // 必須
92    pub latitude_degree: Option<String>,
93    #[serde(rename = "緯度_分")] // 必須
94    pub latitude_minute: Option<String>,
95    #[serde(rename = "緯度_秒")] // 必須
96    pub latitude_second: Option<String>,
97    #[serde(rename = "取得方法コード")] // 必須
98    pub acquisition_method_code: Option<String>,
99    #[serde(default, rename = "取得方法説明")] // オプション(新規)
100    pub acquisition_method_description: Option<String>,
101    #[serde(rename = "読取精度コード")] // 必須
102    pub reading_precision_code: Option<String>,
103    #[serde(rename = "測地系")] // 必須
104    pub geodetic_system: Option<String>,
105}
106
107// ============================================================================
108// ローカル座標(構造が変更)
109// ============================================================================
110
111#[derive(Debug, Serialize, Deserialize)]
112pub struct LocalCoordinate210 {
113    #[serde(rename = "座標定義")] // 必須
114    pub definition: Option<String>,
115    #[serde(rename = "座標")] // 必須
116    pub coordinate: Option<String>,
117}
118
119// ============================================================================
120// 調査位置(v1.10と同じ)
121// ============================================================================
122
123#[derive(Debug, Serialize, Deserialize)]
124pub struct SurveyPosition210 {
125    #[serde(rename = "調査位置住所")] // 必須
126    pub address: Option<String>,
127    #[serde(rename = "コード1次")] // 必須
128    pub code1: Option<String>,
129    #[serde(rename = "コード2次")] // 必須
130    pub code2: Option<String>,
131    #[serde(rename = "コード3次")] // 必須
132    pub code3: Option<String>,
133}
134
135// ============================================================================
136// 発注機関(v1.10と同じ)
137// ============================================================================
138
139#[derive(Debug, Serialize, Deserialize)]
140pub struct OrderInstitution210 {
141    #[serde(rename = "発注機関名称")] // 必須
142    pub name: Option<String>,
143    #[serde(rename = "テクリスコード")] // 必須
144    pub code: Option<String>,
145}
146
147// ============================================================================
148// 調査期間(構造が変更:年月日統合)
149// ============================================================================
150
151#[derive(Debug, Serialize, Deserialize)]
152pub struct SurveyPeriod210 {
153    #[serde(rename = "調査期間_開始年月日")] // 必須
154    pub start_date: Option<String>,
155    #[serde(rename = "調査期間_終了年月日")] // 必須
156    pub end_date: Option<String>,
157}
158
159// ============================================================================
160// 調査会社(v1.10と同じ)
161// ============================================================================
162
163#[derive(Debug, Serialize, Deserialize)]
164pub struct SurveyCompany210 {
165    #[serde(rename = "調査会社_名称")] // 必須
166    pub name: Option<String>,
167    #[serde(rename = "調査会社_TEL")] // 必須
168    pub tel: Option<String>,
169    #[serde(rename = "調査会社_主任技師")] // 必須
170    pub chief_engineer: Option<String>,
171    #[serde(rename = "調査会社_現場代理人")] // 必須
172    pub field_agent: Option<String>,
173    #[serde(rename = "調査会社_コア鑑定者")] // 必須
174    pub core_appraiser: Option<String>,
175    #[serde(rename = "調査会社_ボーリング責任者")] // 必須
176    pub boring_manager: Option<String>,
177}
178
179// ============================================================================
180// ボーリング基本情報
181// DTD: <!ELEMENT ボーリング基本情報 (孔口標高, 総掘進長, 柱状図様式,
182//      掘進角度?, 掘進方向?, 地盤勾配?)>
183// ============================================================================
184
185#[derive(Debug, Serialize, Deserialize)]
186pub struct BoringBasicInfo210 {
187    #[serde(rename = "孔口標高")] // 必須
188    pub surface_elevation: Option<String>,
189    #[serde(rename = "総掘進長")] // 必須
190    pub total_drilling_length: Option<String>,
191    #[serde(rename = "柱状図様式")] // 必須(DTDでは「柱状図様式」)
192    pub columnar_section_style: Option<String>,
193    #[serde(default, rename = "掘進角度")] // オプション
194    pub angle: Option<String>,
195    #[serde(default, rename = "掘進方向")] // オプション
196    pub azimuth: Option<String>,
197    #[serde(default, rename = "地盤勾配")] // オプション(v2.10で変更)
198    pub ground_slope: Option<String>,
199}
200
201// ============================================================================
202// 試錐機
203// DTD: <!ELEMENT 試錐機 (試錐機_名称, 試錐機_能力?, 試錐機_方法?)>
204// ============================================================================
205
206#[derive(Debug, Serialize, Deserialize)]
207pub struct DrillingMachine210 {
208    #[serde(rename = "試錐機_名称")] // 必須
209    pub name: Option<String>,
210    #[serde(default, rename = "試錐機_能力")] // オプション(DTDで変更)
211    pub capacity: Option<String>,
212    #[serde(default, rename = "試錐機_方法")] // オプション(DTDで変更)
213    pub method: Option<String>,
214}
215
216// ============================================================================
217// エンジン
218// DTD: <!ELEMENT エンジン (エンジン_名称, エンジン_能力?, エンジン_単位?)>
219// ============================================================================
220
221#[derive(Debug, Serialize, Deserialize)]
222pub struct Engine210 {
223    #[serde(rename = "エンジン_名称")] // 必須
224    pub name: Option<String>,
225    #[serde(default, rename = "エンジン_能力")] // オプション(DTDで変更)
226    pub capacity: Option<String>,
227    #[serde(default, rename = "エンジン_単位")] // オプション(DTDで変更)
228    pub unit: Option<String>,
229}
230
231// ============================================================================
232// ハンマー落下用具(v1.10と同じ)
233// ============================================================================
234
235#[derive(Debug, Serialize, Deserialize)]
236pub struct HammerDropTool210 {
237    #[serde(rename = "ハンマー落下用具_コード")] // 必須
238    pub code: Option<String>,
239    #[serde(default, rename = "ハンマー落下用具_名称")] // オプション(v2.10で変更)
240    pub name: Option<String>,
241}
242
243// ============================================================================
244// N値記録用具(v1.10と同じ)
245// ============================================================================
246
247#[derive(Debug, Serialize, Deserialize)]
248pub struct NValueRecorder210 {
249    #[serde(rename = "N値記録用具_コード")] // 必須
250    pub code: Option<String>,
251    #[serde(default, rename = "N値記録用具_名称")] // オプション(v2.10で変更)
252    pub name: Option<String>,
253}
254
255// ============================================================================
256// ポンプ
257// DTD: <!ELEMENT ポンプ (ポンプ_名称, ポンプ_能力?, ポンプ_単位?)>
258// ============================================================================
259
260#[derive(Debug, Serialize, Deserialize)]
261pub struct Pump210 {
262    #[serde(rename = "ポンプ_名称")] // 必須
263    pub name: Option<String>,
264    #[serde(default, rename = "ポンプ_能力")] // オプション(DTDで変更)
265    pub capacity: Option<String>,
266    #[serde(default, rename = "ポンプ_単位")] // オプション(DTDで変更)
267    pub unit: Option<String>,
268}
269
270// ============================================================================
271// 櫓種類(新規)
272// DTD: <!ELEMENT 櫓種類 (櫓種類コード?, 櫓種類名称?)>
273// ============================================================================
274
275#[derive(Debug, Serialize, Deserialize)]
276pub struct TowerType210 {
277    #[serde(default, rename = "櫓種類コード")] // オプション
278    pub code: Option<String>,
279    #[serde(default, rename = "櫓種類名称")] // オプション
280    pub name: Option<String>,
281}
282
283// ============================================================================
284// コア情報
285// DTD: <!ELEMENT コア情報 (土質岩種区分+, 色調*, 観察記事*, 観察記事枠線*, 標準貫入試験*,
286//      標準貫入試験詳細データ*, ルジオン試験*, ルジオン試験詳細データ*, 相対密度稠度*,
287//      硬軟区分判定表*, 硬軟区分*, コア形状区分判定表*, コア形状区分*, 割れ目区分判定表*,
288//      割れ目区分*, 風化区分判定表*, 風化区分*, 変質区分判定表*, 変質区分*,
289//      孔内水平載荷試験*, 透水試験*, P波試験*, S波試験*, その他原位置試験*, 試料採取*,
290//      地盤材料の工学的分類*, 地質時代*, 地層岩体区分*, 孔内水位*, 掘削工程*,
291//      孔径孔壁保護*, 掘進速度*, コアチューブビット*, 給圧条件*, 回転数*, 送水条件*,
292//      断層破砕帯区分*, コア採取率*, 最大コア長*, RQD*, 岩級区分判定表*, 岩級区分*,
293//      保孔管*, 計測機器*, 地下水検層試験*, 地下水検層試験詳細データ*,
294//      地下水検層試験判定結果*, 備考*, フリー情報*)>
295// ============================================================================
296
297#[derive(Debug, Serialize, Deserialize)]
298pub struct Core210 {
299    #[serde(rename = "土質岩種区分")] // + (1回以上)
300    pub soil_rock_classifications: Vec<SoilRockClassification210>,
301    #[serde(default, rename = "色調")] // * (0回以上)
302    pub colors: Vec<Color210>,
303    #[serde(default, rename = "観察記事")] // * (0回以上)
304    pub observational_articles: Vec<ObservationalArticle210>,
305    #[serde(default, rename = "観察記事枠線")] // * (0回以上)
306    pub observational_article_frames: Vec<ObservationalArticleFrame210>,
307    #[serde(default, rename = "標準貫入試験")] // * (0回以上)
308    pub standard_penetration_tests: Vec<StandardPenetrationTest210>,
309    #[serde(default, rename = "標準貫入試験詳細データ")] // * (0回以上)
310    pub standard_penetration_test_details: Vec<StandardPenetrationTestDetail210>,
311    #[serde(default, rename = "ルジオン試験")] // * (0回以上)
312    pub lugeon_tests: Vec<LugeonTest210>,
313    #[serde(default, rename = "ルジオン試験詳細データ")] // * (0回以上)
314    pub lugeon_test_details: Vec<LugeonTestDetail210>,
315    #[serde(default, rename = "相対密度稠度")] // * (0回以上)
316    pub relative_density_consistency: Vec<RelativeDensityConsistency210>,
317    #[serde(default, rename = "硬軟区分判定表")] // * (0回以上)
318    pub hardness_classification_table: Vec<HardnessClassificationTable210>,
319    #[serde(default, rename = "硬軟区分")] // * (0回以上)
320    pub hardness_classifications: Vec<HardnessClassification210>,
321    #[serde(default, rename = "コア形状区分判定表")] // * (0回以上)
322    pub core_shape_classification_table: Vec<CoreShapeClassificationTable210>,
323    #[serde(default, rename = "コア形状区分")] // * (0回以上)
324    pub core_shape_classifications: Vec<CoreShapeClassification210>,
325    #[serde(default, rename = "割れ目区分判定表")] // * (0回以上)
326    pub fracture_classification_table: Vec<FractureClassificationTable210>,
327    #[serde(default, rename = "割れ目区分")] // * (0回以上)
328    pub fracture_classifications: Vec<FractureClassification210>,
329    #[serde(default, rename = "風化区分判定表")] // * (0回以上)
330    pub weathering_classification_table: Vec<WeatheringClassificationTable210>,
331    #[serde(default, rename = "風化区分")] // * (0回以上)
332    pub weathering_classifications: Vec<WeatheringClassification210>,
333    #[serde(default, rename = "変質区分判定表")] // * (0回以上)
334    pub alteration_classification_table: Vec<AlterationClassificationTable210>,
335    #[serde(default, rename = "変質区分")] // * (0回以上)
336    pub alteration_classifications: Vec<AlterationClassification210>,
337    #[serde(default, rename = "孔内水平載荷試験")] // * (0回以上)
338    pub borehole_horizontal_load_tests: Vec<BoreholeHorizontalLoadTest210>,
339    #[serde(default, rename = "透水試験")] // * (0回以上)
340    pub permeability_tests: Vec<PermeabilityTest210>,
341    #[serde(default, rename = "P波試験")] // * (0回以上)
342    pub p_wave_tests: Vec<PWaveTest210>,
343    #[serde(default, rename = "S波試験")] // * (0回以上)
344    pub s_wave_tests: Vec<SWaveTest210>,
345    #[serde(default, rename = "その他原位置試験")] // * (0回以上)
346    pub other_in_situ_tests: Vec<OtherInSituTest210>,
347    #[serde(default, rename = "試料採取")] // * (0回以上)
348    pub sample_collections: Vec<SampleCollection210>,
349    #[serde(default, rename = "地盤材料の工学的分類")] // * (0回以上)
350    pub ground_material_classifications: Vec<GroundMaterialClassification210>,
351    #[serde(default, rename = "地質時代")] // * (0回以上)
352    pub geological_ages: Vec<GeologicalAge210>,
353    #[serde(default, rename = "地層岩体区分")] // * (0回以上)
354    pub stratum_rock_classifications: Vec<StratumRockClassification210>,
355    #[serde(default, rename = "孔内水位")] // * (0回以上)
356    pub borehole_water_levels: Vec<BoreholeWaterLevel210>,
357    #[serde(default, rename = "掘削工程")] // * (0回以上)
358    pub drilling_processes: Vec<DrillingProcess210>,
359    #[serde(default, rename = "孔径孔壁保護")] // * (0回以上)
360    pub borehole_diameter_protections: Vec<BoreholeDiameterProtection210>,
361    #[serde(default, rename = "掘進速度")] // * (0回以上)
362    pub drilling_speeds: Vec<DrillingSpeed210>,
363    #[serde(default, rename = "コアチューブビット")] // * (0回以上)
364    pub core_tube_bits: Vec<CoreTubeBit210>,
365    #[serde(default, rename = "給圧条件")] // * (0回以上)
366    pub pressure_conditions: Vec<PressureCondition210>,
367    #[serde(default, rename = "回転数")] // * (0回以上)
368    pub rotation_speeds: Vec<RotationSpeed210>,
369    #[serde(default, rename = "送水条件")] // * (0回以上)
370    pub water_supply_conditions: Vec<WaterSupplyCondition210>,
371    #[serde(default, rename = "断層破砕帯区分")] // * (0回以上)
372    pub fault_fracture_zone_classifications: Vec<FaultFractureZoneClassification210>,
373    #[serde(default, rename = "コア採取率")] // * (0回以上)
374    pub core_recovery_rates: Vec<CoreRecoveryRate210>,
375    #[serde(default, rename = "最大コア長")] // * (0回以上)
376    pub maximum_core_lengths: Vec<MaximumCoreLength210>,
377    #[serde(default, rename = "RQD")] // * (0回以上)
378    pub rqds: Vec<RQD210>,
379    #[serde(default, rename = "岩級区分判定表")] // * (0回以上)
380    pub rock_class_classification_table: Vec<RockClassClassificationTable210>,
381    #[serde(default, rename = "岩級区分")] // * (0回以上)
382    pub rock_class_classifications: Vec<RockClassClassification210>,
383    #[serde(default, rename = "保孔管")] // * (0回以上)
384    pub casing_pipes: Vec<CasingPipe210>,
385    #[serde(default, rename = "計測機器")] // * (0回以上)
386    pub measuring_instruments: Vec<MeasuringInstrument210>,
387    #[serde(default, rename = "地下水検層試験")] // * (0回以上)
388    pub groundwater_logging_tests: Vec<GroundwaterLoggingTest210>,
389    #[serde(default, rename = "地下水検層試験詳細データ")] // * (0回以上)
390    pub groundwater_logging_test_details: Vec<GroundwaterLoggingTestDetail210>,
391    #[serde(default, rename = "地下水検層試験判定結果")] // * (0回以上)
392    pub groundwater_logging_test_results: Vec<GroundwaterLoggingTestResult210>,
393    #[serde(default, rename = "備考")] // * (0回以上)
394    pub remarks: Vec<Remark210>,
395    #[serde(default, rename = "フリー情報")] // * (0回以上)
396    pub free_info: Vec<FreeInfo>,
397}
398
399// ============================================================================
400// 土質岩種区分(地質区分から名称変更)
401// DTD: <!ELEMENT 土質岩種区分 (土質岩種区分_下端深度, 土質岩種区分_土質岩種区分1,
402//      土質岩種区分_土質岩種記号1?, 土質岩種区分_分類コード1,
403//      土質岩種区分_土質岩種区分2?, 土質岩種区分_土質岩種記号2?, 土質岩種区分_分類コード2?)>
404// ============================================================================
405
406#[derive(Debug, Serialize, Deserialize)]
407pub struct SoilRockClassification210 {
408    #[serde(rename = "土質岩種区分_下端深度")] // 必須
409    pub depth: Option<String>,
410    #[serde(rename = "土質岩種区分_土質岩種区分1")] // 必須
411    pub classification1: Option<String>,
412    #[serde(default, rename = "土質岩種区分_土質岩種記号1")] // オプション
413    pub code1: Option<String>,
414    #[serde(rename = "土質岩種区分_分類コード1")] // 必須
415    pub classification_code1: Option<String>,
416    #[serde(default, rename = "土質岩種区分_土質岩種区分2")] // オプション
417    pub classification2: Option<String>,
418    #[serde(default, rename = "土質岩種区分_土質岩種記号2")] // オプション
419    pub code2: Option<String>,
420    #[serde(default, rename = "土質岩種区分_分類コード2")] // オプション
421    pub classification_code2: Option<String>,
422}
423
424// ============================================================================
425// 色調
426// DTD: <!ELEMENT 色調 (色調_下端深度, 色調_色調名)>
427// ============================================================================
428
429#[derive(Debug, Serialize, Deserialize)]
430pub struct Color210 {
431    #[serde(rename = "色調_下端深度")] // 必須
432    pub depth: Option<String>,
433    #[serde(rename = "色調_色調名")] // 必須(DTDでは色調_状態→色調_色調名に変更)
434    pub color_name: Option<String>,
435}
436
437// ============================================================================
438// 観察記事
439// ============================================================================
440
441#[derive(Debug, Serialize, Deserialize)]
442pub struct ObservationalArticle210 {
443    #[serde(rename = "観察記事_上端深度")] // 必須
444    pub start_depth: Option<String>,
445    #[serde(rename = "観察記事_下端深度")] // 必須
446    pub end_depth: Option<String>,
447    #[serde(default, rename = "観察記事_記事")] // オプション(v2.10で変更)
448    pub observation: Option<String>,
449}
450
451// ============================================================================
452// 観察記事枠線
453// ============================================================================
454
455#[derive(Debug, Serialize, Deserialize)]
456pub struct ObservationalArticleFrame210 {
457    #[serde(rename = "観察記事枠線_下端深度")] // 必須
458    pub end_depth: Option<String>,
459}
460
461// ============================================================================
462// 標準貫入試験
463// DTD: <!ELEMENT 標準貫入試験 (標準貫入試験_開始深度, 標準貫入試験_0_10打撃回数?,
464//      標準貫入試験_0_10貫入量?, 標準貫入試験_10_20打撃回数?, 標準貫入試験_10_20貫入量?,
465//      標準貫入試験_20_30打撃回数?, 標準貫入試験_20_30貫入量?, 標準貫入試験_合計打撃回数,
466//      標準貫入試験_合計貫入量, 標準貫入試験_備考?)>
467// ============================================================================
468
469#[derive(Debug, Serialize, Deserialize)]
470pub struct StandardPenetrationTest210 {
471    #[serde(rename = "標準貫入試験_開始深度")] // 必須
472    pub start_depth: Option<String>,
473    #[serde(default, rename = "標準貫入試験_0_10打撃回数")] // オプション
474    pub hits_0_10: Option<String>,
475    #[serde(default, rename = "標準貫入試験_0_10貫入量")] // オプション
476    pub penetration_0_10: Option<String>,
477    #[serde(default, rename = "標準貫入試験_10_20打撃回数")] // オプション
478    pub hits_10_20: Option<String>,
479    #[serde(default, rename = "標準貫入試験_10_20貫入量")] // オプション
480    pub penetration_10_20: Option<String>,
481    #[serde(default, rename = "標準貫入試験_20_30打撃回数")] // オプション
482    pub hits_20_30: Option<String>,
483    #[serde(default, rename = "標準貫入試験_20_30貫入量")] // オプション
484    pub penetration_20_30: Option<String>,
485    #[serde(rename = "標準貫入試験_合計打撃回数")] // 必須
486    pub total_hit_count: Option<String>,
487    #[serde(rename = "標準貫入試験_合計貫入量")] // 必須
488    pub total_penetration: Option<String>,
489    #[serde(default, rename = "標準貫入試験_備考")] // オプション
490    pub remarks: Option<String>,
491}
492
493// ============================================================================
494// 標準貫入試験詳細データ
495// DTD: <!ELEMENT 標準貫入試験詳細データ (標準貫入試験詳細データ_開始深度, 標準貫入試験詳細データ_打撃*)>
496// ============================================================================
497
498#[derive(Debug, Serialize, Deserialize)]
499pub struct StandardPenetrationTestDetail210 {
500    #[serde(rename = "標準貫入試験詳細データ_開始深度")] // 必須
501    pub start_depth: Option<String>,
502    #[serde(default, rename = "標準貫入試験詳細データ_打撃")] // * (0回以上)
503    pub blows: Vec<StandardPenetrationTestBlow210>,
504}
505
506// ============================================================================
507// 標準貫入試験詳細データ_打撃
508// DTD: <!ELEMENT 標準貫入試験詳細データ_打撃 (標準貫入試験詳細データ_打撃回数,
509//      標準貫入試験詳細データ_貫入量, 標準貫入試験詳細データ_累積貫入量, 標準貫入試験詳細データ_備考?)>
510// ============================================================================
511
512#[derive(Debug, Serialize, Deserialize)]
513pub struct StandardPenetrationTestBlow210 {
514    #[serde(rename = "標準貫入試験詳細データ_打撃回数")] // 必須
515    pub blow_count: Option<String>,
516    #[serde(rename = "標準貫入試験詳細データ_貫入量")] // 必須
517    pub penetration: Option<String>,
518    #[serde(rename = "標準貫入試験詳細データ_累積貫入量")] // 必須
519    pub cumulative_penetration: Option<String>,
520    #[serde(default, rename = "標準貫入試験詳細データ_備考")] // オプション
521    pub remarks: Option<String>,
522}
523
524// ============================================================================
525// ルジオン試験
526// DTD: <!ELEMENT ルジオン試験 (ルジオン試験_試験番号, ルジオン試験_上端深度, ルジオン試験_下端深度,
527//      ルジオン試験_圧力管理方法コード, ルジオン試験_圧力管理方法?, ルジオン試験_圧力最大スケール,
528//      ルジオン試験_注入量最大スケール, ルジオン試験_圧力開始点, ルジオン試験_注入量開始点,
529//      ルジオン試験_ルジオン値区分, ルジオン試験_ルジオン値, ルジオン試験_限界圧力)>
530// ============================================================================
531
532#[derive(Debug, Serialize, Deserialize)]
533pub struct LugeonTest210 {
534    #[serde(rename = "ルジオン試験_試験番号")] // 必須
535    pub test_number: Option<String>,
536    #[serde(rename = "ルジオン試験_上端深度")] // 必須
537    pub start_depth: Option<String>,
538    #[serde(rename = "ルジオン試験_下端深度")] // 必須
539    pub end_depth: Option<String>,
540    #[serde(rename = "ルジオン試験_圧力管理方法コード")] // 必須
541    pub pressure_management_code: Option<String>,
542    #[serde(default, rename = "ルジオン試験_圧力管理方法")] // オプション
543    pub pressure_management: Option<String>,
544    #[serde(rename = "ルジオン試験_圧力最大スケール")] // 必須
545    pub pressure_max_scale: Option<String>,
546    #[serde(rename = "ルジオン試験_注入量最大スケール")] // 必須
547    pub injection_max_scale: Option<String>,
548    #[serde(rename = "ルジオン試験_圧力開始点")] // 必須
549    pub pressure_start_point: Option<String>,
550    #[serde(rename = "ルジオン試験_注入量開始点")] // 必須
551    pub injection_start_point: Option<String>,
552    #[serde(rename = "ルジオン試験_ルジオン値区分")] // 必須
553    pub lugeon_value_classification: Option<String>,
554    #[serde(rename = "ルジオン試験_ルジオン値")] // 必須
555    pub lugeon_value: Option<String>,
556    #[serde(rename = "ルジオン試験_限界圧力")] // 必須
557    pub limit_pressure: Option<String>,
558}
559
560// ============================================================================
561// ルジオン試験詳細データ
562// DTD: <!ELEMENT ルジオン試験詳細データ (ルジオン試験詳細データ_試験番号,
563//      ルジオン試験詳細データ_有効圧力, ルジオン試験詳細データ_注入量)>
564// ============================================================================
565
566#[derive(Debug, Serialize, Deserialize)]
567pub struct LugeonTestDetail210 {
568    #[serde(rename = "ルジオン試験詳細データ_試験番号")] // 必須
569    pub test_number: Option<String>,
570    #[serde(rename = "ルジオン試験詳細データ_有効圧力")] // 必須
571    pub effective_pressure: Option<String>,
572    #[serde(rename = "ルジオン試験詳細データ_注入量")] // 必須
573    pub injection_amount: Option<String>,
574}
575
576// ============================================================================
577// 相対密度稠度
578// DTD: <!ELEMENT 相対密度稠度 (相対密度稠度_下端深度, 相対密度_コード?,
579//      相対密度_状態?, 相対稠度_コード?, 相対稠度_状態?)>
580// ============================================================================
581
582#[derive(Debug, Serialize, Deserialize)]
583pub struct RelativeDensityConsistency210 {
584    #[serde(rename = "相対密度稠度_下端深度")] // 必須
585    pub depth: Option<String>,
586    #[serde(default, rename = "相対密度_コード")] // オプション
587    pub relative_density_code: Option<String>,
588    #[serde(default, rename = "相対密度_状態")] // オプション
589    pub relative_density_state: Option<String>,
590    #[serde(default, rename = "相対稠度_コード")] // オプション
591    pub relative_consistency_code: Option<String>,
592    #[serde(default, rename = "相対稠度_状態")] // オプション
593    pub relative_consistency_state: Option<String>,
594}
595
596// ============================================================================
597// 硬軟区分判定表
598// DTD: <!ELEMENT 硬軟区分判定表 (硬軟区分判定表_コード, 硬軟区分判定表_記号,
599//      硬軟区分判定表_区分?, 硬軟区分判定表_説明?)>
600// ============================================================================
601
602#[derive(Debug, Serialize, Deserialize)]
603pub struct HardnessClassificationTable210 {
604    #[serde(rename = "硬軟区分判定表_コード")] // 必須
605    pub code: Option<String>,
606    #[serde(rename = "硬軟区分判定表_記号")] // 必須
607    pub symbol: Option<String>,
608    #[serde(default, rename = "硬軟区分判定表_区分")] // オプション
609    pub classification: Option<String>,
610    #[serde(default, rename = "硬軟区分判定表_説明")] // オプション
611    pub description: Option<String>,
612}
613
614// ============================================================================
615// 硬軟区分
616// DTD: <!ELEMENT 硬軟区分 (硬軟区分_下端深度, 硬軟区分_硬軟区分)>
617// ============================================================================
618
619#[derive(Debug, Serialize, Deserialize)]
620pub struct HardnessClassification210 {
621    #[serde(rename = "硬軟区分_下端深度")] // 必須
622    pub depth: Option<String>,
623    #[serde(rename = "硬軟区分_硬軟区分")] // 必須
624    pub classification: Option<String>,
625}
626
627// ============================================================================
628// コア形状区分判定表
629// DTD: <!ELEMENT コア形状区分判定表 (コア形状区分判定表_コード, コア形状区分判定表_記号,
630//      コア形状区分判定表_区分?, コア形状区分判定表_説明?)>
631// ============================================================================
632
633#[derive(Debug, Serialize, Deserialize)]
634pub struct CoreShapeClassificationTable210 {
635    #[serde(rename = "コア形状区分判定表_コード")] // 必須
636    pub code: Option<String>,
637    #[serde(rename = "コア形状区分判定表_記号")] // 必須
638    pub symbol: Option<String>,
639    #[serde(default, rename = "コア形状区分判定表_区分")] // オプション
640    pub classification: Option<String>,
641    #[serde(default, rename = "コア形状区分判定表_説明")] // オプション
642    pub description: Option<String>,
643}
644
645// ============================================================================
646// コア形状区分
647// DTD: <!ELEMENT コア形状区分 (コア形状区分_下端深度, コア形状区分_コア形状区分)>
648// ============================================================================
649
650#[derive(Debug, Serialize, Deserialize)]
651pub struct CoreShapeClassification210 {
652    #[serde(rename = "コア形状区分_下端深度")] // 必須
653    pub depth: Option<String>,
654    #[serde(rename = "コア形状区分_コア形状区分")] // 必須
655    pub classification: Option<String>,
656}
657
658// ============================================================================
659// 割れ目区分判定表
660// DTD: <!ELEMENT 割れ目区分判定表 (割れ目区分判定表_コード, 割れ目区分判定表_記号,
661//      割れ目区分判定表_区分?, 割れ目区分判定表_説明?)>
662// ============================================================================
663
664#[derive(Debug, Serialize, Deserialize)]
665pub struct FractureClassificationTable210 {
666    #[serde(rename = "割れ目区分判定表_コード")] // 必須
667    pub code: Option<String>,
668    #[serde(rename = "割れ目区分判定表_記号")] // 必須
669    pub symbol: Option<String>,
670    #[serde(default, rename = "割れ目区分判定表_区分")] // オプション
671    pub classification: Option<String>,
672    #[serde(default, rename = "割れ目区分判定表_説明")] // オプション
673    pub description: Option<String>,
674}
675
676// ============================================================================
677// 割れ目区分
678// DTD: <!ELEMENT 割れ目区分 (割れ目区分_下端深度, 割れ目区分_割れ目区分)>
679// ============================================================================
680
681#[derive(Debug, Serialize, Deserialize)]
682pub struct FractureClassification210 {
683    #[serde(rename = "割れ目区分_下端深度")] // 必須
684    pub depth: Option<String>,
685    #[serde(rename = "割れ目区分_割れ目区分")] // 必須
686    pub classification: Option<String>,
687}
688
689// ============================================================================
690// 風化区分判定表
691// DTD: <!ELEMENT 風化区分判定表 (風化区分判定表_コード, 風化区分判定表_記号,
692//      風化区分判定表_区分?, 風化区分判定表_説明?)>
693// ============================================================================
694
695#[derive(Debug, Serialize, Deserialize)]
696pub struct WeatheringClassificationTable210 {
697    #[serde(rename = "風化区分判定表_コード")] // 必須
698    pub code: Option<String>,
699    #[serde(rename = "風化区分判定表_記号")] // 必須
700    pub symbol: Option<String>,
701    #[serde(default, rename = "風化区分判定表_区分")] // オプション
702    pub classification: Option<String>,
703    #[serde(default, rename = "風化区分判定表_説明")] // オプション
704    pub description: Option<String>,
705}
706
707// ============================================================================
708// 風化区分
709// DTD: <!ELEMENT 風化区分 (風化区分_下端深度, 風化区分_風化区分)>
710// ============================================================================
711
712#[derive(Debug, Serialize, Deserialize)]
713pub struct WeatheringClassification210 {
714    #[serde(rename = "風化区分_下端深度")] // 必須
715    pub depth: Option<String>,
716    #[serde(rename = "風化区分_風化区分")] // 必須
717    pub classification: Option<String>,
718}
719
720// ============================================================================
721// 変質区分判定表
722// DTD: <!ELEMENT 変質区分判定表 (変質区分判定表_コード, 変質区分判定表_記号,
723//      変質区分判定表_区分?, 変質区分判定表_説明?)>
724// ============================================================================
725
726#[derive(Debug, Serialize, Deserialize)]
727pub struct AlterationClassificationTable210 {
728    #[serde(rename = "変質区分判定表_コード")] // 必須
729    pub code: Option<String>,
730    #[serde(rename = "変質区分判定表_記号")] // 必須
731    pub symbol: Option<String>,
732    #[serde(default, rename = "変質区分判定表_区分")] // オプション
733    pub classification: Option<String>,
734    #[serde(default, rename = "変質区分判定表_説明")] // オプション
735    pub description: Option<String>,
736}
737
738// ============================================================================
739// 変質区分
740// DTD: <!ELEMENT 変質区分 (変質区分_下端深度, 変質区分_変質区分)>
741// ============================================================================
742
743#[derive(Debug, Serialize, Deserialize)]
744pub struct AlterationClassification210 {
745    #[serde(rename = "変質区分_下端深度")] // 必須
746    pub depth: Option<String>,
747    #[serde(rename = "変質区分_変質区分")] // 必須
748    pub classification: Option<String>,
749}
750
751// ============================================================================
752// 孔内水平載荷試験
753// DTD: <!ELEMENT 孔内水平載荷試験 (孔内水平載荷試験_試験深度, 孔内水平載荷試験_試験方法コード,
754//      孔内水平載荷試験_試験方法?, 孔内水平載荷試験_載荷パターン?, 孔内水平載荷試験_初期圧,
755//      孔内水平載荷試験_降伏圧, 孔内水平載荷試験_変形係数, 孔内水平載荷試験_割線弾性係数?,
756//      孔内水平載荷試験_接線弾性係数?)>
757// ============================================================================
758
759#[derive(Debug, Serialize, Deserialize)]
760pub struct BoreholeHorizontalLoadTest210 {
761    #[serde(rename = "孔内水平載荷試験_試験深度")] // 必須
762    pub test_depth: Option<String>,
763    #[serde(rename = "孔内水平載荷試験_試験方法コード")] // 必須
764    pub test_method_code: Option<String>,
765    #[serde(default, rename = "孔内水平載荷試験_試験方法")] // オプション
766    pub test_method: Option<String>,
767    #[serde(default, rename = "孔内水平載荷試験_載荷パターン")] // オプション
768    pub load_pattern: Option<String>,
769    #[serde(rename = "孔内水平載荷試験_初期圧")] // 必須
770    pub initial_pressure: Option<String>,
771    #[serde(rename = "孔内水平載荷試験_降伏圧")] // 必須
772    pub yield_pressure: Option<String>,
773    #[serde(rename = "孔内水平載荷試験_変形係数")] // 必須
774    pub deformation_modulus: Option<String>,
775    #[serde(default, rename = "孔内水平載荷試験_割線弾性係数")] // オプション
776    pub secant_modulus: Option<String>,
777    #[serde(default, rename = "孔内水平載荷試験_接線弾性係数")] // オプション
778    pub tangent_modulus: Option<String>,
779}
780
781// ============================================================================
782// 透水試験
783// DTD: <!ELEMENT 透水試験 (透水試験_上端深度, 透水試験_下端深度, 透水試験_試験コード,
784//      透水試験_試験方法?, 透水試験_透水係数)>
785// ============================================================================
786
787#[derive(Debug, Serialize, Deserialize)]
788pub struct PermeabilityTest210 {
789    #[serde(rename = "透水試験_上端深度")] // 必須
790    pub start_depth: Option<String>,
791    #[serde(rename = "透水試験_下端深度")] // 必須
792    pub end_depth: Option<String>,
793    #[serde(rename = "透水試験_試験コード")] // 必須
794    pub test_code: Option<String>,
795    #[serde(default, rename = "透水試験_試験方法")] // オプション
796    pub test_method: Option<String>,
797    #[serde(rename = "透水試験_透水係数")] // 必須
798    pub permeability_coefficient: Option<String>,
799}
800
801// ============================================================================
802// P波試験
803// DTD: <!ELEMENT P波試験 (P波試験_上端深度, P波試験_下端深度, P波試験_起振方式?, P波試験_速度)>
804// ============================================================================
805
806#[derive(Debug, Serialize, Deserialize)]
807pub struct PWaveTest210 {
808    #[serde(rename = "P波試験_上端深度")] // 必須
809    pub start_depth: Option<String>,
810    #[serde(rename = "P波試験_下端深度")] // 必須
811    pub end_depth: Option<String>,
812    #[serde(default, rename = "P波試験_起振方式")] // オプション
813    pub excitation_method: Option<String>,
814    #[serde(rename = "P波試験_速度")] // 必須
815    pub velocity: Option<String>,
816}
817
818// ============================================================================
819// S波試験
820// DTD: <!ELEMENT S波試験 (S波試験_上端深度, S波試験_下端深度, S波試験_起振方式?, S波試験_速度)>
821// ============================================================================
822
823#[derive(Debug, Serialize, Deserialize)]
824pub struct SWaveTest210 {
825    #[serde(rename = "S波試験_上端深度")] // 必須
826    pub start_depth: Option<String>,
827    #[serde(rename = "S波試験_下端深度")] // 必須
828    pub end_depth: Option<String>,
829    #[serde(default, rename = "S波試験_起振方式")] // オプション
830    pub excitation_method: Option<String>,
831    #[serde(rename = "S波試験_速度")] // 必須
832    pub velocity: Option<String>,
833}
834
835// ============================================================================
836// その他原位置試験
837// DTD: <!ELEMENT その他原位置試験 (その他原位置試験_試験名, その他原位置試験_上端深度,
838//      その他原位置試験_下端深度, その他原位置試験_試験結果)>
839// ============================================================================
840
841#[derive(Debug, Serialize, Deserialize)]
842pub struct OtherInSituTest210 {
843    #[serde(rename = "その他原位置試験_試験名")] // 必須
844    pub test_name: Option<String>,
845    #[serde(rename = "その他原位置試験_上端深度")] // 必須
846    pub start_depth: Option<String>,
847    #[serde(rename = "その他原位置試験_下端深度")] // 必須
848    pub end_depth: Option<String>,
849    #[serde(rename = "その他原位置試験_試験結果")] // 必須
850    pub test_result: Option<String>,
851}
852
853// ============================================================================
854// 試料採取
855// DTD: <!ELEMENT 試料採取 (試料採取_上端深度, 試料採取_下端深度, 試料採取_試料番号,
856//      試料採取_採取方法コード, 試料採取_採取方法?, 試料採取_試験名*)>
857// ============================================================================
858
859#[derive(Debug, Serialize, Deserialize)]
860pub struct SampleCollection210 {
861    #[serde(rename = "試料採取_上端深度")] // 必須
862    pub start_depth: Option<String>,
863    #[serde(rename = "試料採取_下端深度")] // 必須
864    pub end_depth: Option<String>,
865    #[serde(rename = "試料採取_試料番号")] // 必須
866    pub sample_number: Option<String>,
867    #[serde(rename = "試料採取_採取方法コード")] // 必須
868    pub collection_method_code: Option<String>,
869    #[serde(default, rename = "試料採取_採取方法")] // オプション
870    pub collection_method: Option<String>,
871    #[serde(default, rename = "試料採取_試験名")] // * (0回以上)
872    pub test_names: Vec<String>,
873}
874
875// ============================================================================
876// 地盤材料の工学的分類
877// DTD: <!ELEMENT 地盤材料の工学的分類 (地盤分類_下端深度, 地盤分類_工学的分類記号?)>
878// ============================================================================
879
880#[derive(Debug, Serialize, Deserialize)]
881pub struct GroundMaterialClassification210 {
882    #[serde(rename = "地盤分類_下端深度")] // 必須
883    pub depth: Option<String>,
884    #[serde(default, rename = "地盤分類_工学的分類記号")] // オプション
885    pub engineering_classification_symbol: Option<String>,
886}
887
888// ============================================================================
889// 地質時代
890// DTD: <!ELEMENT 地質時代 (地質時代_上端深度, 地質時代_下端深度, 地質時代_コード, 地質時代_時代名?)>
891// ============================================================================
892
893#[derive(Debug, Serialize, Deserialize)]
894pub struct GeologicalAge210 {
895    #[serde(rename = "地質時代_上端深度")] // 必須
896    pub start_depth: Option<String>,
897    #[serde(rename = "地質時代_下端深度")] // 必須
898    pub end_depth: Option<String>,
899    #[serde(rename = "地質時代_コード")] // 必須
900    pub code: Option<String>,
901    #[serde(default, rename = "地質時代_時代名")] // オプション
902    pub age_name: Option<String>,
903}
904
905// ============================================================================
906// 地層岩体区分
907// DTD: <!ELEMENT 地層岩体区分 (地層岩体区分_上端深度, 地層岩体区分_下端深度, 地層岩体区分_地層岩体名?)>
908// ============================================================================
909
910#[derive(Debug, Serialize, Deserialize)]
911pub struct StratumRockClassification210 {
912    #[serde(rename = "地層岩体区分_上端深度")] // 必須
913    pub start_depth: Option<String>,
914    #[serde(rename = "地層岩体区分_下端深度")] // 必須
915    pub end_depth: Option<String>,
916    #[serde(default, rename = "地層岩体区分_地層岩体名")] // オプション
917    pub stratum_rock_name: Option<String>,
918}
919
920// ============================================================================
921// 孔内水位
922// DTD: <!ELEMENT 孔内水位 (孔内水位_測定年月日, 孔内水位_掘削状況コード, 孔内水位_掘削状況?,
923//      孔内水位_孔内水位, 孔内水位_水位種別コード?, 孔内水位_水位種別備考?)>
924// ============================================================================
925
926#[derive(Debug, Serialize, Deserialize)]
927pub struct BoreholeWaterLevel210 {
928    #[serde(rename = "孔内水位_測定年月日")] // 必須
929    pub measurement_date: Option<String>,
930    #[serde(rename = "孔内水位_掘削状況コード")] // 必須
931    pub drilling_status_code: Option<String>,
932    #[serde(default, rename = "孔内水位_掘削状況")] // オプション
933    pub drilling_status: Option<String>,
934    #[serde(rename = "孔内水位_孔内水位")] // 必須
935    pub water_level: Option<String>,
936    #[serde(default, rename = "孔内水位_水位種別コード")] // オプション
937    pub water_level_type_code: Option<String>,
938    #[serde(default, rename = "孔内水位_水位種別備考")] // オプション
939    pub water_level_type_remarks: Option<String>,
940}
941
942// ============================================================================
943// 掘削工程
944// DTD: <!ELEMENT 掘削工程 (掘削工程_測定年月日, 掘削工程_掘進深度, 掘削工程_ケーシング下端深度?)>
945// ============================================================================
946
947#[derive(Debug, Serialize, Deserialize)]
948pub struct DrillingProcess210 {
949    #[serde(rename = "掘削工程_測定年月日")] // 必須
950    pub measurement_date: Option<String>,
951    #[serde(rename = "掘削工程_掘進深度")] // 必須
952    pub drilling_depth: Option<String>,
953    #[serde(default, rename = "掘削工程_ケーシング下端深度")] // オプション
954    pub casing_bottom_depth: Option<String>,
955}
956
957// ============================================================================
958// 孔径孔壁保護
959// DTD: <!ELEMENT 孔径孔壁保護 (孔径孔壁保護_下端深度, 孔径孔壁保護_孔径,
960//      孔径孔壁保護_孔壁保護コード?, 孔径孔壁保護_孔壁保護方法?, 孔径孔壁保護_孔壁保護実施理由?)>
961// ============================================================================
962
963#[derive(Debug, Serialize, Deserialize)]
964pub struct BoreholeDiameterProtection210 {
965    #[serde(rename = "孔径孔壁保護_下端深度")] // 必須
966    pub depth: Option<String>,
967    #[serde(rename = "孔径孔壁保護_孔径")] // 必須
968    pub diameter: Option<String>,
969    #[serde(default, rename = "孔径孔壁保護_孔壁保護コード")] // オプション
970    pub wall_protection_code: Option<String>,
971    #[serde(default, rename = "孔径孔壁保護_孔壁保護方法")] // オプション
972    pub wall_protection_method: Option<String>,
973    #[serde(default, rename = "孔径孔壁保護_孔壁保護実施理由")] // オプション
974    pub wall_protection_reason: Option<String>,
975}
976
977// ============================================================================
978// 掘進速度
979// DTD: <!ELEMENT 掘進速度 (掘進速度_下端深度, 掘進速度_掘進速度)>
980// ============================================================================
981
982#[derive(Debug, Serialize, Deserialize)]
983pub struct DrillingSpeed210 {
984    #[serde(rename = "掘進速度_下端深度")] // 必須
985    pub depth: Option<String>,
986    #[serde(rename = "掘進速度_掘進速度")] // 必須
987    pub speed: Option<String>,
988}
989
990// ============================================================================
991// コアチューブビット
992// DTD: <!ELEMENT コアチューブビット (コアチューブビット_下端深度,
993//      コアチューブビット_コアチューブ名?, コアチューブビット_ビット名?)>
994// ============================================================================
995
996#[derive(Debug, Serialize, Deserialize)]
997pub struct CoreTubeBit210 {
998    #[serde(rename = "コアチューブビット_下端深度")] // 必須
999    pub depth: Option<String>,
1000    #[serde(default, rename = "コアチューブビット_コアチューブ名")] // オプション
1001    pub core_tube_name: Option<String>,
1002    #[serde(default, rename = "コアチューブビット_ビット名")] // オプション
1003    pub bit_name: Option<String>,
1004}
1005
1006// ============================================================================
1007// 給圧条件
1008// DTD: <!ELEMENT 給圧条件 (給圧条件_下端深度, 給圧条件_給圧)>
1009// ============================================================================
1010
1011#[derive(Debug, Serialize, Deserialize)]
1012pub struct PressureCondition210 {
1013    #[serde(rename = "給圧条件_下端深度")] // 必須
1014    pub depth: Option<String>,
1015    #[serde(rename = "給圧条件_給圧")] // 必須
1016    pub pressure: Option<String>,
1017}
1018
1019// ============================================================================
1020// 回転数
1021// DTD: <!ELEMENT 回転数 (回転数_下端深度, 回転数_回転数)>
1022// ============================================================================
1023
1024#[derive(Debug, Serialize, Deserialize)]
1025pub struct RotationSpeed210 {
1026    #[serde(rename = "回転数_下端深度")] // 必須
1027    pub depth: Option<String>,
1028    #[serde(rename = "回転数_回転数")] // 必須
1029    pub rotation_speed: Option<String>,
1030}
1031
1032// ============================================================================
1033// 送水条件
1034// DTD: <!ELEMENT 送水条件 (送水条件_下端深度, 送水条件_送水圧, 送水条件_送水量,
1035//      送水条件_排水量, 送水条件_送水種類コード, 送水条件_送水種類?)>
1036// ============================================================================
1037
1038#[derive(Debug, Serialize, Deserialize)]
1039pub struct WaterSupplyCondition210 {
1040    #[serde(rename = "送水条件_下端深度")] // 必須
1041    pub depth: Option<String>,
1042    #[serde(rename = "送水条件_送水圧")] // 必須
1043    pub water_pressure: Option<String>,
1044    #[serde(rename = "送水条件_送水量")] // 必須
1045    pub water_supply_volume: Option<String>,
1046    #[serde(rename = "送水条件_排水量")] // 必須
1047    pub drainage_volume: Option<String>,
1048    #[serde(rename = "送水条件_送水種類コード")] // 必須
1049    pub water_type_code: Option<String>,
1050    #[serde(default, rename = "送水条件_送水種類")] // オプション
1051    pub water_type: Option<String>,
1052}
1053
1054// ============================================================================
1055// 断層破砕帯区分
1056// DTD: <!ELEMENT 断層破砕帯区分 (断層破砕帯区分_上端深度, 断層破砕帯区分_下端深度,
1057//      断層破砕帯区分_性状コード, 断層破砕帯区分_性状?, 断層破砕帯区分_備考?)>
1058// ============================================================================
1059
1060#[derive(Debug, Serialize, Deserialize)]
1061pub struct FaultFractureZoneClassification210 {
1062    #[serde(rename = "断層破砕帯区分_上端深度")] // 必須
1063    pub start_depth: Option<String>,
1064    #[serde(rename = "断層破砕帯区分_下端深度")] // 必須
1065    pub end_depth: Option<String>,
1066    #[serde(rename = "断層破砕帯区分_性状コード")] // 必須
1067    pub property_code: Option<String>,
1068    #[serde(default, rename = "断層破砕帯区分_性状")] // オプション
1069    pub property: Option<String>,
1070    #[serde(default, rename = "断層破砕帯区分_備考")] // オプション
1071    pub remarks: Option<String>,
1072}
1073
1074// ============================================================================
1075// コア採取率
1076// DTD: <!ELEMENT コア採取率 (コア採取率_下端深度, コア採取率_採取率)>
1077// ============================================================================
1078
1079#[derive(Debug, Serialize, Deserialize)]
1080pub struct CoreRecoveryRate210 {
1081    #[serde(rename = "コア採取率_下端深度")] // 必須
1082    pub depth: Option<String>,
1083    #[serde(rename = "コア採取率_採取率")] // 必須
1084    pub recovery_rate: Option<String>,
1085}
1086
1087// ============================================================================
1088// 最大コア長
1089// DTD: <!ELEMENT 最大コア長 (最大コア長_下端深度, 最大コア長_コア長)>
1090// ============================================================================
1091
1092#[derive(Debug, Serialize, Deserialize)]
1093pub struct MaximumCoreLength210 {
1094    #[serde(rename = "最大コア長_下端深度")] // 必須
1095    pub depth: Option<String>,
1096    #[serde(rename = "最大コア長_コア長")] // 必須
1097    pub core_length: Option<String>,
1098}
1099
1100// ============================================================================
1101// RQD
1102// DTD: <!ELEMENT RQD (RQD_下端深度, RQD_RQD?)>
1103// ============================================================================
1104
1105#[derive(Debug, Serialize, Deserialize)]
1106pub struct RQD210 {
1107    #[serde(rename = "RQD_下端深度")] // 必須
1108    pub depth: Option<String>,
1109    #[serde(default, rename = "RQD_RQD")] // オプション
1110    pub rqd: Option<String>,
1111}
1112
1113// ============================================================================
1114// 岩級区分判定表
1115// DTD: <!ELEMENT 岩級区分判定表 (岩級区分判定表_項目名*, 岩級区分判定表_判定*)>
1116// ============================================================================
1117
1118#[derive(Debug, Serialize, Deserialize)]
1119pub struct RockClassClassificationTable210 {
1120    #[serde(default, rename = "岩級区分判定表_項目名")] // * (0回以上)
1121    pub item_names: Vec<String>,
1122    #[serde(default, rename = "岩級区分判定表_判定")] // * (0回以上)
1123    pub judgments: Vec<RockClassJudgment210>,
1124}
1125
1126// ============================================================================
1127// 岩級区分判定表_判定
1128// DTD: <!ELEMENT 岩級区分判定表_判定 (岩級区分判定表_コード, 岩級区分判定表_記号, 岩級区分判定表_説明*)>
1129// ============================================================================
1130
1131#[derive(Debug, Serialize, Deserialize)]
1132pub struct RockClassJudgment210 {
1133    #[serde(rename = "岩級区分判定表_コード")] // 必須
1134    pub code: Option<String>,
1135    #[serde(rename = "岩級区分判定表_記号")] // 必須
1136    pub symbol: Option<String>,
1137    #[serde(default, rename = "岩級区分判定表_説明")] // * (0回以上)
1138    pub descriptions: Vec<String>,
1139}
1140
1141// ============================================================================
1142// 岩級区分
1143// DTD: <!ELEMENT 岩級区分 (岩級区分_下端深度, 岩級区分_岩級区分)>
1144// ============================================================================
1145
1146#[derive(Debug, Serialize, Deserialize)]
1147pub struct RockClassClassification210 {
1148    #[serde(rename = "岩級区分_下端深度")] // 必須
1149    pub depth: Option<String>,
1150    #[serde(rename = "岩級区分_岩級区分")] // 必須
1151    pub classification: Option<String>,
1152}
1153
1154// ============================================================================
1155// 保孔管
1156// DTD: <!ELEMENT 保孔管 (保孔管_下端深度, 保孔管_種別コード, 保孔管_備考?)>
1157// ============================================================================
1158
1159#[derive(Debug, Serialize, Deserialize)]
1160pub struct CasingPipe210 {
1161    #[serde(rename = "保孔管_下端深度")] // 必須
1162    pub depth: Option<String>,
1163    #[serde(rename = "保孔管_種別コード")] // 必須
1164    pub type_code: Option<String>,
1165    #[serde(default, rename = "保孔管_備考")] // オプション
1166    pub remarks: Option<String>,
1167}
1168
1169// ============================================================================
1170// 計測機器
1171// DTD: <!ELEMENT 計測機器 (計測機器_上端深度, 計測機器_下端深度, 計測機器_機器種別, 計測機器_備考?)>
1172// ============================================================================
1173
1174#[derive(Debug, Serialize, Deserialize)]
1175pub struct MeasuringInstrument210 {
1176    #[serde(rename = "計測機器_上端深度")] // 必須
1177    pub start_depth: Option<String>,
1178    #[serde(rename = "計測機器_下端深度")] // 必須
1179    pub end_depth: Option<String>,
1180    #[serde(rename = "計測機器_機器種別")] // 必須
1181    pub instrument_type: Option<String>,
1182    #[serde(default, rename = "計測機器_備考")] // オプション
1183    pub remarks: Option<String>,
1184}
1185
1186// ============================================================================
1187// 地下水検層試験
1188// DTD: <!ELEMENT 地下水検層試験 (地下水検層試験_試験番号, 地下水検層試験_上端深度,
1189//      地下水検層試験_下端深度, 地下水検層試験_掘削深度, 地下水検層試験_孔内水位,
1190//      地下水検層試験_試験方法コード, 地下水検層試験_電解質溶液濃度, 地下水検層試験_測定時間*)>
1191// ============================================================================
1192
1193#[derive(Debug, Serialize, Deserialize)]
1194pub struct GroundwaterLoggingTest210 {
1195    #[serde(rename = "地下水検層試験_試験番号")] // 必須
1196    pub test_number: Option<String>,
1197    #[serde(rename = "地下水検層試験_上端深度")] // 必須
1198    pub start_depth: Option<String>,
1199    #[serde(rename = "地下水検層試験_下端深度")] // 必須
1200    pub end_depth: Option<String>,
1201    #[serde(rename = "地下水検層試験_掘削深度")] // 必須
1202    pub drilling_depth: Option<String>,
1203    #[serde(rename = "地下水検層試験_孔内水位")] // 必須
1204    pub water_level: Option<String>,
1205    #[serde(rename = "地下水検層試験_試験方法コード")] // 必須
1206    pub test_method_code: Option<String>,
1207    #[serde(rename = "地下水検層試験_電解質溶液濃度")] // 必須
1208    pub electrolyte_concentration: Option<String>,
1209    #[serde(default, rename = "地下水検層試験_測定時間")] // * (0回以上)
1210    pub measurement_times: Vec<String>,
1211}
1212
1213// ============================================================================
1214// 地下水検層試験詳細データ
1215// DTD: <!ELEMENT 地下水検層試験詳細データ (地下水検層試験詳細データ_試験番号,
1216//      地下水検層試験詳細データ_測定深度, 地下水検層試験詳細データ_比抵抗値*)>
1217// ============================================================================
1218
1219#[derive(Debug, Serialize, Deserialize)]
1220pub struct GroundwaterLoggingTestDetail210 {
1221    #[serde(rename = "地下水検層試験詳細データ_試験番号")] // 必須
1222    pub test_number: Option<String>,
1223    #[serde(rename = "地下水検層試験詳細データ_測定深度")] // 必須
1224    pub measurement_depth: Option<String>,
1225    #[serde(default, rename = "地下水検層試験詳細データ_比抵抗値")] // * (0回以上)
1226    pub resistivity_values: Vec<String>,
1227}
1228
1229// ============================================================================
1230// 地下水検層試験判定結果
1231// DTD: <!ELEMENT 地下水検層試験判定結果 (地下水検層試験判定結果_上端深度,
1232//      地下水検層試験判定結果_下端深度, 地下水検層試験判定結果_地下水検層結果)>
1233// ============================================================================
1234
1235#[derive(Debug, Serialize, Deserialize)]
1236pub struct GroundwaterLoggingTestResult210 {
1237    #[serde(rename = "地下水検層試験判定結果_上端深度")] // 必須
1238    pub start_depth: Option<String>,
1239    #[serde(rename = "地下水検層試験判定結果_下端深度")] // 必須
1240    pub end_depth: Option<String>,
1241    #[serde(rename = "地下水検層試験判定結果_地下水検層結果")] // 必須
1242    pub result: Option<String>,
1243}
1244
1245// ============================================================================
1246// 備考
1247// DTD: <!ELEMENT 備考 (備考_タイトル, 備考_上端深度, 備考_下端深度, 備考_備考内容)>
1248// ============================================================================
1249
1250#[derive(Debug, Serialize, Deserialize)]
1251pub struct Remark210 {
1252    #[serde(rename = "備考_タイトル")] // 必須
1253    pub title: Option<String>,
1254    #[serde(rename = "備考_上端深度")] // 必須
1255    pub start_depth: Option<String>,
1256    #[serde(rename = "備考_下端深度")] // 必須
1257    pub end_depth: Option<String>,
1258    #[serde(rename = "備考_備考内容")] // 必須
1259    pub content: Option<String>,
1260}
1261
1262// ============================================================================
1263// ClassificationInfo trait implementation
1264// ============================================================================
1265
1266impl ClassificationInfo for SoilRockClassification210 {
1267    fn rock_groups(&self) -> Vec<RockGroupInfo> {
1268        let mut constituents = Vec::new();
1269
1270        if let Some(name) = &self.classification1
1271            && !name.is_empty()
1272        {
1273            constituents.push(Constituent::Named {
1274                name: name.clone(),
1275                symbol: self.code1.clone(),
1276            });
1277        }
1278
1279        if let Some(name) = &self.classification2
1280            && !name.is_empty()
1281        {
1282            constituents.push(Constituent::Named {
1283                name: name.clone(),
1284                symbol: self.code2.clone(),
1285            });
1286        }
1287
1288        let code = if constituents.len() > 1 {
1289            RockGroupCode::Interbedded
1290        } else {
1291            RockGroupCode::Single
1292        };
1293
1294        vec![RockGroupInfo { code, constituents }]
1295    }
1296}