Skip to content

Commit c452af5

Browse files
author
Nick Grippin
committed
back to basic applicant income model
1 parent 53dded5 commit c452af5

File tree

5 files changed

+51
-59
lines changed

5 files changed

+51
-59
lines changed

model/shared/src/main/scala/hmda/model/publication/reports/ApplicantIncome.scala

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,5 @@ package hmda.model.publication.reports
22

33
case class ApplicantIncome(
44
applicantIncome: ApplicantIncomeEnum,
5-
characteristics: Characteristics
5+
borrowerCharacteristics: List[BorrowerCharacteristic]
66
)
7-
8-
case class Characteristics(
9-
raceBorrowerCharacteristic: RaceBorrowerCharacteristic,
10-
ethnicityBorrowerCharacteristic: EthnicityBorrowerCharacteristic,
11-
minorityStatusBorrowerCharacteristic: MinorityStatusBorrowerCharacteristic
12-
) {
13-
def +(other: Characteristics): Characteristics = {
14-
Characteristics(
15-
raceBorrowerCharacteristic + other.raceBorrowerCharacteristic,
16-
ethnicityBorrowerCharacteristic + other.ethnicityBorrowerCharacteristic,
17-
minorityStatusBorrowerCharacteristic + other.minorityStatusBorrowerCharacteristic
18-
)
19-
}
20-
}

