25 changed files with 965 additions and 154 deletions
@ -0,0 +1,278 @@ |
|||||||
|
module Imports |
||||||
|
class CaseLogsImportService < ImportService |
||||||
|
def create_logs(folder) |
||||||
|
import_from(folder, :create_log) |
||||||
|
end |
||||||
|
|
||||||
|
private |
||||||
|
|
||||||
|
GN_SH = { |
||||||
|
general_needs: 1, |
||||||
|
supported_housing: 2, |
||||||
|
}.freeze |
||||||
|
|
||||||
|
SR_AR_IR = { |
||||||
|
social_rent: 1, |
||||||
|
affordable_rent: 2, |
||||||
|
intermediate_rent: 3, |
||||||
|
}.freeze |
||||||
|
|
||||||
|
# For providertype, values are reversed!!! |
||||||
|
PRP_LA = { |
||||||
|
private_registered_provider: 1, |
||||||
|
local_authority: 2, |
||||||
|
}.freeze |
||||||
|
|
||||||
|
IRPRODUCT = { |
||||||
|
rent_to_buy: 1, |
||||||
|
london_living_rent: 2, |
||||||
|
other_intermediate_rent_product: 3, |
||||||
|
}.freeze |
||||||
|
|
||||||
|
# These must match our form |
||||||
|
RENT_TYPE = { |
||||||
|
social_rent: 0, |
||||||
|
affordable_rent: 1, |
||||||
|
london_affordable_rent: 2, |
||||||
|
rent_to_buy: 3, |
||||||
|
london_living_rent: 4, |
||||||
|
other_intermediate_rent_product: 5, |
||||||
|
}.freeze |
||||||
|
|
||||||
|
# Order matters since we derive from previous values (uses attributes) |
||||||
|
def create_log(xml_doc) |
||||||
|
attributes = {} |
||||||
|
|
||||||
|
# Required fields for status complete or logic to work |
||||||
|
attributes["startdate"] = start_date(xml_doc) |
||||||
|
attributes["owning_organisation_id"] = find_organisation_id(xml_doc, "OWNINGORGID") |
||||||
|
attributes["managing_organisation_id"] = find_organisation_id(xml_doc, "MANINGORGID") |
||||||
|
attributes["previous_postcode_known"] = previous_postcode_known(xml_doc) |
||||||
|
attributes["ppostcode_full"] = previous_postcode(xml_doc, attributes) |
||||||
|
attributes["needstype"] = needs_type(xml_doc) |
||||||
|
attributes["lar"] = london_affordable_rent(xml_doc) |
||||||
|
attributes["irproduct"] = unsafe_string_as_integer(xml_doc, "IRPRODUCT") |
||||||
|
attributes["irproduct_other"] = field_value(xml_doc, "xmlns", "IRPRODUCTOTHER") |
||||||
|
attributes["rent_type"] = rent_type(xml_doc, attributes) |
||||||
|
attributes["rsnvac"] = unsafe_string_as_integer(xml_doc, "Q27") |
||||||
|
attributes["renewal"] = renewal(attributes) |
||||||
|
(1..8).each do |index| |
||||||
|
attributes["age#{index}"] = age(xml_doc, index) |
||||||
|
attributes["sex#{index}"] = sex(xml_doc, index) |
||||||
|
attributes["ecstat#{index}"] = unsafe_string_as_integer(xml_doc, "P#{index}Eco") |
||||||
|
end |
||||||
|
# attributes["hhmemb"] = |
||||||
|
|
||||||
|
# Not specific to our form but required for CDS and can't be inferred |
||||||
|
# attributes["form"] = Integer(field_value(xml_doc, "xmlns", "FORM")) |
||||||
|
# attributes["lettype"] = let_type(xml_doc, attributes) |
||||||
|
|
||||||
|
case_log = CaseLog.new(attributes) |
||||||
|
case_log.save! |
||||||
|
|
||||||
|
# pp attributes |
||||||
|
# pp case_log.status |
||||||
|
# pp case_log.send(:mandatory_fields) |
||||||
|
end |
||||||
|
|
||||||
|
def start_date(xml_doc) |
||||||
|
day = Integer(field_value(xml_doc, "xmlns", "DAY")) |
||||||
|
month = Integer(field_value(xml_doc, "xmlns", "MONTH")) |
||||||
|
year = Integer(field_value(xml_doc, "xmlns", "YEAR")) |
||||||
|
Date.new(year, month, day) |
||||||
|
end |
||||||
|
|
||||||
|
def get_form_name_component(xml_doc, index) |
||||||
|
form_name = field_value(xml_doc, "meta", "form-name") |
||||||
|
form_type_components = form_name.split("-") |
||||||
|
form_type_components[index] |
||||||
|
end |
||||||
|
|
||||||
|
def needs_type(xml_doc) |
||||||
|
gn_sh = get_form_name_component(xml_doc, -1) |
||||||
|
case gn_sh |
||||||
|
when "GN" |
||||||
|
GN_SH[:general_needs] |
||||||
|
when "SH" |
||||||
|
GN_SH[:supported_housing] |
||||||
|
else |
||||||
|
raise "Unknown needstype value: #{gn_sh}" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
# This does not match renttype (CDS) which is derived by case logs logic |
||||||
|
def rent_type(xml_doc, attributes) |
||||||
|
sr_ar_ir = get_form_name_component(xml_doc, -2) |
||||||
|
|
||||||
|
case sr_ar_ir |
||||||
|
when "SR" |
||||||
|
RENT_TYPE[:social_rent] |
||||||
|
when "AR" |
||||||
|
if attributes["lar"] == 1 |
||||||
|
RENT_TYPE[:london_affordable_rent] |
||||||
|
else |
||||||
|
RENT_TYPE[:affordable_rent] |
||||||
|
end |
||||||
|
when "IR" |
||||||
|
if attributes["irproduct"] == IRPRODUCT[:rent_to_buy] |
||||||
|
RENT_TYPE[:rent_to_buy] |
||||||
|
elsif attributes["irproduct"] == IRPRODUCT[:london_living_rent] |
||||||
|
RENT_TYPE[:london_living_rent] |
||||||
|
elsif attributes["irproduct"] == IRPRODUCT[:other_intermediate_rent_product] |
||||||
|
RENT_TYPE[:other_intermediate_rent_product] |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
# def let_type(xml_doc, attributes) |
||||||
|
# # "1 Private Registered Provider" or "2 Local Authority" |
||||||
|
# # We do not store providertype since it comes from the organisation import |
||||||
|
# landlord = field_value(xml_doc, "xmlns", "Landlord").to_i |
||||||
|
# |
||||||
|
# if attributes["renttype"] == SR_AR_IR[:social_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:general_needs] && |
||||||
|
# landlord == PRP_LA[:private_registered_provider] |
||||||
|
# 1 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:social_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:supported_housing] && |
||||||
|
# landlord == PRP_LA[:private_registered_provider] |
||||||
|
# 2 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:social_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:general_needs] && |
||||||
|
# landlord == PRP_LA[:local_authority] |
||||||
|
# 3 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:social_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:supported_housing] && |
||||||
|
# landlord == PRP_LA[:local_authority] |
||||||
|
# 4 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:affordable_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:general_needs] && |
||||||
|
# landlord == PRP_LA[:private_registered_provider] |
||||||
|
# 5 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:affordable_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:supported_housing] && |
||||||
|
# landlord == PRP_LA[:private_registered_provider] |
||||||
|
# 6 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:affordable_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:general_needs] && |
||||||
|
# landlord == PRP_LA[:local_authority] |
||||||
|
# 7 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:affordable_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:supported_housing] && |
||||||
|
# landlord == PRP_LA[:local_authority] |
||||||
|
# 8 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:intermediate_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:general_needs] && |
||||||
|
# landlord == PRP_LA[:private_registered_provider] |
||||||
|
# 9 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:intermediate_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:supported_housing] && |
||||||
|
# landlord == PRP_LA[:private_registered_provider] |
||||||
|
# 10 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:intermediate_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:general_needs] && |
||||||
|
# landlord == PRP_LA[:local_authority] |
||||||
|
# 11 |
||||||
|
# elsif attributes["renttype"] == SR_AR_IR[:intermediate_rent] && |
||||||
|
# attributes["needstype"] == GN_SH[:supported_housing] && |
||||||
|
# landlord == PRP_LA[:local_authority] |
||||||
|
# 12 |
||||||
|
# else |
||||||
|
# raise "Could not infer rent type with rentype:#{attributes['renttype']} / needstype:#{attributes['needstype']} / landlord:#{landlord}" |
||||||
|
# end |
||||||
|
# end |
||||||
|
|
||||||
|
def find_organisation_id(xml_doc, field) |
||||||
|
old_visible_id = field_value(xml_doc, "xmlns", field).to_i |
||||||
|
landlord = field_value(xml_doc, "xmlns", "Landlord").to_i |
||||||
|
|
||||||
|
organisation = Organisation.find_by(old_visible_id:) |
||||||
|
# Quick hack: should be removed when all organisations are imported |
||||||
|
# Will fail in the future if the organisation is missing |
||||||
|
if organisation.nil? |
||||||
|
organisation = Organisation.new |
||||||
|
organisation.old_visible_id = old_visible_id |
||||||
|
organisation.provider_type = if landlord == 2 |
||||||
|
1 |
||||||
|
else |
||||||
|
2 |
||||||
|
end |
||||||
|
organisation.save! |
||||||
|
end |
||||||
|
organisation.id |
||||||
|
end |
||||||
|
|
||||||
|
def age(xml_doc, index) |
||||||
|
Integer(field_value(xml_doc, "xmlns", "P#{index}Age"), exception: false) |
||||||
|
end |
||||||
|
|
||||||
|
def sex(xml_doc, index) |
||||||
|
sex = field_value(xml_doc, "xmlns", "P#{index}Sex") |
||||||
|
case sex |
||||||
|
when "Male" |
||||||
|
"M" |
||||||
|
when "Female" |
||||||
|
"F" |
||||||
|
when "Other", "Non-binary" |
||||||
|
"X" |
||||||
|
when "Refused" |
||||||
|
"R" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def previous_postcode_known(xml_doc) |
||||||
|
previous_postcode_known = field_value(xml_doc, "xmlns", "Q12bnot") |
||||||
|
if previous_postcode_known == "Temporary or Unknown" |
||||||
|
0 |
||||||
|
else |
||||||
|
1 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def previous_postcode(xml_doc, attributes) |
||||||
|
previous_postcode_known = attributes["previous_postcode_known"] |
||||||
|
if previous_postcode_known.zero? |
||||||
|
nil |
||||||
|
else |
||||||
|
outcode = field_value(xml_doc, "xmlns", "PPOSTC1") |
||||||
|
incode = field_value(xml_doc, "xmlns", "PPOSTC2") |
||||||
|
"#{outcode} #{incode}" |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def london_affordable_rent(xml_doc) |
||||||
|
lar = unsafe_string_as_integer(xml_doc, "LAR") |
||||||
|
if lar == 1 |
||||||
|
1 |
||||||
|
else |
||||||
|
# We default to No for any other values (nil, not known) |
||||||
|
2 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def renewal(attributes) |
||||||
|
# Relet – renewal of fixed-term tenancy |
||||||
|
if attributes["rsnvac"] == 14 |
||||||
|
1 |
||||||
|
else |
||||||
|
0 |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
# Safe: A string that represents only an integer (or empty/nil) |
||||||
|
def safe_string_as_integer(xml_doc, attribute) |
||||||
|
str = field_value(xml_doc, "xmlns", attribute) |
||||||
|
Integer(str, exception: false) |
||||||
|
end |
||||||
|
|
||||||
|
# Unsafe: A string that has more than just the integer value |
||||||
|
def unsafe_string_as_integer(xml_doc, attribute) |
||||||
|
str = field_value(xml_doc, "xmlns", attribute) |
||||||
|
if str.blank? |
||||||
|
nil |
||||||
|
else |
||||||
|
str.to_i |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,10 @@ |
|||||||
|
class UpdateCaseLogsFields < ActiveRecord::Migration[7.0] |
||||||
|
def change |
||||||
|
change_table :case_logs, bulk: true do |t| |
||||||
|
t.integer :form, :lar, :irproduct |
||||||
|
t.remove :day, :month, :year, :other_hhmemb, type: :integer |
||||||
|
t.remove :ppostc1, :ppostc2, type: :string |
||||||
|
t.rename :intermediate_rent_product_name, :irproduct_other |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,532 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<Group xmlns="http://data.gov.uk/core/logs/2021-CORE-SR-GN" |
||||||
|
xmlns:app="http://www.w3.org/2007/app" |
||||||
|
xmlns:atom="http://www.w3.org/2005/Atom" |
||||||
|
xmlns:ev="http://www.w3.org/2001/xml-events" |
||||||
|
xmlns:meta="http://data.gov.uk/core/metadata" |
||||||
|
xmlns:svc="http://www.w3.org/2007/app" |
||||||
|
xmlns:xf="http://www.w3.org/2002/xforms" |
||||||
|
xmlns:xfimpl="http://www.w3.org/2002/xforms/implementation" |
||||||
|
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
||||||
|
xmlns:xxf="http://orbeon.org/oxf/xml/xforms" |
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
||||||
|
<meta:metadata xmlns:es="http://www.ecmascript.org/" |
||||||
|
xmlns:xqx="http://www.w3.org/2005/XQueryX" |
||||||
|
xmlns:XSLT="http://www.w3.org/1999/XSL/Transform/compile"> |
||||||
|
<meta:form-name>2021-CORE-SR-GN</meta:form-name> |
||||||
|
<meta:document-id>0ead17cb-1668-442d-898c-0d52879ff592</meta:document-id> |
||||||
|
<meta:owner-user-id>c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa |
||||||
|
</meta:owner-user-id> |
||||||
|
<meta:owner-institution-id>7c5bd5fb549c09a2c55d7cb90d7ba84927e64618 |
||||||
|
</meta:owner-institution-id> |
||||||
|
<meta:managing-institution-id>7c5bd5fb549c09a2c55d7cb90d7ba84927e64618 |
||||||
|
</meta:managing-institution-id> |
||||||
|
<meta:created-date>2021-10-08T14:48:17.096123Z</meta:created-date> |
||||||
|
<meta:modified-date>2021-10-08T14:48:17.096123Z</meta:modified-date> |
||||||
|
<meta:status>submitted-valid</meta:status> |
||||||
|
<meta:reporting-year>2021</meta:reporting-year> |
||||||
|
<meta:upload-method>Manual Entry</meta:upload-method> |
||||||
|
<meta:schema assert-valid="true"/> |
||||||
|
<meta:rules assert-valid="true"/> |
||||||
|
</meta:metadata> |
||||||
|
<Group> |
||||||
|
<Qdp>Yes</Qdp> |
||||||
|
<KeyDate>2021-09-30</KeyDate> |
||||||
|
<FORM>5786509</FORM> |
||||||
|
<Landlord source-value="1">1 Private Registered Provider</Landlord> |
||||||
|
<Group> |
||||||
|
<_1btenagree>1 This Landlord</_1btenagree> |
||||||
|
<_1bifanother/> |
||||||
|
<_1bCOREcode/> |
||||||
|
</Group> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<_2a>1 Yes</_2a> |
||||||
|
<Q2b>2 Assured</Q2b> |
||||||
|
<Q2ba/> |
||||||
|
<_2bTenCode>MAC003</_2bTenCode> |
||||||
|
<_2cYears/> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<P1Age override-field="">23</P1Age> |
||||||
|
<P1AR/> |
||||||
|
<P1Sex override-field="">Female</P1Sex> |
||||||
|
<P1Eco>6) Not Seeking Work</P1Eco> |
||||||
|
<P1Eth>1 White: English/Scottish/Welsh/Northern Irish/British</P1Eth> |
||||||
|
<P1Nat>1 UK national resident in UK</P1Nat> |
||||||
|
<P2Age override-field="">2</P2Age> |
||||||
|
<P2AR/> |
||||||
|
<P2Sex override-field="">Male</P2Sex> |
||||||
|
<P2Rel>Child</P2Rel> |
||||||
|
<P2Eco>9) Child under 16</P2Eco> |
||||||
|
<P3Age override-field=""/> |
||||||
|
<P3AR/> |
||||||
|
<P3Sex override-field=""/> |
||||||
|
<P3Rel/> |
||||||
|
<P3Eco/> |
||||||
|
<P4Age override-field=""/> |
||||||
|
<P4AR/> |
||||||
|
<P4Sex override-field=""/> |
||||||
|
<P4Rel/> |
||||||
|
<P4Eco/> |
||||||
|
<P5Age override-field=""/> |
||||||
|
<P5AR/> |
||||||
|
<P5Sex override-field=""/> |
||||||
|
<P5Rel/> |
||||||
|
<P5Eco/> |
||||||
|
<P6Age override-field=""/> |
||||||
|
<P6AR/> |
||||||
|
<P6Sex override-field=""/> |
||||||
|
<P6Rel/> |
||||||
|
<P6Eco/> |
||||||
|
<P7Age override-field=""/> |
||||||
|
<P7AR/> |
||||||
|
<P7Sex override-field=""/> |
||||||
|
<P7Rel/> |
||||||
|
<P7Eco/> |
||||||
|
<P8Age override-field=""/> |
||||||
|
<P8AR/> |
||||||
|
<P8Sex override-field=""/> |
||||||
|
<P8Rel/> |
||||||
|
<P8Eco/> |
||||||
|
<Group> |
||||||
|
<ArmedF>2 No</ArmedF> |
||||||
|
<LeftAF/> |
||||||
|
<Inj/> |
||||||
|
<Preg override-field="">2 No</Preg> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q6Ben>6 UC – with housing element (and not in receipt of Housing |
||||||
|
Benefit) |
||||||
|
</Q6Ben> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q7Ben>1 All</Q7Ben> |
||||||
|
<Q8Refused/> |
||||||
|
<Q8Money override-field="">600.00</Q8Money> |
||||||
|
<Q8a>2 Monthly</Q8a> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q9a>12 Property unsuitable because of overcrowding</Q9a> |
||||||
|
<Q9aa/> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<_9b override-field="">2 No</_9b> |
||||||
|
<Q10-a/> |
||||||
|
<Q10-b/> |
||||||
|
<Q10-c/> |
||||||
|
<Q10-f/> |
||||||
|
<Q10-g>Yes</Q10-g> |
||||||
|
<Q10-h/> |
||||||
|
<Q10ia>2 No</Q10ia> |
||||||
|
<Q10ib-1/> |
||||||
|
<Q10ib-2/> |
||||||
|
<Q10ib-3/> |
||||||
|
<Q10ib-4/> |
||||||
|
<Q10ib-5/> |
||||||
|
<Q10ib-6/> |
||||||
|
<Q10ib-7/> |
||||||
|
<Q10ib-8/> |
||||||
|
<Q10ib-9/> |
||||||
|
<Q10ib-10/> |
||||||
|
<Q11 override-field="">30 Fixed term Local Authority General Needs |
||||||
|
tenancy |
||||||
|
</Q11> |
||||||
|
<Q12a>Leeds</Q12a> |
||||||
|
<Q12aONS>E08000035</Q12aONS> |
||||||
|
<Q12b override-field="">LS8 3HX</Q12b> |
||||||
|
<Q12bnot/> |
||||||
|
<Q12c>5 5 years or more</Q12c> |
||||||
|
<Q12d>2 Less than 1 year</Q12d> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q13>1 Not homeless</Q13> |
||||||
|
<Q14a>1 Yes</Q14a> |
||||||
|
<Q14b1/> |
||||||
|
<Q14b2>2_Living_in_insanitary_or_overcrowded_or_unsatisfactory_housing |
||||||
|
</Q14b2> |
||||||
|
<Q14b3/> |
||||||
|
<Q14b4/> |
||||||
|
<Q14b5/> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q15CBL>1 Yes</Q15CBL> |
||||||
|
<Q15CHR>2 No</Q15CHR> |
||||||
|
<Q15CAP>2 No</Q15CAP> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q16>3 PRP lettings only - nominated by a local housing authority</Q16> |
||||||
|
</Group> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q17>4 Calendar monthly</Q17> |
||||||
|
<Q18ai override-field="">406.09</Q18ai> |
||||||
|
<Q18aii override-field="">32.02</Q18aii> |
||||||
|
<Q18aiii override-field=""/> |
||||||
|
<Q18aiv override-field=""/> |
||||||
|
<Q18av override-field="">438.11</Q18av> |
||||||
|
<Q18d>2 No</Q18d> |
||||||
|
<Q18dyes override-field=""/> |
||||||
|
<Q19void>2021-09-30</Q19void> |
||||||
|
<Q19repair/> |
||||||
|
<Q20 override-field="">0</Q20> |
||||||
|
<Q21a>MCB003</Q21a> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q22 override-field="">2</Q22> |
||||||
|
<Q23>1 Flat / maisonette</Q23> |
||||||
|
<Q24>1 Purpose built</Q24> |
||||||
|
<Q25>2 No</Q25> |
||||||
|
<Q26/> |
||||||
|
<Q27>15 First let of newbuild property</Q27> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<Q28Auth>Leeds</Q28Auth> |
||||||
|
<Q28ONS>E08000035</Q28ONS> |
||||||
|
<Q28pc override-field="">LS16 6FT</Q28pc> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<F1Age>1</F1Age> |
||||||
|
<F2Age>0</F2Age> |
||||||
|
<F3Age>0</F3Age> |
||||||
|
<F4Age>0</F4Age> |
||||||
|
<F5Age>0</F5Age> |
||||||
|
<F6Age>0</F6Age> |
||||||
|
<F7Age>0</F7Age> |
||||||
|
<F8Age>0</F8Age> |
||||||
|
<FAge>1</FAge> |
||||||
|
<F1>1</F1> |
||||||
|
<F2>0</F2> |
||||||
|
<F3>0</F3> |
||||||
|
<F4>0</F4> |
||||||
|
<F5>0</F5> |
||||||
|
<F6>0</F6> |
||||||
|
<F7>0</F7> |
||||||
|
<F8>0</F8> |
||||||
|
<F>1</F> |
||||||
|
<P1100>0</P1100> |
||||||
|
<P2100>0</P2100> |
||||||
|
<P3100>0</P3100> |
||||||
|
<P4100>0</P4100> |
||||||
|
<P5100>0</P5100> |
||||||
|
<P6100>0</P6100> |
||||||
|
<P7100>0</P7100> |
||||||
|
<P8100>0</P8100> |
||||||
|
<_100>0</_100> |
||||||
|
<P170>0</P170> |
||||||
|
<P270>0</P270> |
||||||
|
<P370>0</P370> |
||||||
|
<P470>0</P470> |
||||||
|
<P570>0</P570> |
||||||
|
<P670>0</P670> |
||||||
|
<P770>0</P770> |
||||||
|
<P870>0</P870> |
||||||
|
<_70>0</_70> |
||||||
|
<P1PT>0</P1PT> |
||||||
|
<P2PT>0</P2PT> |
||||||
|
<P3PT>0</P3PT> |
||||||
|
<P4PT>0</P4PT> |
||||||
|
<P5PT>0</P5PT> |
||||||
|
<P6PT>0</P6PT> |
||||||
|
<P7PT>0</P7PT> |
||||||
|
<P8PT>0</P8PT> |
||||||
|
<PT>0</PT> |
||||||
|
<P1FT>0</P1FT> |
||||||
|
<P2FT>0</P2FT> |
||||||
|
<P3FT>0</P3FT> |
||||||
|
<P4FT>0</P4FT> |
||||||
|
<P5FT>0</P5FT> |
||||||
|
<P6FT>0</P6FT> |
||||||
|
<P7FT>0</P7FT> |
||||||
|
<P8FT>0</P8FT> |
||||||
|
<FT>0</FT> |
||||||
|
<P1Stud>0</P1Stud> |
||||||
|
<P2Stud>0</P2Stud> |
||||||
|
<P3Stud>0</P3Stud> |
||||||
|
<P4Stud>0</P4Stud> |
||||||
|
<P5Stud>0</P5Stud> |
||||||
|
<P6Stud>0</P6Stud> |
||||||
|
<P7Stud>0</P7Stud> |
||||||
|
<P8Stud>0</P8Stud> |
||||||
|
<Stud>0</Stud> |
||||||
|
<P2Child>1</P2Child> |
||||||
|
<P3Child>0</P3Child> |
||||||
|
<P4Child>0</P4Child> |
||||||
|
<P5Child>0</P5Child> |
||||||
|
<P6Child>0</P6Child> |
||||||
|
<P7Child>0</P7Child> |
||||||
|
<P8Child>0</P8Child> |
||||||
|
<Child>1</Child> |
||||||
|
<P2Partner>0</P2Partner> |
||||||
|
<P3Partner>0</P3Partner> |
||||||
|
<P4Partner>0</P4Partner> |
||||||
|
<P5Partner>0</P5Partner> |
||||||
|
<P6Partner>0</P6Partner> |
||||||
|
<P7Partner>0</P7Partner> |
||||||
|
<P8Partner>0</P8Partner> |
||||||
|
<Partner>0</Partner> |
||||||
|
<Q1bV1>0</Q1bV1> |
||||||
|
<Q1bV2>0</Q1bV2> |
||||||
|
<Q1bV3>1</Q1bV3> |
||||||
|
<Q1bVT>1</Q1bVT> |
||||||
|
<P1Adult>1</P1Adult> |
||||||
|
<P2Adult>0</P2Adult> |
||||||
|
<P3Adult>0</P3Adult> |
||||||
|
<P4Adult>0</P4Adult> |
||||||
|
<P5Adult>0</P5Adult> |
||||||
|
<P6Adult>0</P6Adult> |
||||||
|
<P7Adult>0</P7Adult> |
||||||
|
<P8Adult>0</P8Adult> |
||||||
|
<PAdultT>1</PAdultT> |
||||||
|
<P2PAge>0</P2PAge> |
||||||
|
<P3PAge>0</P3PAge> |
||||||
|
<P4PAge>0</P4PAge> |
||||||
|
<P5PAge>0</P5PAge> |
||||||
|
<P6PAge>0</P6PAge> |
||||||
|
<P7PAge>0</P7PAge> |
||||||
|
<P8PAge>0</P8PAge> |
||||||
|
<PAGE>23</PAGE> |
||||||
|
<P2ChildAge>2</P2ChildAge> |
||||||
|
<P3ChildAge>0</P3ChildAge> |
||||||
|
<P4ChildAge>0</P4ChildAge> |
||||||
|
<P5ChildAge>0</P5ChildAge> |
||||||
|
<P6ChildAge>0</P6ChildAge> |
||||||
|
<P7ChildAge>0</P7ChildAge> |
||||||
|
<P8ChildAge>0</P8ChildAge> |
||||||
|
<ChildAgeMin>2</ChildAgeMin> |
||||||
|
<AgeDiff1>23</AgeDiff1> |
||||||
|
<AgeDiff2>21</AgeDiff2> |
||||||
|
<AgeDiff3>23</AgeDiff3> |
||||||
|
<TODAY>2021-10-08Z</TODAY> |
||||||
|
<FutureLimit>2021-10-23Z</FutureLimit> |
||||||
|
<minmax1/> |
||||||
|
<minmax2/> |
||||||
|
<minmax3/> |
||||||
|
<minmax4/> |
||||||
|
<minmax5/> |
||||||
|
<minmax6/> |
||||||
|
<minmax7/> |
||||||
|
<minmax8/> |
||||||
|
<minmax9/> |
||||||
|
<minmax0/> |
||||||
|
<minmax10/> |
||||||
|
<minmaxT/> |
||||||
|
<Q10av>0</Q10av> |
||||||
|
<Q10bv>0</Q10bv> |
||||||
|
<Q10cv>0</Q10cv> |
||||||
|
<Q10fv>0</Q10fv> |
||||||
|
<Q10gv>20</Q10gv> |
||||||
|
<Q10hv>0</Q10hv> |
||||||
|
<Q10Validate>20</Q10Validate> |
||||||
|
<Q2bv>C</Q2bv> |
||||||
|
<P2Agev>1</P2Agev> |
||||||
|
<P2Sexv>1</P2Sexv> |
||||||
|
<P2Relv>1</P2Relv> |
||||||
|
<P2Ecov>1</P2Ecov> |
||||||
|
<P2valid>4</P2valid> |
||||||
|
<P3Agev>0</P3Agev> |
||||||
|
<P3Sexv>0</P3Sexv> |
||||||
|
<P3Relv>0</P3Relv> |
||||||
|
<P3Ecov>0</P3Ecov> |
||||||
|
<P3valid>0</P3valid> |
||||||
|
<P4Agev>0</P4Agev> |
||||||
|
<P4Sexv>0</P4Sexv> |
||||||
|
<P4Relv>0</P4Relv> |
||||||
|
<P4Ecov>0</P4Ecov> |
||||||
|
<P4valid>0</P4valid> |
||||||
|
<P5Agev>0</P5Agev> |
||||||
|
<P5Sexv>0</P5Sexv> |
||||||
|
<P5Relv>0</P5Relv> |
||||||
|
<P5Ecov>0</P5Ecov> |
||||||
|
<P5valid>0</P5valid> |
||||||
|
<P6Agev>0</P6Agev> |
||||||
|
<P6Sexv>0</P6Sexv> |
||||||
|
<P6Relv>0</P6Relv> |
||||||
|
<P6Ecov>0</P6Ecov> |
||||||
|
<P6valid>0</P6valid> |
||||||
|
<P7Agev>0</P7Agev> |
||||||
|
<P7Sexv>0</P7Sexv> |
||||||
|
<P7Relv>0</P7Relv> |
||||||
|
<P7Ecov>0</P7Ecov> |
||||||
|
<P7valid>0</P7valid> |
||||||
|
<P8Agev>0</P8Agev> |
||||||
|
<P8Sexv>0</P8Sexv> |
||||||
|
<P8Relv>0</P8Relv> |
||||||
|
<P8Ecov>0</P8Ecov> |
||||||
|
<P8valid>0</P8valid> |
||||||
|
<Q14b1v>0</Q14b1v> |
||||||
|
<Q14b2v>1</Q14b2v> |
||||||
|
<Q14b3v>0</Q14b3v> |
||||||
|
<Q14b4v>0</Q14b4v> |
||||||
|
<Q14b5v>0</Q14b5v> |
||||||
|
<Q14bv>1</Q14bv> |
||||||
|
<P2Other>0</P2Other> |
||||||
|
<P3Other>0</P3Other> |
||||||
|
<P4Other>0</P4Other> |
||||||
|
<P5Other>0</P5Other> |
||||||
|
<P6Other>0</P6Other> |
||||||
|
<P7Other>0</P7Other> |
||||||
|
<P8Other>0</P8Other> |
||||||
|
<Other>0</Other> |
||||||
|
<P2ARefused>0</P2ARefused> |
||||||
|
<P3ARefused>0</P3ARefused> |
||||||
|
<P4ARefused>0</P4ARefused> |
||||||
|
<P5ARefused>0</P5ARefused> |
||||||
|
<P6ARefused>0</P6ARefused> |
||||||
|
<P7ARefused>0</P7ARefused> |
||||||
|
<P8ARefused>0</P8ARefused> |
||||||
|
<TAREUSED>0</TAREUSED> |
||||||
|
<P2RRefused>0</P2RRefused> |
||||||
|
<P3RRefused>0</P3RRefused> |
||||||
|
<P4RRefused>0</P4RRefused> |
||||||
|
<P5RRefused>0</P5RRefused> |
||||||
|
<P6RRefused>0</P6RRefused> |
||||||
|
<P7RRefused>0</P7RRefused> |
||||||
|
<P8RRefused>0</P8RRefused> |
||||||
|
<TotRRefused>0</TotRRefused> |
||||||
|
<TOTREFUSED>0</TOTREFUSED> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<ChildBen>21.05</ChildBen> |
||||||
|
<TOTADULT>1</TOTADULT> |
||||||
|
<NEW_OLD>2 Existing Tenant</NEW_OLD> |
||||||
|
<Q18aValid>1</Q18aValid> |
||||||
|
<Q18Valid>1</Q18Valid> |
||||||
|
<VACDAYS>0</VACDAYS> |
||||||
|
<HHMEMB>2</HHMEMB> |
||||||
|
<HHTYPEP1A>1</HHTYPEP1A> |
||||||
|
<HHTYPEP2A>0</HHTYPEP2A> |
||||||
|
<HHTYPEP3A>0</HHTYPEP3A> |
||||||
|
<HHTYPEP4A>0</HHTYPEP4A> |
||||||
|
<HHTYPEP5A>0</HHTYPEP5A> |
||||||
|
<HHTYPEP6A>0</HHTYPEP6A> |
||||||
|
<HHTYPEP7A>0</HHTYPEP7A> |
||||||
|
<HHTYPEP8A>0</HHTYPEP8A> |
||||||
|
<TADULT>1</TADULT> |
||||||
|
<HHTYPEP1E>0</HHTYPEP1E> |
||||||
|
<HHTYPEP2E>0</HHTYPEP2E> |
||||||
|
<HHTYPEP3E>0</HHTYPEP3E> |
||||||
|
<HHTYPEP4E>0</HHTYPEP4E> |
||||||
|
<HHTYPEP5E>0</HHTYPEP5E> |
||||||
|
<HHTYPEP6E>0</HHTYPEP6E> |
||||||
|
<HHTYPEP7E>0</HHTYPEP7E> |
||||||
|
<HHTYPEP8E>0</HHTYPEP8E> |
||||||
|
<TELDER>0</TELDER> |
||||||
|
<HHTYPEP1C>0</HHTYPEP1C> |
||||||
|
<HHTYPEP2C>1</HHTYPEP2C> |
||||||
|
<HHTYPEP3C>0</HHTYPEP3C> |
||||||
|
<HHTYPEP4C>0</HHTYPEP4C> |
||||||
|
<HHTYPEP5C>0</HHTYPEP5C> |
||||||
|
<HHTYPEP6C>0</HHTYPEP6C> |
||||||
|
<HHTYPEP7C>0</HHTYPEP7C> |
||||||
|
<HHTYPEP8C>0</HHTYPEP8C> |
||||||
|
<TCHILD>1</TCHILD> |
||||||
|
<HHTYPE>5 = 1 adult + 1 or more children</HHTYPE> |
||||||
|
<WEEKLYINC>133.33</WEEKLYINC> |
||||||
|
<INCOME>154.38</INCOME> |
||||||
|
<TYPEHB>7.00</TYPEHB> |
||||||
|
<AFFRATE/> |
||||||
|
<Weekinc>154.38</Weekinc> |
||||||
|
<LETTYPE>1 Private Registered Provider</LETTYPE> |
||||||
|
<PLOACODE/> |
||||||
|
<OACODE/> |
||||||
|
<GOVREG>E12000003</GOVREG> |
||||||
|
<OWNINGORGID>1034</OWNINGORGID> |
||||||
|
<OWNINGORGNAME>LEEDS & YORKSHIRE HA Ltd</OWNINGORGNAME> |
||||||
|
<MANINGORGNAME>LEEDS & YORKSHIRE HA Ltd</MANINGORGNAME> |
||||||
|
<HCNUM>LH0704</HCNUM> |
||||||
|
<MANHCNUM>LH0704</MANHCNUM> |
||||||
|
<LAHA/> |
||||||
|
<MANINGORGID>1034</MANINGORGID> |
||||||
|
<HBTYPE1/> |
||||||
|
<HBTYPE2/> |
||||||
|
<HBTYPE3/> |
||||||
|
<HBTYPE4/> |
||||||
|
<HBTYPE5/> |
||||||
|
<HBTYPE6/> |
||||||
|
<HBTYPE7>7</HBTYPE7> |
||||||
|
<HBTYPE8/> |
||||||
|
<HBTYPE9/> |
||||||
|
<HBTYPE10/> |
||||||
|
<HBTYPE11/> |
||||||
|
<HBTYPE12/> |
||||||
|
<HBTYPE13/> |
||||||
|
<HBTYPE14/> |
||||||
|
<HBTYPE15/> |
||||||
|
<HBTYPE>7</HBTYPE> |
||||||
|
<P1R>0</P1R> |
||||||
|
<P2R>0</P2R> |
||||||
|
<P3R>0</P3R> |
||||||
|
<P4R>0</P4R> |
||||||
|
<P5R>0</P5R> |
||||||
|
<P6R>0</P6R> |
||||||
|
<P7R>0</P7R> |
||||||
|
<P8R>0</P8R> |
||||||
|
<REFUSEDTOT>0</REFUSEDTOT> |
||||||
|
<REFUSED/> |
||||||
|
<WTSHORTFALL/> |
||||||
|
<WRENT>93.71</WRENT> |
||||||
|
<WTCHARGE>101.10</WTCHARGE> |
||||||
|
<WSCHARGE>7.39</WSCHARGE> |
||||||
|
<WPSCHRGE/> |
||||||
|
<WSUPCHRG/> |
||||||
|
<WTSHORTFALL1/> |
||||||
|
<WTSHORTFALLHB/> |
||||||
|
<WTSHORTFALLHE/> |
||||||
|
<WRENT1>93.71</WRENT1> |
||||||
|
<WTCHARGE1>101.10</WTCHARGE1> |
||||||
|
<WSCHARGE1>7.39</WSCHARGE1> |
||||||
|
<WPSCHRGE1/> |
||||||
|
<WSUPCHRG1/> |
||||||
|
</Group> |
||||||
|
<Group> |
||||||
|
<BSa>0</BSa> |
||||||
|
<BSb>1</BSb> |
||||||
|
<BSc>0</BSc> |
||||||
|
<BScm>0</BScm> |
||||||
|
<BScf>0</BScf> |
||||||
|
<BSd>0</BSd> |
||||||
|
<BSdm>0.5</BSdm> |
||||||
|
<BSdf>0</BSdf> |
||||||
|
<BSe>0</BSe> |
||||||
|
<BSem>0</BSem> |
||||||
|
<BSef>0</BSef> |
||||||
|
<BSf>1</BSf> |
||||||
|
<BSfm>0</BSfm> |
||||||
|
<BSff>0</BSff> |
||||||
|
<BSfmx>1</BSfmx> |
||||||
|
<BSffx>0</BSffx> |
||||||
|
<BEDROOMSTAND>2</BEDROOMSTAND> |
||||||
|
<BEDMINUSBEDS>0</BEDMINUSBEDS> |
||||||
|
<WRENTreduced>93.71</WRENTreduced> |
||||||
|
<NonDepDeduct>0</NonDepDeduct> |
||||||
|
<RENTHB/> |
||||||
|
<ChildAllowan>68.6</ChildAllowan> |
||||||
|
<PrsnlAllowan>74.7</PrsnlAllowan> |
||||||
|
<HousBenDisAl>25</HousBenDisAl> |
||||||
|
<PAIDHB/> |
||||||
|
<HCNETAF/> |
||||||
|
<ChldAlloCat1>1</ChldAlloCat1> |
||||||
|
<ChldAlloCat2>0</ChldAlloCat2> |
||||||
|
<P2NnDepDedct>0</P2NnDepDedct> |
||||||
|
<P3NnDepDedct>0</P3NnDepDedct> |
||||||
|
<P4NnDepDedct>0</P4NnDepDedct> |
||||||
|
<P5NnDepDedct>0</P5NnDepDedct> |
||||||
|
<P6NnDepDedct>0</P6NnDepDedct> |
||||||
|
<P7NnDepDedct>0</P7NnDepDedct> |
||||||
|
<P8NnDepDedct>0</P8NnDepDedct> |
||||||
|
<DAY>30</DAY> |
||||||
|
<MONTH>9</MONTH> |
||||||
|
<YEAR>2021</YEAR> |
||||||
|
<VDAY>30</VDAY> |
||||||
|
<VMONTH>9</VMONTH> |
||||||
|
<VYEAR>2021</VYEAR> |
||||||
|
<MRCDAY/> |
||||||
|
<MRCMONTH/> |
||||||
|
<MRCYEAR/> |
||||||
|
<PPOSTC1>LS8</PPOSTC1> |
||||||
|
<PPOSTC2>3HX</PPOSTC2> |
||||||
|
<POSTCODE>LS16</POSTCODE> |
||||||
|
<POSTCOD2>6FT</POSTCOD2> |
||||||
|
</Group> |
||||||
|
</Group> |
@ -0,0 +1,29 @@ |
|||||||
|
require "rails_helper" |
||||||
|
|
||||||
|
RSpec.describe Imports::CaseLogsImportService do |
||||||
|
let(:remote_folder) { "case_logs" } |
||||||
|
let(:fixture_directory) { "spec/fixtures/softwire_imports/case_logs" } |
||||||
|
let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } |
||||||
|
let(:case_log_file) { File.open("#{fixture_directory}/#{case_log_id}.xml") } |
||||||
|
let(:storage_service) { instance_double(StorageService) } |
||||||
|
let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } |
||||||
|
|
||||||
|
context "when importing users" do |
||||||
|
subject(:case_log_service) { described_class.new(storage_service) } |
||||||
|
|
||||||
|
before do |
||||||
|
# Stub the S3 file listing and download |
||||||
|
allow(storage_service).to receive(:list_files) |
||||||
|
.and_return(["#{remote_folder}/#{case_log_id}.xml"]) |
||||||
|
allow(storage_service).to receive(:get_file_io) |
||||||
|
.with("#{remote_folder}/#{case_log_id}.xml") |
||||||
|
.and_return(case_log_file) |
||||||
|
# Stub the form handler to use the real form |
||||||
|
allow(FormHandler.instance).to receive(:get_form).with(anything).and_return(real_2021_2022_form) |
||||||
|
end |
||||||
|
|
||||||
|
it "successfully create a case log with the expected data" do |
||||||
|
case_log_service.create_logs(remote_folder) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue