Skip to content

Commit 5f236df

Browse files
author
Nick Grippin
committed
potential aggregation method
1 parent 3a9ac8b commit 5f236df

File tree

1 file changed

+30
-66
lines changed
  • publication/src/main/scala/hmda/publication/reports/national

1 file changed

+30
-66
lines changed
Lines changed: 30 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
package hmda.publication.reports.aggregate
2-
3-
import java.util.Calendar
1+
package hmda.publication.reports.national
42

53
import akka.NotUsed
64
import akka.stream.scaladsl.Source
75
import hmda.census.model.MsaIncomeLookup
86
import hmda.model.publication.reports.ApplicantIncomeEnum._
9-
import hmda.model.publication.reports.{ ApplicantIncome, Disposition, MSAReport }
7+
import hmda.model.publication.reports._
108
import hmda.publication.reports._
11-
import hmda.publication.reports.national.NationalAggregateReport
12-
import hmda.publication.reports.util.DateUtil._
13-
import hmda.publication.reports.util.ReportUtil._
9+
import hmda.publication.reports.aggregate.A52
1410
import hmda.publication.reports.util.ReportsMetaDataLookup
1511
import hmda.query.model.filing.LoanApplicationRegisterQuery
1612

@@ -25,7 +21,31 @@ case class N52(
2521
description: String = N52.metaData.description
2622
) extends NationalAggregateReport {
2723
def +(a52: A52): N52 = {
24+
val combinedIncomes = a52.applicantIncomes.map(income => {
25+
val bc = applicantIncomes.find(i => i.applicantIncome == income.applicantIncome).get.borrowerCharacteristics
26+
27+
val originalRc = bc.find(_.isInstanceOf[RaceBorrowerCharacteristic]).get.asInstanceOf[RaceBorrowerCharacteristic]
28+
val additionalRc = income.borrowerCharacteristics.find(_.isInstanceOf[RaceBorrowerCharacteristic]).get.asInstanceOf[RaceBorrowerCharacteristic]
29+
30+
val originalEc = bc.find(_.isInstanceOf[EthnicityBorrowerCharacteristic]).get.asInstanceOf[EthnicityBorrowerCharacteristic]
31+
val additionalEc = income.borrowerCharacteristics.find(_.isInstanceOf[EthnicityBorrowerCharacteristic]).get.asInstanceOf[EthnicityBorrowerCharacteristic]
32+
33+
val originalMsc = bc.find(_.isInstanceOf[MinorityStatusBorrowerCharacteristic]).get.asInstanceOf[MinorityStatusBorrowerCharacteristic]
34+
val additionalMsc = income.borrowerCharacteristics.find(_.isInstanceOf[MinorityStatusBorrowerCharacteristic]).get.asInstanceOf[MinorityStatusBorrowerCharacteristic]
2835

36+
ApplicantIncome(income.applicantIncome, List(
37+
originalRc + additionalRc,
38+
originalEc + additionalEc,
39+
originalMsc + additionalMsc
40+
))
41+
})
42+
43+
val combinedDispositions = a52.total.map(disposition => {
44+
val originalDisposition = total.find(d => d.disposition == disposition.disposition).get
45+
disposition + originalDisposition
46+
})
47+
48+
N52(year, reportDate, combinedIncomes, combinedDispositions, table, description)
2949
}
3050
}
3151

@@ -38,67 +58,11 @@ object N52 {
3858
// Property Type 1,2
3959
// Purpose of Loan 1
4060
def generate[ec: EC, mat: MAT, as: AS](larSource: Source[LoanApplicationRegisterQuery, NotUsed]): Future[N52] = {
41-
val lars = larSource
42-
.filter { lar =>
43-
(lar.loanType == 1) &&
44-
(lar.propertyType == 1 || lar.propertyType == 2) &&
45-
(lar.purpose == 1)
46-
}
47-
val larsWithIncome = lars.filter(lar => lar.income != "NA")
48-
4961
val fipsList = MsaIncomeLookup.values.map(_.fips)
50-
val yearF = calculateYear(larSource)
51-
val totalF = calculateDispositions(lars, dispositions)
52-
53-
54-
fipsList.foreach(fipsCode => {
55-
val incomeIntervals = calculateMedianIncomeIntervals(fipsCode)
56-
val larsByIncome = larsByIncomeInterval(larsWithIncome, incomeIntervals)
57-
val borrowerCharacteristicsByIncomeF = borrowerCharacteristicsByIncomeInterval(larsByIncome, dispositions)
58-
59-
for {
60-
lars50BorrowerCharacteristics <- borrowerCharacteristicsByIncomeF(LessThan50PercentOfMSAMedian)
61-
lars50To79BorrowerCharacteristics <- borrowerCharacteristicsByIncomeF(Between50And79PercentOfMSAMedian)
62-
lars80To99BorrowerCharacteristics <- borrowerCharacteristicsByIncomeF(Between80And99PercentOfMSAMedian)
63-
lars100To120BorrowerCharacteristics <- borrowerCharacteristicsByIncomeF(Between100And119PercentOfMSAMedian)
64-
lars120BorrowerCharacteristics <- borrowerCharacteristicsByIncomeF(GreaterThan120PercentOfMSAMedian)
65-
} yield {
66-
val income50 = ApplicantIncome(
67-
LessThan50PercentOfMSAMedian,
68-
lars50BorrowerCharacteristics
69-
)
70-
val income50To79 = ApplicantIncome(
71-
Between50And79PercentOfMSAMedian,
72-
lars50To79BorrowerCharacteristics
73-
)
74-
val income80To99 = ApplicantIncome(
75-
Between80And99PercentOfMSAMedian,
76-
lars80To99BorrowerCharacteristics
77-
)
78-
val income100To120 = ApplicantIncome(
79-
Between100And119PercentOfMSAMedian,
80-
lars100To120BorrowerCharacteristics
81-
)
82-
val income120 = ApplicantIncome(
83-
GreaterThan120PercentOfMSAMedian,
84-
lars120BorrowerCharacteristics
85-
)
86-
87-
val applicantIncomes = List(
88-
income50,
89-
income50To79,
90-
income80To99,
91-
income100To120,
92-
income120
93-
)
9462

95-
N52(
96-
year,
97-
formatDate(Calendar.getInstance().toInstant),
98-
applicantIncomes,
99-
total
100-
)
101-
}
63+
fipsList.foldLeft(N52())((n, f) => {
64+
val a52 = A52.generate(larSource, f)
65+
a52.map{report => n + report}
10266
})
10367
}
10468
}

0 commit comments

Comments
 (0)