epb_view_models 1.0.29 → 1.1.1
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 +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),
|