epb_view_models 1.0.16 → 1.0.19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79ae310938a850d789aa00468e9ccfb69bf5bf0c198b4ba306e83f15b626cf77
4
- data.tar.gz: dede5d0236911e00b5d5378e32745c05764e01dbb68e918fa335b83d373a8733
3
+ metadata.gz: 4c9e0148c91fdfa17b8230647b7f44630d9197877639f5f8da2948d329afb8e6
4
+ data.tar.gz: db0feff6c2a220fef4810e938bb53d6382df34df65355ff3946443b58ada8950
5
5
  SHA512:
6
- metadata.gz: 57c32e59da653209820c2284da3b10a75adc13296f42d1dda1ce7766b1c959f9a6557e3421db7958c9caa19c5a60cc9f049c48c0141042893a5be263175191dc
7
- data.tar.gz: 804e20015ee1ce0f5fbc53676e9067068913d9a0ba84345e3f1d8104fc2a935583392487a544721e2fac332a000006c58037798e223434fbd66bf86605bf4714
6
+ metadata.gz: f5e51bceb16b9c4ec62cb2a724ccb58e4daf1d8699b67672a755533278b568c00c7f13ee119f7d78983f913bb13a2cd69b36a1d1372e43a4dc4f62f82b89bb03
7
+ data.tar.gz: 9813262b24abc17231f36b6d5b4bf0eac81f58a31d103b80172e518b228e1974b15176af4c97f6ffeee7bea8cd8ac47cd74b08286554ff57883f6ec9fb3085e3
data/.buildspec.yml CHANGED
@@ -3,10 +3,10 @@ version: 0.2
3
3
  phases:
4
4
  install:
5
5
  runtime-versions:
6
- ruby: 2.7
6
+ ruby: 3.1
7
7
  pre_build:
8
8
  commands:
9
- - gem install bundler:2.2.21
9
+ - gem install bundler:2.3.15
10
10
  - make install
11
11
  build:
12
12
  commands:
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.7.5
1
+ 3.1.2
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- ruby "~> 2.7"
3
+ ruby ">=2.7", "<3.2"
4
4
 
5
5
  source "https://rubygems.org"
6
6
 
data/Gemfile.lock CHANGED
@@ -85,4 +85,4 @@ RUBY VERSION
85
85
  ruby 2.7.5p203
86
86
 
87
87
  BUNDLED WITH
88
- 2.2.32
88
+ 2.3.15
@@ -1360,7 +1360,7 @@
1360
1360
  </xs:enumeration>
1361
1361
  </xs:restriction>
1362
1362
  </xs:simpleType>
1363
- <xs:simpleType name="SAP-FlatLevelCode">
1363
+ <xs:simpleType name="SAP-FlatLevelCode">
1364
1364
  <xs:annotation>
1365
1365
  <xs:documentation>Codes which indicates where a flat is located within a building.</xs:documentation>
1366
1366
  </xs:annotation>
@@ -5,7 +5,7 @@ loader = Zeitwerk::Loader.for_gem
5
5
  loader.setup
6
6
 
7
7
  module EpbViewModels
8
- VERSION = "1.0.16"
8
+ VERSION = "1.0.19"
9
9
  end
10
10
 
11
11
  # Monkey patching to avoid using ActiveRecord::Type::Boolean.new.cast
@@ -274,6 +274,20 @@ module Helper
274
274
  "76" => "bioethanol from any biomass source",
275
275
  "99" => "Community heating schemes: special fuel",
276
276
  }.freeze
277
+ MAIN_HEATING_CATEGORY = {
278
+ "1" => "none",
279
+ "2" => "boiler with radiators or underfloor heating",
280
+ "3" => "micro-cogeneration",
281
+ "4" => "heat pump with radiators or underfloor heating",
282
+ "5" => "heat pump with warm air distribution",
283
+ "6" => "community heating system",
284
+ "7" => "electric storage heaters",
285
+ "8" => "electric underfloor heating",
286
+ "9" => "warm air system (not heat pump)",
287
+ "10" => "room heaters",
288
+ "11" => "other system",
289
+ "12" => "not recorded",
290
+ }.freeze
277
291
 
278
292
  def self.built_form_string(number)
279
293
  BUILT_FORM[number]
@@ -358,6 +372,7 @@ module Helper
358
372
  ]
359
373
 
360
374
  schemes_that_use_l = %i[
375
+ SAP-Schema-19.0.0
361
376
  SAP-Schema-18.0.0
362
377
  SAP-Schema-17.1
363
378
  SAP-Schema-17.0
@@ -561,6 +576,7 @@ module Helper
561
576
  ]
