aixm 0.3.8 → 0.3.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +33 -3
  5. data/README.md +166 -56
  6. data/exe/ckmid +14 -0
  7. data/exe/mkmid +14 -0
  8. data/lib/aixm.rb +16 -6
  9. data/lib/aixm/association.rb +369 -0
  10. data/lib/aixm/classes.rb +43 -0
  11. data/lib/aixm/component/fato.rb +45 -53
  12. data/lib/aixm/component/frequency.rb +11 -12
  13. data/lib/aixm/component/geometry.rb +36 -38
  14. data/lib/aixm/component/geometry/arc.rb +2 -2
  15. data/lib/aixm/component/geometry/border.rb +6 -3
  16. data/lib/aixm/component/geometry/circle.rb +8 -2
  17. data/lib/aixm/component/geometry/point.rb +8 -2
  18. data/lib/aixm/component/helipad.rb +30 -38
  19. data/lib/aixm/component/layer.rb +28 -19
  20. data/lib/aixm/component/lighting.rb +12 -13
  21. data/lib/aixm/component/runway.rb +44 -48
  22. data/lib/aixm/{feature → component}/service.rb +37 -36
  23. data/lib/aixm/component/surface.rb +3 -3
  24. data/lib/aixm/component/timetable.rb +2 -2
  25. data/lib/aixm/component/{vertical_limits.rb → vertical_limit.rb} +12 -6
  26. data/lib/aixm/config.rb +2 -1
  27. data/lib/aixm/document.rb +27 -50
  28. data/lib/aixm/executables.rb +85 -0
  29. data/lib/aixm/feature.rb +13 -3
  30. data/lib/aixm/feature/address.rb +12 -13
  31. data/lib/aixm/feature/airport.rb +103 -128
  32. data/lib/aixm/feature/airspace.rb +44 -17
  33. data/lib/aixm/feature/navigational_aid.rb +7 -9
  34. data/lib/aixm/feature/navigational_aid/designated_point.rb +13 -15
  35. data/lib/aixm/feature/navigational_aid/dme.rb +11 -12
  36. data/lib/aixm/feature/navigational_aid/marker.rb +7 -3
  37. data/lib/aixm/feature/navigational_aid/ndb.rb +7 -3
  38. data/lib/aixm/feature/navigational_aid/tacan.rb +7 -3
  39. data/lib/aixm/feature/navigational_aid/vor.rb +23 -15
  40. data/lib/aixm/feature/obstacle.rb +29 -43
  41. data/lib/aixm/feature/obstacle_group.rb +37 -34
  42. data/lib/aixm/feature/organisation.rb +21 -5
  43. data/lib/aixm/feature/unit.rb +36 -46
  44. data/lib/aixm/memoize.rb +89 -0
  45. data/lib/aixm/object.rb +9 -0
  46. data/lib/aixm/payload_hash.rb +114 -0
  47. data/lib/aixm/refinements.rb +29 -76
  48. data/lib/aixm/shortcuts.rb +5 -42
  49. data/lib/aixm/version.rb +1 -1
  50. data/lib/aixm/xy.rb +1 -1
  51. data/schemas/ofmx/0/OFMX-Features.xsd +152 -20
  52. data/schemas/ofmx/0/OFMX-Snapshot.xsd +0 -5
  53. metadata +107 -156
  54. metadata.gz.sig +2 -0
  55. data/.github/workflows/test.yml +0 -26
  56. data/.gitignore +0 -6
  57. data/.ruby-version +0 -1
  58. data/.yardopts +0 -3
  59. data/Guardfile +0 -8
  60. data/aixm.gemspec +0 -35
  61. data/gems.rb +0 -3
  62. data/lib/aixm/component.rb +0 -6
  63. data/rakefile.rb +0 -36
  64. data/spec/factory.rb +0 -559
  65. data/spec/lib/aixm/a_spec.rb +0 -203
  66. data/spec/lib/aixm/component/fato_spec.rb +0 -267
  67. data/spec/lib/aixm/component/frequency_spec.rb +0 -74
  68. data/spec/lib/aixm/component/geometry/arc_spec.rb +0 -73
  69. data/spec/lib/aixm/component/geometry/border_spec.rb +0 -38
  70. data/spec/lib/aixm/component/geometry/circle_spec.rb +0 -68
  71. data/spec/lib/aixm/component/geometry/point_spec.rb +0 -37
  72. data/spec/lib/aixm/component/geometry_spec.rb +0 -316
  73. data/spec/lib/aixm/component/helipad_spec.rb +0 -193
  74. data/spec/lib/aixm/component/layer_spec.rb +0 -135
  75. data/spec/lib/aixm/component/lighting_spec.rb +0 -94
  76. data/spec/lib/aixm/component/runway_spec.rb +0 -479
  77. data/spec/lib/aixm/component/surface_spec.rb +0 -124
  78. data/spec/lib/aixm/component/timetable_spec.rb +0 -47
  79. data/spec/lib/aixm/component/vertical_limits_spec.rb +0 -94
  80. data/spec/lib/aixm/config_spec.rb +0 -41
  81. data/spec/lib/aixm/d_spec.rb +0 -150
  82. data/spec/lib/aixm/document_spec.rb +0 -1884
  83. data/spec/lib/aixm/errors_spec.rb +0 -14
  84. data/spec/lib/aixm/f_spec.rb +0 -85
  85. data/spec/lib/aixm/feature/address_spec.rb +0 -60
  86. data/spec/lib/aixm/feature/airport_spec.rb +0 -776
  87. data/spec/lib/aixm/feature/airspace_spec.rb +0 -394
  88. data/spec/lib/aixm/feature/navigational_aid/designated_point_spec.rb +0 -103
  89. data/spec/lib/aixm/feature/navigational_aid/dme_spec.rb +0 -98
  90. data/spec/lib/aixm/feature/navigational_aid/marker_spec.rb +0 -85
  91. data/spec/lib/aixm/feature/navigational_aid/ndb_spec.rb +0 -95
  92. data/spec/lib/aixm/feature/navigational_aid/tacan_spec.rb +0 -94
  93. data/spec/lib/aixm/feature/navigational_aid/vor_spec.rb +0 -251
  94. data/spec/lib/aixm/feature/navigational_aid_spec.rb +0 -52
  95. data/spec/lib/aixm/feature/obstacle_group_spec.rb +0 -330
  96. data/spec/lib/aixm/feature/obstacle_spec.rb +0 -284
  97. data/spec/lib/aixm/feature/organisation_spec.rb +0 -83
  98. data/spec/lib/aixm/feature/service_spec.rb +0 -59
  99. data/spec/lib/aixm/feature/unit_spec.rb +0 -238
  100. data/spec/lib/aixm/feature_spec.rb +0 -38
  101. data/spec/lib/aixm/p_spec.rb +0 -189
  102. data/spec/lib/aixm/refinements_spec.rb +0 -430
  103. data/spec/lib/aixm/version_spec.rb +0 -7
  104. data/spec/lib/aixm/w_spec.rb +0 -150
  105. data/spec/lib/aixm/xy_spec.rb +0 -180
  106. data/spec/lib/aixm/z_spec.rb +0 -94
  107. data/spec/macros/marking.rb +0 -12
  108. data/spec/macros/organisation.rb +0 -11
  109. data/spec/macros/remarks.rb +0 -12
  110. data/spec/macros/timetable.rb +0 -11
  111. data/spec/macros/xy.rb +0 -11
  112. data/spec/macros/z_qnh.rb +0 -11
  113. data/spec/sounds/failure.mp3 +0 -0
  114. data/spec/sounds/success.mp3 +0 -0
  115. data/spec/spec_helper.rb +0 -62
@@ -1,203 +0,0 @@
1
- require_relative '../../spec_helper'
2
-
3
- describe AIXM::A do
4
- let :subject_2 do
5
- AIXM.a('0')
6
- end
7
-
8
- let :subject_3 do
9
- AIXM.a(0)
10
- end
11
-
12
- describe :initialize do
13
- it "fails on invalid values" do
14
- _{ AIXM.a('foobar') }.must_raise ArgumentError
15
- end
16
-
17
- it "parses String as angle with precision=2" do
18
- AIXM.a('34L').tap do |h|
19
- _(h.deg).must_equal 340
20
- _(h.precision).must_equal 2
21
- _(h.suffix).must_equal :L
22
- end
23
- end
24
-
25
- it "parses Numeric as angle with precision=3" do
26
- AIXM.a(12).tap do |h|
27
- _(h.deg).must_equal 12
28
- _(h.precision).must_equal 3
29
- _(h.suffix).must_be :nil?
30
- end
31
- end
32
- end
33
-
34
- describe :to_s do
35
- context "precision=2" do
36
- it "rounds and zero-pad deg to length 2 and concats suffix" do
37
- _(AIXM.a('05').to_s).must_equal '05'
38
- _(AIXM.a('05').tap { |a| a.suffix = :L }.to_s).must_equal '05L'
39
- _(AIXM.a('05').tap { |a| a.deg = 0 }.to_s).must_equal '36'
40
- end
41
- end
42
-
43
- context "precition=3" do
44
- it "rounds and zero-pad deg to length 3" do
45
- _(AIXM.a(5).to_s).must_equal '005'
46
- _(AIXM.a(5).tap { |a| a.deg = 0 }.to_s).must_equal '000'
47
- end
48
- end
49
- end
50
-
51
- describe :deg= do
52
- it "fails on invalid values" do
53
- _([:foobar, '1', -1, 361]).wont_be_written_to subject_2, :deg
54
- _([:foobar, '1', -1, 361]).wont_be_written_to subject_3, :deg
55
- end
56
-
57
- context "precision=2" do
58
- it "rounds to 10 degree steps" do
59
- _(subject_2.tap { |s| s.deg = 0 }.deg).must_equal 0
60
- _(subject_2.tap { |s| s.deg = 5 }.deg).must_equal 10
61
- _(subject_2.tap { |s| s.deg = 154 }.deg).must_equal 150
62
- _(subject_2.tap { |s| s.deg = 359 }.deg).must_equal 0
63
- _(subject_2.tap { |s| s.deg = 360 }.deg).must_equal 0
64
- end
65
- end
66
-
67
- context "precision=3" do
68
- it "accepts 1 degree steps" do
69
- _(subject_3.tap { |s| s.deg = 0 }.deg).must_equal 0
70
- _(subject_3.tap { |s| s.deg = 5 }.deg).must_equal 5
71
- _(subject_3.tap { |s| s.deg = 154 }.deg).must_equal 154
72
- _(subject_3.tap { |s| s.deg = 359 }.deg).must_equal 359
73
- _(subject_3.tap { |s| s.deg = 360 }.deg).must_equal 0
74
- end
75
- end
76
- end
77
-
78
- describe :suffix= do
79
- context "precision=2" do
80
- it "fails on invalid values" do
81
- _([123, 'r']).wont_be_written_to subject_2, :suffix
82
- end
83
-
84
- it "accepts nil value" do
85
- _([nil]).must_be_written_to subject_2, :suffix
86
- end
87
-
88
- it "symbolizes valid values" do
89
- _(subject_2.tap { |s| s.suffix = 'Z' }.suffix).must_equal :Z
90
- end
91
- end
92
-
93
- context "precision=3" do
94
- it "always fails" do
95
- _{ subject_3.tap { |s| s.suffix = 'Z' } }.must_raise RuntimeError
96
- end
97
- end
98
- end
99
-
100
- describe :invert do
101
- it "must calculate inverse deg correctly" do
102
- { 0 => 180, 90 => 270, 179 => 359, 180 => 0, 270 => 90, 359 => 179, 360 => 180 }.each do |from, to|
103
- _(AIXM.a(from).invert.deg).must_equal to
104
- end
105
- end
106
-
107
- it "must invert left/right suffix" do
108
- _(AIXM.a('34L').invert.suffix).must_equal :R
109
- end
110
-
111
- it "must leave other suffixes untouched" do
112
- _(AIXM.a('35X').invert.suffix).must_equal :X
113
- end
114
- end
115
-
116
- describe :inverse_of? do
117
- it "must return true for inverse pairs" do
118
- _(AIXM.a('34L').inverse_of?(AIXM.a('16R'))).must_equal true
119
- end
120
-
121
- it "must return false for non-inverse pairs" do
122
- _(AIXM.a('34L').inverse_of?(AIXM.a('12L'))).must_equal false
123
- end
124
- end
125
-
126
- describe :+ do
127
- context "precision=2" do
128
- it "adds degrees as Integer" do
129
- _((subject_2 + 14)).must_equal AIXM.a('01')
130
- _((subject_2 + 16)).must_equal AIXM.a('02')
131
- _((subject_2 + 370)).must_equal AIXM.a('01')
132
- _((AIXM.a('05L') + 20)).must_equal AIXM.a('07L')
133
- end
134
-
135
- it "adds another angle" do
136
- _((AIXM.a('10') + AIXM.a('08'))).must_equal AIXM.a('18')
137
- end
138
- end
139
-
140
- context "precision=3" do
141
- it "adds degrees as Integer" do
142
- _((subject_3 + 15)).must_equal AIXM.a(15)
143
- _((subject_3 + 370)).must_equal AIXM.a(10)
144
- end
145
- end
146
- end
147
-
148
- describe :- do
149
- context "precision=2" do
150
- it "subtracts degrees as Integer" do
151
- _((subject_2 - 14)).must_equal AIXM.a('35')
152
- _((subject_2 - 16)).must_equal AIXM.a('34')
153
- _((AIXM.a('05') - 20)).must_equal AIXM.a('03')
154
- _((AIXM.a('05L') - 20)).must_equal AIXM.a('03L')
155
- end
156
-
157
- it "subtracts another angle" do
158
- _((AIXM.a('10') - AIXM.a('08'))).must_equal AIXM.a('02')
159
- end
160
- end
161
-
162
- context "precision=3" do
163
- it "subtracts degrees as Integer" do
164
- _((subject_3 - 15)).must_equal AIXM.a(345)
165
- _((AIXM.a(55) - 20)).must_equal AIXM.a(35)
166
- end
167
- end
168
- end
169
-
170
- describe :== do
171
- it "recognizes angles with identical deg and suffix as equal" do
172
- _(AIXM.a('34L')).must_equal AIXM.a('34L')
173
- end
174
-
175
- it "recognizes angles with different deg or suffix as unequal" do
176
- _(AIXM.a('34L')).wont_equal AIXM.a('35L')
177
- _(AIXM.a('34L')).wont_equal AIXM.a('34R')
178
- end
179
-
180
- it "recognizes angles with different precision as unequal" do
181
- _(AIXM.a('34')).wont_equal AIXM.a(340)
182
- end
183
-
184
- it "recognizes objects of different class as unequal" do
185
- _(subject_2).wont_equal :oggy
186
- end
187
- end
188
-
189
- describe :hash do
190
- it "returns an integer" do
191
- _(subject_2.hash).must_be_instance_of Integer
192
- end
193
-
194
- it "returns different hashes for different precisions" do
195
- _(subject_2.hash).wont_equal subject_3.hash
196
- end
197
-
198
- it "allows for the use of instances as hash keys" do
199
- dupe = subject_2.dup
200
- _({ subject_2 => true }[dupe]).must_equal true
201
- end
202
- end
203
- end
@@ -1,267 +0,0 @@
1
- require_relative '../../../spec_helper'
2
-
3
- describe AIXM::Component::FATO do
4
- subject do
5
- AIXM::Factory.airport.fatos.first
6
- end
7
-
8
- describe :name= do
9
- it "fails on invalid values" do
10
- _([nil, :foobar, 123]).wont_be_written_to subject, :name
11
- end
12
-
13
- it "upcases and transcodes valid values" do
14
- _(subject.tap { |s| s.name = 'h1' }.name).must_equal 'H1'
15
- end
16
- end
17
-
18
- describe :length= do
19
- it "fails on invalid values" do
20
- _([:foobar, 0, 1, AIXM.d(0, :m)]).wont_be_written_to subject, :length
21
- end
22
-
23
- it "accepts nil value" do
24
- _([nil]).must_be_written_to subject, :length
25
- end
26
- end
27
-
28
- describe :width= do
29
- it "fails on invalid values" do
30
- _([:foobar, 0, 1, AIXM.d(0, :m)]).wont_be_written_to subject, :width
31
- end
32
-
33
- it "accepts nil value" do
34
- _([nil]).must_be_written_to subject, :width
35
- end
36
- end
37
-
38
- describe :marking= do
39
- macro :marking
40
- end
41
-
42
- describe :profile= do
43
- it "accepts nil value" do
44
- _([nil]).must_be_written_to subject, :profile
45
- end
46
-
47
- it "stringifies valid values" do
48
- _(subject.tap { |s| s.profile = 'foobar' }.profile).must_equal 'foobar'
49
- _(subject.tap { |s| s.profile = 123 }.profile).must_equal '123'
50
- end
51
- end
52
-
53
- describe :status= do
54
- it "fails on invalid values" do
55
- _([:foobar, 123]).wont_be_written_to subject, :status
56
- end
57
-
58
- it "accepts nil value" do
59
- _([nil]).must_be_written_to subject, :status
60
- end
61
-
62
- it "looks up valid values" do
63
- _(subject.tap { |s| s.status = :closed }.status).must_equal :closed
64
- _(subject.tap { |s| s.status = :SPOWER }.status).must_equal :secondary_power
65
- end
66
- end
67
-
68
- describe :remarks= do
69
- macro :remarks
70
- end
71
-
72
- describe :xml= do
73
- it "builds correct complete OFMX" do
74
- AIXM.ofmx!
75
- _(subject.to_xml).must_equal <<~END
76
- <Fto>
77
- <FtoUid>
78
- <AhpUid>
79
- <codeId>LFNT</codeId>
80
- </AhpUid>
81
- <txtDesig>H1</txtDesig>
82
- </FtoUid>
83
- <valLen>35</valLen>
84
- <valWid>35</valWid>
85
- <uomDim>M</uomDim>
86
- <codeComposition>CONC</codeComposition>
87
- <codePreparation>PAVED</codePreparation>
88
- <codeCondSfc>FAIR</codeCondSfc>
89
- <valPcnClass>30</valPcnClass>
90
- <codePcnPavementType>F</codePcnPavementType>
91
- <codePcnPavementSubgrade>A</codePcnPavementSubgrade>
92
- <codePcnMaxTirePressure>W</codePcnMaxTirePressure>
93
- <codePcnEvalMethod>U</codePcnEvalMethod>
94
- <txtPcnNote>Cracks near the center</txtPcnNote>
95
- <valSiwlWeight>1500</valSiwlWeight>
96
- <uomSiwlWeight>KG</uomSiwlWeight>
97
- <valSiwlTirePressure>0.5</valSiwlTirePressure>
98
- <uomSiwlTirePressure>MPA</uomSiwlTirePressure>
99
- <valAuwWeight>8</valAuwWeight>
100
- <uomAuwWeight>T</uomAuwWeight>
101
- <txtProfile>Northwest from RWY 12/30</txtProfile>
102
- <txtMarking>Dashed white lines</txtMarking>
103
- <codeSts>OTHER</codeSts>
104
- <txtRmk>Authorizaton by AD operator required</txtRmk>
105
- </Fto>
106
- <Fdn>
107
- <FdnUid>
108
- <FtoUid>
109
- <AhpUid>
110
- <codeId>LFNT</codeId>
111
- </AhpUid>
112
- <txtDesig>H1</txtDesig>
113
- </FtoUid>
114
- <txtDesig>35</txtDesig>
115
- </FdnUid>
116
- <valTrueBrg>355</valTrueBrg>
117
- <valMagBrg>354</valMagBrg>
118
- <txtRmk>Avoid flight over residental area</txtRmk>
119
- </Fdn>
120
- <Fls>
121
- <FlsUid>
122
- <FdnUid>
123
- <FtoUid>
124
- <AhpUid>
125
- <codeId>LFNT</codeId>
126
- </AhpUid>
127
- <txtDesig>H1</txtDesig>
128
- </FtoUid>
129
- <txtDesig>35</txtDesig>
130
- </FdnUid>
131
- <codePsn>AIM</codePsn>
132
- </FlsUid>
133
- <txtDescr>omnidirectional</txtDescr>
134
- <codeIntst>LIM</codeIntst>
135
- <codeColour>GRN</codeColour>
136
- <txtRmk>lighting remarks</txtRmk>
137
- </Fls>
138
- END
139
- end
140
-
141
- it "builds correct minimal OFMX" do
142
- AIXM.ofmx!
143
- %i(length width profile marking status remarks).each { |a| subject.send(:"#{a}=", nil) }
144
- %i(composition preparation condition pcn siwl_weight siwl_tire_pressure auw_weight remarks).each { |a| subject.surface.send(:"#{a}=", nil) }
145
- subject.directions['35'].instance_eval { @lightings.clear }
146
- _(subject.to_xml).must_equal <<~END
147
- <Fto>
148
- <FtoUid>
149
- <AhpUid>
150
- <codeId>LFNT</codeId>
151
- </AhpUid>
152
- <txtDesig>H1</txtDesig>
153
- </FtoUid>
154
- </Fto>
155
- <Fdn>
156
- <FdnUid>
157
- <FtoUid>
158
- <AhpUid>
159
- <codeId>LFNT</codeId>
160
- </AhpUid>
161
- <txtDesig>H1</txtDesig>
162
- </FtoUid>
163
- <txtDesig>35</txtDesig>
164
- </FdnUid>
165
- <valTrueBrg>355</valTrueBrg>
166
- <valMagBrg>354</valMagBrg>
167
- <txtRmk>Avoid flight over residental area</txtRmk>
168
- </Fdn>
169
- END
170
- end
171
-
172
- it "builds OFMX with mid" do
173
- AIXM.ofmx!
174
- AIXM.config.mid_region = 'LF'
175
- _(subject.to_xml).must_match /<FtoUid mid="9753290e-774e-2600-9b16-f7f951e06e9d">/
176
- _(subject.to_xml).must_match /<FdnUid mid="ac550e74-73e2-4feb-4934-d0b4aafccfe6">/
177
- end
178
- end
179
- end
180
-
181
- describe AIXM::Component::FATO::Direction do
182
- subject do
183
- AIXM::Factory.airport.fatos.first.directions['35']
184
- end
185
-
186
- describe :name= do
187
- it "fails on invalid values" do
188
- _([nil, :foobar, 'OGGY']).wont_be_written_to subject, :name
189
- end
190
- end
191
-
192
- describe :geographic_orientation= do
193
- it "fails on invalid values" do
194
- _([:foobar, -1, 10]).wont_be_written_to subject, :geographic_orientation
195
- end
196
- end
197
-
198
- describe :remarks= do
199
- macro :remarks
200
- end
201
-
202
- describe :magnetic_orientation do
203
- it "is calculated correctly" do
204
- subject.geographic_orientation = AIXM.a(16)
205
- _(subject.magnetic_orientation).must_equal AIXM.a(15)
206
- end
207
- end
208
-
209
- describe :xml= do
210
- it "builds correct complete OFMX" do
211
- AIXM.ofmx!
212
- _(subject.to_xml).must_equal <<~END
213
- <Fdn>
214
- <FdnUid>
215
- <FtoUid>
216
- <AhpUid>
217
- <codeId>LFNT</codeId>
218
- </AhpUid>
219
- <txtDesig>H1</txtDesig>
220
- </FtoUid>
221
- <txtDesig>35</txtDesig>
222
- </FdnUid>
223
- <valTrueBrg>355</valTrueBrg>
224
- <valMagBrg>354</valMagBrg>
225
- <txtRmk>Avoid flight over residental area</txtRmk>
226
- </Fdn>
227
- <Fls>
228
- <FlsUid>
229
- <FdnUid>
230
- <FtoUid>
231
- <AhpUid>
232
- <codeId>LFNT</codeId>
233
- </AhpUid>
234
- <txtDesig>H1</txtDesig>
235
- </FtoUid>
236
- <txtDesig>35</txtDesig>
237
- </FdnUid>
238
- <codePsn>AIM</codePsn>
239
- </FlsUid>
240
- <txtDescr>omnidirectional</txtDescr>
241
- <codeIntst>LIM</codeIntst>
242
- <codeColour>GRN</codeColour>
243
- <txtRmk>lighting remarks</txtRmk>
244
- </Fls>
245
- END
246
- end
247
-
248
- it "builds correct minimal OFMX" do
249
- AIXM.ofmx!
250
- %i(geographic_orientation remarks).each { |a| subject.send(:"#{a}=", nil) }
251
- subject.instance_eval { @lightings.clear }
252
- _(subject.to_xml).must_equal <<~END
253
- <Fdn>
254
- <FdnUid>
255
- <FtoUid>
256
- <AhpUid>
257
- <codeId>LFNT</codeId>
258
- </AhpUid>
259
- <txtDesig>H1</txtDesig>
260
- </FtoUid>
261
- <txtDesig>35</txtDesig>
262
- </FdnUid>
263
- </Fdn>
264
- END
265
- end
266
- end
267
- end