epb_view_models 1.0.5 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69b8f64ca17a4bef69800fe8a0a13388985993a61f4b2fbfae4c6837226bf04b
4
- data.tar.gz: 97eb3db6b6d137c83c9604dfddaaa2eca367dcc3175dba154b3840424a8da6a3
3
+ metadata.gz: 94ef952761872299d77aff99b1c9ac3d82d1df98a63cd74d0520c1628475f319
4
+ data.tar.gz: 4466ab181f638cd85fc7ef943f6b78709b770a742dcd07529e708f49c3e9669f
5
5
  SHA512:
6
- metadata.gz: 982f51ee5ebbf8c03132e1254cdef4e4d9df220243c70a28c58d23c6469a527dbc7d970b0d4b6ab8c5089351b2bd48996a4f69c0c44b44d560111d36fcff68aa
7
- data.tar.gz: 9dc487fbe31b3a0596f8d1a77c6dc23480d9d5f03847cf5a91f2b2febd163871b9644f6148c5ec7ca83dab7e827bbb6895308d04ff1a62b30383d0404bc1862f
6
+ metadata.gz: 69ceeb585c7014f6b47c4a71241d8a5120cf9dee08e41bd53f90ea3b9bf1a7b4e5b29c8dabf643060b471acee26778295c04c83a4fb6bd1000be0deff6ccb959
7
+ data.tar.gz: 3fe39ccc50a2ddff5fa2040d214b95c56554e45b8332fd5ba9aa29ed57648c7c68bdf9a1210143babd0518d777033fd0db9e8778487d4d0e477a34a4d6c0dd75
data/Gemfile CHANGED
@@ -10,5 +10,6 @@ source "https://rubygems.org" do
10
10
  end
11
11
 
12
12
  gem "nokogiri", "~> 1.11"
13
+ gem "rexml", "~> 3.2", ">= 3.2.5"
13
14
  gem "zeitwerk", "~> 2.4.2"
14
15
  end
data/Gemfile.lock CHANGED
@@ -83,6 +83,7 @@ PLATFORMS
83
83
  DEPENDENCIES
84
84
  nokogiri (~> 1.11)!
85
85
  rake (~> 13.0.6)!
86
+ rexml (~> 3.2, >= 3.2.5)!
86
87
  rspec (~> 3.0)!
87
88
  rubocop-govuk (~> 4.0.0)!
88
89
  zeitwerk (~> 2.4.2)!
@@ -5,7 +5,7 @@ loader = Zeitwerk::Loader.for_gem
5
5
  loader.setup
6
6
 
7
7
  module EpbViewModels
8
- VERSION = "1.0.5"
8
+ VERSION = "1.0.9"
9
9
  end
10
10
 
11
11
  # Monkey patching to avoid using ActiveRecord::Type::Boolean.new.cast
@@ -97,6 +97,34 @@ module Helper
97
97
  "0" => "Not applicable",
98
98
  "NR" => "Not recorded",
99
99
  }.freeze
100
+ CONSTRUCTION_AGE_BAND_NI = {
101
+ "A" => "Northern Ireland: before 1919",
102
+ "A-12.0" => "Pre-1900",
103
+ "B" => "Northern Ireland: 1919-1929",
104
+ "B-12.0" => "1900-1929",
105
+ "C" => "Northern Ireland: 1930-1949",
106
+ "C-12.0" => "1930-1949",
107
+ "D" => "Northern Ireland: 1950-1973",
108
+ "D-12.0" => "1950-1966",
109
+ "E" => "Northern Ireland: 1974-1977",
110
+ "E-12.0" => "1967-1975",
111
+ "F" => "Northern Ireland: 1978-1985",
112
+ "F-12.0" => "1976-1982",
113
+ "G" => "Northern Ireland: 1986-1991",
114
+ "G-12.0" => "1983-1990",
115
+ "H" => "Northern Ireland: 1992-1999",
116
+ "H-12.0" => "1991-1995",
117
+ "I" => "Northern Ireland: 2000-2006",
118
+ "I-12.0" => "1996-2002",
119
+ "J" => "Northern Ireland: not applicable",
120
+ "J-12.0" => "2003-2006",
121
+ "K-RdSAP-NI" => "Northern Ireland: 2007-2013",
122
+ "K-SAP-NI" => "Northern Ireland: 2007 onwards",
123
+ "K-12.0" => "Post-2006",
124
+ "L" => "Northern Ireland: 2014 onwards",
125
+ "0" => "Not applicable",
126
+ "NR" => "Not recorded",
127
+ }.freeze
100
128
  PROPERTY_TYPE = {
101
129
  "0" => "House",
102
130
  "1" => "Bungalow",
@@ -135,7 +163,7 @@ module Helper
135
163
  "6" => "mechanical extract, decentralised (MEV dc)",
136
164
  "7" => "balanced without heat recovery (MV)",
137
165
  "8" => "balanced with heat recovery (MVHR)",
138
- "9" => "natural with intermittent extract fans and/or passive vents. For backwards compatibility only, do not use.",
166
+ "9" => "natural with intermittent extract fans and/or passive vents. For backwards compatibility only, do not use.",
139
167
  "10" => "natural with intermittent extract fans and passive vents",
140
168
  }.freeze
141
169
  CYLINDER_INSULATION_THICKNESS = {
@@ -278,7 +306,7 @@ module Helper
278
306
  end
279
307
 
280
308
  def self.transaction_type(value, report_type = "2", schema_type = "")
281
- types_of_ni = %w[
309
+ types_of_ni = %i[
282
310
  RdSAP-Schema-NI-20.0.0
283
311
  RdSAP-Schema-NI-19.0
284
312
  RdSAP-Schema-NI-18.0
@@ -303,7 +331,7 @@ module Helper
303
331
  end
304
332
 
305
333
  def self.construction_age_band_lookup(value, schema_type, report_type)
306
- types_of_sap_pre17 = %w[
334
+ types_of_sap_pre17 = %i[
307
335
  SAP-Schema-16.3
308
336
  SAP-Schema-16.2
309
337
  SAP-Schema-16.1
@@ -318,7 +346,7 @@ module Helper
318
346
  SAP-Schema-11.0
319
347
  ].freeze
320
348
 
321
- schemes_that_use_not_recorded = %w[
349
+ schemes_that_use_not_recorded = %i[
322
350
  SAP-Schema-16.3
323
351
  SAP-Schema-16.2
324
352
  SAP-Schema-16.1
@@ -327,14 +355,9 @@ module Helper
327
355
  RdSAP-Schema-18.0
328
356
  RdSAP-Schema-17.1
329
357
  RdSAP-Schema-17.0
330
- RdSAP-Schema-NI-20.0.0
331
- RdSAP-Schema-NI-19.0
332
- RdSAP-Schema-NI-18.0
333
- RdSAP-Schema-NI-17.4
334
- RdSAP-Schema-NI-17.3
335
358
  ]
336
359
 
337
- schemes_that_use_l = %w[
360
+ schemes_that_use_l = %i[
338
361
  SAP-Schema-18.0.0
339
362
  SAP-Schema-17.1
340
363
  SAP-Schema-17.0
@@ -343,14 +366,9 @@ module Helper
343
366
  RdSAP-Schema-18.0
344
367
  RdSAP-Schema-17.1
345
368
  RdSAP-Schema-17.0
346
- RdSAP-Schema-NI-20.0.0
347
- RdSAP-Schema-NI-19.0
348
- RdSAP-Schema-NI-18.0
349
- RdSAP-Schema-NI-17.4
350
- RdSAP-Schema-NI-17.3
351
369
  ]
352
370
 
353
- schemes_that_use_0 = %w[
371
+ schemes_that_use_0 = %i[
354
372
  SAP-Schema-16.3
355
373
  SAP-Schema-16.2
356
374
  SAP-Schema-16.1
@@ -366,6 +384,25 @@ module Helper
366
384
  RdSAP-Schema-18.0
367
385
  RdSAP-Schema-17.1
368
386
  RdSAP-Schema-17.0
387
+ ]
388
+
389
+ sap_schemas_ni = %i[
390
+ SAP-Schema-NI-18.0.0
391
+ SAP-Schema-NI-17.4
392
+ SAP-Schema-NI-17.3
393
+ SAP-Schema-NI-17.2
394
+ SAP-Schema-NI-17.1
395
+ SAP-Schema-NI-17.0
396
+ SAP-Schema-NI-16.1
397
+ SAP-Schema-NI-16.0
398
+ SAP-Schema-NI-15.0
399
+ SAP-Schema-NI-14.2
400
+ SAP-Schema-NI-14.1
401
+ SAP-Schema-NI-14.0
402
+ SAP-Schema-NI-13.0
403
+ ]
404
+
405
+ rdsap_schemas_ni = %i[
369
406
  RdSAP-Schema-NI-20.0.0
370
407
  RdSAP-Schema-NI-19.0
371
408
  RdSAP-Schema-NI-18.0
@@ -373,7 +410,29 @@ module Helper
373
410
  RdSAP-Schema-NI-17.3
374
411
  ]
375
412
 
376
- if value == "K" && schema_type == "SAP-Schema-12.0" && is_rdsap(report_type)
413
+ ni_schemas_pre_12 = %i[
414
+ SAP-Schema-NI-12.0
415
+ SAP-Schema-NI-11.2
416
+ ]
417
+
418
+ if value == "K" && rdsap_schemas_ni.include?(schema_type)
419
+ return CONSTRUCTION_AGE_BAND_NI["K-RdSAP-NI"] || value
420
+ end
421
+
422
+ if value == "K" && sap_schemas_ni.include?(schema_type)
423
+ return CONSTRUCTION_AGE_BAND_NI["K-SAP-NI"] || value
424
+ end
425
+
426
+ if ni_schemas_pre_12.include?(schema_type)
427
+ key = (value == "0" ? value : "#{value}-12.0")
428
+ return CONSTRUCTION_AGE_BAND_NI[key] || value
429
+ end
430
+
431
+ if sap_schemas_ni.include?(schema_type) || rdsap_schemas_ni.include?(schema_type)
432
+ return CONSTRUCTION_AGE_BAND_NI[value] || value
433
+ end
434
+
435
+ if value == "K" && schema_type == :"SAP-Schema-12.0" && is_rdsap(report_type)
377
436
  return CONSTRUCTION_AGE_BAND["K-12.0"]
378
437
  end
379
438
 
@@ -405,14 +464,13 @@ module Helper
405
464
  end
406
465
 
407
466
  def self.mechanical_ventilation(value, schema_type, report_type)
408
- types_of_sap_pre12 = %w[
467
+ types_of_sap_pre12 = %i[
409
468
  SAP-Schema-11.2
410
469
  SAP-Schema-11.0
411
470
  SAP-Schema-10.2
412
471
  SAP-Schema-NI-11.2
413
472
  ].freeze
414
-
415
- if types_of_sap_pre12.include?(schema_type.to_s) && is_rdsap(report_type)
473
+ if types_of_sap_pre12.include?(schema_type) && is_rdsap(report_type)
416
474
  return MECHANICAL_VENTILATION["#{value}-pre12.0"]
417
475
  end
418
476
 
@@ -440,7 +498,7 @@ module Helper
440
498
  end
441
499
 
442
500
  def self.ventilation_type(value, schema_type = "")
443
- ni_sap = %w[
501
+ ni_sap = %i[
444
502
  SAP-Schema-NI-16.1
445
503
  SAP-Schema-NI-16.0
446
504
  SAP-Schema-NI-15.0
@@ -539,13 +597,14 @@ module Helper
539
597
  if rdsap.include?(schema_type)
540
598
  RDSAP_FUEL_TYPE[value]
541
599
  elsif sap.include?(schema_type) && is_sap(report_type)
542
- SAP_FUEL_TYPE[value]
600
+ SAP_FUEL_TYPE[value]
543
601
  elsif sap.include?(schema_type) && is_rdsap(report_type)
544
602
  if includes_rapeseed_oil.include?(schema_type) && value == "36"
545
603
  return RDSAP_FUEL_TYPE["#{value}-rapeseed-oil"]
546
604
  end
605
+
547
606
  if pre143_sap.include?(schema_type)
548
- return RDSAP_FUEL_TYPE_PRE_143["#{value}-pre14.3-sap"] || RDSAP_FUEL_TYPE[value]
607
+ RDSAP_FUEL_TYPE_PRE_143["#{value}-pre14.3-sap"] || RDSAP_FUEL_TYPE[value]
549
608
  else
550
609
  RDSAP_FUEL_TYPE[value]
551
610
  end
@@ -31,7 +31,7 @@ module Presenter
31
31
  co2_emissions_potential: @view_model.potential_carbon_emission,
32
32
  construction_age_band:
33
33
  Helper::XmlEnumsToOutput.construction_age_band_lookup(
34
- @view_model.property_age_band,
34
+ @view_model.main_dwelling_construction_age_band_or_year,
35
35
  @schema_type,
36
36
  @view_model.report_type,
37
37
  ),
@@ -0,0 +1,76 @@
1
+ module Presenter
2
+ class Xsd
3
+ def initialize(assessment_type:, xsd_dir_path: "api/schemas/xml/*/")
4
+ @assessment_type = assessment_type
5
+ @xsd_dir_path = xsd_dir_path
6
+ end
7
+
8
+ def get_enums_by_type(simple_type)
9
+ hash = {}
10
+ xpath = "//xs:simpleType[@name='#{simple_type}']//xs:enumeration"
11
+ xsd_files.each do |file_name|
12
+ doc = REXML::Document.new(File.read(file_name))
13
+ enums_hash = {}
14
+ REXML::XPath.each(doc, "#{xpath}/@value") do |e|
15
+ desc_path = "#{xpath}[@value='#{e.value}']//xs:annotation//xs:documentation"
16
+ enums_hash.merge!(e.value => REXML::XPath.first(doc, desc_path).children.first)
17
+ end
18
+
19
+ next if enums_hash.empty?
20
+
21
+ hash[schema_version(file_name)] = enums_hash
22
+ end
23
+ hash
24
+ end
25
+
26
+ def unique_enums(simple_type)
27
+ uniq_enums = []
28
+ enums = get_enums_by_type(simple_type).values
29
+
30
+ enums.each_with_index do |_hash, i|
31
+ if i.positive? && (enums[i].to_a != enums[i + 1].to_a)
32
+ uniq_enums << enums[i]
33
+ end
34
+ end
35
+ uniq_enums
36
+ end
37
+
38
+ def variation_between_schema_versions?(enums_hash)
39
+ enums_hash.values.flatten.uniq.count != 1
40
+ end
41
+
42
+ private
43
+
44
+ def schema_version(file_name)
45
+ schema_version = file_name.delete_prefix("api/schemas/xml/").split("/").first
46
+ sap_defnied_in_rdsap_dir?(file_name) ? "#{schema_version}/SAP" : schema_version
47
+ end
48
+
49
+ def xsd_files
50
+ case @assessment_type
51
+ when "SAP"
52
+ sap_xsd_files
53
+ when "RdSAP"
54
+ rdsap_xsd_files
55
+ when "CEPC"
56
+ cepc_xsd_files
57
+ end
58
+ end
59
+
60
+ def sap_xsd_files
61
+ Dir.glob("#{@xsd_dir_path}*-Domains.xsd")
62
+ end
63
+
64
+ def rdsap_xsd_files
65
+ Dir.glob("#{@xsd_dir_path}SAP-Domains.xsd")
66
+ end
67
+
68
+ def cepc_xsd_files
69
+ Dir.glob("#{@xsd_dir_path}Reported-Data.xsd")
70
+ end
71
+
72
+ def sap_defnied_in_rdsap_dir?(file_name)
73
+ @assessment_type == "SAP" && file_name.end_with?("SAP-Domains.xsd")
74
+ end
75
+ end
76
+ 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.5
4
+ version: 1.0.9
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: 2021-09-13 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -1661,6 +1661,7 @@ files:
1661
1661
  - lib/presenter/sap/recommendation_report.rb
1662
1662
  - lib/presenter/sap/report.rb
1663
1663
  - lib/presenter/sap/summary.rb
1664
+ - lib/presenter/xsd.rb
1664
1665
  - lib/view_model/ac_cert_wrapper.rb
1665
1666
  - lib/view_model/ac_report_wrapper.rb
1666
1667
  - lib/view_model/base_view_model.rb