epb_view_models 1.0.29 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile.lock +24 -24
- data/api/schemas/data/orchestrate.json +4 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/ExternalDefinitions.xml +1735 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/ExternalDefinitions.xsd +313 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/AssessorManagement.xsd +275 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/EPC-Certificate.xsd +632 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/ExceptionList.xsd +20 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/Property.xsd +85 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/ReportList.xsd +27 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/SAP-CollectedData.xsd +2500 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/SAP-Compliance-Report.xsd +51 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/Templates/SAP-Report.xsd +277 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/UDT/EPC-Domains.xsd +646 -0
- data/api/schemas/xml/SAP-Schema-19.1.0/SAP/UDT/SAP-Domains.xsd +3421 -0
- data/epb_view_models.gemspec +2 -2
- data/lib/accessor/domestic_recommendations_accessor.rb +50 -0
- data/lib/epb_view_models.rb +1 -1
- data/lib/helper/xml_enums_to_output.rb +2 -0
- data/lib/presenter/rd_sap/domestic_digest.rb +0 -2
- data/lib/presenter/sap/domestic_digest.rb +1 -1
- data/lib/view_model/factory.rb +1 -0
- data/lib/view_model/rd_sap_schema_200/common_schema.rb +5 -4
- data/lib/view_model/sap_schema_1800/common_schema.rb +4 -2
- data/lib/view_model/sap_schema_1900/common_schema.rb +4 -2
- data/lib/view_model/sap_schema_1910/common_schema.rb +620 -0
- data/lib/view_model/sap_wrapper.rb +2 -0
- metadata +19 -5
data/epb_view_models.gemspec
CHANGED
@@ -5,8 +5,8 @@ require_relative "lib/epb_view_models"
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "epb_view_models"
|
7
7
|
spec.version = EpbViewModels::VERSION
|
8
|
-
spec.authors = ["
|
9
|
-
spec.email = ["
|
8
|
+
spec.authors = ["DLUHC Energy Performance of Buildings"]
|
9
|
+
spec.email = ["dluhc.digital-services@levellingup.gov.uk"]
|
10
10
|
spec.summary = "Library used to parse Energy Performance Certificates (EPC)"
|
11
11
|
spec.homepage = "https://github.com/communitiesuk/epb-view-models"
|
12
12
|
spec.license = "MIT"
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "singleton"
|
2
|
+
|
3
|
+
module Accessor
|
4
|
+
class DomesticRecommendationsAccessor
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
RecommendationDetails = Struct.new(:summary, :description, keyword_init: true)
|
8
|
+
|
9
|
+
def fetch_details(schema_version:, improvement_number:)
|
10
|
+
unless memoized_schema?(schema_version)
|
11
|
+
assessment_type = schema_version.split("-").first
|
12
|
+
is_ni = schema_version.include? "-NI-"
|
13
|
+
definitions_document = Nokogiri::XML(File.open("api/schemas/xml/#{schema_version}/#{assessment_type}/ExternalDefinitions.xml"))
|
14
|
+
sub_object = {}
|
15
|
+
country_node = definitions_document.at_xpath("//Country[Country-Code[contains(text(), '#{is_ni ? 'NIR' : 'EAW'}')]]")
|
16
|
+
recommendations = country_node.search("Recommendation")
|
17
|
+
recommendations.each do |recommendation|
|
18
|
+
sub_object[recommendation.at_css("Improvement-Number").content] = {
|
19
|
+
summary: recommendation.at_css("Improvement-Summary[language='1']").content,
|
20
|
+
description: recommendation.at_css("Improvement-Description[language='1']").content,
|
21
|
+
}
|
22
|
+
end
|
23
|
+
memoize_schema_hash(schema_version, sub_object)
|
24
|
+
end
|
25
|
+
RecommendationDetails.new(**memoized_schema(schema_version)[improvement_number])
|
26
|
+
end
|
27
|
+
|
28
|
+
def reset!
|
29
|
+
@memo = nil
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def memo
|
35
|
+
@memo ||= {}
|
36
|
+
end
|
37
|
+
|
38
|
+
def memoized_schema?(schema_version)
|
39
|
+
memo.key?(schema_version)
|
40
|
+
end
|
41
|
+
|
42
|
+
def memoize_schema_hash(schema_version, hash)
|
43
|
+
memo[schema_version] = hash
|
44
|
+
end
|
45
|
+
|
46
|
+
def memoized_schema(schema_version)
|
47
|
+
memo[schema_version]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/epb_view_models.rb
CHANGED
@@ -372,6 +372,7 @@ module Helper
|
|
372
372
|
]
|
373
373
|
|
374
374
|
schemes_that_use_l = %i[
|
375
|
+
SAP-Schema-19.1.0
|
375
376
|
SAP-Schema-19.0.0
|
376
377
|
SAP-Schema-18.0.0
|
377
378
|
SAP-Schema-17.1
|
@@ -576,6 +577,7 @@ module Helper
|
|
576
577
|
]
|
577
578
|
|
578
579
|
sap = %i[
|
580
|
+
SAP-Schema-19.1.0
|
579
581
|
SAP-Schema-19.0.0
|
580
582
|
SAP-Schema-18.0.0
|
581
583
|
SAP-Schema-17.1
|
@@ -35,7 +35,7 @@ module Presenter
|
|
35
35
|
total_floor_area: @view_model.total_floor_area.to_s,
|
36
36
|
has_mains_gas: @view_model.mains_gas,
|
37
37
|
current_energy_efficiency_rating: @view_model.current_energy_rating,
|
38
|
-
type_of_property:
|
38
|
+
type_of_property: Helper::XmlEnumsToOutput.property_type(@view_model.property_type),
|
39
39
|
}
|
40
40
|
end
|
41
41
|
end
|
data/lib/view_model/factory.rb
CHANGED
@@ -117,15 +117,16 @@ module ViewModel
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def recommendations_for_report
|
120
|
+
accessor = Accessor::DomesticRecommendationsAccessor.instance
|
120
121
|
@xml_doc
|
121
122
|
.search("Suggested-Improvements Improvement")
|
122
123
|
.map do |node|
|
124
|
+
improvement_code = xpath(%w[Improvement-Details Improvement-Number], node)
|
123
125
|
{
|
124
126
|
sequence: xpath(%w[Sequence], node).to_i,
|
125
|
-
|
126
|
-
|
127
|
-
improvement_code:
|
128
|
-
xpath(%w[Improvement-Details Improvement-Number], node),
|
127
|
+
improvement_code: xpath(%w[Improvement-Details Improvement-Number], node),
|
128
|
+
improvement_summary: improvement_code ? accessor.fetch_details(schema_version: "RdSAP-Schema-20.0.0", improvement_number: improvement_code).summary : xpath(%w[Improvement-Summary], node),
|
129
|
+
improvement_description: improvement_code ? accessor.fetch_details(schema_version: "RdSAP-Schema-20.0.0", improvement_number: improvement_code).description : xpath(%w[Improvement-Description], node),
|
129
130
|
indicative_cost: xpath(%w[Indicative-Cost], node),
|
130
131
|
}
|
131
132
|
end
|
@@ -112,13 +112,15 @@ module ViewModel
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def recommendations_for_report
|
115
|
+
accessor = Accessor::DomesticRecommendationsAccessor.instance
|
115
116
|
@xml_doc
|
116
117
|
.search("Suggested-Improvements Improvement")
|
117
118
|
.map do |node|
|
119
|
+
improvement_code = xpath(%w[Improvement-Details Improvement-Number], node)
|
118
120
|
{
|
119
121
|
sequence: xpath(%w[Sequence], node).to_i,
|
120
|
-
improvement_summary: xpath(%w[Improvement-Summary], node),
|
121
|
-
improvement_description: xpath(%w[Improvement-Description], node),
|
122
|
+
improvement_summary: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-18.0.0", improvement_number: improvement_code).summary : xpath(%w[Improvement-Summary], node),
|
123
|
+
improvement_description: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-18.0.0", improvement_number: improvement_code).description : xpath(%w[Improvement-Description], node),
|
122
124
|
improvement_code:
|
123
125
|
xpath(%w[Improvement-Details Improvement-Number], node),
|
124
126
|
indicative_cost: xpath(%w[Indicative-Cost], node),
|
@@ -114,13 +114,15 @@ module ViewModel
|
|
114
114
|
end
|
115
115
|
|
116
116
|
def recommendations_for_report
|
117
|
+
accessor = Accessor::DomesticRecommendationsAccessor.instance
|
117
118
|
@xml_doc
|
118
119
|
.search("Suggested-Improvements Improvement")
|
119
120
|
.map do |node|
|
121
|
+
improvement_code = xpath(%w[Improvement-Details Improvement-Number], node)
|
120
122
|
{
|
121
123
|
sequence: xpath(%w[Sequence], node).to_i,
|
122
|
-
improvement_summary: xpath(%w[Improvement-Summary], node),
|
123
|
-
improvement_description: xpath(%w[Improvement-Description], node),
|
124
|
+
improvement_summary: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-19.0.0", improvement_number: improvement_code).summary : xpath(%w[Improvement-Summary], node),
|
125
|
+
improvement_description: improvement_code ? accessor.fetch_details(schema_version: "SAP-Schema-19.0.0", improvement_number: improvement_code).description : xpath(%w[Improvement-Description], node),
|
124
126
|
improvement_code:
|
125
127
|
xpath(%w[Improvement-Details Improvement-Number], node),
|
126
128
|
indicative_cost: xpath(%w[Indicative-Cost], node),
|