publication/src/main/scala/hmda/publication/reports/national/N52.scala

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,22 @@ case class N52(
2323
def +(a52: A52): N52 = {
2424

2525
val combinedIncomes = a52.applicantIncomes.map(income => {
26-
val newC = applicantIncomes.find(i => i.applicantIncome == income.applicantIncome).get.characteristics
27-
val originalC = income.characteristics
26+
val newC = applicantIncomes.find(i => i.applicantIncome == income.applicantIncome).get.borrowerCharacteristics
27+
val originalC = income.borrowerCharacteristics
2828

29-
ApplicantIncome(income.applicantIncome, newC + originalC)
29+
val nR = newC.find(_.isInstanceOf[RaceBorrowerCharacteristic]).get.asInstanceOf[RaceBorrowerCharacteristic]
30+
val oR = originalC.find(_.isInstanceOf[RaceBorrowerCharacteristic]).get.asInstanceOf[RaceBorrowerCharacteristic]
31+
val cR = oR + nR
32+
33+
val nE = newC.find(_.isInstanceOf[EthnicityBorrowerCharacteristic]).get.asInstanceOf[EthnicityBorrowerCharacteristic]
34+
val oE = originalC.find(_.isInstanceOf[EthnicityBorrowerCharacteristic]).get.asInstanceOf[EthnicityBorrowerCharacteristic]
35+
val cE = oE + nE
36+
37+
val nM = newC.find(_.isInstanceOf[MinorityStatusBorrowerCharacteristic]).get.asInstanceOf[MinorityStatusBorrowerCharacteristic]
38+
val oM = originalC.find(_.isInstanceOf[MinorityStatusBorrowerCharacteristic]).get.asInstanceOf[MinorityStatusBorrowerCharacteristic]
39+
val cM = oM + nM
40+
41+
ApplicantIncome(income.applicantIncome, List(cR, cE, cM))
3042
})
3143

3244
val combinedDispositions = a52.total.map(disposition => {
Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package hmda.publication.reports.protocol
22

3-
import hmda.model.publication.reports.{ ApplicantIncome, Characteristics }
3+
import hmda.model.publication.reports.ApplicantIncome
44

5-
trait ApplicantIncomeProtocol extends ApplicantIncomeEnumProtocol with CharacteristicsProtocol {
5+
trait ApplicantIncomeProtocol extends ApplicantIncomeEnumProtocol with BorrowerCharacteristicProtocol {
66
implicit val applicantIncomeFormat = jsonFormat2(ApplicantIncome.apply)
77
}
8-
9-
trait CharacteristicsProtocol extends BorrowerCharacteristicProtocol {
10-
implicit val characteristicsProtocol = jsonFormat3(Characteristics.apply)
11-
}

publication/src/main/scala/hmda/publication/reports/protocol/BorrowerCharacteristicProtocol.scala

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,48 +5,45 @@ import spray.json._
55

66
trait BorrowerCharacteristicProtocol extends CharacteristicProtocol {
77

8-
implicit object RaceBorrowerCharacteristicFormat extends RootJsonFormat[RaceBorrowerCharacteristic] {
9-
override def write(obj: RaceBorrowerCharacteristic): JsValue =
10-
JsObject(
11-
"characteristic" -> JsString("Race"),
12-
"races" -> obj.toJson
13-
)
14-
15-
override def read(json: JsValue): RaceBorrowerCharacteristic = json match {
8+
implicit object BorrowerCharacteristicFormat extends RootJsonFormat[BorrowerCharacteristic] {
9+
override def write(obj: BorrowerCharacteristic): JsValue = obj match {
10+
11+
case RaceBorrowerCharacteristic(races) =>
12+
JsObject(
13+
"characteristic" -> JsString("Race"),
14+
"races" -> races.toJson
15+
)
16+
17+
case EthnicityBorrowerCharacteristic(ethnicities) =>
18+
JsObject(
19+
"characteristic" -> JsString("Ethnicity"),
20+
"ethnicities" -> ethnicities.toJson
21+
)
22+
23+
case MinorityStatusBorrowerCharacteristic(minorityStatus) =>
24+
JsObject(
25+
"characteristic" -> JsString("Minority Status"),
26+
"minorityStatus" -> minorityStatus.toJson
27+
)
28+
29+
}
30+
31+
override def read(json: JsValue): BorrowerCharacteristic = json match {
1632
case JsObject(fields) if fields.isDefinedAt("races") =>
1733
RaceBorrowerCharacteristic(
1834
fields("races").convertTo[List[RaceCharacteristic]]
1935
)
20-
}
21-
}
22-
23-
implicit object EthnicityBorrowerCharacteristicFormat extends RootJsonFormat[EthnicityBorrowerCharacteristic] {
24-
override def write(obj: EthnicityBorrowerCharacteristic): JsValue =
25-
JsObject(
26-
"characteristic" -> JsString("Ethnicity"),
27-
"ethnicities" -> obj.toJson
28-
)
2936

30-
override def read(json: JsValue): EthnicityBorrowerCharacteristic = json match {
3137
case JsObject(fields) if fields.isDefinedAt("ethnicities") =>
3238
EthnicityBorrowerCharacteristic(
3339
fields("ethnicities").convertTo[List[EthnicityCharacteristic]]
3440
)
35-
}
36-
}
3741

38-
implicit object MinorityStatusBorrowerCharacteristicFormat extends RootJsonFormat[MinorityStatusBorrowerCharacteristic] {
39-
override def write(obj: MinorityStatusBorrowerCharacteristic): JsValue =
40-
JsObject(
41-
"characteristic" -> JsString("Minority Status"),
42-
"minorityStatus" -> obj.toJson
43-
)
44-
45-
override def read(json: JsValue): MinorityStatusBorrowerCharacteristic = json match {
4642
case JsObject(fields) if fields.isDefinedAt("minorityStatus") =>
4743
MinorityStatusBorrowerCharacteristic(
4844
fields("minorityStatus").convertTo[List[MinorityStatusCharacteristic]]
4945
)
5046
}
47+
5148
}
5249
}

publication/src/main/scala/hmda/publication/reports/util/ReportUtil.scala

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,16 @@ object ReportUtil extends SourceUtils {
118118
def borrowerCharacteristicsByIncomeInterval[ec: EC, mat: MAT, as: AS](
119119
larsByIncome: Map[ApplicantIncomeEnum, Source[LoanApplicationRegisterQuery, NotUsed]],
120120
dispositions: List[DispositionType]
121-
): Map[ApplicantIncomeEnum, Future[Characteristics]] = {
121+
): Map[ApplicantIncomeEnum, Future[List[BorrowerCharacteristic]]] = {
122122
larsByIncome.map {
123123
case (income, lars) =>
124-
val characteristics =
125-
for {
126-
r <- raceBorrowerCharacteristic(lars, dispositions)
127-
e <- ethnicityBorrowerCharacteristic(lars, dispositions)
128-
m <- minorityStatusBorrowerCharacteristic(lars, dispositions)
129-
} yield Characteristics(r, e, m)
124+
val characteristics = Future.sequence(
125+
List(
126+
raceBorrowerCharacteristic(lars, dispositions),
127+
ethnicityBorrowerCharacteristic(lars, dispositions),
128+
minorityStatusBorrowerCharacteristic(lars, dispositions)
129+
)
130+
)
130131
income -> characteristics
131132
}
132133
}

0 commit comments

Comments
 (0)