562
577
 
563
578
  sap = %i[
579
+ SAP-Schema-19.0.0
564
580
  SAP-Schema-18.0.0
565
581
  SAP-Schema-17.1
566
582
  SAP-Schema-17.0
@@ -611,6 +627,10 @@ module Helper
611
627
  end
612
628
  end
613
629
 
630
+ def self.main_heating_category(value:)
631
+ MAIN_HEATING_CATEGORY[value] || value
632
+ end
633
+
614
634
  private_class_method :is_rdsap, :is_sap
615
635
  end
616
636
  end
@@ -68,8 +68,8 @@ module Presenter::Export
68
68
  view[:lighting_environmental_efficiency_rating] =
69
69
  @view_model.lighting_environmental_efficiency_rating.to_i
70
70
  view[:low_energy_fixed_lighting_outlets_count] =
71
- @view_model.low_energy_fixed_lighting_outlets_count.to_i
72
- view[:low_energy_lighting] = @view_model.low_energy_lighting.to_i
71
+ @view_model.low_energy_fixed_lighting_outlets_count.nil? ? nil : @view_model.low_energy_fixed_lighting_outlets_count.to_i
72
+ view[:low_energy_lighting] = @view_model.low_energy_lighting.nil? ? nil : @view_model.low_energy_lighting.to_i
73
73
  view[:main_fuel_type] = @view_model.main_fuel_type
74
74
  view[:main_heating_controls_descriptions] =
75
75
  @view_model.all_main_heating_controls_descriptions
@@ -0,0 +1,42 @@
1
+ module Presenter
2
+ module RdSap
3
+ class Hera
4
+ TYPE_OF_ASSESSMENT = "RdSAP".freeze
5
+ private_constant :TYPE_OF_ASSESSMENT
6
+
7
+ def initialize(view_model, schema_type)
8
+ @view_model = view_model
9
+ @schema_type = schema_type
10
+ end
11
+
12
+ def to_hera_hash
13
+ {
14
+ type_of_assessment: TYPE_OF_ASSESSMENT,
15
+ assessment_id: @view_model.assessment_id,
16
+ date_of_registration: @view_model.date_of_registration,
17
+ address: {
18
+ address_line1: @view_model.address_line1,
19
+ address_line2: @view_model.address_line2,
20
+ address_line3: @view_model.address_line3,
21
+ address_line4: @view_model.address_line4,
22
+ town: @view_model.town,
23
+ postcode: @view_model.postcode,
24
+ },
25
+ dwelling_type: @view_model.dwelling_type,
26
+ built_form: Helper::XmlEnumsToOutput.built_form_string(@view_model.built_form),
27
+ main_dwelling_construction_age_band_or_year: Helper::XmlEnumsToOutput.construction_age_band_lookup(
28
+ @view_model.main_dwelling_construction_age_band_or_year,
29
+ @schema_type,
30
+ @view_model.report_type,
31
+ ),
32
+ property_summary: @view_model.property_summary,
33
+ main_heating_category: Helper::XmlEnumsToOutput.main_heating_category(value: @view_model.main_heating_category),
34
+ main_fuel_type: Helper::XmlEnumsToOutput.fuel_type(@view_model.main_fuel_type,
35
+ @schema_type,
36
+ @view_model.report_type),
37
+ has_hot_water_cylinder: @view_model.has_hot_water_cylinder,
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,39 @@
1
+ module Presenter
2
+ module Sap
3
+ class Hera
4
+ def initialize(view_model, schema_type)
5
+ @view_model = view_model
6
+ @schema_type = schema_type
7
+ end
8
+
9
+ def to_hera_hash
10
+ {
11
+ type_of_assessment: @view_model.type_of_assessment,
12
+ assessment_id: @view_model.assessment_id,
13
+ date_of_registration: @view_model.date_of_registration,
14
+ address: {
15
+ address_line1: @view_model.address_line1,
16
+ address_line2: @view_model.address_line2,
17
+ address_line3: @view_model.address_line3,
18
+ address_line4: nil,
19
+ town: @view_model.town,
20
+ postcode: @view_model.postcode,
21
+ },
22
+ dwelling_type: @view_model.dwelling_type,
23
+ built_form: Helper::XmlEnumsToOutput.built_form_string(@view_model.built_form),
24
+ main_dwelling_construction_age_band_or_year: Helper::XmlEnumsToOutput.construction_age_band_lookup(
25
+ @view_model.main_dwelling_construction_age_band_or_year,
26
+ @schema_type,
27
+ @view_model.report_type,
28
+ ),
29
+ property_summary: @view_model.property_summary,
30
+ main_heating_category: Helper::XmlEnumsToOutput.main_heating_category(value: @view_model.main_heating_category),
31
+ main_fuel_type: Helper::XmlEnumsToOutput.fuel_type(@view_model.main_fuel_type,
32
+ @schema_type,
33
+ @view_model.report_type),
34
+ has_hot_water_cylinder: @view_model.has_hot_water_cylinder,
35
+ }
36
+ end
37
+ end
38
+ end
39
+ end
@@ -54,6 +54,16 @@ module ViewModel
54
54
  xpath(%w[Water-Heating-Code])
55
55
  end
56
56
 
57
+ def has_hot_water_cylinder
58
+ return "false" if xpath(%w[Has-Hot-Water-Cylinder]).nil?
59
+
60
+ xpath(%w[Has-Hot-Water-Cylinder])
61
+ end
62
+
63
+ def main_heating_category
64
+ xpath(%w[Main-Heating-Category])
65
+ end
66
+
57
67
  private
58
68
 
59
69
  def fetch_addendum_numbers
@@ -350,10 +350,6 @@ module ViewModel
350
350
  xpath(%w[Immersion-Heating-Type])
351
351
  end
352
352
 
353
- def main_heating_category
354
- xpath(%w[Main-Heating-Category])
355
- end
356
-
357
353
  def main_fuel_type
358
354
  xpath(%w[Main-Fuel-Type])
359
355
  end
@@ -337,10 +337,6 @@ module ViewModel
337
337
  xpath(%w[Immersion-Heating-Type])
338
338
  end
339
339
 
340
- def main_heating_category
341
- xpath(%w[Main-Heating-Category])
342
- end
343
-
344
340
  def main_fuel_type
345
341
  xpath(%w[Main-Fuel-Type])
346
342
  end
@@ -8,6 +8,7 @@ module ViewModel
8
8
  @summary = Presenter::RdSap::Summary.new(view_model)
9
9
  @report = Presenter::RdSap::Report.new(view_model, schema_type, additional_data)
10
10
  @recommendation_report = Presenter::RdSap::RecommendationReport.new(view_model)
11
+ @hera = Presenter::RdSap::Hera.new(view_model, schema_type)
11
12
  end
12
13
 
13
14
  def type
@@ -30,6 +31,10 @@ module ViewModel
30
31
  @recommendation_report.to_hash
31
32
  end
32
33
 
34
+ def to_hera_hash
35
+ @hera.to_hera_hash
36
+ end
37
+
33
38
  def get_view_model
34
39
  view_model
35
40
  end
@@ -301,10 +301,6 @@ module ViewModel
301
301
  xpath(%w[Immersion-Heating-Type])
302
302
  end
303
303
 
304
- def main_heating_category
305
- xpath(%w[Main-Heating-Category])
306
- end
307
-
308
304
  def main_fuel_type
309
305
  xpath(%w[Main-Fuel-Type])
310
306
  end
@@ -259,12 +259,12 @@ module ViewModel
259
259
  end
260
260
 
261
261
  def top_storey
262
- flat_level_code = xpath(%w[Level])
262
+ flat_level_code = xpath(%w[SAP-FlatLevelCode])
263
263
  flat_level_code == "3" ? "Y" : "N"
264
264
  end
265
265
 
266
266
  def storey_count
267
- nil
267
+ xpath(%w[Storeys])
268
268
  end
269
269
 
270
270
  def building_part_number
@@ -301,10 +301,6 @@ module ViewModel
301
301
  xpath(%w[Immersion-Heating-Type])
302
302
  end
303
303
 
304
- def main_heating_category
305
- xpath(%w[Main-Heating-Category])
306
- end
307
-
308
304
  def main_fuel_type
309
305
  xpath(%w[Main-Fuel-Type])
310
306
  end
@@ -369,20 +365,51 @@ module ViewModel
369
365
  nil
370
366
  end
371
367
 
372
- def low_energy_lighting
373
- xpath(%w[Low-Energy-Fixed-Lighting-Outlets-Percentage])
368
+ def fixed_lighting_outlets_count
369
+ @xml_doc.search("Fixed-Lights/Fixed-Light/Lighting-Outlets").map(&:content).map(&:to_i).sum
374
370
  end
375
371
 
376
- def fixed_lighting_outlets_count
377
- xpath(%w[Fixed-Lighting-Outlets-Count])
372
+ def format_fixed_light_array
373
+ @xml_doc
374
+ .search("Fixed-Lights/Fixed-Light")
375
+ .map do |part|
376
+ {
377
+ lighting_efficacy:
378
+ xpath(%w[Lighting-Efficacy], part),
379
+ lighting_outlets:
380
+ xpath(%w[Lighting-Outlets], part),
381
+ }
382
+ end
383
+ end
384
+
385
+ def low_energy_lighting
386
+ total_energy_outlet_count = []
387
+ low_energy_outlet_count = []
388
+
389
+ format_fixed_light_array.each do |outlet|
390
+ if outlet[:lighting_efficacy].to_i > 65
391
+ low_energy_outlet_count << outlet[:lighting_outlets].to_i
392
+ end
393
+ total_energy_outlet_count << outlet[:lighting_outlets].to_f
394
+ end
395
+
396
+ (low_energy_outlet_count.sum / total_energy_outlet_count.sum * 100).round
378
397
  end
379
398
 
380
399
  def low_energy_fixed_lighting_outlets_count
381
- xpath(%w[Low-Energy-Fixed-Lighting-Outlets-Count])
400
+ low_energy_outlet_count = []
401
+
402
+ format_fixed_light_array.each do |outlet|
403
+ if outlet[:lighting_efficacy].to_i > 65
404
+ low_energy_outlet_count << outlet[:lighting_outlets].to_i
405
+ end
406
+ end
407
+
408
+ low_energy_outlet_count.sum
382
409
  end
383
410
 
384
411
  def open_fireplaces_count
385
- xpath(%w[Open-Fireplaces-Count])
412
+ xpath(%w[Open-Chimneys-Count])
386
413
  end
387
414
 
388
415
  def hot_water_description
@@ -442,7 +469,7 @@ module ViewModel
442
469
  end
443
470
 
444
471
  def wind_turbine_count
445
- xpath(%w[Wind-Turbines-Count])
472
+ @xml_doc.search("Wind-Turbines/Wind-Turbine").map(&:content).count
446
473
  end
447
474
 
448
475
  def unheated_corridor_length
@@ -271,10 +271,6 @@ module ViewModel
271
271
  xpath(%w[Immersion-Heating-Type])
272
272
  end
273
273
 
274
- def main_heating_category
275
- xpath(%w[Main-Heating-Category])
276
- end
277
-
278
274
  def main_fuel_type
279
275
  xpath(%w[Main-Fuel-Type])
280
276
  end
@@ -8,6 +8,7 @@ module ViewModel
8
8
  @summary = Presenter::Sap::Summary.new(view_model)
9
9
  @report = Presenter::Sap::Report.new(view_model, schema_type, additional_data)
10
10
  @recommendation_report = Presenter::Sap::RecommendationReport.new(view_model)
11
+ @hera = Presenter::Sap::Hera.new(view_model, schema_type)
11
12
  end
12
13
 
13
14
  def type
@@ -30,6 +31,10 @@ module ViewModel
30
31
  @recommendation_report.to_hash
31
32
  end
32
33
 
34
+ def to_hera_hash
35
+ @hera.to_hera_hash
36
+ end
37
+
33
38
  def get_view_model
34
39
  view_model
35
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epb_view_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.16
4
+ version: 1.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - MHCLG Energy Performance of Buildings
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-11 00:00:00.000000000 Z
11
+ date: 2022-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -1675,10 +1675,12 @@ files:
1675
1675
  - lib/presenter/export/domestic.rb
1676
1676
  - lib/presenter/export/statistics.rb
1677
1677
  - lib/presenter/rd_sap/export_configuration.rb
1678
+ - lib/presenter/rd_sap/hera.rb
1678
1679
  - lib/presenter/rd_sap/recommendation_report.rb
1679
1680
  - lib/presenter/rd_sap/report.rb
1680
1681
  - lib/presenter/rd_sap/summary.rb
1681
1682
  - lib/presenter/sap/export_configuration.rb
1683
+ - lib/presenter/sap/hera.rb
1682
1684
  - lib/presenter/sap/recommendation_report.rb
1683
1685
  - lib/presenter/sap/report.rb
1684
1686
  - lib/presenter/sap/summary.rb
@@ -1868,7 +1870,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1868
1870
  - !ruby/object:Gem::Version
1869
1871
  version: '0'
1870
1872
  requirements: []
1871
- rubygems_version: 3.1.6
1873
+ rubygems_version: 3.3.7
1872
1874
  signing_key:
1873
1875
  specification_version: 4
1874
1876
  summary: Library used to parse Energy Performance Certificates (EPC)